Почему PDF без cmap может отображать символы? - PullRequest
0 голосов
/ 26 февраля 2020

РЕДАКТИРОВАНИЕ в 17:54 26.02.2020

PDF-файлы по следующей ссылке выглядят нормальными, но при копировании выдают искаженный текст, поскольку в них отсутствует cmap. Я не понимаю, почему рендеринг выполняется правильно, и хочу знать, какая информация используется для определения символов для рендеринга.

https://github.com/angea/PDF101/tree/master/handcoded/textextract

Обратите внимание, что я ' Я прошу механизм, но не решение.

1 Ответ

0 голосов
/ 27 февраля 2020

На странице 1 есть два шрифта, и в обоих отсутствует какая-либо информация о кодировке в метаданных PDF. В частности, нет карты ToUnicode.

Поэтому программы чтения PDF должны полагаться на сам шрифт и, возможно, коды символов, используемые в потоке контента.

На приведенном ниже снимке экрана слева это данные шрифта в PDF, а справа - поток контента первой страницы. Как видите, первый символьный код 0x2e, который отображается на глиф "T", но в Unicode U + 002e это "точка". Следующий код символа - 0x08, который является управляющим символом. Вот почему, если вы выберете текст в PDF, первым символом будет «.» а второй будет мусором.

enter image description here

Почему PDF без cmap может отображать символы?

Поскольку Встроенный CMap шрифтов отображает коды символов в потоке содержимого страницы PDF на правильный глиф в шрифте, поэтому вы видите глифы, которые имеют смысл. Однако как в PDF, так и в самом шрифте отсутствуют какие-либо разумные сопоставления Unicode, поэтому вы получаете мусор при копировании + вставке текста.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...