PDF 的存在只为了解决一个问题:一份不管谁打开都长得一样的文档。所以当你发出一个 PDF,对方回报说标题变成了别的字体、版式跑掉了、有一行被挤到第二页去——感觉上,这个格式在它唯一的工作上失败了。
它没有失败。是导出的时候有某件具体的事出了错,而嫌疑犯有四个。
PDF 不是用名字去引用字体、然后祈祷对方有。它会内嵌字体——实际的字形轮廓被复制进文件里。阅读器是用文档自己带着的那些形状来画文字,不是用显示它的那台电脑上装了什么。
这就是为什么一个在设计师电脑上、用了四套授权字体做出来的 PDF,在一台一套都没有的机器上能正确打开。字体跟着文件一起走了。
下面每一种失败,都是“那个内嵌没有发生,或者发生得不完整”。
最常见的原因。很多导出器提供“跳过内嵌”的选项——有时候是为了缩小文件,有时候是授权限制,有时候只是一个没人去改的默认值。
没有内嵌字体,阅读器就只能自己想办法。它看文件里记着的字体名称,在本机系统里找,找不到,然后替代一个它判断相近的。结果就是你的文档用了一套你从来没选过的字体,而且每一行的宽度都略有不同。
解法在导出的那一刻:找到那个通常叫“嵌入字体”的设置,把它打开。一个 PDF 一旦在没有内嵌字体的情况下被做出来,原本的字形就是不在文件里,也没办法从它身上救回来。
把整套字体嵌进去很浪费——一套完整的中日韩字体可能好几 MB,而一封两页的信可能只用到八十个不同的字。所以导出器会做子集化:只嵌入文档实际用到的字形。
这几乎总是正确的行为,而且在有人去编辑那个 PDF 之前都不会惹事。打一个子集里没有的字——一个带重音的字母、一个货币符号、一个原文里没出现过的中文字——就没有字形可以画。编辑器要么替那一个字换一套字体,要么显示一个方框。
这就是为什么被编辑过的 PDF 常常有一个词的字体不对。解法是去编辑原始文档然后重新导出,而不是编辑 PDF。
PDF 定义了十四种字体,预期阅读器自己提供——Helvetica、Times、Courier 的各种变体,加上 Symbol 和 ZapfDingbats。PDF 可以引用这些而不嵌入任何东西,而且在历史上那是常规做法。
麻烦在于“提供 Helvetica”这句话在不同系统上意思不一样。一个阅读器给你真的 Helvetica,另一个拿 Arial 顶替,第三个又是别的。度量值略有差异,于是文字重排、断行位置移动。
如果一份文档的外观是重要的,连这些也嵌进去。体积代价很小,而那份模糊就消失了。
“一个程序直接导出成 PDF”和“一份文档被丢进某个转换步骤”之间有真实的差别——网页服务、邮件网关、用一套办公软件去打开另一套做的文件。
每一次转换都是字体走失的机会。一套办公软件打开一个 Word 文件,而那个文件用的字体它没装,它会在屏幕上替代掉,然后忠实地把替代品嵌进去。那个 PDF 内部是一致的,而且是错的。
这也是“你看起来正确、收件人看起来不对,而你们用的是‘同一个’转换工具”的常见解释:你的机器有那些字体,他的没有。
修之前,先弄清楚文件里到底装了什么。PDF 会记录它用了哪些字体、每一个是不是内嵌的,查看那份清单就能马上回答问题:
ABCDEF+)→ 原因二。改原始文档,不要改 PDF。最后这一点就算你不做典藏也值得知道。PDF/A 存在的理由,正是因为“字体没有被内嵌”是 PDF 不再忠实呈现它本来该呈现的东西的头号原因。