65.9K
CodeProject 正在变化。 阅读更多。
Home

缺少 PDF 字体:元数据如何影响文本优化

2009年8月27日

CPOL

15分钟阅读

viewsIcon

35994

可移植性是 PDF 的基石。但当 PDF 最重要的特性开始失效时会发生什么?在本白皮书中,我们将探讨该格式在屏幕上无法正确渲染文本的一些原因,以及可以采取哪些措施来最小化或防止这种情况的发生。

引言

本文档是系列白皮书的第二篇,该系列白皮书将探讨 PDF 中缺失字体信息的问题。自问世以来,PDF 彻底改变了个人和企业沟通和交换信息的方式。保持信息完整性并在不同平台之间一致显示内容的承诺,巩固了 PDF 在文档交换领域的领导者地位。然而,尽管 PDF 取得了创新,其自身的演变也带来了新的挑战。

详细了解 Amyuni PDF 开发工具 www.amyuni.com

这会影响谁?为什么它很重要?

乍一看,缺失字体信息似乎微不足道。毕竟,谁在滚动 PDF 时没有遇到过无法识别的字符?然而,这个问题不仅仅是屏幕上文本渲染不正确。对于开发人员和 IT 管理员来说,缺失字体信息会带来问题,因为它会延迟软件开发并阻碍生产周期。对于最终用户来说,当他们无法正确显示、打印或编辑内容时,这会导致时间的浪费和最后期限的延误。

缺失字体信息带来的不便不仅影响工作场所中不满意的个人,还会损害文档的*准确性*及其作为产品的价值。便携式文档格式的初衷是为了确保内容完整性和*显示一致性*,但当内容不完整、无法准确打印,甚至可能发生更改时,又会怎样?

不正确的文本渲染问题是 PDF 普及的一个讽刺性副作用。毕竟,该格式的可移植性是其宗旨的基石。尽管开发人员将始终设计 PDF 以适应尽可能多的配置,但最终他们永远无法完全适应用户选择如何使用便携式文档格式。

缺失的元数据和用户体验

便携式文档格式是一项复杂的技术,其中有许多内部变量,如果放任不管,可能会影响其最终输出。以下各节将简要概述开发中为了节省成本而可能出现的问题,特别是——缺失或不正确的元数据问题。

当元数据丢失或不正确时(无论是由于损坏还是开发上的疏忽),查看器无法优化文档的内容,这意味着 PDF 无法保证*在所使用的上下文中具有最佳可用性*。例如,如果用户无法准确显示或打印文档内容,则 PDF 的可用性就不可 100% 靠谱。同样,如果用户无法在文档中搜索某个词语或提取内容,PDF 也未能提供最佳可用性。

“上下文”一词很重要,因为它与用户体验密切相关,并且通常,正面或负面的用户体验会影响产品或供应商的声誉。因此,无法正确优化的 PDF 有可能(如果发生得足够频繁)直接影响产品声誉。不幸的是,许多 PDF 开发人员没有意识到他们的 PDF 在内部存在问题(例如缺失或不正确的字体信息),并且他们的工作未经验证,最终受到不满意的最终用户的严厉批评。

如果元数据信息丢失,PDF 查看器可能会遇到文本渲染问题,例如字符丢失或无法识别,以及刷新率缓慢。在某些上下文中,这些问题比其他问题更明显(也更令人沮丧)。例如,在远程处理文档时。在终端服务器等精简客户端环境出现之前,用户在本地使用 Adobe Reader 等查看应用程序处理 PDF 文档。因此,随着远程访问的普及,对远程处理 PDF 并保持相同实时功能的要求也随之增加。

然而,在这些远程环境中,PDF 渲染问题会增加。优化不佳的文本在质量和细节上的不足更加明显,文档的刷新率也更慢。

屏幕上的文本渲染

查看器或渲染应用程序将文本指令显示为屏幕上的有意义的字形的过程非常复杂。图 1 提供了该过程的简化概述;然而,重要的是要注意,正是这个过程导致了缺失元数据的损害。以下各节将概述当字体信息丢失时可能出现的不同场景。

