2012-09-17 8 views
18

Potrzebuję refaktoryzacji niektórych raportów (generowanych przy użyciu programu Jasper) za pomocą usług MS Reporting Services. Kopie oryginalnych raportów są dostępne w formacie PDF. Wymaga to uczynienia nowych raportów "pikselowymi doskonałymi", co jest bardzo kłopotliwe ...Różnice wizualne plików PDF w celu określenia doskonałości pikseli

Dla ułatwienia życia chciałbym mieć narzędzie, które nakłada oryginalne i wygenerowane pliki PDF raportu w celu zmierzenia, czy są one pikselowe doskonały lub nie.

Czy takie narzędzie jest dostępne?

+0

Interesujące pytanie. Nie wiesz, ile to ma wspólnego z raportowaniem, SSRS lub Jasperem. Możesz uzyskać lepszą odpowiedź, zamieniając te znaczniki na inne i aktualizując tytuł, aby odzwierciedlić, że chcesz zrobić "wizualną różnicę w formacie PDF". – Jeroen

+1

Kto wymyślił to jako wymaganie i jakie było uzasadnienie biznesowe? Wyodrębnij każdą stronę jako bitmapę, porównując piksele. Czy są czarno-białe? –

+0

Zobacz [Narzędzie do porównywania dużej liczby plików PDF?] (Http://stackoverflow.com/q/145657) –

Odpowiedz

18

Najprostsza, natychmiast dostępna metoda: użyj ImageMagick's compare (która jest również dostępna w systemie Windows).

Może nawet porównać stron PDF (choć używa Ghostscript jako delegata do renderowania stron PDF do pixel obrazów pierwszy):

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

Powstały delta.pdf będzie zobrazowania każdego piksela jako czerwonego, który ma inny kolor między dwiema porównywalnymi stronami w formacie PDF. Wszystkie identyczne piksele będą czysto białe. [0] mówi compare o używaniu pierwszych stron każdego pliku do porównania (liczba stron wynosi zero).

Można zobaczyć, jak to działa w następującym przykładzie:

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

Oto poszczególne strony (w przeliczeniu na skalowane w dół PNG do wyświetlania stron internetowych). Strona odniesienia jest po lewej stronie, zmodyfikowana strona jest środkowym z nich, „delta-pixel-to-czerwonych” obraz jest po prawej stronie:

first page   second page   delta image

Nieco inny rezultat wizualny można uzyskać, pomijając parametr -compose src. Wtedy dostaniesz pikseli oryginalnego pliku jako szaro-szare (dla kontekstu) z delta pikselami w kolorze czerwonym:

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

first page   second page   delta.pdf

Jeśli nie podoba czerwona kolor dla różnic pikseli, użyj -highlight-color:

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

domyślną rozdzielczość wykorzystywane do renderowania stron PDF jest 72 dpi.Jeśli potrzebujesz większą precyzję, można przełączyć się na 300 dpi przy użyciu parametru -density tak:

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

Uwaga, przełączanie do wyższych gęstościach spowolni ten proces i tworzyć większe pliki.

Można nawet utworzyć plik * .txt dla obrazu trójkąt, który opisuje współrzędne każdego piksela, a odpowiednie wartości kolorów:

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

Następnie wystarczy policzyć liczbę całkowitych vs. czarne piksele (przepraszam, to jest Unix/Linux/MacOSX składnia):

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

W przykładzie używany do powyższych ilustracjach, mam

total_pixels=500990 
black_pixels=8727 

Of oczywiście „idealne” wynik byłby

black_pixels=0 
+0

Oto skrypt, który wizualnie różni dwa pliki PDF strona po stronie za pomocą narzędzi ImageMagick i Poppler (dla prędkości): https://gist.github.com/brechtm/891de9f72516c1b2cbc1. Wydaje jeden plik JPG dla każdej strony plików PDF w katalogu "pdfdiff" i dodatkowo drukuje numery stron, które różnią się między tymi dwoma plikami PDF. –

+0

To wydaje się już nie działać? Lub prawdopodobnie wymaga ImageMagick v7 +. v6.9.6-5 narzeka: "nierozpoznany typ obrazu" pdf''. – Monkpit

+1

@Monkpit: Oczywiście, że działa. Twój ImageMagick nie jest skonfigurowany do spożywania plików PDF jako danych wejściowych. Musisz zainstalować i skonfigurować Ghostscript jako * delegata * w imieniu ImageMagick, aby przetworzyć dane wejściowe PDF na obraz rastrowy i przekazać go do IM. Zwykle ma to już miejsce w przypadku większości instalacji po wyjęciu z pudełka. Aby uzyskać więcej informacji zobacz także * [ta seria odpowiedzi] (http://stackoverflow.com/search?q=user%3A359307+%5Bimagemagick%5D+delegate+pdf) *. –

2

Zalecam drukowanie raportów z PDFCreator jako obraz PNG, można następnie użyć programu graficznego, takiego jak Paint .NET, aby uczynić tło przezroczystym i ułożyć oba raporty jeden na drugim.

Użycie transformacji kolorów na jednym lub obu obrazach (na przykład kolor jeden na czerwono, a drugi na niebiesko) powinno pokazać różnicę bardzo dobrze.

Tu znajduje się PDFCreator http://de.pdfforge.org/pdfcreator. Jest całkowicie darmowy.

3

diffpdf pozwala na porównanie dwóch plików PDF obok siebie.

4

To pytanie już zostało zaakceptowane, ale chciałbym przekazać moje dwa centy. Zrobiliśmy i-net PDFC, który idealnie pasuje do Twojego scenariusza. Zostało wykonane w celu sprawdzenia, czy raporty wykonane za pomocą innego narzędzia raportującego odpowiadają wynikom naszego oprogramowania do raportowania. Ale jest jeszcze potężniejszy. To, czego nie robi PDFC, to: sprawdzanie doskonałości pikseli opartej na obrazie, ale przy pewnych ustawieniach sprawdza, czy dokument jest zasadniczo (i wizualnie) taki sam na podstawie jego zawartości. O wiele mocniejszy niż czyste porównanie oparte na pikselach.

i-net PDFC może działać wizualnie lub w oparciu o linię poleceń (np. Proces wsadowy) i współpracuje z systemami integracji ciągłej. Komponent wizualny pozwala nawet na półprzezroczyste nakładanie się dwóch plików PDF, aby użytkownik sprawdził perfekcję pikseli.

Oprogramowanie jest nowe z wersji beta. Spróbuj i daj nam znać, co myślisz. (Tak, pracuję dla firmy, która to zrobiła.)