pdf - 如何在 PDF 的 /FontFile2 流对象中“查看”单个字形?
问题描述
如何提取从字符 ID (CID) 到 PDF 嵌入 CID 字体的字形指令的映射?
一些背景
我收集了大量的 PDF,其中一些有错误的 \ToUnicode CMAP 数据,这会导致从文件中提取文本时出现问题。
由于呈现的页面看起来不错,我想了解 PDF 中包含的 /FontFile2 流对象(基于 OpenType 的嵌入式 CID 类型字体)。仅仅能够将流解析为从 CID 到字形指令的映射就足够了,而无需了解如何解释指令。
(CID 在集合中不断从一个文件转移到下一个文件,即使只有大约六种字体左右。所以我希望,即使不了解如何解释字形指令,我也能通过比较错误和正确的映射来唯一地识别它们并修复 \ToUnicode 映射,甚至可能只是应用简单的多数规则来确定映射“字形指令”-> Unicode,并使用它来更正单个文件的映射。如果你看到这种方法有任何问题,请告诉我!)
到目前为止我尝试过的
这个问题在本质上是相似的,但我的问题有一个不同的重点:我只想能够将 CID 映射到一些全球唯一的签名(例如描述该字形的指令的哈希值)。
我猜答案隐藏在CID 字体规范中的某个地方,但我希望避免阅读它......
具体例子
其中一个文件是 PDF;以下是一些相关的对象:
31 0 obj
<<
/CIDSystemInfo 32 0 R
/CIDToGIDMap /Identity
/Subtype /CIDFontType2
/Type /Font
/W 33 0 R
/FontDescriptor 34 0 R
/DW 1000
/BaseFont /ABCDEE+David,Bold
>>
endobj
34 0 obj
<<
/Descent -265
/FontWeight 700
/StemV 52
/FontName /ABCDEE+David,Bold
/Ascent 735
/ItalicAngle 0
/AvgWidth 521
/FontBBox [-195 -265 1009 735]
/Type /FontDescriptor
/CapHeight 735
/Flags 32
/FontFile2 35 0 R
/MaxWidth 1205
/XHeight 250
>>
endobj
35 0 obj
<<
/Length1 53608
/Length 53608>>
[Omitted Stream]
如果可能的话,我想从[Omitted Stream]
足够的信息中提取,以便能够识别每个 CID 代码将调用哪一组指令。
解决方案
推荐阅读
- javascript - 如何在 reactJS 中获取正文中的图像
- sql - 如何使用 Aginity pro 对字段求和?
- react-native - React Native — 不变违规:ART 已从 React Native 中删除
- ios - 如何直接从 UIImages 播放新制作的动画视频以查看而不将其保存到任何目录
- javascript - Jquery - 如何调用基于 console.log 数据的方法?
- c - QEMU pcie_host 如何将物理地址转换为 pcie 地址
- mysql - AWS Glue 读取数据库中默认设置的空值,如何避免?
- android - 全屏意图远程通知
- xamarin.forms - 将 Xamarin apk 发布到云存储而不是 Google Play 商店
- audio - 如何在 MacOS 上使用 pulseaudio 创建虚拟麦克风