THBPdf Download Contact Us Buy Online Developerse-mail me

PDF Vergleich




Message-ID:<756ovjF16l6r4U1@mid.individual.net>
Subject:

PDF-Vergleich


Date:Tue, 21 Apr 2009 21:34:49 +0100


Liebe (Fach)Kundige,

habe ein Problem mit dem Vergleich von zwei PDF-Files.

Konkret:
Es werden aus einer (umfangreichen) Applikation bestimmte
Daten als PDF ausgegeben (ueber einen kommerziellen PDF-Creator).

Die so erstellten PDF-Files werden dann entweder ausgedruckt oder
als E-Mailanhang versendet UND auf jeden Fall in ein externes
Archivsystem abgelegt.

Das Problem ist nun, dass bestimmte Sachen mehr als einmal ausgegeben
werden, da an den Basisdaten etwas geaendert wurde. Manche der 
Aenderungen wirken sich auf den Inhalt der erstellten PDF ueberhaupt 
nicht aus aber loesen die Erstellung eines Files aus.

Zum Teil ist so eine Zweit-, Dritt- usw. Erstellung auch gewollt und
muss so bleiben, aber die dadurch entstandene Zweit-, Dritt- usw. 
Abspeicherung des Dokuments in dem externen Archivsystem (da es 
inhaltlich 100% das gleiche wie die Erstausgabe) unnoetig.

Wir wollten es dadurch umgehen, das man von jedem PDF ein MD5 (oder eine 
andere Hash) erstellt und die Dokumente mit gleichem Namen und Hashwert 
nicht ein zweites Mal archiviert.

Leider funktioniert dies nicht, da alle PDF's eine Art TimeStamp oder 
GUID haben, so dass auch inhaltlich gleiche PDF's verschiedene Hashwerte 
liefern.

Frage, kennt jemand die Stelle im PDF-File, so dass man diesen Bereich
in der Hashwertberechnung nicht beruecksichtigt?

Danke.

Gruesse
Julius


-- 
(my real mail address ends with a .net tld)




Message-ID:<756qcsF16g54gU1@mid.individual.net>
Subject:

Re: PDF-Vergleich


Date:Tue, 21 Apr 2009 21:59:08 +0100


Julius Kavay schrieb:

> Frage, kennt jemand die Stelle im PDF-File, so dass man diesen Bereich
> in der Hashwertberechnung nicht beruecksichtigt?

Nun, das Erstellungsdatum steht neben anderen Metadaten im »document
information dictionary« und ggf. im »Metadata«-Stream. Siehe
<http://www.adobe.com/devnet/pdf/pdfs/PDFReference16.pdf>

Christian
-- 
Christian Zietz  -  CHZ-Soft  -  czietz (at) gmx.net
WWW: http://www.chzsoft.com.ar/
PGP/GnuPG-Key-ID: 0x6DA025CA




Message-ID:<slrngusfkb.1und.Thomas.Kaiser@phg-online.de>
Subject:

Re: PDF-Vergleich


Date:Tue, 21 Apr 2009 22:45:48 +0100


Julius Kavay schrieb in <news:756ovjF16l6r4U1@mid.individual.net>
> Frage, kennt jemand die Stelle im PDF-File, so dass man diesen Bereich 
> in der Hashwertberechnung nicht beruecksichtigt?

Vergiß den Ansatz bzw. guck Dir an, wie PDF intern aufgebaut ist. Wenn's 
wirklich "nur" um inhaltliche Übereinstimmung geht und die PDF, die 
typischerweise "inhaltlich identisch" sind, aus gleicher Quelle stammen 
(sprich: selbes Erzeugerprogramm und selbe PDF-Engine), dann _könnte_ es 
funktionieren, den Text aus dem PDF zu extrahieren [1] und die so 
entstandenen Texte bzw. Textdateien per Hash zu vergleichen.

Wir haben hier grad für ein Projekt eine visuelle Überprüfung (auf Basis 
von gerenderten PDF) programmiert. Aber das dürfte totaler Overkill 
sein...

Gruss,

Thomas

[1] Mittels pdftotext <http://www.foolabs.com/xpdf/download.html> oder 
    am Mac bspw. per 
    
    mdimport -d2 /pfad/zum/pdf 2>&1 | grep kMDItemTextContent
    
    (geht fast Faktor zwei schneller)





Message-ID:<757uvqF16okn8U1@mid.individual.net>
Subject:

Re: PDF-Vergleich


Date:Wed, 22 Apr 2009 08:23:27 +0100


Thomas Kaiser wrote:

Danke Dir fuer das beiseiteschieben meiner Scheuklappen...

>> Frage, kennt jemand die Stelle im PDF-File, so dass man diesen Bereich 
>> in der Hashwertberechnung nicht beruecksichtigt?
> 
> Vergiß den Ansatz bzw. guck Dir an, wie PDF intern aufgebaut ist. Wenn's
PDF-Aufbau ist gut, die Spezifikation hat ueber 1200 Seiten!

> wirklich "nur" um inhaltliche Übereinstimmung geht und die PDF, die
ja, genau um das geht es mir

> typischerweise "inhaltlich identisch" sind, aus gleicher Quelle stammen 
> (sprich: selbes Erzeugerprogramm und selbe PDF-Engine), dann _könnte_ es 
ja, es ist immer die gleiche Quelle (Datenbank und Erstell-SW)

