2012-09-17 6 views
18

Ho bisogno di rifattorizzare alcuni rapporti (generati con Jasper) utilizzando MS Reporting Services. Copie di report originali sono disponibili in PDF. L'esigenza è di rendere i nuovi report "pixel perfect" molto ingombranti ...Differenza visiva dei file PDF per determinare la perfezione dei pixel

Per semplificare la vita mi piacerebbe avere uno strumento che sovrappone i PDF di report originali e generati per misurare se sono pixel perfetto o no.

È un tale strumento là fuori?

+0

Interessante domanda. Non sei sicuro di quanto questo abbia a che fare con i rapporti, SSRS o Jasper. È possibile ottenere una risposta migliore sostituendo tali tag con altri e aggiornando il titolo per riflettere che si desidera eseguire un "diff visivo PDF". – Jeroen

+1

Chi l'ha proposto come requisito e quale era la giustificazione commerciale? Estrai ogni pagina come una bitmap confronta per pixel. Sono in bianco e nero? –

+0

Vedere [Strumento per confrontare un numero elevato di file PDF?] (Http://stackoverflow.com/q/145657) –

risposta

18

Il metodo più semplice e immediatamente disponibile per eseguire questa operazione: utilizzare ImageMagick's compare (disponibile anche su Windows).

Può anche confrontare le pagine PDF (se utilizza Ghostscript come delegato rendere le pagine PDF al pixel immagini prima):

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

Il risultante delta.pdf saranno rappresentare ciascun pixel come rosso che ha un colore diverso tra le due pagine PDF confrontate. Tutti i pixel identici saranno puramente bianchi. [0] indica a compare di utilizzare le prime pagine di ciascun file per il confronto (il conteggio delle pagine è a base zero).

Si può vedere come questo funziona con il seguente esempio:

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

Ecco le rispettive pagine (convertiti in PNG in scala ridotta per la visualizzazione web). La pagina di riferimento è a sinistra, la pagina modificata è quello centrale, il 'delta-pixel sono rosso' immagine è a destra:

first page   second page   delta image

Un risultato visivo leggermente differente puoi ottenere saltando il parametro -compose src. Poi si otterrà pixel del file originale come uno sfondo grigio-shading (per contesto) con i pixel delta in rosso:

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

first page   second page   delta.pdf

Se non ti piace il rosso colore per le differenze di pixel, utilizzare -highlight-color:

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

La risoluzione di default usata per il rendering delle pagine PDF è 72 dpi.Se avete bisogno di una maggiore precisione, è possibile passare a 300 dpi utilizzando il parametro -density in questo modo:

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

nota, commutazione a densità più elevate rallenterà il processo e creare file più grandi.

È anche possibile creare un file * .txt per l'immagine del delta che descrive le coordinate di ogni pixel ed i rispettivi valori di colore:

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

Poi basta contare il numero di totale vs. nero pixel (scusate, questo è Unix/Linux/MacOSX sintassi):

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

nell'esempio usato per le illustrazioni di cui sopra, ottengo

total_pixels=500990 
black_pixels=8727 

Naturalmente il risultato e 'ideale' sarebbe

black_pixels=0 
+0

Ecco uno script per la visualizzazione visiva di due PDF pagina per pagina utilizzando gli strumenti ImageMagick e Poppler (per la velocità): https://gist.github.com/brechtm/891de9f72516c1b2cbc1. Emette un JPG per ogni pagina dei PDF in una directory 'pdfdiff' e inoltre stampa i numeri delle pagine che differiscono tra i due PDF. –

+0

Sembra non funzionare più? O forse richiede ImageMagick v7 +. v6.9.6-5 lamenta: 'tipo di immagine non riconosciuto 'pdf''. – Monkpit

+1

@Monkpit: Certo che funziona. ImageMagick non è configurato per consumare PDF come form di input. È necessario aver installato e configurato Ghostscript come * delegato * per conto di ImageMagick per elaborare l'input PDF in un'immagine raster e consegnarlo a IM. Di solito questo è già il caso per la maggior parte delle installazioni fuori dalla scatola. Per maggiori dettagli vedi anche * [questa serie di risposte] (http://stackoverflow.com/search?q=user%3A359307+%5Bimagemagick%5D+delegate+pdf) *. –

2

Si consiglia di stampare i report con PDFCreator come un'immagine PNG, è quindi possibile utilizzare un programma di grafica come Paint .NET per rendere lo sfondo trasparente e sovrapporre entrambi i report uno sopra l'altro.

Utilizzando una trasformazione del colore su una o entrambe le immagini (ad esempio colore una in rosso, l'altra in blu) dovrebbe mostrare di vedere le differenze molto buone.

Potete trovare PDFCreator qui http://de.pdfforge.org/pdfcreator. È completamente gratuito da usare.

3

diffpdf ti permette di confrontare due fianco a fianco i PDF.

4

Questa domanda ha già una risposta accettata, ma mi piacerebbe dare il mio due centesimo. Abbiamo creato i-net PDFC che corrisponde perfettamente al tuo scenario. È stato creato per verificare i report creati con un altro strumento di reporting in modo che corrispondano all'output del nostro software di reporting. Ma è ancora più potente. Ciò che PDFC non fa è: controllare la perfezione dei pixel basata sulle immagini, ma controlla, con determinate impostazioni, che un documento è fondamentalmente (e visivamente) lo stesso in base al suo contenuto. Molto più potente del puro confronto basato su pixel.

i-net PDFC può funzionare a livello visivo o da riga di comando (ad esempio per il processo batch) e funziona con i sistemi di integrazione continua. La componente visuale consente anche la sovrapposizione semitrasparente dei due file PDF per consentire all'utente di controllare i pixel perfetti.

Il software è appena uscito dalla versione beta. Fai un tentativo e facci sapere cosa ne pensi. (Sì. Io lavoro per la società che ha creato questo.)

Problemi correlati