批量比较两个PDF文档(PDFUtil通过文本/者图像进行比较)
共 3173字,需浏览 7分钟
·
2020-11-05 16:11
之前写过一些关于PDF的文章:
前言:
在我的项目中,我需要比较大量的PDF文档,确认两份PDF文档是否一致,如果仅仅凭借着手动去逐一比较,可能很快就阵亡了。另外也有一些软件可以辅助的去对比,但依然是手动。
在找不到任何比较好用的工具来比较PDF文档的前提下,而且不希望只是进行简单的文本进行比较,而是想要寻找一些基于图像对PDF进行比较,找到之间的像素差异的方法。
所以我创建了一个简单的Java库(基于apache-pdf-box – Apache License, Version 2.0),可以通过文本/图像(Text/Image)模式比较指定的PDF文档,并且高亮差异;从PDF文档中提取图像,并将图像另存为。
项目Maven 依赖:
使用时应该包含下面的POM依赖项:
com.testautomationguru.pdfutil
pdf-util
0.0.1
ZIP下载地址:
taguru-pdf-utility-v1.1.zip (17288 downloads)
Github: 想要获取源码包请点击这里(https://github.com/vinsguru/pdf-util)
使用说明:
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文档。使用PDFUtility比较之后会给出结果,如下图,默认情况下使用洋红色(Magenta)高亮差异的区域,颜色可以更改。
后续将会继续实现的功能:
在视图模式VISUAL_MODE下比较PDF文件时,忽略某些区域。 在视图模式VISUAL_MODE下比较PDF文件时,根据一定的阈值/灵敏度返回 true / false。
Appium移动端自动化测试--基础预热 Appium移动端自动化测试--搭建测试环境 Appium移动端自动化测试--录制测试用例并运行 Appium移动端自动化测试--使用IDE编辑并强化脚本 Appium移动端自动化测试--控件定位方法 Appium移动端自动化测试--元素操作与触摸动作 Appium移动端自动化测试--搭建模拟器和真机环境 Appium移动端自动化测试--测试用例改造 Appium移动端自动化测试--capability使用和常用设备交互命令
软件自动化测试交流群已创建,公号回复入群即可获取入群二维码。
留言主题:你是如何学习APP自动化测试的?