Mythsman


努力工作,认真生活。


PDF字体乱码问题分析

背景

最近身体有恙,于是就想起来整理下这几年体检的电子报告汇总看看。结果发现在善诊平台下载的体检报告在电脑上看直接乱码了。不过这种字符集的问题怎么能难得了本码农呢,所以就尝试起各种办法进行恢复,结果发现这果然是个深坑。。。

问题

本来好好的一个 PDF 报告,结果打开后画风是这样的:

我本地的环境是 Macbook,尝试了用 Chrome 打开、自带的 Preview 工具打开,都是同样的结果。除了 ASCII 字符能展示,其他所有的中文信息都没有,但是 PDF 中的所有图片都能正常展示。这么看大概率还是中文字体的问题。

分析

EXIF信息

不管如何,首先肯定要看一下这个 PDF 本身带的 EXIF 信息,寻找一些分析线索。这里 mac 下可以直接在 Preview 里看,不过我更喜欢用命令行工具 exiftool 看。

$ brew install exiftool
$ exiftool -a -G1:2 report.pdf
[ExifTool]      ExifTool Version Number         : 12.42
[System:Other]  File Name                       : report.pdf
[System:Other]  Directory                       : .
[System:Other]  File Size                       : 522 kB
[System:Other]  File Permissions                : -rw-r--r--
[System:Time]   File Modification Date/Time     : 2022:10:27 11:06:00+08:00
[System:Time]   File Access Date/Time           : 2022:10:27 14:14:04+08:00
[System:Time]   File Inode Change Date/Time     : 2022:10:27 15:34:02+08:00
[File:Other]    File Type                       : PDF
[File:Other]    File Type Extension             : pdf
[File:Other]    MIME Type                       : application/pdf
[PDF:Document]  PDF Version                     : 1.7
[PDF:Document]  Linearized                      : No
[PDF:Document]  PDF Version                     : 1.7
[PDF:Document]  Tagged PDF                      : Yes
[PDF:Document]  Page Count                      : 11
[PDF:Document]  Page Mode                       : UseNone
[PDF:Document]  Title                           :
[PDF:Document]  Subject                         : FastReport PDF export
[PDF:Document]  Keywords                        : 宋体, Bold, -, SimSun;宋体, -, SimSun;微软雅黑, -, Microsoft, YaHei;微软雅黑, Bold, -, Microsoft, YaHei, Negreta;宋体, Bold, -, SimSun;宋体, -, SimSun;微软雅黑, -, Microsoft, YaHei;微软雅黑, Bold, -, Microsoft, YaHei, Negreta;
[PDF:Document]  Creator                         :
[PDF:Document]  Producer                        :
[PDF:Author]    Author                          : FastReport
[PDF:Time]      Create Date                     : 2021:02:24 15:35:03
[PDF:Time]      Modify Date                     : 2021:02:24 15:35:03

划一下重点:

  1. Keywords 字段似乎展示了他使用的字体信息,看起来都是微软字体。
  2. Author 和 Subject 字段似乎展示了生成这个 PDF 的工具:FastReport

众所周知 Mac 是不带微软字体的,那么这个问题似乎就是微软字体导致的。

微软字体替换

既然是 Mac 找不到微软字体,那我就把微软字体安装到本地应该就行了吧。于是我就找了个 Windows 电脑,跑去 C:\Windows\Fonts 下把所有的 ttf , ttc 文件拷贝到 MacBook 的 ~/Library/Fonts 下,作为当前用户的字体。

当然,这些字体看起来比较多,但是重要的还是 sim (中易系列)和 msyh (微软雅黑系列) 打头的这几个。

C:\Windows\Fonts> dir|findstr sim
2019/10/15  21:46        10,578,152 simfang.ttf
2019/10/15  21:46         9,753,388 simhei.ttf
2019/10/15  21:46        11,787,328 simkai.ttf
2019/12/07  17:08        18,214,472 simsun.ttc
2019/12/07  17:08        17,064,180 simsunb.ttf

