23

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

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

有这样的工具吗?

4

4 回答 4

26

最简单、立即可用的方法:使用ImageMagickcompare(在 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

第一页 第二页 三角洲.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

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

您甚至可以为 delta 图像创建一个 *.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
于 2012-09-17T20:48:11.960 回答
4

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

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

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

于 2012-09-18T07:54:38.620 回答
4

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

于 2012-09-17T21:44:02.893 回答
2

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

在一幅或两幅图像上使用一些颜色转换(例如,一个为红色,另一个为蓝色),它应该可以让您很好地看到差异。

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

于 2012-09-17T14:39:36.050 回答