> funktionieren, den Text aus dem PDF zu extrahieren [1] und die so 
> entstandenen Texte bzw. Textdateien per Hash zu vergleichen.

Die Frage ist nunmehr, wie mache ich es am einfachsten?

Die PDF's liegen zunaechst im Speicher als Datenstream (a) und werden
dann in das Filesystem (b) gespeichert.
Gelingt es mir die Textdaten noch aus (a) zu extrahieren, waere es 
sicher ein Geschwindigkeitsvorteil zu (b), da File open und lesen entfallen.

Ich werde mal unseren PDF-Engine (PDFlib) befragen, welche 
Moeglichkeiten es fuer eine Textextrahierung da gibt.

Danke und einen schoenen Tag.

Gruesse
Julius

-- 
(my real mail address ends with a .net tld)




Message-ID:<slrngutlh3.1vjc.Thomas.Kaiser@phg-online.de>
Subject:

Re: PDF-Vergleich


Date:Wed, 22 Apr 2009 09:32:35 +0100


Julius Kavay schrieb in <news:757uvqF16okn8U1@mid.individual.net>
> Thomas Kaiser wrote:
>
>> Vergiß den Ansatz bzw. guck Dir an, wie PDF intern aufgebaut ist. Wenn's
> PDF-Aufbau ist gut, die Spezifikation hat ueber 1200 Seiten!

Kapitel 12.2 in der Bibel [1] reicht -- Stichwort "xref".

> Ich werde mal unseren PDF-Engine (PDFlib) befragen, welche 
> Moeglichkeiten es fuer eine Textextrahierung da gibt.

Also wenn schon der komplette Erstellungsprozeß unter Kontrolle ist, 
würde ich mir den Schmarrn mit nachträglichem Abgleich der Inhalte 
komplett sparen und aus der Datenbank ein Flag mit rausschubsen, ob sich 
was geändert hat oder nicht. Aber oft sind die Wege ja verschlungener 
als einem lieb ist.

Gruss,

Thomas

[1] Aus der Feder des "Vaters" der PDFLib:
    <http://www.pdflib.com/developer/technical-documentation/books/postscript-pdf-bibel/>




Message-ID:<759edkF176chvU1@mid.individual.net>
Subject:

Re: PDF-Vergleich


Date:Wed, 22 Apr 2009 21:52:56 +0100


Thomas Kaiser wrote:

> Kapitel 12.2 in der Bibel [1] reicht -- Stichwort "xref".

Jetzt ist es mir klar, warum ein Direktvergleich nie und niemals 
funktionieren kann.

Aber die Bibel ist gut - da wird in wenigen Saetzen ein solider 
Ueberblick geliefert, die Details kann ich mir dann aus der 
Spezifikationen holen. Danke fuer den Link.

> Also wenn schon der komplette Erstellungsprozeß unter Kontrolle ist, 
> würde ich mir den Schmarrn mit nachträglichem Abgleich der Inhalte 
> komplett sparen und aus der Datenbank ein Flag mit rausschubsen, ob sich 
> was geändert hat oder nicht. Aber oft sind die Wege ja verschlungener 
> als einem lieb ist.
Das mit rausschubsen von Aenderungsflags wird nicht gehen, da es
stellenweise durchaus gewollt bzw. erforderlich ist, dass ohne 
(sichtbare) Aenderung trotzdem ein Dokument herauskommt.
Mal abgesehen davon, dass es oft gar nicht so einfach festzustellen ist, 
ob eine Aenderung auch auf eine Ausgabe Auswirkung hat oder nicht.

Danke fuer die Infos und einen schoenen Abend.

Gruesse
Julius

-- 
(my real mail address ends with a .net tld)




Message-ID:<slrnguv2mq.2ds2.Thomas.Kaiser@phg-online.de>
Subject:

Re: PDF-Vergleich


Date:Wed, 22 Apr 2009 22:23:39 +0100


Julius Kavay schrieb in <news:759edkF176chvU1@mid.individual.net>
> die Bibel ist gut - da wird in wenigen Saetzen ein solider Ueberblick 
> geliefert, die Details kann ich mir dann aus der Spezifikationen 
> holen. Danke fuer den Link.

Gerne. Das Ding ist IMO Pflichtlektüre bzw. gehört in jedem Fall in 
(digitale) Bibliothek, wenn man bisserl tiefer bzgl. PDF einsteigen will 
(obwohl natürlich einiges veraltet ist)


> Das mit rausschubsen von Aenderungsflags wird nicht gehen, da es
> stellenweise durchaus gewollt bzw. erforderlich ist, dass ohne 
> (sichtbare) Aenderung trotzdem ein Dokument herauskommt.

Da könnte man einfach das PDF durch Setzen von entsprechenden Metadaten 
(in XMP [1] verpackt) markieren. Mittels bspw. "pdfinfo -meta" (auch aus 
dem XPDF-Paket) könntest Du blitzschnell das entsprechende Flag aus dem 
PDF auslesen und dann entscheiden, ob erneute Archivierung nötig ist 
oder nicht.

> Mal abgesehen davon, dass es oft gar nicht so einfach festzustellen 
> ist, ob eine Aenderung auch auf eine Ausgabe Auswirkung hat oder 
> nicht.

