Но как эти коды символов связаны со значениями Unicode?По сути, как средство просмотра PDF может отображать глиф с использованием этого сопоставления?
Коды символов, которые можно найти в потоках содержимого PDF, не должны быть связаны со значениями Unicode каким-либо очевидным образом.В частности, средство просмотра PDF вообще не нуждается в кодовой точке Unicode для того, чтобы код символа отображал соответствующий глиф.
В PDF шрифт имеет отображение (или последовательность отображений) из кода символа вИдентификатор глифа в программе шрифтов, и это отображение может быть совершенно произвольным.
Например, в случае встроенных подмножеств шрифтов программа шрифтов подмножества часто создается путем предоставления первому используемому на странице глифа начального идентификатора глифа n , затем задайте второй, другой глиф на идентификаторе этой страницы n + 1 , затем следующий, другой идентификатор глифа n + 2 и т. д., и т. д., а затем символкоды часто идентичны идентификаторам глифов, т.е. приведенное выше отображение является отображением идентификаторов.Если больше нет никакой дополнительной информации, экстрактор текста не имеет возможности правильно выполнить свою работу.
Я хочу уточнить причины проблемы
Регулярное извлечение текстаобычно имеет следующие параметры для поиска значения Unicode для кода символа:
шрифт PDF может включать карту ToUnicode (отображение изкод символа в Unicode) для поддержки таких операций, как поиск строк или копирование и вставка в программе просмотра PDF.Эта карта незамедлительно обеспечивает отображение потребностей экстрактора текста.
Осторожно, однако: эти ToUnicode карты могут быть неполными и иногда даже содержать намеренно неправильные отображения!
Определение кодировки шрифта PDF может содержать имя предварительно определенной стандартной кодировки (например, WinAnsiEncoding или GBpc-EUC-H * 1040 *) или стандартизированное имя символа (например, * 1041).* пробел , семь или ntilde ) для данного кода.Экстрактор текста просто должен знать кодировку, представленную этим именем кодировки, или код, представленный этим символьным именем.
Но Кодировка также может быть тождеством ( Identity – H). и Identity – V с код символа = код глифа ), который ничего не выдает, и имя символа также может быть нестандартизированным (например, g17).
В спецификации PDF говорится: Если эти методы не могут получить значение Unicode, невозможно определить, что представляет собой символьный код, в каком случаесоответствующий читатель может выбрать код символа по своему выбору.
В случае вашего вывода текста, я бы предположил, что шрифт PDF имеет неполную карту ToUnicode .
На самом деле есть еще несколько мест для поиска дополнительной информации, например, программа шрифта может включать собственное отображение своих символов в Unicode, но эта дополнительная информация также является необязательной..
... и причины его незаконности.
В случае всех вышеперечисленных вариантов я не вижу нарушения какой-либо разумной лицензии на шрифт, в частности, какбольшинство из этих опций даже не рассматривали саму программу шрифтов (например, * .ttf), а просто заключали ее в метаданные PDF.
С другой стороны, если, например, у вас была идея создать ToUnicode сопоставляет те шрифты, у которых отсутствует такая карта, рисуя каждый глиф шрифта на растровом изображении, отделенном от всего остального и применяя к нему OCR, вы, как получатель PDF, неожиданно используете программу шрифтовнарисовать что-то еще, кроме исходного документа, и это может рассматриваться как использование, на которое не распространяется лицензия.