Hallo,
ich habe hier einige PDF Dateien welche ich zu einer zusammenfügen will, leider sind manche Seiten in verschiedenen PDF-Dateien vorhanden, welche ich aber nicht doppelt haben will.
Nun möchte ich die Seitennamen der Seiten auslesen und vergleichen ob diese schon in meiner neu erstellten PDF vorhanden sind.
Zum auslesen und erstellen der PDFs benutze ich pyPdf.
Hoffe mir kann vlt. jemand helfen.
Viele Grüße
Stefan
Seitennamen von PDF auslesen
- noisefloor
- User
- Beiträge: 3863
- Registriert: Mittwoch 17. Oktober 2007, 21:40
- Wohnort: WW
- Kontaktdaten:
Hallo,
grundsätzlich sollte das kein Problem sein. Vom Prinzip her solltest du dir überlegen, wie du Dateinamen und Seitennamen am sinnvollsten in eine Liste oder ein Dict schreibst. Wenn du alle Namen hast musst du dir eine kleine Programmlogik überlegen, die aus der Liste oder dem Dict die doppelten eliminiert und basierend auf der bereinigten Liste das neue PDF baut.
Gruß, noisefloor
grundsätzlich sollte das kein Problem sein. Vom Prinzip her solltest du dir überlegen, wie du Dateinamen und Seitennamen am sinnvollsten in eine Liste oder ein Dict schreibst. Wenn du alle Namen hast musst du dir eine kleine Programmlogik überlegen, die aus der Liste oder dem Dict die doppelten eliminiert und basierend auf der bereinigten Liste das neue PDF baut.
Gruß, noisefloor
Hallo,
erstmal danke für deine antwort.
Wie ich mein Programm aufbauen muss weiß ich schon.
Hab die Frage vlt. falsch gestellt, ich bin auf der Suche nach einer Funktion etc. mit der ich die Seitennamen auslesen kann, so wie es aussieht geht es mit pyPdf nicht.
Irgendwie muss es ja gehen, da sie in meinem PDF-Viewer (Vorschau unter MacOS X) ja auch angezeigt wird.
Gruß Stefan
erstmal danke für deine antwort.
Wie ich mein Programm aufbauen muss weiß ich schon.
Hab die Frage vlt. falsch gestellt, ich bin auf der Suche nach einer Funktion etc. mit der ich die Seitennamen auslesen kann, so wie es aussieht geht es mit pyPdf nicht.
Irgendwie muss es ja gehen, da sie in meinem PDF-Viewer (Vorschau unter MacOS X) ja auch angezeigt wird.
Gruß Stefan
Hier mal ein Link zu einer PDF die ich meine
http://wissen.spiegel.de/wissen/image/s ... humb=false
Diese PDF hat zwei Seiten, eine heißt "008.pdf" und die andere "10"
Es ist aber kein Inhaltsverzeichnis.
http://wissen.spiegel.de/wissen/image/s ... humb=false
Diese PDF hat zwei Seiten, eine heißt "008.pdf" und die andere "10"
Es ist aber kein Inhaltsverzeichnis.
- noisefloor
- User
- Beiträge: 3863
- Registriert: Mittwoch 17. Oktober 2007, 21:40
- Wohnort: WW
- Kontaktdaten:
Hallo,
Also: Wo findet man die?
Gruß, noisefloor
Axo. Da schließe ich mich gkuhl an:Hab die Frage vlt. falsch gestellt, ich bin auf der Suche nach einer Funktion etc. mit der ich die Seitennamen auslesen kann, so wie es aussieht geht es mit pyPdf nicht.
Gibt's das? Nie gehört... Bei ReportLab ist das AFAIK nicht bekannt und auch unter Adobe Acrobat unter Windows ist mit beim Bauen von PDF noch nie angeboten worden, Seitennamen zu vergeben. Wenn ich das von dir verlinkte Dokument mit dem Adobe Reader (neuste Version) unter Ubuntu öffne sehe ich auch nirgendwo Seitennamen.Ich kann mir unter "PDF Seitenname" gerade nichts drunter vorstellen.
Also: Wo findet man die?
Gruß, noisefloor
mhh, dachte nich, dass das erklären der Frage schon so schwierig wird
Alos wenn ich die PDF-Datei öffne, habe ich rechts so eine Miniaturansicht der Seiten und unter diesen stehen diese Namen. Es steht nicht explizit Seitennamen dabei, das hab ich so geschrieben, da sie unter den Miniaturansichten der Seiten stehen.
Alos wenn ich die PDF-Datei öffne, habe ich rechts so eine Miniaturansicht der Seiten und unter diesen stehen diese Namen. Es steht nicht explizit Seitennamen dabei, das hab ich so geschrieben, da sie unter den Miniaturansichten der Seiten stehen.
ich sehe sie, aber in dem Beispiel hiessen die Seiten doch 8 und 10. Was ist aber wenn man nichts vegibt dann beginnt die Nummerierung doch bei 1. d.h. die Seite 1 wirst du in beinahe jedem Dokument finden und dementsprechend diese als doppel erkennen. Besser wäre es doch wenn du den ersten Satz jeder Seite auslesen würdest oder einen Hash generierst aus dem Text der Seite.
- noisefloor
- User
- Beiträge: 3863
- Registriert: Mittwoch 17. Oktober 2007, 21:40
- Wohnort: WW
- Kontaktdaten:
Hallo,
habe gestern Abend noch gesehen, dass man bei ReportLab zumindest beim Canvas-Objekt ein "Page Lable" setzen kann. Das wird wohl was ähnliches sein. Aber auslesen...?
Ansonsten sehe ich das ähnlich wie DaMutz: Zum definitiven Unterscheiden von PDF-Seiten vllt. ein bisschen Joker... Dann lieber Hash-Werte der ersten X Sätze nehmen. Zumal Text aus ungeschützten PDFs extrahieren ja einfach ist.
Gruß, noisefloor
habe gestern Abend noch gesehen, dass man bei ReportLab zumindest beim Canvas-Objekt ein "Page Lable" setzen kann. Das wird wohl was ähnliches sein. Aber auslesen...?
Ansonsten sehe ich das ähnlich wie DaMutz: Zum definitiven Unterscheiden von PDF-Seiten vllt. ein bisschen Joker... Dann lieber Hash-Werte der ersten X Sätze nehmen. Zumal Text aus ungeschützten PDFs extrahieren ja einfach ist.
Gruß, noisefloor
Ein PDF-Dokument ist im Prinzip eine lesbare Textdatei (öffnet man sie und sieht nur Müll, ist die verschlüsselt oder man schaut auf einen gzip-gepackten `stream`) besteht nach dem Marker `%%PDF-1.X` aus einer Sammlung von Objekten (`obj`... `endobj`) gefolgt von einer Crossreference-Tabelle (`xref`) und einem Trailer dictionary:
Dort findet man unter dem Namen `/Root` die Referenz auf den "Document Catalog", ein weiteres dictionary. Bei mir sieht das so aus:
Dort findet man eine Referenz auf die "Document Outline", was AFAIK das ist, das du suchst. In meinem PDF:
Jetzt kann ich mit `/Next` und `/First`, wenn es weitere Kinder in der Hierarchie gibt, über alle Objekte der Baumstruktur wandern. Leider ist mir nicht klar, wie die Strings (die in PDF durch Klammern begrenzt werden) dekodiert werden müssen:
Stefan
Edit: Ich glaube, mein Beispiel-PDF ist verschlüsselt. In einem anderen PDF kann ich's normal lesen.
Code: Alles auswählen
trailer
<</ID [<b07a3140e9ca13cce2713c06742f9e49><aafcb78f5919819471db3f2d0a07deea>]/Root 4574 0 R/Encrypt 4829 0 R/Size 4831/Info 4830 0 R>>
Code: Alles auswählen
4574 0 obj<</Type/Catalog/StructTreeRoot 4158 0 R/Outlines 3757 0 R/Pages 4567 0 R/Names 4575 0 R/Metadata 7 0 R>>
endobj
Code: Alles auswählen
3757 0 obj<</Count 12/Type/Outlines/Last 3758 0 R/First 3759 0 R>>
endobj
3759 0 obj<</Parent 3757 0 R/Title(<E1>'ք<88>)/Next 3760 0 R/A 3761 0 R/SE 3762 0 R>>
endobj
...
Code: Alles auswählen
\xe1'\xd6\x84\x88 Cover
ZXz\xcd] Title
\x14\x1d\xbfD\x06B\x80\xcb\x92,\x95 Credits-TOC
\xbcQ\xf8\x97 t}A Foreword
Edit: Ich glaube, mein Beispiel-PDF ist verschlüsselt. In einem anderen PDF kann ich's normal lesen.