PDF 视觉测试是对两个版本的 PDF 文档进行自动化的逐像素比较,以检测参考版本和生成版本之间在排版、字体、图像或内容上的任何差异,确保文档在到达最终接收者之前没有问题。
企业喜欢 PDF。发票、财务报告、合同、采购订单、账户对账单、证书、票据——PDF 格式无处不在地充斥于业务流程。理由很充分:它便携、可预测,并且无论查看设备如何都能保持排版。
除非它做不到的时候。
因为客户收到的 PDF 是由代码自动生成的。一个模板、一个渲染引擎、动态注入的数据。而这段代码,和所有代码一样,都会出现回归。一次库更新、一次字体更改、一次模板调整——突然之间您的发票就带着错位的标志、错位的总额,或者更糟,被截断的信息发出去了。
PDF 视觉测试是一个细分领域。但它在企业中需求很高,因为利害关系直接:发送给客户的损坏文档是信誉问题、合规问题,有时是法律问题。
PDF:一个没人测试的关键格式 {#pdf-critical}
请花一会儿想想您的组织生成的 PDF。如果您在 SaaS 行业,您可能生成发票、收据、使用报告。在金融,账户对账单、交易通知、监管文件。在医疗,处方、检验结果、证书。在法律,合同、契据、纪要。
所有这些文档都由代码生成。所有这些都受严格的排版和内容要求约束。一份银行对账单的余额向某一列偏移并不只是外观问题——它可能是监管合规问题。
然而在大多数组织中,生成的 PDF 没有经过视觉测试。团队测试生成器不会崩溃(功能测试)。有时测试正确数据是否存在于文档中(内容测试)。但他们几乎从不测试文档的视觉渲染是否正确——排版是否完整、元素是否正确定位、文档外观是否符合预期。
这是许多组织测试策略中的巨大盲点。
什么是 PDF 视觉测试? {#definition}
PDF 视觉测试应用与 Web 视觉测试相同的逻辑,但应用于 PDF 格式。流程如下:
您有一个参考 PDF——正确、已验证的版本,代表预期的渲染。您的系统生成新的 PDF(带新数据、代码更新后、模板更改后)。视觉测试工具将两个 PDF 转换为图像(逐页),然后逐像素比较这些图像。差异被识别、量化并可视化呈现。
结果是一份清晰的报告:"第1页,无差异","第2页,在header区域检测到差异——标志被向右移动了15像素","第3页,表格中存在差异——字体从Regular变为Bold"。
这种检测水平在手动情况下不可能可靠地实现。当您的 PDF 生成器每天产生数百份文档时,没有人会逐页逐文档地视觉检查。自动化视觉测试会替您完成。
出问题的场景 {#scenarios}
PDF 中的视觉回归并非理论案例。它们经常发生。
PDF 生成库更新
您可能使用某个库来生成 PDF——wkhtmltopdf、Puppeteer、WeasyPrint、iText、Apache FOP,或像 DocRaptor 这样的云服务。这些库的每次更新都可能微妙地修改渲染。CSS 渲染引擎的变化、影响边距计算的 bug 修复、字体处理更新——您的文档渲染就发生了变化。
字体或资源更改
您更新了品牌指南。设计师将字体从 Roboto 改为 Inter。变化应用到了网站、应用程序和文档模板。除了在生成 PDF 的服务器上没有安装新字体。生成器使用了备用字体,产生的文档完全不再符合品牌指南。
数据溢出
您的 PDF 模板对典型数据完美工作。然后某个客户有85个字符的名字,或4行而非2行的地址,或异常长的订单号。文本溢出其区域、与其他元素重叠或被截断。
服务器环境变更
您迁移了 PDF 生成服务器。新环境有不同的 OS 版本、不同的系统字体、不同的屏幕分辨率(对基于 headless 浏览器的生成器)。渲染微妙——或不那么微妙——地变化了。
非开发人员对模板的修改
在某些组织,文档模板由业务团队通过 CMS 或模板编辑器修改。一段法律文本的添加、一次标志更换、一次布局调整——由没有可见到对文档整体渲染影响的人完成。
为什么文本 diff 工具不够 {#diff-insufficient}
您可能认为 PDF 文本对比就够了。从两个版本提取文本、对比、识别差异。这是检测内容变化的有效方法,但对排版变化是盲目的。
文本 diff 会告诉您文本相同。但它不会告诉您文本现在向下偏移了20像素、表格失去了对齐、背景图片消失、边框不再可见,或者分页发生了变化、原本在一页上的部分现在跨两页。
PDF 文档排版承载意义。在发票中,总金额相对于行项目的位置具有功能重要性。在合同中,分页(分页符落在哪里)会影响可读性和理解。在财务报告中,数字的列对齐对理解至关重要。
文本 diff 捕获不到这些。只有视觉对比可以。
视觉对比:正确的方法 {#visual-comparison}
PDF 视觉对比分几个阶段工作。两个 PDF 都被逐页转换为高分辨率图像。图像在带容差阈值的情况下逐像素比较。差异被分类。结果以并排视图配以高亮差异呈现。
Delta-QA 原生集成此对比。您提供两个 PDF,工具就显示确切的变化,逐页呈现。无脚本、无复杂配置。No-code 方法意味着即使业务团队也能比较他们的文档而无需依赖技术团队。
行业和用例 {#industries}
银行和金融
金融机构每年生成数百万份文档,每份都受严格的监管展示要求约束。银行对账单中的视觉回归不是外观缺陷——而是潜在的合规问题。
医疗和制药
处方、检验结果和医疗证书是关键文档。错行的剂量、被截断的单位、消失的警告——PDF 视觉测试在这里是安全问题。
法律和公证
公证契据、合同和纪要遵循规定的格式。分页变化、移动段落的间距、错位的签名——所有这些都是视觉测试在签字前能检测的问题。
保险和电子商务
保险单、保证表格、发票和使用报告是排版传达信息的文档。错位的表格可能误导。视觉测试验证每个版本符合预期渲染。
实施 PDF 视觉测试 {#implementation}
识别您的关键文档,创建参考 PDF,集成到 CI/CD 流水线中,使用排除区域管理动态数据,并在有意更改时维护参考。
PDF 值得更好的对待
PDF 视觉测试如今是软件质量生态系统中最未被很好处理的需求之一。Delta-QA 改变了这一现状。原生 PDF 视觉对比、no-code、整个团队可访问。因为您的文档应该获得与您的 Web 界面相同的测试严谨性。
常见问题 {#faq}
PDF 视觉测试检测文本变化还是仅检测排版变化?
两者都检测。逐像素视觉对比检测最终文档上的任何可见变化——无论是修改的文本、移动的元素、变化的颜色、缺失的图像,还是排版问题。
如何处理每次生成都会变化的动态数据(日期、金额)?
PDF 视觉测试工具,包括 Delta-QA,允许定义排除区域——在对比中被忽略的文档区域。您标记包含动态数据的区域,测试就专注于文档其余部分的结构和排版。
可以自动测试多大量的 PDF?
体量取决于基础设施,但现代工具是为大批量设计的。典型的 CI/CD 流水线可以在几分钟内对比数十个 PDF。对于每天生成数千份文档的公司,建议采用抽样方法。
PDF 视觉测试对几百页的文档有效吗?
是的,对比是逐页进行的。一份200页的文档会在所有200个独立页面上对比。如果您知道哪些部分可能受影响,也可以针对特定页面。
可以比较由不同库生成的 PDF 吗?
可以,这实际上是重要用例之一:从一个 PDF 生成库迁移到另一个。
PDF 视觉测试对扫描的 PDF 相关吗?
对于扫描的 PDF(图像),视觉对比在技术上可行,但相关性有限。PDF 视觉测试最相关于以编程方式生成的 PDF,其中渲染是确定性且可复现的。