Hmm... in der Situation (wenn eben PDF immer mit gleicher Engine erzeugt 
wird), dann sollte ein Hash über den extrahierten Text helfen. Rendern 
und Vergleich von Byte- bzw Bitmaps (in Deiner Situation zwar eher 
supersimpel) dürfte IMO nicht nötig sein.

Gruss,

Thomas

[1] <http://www.pdflib.com/developer/xmp-metadata/>




Message-ID:<758i5aF1721p7U2@mid.individual.net>
Subject:

Re: PDF-Vergleich


Date:Wed, 22 Apr 2009 13:50:50 +0100


Julius Kavay schrieb:
> Liebe (Fach)Kundige,
> 
> habe ein Problem mit dem Vergleich von zwei PDF-Files.
> 
> Konkret:
> Es werden aus einer (umfangreichen) Applikation bestimmte
> Daten als PDF ausgegeben (ueber einen kommerziellen PDF-Creator).
> 
> Die so erstellten PDF-Files werden dann entweder ausgedruckt oder
> als E-Mailanhang versendet UND auf jeden Fall in ein externes
> Archivsystem abgelegt.
> 
> Das Problem ist nun, dass bestimmte Sachen mehr als einmal ausgegeben
> werden, da an den Basisdaten etwas geaendert wurde. Manche der
> Aenderungen wirken sich auf den Inhalt der erstellten PDF ueberhaupt
> nicht aus aber loesen die Erstellung eines Files aus.

Du könntest die beiden zu vergleichenden pdf-Dateien in bibmap-Grafiken
(z.B. .png) wandeln und diese geeignet vergleichen. Probier, ob da MD5
funktioniert. Wenn nicht kann man auch per ImageMagick sowas wie eine
Differenz aus den Inhalten bilden und das Ergebnis auswerten. Nur so als
Denkansatz.

...Rolf




Message-ID:<a33e13b8-e45d-4353-8893-4a697e25bb09@u8g2000yqn.googlegroups.com>
Subject:

Re: PDF-Vergleich


Date:Thu, 23 Apr 2009 21:58:37 +0100


On 21 Apr., 22:34, Julius Kavay
<ka...@gmx.net.valid.address.changed.to.invalid> wrote:
> Liebe (Fach)Kundige,
>
> habe ein Problem mit dem Vergleich von zwei PDF-Files.
>
> Konkret:
> Es werden aus einer (umfangreichen) Applikation bestimmte
> Daten als PDF ausgegeben (ueber einen kommerziellen PDF-Creator).
>
> Die so erstellten PDF-Files werden dann entweder ausgedruckt oder
> als E-Mailanhang versendet UND auf jeden Fall in ein externes
> Archivsystem abgelegt.
>
> Das Problem ist nun, dass bestimmte Sachen mehr als einmal ausgegeben
> werden, da an den Basisdaten etwas geaendert wurde. Manche der
> Aenderungen wirken sich auf den Inhalt der erstellten PDF ueberhaupt
> nicht aus aber loesen die Erstellung eines Files aus.
>
> Zum Teil ist so eine Zweit-, Dritt- usw. Erstellung auch gewollt und
> muss so bleiben, aber die dadurch entstandene Zweit-, Dritt- usw.
> Abspeicherung des Dokuments in dem externen Archivsystem (da es
> inhaltlich 100% das gleiche wie die Erstausgabe) unnoetig.
>
> Wir wollten es dadurch umgehen, das man von jedem PDF ein MD5 (oder eine
> andere Hash) erstellt und die Dokumente mit gleichem Namen und Hashwert
> nicht ein zweites Mal archiviert.
>
> Leider funktioniert dies nicht, da alle PDF's eine Art TimeStamp oder
> GUID haben, so dass auch inhaltlich gleiche PDF's verschiedene Hashwerte
> liefern.
>
> Frage, kennt jemand die Stelle im PDF-File, so dass man diesen Bereich
> in der Hashwertberechnung nicht beruecksichtigt?
>
> Danke.
>
> Gruesse
> Julius
>
> --
> (my real mail address ends with a .net tld)

Hallo!

Nach unserem heutigen Telefonat habe ich doch mal eben hier
reingeschaut ... ;-)
Vieles wurde hier jetzt schon gesagt...
Auch f=FCr mich gibt es zwei Vergleichsm=F6glichkeiten:
1. Textextraktion mit zus=E4tzlichen Layoutinformationen und daraus
einen u.U. auch mit einem individuellen Algorithmus einen guid-
vergleichbaren Wert ermitteln.
2. Die PDF-Ausgabe in eine Image-Datei (z.B. jpeg) rendern und dessen
Wert ermitteln.
Was in jedem Fall ausscheidet, ist der komplette PDF-Vergleich, da
z.B. in jedem PDF ein Erstellungs- und ein Modifikationsdatum erzeugt
werden. Diese sind nat=FCrlich (auch wenn der Text identisch ist) immer
wieder anders und somit w=E4ren auch ermittelte Hash-Werte immer wieder
anders.
Um sicher zu gehen k=F6nnte man auch M=F6glichkeit 1 und 2 verbinden (ist
nat=FCrlich auch eine Performancefrage).

Viele Gr=FC=DFe,
Ingo Schm=F6kel

www.PDF-Analyzer.com




