为什么没有cmap的PDF可以呈现字符?

为什么没有cmap的PDF可以呈现字符?,pdf,Pdf,编辑时间:2020年2月26日17:54 下面链接中的PDF看起来很正常,但在复制时会出现乱码,因为它们缺少cmap。我不明白为什么渲染会正确执行,我想知道哪些信息用于确定要渲染的角色 请注意,我要求的是机制,而不是解决方案。第1页上有两种字体,它们都缺少PDF元数据中的任何编码信息。特别是没有图尼科德地图 因此,PDF阅读器必须依赖字体本身,也可能依赖内容流中使用的字符代码 在下面的屏幕截图中,左侧是PDF中的字体数据,右侧是第一页的内容流。如您所见,第一个字符代码是0x2e,它映射到字形T,

编辑时间:2020年2月26日17:54

下面链接中的PDF看起来很正常,但在复制时会出现乱码,因为它们缺少cmap。我不明白为什么渲染会正确执行,我想知道哪些信息用于确定要渲染的角色


请注意,我要求的是机制,而不是解决方案。

第1页上有两种字体,它们都缺少PDF元数据中的任何编码信息。特别是没有图尼科德地图

因此,PDF阅读器必须依赖字体本身,也可能依赖内容流中使用的字符代码

在下面的屏幕截图中,左侧是PDF中的字体数据,右侧是第一页的内容流。如您所见,第一个字符代码是0x2e,它映射到字形T,但在Unicode U+002e中是句点。下一个字符代码是0x08,它是一个控制字符。这就是为什么,如果从PDF中选择文本,第一个字符将是。第二种是垃圾

为什么没有cmap的PDF可以呈现字符

因为字体内部CMap将PDF页面内容流中的字符代码映射到字体中的正确字形,所以您可以看到有意义的字形。但是,PDF和字体本身都缺少任何合理的Unicode映射,因此在复制并粘贴文本时会产生垃圾。

根据 CMAP是CID和GID之间的映射。它可以在CMAP和文件可用时进行渲染。
TOUNICODE CMAP是CID和GID之间的映射。它使您可以从PDF中提取信息。

我认为有时人们会故意使用垃圾unicode映射生成PDF文件,以防止文本提取。在这里发布PDF供审查是最好的做法。不管怎样,你可能需要做OCR来修复PDF。对不起,我不是在问解决方案,而是在问机制。我在最初的帖子中添加了PDF链接。