开发PDF时,如何比较 PDF 文件

在 PDF 论坛上,"如何比较 PDF 文件"是一个经常被提到的问题。在开始之前,重要的是要明确你想要比较的内容是什么。

不同的 PDF 文件可能看起来一样吗?

是的,可能。不同的 PDF 创建工具可能会生成在视觉上完全相同的页面,但其内部结构却大不相同。PDF 是一种非常灵活的文件格式,拥有许多功能。比如,你可以使用 Acrobat 和 Ghostscript 分别生成同一个文件的两个 PDF 版本。这两个文件在视觉上(希望如此)是一样的,但它们的文件大小可能不同,内部结构也会有差异。

可以比较 PDF 文件的对象结构吗?

理论上,你可以扫描 PDF 文件的 COS(即对象结构)树,并进行比较。但这通常需要你自己编写一个专门的工具,并且要清楚哪些差异对你来说是重要的。

我可以对 PDF 文件直接用肉眼比较吗?

这其实是大多数人在提到"比较 PDF 文件"时的真正意思。

在开发一个 Java PDF 库时,我们需要进行大量的回归测试,以确保不会破坏现有功能。因此我们需要比较很多文件。我们也倾向于逐个测试每一次更改,这样我们就可以在出问题时快速定位原因。最简单的方法是将 PDF 光栅化(rasterize)并比较输出结果。

我们会提取文本并将 PDF 转换为 PNG 图片。这里是我们使用的 Java 代码。然后我们会将结果与一个基准图像进行比较。尽管仍然需要人工来确认更改内容,但这提供了一种非常快速的回归测试方法。

如果结果完全一致,我们可以很有信心地认为文件没有发生变化。而如果是比较两个不同的 PDF 文件,也可以快速看到具体有哪些变化,特别是如果你让对比工具在 PNG 上高亮显示变动区域,那就更方便了。

我们发现这是一个非常有效的比较 PDF 文件的方式。你觉得什么方法最适合你呢?

你也可以查看我们其他的文章,以更好地理解 PDF 格式

市面上有哪些商业版的PDF库?

JPedal 是一个 Java PDF 库,使 Java 开发者可以更轻松地在 Java 中处理 PDF 文档。常见的任务只需几行代码粘贴到你的应用程序中就可以解决。而且,由于我们已经持续开发这个 Java PDF 工具包超过 20 年,它可以兼容各种问题 PDF 文件。

我们的主页:PDF 转 HTML5、Java 图像库、Java PDF SDK - IDRsolutions

相关推荐
Boilermaker19921 小时前
[Java 并发编程] Synchronized 锁升级
java·开发语言
Cherry的跨界思维1 小时前
28、AI测试环境搭建与全栈工具实战:从本地到云平台的完整指南
java·人工智能·vue3·ai测试·ai全栈·测试全栈·ai测试全栈
alonewolf_992 小时前
JDK17新特性全面解析:从语法革新到模块化革命
java·开发语言·jvm·jdk
一嘴一个橘子2 小时前
spring-aop 的 基础使用(啥是增强类、切点、切面)- 2
java
sheji34162 小时前
【开题答辩全过程】以 中医药文化科普系统为例,包含答辩的问题和答案
java
恋爱绝缘体12 小时前
2020重学C++重构你的C++知识体系
java·开发语言·c++·算法·junit
佳豪科技3 小时前
存量房市场成为主战场:家装建材厂家针对旧房翻新的产品线调整与营销策略变革
经验分享
wszy18093 小时前
新文章标签:让用户一眼发现最新内容
java·python·harmonyos
wszy18093 小时前
顶部标题栏的设计与实现:让用户知道自己在哪
java·python·react native·harmonyos
程序员小假4 小时前
我们来说一下无锁队列 Disruptor 的原理
java·后端