Message-ID:<b1b74330-4616-4035-b435-02b599730917@r36g2000vbr.googlegroups.com>
Subject:

Re: PDF-Vergleich


Date:Wed, 13 May 2009 09:06:06 +0100



On 23 Apr., 22:58, ingo.schmoe...@gmx.de wrote:
> On 21 Apr., 22:34, Julius Kavay
> <ka...@gmx.net.valid.address.changed.to.invalid> wrote:
>
> > Das Problem ist nun, dass bestimmte Sachen mehr als einmal ausgegeben
> > werden, da an den Basisdaten etwas geaendert wurde. Manche der
> > Aenderungen wirken sich auf den Inhalt der erstellten PDF ueberhaupt
> > nicht aus aber loesen die Erstellung eines Files aus.
>
> > Frage, kennt jemand die Stelle im PDF-File, so dass man diesen Bereich
> > in der Hashwertberechnung nicht beruecksichtigt?
>
> Nach unserem heutigen Telefonat habe ich doch mal eben hier
> reingeschaut ... ;-)
> Vieles wurde hier jetzt schon gesagt...
> Auch f=FCr mich gibt es zwei Vergleichsm=F6glichkeiten:
> 1. Textextraktion mit zus=E4tzlichen Layoutinformationen und daraus
> einen u.U. auch mit einem individuellen Algorithmus einen guid-
> vergleichbaren Wert ermitteln.
> 2. Die PDF-Ausgabe in eine Image-Datei (z.B. jpeg) rendern und dessen
> Wert ermitteln.
> Was in jedem Fall ausscheidet, ist der komplette PDF-Vergleich, da
> z.B. in jedem PDF ein Erstellungs- und ein Modifikationsdatum erzeugt
> werden. Diese sind nat=FCrlich (auch wenn der Text identisch ist) immer
> wieder anders und somit w=E4ren auch ermittelte Hash-Werte immer wieder
> anders.
> Um sicher zu gehen k=F6nnte man auch M=F6glichkeit 1 und 2 verbinden (ist
> nat=FCrlich auch eine Performancefrage).

Warum nicht die dritte Methode:
- pdf(s) einlesen (read, parse to data structure)
- alles wegwerfen, was nicht zur Darstellung geh=F6rt
- rest vergleichen
Ich habe dereinst mal an einem pdf-to-svg-undandersrum converter
gebastelt und der Vergleich .xml (.svg) zuneinander war harmlos. Mann
konnte sogar so Dinge wie -hier zus=E4tzliche Linie- erkennen.
Vielleicht heutzutage mit Inkscape?

Bis bald,
    Guenther




Message-ID:<slrnh0l4q5.mbt.Thomas.Kaiser@phg-online.de>
Subject:

Re: PDF-Vergleich


Date:Wed, 13 May 2009 10:30:45 +0100


gkayzar@gmail.com schrieb in <news:b1b74330-4616-4035-b435-02b599730917@r36g2000vbr.googlegroups.com>
> Ich habe dereinst mal an einem pdf-to-svg-undandersrum converter
> gebastelt und der Vergleich .xml (.svg) zuneinander war harmlos.

Wenn das PDF ausreichend primitiv ist (also nur einen Bruchteil der 
Möglichkeiten des graphischen Modells von PDF nutzt), dann mag so eine 
Konvertierung von PDF nach SVG verlustfrei möglich sein (die andere 
Richtung ist natürlich kein Problem, da das graphische Modell von SVG 
ultraprimitiv ist und demnach problemlos 1:1 in PDF abgebildet werden 
kann).

Wohlgemerkt spreche ich vom graphischen Modell und nicht den Daten- 
strukturen. Bei Letzteren bildet SVG wohl höchstens ein Promillchen des 
mit PDF bzw. ISO 32000 Möglichen ab.

Gruss,

Thomas




Message-ID:<21e9dbc4-3fb4-4554-91bf-84a5d1199560@h23g2000vbc.googlegroups.com>
Subject:

Re: PDF-Vergleich


Date:Wed, 13 May 2009 16:20:10 +0100


On 13 Mai, 11:30, Thomas Kaiser <Thomas.Kai...@phg-online.de> wrote:
> gkay...@gmail.com schrieb in <news:b1b74330-4616-4035-b435-02b599730917@r=
36g2000vbr.googlegroups.com>
>
> > Ich habe dereinst mal an einem pdf-to-svg-undandersrum converter
> > gebastelt und der Vergleich .xml (.svg) zuneinander war harmlos.
>
> Wenn das PDF ausreichend primitiv ist (also nur einen Bruchteil der
> M=F6glichkeiten des graphischen Modells von PDF nutzt), dann mag so eine
> Konvertierung von PDF nach SVG verlustfrei m=F6glich sein (die andere
> Richtung ist nat=FCrlich kein Problem, da das graphische Modell von SVG
> ultraprimitiv ist und demnach problemlos 1:1 in PDF abgebildet werden
> kann).

Kurzum stimme ich zu, das das grafische Model von PDF vollkommen
ueberfrachtet ist, und mann nur ein paar Elemente zum Setzen von
Text,
Vektorgrafik und Images wirklich br=E4uchte. Ich moechte dann aber auch
die entsprechenden Elemente in PDF sehen : animate + filter...

