Согласно pdf_reference_1-7, ToUnicode CMap имеет больший приоритет, чем кодировка, но здесь у меня есть файл противоположного типа, что мне делать - PullRequest
1 голос
/ 01 июля 2019

исходный код: (\ 037) Tj

CID 31 должен быть отображен в '✓' в соответствии с Разницами кодирования , что правильно

BaseEncoding: WinAnsiEncoding

Различия: [31, uni2713]

CID 31 отображается в '3' в соответствии с ToUnicode CMap, что неверно

CMap:

/CIDInit /ProcSet findresource begin
12 dict begin
begincmap
/CIDSystemInfo
<< /Registry (Adobe)
/Ordering (UCS) /Supplement 0 >> def
/CMapName /Adobe-Identity-UCS def
/CMapType 2 def
1 begincodespacerange
<0000> <FFFF>
endcodespacerange
2 beginbfchar
<1F> <0033>
<0020> <0020>
endbfchar
endcmap CMapName currentdict /CMap defineresource pop end end

1 Ответ

0 голосов
/ 02 июля 2019

В формате PDF рендеринг и извлечение текста - это два разных пути.В отличие от, скажем, HTML, в PDF это два отдельных действия.

Согласно тому, что вы указали, поток содержимого страницы имеет код символа \ 037 (восьмеричное).Для рендеринга используется кодировка, частью которой является разница, поэтому используется индекс глифа в кодировке шрифтов uni2713.

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

Причина этого заключается в том, что, хотя коды символов могут отображаться только на один глиф в конкретном шрифте,один и тот же код символа может отображаться в несколько значений Юникода.Скажите U + FB01 (лигатура).

и обнаружили, что не существует достаточно хорошей программы для извлечения текста и таблиц из PDF.

Возможно, вы не видели текст иинструмент для извлечения столов, разработанный компанией, для которой я работаю.https://www.pdftron.com/document-understanding

https://www.pdftron.com/pdf-tools/pdf-table-extraction

...