C:\Windows\Fonts> dir|findstr msyh
2019/12/07  17:08        19,647,736 msyh.ttc
2019/12/07  17:09        16,829,116 msyhbd.ttc
2019/12/07  17:09        12,139,380 msyhl.ttc

可是,安装好后发现并不起作用,Chrome 和 Preview 还是不能用,感觉这就不太合理了。于是我把 PDF 拷回 Windows 下试试,发现果然连 Windows 自己都不能打开。。。

思考了一下,既然 PDF 格式主要是 Adobe 公司主导的,是不是他家的官方软件就能搞定呢?

Adobe Acrobat 的尝试

看网上有人说 Adobe Acrobat 有个 Chrome 插件,据说能解决很多乱码问题。于是就抱着试试看的心情装了一个。

果然没什么卵用。

考虑到 Adobe Acrobat 是收费的,为了这个小问题直接买有点不合适,又懒得找破解,于是就去 PDD 花 9¥ 买了个破解版。

软件是童叟无欺的,不过还是没什么卵用,依然预览起来都是乱码。而且还报了一个乱码的错,似乎是在说找不到一些字体(这些字体的名字是乱码的)。一番搜寻,发现有人在 Google Group 里提到:

通常对于字体的识别方式是先在文档内部寻找内嵌字体文件,如果没有字体文件,那么就根据文档所使用的字体名称在用户本地查找 相应的字体,最后使用替代机制——利用本地的默认字体来显示。
很不幸的是,一般的默认字体都是不识别非 acsii 字符的,所以就会出现各种乱码和字体很丑的 情况。

再结合报错时的一大堆乱码,那么我有理由进一步怀疑:如果文件的文本字符集有问题,而字体名又是非纯 ASCII 码的中文名,那么文本字符集的问题就会导致字体名的解析问题,进而就会导致字体解析的问题。但是究竟具体要怎么做才能修正字符集呢?不知道。

忽然想起来 PDF 传到电脑前明明在手机上预览过,于是我把目光转到了手机。。。

WPS 的逆袭

把 PDF 发回我的小米手机,发现果然能成功打开。

既然这样,那我是不是可以在手机上对 PDF 进行编辑,将有问题的字体切换成好使的通用字体,再重新保存呢?

小米默认采用的是 WPS 的组件,下载 WPS 后尝试编辑发现竟然又要冲会员。不能忍,于是下载了一个不要钱的 福昕PDF编辑器。结果福昕编辑器竟然又不能打开了。

难道说只能用 WPS 打开?于是我又在 Mac 上下载了 WPS,果然能打开了。。。

绕了一圈,能否正确打开这个 PDF 这件事跟平台没有任何关系,只跟软件有关。不得不说 FastReport 这个工具生成的 PDF 是真的流氓。

可是 WPS 的 PDF 编辑功能需要开通超级会员。没办法,只能又去 PDD 花了 2.9¥ 买了一个 ⭐️WPS 一天超级会员试用版⭐️

但是问题又来了,PDF 的编辑非常麻烦,每个文本框都是独立的,不能一次全选所有文本然后统一修改字体,只能一个框一个框的选。。。

忽然想到,为啥不先把 PDF 转成 Word,利用 Word 快速修改字体,然后再保存成 PDF 呢?

于是尝试了 WPS 的 PDF 转 Word 功能,按照刚才的思路,导出 Word 之后将所有文字的字体统一改成了 Arial ,再导出回 PDF。

终于成功生成了在各个平台都能正常使用的 PDF 。

iLovePDF

问题解决了,但是为了用一个小功能就要给流氓软件冲会员,实在不能忍。思考一番忽然明白了,我需要的其实只是一个“高兼容性的PDF转Word“工具——iLovePDF

有免费工具用了,谁还愿意交智商税呢?

将你的 PDF 转换为 DOC 和 DOCX 文件,以便于编辑。
将你的 PDF 转换为可编辑的 Office DOC 和 DOCX 文件。转换准确率近乎100%。