Tips & Tricks

如何修复可以正确打开但打印时出现乱码或丢失文本的 PDF

如果 PDF 立即打开并在屏幕上完美显示每个页面,但在发送到物理打印机时会产生乱码、缺失字母、重叠符号或完全空白区域的页面,则说明屏幕渲染管道和打印渲染管道之间存在字体渲染不匹配的问题。整个文档结构完好无损。内容流有效且可解析。屏幕上的查看器可以正确定位并绘制每个字形。然而,打印机忠实地呈现相同文本所需的信息要么在文件中不存在,要么存在但内部不一致,要么与打印机的字体处理子系统不兼容。解决特定字体嵌入和字体描述符层问题的有针对性的修复 PDF 方法可以可靠地解决此症状的最常见原因,通常不需要从原始源文件重建文档。

这个问题令人沮丧,因为在屏幕上的整个编辑和审阅过程中,文档显示得非常好。作者看到正确的文本并假设该文件已准备好分发。只有收件人或作者在最后一刻打印会议或提交的硬拷贝时,才会发现打印输出难以辨认。屏幕和打印的差异不是随机的。它遵循一组可预测的原因,这些原因植根于 PDF 格式处理字体数据的方式,并且每个原因都有相应的解决方案。

How to Repair a PDF That Opens Correctly but Prints With Garbled or Missing Text

为什么 PDF 可以在屏幕上正确显示但打印时失败

PDF 消费者应用程序内的屏幕渲染引擎和打印渲染引擎使用两种不同的字体分辨率路径。当原始嵌入字体损坏、丢失或仅部分嵌入时,屏幕渲染器可以优雅地回退到替代系统字体。它可以足够接近地近似字形形状和字符宽度,使得文本在中低分辨率显示器上看起来可以接受。打印机,特别是本地解释页面描述语言的 PostScript 打印机,需要原始的完全嵌入的字体子集及其完整的字形数据和字体描述符度量,或者紧密的系统字体匹配以及精确定义的字体描述符表,包括字符宽度数组、字体边界框、大写高度、字干宽度和字距调整对。

PDF规范定义了三种不同的字体处理策略(Adobe,“PDF Reference 1.7”,2006)。完全嵌入的字体包括 PDF 文件中的整个字体程序二进制文件。嵌入字体子集仅包括文档中实际使用的特定字符,由其 Unicode 代码点标识。引用的字体根本不包含字体数据;它们通过 BaseFont 名称来命名标准系统字体,并依赖查看器或打印机在显示或打印时提供匹配的字体。迄今为止,引用字体是屏幕与打印文本不匹配的最常见来源,因为打印机安装的字体集几乎总是与查看器的字体集至少在某些字体上有所不同。

WukongPDF

尝试修复 PDF

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

立即开始 →

检查哪些字体被嵌入以及哪些字体仅被引用

第一个诊断步骤是在任何可以报告文档中使用的每种字体的嵌入状态的查看器中打开 PDF。在 Adobe Acrobat Reader 或 Acrobat Pro 中,转到“文件”、“属性”,然后单击“字体”选项卡。该选项卡列出了文档中任何位置出现的每种字体。每个字体名称旁边显示嵌入状态。列出状态为“嵌入”的字体。其完整的字形程序存储在 PDF 中。 “嵌入子集”意味着仅存在文档文本中使用的特定字符,这对于大多数文档来说是正常且足够的。列出的字体没有任何嵌入指示符,仅显示字体名称和类型,例如“Type 1”。或“TrueType”,是根本没有嵌入数据的引用字体。

如果“字体”选项卡显示一种或多种引用的字体,则这些字体是打印乱码的主要嫌疑人。 修复 PDF 或印前检查工具可以找到匹配的系统字体,仅提取文档中使用的字符所需的字形形状,并将这些字形作为新的字体子集嵌入到 PDF 中,从而解决了打印问题。嵌入的子集为打印机提供了它所需的每个字形,消除了对打印机自己的字体集合的依赖。

将文档打印为图像以绕过所有字体处理

当字体数据确实丢失或损坏并且嵌入或修复都无法立即可行时,将 PDF 作为光栅图像序列打印会完全绕过打印机的字体子系统。在 Adobe Acrobat Reader 的“打印”对话框中,单击“高级”按钮并选中标有“打印为图像”的选项。此设置指示 Acrobat 在内部将每个页面渲染为高分辨率位图,然后仅将位图数据传输到打印机,而不是发送原始矢量绘图命令和文本放置操作符。打印输出将完全清晰,但由于光栅化步骤,小点尺寸的文本(例如脚注、轴标签或细则印刷)可能会在字符边缘显示轻微的软化。

