簡體   English   中英

使用vb.net比較tiff和pdf文件

[英]Compare tiff and pdf files using vb.net

我在VB,.Net環境中尋找示例代碼或第三方工具,它可以比較tiff和pdf文件(可視化比較)並返回true或false。

我的要求是將tiff文件轉換為pdf,我使用iTextSharp,但我現在需要證明轉換后,使用vb.net程序沒有任何改變(為什么?。我不知道,但我需要提供這樣的服務)。

讓我知道,如果你們知道任何這樣的工具,我正在搜索,但我得到的只是將一種格式轉換為另一種格式或比較相同格式文件的工具

您可以嘗試從PDF重新提取tiff,並將此圖像的原始數據與原始tiff文件的原始數據進行比較。

由於PDF格式支持嵌入TIFF文件,因此您的客戶可能只是想確保您沒有將圖像重新壓縮為其他格式,並且在此過程中會有一些質量損失。 這是一個合理的擔憂。

從圖像文件中獲取原始數據:

由於您使用的是iText,因此對於1頁的tiff文件,您可以使用Image.rawData()方法獲取此數據。 您可以使用TiffImage.getTiffImage方法從TIFF文件創建此Image類的實例

從PDF文件中獲取原始數據:

您可以按照此處說明的過程,然后使用PdfReader.GetStreamBytes方法獲取原始數據

您可以逐字節比較流,也可以在創建PDF時將它們保存到文件中,以便以后使用命令行工具將它們用於比較,或者可以計算MD5哈希並使用它。

我沒有測試過這種方法,但我相信它會起作用,因為不涉及TIFF元數據。

ImageMagick的compare命令可以很容易地做到這一點。

 compare file.tif file.pdf -compose src delta.pdf

或者,假設多頁TIFF和多頁PDF,逐頁比較:

 compare file.tif[0] file.pdf[0] -compose src delta_page1.pdf
 compare file.tif[1] file.pdf[1] -compose src delta_page2.pdf
 compare file.tif[2] file.pdf[2] -compose src delta_page3.pdf
 [....]

(ImageMagick的頁面/圖像索引以[0]開頭,而不是[1]!)。

了解delta.pdf:

  1. 如果沒有視覺差異,則得到的delta.pdf將是完全白色的。
  2. 不同的像素將為紅色。
  3. 生成的文件將使用默認的72dpi結果,這可能往往不會發現非常小的像素差異。

您甚至可以像這樣簡化命令:

 compare file.tif file.pdf delta.pdf

得到的delta.pdf將(從上下文)將命令行中的第一個文件顯示為淺灰色背景圖像,並將差異疊加為紅色像素。 當然,從理論上講,您也可以顛倒每個命令的順序:

 compare file.pdf file.tif delta.pdf

但是,您應該知道現實中出現的PDF“白色”背景通常是透明的,而TIFF是真正的白色。 這將導致出現很多像素差異。 最好堅持我先命名的順序:-)

注1:所有這些比較(當然)都假設相同的頁面圖像尺寸和縱橫比。 (否則,您可能需要首先縮放兩個頁面圖像中的一個。)

注意2:您幾乎總會發現較小的像素差異,具體取決於您的整體處理鏈。 這一切都取決於你想通過這種比較發現什么樣的錯誤。 有很多方法可以微調這個....

注3:如果這種方法原則上適用於您,您可以修改輸出格式:您不需要真正使用“紅色像素圖像”中的視覺差異。 您可以改為計算每個獨特的白色(相等)和紅色(不同)像素,然后根據紅色與白色相比的百分比做出決定,這是“好”還是“壞”,最后返回'true'或'false '相應(顯示2個PDF而不是1/1 PDF / TIFF的示例命令):

示例命令:

compare \
   http://qtrac.eu/boson1.pdf[1] http://qtrac.eu/boson2.pdf[1] -compose src \
  -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)

此輸出非常適合自動單元測試。 您可以評估這兩個數字,輕松計算“紅色像素”與“白色像素”比率,然后根據特定閾值決定返回PASSEDFAILED (如果您不嚴格需要“零紅色”像素)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM