Почему один номер CID отображается на две кодировки UTF16 в одном файле CMap? - PullRequest
2 голосов
/ 27 февраля 2020

Я отлаживаю странную проблему синтаксического анализа текста PDF с использованием itext: символ "起" не может быть проанализирован правильно.

Наконец, я обнаружил, что символ (с кодом CID 2510) был сопоставлен с Unicode <e44a>. После прочтения документа для шрифта с ключом CID (https://www.adobe.com/content/dam/acom/en/devnet/font/pdfs/5092.CID_Overview.pdf) я совершенно не понимаю, почему один номер CID можно сопоставить двум разным кодировкам UTF16?

enter image description here

Первое вхождение: https://github.com/adobe-type-tools/cmap-resources/blob/master/Adobe-CNS1-7/CMap/UniCNS-UTF16-H#L12636

Второе вхождение: https://github.com/adobe-type-tools/cmap-resources/blob/master/Adobe-CNS1-7/CMap/UniCNS-UTF16-H#L12636

И ... выигрывает второй (неправильный).

...
<8d77> 2510
...
<e44a> 2510
...

==== упомянутый PDF-файл ====

PDF URL: CK Hutchison 2018 Годовой отчет, 13-й символ в строке 3, стр. 128.

enter image description here

Результат выглядит следующим образом:

enter image description here

Этот файл отлично работает с PDFBox.

Конверт: itext7-core: 7.1.10, macOS 10.13.6

Код:

    InputStream inputStream = getClass().getResourceAsStream("/hk-annual-report/00001.pdf");
    PdfDocument pdfDocument = new PdfDocument(new PdfReader(inputStream));
    PdfPage page = pdfDocument.getPage(128);
    String s = PdfTextExtractor.getTextFromPage(page);
    System.out.println(s);
...