(另请参阅下面的更新!)
我在Linux上用一个shell脚本做同样的事情ImageMagick的compare命令
pdftk实用程序
Ghostscript(可选)
(将其移植到DOS/Windows的.bat批处理文件将非常容易。)
我的应用程序创建了一些“已知良好”的参考PDF。代码更改后新生成的PDF将与这些参考PDF进行比较。比较是逐像素进行的,并保存为新的PDF格式。在这个PDF中,所有不变的像素都被画成白色,而所有不同的像素都被画成红色。在
以下是构建基块:
pdftk公司
使用此命令将多页PDF文件拆分为多个单页PDF:pdftk reference.pdf burst output somewhere/reference_page_%03d.pdf
pdftk comparison.pdf burst output somewhere/comparison_page_%03d.pdf
比较
使用此命令为每个页面创建一个“diff”PDF页面:
^{pr2}$
幽灵脚本
由于自动插入元数据(例如当前日期+时间),PDF输出不能很好地用于基于MD5hash的文件比较。在
如果您想自动发现由纯白页组成的所有案例,还可以使用bmp256输出设备转换为无元数据位图格式。您可以对原始PDF(参考和比较)或diff PDF页面执行此操作:gs \
-o reference_diff_page_001.bmp \
-r72 \
-g595x842 \
-sDEVICE=bmp256 \
reference_diff_page_001.pdf
md5sum reference_diff_page_001.bmp
如果MD5sum是您期望的595x842 PostScript点的全白页,那么单元测试通过了。在
更新:
我不知道为什么我之前没有想到从ImageMagick compare生成一个直方图输出。。。在
以下是链接两个不同命令的命令管道:第一个与上面的compare相同,它生成“白色像素相等,红色像素不同”格式,只输出ImageMagick内部miff格式。它不写入文件,而是写入stdout。在
第二种方法使用convert读取stdin,生成直方图并以文本形式输出结果。将有两条线:
表示白色像素数的一个
另一个表示红色像素的数量。在
接下来是:compare \
reference.pdf \
current.pdf \
-compose src \
miff:- \
| \
convert \
- \
-define histogram:unique-colors=true \
-format %c \
histogram:info:-
样本输出:56934: (61937, 0, 7710,52428) #F1F100001E1ECCCC srgba(241,0,30,0.8)
444056: (65535,65535,65535,52428) #FFFFFFFFFFFFCCCC srgba(255,255,255,0.8)
我认为这种类型的输出非常适合于自动单元测试。如果你计算这两个数字,你可以很容易地计算出“红色像素”的百分比,甚至可以根据某个阈值决定返回通过或失败(如果出于某种原因不一定需要“零红色”)。在
如果觉得《绘制图形可以使用什么python函数_如何对绘制PDF图形的Python函数进行单元测试?...》对你有帮助,请点赞、收藏,并留下你的观点哦!