如何解析带有 Adob​​e CID 字符的 PDF

How to parse PDF with Adobe CID characters

社区。

我一直在尝试使用多种工具来解析 PDF 文档。 比如pdfminer for Python,pdf-parse for Node.js,但是其中none可以解析一个空格的Adobe CID字符,我得到如下序列。

(cid:411)(cid:579)(cid:556)(cid:851)(cid:411)(cid:579)

是否有可以解析这些字符的工具?

您在评论中提供了示例:

I attach the pdf file. For example, the line POLLEN ALLERGY is not being parsed correctly.

在您的 PDF 文件中,标题“11. POLLEN ALLERGY”是使用以下命令绘制的:

<003900390048000300130012000f000f0008001100030004000f000f00080015000a001c> Tj

绘制时的活动字体是具有Identity-H编码的复合字体,没有映射的ToUnicode映射,和一个 Adobe-Identity-0 ROS。所以基本上所有人都知道它是水平绘制的并且 double-byte。 (因此,在上面的说明中,您可以将十六进制字符串拆分为每个 4 个十六进制数字的子序列,以获得所有字形的字符代码。)

根据 PDF 规范 ISO 32000-1 的第 9.10.2 节 - 将字符代码映射到 Unicode 值 - 进行文本提取,因此,每个字形都指向最终的

If these methods fail to produce a Unicode value, there is no way to determine what the character code represents in which case a conforming reader may choose a character code of their choosing.

因此,行 POLLEN ALLERGY 未被正确解析的原因, 只是因为 PDF 不包含 文本提取所需的信息 仅基于 PDF 信息。

这也显示在 Adob​​e Acrobat Reader 中,该行的复制和粘贴也 returns 没有任何可理解的内容。


不过,有一个选项可以正确地提取文本:您需要一个文本提取器,它可以查看 PDF 语法中的信息,并进入嵌入式字体程序以进行文本提取。这里确实有从字形到 Unicode 代码点的正确映射。

不过,我不知道哪个 - 如果有的话 - python 文本提取器确实使用了这些额外信息。