惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

酷 壳 – CoolShell
酷 壳 – CoolShell
H
Hacker News: Front Page
P
Palo Alto Networks Blog
T
ThreatConnect
Apple Machine Learning Research
Apple Machine Learning Research
博客园_首页
T
True Tiger Recordings
P
Privacy & Cybersecurity Law Blog
B
Blog
IT之家
IT之家
Last Week in AI
Last Week in AI
F
Full Disclosure
Hacker News: Ask HN
Hacker News: Ask HN
C
Comments on: Blog
Microsoft Azure Blog
Microsoft Azure Blog
C
Cybersecurity and Infrastructure Security Agency CISA
Microsoft Security Blog
Microsoft Security Blog
博客园 - 【当耐特】
N
News and Events Feed by Topic
NISL@THU
NISL@THU
腾讯CDC
雷峰网
雷峰网
Security Latest
Security Latest
李成银的技术随笔
M
Microsoft Research Blog - Microsoft Research
L
LangChain Blog
L
Lohrmann on Cybersecurity
cs.CL updates on arXiv.org
cs.CL updates on arXiv.org
C
Check Point Blog
Y
Y Combinator Blog
Recent Announcements
Recent Announcements
博客园 - Franky
N
News | PayPal Newsroom
V
V2EX
A
About on SuperTechFans
The Register - Security
The Register - Security
月光博客
月光博客
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
Google Online Security Blog
Google Online Security Blog
MyScale Blog
MyScale Blog
Cisco Talos Blog
Cisco Talos Blog
Vercel News
Vercel News
WordPress大学
WordPress大学
C
Cyber Attacks, Cyber Crime and Cyber Security
The Hacker News
The Hacker News
IntelliJ IDEA : IntelliJ IDEA – the Leading IDE for Professional Development in Java and Kotlin | The JetBrains Blog
IntelliJ IDEA : IntelliJ IDEA – the Leading IDE for Professional Development in Java and Kotlin | The JetBrains Blog
爱范儿
爱范儿
A
Arctic Wolf
L
LINUX DO - 最新话题
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More

Mythsman

Chromium + Mitmproxy 组合使用踩坑 记一次家庭科学网络架构调整 Ghost 解决 jsdelivr 资源加载慢的问题 OpenWrt+R66s 软路由入门尝鲜 爬虫浏览器的Cloudflare五秒盾处理 记一次SSH下无法umount磁盘的问题 Linux主机性能测试方法 利用 Redsocks 解决透明代理的远程抓包问题 利用 FFmpeg 将视频转换为 GIF 操作指北 纯Docker部署Https服务——以Nextcloud为例 快手抓包问题分析 一次采耳引发的屎案 树莓派与1024x600分辨率屏幕的适配问题 树莓派4B使用arm64系统踩坑
PDF字体乱码问题分析
2022-10-27 · via Mythsman

Tools profile image for mythsman by mythsman

背景

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

问题

本来好好的一个 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%。

iLovePDF - 提供在线处理PDF文件的多种工具