彻底解决pdf中因为缺失未嵌入字体而无法显示的问题

今天解决了一个长久以来的难题。

从最早的金庸武侠小说的某种pdf版本开始,就有某些pdf会在显示某些字体出现问题。现在也经常遇到某些没有做好的pdf存在某些内容无法显示,成为黑点的情况。

问题的症结来自这里:

当制作pdf的时候,acrobat或其他制作工具往往并不会嵌入所有字体,而是把一些系统上常有的字体认为不需要嵌入就忽略过去。但其他人的系统不一定有这个字体,显示时acrobat会试图找最接近的字体替代,但是有时没有找到合适的字体,就悲剧了。

QUOTE:

(Acrobat) 對於亞洲文字,Acrobat 使用亞洲語言包中安裝的字體或使用者系統上相似的字體。某些語言或編碼不詳的字體無法替代;在這些情況下,文字在檔案中顯示為小點。

对于这种情况,一般流传的方法是,用touch up工具去编辑这些内容,acrobat会报告找不到字体,然后尝试替换。然而,对某些文件acrobat并不这样报告,就最多只能修改你选中的文字字体,而不能把全文的这种字体替换。

我找了一下工具,有个工具Pstill表面上能够解决问题,你可以定义一个字体替换表,把某种字体替换成另外一种字体。但是在实际转换中,2M的pdf文件就花了很久,然后内存不够退出。

然后我想到,既然acrobat找不到合适的字体替换,何不自己找一个字体伪装成那个缺失的字体呢?

用acrobat打开这个pdf文件,然后ctrl D看文件信息,字体部分,看到这个字体就是罪魁祸首--FZDBSJW--GB1-0

图片附件: 1.jpg (2011-9-15 11:58, 32.29 K)

随便找一个中文字体(为了操作速度,我找了一个体积最小的字体,用的是方正兰亭黑简,不是GBK全字符集,但是一般够了),用FontCreator打 开,tools - auto naming,把这个字体改名为FZDBSJW--GB1-0,finish。把字体另存为1.ttf。实际上在这个pdf中一共有三个字体找不到替代字 体,因此我把方正兰亭黑简分别改名为这三个名字,各自另存。

然后把1.ttf, 2.ttf, 3.ttf分别右键,安装,安装为系统字体。然后再打开pdf,一切显示正常!

图片附件: 2.jpg (2011-9-15 11:56, 14.85 K)

当然,字体替换是可能存在不完美之处的,你的替换字体和原字体的字形大小不一定一致,可能会出现排版上的偏差。不过我的经验,这种缺失字体的地方往往是目录,章节标题之类的地方,实际上问题不大。另外你可以根据字体的名字猜测一下原字体的类型,找个比较接近的字体来伪装。

对于完美主义者来说,到了这一步还没有完,因为我并不想在系统里多几个专门为这个文件而用的字体。因此我把pdf再打印成pdf,内嵌字体,具体的操作参考

http://www.hi-pda.com/forum/blog.php?tid=720981&starttime=0&endtime=0

这次转换之后,所有字体都内嵌了,然后就可以把刚才的伪装字体删除了。

到此,这个问题就算彻底解决了。当然,还有一种可能麻烦之处,就是pdf文件中有许多缺失字体,那么一个个做字体会比较繁琐,这个就没有办法了,就我遇见的这种文件而言,一般不会太多。

更新:发现文件中有的地方替换字体后显示的字是错的。估计是原本的字体编码方式不规范(好像许多方正字体都是ANSI编码),因此替换的字体编码方式不同之后,映射的字就是错字。因此可能需要找一个ANSI编码的字体才能让显示正确。当然最好的办法是找到原本那个字体。

搜索了一下,FZDBSJW--GB1-0就是方正大标宋简体

http://www.font5.com.cn/font.php?id=18

原pdf作者可能也想嵌入,但因为字体版权限制而未能嵌入

http://zhidao.baidu.com/question/169101112.html?fr=qrl&cid=864&index=1

Adobe Illustrator提示:无法将字体 FZZYJW--GB1-0 嵌入到 PDF 文档。描边的文本将不可见。

找到字体名字,就可能找到字体了。然后安装字体就是了。于是这个方法到了最后变成了找字体安装,最原始的解决方案...

当然,还是有很大可能找不到字体下载,那时还是可以用这个改字体名字的方法,我相信字体的编码就那么几种,准备几种有代表性的字体,用改名的方法应该能得到字体对应后文字不出错的结果。

另外,就算找到了上面的方正字体,也因为版权限制而无法嵌入,或者有其他问题,那时仍然需要替换字体的方法来嵌入字体。