> Wohlgemerkt spreche ich vom graphischen Modell und nicht den Daten-
> strukturen. Bei Letzteren bildet SVG wohl h=F6chstens ein Promillchen des
> mit PDF bzw. ISO 32000 M=F6glichen ab.

Ich kann bei SVG in die metadata f=FCr JEDES grafische Element
leztendlich
komplette .xml packen. Wie man mit soeinem maechtigem Werkzeug
nur einen kleinen Teil von PDF erzielt, w=E4re mir ein R=E4tsel.

Bis bald, Guenther.




Message-ID:<slrnh17dam.2ak9.Thomas.Kaiser@phg-online.de>
Subject:

Re: PDF-Vergleich


Date:Wed, 20 May 2009 08:46:30 +0100


gkayzar@gmail.com schrieb am 13.05.2009 in <news:21e9dbc4-3fb4-4554-91bf-84a5d1199560@h23g2000vbc.googlegroups.com>
> Kurzum stimme ich zu, das das grafische Model von PDF vollkommen 
> ueberfrachtet ist

Hmm... ich hab mich zwischendurch mal mit dem aktuellen (bzw. schon 
länger gültigen) Status von SVG befaßt und musste feststellen, daß ich 
extrem un- bzw. falschinformiert war. Danke also fürs Zurückbiegen 
meiner Scheuklappen hinsichtlich SVG :-)

So unterschiedlich sind die grafischen Modelle von SVG und PDF ja gar 
nicht. Wenn man die jeweilige Ausrichtung -- hier Web, dort Print bzw. 
"alles Mögliche" -- im Hinterkopf behält, sogar ziemlich identisch.

>> Wohlgemerkt spreche ich vom graphischen Modell und nicht den Daten- 
>> strukturen. Bei Letzteren bildet SVG wohl höchstens ein Promillchen 
>> des mit PDF bzw. ISO 32000 Möglichen ab.
>
> Ich kann bei SVG in die metadata für JEDES grafische Element 
> leztendlich komplette .xml packen.

Was nix dran ändert, daß am Ende ein SVG-Renderer damit umgehen können 
muß?

> Wie man mit soeinem maechtigem Werkzeug nur einen kleinen Teil von PDF 
> erzielt, wäre mir ein Rätsel.

"Datenstrukturen". PDF hat halt schon mal quasi alles von PostScript 
geerbt. Man kann im Prinzip schon allein aus historischen Gründen ein 
Bildobjekt in 'zig verschiedenen Farbräumen, Formaten, Kodierungen 
(Kompression), etc. in ein PDF stopfen, auch wenn's inzwischen wenig 
sinnvoll ist, nur ein kleines Subset davon zu verwenden.

Aber das hat ja nix mit dem grafischen Modell zu tun (Bild bleibt Bild, 
egal wie kodiert/komprimiert). Und da ähneln sich SVG und PDF dann doch 
wiederum sehr stark. Hab mich jetzt mal bisserl mit dem Fokus auf 
dynamische Seitengenerierung eingelesen und werf' hier IMO taugliche 
Startpunkte mal ab, falls es noch wen interessieren sollte:

* http://www.svgopen.org/2002/papers/danilo_fujisawa__svg_as_page_description_language/
* http://www.alexmac.cc/publications.html

Gruss,

Thomas




Message-ID:<bdeeb00b-df26-4b46-9a3b-11015173417e@z5g2000vba.googlegroups.com>
Subject:

Re: PDF-Vergleich


Date:Wed, 20 May 2009 18:52:39 +0100


On 20 Mai, 09:46, Thomas Kaiser <Thomas.Kai...@phg-online.de> wrote:
> gkay...@gmail.com schrieb am 13.05.2009 in <news:21e9dbc4-3fb4-4554-91bf-=
84a5d1199560@h23g2000vbc.googlegroups.com>
>
> > Kurzum stimme ich zu, das das grafische Model von PDF vollkommen
> > ueberfrachtet ist

[....]
>  Hab mich jetzt mal bisserl mit dem Fokus auf
> dynamische Seitengenerierung eingelesen und werf' hier IMO taugliche
> Startpunkte mal ab, falls es noch wen interessieren sollte:
>
> *http://www.svgopen.org/2002/papers/danilo_fujisawa__svg_as_page_descr...
> *http://www.alexmac.cc/publications.html
>
> Gruss,
>
> Thomas


Danke f=FCr die Links.

K=F6nnte jemand in 3, 4 S=E4tzen auch das Verh=E4ltnis von SVG zu XPS (dem
von Microsoft gepuschten PDF-"Konkurrenz"format) zusammenfassen, rein
auf deren technische Meriten reduziert (d.h. ohne "Politik", wenn's
geht)?

Ciao,
pipitas




Message-ID:<93e05e41-edd5-403b-b644-601a918e8a63@t11g2000vbc.googlegroups.com>
Subject:

Re: PDF-Vergleich


Date:Mon, 11 May 2009 18:53:46 +0100



On 21 Apr., 22:34, Julius Kavay
<ka...@gmx.net.valid.address.changed.to.invalid> wrote:

