批量比较两个PDF文档(PDFUtil,通过文本或者图像进行比较)第一篇

之前写过一些关于PDF的文章:

在我的项目中,我需要比较大量的PDF文档,确认两份PDF文档是否一致,如果仅仅凭借着手动去逐一比较,可能很快就阵亡了。另外也有一些软件可以辅助的去对比,但依然是手动。

在找不到任何比较好用的工具来比较PDF文档的前提下,而且不希望只是进行简单的文本进行比较,而是想要寻找一些基于图像对PDF进行比较,找到之间的像素差异的方法。

所以我创建了一个简单的Java库(基于apache-pdf-box – Apache License, Version 2.0),可以通过文本/图像(Text/Image)模式比较指定的PDF文档,并且高亮差异;从PDF文档中提取图像,并将图像另存为。

Maven 依赖:
使用时应该包含下面的POM依赖项:

<dependency>
   <groupId>com.testautomationguru.pdfutil</groupId>
   <artifactId>pdf-util</artifactId>
   <version>0.0.1</version>
</dependency>

ZIP下载地址:

taguru-pdf-utility-v1.1.zip (17288 downloads)

Github:
想要获取源码包请点击这里

使用说明:

1、获取PDF页数

import com.testautomationguru.utility.PDFUtil;

PDFUtil pdfUtil = new PDFUtil();
pdfUtil.getPageCount("c:/sample.pdf"); //返回PDF的页数

2、以纯文本的方式获取页面内容

//以Text返回PDF的内容 - 所有页
pdfUtil.getText("c:/sample.pdf"); 

// 以Text返回PDF第2页的内容
pdfUtil.getText("c:/sample.pdf",2); 

// 以Text返回PDF第5~8页的内容
pdfUtil.getText("c:/sample.pdf", 5, 8);

3、从PDF中提取附加图像

//设置我们需要存储图像的路径
pdfUtil.setImageDestinationPath("c:/imgpath");
pdfUtil.extractImages("c:/sample.pdf");

// 从PDF的第3页中提取并保存内容
pdfUtil.extractImages("c:/sample.pdf", 3);

// 从PDF的第2页中提取并保存内容
pdfUtil.extractImages("c:/sample.pdf", 2, 2);

4、将PDF页面存储为图像

//设置我们需要存储图像的路径
 pdfUtil.setImageDestinationPath("c:/imgpath");
 pdfUtil.savePdfAsImage("c:/sample.pdf");

5、以文本模式比较PDF文件(速度更快-但不比较PDF中的格式、图像等)

String file1="c:/files/doc1.pdf";
String file1="c:/files/doc2.pdf";

// 比较PDF文档并返回 True or False
// 两个PDF完全一样返回True, 不一样返回False
pdfUtil.compare(file1, file2);

// 仅比较第3页
pdfUtil.compare(file1, file2, 3, 3);

// 比较第1~5页
pdfUtil.compare(file1, file2, 1, 5);

6、在文本模式下排除某些文本再对PDF文件进行比较

String file1="c:/files/doc1.pdf";
String file1="c:/files/doc2.pdf";

//对比之前删除有可能的文本内容
pdfutil.excludeText("1998", "testautomation");

//使用正则表达式,在比较之前删除指定内容
// \\d+ 在比较之前删除PDF中的所有数字 \\d+是数字的正则表达式
pdfutil.excludeText("\\d+");

// 比较PDF文档并返回一个布尔值
// True表示相同; false 表示不一样.
pdfUtil.compare(file1, file2);

// 仅比较第3页
pdfUtil.compare(file1, file2, 3, 3);

// 比较第1~5页
pdfUtil.compare(file1, file2, 1, 5);

7、以视图模式比较PDF文件(较慢–对PDF文档进行像素逐一比较 – 高亮PDF差异并将结果存储为图像)

String file1="c:/files/doc1.pdf";
String file1="c:/files/doc2.pdf";

// 比较PDF文档并返回一个布尔值
// 两个PDF完全一样返回True, 不一样返回False
// 默认是 CompareMode.TEXT_MODE
pdfUtil.setCompareMode(CompareMode.VISUAL_MODE);
pdfUtil.compare(file1, file2);

// 单独对比第3页
pdfUtil.compare(file1, file2, 3, 3);

// 对比PDF第1~5页
pdfUtil.compare(file1, file2, 1, 5);

//需要的话,可以将不同的地方高亮并以图像存储到你的本地
pdfUtil.highlightPdfDifference(true);
pdfUtil.setImageDestinationPath("c:/imgpath");
pdfUtil.compare(file1, file2);

样例:
比如我有下面这样的两个PDF文档。
两份PDF截图
使用PDFUtility比较之后会给出结果,如下图,默认情况下使用洋红色(Magenta)高亮差异的区域,颜色可以更改。

比较结果

后续将会继续实现的功能:

  • 在视图模式VISUAL_MODE下比较PDF文件时,忽略某些区域。
  • 在视图模式VISUAL_MODE下比较PDF文件时,根据一定的阈值/灵敏度返回 true / false。
评论 10
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

软测小生

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值