Word-Image-1.png

图 1:屏幕显示文本渲染过程概述

缺失字体资源

当 PDF 查看器遇到文本绘制指令时,它会从字体资源中加载一个特定的字体。如果该资源丢失(图 2),查看器将无法显示任何使用该指定字体的字符,也无法提供替代字体。大多数情况下,查看器将无法加载文档。在某些情况下,查看器可能会随机替换缺失的字体,但大多数时候会产生不可预测的文本渲染结果。

Word-Image-2.png

图 2:缺失字体资源

缺失字体族名称

字体信息可能丢失的另一个实例是字体族名称。例如,如果缺失字体族名称“Arial”(图 3),查看器甚至无法确定等效的系统字体作为替换。因此,查看器无法优化 PDF 文件的加载和渲染。

Word-Image-3.png

图 3:缺失字体族名称

字符代码到字形:CMap 指引方向

但是,如果字体资源被找到,查看器会处理信息,并根据 PDF 中的字体是否嵌入,采取多种不同的文本解码方法。如果字体已嵌入且查看器未设置为优化文本渲染,则查看器将引用 PDF 中的嵌入式 (CID 到字形) CMap,以获取字体引擎如何将文本转换为字形的信息。本质上,CMap 是元数据(图 4),它将字符代码映射到其对应的图形表示(字形),以便字体引擎渲染每个字符的所有细节。然而,如果 CMap 中缺少信息,字体引擎将无法准确渲染字符,文本将无法识别。

Word-Image-4.png

图 4:CID 到字形 CMap

在这种情况下,抗锯齿无法使用 Windows GDI 工作。对于精简客户端服务,如远程终端、PDA 和虚拟化环境,缺乏抗锯齿会显著影响文本处理速度和显示质量(图 5)。

Word-Image-5.png

图 5:精简客户端服务中遇到的抗锯齿

查看器渲染选项

如果字体未嵌入,查看器将查找系统以查找替代字体。在大多数情况下,即使字体文件二进制信息缺失,其相应的定位和描述性元数据也足以使查看器通过替换字体来弥补。

如果在系统中找到匹配的字体,查看器将继续使用字体引擎(如 GDI、FreeType 或商业库)的服务将最终输出渲染到屏幕上。但是,如果找不到系统字体,或者查看器未提供自己的标准替换字体列表怎么办?查看器将不得不选择最接近的字体替换,并依赖 PDF 元数据中提供的绘图参数。

没有这些参数,查看器就无法为字体引擎提供绘制字形所需的信息。如果字体元数据中的所有信息都有效且结构良好,则查看器可以加载合适的字形,字体引擎可以渲染最终输出。

字符代码到 Unicode:不同的元数据,相同的结果

如前一节所述,如果 CMap 中缺少信息,渲染问题将再次发生。下一个问题是,CID 到 Unicode CMap 呢?如果那里也缺少信息,会发生什么?就像其嵌入式副本一样,Unicode CMap 提供字符到 Unicode 的映射信息(图 6)。这包括字符编码参数,如 WinAnsi、MacRoman 和 Unicode。就像 (CID 到字形) CMap 一样,如果 Unicode CMap 中缺少信息,字体引擎将再次无法绘制适当的字形,用户可以预期会遇到更多相同的不可预测的文本渲染结果。

Word-Image-6.png

图 6:CID 到 Unicode CMap

不正确的元数据

相比之下,不正确的元数据带来了另一系列问题。由于信息不正确,文本可能会(在极端情况下)显示不正确,例如当 Unicode CMap 表包含不完整或错误的条目时。在图 7 中,大小写字符都指向相同的 Unicode 值。结果,查看器可能会为大小写字母显示相同的字符。

Word-Image-7.png

图 7:Unicode CMap 错误

谁应为此负责?

上述大多数问题甚至在 PDF 到达查看应用程序之前就已经发生了。原因是什么?通常,薄弱的文档设计和糟糕的开发实践是当前 PDF 中许多缺失或不正确元数据问题的罪魁祸首。例如,一些开发人员选择不嵌入重要的字体信息,因为这会使文件过大,或者 PDF 规范不需要这些数据。

