Others

为什么PDF在不同操作系统上打开时显示乱码

您在 Windows 笔记本电脑上打开 PDF,一切看起来都很完美。您将其发送给使用 Mac 的同事,他们会看到散布在整个文档中的随机符号、方框或问号。在 Linux 计算机上,同一文件可能会在文本应显示的位置显示空格。这种令人沮丧的经历比大多数人意识到的更频繁,而且几乎总是归结为不同的操作系统如何处理 PDF 文件中嵌入的字体。

核心问题很简单:PDF 被设计为在任何地方看起来都一样,但这一承诺取决于嵌入在文件中或在打开它的系统上可用的字体。当 PDF 依赖于创建者计算机上安装的字体但文件本身不包含这些字体时,任何缺少这些相同字体的设备都会用其他字体替换。在不同的操作系统上,即使是常见的字体也有不同的名称或版本,这种替换可能会产生乱码、不可读的输出。

Why Does a PDF Display Garbled Characters When Opened on a Different Operating System

最常见的罪魁祸首:字体丢失或未嵌入

当有人从 Word 文档、Google Doc 或 InDesign 等设计应用程序创建 PDF 时,软件会决定是将字体直接嵌入到 PDF 中还是简单地引用它们。字体嵌入意味着实际的字体数据被打包在 PDF 文件中。字体引用仅记录使用的字体并期望阅读设备安装它。

Windows 上的 Microsoft Word 通常使用 Calibri、Cambria 或 Times New Roman 等字体。当 PDF 创建者选择不嵌入字体(通常是为了保持较小的文件大小)时,PDF 仅存储字体名称,而不存储实际的字符形状。打开该文件的 Mac 会查找 Calibri,但会发现不同版本的 Calibri 或根本找不到匹配项。然后,Mac PDF 查看器会退回到替代字体,并且原始字体和替代字体之间的字符映射很少能完美对齐。

PDF 协会 2024 年的一项分析发现,与字体相关的问题约占所有跨平台 PDF 渲染问题的 40%(PDF 协会,“PDF 渲染错误调查”,2024 年)。字体替换失败对于西里尔文、CJK(中文、日文、韩文)、阿拉伯文和希伯来文等非拉丁文字尤其常见,其中替换字体可能完全缺少所需的字符集。

这也是您可能会在使用自定义或许可字体的文档中看到PDF字体问题的原因。设计应用程序通常使用非自由分发的高级字体。如果设计者忘记嵌入它们或者字体许可证禁止嵌入,则任何在未安装特定字体的情况下打开 PDF 的人都会看到乱码文本。

在不同操作系统上查看同一份文档可能看起来完全不同。在创建它的 Windows 计算机上正确呈现的 PDF 可能会在 Mac 或 Linux 系统上显示 tofu(当字体缺少特定字符时出现的空矩形框的昵称)。这种不一致在 PDF 创建阶段是完全可以避免的。

WukongPDF

尝试修复 PDF

无需安装。直接在您的浏览器中工作。

立即开始 →

Windows、macOS 和 Linux 之间的字符编码冲突

使用基于浏览器的 PDF 工具还意味着您无需安装或更新软件。该工具在远程服务器上运行,并通过浏览器提供结果,因此您始终可以访问最新版本,而无需下载。当您需要在没有管理员权限安装程序的设备上快速处理文件时,这尤其方便。

除了缺少字体之外,字符编码是 PDF 在不同平台上显示不同的第二个主要原因。字符编码是将数字代码映射到特定字符形状的系统。创建 PDF 时,文档中的每个字符都会根据源应用程序使用的编码分配一个代码。在不同操作系统上查看PDF可能会误解这些代码。

Windows 应用程序历史上使用旧代码页,例如用于西欧语言的 Windows-1252 或用于日语的 Shift-JIS。 Mac 应用程序倾向于使用基于 Unicode 的编码。 Linux系统默认使用UTF-8。当在 Windows 上使用特定于 Windows 的编码创建的 PDF 在以不同方式解释相同数字代码的系统上打开时,结果是 mojibake,该术语表示由于不正确的字符编码而导致的乱码文本。

