我需要使用MS Reporting Services重构一些报告(使用Jasper生成)。 原始报告的副本以PDF格式提供。 要求是使新报告“像素完美”,这是非常麻烦的...

为了让生活更轻松,我希望有一个工具覆盖原始和生成的报告PDF,以测量它们是否完美。

有这样的工具吗?

#1楼 票数:21 已采纳

最简单,立即可用的方法:使用ImageMagick的compare (在Windows / Linux / Mac和其他版本上也可用)。

它甚至可以比较PDF页面(尽管它使用Ghostscript作为其委托来首先将PDF页面渲染为像素图像):

 compare.exe         ^
    tested.pdf[0]    ^
    reference.pdf[0] ^
   -compose src      ^
    delta.pdf

得到的delta.pdf将每个像素描绘为红色,其在两个比较的PDF页面之间具有不同的颜色。 所有相同的像素都是纯白色的。 [0]告诉compare使用每个文件的第一页进行比较(页面计数从零开始)。

您可以通过以下示例了解其工作原理:

 compare.exe                      ^
    http://qtrac.eu/boson1.pdf[1] ^
    http://qtrac.eu/boson2.pdf[1] ^
   -compose src                   ^
    delta.pdf

以下是相应的页面(转换为缩小的PNG以进行Web显示)。 参考页面位于左侧,修改后的页面位于中间位置,“delta-pixel-are-red”图像位于右侧:

第一页第二页三角洲图像

通过跳过-compose src参数可以获得略微不同的视觉效果。 然后,您将原始文件的像素作为灰色阴影背景(对于上下文),增量像素为红色:

 compare.exe                      ^
    http://qtrac.eu/boson1.pdf[1] ^
    http://qtrac.eu/boson2.pdf[1] ^
    delta.pdf

第一页第二页delta.pdf

如果您不喜欢像素差异的红色,请使用-highlight-color

 compare.exe                      ^
    http://qtrac.eu/boson1.pdf[1] ^
    http://qtrac.eu/boson2.pdf[1] ^
   -highlight-color green         ^
    delta.pdf

用于呈现PDF页面的默认分辨率为72 dpi。 如果您需要更高的精度,可以使用-density参数切换到300 dpi,如下所示:

 compare.exe                      ^
   -density 300                   ^
    http://qtrac.eu/boson1.pdf[1] ^
    http://qtrac.eu/boson2.pdf[1] ^
    delta.pdf

请注意,切换到更高的密度会减慢进程并创建更大的文件。

您甚至可以为增量图像创建一个* .txt文件,该文件描述每个像素的坐标和相应的颜色值:

 compare                          ^
    http://qtrac.eu/boson1.pdf[1] ^
    http://qtrac.eu/boson2.pdf[1] ^
   -compose src                   ^
   -highlight-color black         ^
    delta.txt

然后只计算总黑与黑像素的数量(对不起,这是Unix / Linux / MacOSX语法):

 total_pixels=$(( $(cat delta.txt | wc -l) - 1))
 black_pixels=$(( $(grep black delta.txt | wc -l) -1 ))

在上面用于插图的示例中,我得到了

 total_pixels=500990
 black_pixels=8727

当然,“理想”的结果将是

 black_pixels=0

#2楼 票数:4

diffpdf允许您并排比较两个PDF。

#3楼 票数:4

这个问题已经被接受了,但我想给我两分钱。 我们制作了与您的场景完美匹配的i-net PDFC 已经检查了使用另一个报告工具制作的报告与我们的报告软件的输出相匹配。 但它更强大。 PDFC没有做的是:检查基于图像的像素完美度,但它使用某些设置检查文档基本上(和视觉上)基于其内容是否相同。 比基于像素的纯对比方式更强大。

i-net PDFC可以在视觉上或基于命令行(例如批处理)运行,并与连续集成系统配合使用。 可视组件甚至允许半透明覆盖两个PDF文件以使用户检查像素完美。

该软件刚刚完成测试版。 试一试,让我们知道您的想法。 (是的。我为制作此产品的公司工作。)

#4楼 票数:2

我建议使用PDFCreator将报告打印为PNG图像,然后可以使用Paint .NET等图形程序使背景透明,并将两个报告叠加在一起。

在一个或两个图像上使用一些颜色转换(例如,一个颜色为红色,另一个为蓝色),它应该显示您看到差异非常好。

您可以在http://de.pdfforge.org/pdfcreator找到PDFCreator。 它完全免费使用。

  ask by Oliver Vogel translate from so

未解决问题?本站智能推荐:

6回复

只复制差异(kdiff,winmerge,任何差异工具)

是否有可能只复制两个文件的差异? 就像在winmerge,但是,我找不到这个选项 就像在这个屏幕上 - 我只想复制'黄色部分'。 当然我可以手动完成,但在大文件中它不是太有趣:-)
5回复

比较2个目录并将差异复制到目录3

我有三个目录。 我想将directory1与directory2进行比较,然后获取这些更改/新文件并将它们复制到directory3。 有没有一种简单的方法可以做到这一点,也许通过使用linux diff和cp命令? 我愿意接受各种想法。 谢谢! 安德鲁
1回复

如何确定ranges:view对象和std:vector之间的对等关系?

我正在使用出色的range-v3库。 我的函数之一返回一个ranges::view对象,我想将其与std::vector进行比较。 当然,我可以逐个元素进行比较,但是必须有一种更好的方法。 如何确定ranges::view对象和std::vector之间的对等关系?
1回复

pdf与图像进行比较的工具,可与测试脚本集成

用于pdf比较的分析工具,用于比较文本,图像(pdf中的所有元素),并且可以与测试脚本集成(用于自动比较) 我看着“ 超越比较” 。 它们具有命令行实用程序,可以帮助使用脚本自动触发比较。 但是,对于pdf内的图像比较,没有强大的解决方案。 我是否缺少启用图像比较的功能?
4回复

如何确定两个对象的类型是否兼容?

我有一个通用的功能,我想知道如何写。
2回复

通过列查找两个数据帧之间的差异不起作用

我在 newdata 和 olddata 数据框中有两个大型数据集,ID 作为主列键和 30 个其他列。 虽然大多数 ID 在新旧 ID 之间是通用的,但很少有旧 ID 被删除且不存在于新 ID 中,反之亦然,新 ID 添加到新 ID 中而旧不存在。 现在,我正在尝试将所有 3 个类别的标签标记为
3回复

什么是确定两个列表的最佳方法对象包含相同的值集,即使它们的顺序不同?[重复]

这个问题已经在这里有了答案: 比较两个List <T>对象是否相等,忽略顺序[重复] 9个答案 我有两个List<T>对象(其中T是两个对象的相同类型),并且我需要能够确定它们是否包含相同的一组值,即使这些值的顺序不同。 这些对象是否具有内置机制来完
2回复

比较和删除txt文件

我想要一些脚本或程序来比较文本文档,并在两个文本中找到相同的电子邮件地址并创建一个新文件,其中仅出现在两个文件之一中的电子邮件地址被保留(两个文件中出现的电子邮件地址已被删除)在这个新的文本文件中)。 我尝试了各种比较程序,但是它们考虑了位置和字体等,等等。我的程序不足以更改设置(如果可能的