Strumento per confrontare un gran numero di file PDF? [chiuso]


84

Ho bisogno di confrontare un gran numero di file PDF per il contenuto ottico. Poiché i file PDF sono stati creati su diverse piattaforme e con diverse versioni del software, ci sono differenze strutturali. Per esempio:

  • la suddivisione in blocchi di testo può essere diversa
  • l'ordine di scrittura può essere diverso
  • la posizione può essere diversa di alcuni pixel

Dovrebbe confrontare il contenuto come un popolo umano e non la struttura interna. Voglio testare le regressioni tra le diverse versioni del generatore di PDF che abbiamo usato.


3
Una risposta parziale sarebbe usare pdftotext e confrontare il testo contenuto.
Sklivvz

Ma questo ignorerà tutte le informazioni non testuali come linee, riquadri, immagini, grafici, ecc. Penso anche che non mostri le posizioni ottiche del testo, altrimenti la posizione strutturale.
Horcrux7

Sono d'accordo, non è un criterio sufficiente. D'altra parte è un criterio necessario, quindi è adeguato come unit test.
Sklivvz

Non sono mai stato nella tua situazione prima, ma ho provato ExamDiff Pro per confrontare i PDF e ha funzionato per me.
cubex

Puoi sempre aggiungere uno unit test migliore in un secondo momento!
Sklivvz

Risposte:


39

Perché non esiste uno strumento del genere che ne abbiamo scritto uno. È possibile scaricare il comparatore di contenuti PDF i-net e utilizzarlo. Spero che aiuti altri con lo stesso problema. Se hai problemi con esso o hai un feedback per noi, puoi contattare il nostro supporto.

inserisci qui la descrizione dell'immagine


Il vantaggio di questo strumento è che non è né un semplice comparatore di testo né un comparatore di immagini. Confronta in base alla struttura, controlla se gli elementi che li contengono sono "gli stessi", quindi i PDF confrontati non devono corrispondere al 100% ma rientrare in una somiglianza definibile. Ed è gratis.
gamma

Lo consiglierei anch'io! Si è bloccato su un documento, quindi l'ho inviato a loro. L'hanno risolto! : Mi sento benissimo. Può generare immagini con differenze o fornire un report testuale nella console.
Janus Troelsen

4
@gamma Dov'è gratuita questa applicazione? Costa almeno 200 USD all'anno (!). È gratuito solo una volta per 30 giorni. È troppo costoso per quello che ci farei.
ygoe

@LonelyPixel Sì, hai ragione. La versione 1.0 era gratuita (dal 2010-10-14). Abbiamo cambiato un po 'e ora è uno strumento a pagamento (2012-10). Puoi comunque provarlo per 30 giorni senza limitazioni. Ha davvero acquisito molte nuove funzionalità, stabilità e affidabilità. Spero che tu abbia ancora uno sguardo;)
gamma

Anch'io ho bisogno di confrontare i file pdf: ho creato un jar usando apache pdfbox. Controlla questo testautomationguru.com/… per esempio e scarica.
vins

21

In realtà esiste uno strumento diffpdf.

http://www.qtrac.eu/diffpdf.html

Il suo punto debole è che non reagisce bene quando le aggiunte fanno spostare parzialmente il nuovo testo in una nuova pagina. Ad esempio, se la vecchia pagina 4 deve essere confrontata con la fine della pagina 5 e l'inizio della pagina 6, sarà necessario spostare i parametri per confrontare le due sezioni separatamente.


1
La versione originale open source è ancora disponibile su qtrac.eu/diffpdf-foss.html
Tobias Kienzler

13

Ho usato uno script fatto in casa che

  • converte tutte le pagine su due PDF in bitmap
  • colora le pagine del PDF 1 in rosso su bianco
  • cambia il bianco in trasparente sulle pagine del PDF 2
  • sovrappone ogni pagina del PDF 2 sopra la pagina corrispondente del PDF 1
  • esegue la conversione / colorazione e la sovrapposizione in parallelo su più core

Software utilizzato:

  • GhostScript per la conversione da PDF a bitmap
  • ImageMagick per la colorazione, la trasparenza e la sovrapposizione
  • inotify per sincronizzare processi paralleli
  • qualsiasi visualizzatore di immagini compatibile con PNG per esaminare il risultato

Professionisti:

  • implementazione semplice
  • tutti gli strumenti utilizzati sono open source
  • ottimo per trovare piccole differenze nel layout