该问题最常出现在特殊字符上:智能引号、重音符号、货币符号和数学符号。使用欧洲语言创建的 PDF,如果使用 é、ö 或 ñ 等重音字符,则在使用不同默认编码的系统上打开时,这些字符可能会显示为乱序符号。 PDF 规范确实包含在文件中显式定义字符编码的机制,但并非所有 PDF 创建软件都能正确或一致地实现这些机制。

亚洲语言的 PDF 尤其容易受到攻击。在使用旧编码的系统上创建的包含中文、日文或韩文文本的文档可能未嵌入必要的字符映射。在不同的操作系统上打开这样的文件可能会产生完整的乱码,而不仅仅是一些乱码。对于处理多语言文档的组织来说,编码问题代表着真正的业务风险,可能会影响合同、法律备案和客户通信。

字体表损坏和 PDF 结构损坏

字体问题并不总是由丢失文件引起的。有时,字体数据存在于 PDF 中,但已损坏。 PDF 将字体信息存储在称为字体表的结构中,该结构将字符代码映射到字形描述。如果这些表在文件传输、下载不完整或磁盘错误期间被损坏,则读取器应用程序无法正确解释字体数据,即使它在技术上是嵌入的。

部分腐败可能会产生一些最令人困惑的结果。您可能会在大多数页面上看到正确的文本,但在特定页面上看到乱码,或者在标题中正确显示字母但在正文中显示失败。出现这些模式是因为 PDF 的不同部分引用了不同的字体子集,并且只有其中一些子集被损坏。

当您发现同一文件上周显示正常但今天显示乱码时,通常需要采用修复 PDF方法。这种随时间变化的模式几乎总是指向数据损坏而不是字体替换问题。文件损坏可能发生在电子邮件传输、云同步过程中,甚至在存储设备开始出现故障时。

通过多个系统的 PDF 面临更高的风险。每次邮件服务器、云存储服务或文件压缩工具处理文件时,数据损坏的可能性很小。经过多次转会,这种风险会变得更加复杂。从 Windows 桌面经过电子邮件服务器、垃圾邮件过滤器,最后到达 Mac 邮件客户端的 PDF 可能会在任何这些步骤中出现损坏,而字体表是 PDF 中最复杂的部分之一,通常是最先显示损坏的结构。

非标准字体格式和旧版 PDF 版本

自 1993 年推出以来,PDF 格式已经发生了显着的发展。较旧的 PDF 文件可能使用现代查看器不再完全支持的字体格式。 Type 1 (PostScript) 字体是早期 PDF 的标准字体,但 Adobe 在 2021 年开始弃用它们,并于 2023 年完成逐步淘汰(Adobe,“PostScript Type 1 Font End of Support”,2023)。在当前版本的 Adobe Acrobat 或基于浏览器的现代查看器中打开包含 Type 1 字体的 PDF 可能会触发字体回退,从而产生乱码输出。

同样,一些 PDF 创建者以专有或压缩格式嵌入字体,只有他们自己的软件才能完全解码。由旧版本 AutoCAD 生成的 PDF 可能使用 SHX 字体,这些字体本质上是形状文件而不是标准字体格式。大多数通用 PDF 查看器无法正确呈现这些内容,并且不同操作系统上的结果是可以预测的:随机符号、未对齐的字符或空格。

自定义编码字体提出了另一个挑战。一些 PDF 创建工具即时构建自定义字符编码,将文档中使用的字形映射到字体表中的任意位置。如果 PDF 阅读器无法正确解析此自定义编码,则会显示错误的字形。文本可能看起来仍然像真实的单词,但字母被交换或替换,这有时比明显的垃圾更糟糕,因为读者可能不会立即意识到内容是错误的。

如何修复 PDF 中的乱码

当您遇到乱码 PDF 时,有多种方法可以恢复可读文本。最快的修复通常是从原始源文档重新创建 PDF。打开原始 Word 文件、Google Doc 或设计文件,然后将其重新导出为 PDF,并显式启用字体嵌入。在 Microsoft Word 中,此设置位于“文件”、“选项”、“保存”下,然后选中“在文件中嵌入字体”。在 Google 文档中,下载为 PDF 选项始终会嵌入字体。在 Adobe InDesign 或 Illustrator 中,字体嵌入是在“高级”面板下的导出设置中控制的。