缺失或不正确的元数据是一个经常被忽视的问题,因为它的影响通常只在熟悉的开发环境之外才显现出来。缺乏测试以及“*如果 PDF 在 Acrobat 中能正常渲染,它在其他地方也会同样渲染*”的假设,不仅为最终用户,也为生成它们的供应商制造了有问题的文件。

如此多的分支需要修剪:从根源开始

如何开始解决不正确的元数据和字体信息问题?由于 PDF 开发和生产一直在不断变化和发展,起点在哪里?开发人员应该考虑哪种开发工具或最佳实践,为什么?

首先,在生产层面,开发人员需要使用正确的软件工具。有了正确的工具,开发人员就可以开始生成结构良好的 PDF,这些 PDF 将被优化并正确渲染。这些良好的文档不仅受到最终用户的赞赏,而且对于以后需要在不同环境中处理这些文档的其他开发人员也大有裨益。例如,一些开发人员使用的工具倾向于删除一些 TrueType 表,因为根据 PDF 规范,Acrobat 不需要它们。但是,这些表可能用于其他目的,例如在精简客户端和 PDA 上渲染 PDF,或者将文档内容导出为 XPS 或 XAML 等其他格式。

然而,使用正确的工具还不够。由于 PDF 是一项复杂的技术,开发人员需要“跳出框框”思考,尤其是在 PDF 规范方面。

许多项目未包含或未在 PDF 规范中提及,但这些是创建结构良好且优化文档的解决方案的一部分。以下各节概述了一些最佳实践(基于多年处理无数有问题的和优化的 PDF 文档的经验),Amyuni Technologies 认为这些实践可以带来更高质量的 PDF。

坚实的表格意味着坚实的字体文件

开发人员应确保嵌入的字体文件包含其所有相应的表格。这样,字体文件不仅从 PDF 的角度来看是有效的,而且对于可能需要处理该文档的其他工具或字体引擎来说也是有效的。

包含有效的元数据

开发人员应确保字体元数据包含有效的字体族名称,无论是通过 FontName 属性还是 FamilyName 属性。使用诸如“/F1234,Bold”之类的模糊名称来表示 /Arial,Bold 是 PDF 规范允许的,但这会阻止查看器进行任何优化,因为查看器不会将“/F1234”识别为有效的字体族名称。开发人员还需要确保所有元数据值反映字体文件的实际值,即使这些值似乎不重要。一个常见的例子是设置 AvgWidth 的不正确值,该值没有(即时的)视觉效果,直到查看器尝试优化 PDF 的查看。

字体重复

优化 PDF 文件,使其不包含同一字体的多个实例也很重要。开发人员经常遇到每页包含一个特定字体实例的 PDF。字体重复不仅会阻碍优化,还会增加文件大小并减慢文档处理速度。确实,生成包含多个字体实例的 PDF 更容易,但随后确保在保存文档之前删除这些重复的字体会变得更加复杂。

工具和替代方案

PDF 不是一项新技术,但仍不断涌现新的 PDF 工具。这些工具包括免费的在线 PDF 转换服务、应用程序插件以及流行的开源工具。如何选择哪些工具能提供最适合手头任务的质量和优化输出?

对许多人来说,PDF 仅仅是工作文档的最终输出。对另一些人来说(尤其是在开发环境中),PDF 是一种文档格式,可以集成到更大、更复杂的任务系列中。例如,一些应用程序会处理大量单独的 PDF 文件,从中删除特定的或敏感的元数据,然后重新创建单个 PDF 文档。相比之下,其他应用程序则将单个大型 PDF 文件拆分成数百个(或更多)单独的文档。在这两种情况下,此类应用程序都会常规处理来自不同生产者、内部结构不同、包含错误或缺少重要信息的 PDF 文件。正是这些苛刻的 PDF 处理任务(通常在大型企业环境中)中,缺乏正确的 PDF 工具(或其定制化)和开发经验,导致了问题的产生。

