批量比较两个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"58);

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"22);

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, 33);

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

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, 33);

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

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, 33);

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

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

样例:

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

比较结果

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

  • 在视图模式VISUAL_MODE下比较PDF文件时,忽略某些区域。
  • 在视图模式VISUAL_MODE下比较PDF文件时,根据一定的阈值/灵敏度返回 true / false。
Appium教程
  1. Appium移动端自动化测试--基础预热
  2. Appium移动端自动化测试--搭建测试环境
  3. Appium移动端自动化测试--录制测试用例并运行
  4. Appium移动端自动化测试--使用IDE编辑并强化脚本
  5. Appium移动端自动化测试--控件定位方法
  6. Appium移动端自动化测试--元素操作与触摸动作
  7. Appium移动端自动化测试--搭建模拟器和真机环境
  8. Appium移动端自动化测试--测试用例改造
  9. Appium移动端自动化测试--capability使用和常用设备交互命令
文章合集
Selenium Appium  | Jenkins  |  Jmeter 
软件测试方法汇总 Postman接口参数化 | 测试用例设计 | APP抓包

视频教程
Selenium | Appium | Jenkins | Jmeter

微信群:
软件自动化测试交流群
已创建,公号回复入群即可获取入群二维码。

留言主题:你是如何学习APP自动化测试的?
浏览 49
点赞
评论
收藏
分享

手机扫一扫分享

分享
举报
评论
图片
表情
推荐
点赞
评论
收藏
分享

手机扫一扫分享

分享
举报