下表总结了不同“打印为图像”分辨率设置的权衡:

分辨率设置输出文本质量每页大约线轴尺寸最适合
300 分辨率整体良好,8 点以下的衬线可见轻微软化一封信页面大约 8 MB标准办公文件、内部报告、草稿
600 分辨率非常好,与真正的矢量文本几乎没有区别一封信页面大约 30 MB合同、法律文件、带有脚注或小文本的文件
1200 分辨率与原始矢量输出无法区分一封信页面大约 120 MB专业打印校样、档案质量的保存副本

将 PDF 转换为带有永久光栅化字体的扁平化版本

要进行永久性修复,生成可在任何打印机、任何操作系统和任何 PDF 查看器上进行相同打印的独立文档,请将整个 PDF 转换为所有文本均已以高分辨率光栅化的版本。这会生成一个新的 PDF 文件,其中每个页面都存储为高分辨率图像,并且输出中不存在任何类型的字体依赖性。代价是文本变得不可搜索和不可选择,并且与原始基于矢量的文档相比,文件大小增加。

Ghostscript 是一款免费的命令行 PDF 处理器,可以高效地执行此转换。命令“gs -o output.pdf -sDEVICE=pdfwrite -dPDFSETTINGS=/printer -dEmbedAllFonts=true -dSubsetFonts=true input.pdf”使用打印机预设,它会光栅化文本,同时保持 300 DPI 的图像质量。为了获得更高的保真度,印前预设为彩色和灰度图像保持 300 DPI,并将文本保留为矢量数据(其中字体数据有效)。如果已知字体数据已损坏,请将标志“-dNoOutputFonts”添加到 Ghostscript 命令中,以强制完成文本光栅化,无论字体有效性如何。

使用 PDF 印前检查工具修复损坏的字体表

当字体的内部度量表损坏而不是丢失时,预检修复工具可以修复这些表,而无需光栅化文本。字体程序包含多个内部数据表。 “cmap”是指表将 Unicode 字符代码映射到字体内的字形索引。损坏的 cmap 表会导致打印机为给定的字符代码选择并绘制错误的字形形状,从而产生看似随机的乱码。 “hmtx”是指“hmtx”。表存储水平度量,包括每个字形的前进宽度。损坏的 hmtx 表会导致字符重叠、冲突或间隔不规则。印前检查工具可以检测两个表中的损坏,并从嵌入字体数据的有效部分重建它们,或者替换匹配的系统字体并从替换中重新生成干净的表。

Adobe Acrobat Pro 中“PDF 修复”下的专业印前检查模块类别和callas pdfToolbox中提供一键字体表修复操作。 WukongPDF 的修复 PDF 工具包括自动字体诊断,可在单个分析过程中检测嵌入丢失、cmap 损坏和 hmtx 不一致。基于浏览器的修复服务越来越多地将字体子集重建作为其标准自动修复管道的一部分,从而无需桌面软件或命令行专业知识即可进行字体表修复。

在多种打印机类型和驱动程序上测试修复后的输出

在使用标准 PCL 驱动程序的家用喷墨打印机上正确打印的 PDF 可能在使用 PostScript 驱动程序的办公室激光打印机或使用专有光栅图像处理器的生产数字印刷机上仍会产生乱码文本。不同的打印机类型对非标准或稍微畸形的字体表具有不同级别的容差来解释字体数据。 PostScript 打印机往往比 PCL 打印机对字体一致性更严格,并且会拒绝或误渲染 PCL 驱动程序通过替换默默接受的字体。

完成修复后,在文档可能遇到的每种打印机类型上打印一张测试页。如果文档必须在各种未知打印机型号上可靠地打印,例如收件人将在自己的办公室或家庭打印机上打印的表格,则基于图像的打印或完全光栅化方法是更安全且更普遍兼容的选择。文本清晰度的轻微折衷被每个收件人都将看到清晰的输出(无论其打印机硬件如何)的确定性所抵消。

当 PDF 打开并在屏幕上正确显示,但在打印时产生乱码、丢失或不可读的文本时,原因几乎总是根源于文档的字体处理层。首先在文档属性中检查字体嵌入状态。如果存在引用的字体,请使用印前检查或修复工具将它们作为子集嵌入。打印为图像提供了一种完全绕过字体处理的直接解决方法。转换为带有光栅化文本的永久扁平 PDF 会生成一个可移植、面向未来的文件,该文件将在任何地方进行相同的打印。在结构级别修复损坏的字体表可以保留文本的可搜索性并保持较小的文件大小。快速诊断检查和与特定字体问题匹配的有针对性的修复相结合,可将打印输出恢复为您在屏幕上看到的内容。

WukongPDF

尝试修复 PDF

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

立即开始 →