> Das Problem ist nun, dass bestimmte Sachen mehr als einmal ausgegeben
> werden, da an den Basisdaten etwas geaendert wurde. Manche der
> Aenderungen wirken sich auf den Inhalt der erstellten PDF ueberhaupt
> nicht aus aber loesen die Erstellung eines Files aus.
>
> Zum Teil ist so eine Zweit-, Dritt- usw. Erstellung auch gewollt und
> muss so bleiben, aber die dadurch entstandene Zweit-, Dritt- usw.
> Abspeicherung des Dokuments in dem externen Archivsystem (da es
> inhaltlich 100% das gleiche wie die Erstausgabe) unnoetig.
>
> Wir wollten es dadurch umgehen, das man von jedem PDF ein MD5 (oder eine
> andere Hash) erstellt und die Dokumente mit gleichem Namen und Hashwert
> nicht ein zweites Mal archiviert.
>
> Leider funktioniert dies nicht, da alle PDF's eine Art TimeStamp oder
> GUID haben, so dass auch inhaltlich gleiche PDF's verschiedene Hashwerte
> liefern.

Ich hatte heute ein =E4hnliches Problem. Und zwar m=F6chte ich
verschiedene PDF-Seiten miteinander vergleichen, die u.U. subtile
Abweichungen voneinander aufweisen, sichtbar im Ausdruck auf Papier
oder auch bei Betrachtung auf dem Bildschirm, jedoch ohne dass es dem
menschlichen Auge auf Anhieb auff=E4llt.

Was ich zuerst versuchte:

  1. Mit Hilfe von Ghostscript die PDF-Seiten
     rendern, und zwar zu TIFF G4.
  2. Die MD5-Summe f=FCr die TIFF-Seiten bilden
     und vergleichen.

Hier hat mich allerdings dasselbe Feature in den A.... gebissen: die
TIFF-Dateien tragen intern einige Meta-Daten, u.a. einen Zeitstempel.
Sichtbar zu machen ist dies mit dem "tiffinfo" Kommandozeilen-
Hilfsprogramm, das als Teil der libtiff verf=FCgbar ist.

Und dieses Faktum bewirkt nat=FCrlich eine andere MD5-Summe, selbst wenn
die TIFFs auf Papier oder Bildschirm deckungs- und pixelgleich
rendern.

Etwas weitere Recherche bez=FCglich der libtiff-Hilfsprogramme brachten
mich dann auf die weiteren Utilities "tiffdump" und "tiffset".

Mit tiffdump kann man die Metadaten-Felder samt ihrer Nummerierung
auslesen, tiffset kann (beliebige?) Metadaten-Felder in einer TIFF
umschreiben.

Ich habe festgestellt, dass ich lediglich das "DateTime"-Feld
normalisieren muss, und dann sind in meinem Fall die TIFFs per md5sum
vergleichbar. (Falls die TIFFs z.B. von verschiedenen Applikationen
oder Software-Versionen, z.B. Ghostscript v. 8.54 und Ghostscript 8.64
erstellt wurden, m=FCsste man noch weitere Felder normalisieren.)

Was ich jetzt mache:

  1. Mit Hilfe von Ghostscript die PDF-Seiten
     rendern, und zwar zu TIFF G4.
  2. Mit Hilfe von "tiffset" das DateTime-Tag
     der TIFF-Seiten auf "2000:00:00 00:00:00" setzen.
  3. Die MD5-Summe f=FCr die TIFF-Seiten bilden
     und vergleichen.

Konkret siehen die zugeh=F6rigen Kommandos so aus (Beispiel auf Linux):

   for i in 1 2 3 4; do
       gs \
          -dNOPAUSE \
          -dBATCH \
          -sDEVICE=3Dtiffg4 \
          -dFirstPage=3D13 \
          -dLastPage=3D13 \
          -sOutputFile=3Dpage13_no${i}.tif \
          example.pdf;
        sleep 1;
       done

   tiffinfo page*.tif | grep DateTime
     DateTime: 2009:05:11 19:04:21
     DateTime: 2009:05:11 19:04:22
     DateTime: 2009:05:11 19:04:23
     DateTime: 2009:05:11 19:04:24

   for i in 1 2 3 4; do
       tiffset -s 306 "2000:00:00 00:00:00" page13_no${i}.tif
   done

   tiffinfo page*.tif | grep DateTime
     DateTime: 2000:00:00 00:00:00
     DateTime: 2000:00:00 00:00:00
     DateTime: 2000:00:00 00:00:00
     DateTime: 2000:00:00 00:00:00

   md5sum page*.tif
     5c670543016e529f7cb795d52ef11f40  page13_no1.tif
     5c670543016e529f7cb795d52ef11f40  page13_no2.tif
     5c670543016e529f7cb795d52ef11f40  page13_no3.tif
     5c670543016e529f7cb795d52ef11f40  page13_no4.tif

Ohne das dazwischengeschaltete tiffset-Kommando w=E4ren da 4
verschiedene MD5-Summen.

Um Performanz zu gewinnen, kann man beim Ghostscript-Aufruf noch einen
Parameter hinsichtlich der Aufl=F6sung mitgeben, um kleinere TIFFs zu
erzeugen (standardm=E4ssig kommen 204x196 ppi raus). Das reicht auf
jeden Fall, um einzelne fehlenden oder ausgetauschte Buchstaben
aufzusp=FCren mit einer Wahrscheinlichkeit von 99,999% (die
letztendliche Genauigkeit liegt an der "G=FCte" des MD5-Hashing-
Algorithmus).