如果原始源文档不可用,WukongPDF 可以通过其基于浏览器的引擎重新处理该文件,该引擎可以规范字体数据并解决编码冲突,无论用于查看输出的操作系统如何。专用的修复 PDF工具还可以通过解析 PDF 内部字体表并尝试重建它们或将现有字符代码映射到标准 Unicode 值来提供帮助。

将 PDF 打印为新的 PDF 是另一种实用的解决方法。大多数操作系统都包含“打印为 PDF”选项。或“另存为 PDF”打印对话框中的选项。当您将乱码 PDF 打印到新 PDF 时,系统打印管道会将每个页面呈现为类似图像的表示形式,然后将其写入新的干净 PDF 文件。此过程完全去除有问题的字体引用并仅嵌入视觉表示。代价是新的 PDF 将不具有可选择或可搜索的文本,因为字符被呈现为图形元素。

对于存在编码问题而不是缺少字体的 PDF,将文件转换为中间格式可以重置字符映射。某些工具可以从 PDF 中提取原始文本,并将其写入具有正确 Unicode 编码的新文件中。此方法对于显示因编码不匹配而导致的拉丁文字乱码的文档效果很好,但对于自定义或专有字体编码可能没有帮助。在这些情况下,打印到 PDF 的方法更为可靠。

创建跨平台使用的 PDF 时防止字体问题

预防比修复容易得多。如果您定期创建将在不同操作系统之间共享的 PDF,一些习惯可以消除几乎所有与字体相关的显示问题。

首先,导出为 PDF 时始终嵌入字体。每个主要的文档和设计应用程序都提供此选项,尽管它可能被称为不同的东西:“嵌入字体”,“嵌入字体”,“嵌入字体”,“嵌入字体”,“嵌入字体”,“嵌入字体”,“嵌入字体”,“嵌入字体”,“嵌入字体”,“嵌入字体”,“嵌入字体”等。 “包括字体,”或“字体子集”。字体子集仅嵌入文档中实际使用的字符,而不是整个字体文件,这使得 PDF 大小易于管理,同时仍然提供所有需要的字符数据。文件大小的轻微增加只是为了保证跨平台可读性而付出的很小的代价。

其次,如果由于许可原因无法嵌入,请坚持使用标准或广泛使用的字体。原始 PDF 规范中定义的 14 种标准 Type 1 字体(包括 Times、Helvetica、Courier 和 Symbol)保证在每个 PDF 阅读器上可用,无论操作系统如何。跨平台安全的现代等效字体包括 Arial、Times New Roman 和 Google Noto 字体系列,该系列涵盖 1,000 多种语言,并且可自由重新分发。

第三,在广泛分发之前,至少在一种其他操作系统上测试您的 PDF。在运行与创建文件所用操作系统不同的操作系统的设备上打开该文件。不仅检查第一页,还检查整个文档的几页,并特别注意任何特殊字符、重音字母或非拉丁文本。五分钟的测试可以避免收件人数小时的困惑。

第四,创建后验证PDF属性。大多数 PDF 查看器可以显示文档中使用的字体列表,并指示是否嵌入每种字体。在 Adobe Acrobat 中,它位于“文件”、“属性”、“字体”下。在基于浏览器的查看器中,通常可以通过文档属性或检查器工具访问字体列表。如果您看到列出的字体带有“(嵌入)”在它们旁边,文件应该跨平台正确显示。

最后,考虑对需要长期跨平台可靠性的文档使用 PDF/A 格式。 PDF/A 是 PDF 的 ISO 标准化版本,它强制要求字体嵌入并禁止可能导致渲染不一致的功能。它是专门为归档用例而设计的,在这些用例中,无论操作系统和字体技术如何发展,文档都必须在未来几十年内保持可读性。

WukongPDF

尝试修复 PDF

无需安装。直接在您的浏览器中工作。

立即开始 →