我需要找到两个pdf文件之间的区别。是否有任何Python相关的工具具有直接给出2个PDF的差异的特征?如何获得Python中的两个PDF文件的差异?
回答
你是什么意思的“差异”? PDF文本或某些布局更改的差异(例如,调整了嵌入式图形的大小)。第一个很容易检测,第二个几乎不可能(PDF是一个非常复杂的文件格式,提供无尽的文件格式功能)。
如果您想获得文本差异,只需在这两个PDF上运行pdf到文本实用程序,然后使用Python的内置差异库来获取转换文本的差异。
这个问题涉及到python中的pdf到文本转换:Python module for converting PDF to text。
此方法的可靠性取决于您正在使用的PDF生成器。如果你使用例如Adobe Acrobat和一些基于Ghostscript的PDF-Creator可以从SAME word文档创建两个PDF文件,尽管源文档是相同的,但您仍可能会得到一个diff。
这是因为有很多方法可以将源文档的信息编码为PDF,并且每个转换器使用不同的方法。通常,PDF到文本转换器无法找出正确的文本流,特别是对于复杂的布局或表格。
只是文字会做。 PDF生成器不应该是一个问题。 – Goutham 2009-08-21 09:30:27
如果您确实需要支持图片,您可以从pdf中提取JPG:http://nedbatchelder.com/blog/200712/extracting_jpgs_from_pdfs.html或将PDF转换为图片并进行比较。 – 2014-10-24 15:24:36
检查了这一点,它可能是有用的:http://pybrary.net/pyPdf/
pyPdf在我的测试中不是很健壮。它在由Illustrator/InDesign和其他矢量绘图程序创建的pdf上崩溃。不过,对于来自Office应用程序的简单PDF文件可能没问题。另一个更可靠的选择是来自xpdf工具包的pdftotext。 – fbuchinger 2009-08-21 09:34:49
我不知道你的使用情况,但对于脚本生成的PDF使用ReportLab的回归测试,我通过
- 转换做差异PDF文件每一页的图像使用ghostsript
- 版本比较针对标准的PDF的页面图像的各页,使用PIL
例如
im1 = Image.open(imagePath1)
im2 = Image.open(imagePath2)
imDiff = ImageChops.difference(im1, im2)
这适用于标记由于代码更改而引入的任何更改。
第1步是否有一些参考? – yucer 2016-09-09 07:12:34
在我的加密的pdf unittest上遇到了同样的问题,pdfminer和pyPdf都不适合我。
这里有两个命令(pdftocairo,pdftotext)在我的测试中很完美。 (Ubuntu的安装:apt-get的安装poppler的-utils的)
你可以通过PDF内容:
from subprocess import Popen, PIPE
def get_formatted_content(pdf_content):
cmd = 'pdftocairo -pdf - -' # you can replace "pdftocairo -pdf" with "pdftotext" if you want to get diff info
ps = Popen(cmd, shell=True, stdin=PIPE, stdout=PIPE, stderr=PIPE)
stdout, stderr = ps.communicate(input=pdf_content)
if ps.returncode != 0:
raise OSError(ps.returncode, cmd, stderr)
return stdout
好像pdftocairo可以重绘PDF文件,pdftotext可以提取所有文本。
然后你就可以比较两个PDF文件:
c1 = get_formatted_content(open('f1.pdf').read())
c2 = get_formatted_content(open('f2.pdf').read())
print(cmp(c1, c2)) # for binary compare
# import difflib
# print(list(difflib.unified_diff(c1, c2))) # for text compare
- 1. 如何获得java中两个zip文件之间的差异
- 2. 获取两个文件的差异
- 3. 获得两个表之间的差异?
- 4. 如何获得Linux中两个文件之间的差异(只有补充)
- 5. 如何获得MongoDB中两个字段的差异总和?
- 6. 如何获得R中两个集合的差异?
- 7. 如何获得PHP中两个日期之间的差异?
- 8. 如何在Python中异步获取文件的差异
- 9. 当在Windows中的两个文件上执行差异时,获取两个文件中差异的行数
- 10. 如何获得python中两个日期变量之间的小时差异
- 11. 如何获得两个S3存储桶之间的文件差异?
- 12. 如何获得两个日期之间的星期差异
- 13. 如何获得两个日期之间的差异?
- 14. 如何获得两个数据表之间的差异
- 15. 如何获得两个日期之间的差异?
- 16. 如何获得两个日期之间的差异?
- 17. 比较两个xml文件并获得差异
- 18. 我如何在两个时间戳中获得差异
- 19. 如何在android中获得两个时间差异
- 20. 如何在JavaScript中获得差异btw两个数组?
- 21. 使用minGW差异显示两个文本文件的差异
- 22. Bash脚本获得两个目录中文件的权限差异
- 23. 获得两行之间的差异并填充差异值
- 24. 获取两个不同分支中文件的差异
- 25. 从Python中的两个列表中获取差异
- 26. 如何减去两个日期和时间来获得差异
- 27. 在WHERE语句中获得两个数字之间的差异?
- 28. 获取文件的两个版本的可视化差异
- 29. 获取python中两个词典之间的差异
- 30. 如何从time()差异中获得HH:MM?
DIFF文字或全部内容或大小? – Steen 2009-08-21 09:11:33
该文本将做。 – Goutham 2009-08-21 09:16:16