Da noch nicht ganz klar ist, wie genau der Vergleich sein muss, um
unerw=FCnschte Abweichungen auch bei Grafik-Darstellungen 100%-ig
aufzusp=FCren, k=F6nnte man am selben Parameter die Aufl=F6sung auch auf 60=
0
oder 1200 dpi raufsetzen... Das weitere m=FCssen jetzt die Praxistests
ergeben.

Die libtiff-Tools sind auch f=FCr Windows verf=FCgbar, z.B. hier:

   http://gnuwin32.sourceforge.net/downlinks/tiff.php

Gruss, pipitas




Message-ID:<slrnh0h4so.6di.Thomas.Kaiser@phg-online.de>
Subject:

Re: PDF-Vergleich


Date:Mon, 11 May 2009 22:07:36 +0100


pipitas schrieb in <news:93e05e41-edd5-403b-b644-601a918e8a63@t11g2000vbc.googlegroups.com>
>   2. Die MD5-Summe für die TIFF-Seiten bilden
>      und vergleichen.
>
> Hier hat mich allerdings dasselbe Feature in den A.... gebissen: die
> TIFF-Dateien tragen intern einige Meta-Daten, u.a. einen Zeitstempel.

Hint: Es gibt Grafikdateiformate, die ohne dateiinterne Metadaten 
auskommen, bspw. "PNM": 

    <http://netpbm.sourceforge.net/doc/index.html#formats>

Damit kann man sich die ganzen Metadaten-Kaspereien per se sparen.

> Sichtbar zu machen ist dies mit dem "tiffinfo" Kommandozeilen-
> Hilfsprogramm, das als Teil der libtiff verfügbar ist.

Nur am Rande (bzw. abseits TIFF). Wenn's um Metadaten in Bildformaten 
_und auch in PDF_ geht, kommt man schon seit Jahren um exiftool kaum 
herum:

    <http://www.sno.phy.queensu.ca/~phil/exiftool/>

> Ich habe festgestellt, dass ich lediglich das "DateTime"-Feld 
> normalisieren muss, und dann sind in meinem Fall die TIFFs per md5sum 
> vergleichbar. (Falls die TIFFs z.B. von verschiedenen Applikationen 
> oder Software-Versionen, z.B. Ghostscript v. 8.54 und Ghostscript 8.64 
> erstellt wurden, müsste man noch weitere Felder normalisieren.)

Evtl. kippt Dir die ganze md5-Idee dann aus den Latschen, denn auch 
verlustfreie Kompressionsalgorithmen (also solche, die 100% identische 
Pixel nach Kodierung/Dekodierung hervorbringen) können zu völlig 
unterschiedlichen Datenströmen führen, je nachdem welche Optimierungs- 
parameter eingeschaltet werden. Aber keine Ahnung, ob das auf CCITT 
Group 4 auch zutrifft :-)

> Was ich jetzt mache:
> [...]
> Das reicht auf jeden Fall, um einzelne fehlenden oder ausgetauschte 
> Buchstaben aufzuspüren mit einer Wahrscheinlichkeit von 99,999%

Bin gespannt, wie hoch die Wahrscheinlichkeit für "False Positives" beim 
MD5-Ansatz ausfallen wird *g*

> Da noch nicht ganz klar ist, wie genau der Vergleich sein muss, um 
> unerwünschte Abweichungen auch bei Grafik-Darstellungen 100%-ig 
> aufzuspüren, könnte man am selben Parameter die Auflösung auch auf 600 
> oder 1200 dpi raufsetzen... Das weitere müssen jetzt die Praxistests 
> ergeben.

Da wünsche ich jetzt schon viel Spaß. Du machst aktuell noch nichts 
weiter, als Bytestreams (inkl. gefakter Metadaten) hinsichtlich 
"komplett identisch?" zu vergleichen. Die Annahme dahinter, daß damit 
auch eine visuelle bzw. inhaltliche Übereinstimmung im selben Maß 
einhergeht, könnte evtl. falsch sein (alleine schon wegen Rendering- 
Ungenauigkeiten).

Da Du TIFF G4 nutzen willst, scheint es sich um reine Text-PDF ohne 
Abbildungen und Farbe zu handeln (was die Sache "eigentlich" deutlich 
erleichtert). Wir hier (sind seit einem halben Jahr in ein Projekt 
verwickelt, bei dem es darum geht, quasi virtuelle Screenshots von 
Quark- und InDesign-Seiten mit einem gerenderten PDF zu vergleichen auf 
_inhaltliche_ Abweichungen) haben nicht das Glück. Wir mussten uns vom 
Anfang an mit Bilder, Texten und vektorisierten Elementen herumschlagen, 
dito verschiedenen Farbräumen, Rendering-Anomalien, "seltsamem" 
Verhalten seitens der Programme, wenn sie mal Seitenelemente nicht um 
Zugriff haben, etc.

Jedenfalls ist _unser_ Vorhaben keins, bei dem es nur um 100% 
Übereinstimmung eines Byte-Streams geht, sondern Farbräume ineinander 
konvertiert werden, Farbabstände _sinnvoll_ gewichtet werden müssen, 
Pixel hinsichtlich Clusterbildung untersucht und gewichtet werden, mit 
unterschiedlichen Bildauflösungen umgegangen werden können muß... und 
schlußendlich die visuellen Differenzen deutlich hervorgehoben gehören. 