Amyuni PDF Converter 是一款旨在满足苛刻 PDF 处理要求的工具。尽早意识到 PDF 技术和开发方向,PDF Converter 的设计能够反映并适应不断变化的 PDF 景观。从一开始,它就提供了开发人员对转换工具的期望——文档无论在何种输出环境中都能以可预测的方式渲染和优化。

PDF 中的一根针

除了缺失的元数据,无法知道 PDF 内部结构*为何*或*在哪里*出现问题,不仅会减慢开发周期,还会增加日后的技术支持成本。Amyuni PDF Analyzer 是一款旨在探索这些问题的工具。它以开发人员为中心而设计,开发人员需要知道文档是否符合优化字体渲染所需的最低字体规范。它能够检查许多 PDF 对象,意味着开发人员能更好地理解其文档的内部工作原理,并最终——让他们能够更好地控制其文档的处理和优化方式。

从 PDF 的演变中学习

Amyuni Technologies 的开发人员几乎从一开始就涉足便携式文档格式,有机会体验和解决各种 PDF 开发场景。其成果是 PDF 工具,这些工具生产的文档*移除*并*不包含*重复的字体,从而使 PDF 更小、处理速度更快。

由于前面讨论的最佳实践已集成到 Amyuni 产品中,因此文档已经结构良好。结构良好的字体允许任何查看器优化渲染,并无缝显示文档,无论是从桌面还是通过远程连接。如果 PDF 中的某个字体在系统中缺失,像 Amyuni PDF Creator 这样的查看器可以轻松找到替代字体。结果是:PDF 在不同平台上按预期渲染,与原始文档几乎无法区分。

应用

修剪有问题的 PDF 树是一种解决缺失或不正确元数据的方法,这只是软件开发的现实。然而,Amyuni 一直采取的方法是在元数据相关问题出现之前,通过结合正确的工具和最佳实践来从根本上避免它们。为什么?因为 PDF 的预期功能比 15 年前要多。例如,PDF 应该

  • 显示在 Adobe Acrobat 以外的众多应用程序和查看器中。
  • 存档在各种媒体格式中,如 XML、XAML、数据库等。
  • 使用不同的工具和平台进行访问和处理。

当然,没有任何开发环境可以预测或避免所有可能的 PDF 场景。开发人员经常需要修复本文中讨论的一些问题,并且工具的选择会导致不同的结果——有些结果要到后来才会显现。Amyuni PDF Creator 是另一个例子。PDF Creator 定位为使开发人员能够优化文档,它可以

  • 修复第三方工具未正确嵌入的字体文件或修复其表格中的错误(图 8)。
  • 检测并移除 PDF 中的重复字体条目。
  • 确保所有字体文件表格和字体元数据都是准确的。

Word-Image-8.png

图 8:字体错误和修复

正如我们所见,实现最佳 PDF 结果可能是一项艰巨的任务。缺失或错误的元数据只是可能破坏用户体验和 PDF 文档完整性的多种场景之一。PDF 文档固有的细微差别并不总是显而易见的,直到为时已晚。

结论

对于办公室备忘录来说,不准确或无法识别的字符可能无关紧要,但当 PDF 文档是医疗记录、保险单或司法声明的基石时,就容不得任何不准确或难以辨认之处。其内容必须清晰且准确无误。在依赖及时高效的文档处理以避免软件崩溃和生产中断的 PDF 应用程序环境中,也应该有同样的期望。

随着我们对 PDF 的依赖不断增长,我们的需求也随之增长。PDF/A 作为一项标准的出现(及其重要性)证明了文档联盟对 PDF 内容完整性的重视程度。尽管新的文档格式可能成为便携式文档格式的潜在替代品,但 PDF 开发人员和供应商有责任继续推动采用更有效的方法来改进和维护我们有时会认为理所当然的技术。

详细了解 Amyuni PDF 开发工具 www.amyuni.com

 

本白皮书由 Franc Gagnon 撰写,他是 Amyuni Technologies 的技术文案。

© Amyuni Technologies Inc. 保留所有权利。所有商标均为其各自所有者的财产。

© . All rights reserved.