首页 > 解决方案 > 为什么一个 CID 号映射到一个 CMap 文件中的两个 UTF16 编码?

问题描述

我正在调试使用itext解析PDF文本的一个奇怪问题:无法正确解析字符“起”。

最后我发现那个字符(带有 CID 代码2510)被映射到 Unicode <e44a>。在阅读了 CID-Keyed Font 的文档(https://www.adobe.com/content/dam/acom/en/devnet/font/pdfs/5092.CID_Overview.pdf)后,我很困惑为什么一个 CID 号码可以映射到两种不同的 UTF16 编码?

在此处输入图像描述

第一次出现: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 网址:长和 2018 年年报。第 3 行中的第 13 个字符,第 128 页。

在此处输入图像描述

结果如下所示:

在此处输入图像描述

此文件适用于 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);

标签: pdffontsitext

解决方案


推荐阅读