Letzten Endes sind wir dabei gelandet, ein eigenes CLI-Tool dafür zu 
programmieren [1].

Hab mal ein kleines Beispiel online gewuppt:

    <http://kaiser-edv.de/tmp/xykG2h/>

In <http://kaiser-edv.de/tmp/xykG2h/visueller_vergleich/Differenz.pdf> 
sieht man die gewichtete Darstellung der Differenzen, in rohdiff.tif nur 
die reinen Farbabstände je Pixel, mit zusätzlicher Bereinigung/Wertung 
auch cleaned.tif und counted.tif. Ausgangsmaterial ist "Rezept.pdf" vs. 
"Rezept.png", der Rest temporärer Kram.

Gruss,

Thomas

[1] Aktueller Hilfetext unseres Tools:

Usage: cmpPNGtoPDF [options] png-preview print-pdf path-prefix

    cmpPNGtoPDF compares a PNG image file with a rendered PDF file 
    (cropped to the dimensions of the media box or the trim box if 
    available) using Mac OS X' CoreGraphics engine. A couple of 
    temporary files are created at a customizable location using 
    $path-prefix -- see 'Examples' below. You have to ensure that the 
    directory $path-prefix points to exists and cmpPNGtoPDF has write 
    access to its contents. Otherwise execution will fail.

    - An exit code of 0 means the files are visually identical
    - An exit code of 1 signals an unknown error
    - An exit code of 2 indicates visual differences

    cmpPNGtoPDF prints its settings on stdout and probably followed by 
    some statistics regarding the image matching and quantification 
    process. This output should be silently ignored since it is intented 
    solely for debugging/optimization purposes.
    
Options:

    --pngProfile=path
      Path to the icc-profile with which the PNG was generated.

    --cmykProfile=path
      Path to a CMYK icc-profile which should be used to convert the 
      PDFs CMYK colors to RGB.

    --scaleTo=(scaleToDPI | miniumDPI,scaleFactor)
      If one number is given, this is the dpi value into which the PNG 
      and PDF will be scaled down to.
      If two numbers separated by a comma are given, the PNG will be 
      scaled down by the scaleFactor if the resulting resolution is not 
      lower than minimumDPI.
      (All numbers are given as float values with a decimal point, e.g. 
      "1.2")

    --scalePDFAfterRendering[=[0 | 1 | true | false]]
      The PDF will be rendered at the PNG's resolution first, then 
      scaled to the resolution given by scaleTo.

    --scalePNGAfterRendering[=[0 | 1 | true | false]]
      The PNG will be read in its native resoltion, then scaled to the 
      resolution given by scaleTo.

    --intermediateCMYKforPNG[=[0 | 1 | true | false]]
      The PNG will first be rendered into a DeviceCMYK color space and 
      then processed like the PDF.

    --clusterRadiusMM=radius
      The biggest distance in mm between two pixel groups that makes 
      them part of the same cluster.
      (All numbers are given as float values with a decimal point, e.g. 
      "1.2")

    --antiAntiAlias[=[0 | 1 | true | false]]
      When the difference between PNG and PDF is calculated this switch 
      allows for "smearing" color values around the pixel currently 
      examined. If this is set, false alarms caused by antialiasing get 
      less, the thresholds can be tightend, but processing becomes 
      slower.

    --thresholds=lowThreshold,highThreshold
      This sets the thresholds that are used to find candidate pixels 
      for visible differences. The lower the thresholds are, the more 
      candidate pixels are found. Differences in .._rohdiff.tif that are 
      below the lowThreshold are ignored. A pixel for which the 
      difference is above or equal highThreshold become candidates when 
      at least two consecutive neighbouring pixels have differences 
      above lowThreshold.

      A pixel whose difference is above or equal lowThreshold is picked 
      as a candidate if at least five consecutive neighbouring pixels 
      have differences above lowThreshold, or at least two consecutive 
      neighbouring pixels have differences above highThreshold.

Examples: 

  * cmpPNGtoPDF preview.png printjob.pdf result_

    Compares preview.png with printjob.pdf in the current working 
    directory and creates the following temporary files in the same 
    directory:

    result_cleaned.tif
    result_counted.tif
    result_pdfAsYCbCr.tif
    result_pngAsYCbCr.tif
    result_renderedPDF.tif
    result_rohdiff.tif

  * cmpPNGtoPDF in/test.png in/test.pdf out/

    Compares test.png with test.pdf in the "in" subdirectory (relative 
    to cwd) and produces the following temporary files in the "out" 
    subdir:

    out/cleaned.tif
    out/counted.tif
    out/pdfAsYCbCr.tif
    out/pngAsYCbCr.tif
    out/renderedPDF.tif
    out/rohdiff.tif

  * cmpPNGtoPDF /tmp/test.png /foo/bar/test.pdf /foo/result123-

    Compares /tmp/test.png with /foo/bar/test.pdf and produces the 
    following temporary files:

    /foo/result123-cleaned.tif
    /foo/result123-counted.tif
    /foo/result123-pdfAsYCbCr.tif
    /foo/result123-pngAsYCbCr.tif
    /foo/result123-renderedPDF.tif
    /foo/result123-rohdiff.tif




 

|THBPdf| |Download| |Developers|