gpt4 book ai didi

python - 将 CID 字体代码解码为等效的 ASCII 字符

转载 作者:行者123 更新时间:2023-11-28 16:37:24 25 4
gpt4 key购买 nike

我正在尝试从一堆 PDF 中挖掘一些文本,其中一些嵌入了 CID fonts在输出中:

(cid:80)(cid:72)(cid:87)(cid:68)(cid:70)(cid:76)(cid:87)(cid:76)(cid:72)(cid:86)(cid:3)
(cid:177)(cid:3)(cid:71)(cid:72)(cid:191)(cid:81)(cid:72)(cid:71)(cid:3)(cid:69)(cid:92
(cid:3)(cid:56)(cid:49)(cid:3)(cid:43)(cid:68)(cid:69)(cid:76)(cid:87)(cid:68)(cid:87)
(cid:3)(cid:68)(cid:86)(cid:3)(cid:70)(cid:76)(cid:87)(cid:76)(cid:72)(cid:86)(cid:3)
(cid:90)(cid:76)(cid:87)(cid:75)(cid:3)(cid:80)(cid:82)(cid:85)(cid:72)(cid:3)(cid:87)
(cid:75)(cid:68)(cid:81)(cid:3)(cid:20)(cid:19)(cid:3)

当我查看 PDF 中的确切文本片段时,这些字母肯定可以转换为 ASCII:

screenshot of corresponding portion of pdf

这可能表明暴力解码会起作用(读取与一堆 CID 代码相对应的文本片段并以这种方式创建映射),但这在很多情况下是否可靠不同的PDF?是否存在从这些 CID 代码到 ASCII 字符的可靠映射,还是高度依赖于 PDF 中的字体?如何确定 CID 代码如 (cid:72) 对应的 ASCII 字符?

无论其值(value)如何,我都是 extracting the text using PDFminer ,这似乎是唯一实际报告 CID 代码的工具。如果有更好的工具可以将 PDF 转换为 HTML 或任何其他可解析的文本格式,我愿意接受其他建议!

作为额外的奖励,这个问题似乎与其他一些未回答的问题有关,因此这里有丰富的声誉:

最佳答案

虽然对于此处的简单示例,您可能可以通过猜测来做到这一点,但要真正正确地做到这一点,您还需要 2 条额外的信息:

1) 相关字体的注册表订购补充 (ROS) 信息。这通常是“Adobe-Japan1-5”之类的东西,是存储在字体中的信息属性。 ROS 决定如何解释 CID。一种字体的给定 CID 不一定与另一种字体的 CID 相同,除非 ROS 相同。也就是说:Adobe-Japan1-5中的CID12345与Adobe-GB1-3中的CID12345不是同一个形状!

2) 有了 ROS 信息,选择一个兼容的 CMap 并通过它解码。 ASCII 有点短视;我会选择 ASCII 是其子集的 Unicode。您可以在 https://github.com/adobe-type-tools/cmap-resources 找到 Adob​​e 定义的 ROS 的 CMap 文件。

有关直接来自发明人的 CID 和 CMap 的更多信息,请访问 http://www.adobe.com/content/dam/Adobe/en/devnet/font/pdfs/5014.CIDFont_Spec.pdf

关于python - 将 CID 字体代码解码为等效的 ASCII 字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24089245/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com