我遇到了一个奇怪的问题,PDF 及其包含的/ToUnicode
CMap 只影响 macOS 预览版,其他测试过的查看器都运行正常。问题是我不知道是包含的/ToUnicode
CMap 有问题还是预览版有问题。
这是有问题的 PDF:https://github.com/user-attachments/files/19538203/example.pdf以及出现此问题的Github 问题。
如果在 macOS 预览版中打开该 PDF,选中并复制文本,则“Hello from HexaPD”之后的所有内容都是错误的。其他查看者可以正常复制整个文本。
当前状态(已编辑):
生成 PDF 的库 HexaPDF 使用了一种优化方法
\r
,避免创建包含 ASCII 字符、(
和)
的字符代码\
。原因是,在序列化为 PDF 文字字符串时,需要对这些字符进行转义。如果关闭此优化,则生成的文件(参见https://github.com/user-attachments/files/19575820/example.pdf)可以在 macOS Preview 中完美运行(即复制和粘贴有效)。
完全删除
/ToUnicode
CMap 会导致文本无法复制。这意味着 macOS 预览版确实使用了此 CMap,并且它很可能是罪魁祸首。添加虚拟条目
<0000><0000>
不起作用。<000D><0044>
向CMap添加虚拟条目/ToUnicode
不起作用。如果字符代码不是从 1 开始而是从 14 开始,则会导致前 13 个字符无效,即使情况变得更糟。
在阅读了 PDF 规范和“5014 Adobe CMap 和 CIDFont 文件规范”的各个部分后,我认为
/ToUnicode
上面两个链接文件中的 CMap 是正确的。
/ToUnicode
如果您能提供任何关于生成的CMap 是否无效或是否是 macOS Preview 的错误见解,我们将不胜感激!