2012-09-17 20 views
18

我需要使用MS Reporting Services重構一些報告(使用Jasper生成)。原始報告的副本以PDF格式提供。要求是使新的報告「像素完美」這是非常繁瑣的...PDF文件的視覺差異以確定像素完美

爲了使生活更輕鬆我想有一個工具覆蓋原來的和生成的報告PDFs,以便衡量它們是否像素完美與否。

這樣的工具在那裏嗎?

+0

有趣的問題。不知道這與報告,SSRS或Jasper有多大關係。通過將這些標籤替換爲其他標籤,並更新標題以反映您想要執行「視覺PDF差異」,您可能會得到更好的迴應。 – Jeroen

+1

誰想出了這個要求,什麼是商業理由?將每個頁面作爲位圖按像素進行比較。他們是黑色和白色? –

+0

請參閱[比較大量PDF文件的工具?](http://stackoverflow.com/q/145657) –

回答

18

最簡單,即時可用的方法:使用ImageMagick's compare(也可在Windows上使用)。

它甚至還可以比較的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的網頁顯示)。參考頁是在左側,修改後的頁面是中間的一箇中,「Δ-像素是紅色」圖像是在右:

first page   second page   delta image

略微不同的視覺效果您可以跳過-compose src參數。然後你會得到原始文件作爲一個灰色陰影的背景與三角形像素的像素(上下文)在紅:

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

first page   second page   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 
+0

下面是一個腳本,使用ImageMagick和Poppler工具(速度)對兩個PDF頁面進行可視化分析:https://gist.github.com/brechtm/891de9f72516c1b2cbc1。它會在pdfdiff目錄中爲每個PDF頁面輸出一個JPG格式,並且還會打印兩個PDF之間不同頁面的編號。 –

+0

這似乎不再適用?或者可能需要ImageMagick v7 +。 v6.9.6-5抱怨:'無法識別的圖像類型'pdf''。 – Monkpit

+1

@Monkpit:當然有用。您的ImageMagick未配置爲使用PDF作爲輸入格式。您需要代表ImageMagick安裝並配置Ghostscript作爲*委託*,以將PDF輸入處理爲柵格圖像並將其交給IM。通常情況下,大多數開箱即用的設備已經是這種情況。欲瞭解更多詳情,請參閱* [這一系列的答案](http://stackoverflow.com/search?q=user%3A359307+%5Bimagemagick%5D+delegate+pdf)*。 –

2

我建議使用PDFCreator作爲PNG圖像打印報告,然後可以使用像Paint .NET這樣的圖形程序使背景透明並將兩個報告疊加在一起。

在一個或兩個圖像上使用某種顏色變換(例如,一個顏色爲紅色,另一個爲藍色),它應該顯示您看到的差異非常好。

您在這裏找到PDFCreator http://de.pdfforge.org/pdfcreator。它完全免費使用。

3

diffpdf允許您通過一側的兩個PDF文件並排比較。

4

這個問題已經被接受的答案,但我想給我兩分錢。我們製作了i-net PDFC,與您的場景完美匹配。它已經被用來檢查使用與我們的報告軟件的輸出相匹配的另一個報告工具所做出的報告。但它更強大。什麼PDFC不能做的是:檢查基於圖像的像素的完美程度,但它會根據某些設置檢查文檔基本上(和可視化)基於其內容相同。比純粹的基於像素的比較更強大。

i-net PDFC可以基於視覺或命令行操作(例如批量處理)並與連續集成系統一起工作。可視化組件甚至允許覆蓋兩個PDF文件的半透明,讓用戶檢查pixel-perfectnes。

該軟件是最新的測試版。試試看,讓我們知道你的想法。 (是的,我爲做這個的公司工作。)