Contro:

  • la conversione è lenta
  • le principali differenze tra i PDF (ad esempio l'impaginazione) risultano in un pasticcio
  • le bitmap non sono zoomabili
  • funziona bene solo per testo e diagrammi in bianco e nero
  • nessuna GUI facile da usare

Stavo cercando uno strumento che facesse lo stesso a livello di PDF / PostScript.

Ecco come il nostro script richiama le utilità (nota che ImageMagick utilizza GhostScript dietro le quinte per eseguire la conversione PDF-> PNG):

$ convert -density 150x150 -fill red -opaque black +antialias 1.pdf back%02d.png
$ convert -density 150x150 -transparent white +antialias 2.pdf front%02d.png
$ composite front01.png back01.png result01.png # do this for all pairs of images

1
Perché non condividere lo script completo?
Janus Troelsen

1
Questo è quello che ho usato per il compositing:for i in $(seq -w 0 05); do /cygdrive/c/Progra~1/ImageMagick-6.6.9-Q8/composite.exe 1-$i.png 2-$i.png result-$i.png; done
Janus Troelsen

Ecco uno script che non scrive file temporanei su disco e utilizza pdftoppm di Poppler, che è più veloce di Ghostscript: gist.github.com/brechtm/891de9f72516c1b2cbc1 . Produce un JPG per ogni pagina dei PDF in una pdfdiffdirectory e stampa inoltre i numeri delle pagine che differiscono tra i due PDF.
Brecht Machiels


9

Abbiamo anche usato pdftotext (vedi la risposta di Sklivvz) per generare versioni ASCII di PDF e wdiff per confrontarli.

Usa l' -layoutinterruttore di pdftotext per migliorare la leggibilità e avere un'idea dei cambiamenti nel layout.

Per ottenere un buon risultato colorato da wdiff, usa questo script wrapper:

#!/bin/sh
RED=$'\e'"[1;31m"
GREEN=$'\e'"[1;32m"
RESET=$'\e'"[0m"
wdiff -w$RED -x$RESET -y$GREEN -z$RESET -n $1 $2

4

Penso che il tuo approccio migliore sarebbe convertire il PDF in immagini con una risoluzione decente e poi fare un confronto delle immagini.

Per generare immagini da PDF è possibile utilizzare Adobe PDF Library o la soluzione suggerita in Modo migliore per convertire i file pdf in file tiff .

Per confrontare i file TIFF generati ho trovato GNU tiffcmp (per windows parte di GnuWin32 tiff ) e tiffinfo ha fatto un buon lavoro. Usa tiffcmp -l e conta il numero di righe di output per trovare eventuali differenze. Se sei felice di avere una piccola quantità di modifiche al contenuto (ad esempio differenze di anti-aliasing), usa tiffinfo per contare il numero totale di pixel e puoi quindi generare un valore di differenza percentuale.

A proposito, per chiunque effettui un semplice confronto PDF in cui la struttura non è cambiata, è possibile utilizzare diff da riga di comando e ignorare determinati modelli, ad esempio con GNU diff 2.7:

diff --brief -I xap: -I xapMM: -I / CreationDate -I / BaseFont -I / ID --binary --text

Questo ha ancora il problema che non rileva sempre le modifiche nei nomi dei caratteri generati.


Penso che il confronto di 2 immagini sia più complesso del confronto dei file PDF stessi.
Horcrux7

Il confronto delle immagini può essere fatto con GnuWin32 tiffcmp. Aggiornerò la mia risposta per approfondire questo.
danio

1

Il nostro prodotto, PDF Comparator - http://www.premediasystems.com/pdfc.html "- lo farà in modo abbastanza elegante ed efficiente. Inoltre non è gratuito ed è un'applicazione solo per Mac OS X.


Questo strumento confronta pixel per pixel. Questo è molto semplice. La domanda era un confronto come lo fa un popolo umano.
Horcrux7

1
@ Horcrux7: Ma in quale altro modo oltre al confronto "pixel per pixel" gli occhi umani confrontano pagine diverse dall'aspetto simile?!?
Kurt Pfeifle

@KurtPfeifle - Mi rendo conto che questo è un vecchio commento ... ma gli esseri umani non confrontano le immagini pixel per pixel; il modo in cui gli esseri umani confrontano le differenze nelle immagini è piuttosto complesso, ma si basa in gran parte sul riconoscimento dei modelli e sull'euristica.
CBRF23

@ CBRF23: Vero, e ne sono consapevole, ma tutta questa euristica alla fine ha ancora radici nei confronti "pixel per pixel". Per alcune altre euristiche di livello superiore, eseguite con ImageMagick, vedere alcune delle mie altre risposte: uno - due - tre .
Kurt Pfeifle

@ CBRF23: ... e il poster originale, (at) Hocrux7 ha persino menzionato "pixel" nella sua domanda, e esplicitamente non voleva che la "struttura interna" dei file fosse confrontata (anche se il suo commento qui lo contraddice ancora).
Kurt Pfeifle

1

In base alle tue esigenze, una soluzione di conversione in testo sarebbe la più semplice e diretta. Ho pensato che l'idea della bitmap fosse piuttosto interessante.



Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.