lonsdaleit
Goto Top

Reparieren beschädigter PDF Dateien

Guten Morgen!

Gestern habe ich bereits gefragt, wie ich korrupte/beschädigte PDF-Dateien erkennen kann.
Die Lösung mittels der iText API funktioniert wunderbar.

Nun stehe ich vor dem Problem, diese PDF-Dateien zu reparieren!

Die Situation:
Ich bekomme via lokalem Netzwerk oder Internet eine Kopie einer PDF-Datei. Diese PDF-Datei-Kopie wird abgespeichert, um vom Programm aufgerufen werden zu können.
Einige dieser Dateien kommen allerdings korrupt an - es scheint als wäre das Problem zusätzliche bzw überflüssige Leerzeichen.
Mit IcePDF lassen sich besagte Dateien problemlos öffnen - allerdings bevorzuge ich eine einheitliche Lösung vorzugsweise mit dem Acrobat Reader.

Hinweis: Die originale PDF-Datei steht nicht zur Verfügung. Dadurch ist ein Binärvergleich und anschließende Korrektur nicht möglich. Auch eine Bearbeitung der Datei vor dem Kopieren und Versenden ist nicht möglich - fehlererkennende und fehlerkorrigierende Codes, die dies verlangen, wie etwa der Hamming-Code schließen sich also aus.


Mir stellt sich also die folgende Frage:
    1. -kann ich die erkannten Dateien intern mit icepdf (ohne für den User sichtbare Konsole) öffnen, reparieren, abspeichern und anschließend mit dem Acrobat Reader - für den User sichtbar - öffnen?
      1. -falls nein: gibt es andere (kostenfreie) Optionen diese pdf-Dateien zu reparieren?


Cliffs
-ich habe eine korrupte bzw beschädigte pdf-Datei
-mit icepdf lässt sie sich öffnen, mit Acrobat-Reader nicht
-die Datei muss dahingehend repariert werden, dass sie mit dem Acrobat-Reader geöffnet werden kann

lg
JP aka Lonsdaleit

Content-Key: 217217

Url: https://administrator.de/contentid/217217

Ausgedruckt am: 29.03.2024 um 15:03 Uhr

Mitglied: Mantigul
Mantigul 18.09.2013 um 09:11:14 Uhr
Goto Top
Hallo,

von reparieren beschädigter PDF Dateien habe ich keine Ahnung, aber evtl. mit dem PDF-Creator über icepdf die Datei als PDF neu drucken? So erstellst du ja eine komplett neue PDF-Datei. Ich weiß aber nicht, wie es sich dann dort mit Inhaltsverzeichnissen oder Links hat. Glaub nicht, dass die dann noch funktionieren.
Mitglied: Lonsdaleit
Lonsdaleit 18.09.2013 aktualisiert um 09:21:43 Uhr
Goto Top
Hi,

Danke für die schnelle Antwort!


Zitat von @Mantigul:
Hallo,

von reparieren beschädigter PDF Dateien habe ich keine Ahnung, aber evtl. mit dem PDF-Creator über icepdf die Datei als
PDF neu drucken?


Kannst du dies bitte nochmals etwas näher ausführen?
Ich habe erst gestern angefangen mich mit icepdf zu beschäftigen und bin mit der Funktionsweise und den Möglichkeiten noch nicht vertraut.

lg
Mitglied: MrNetman
MrNetman 18.09.2013 aktualisiert um 11:52:10 Uhr
Goto Top
Alles, was man anzeigen kann, kann man auch drucken.
Selbst geschütze PDFs kann man drucken.
Somit kann man aus jedem Programm den pdf-creator als Drucker aufrufen und damit ausdrucken.
Das Ergebnis ist wieder eine PDF Datei.

PDF Creator ist sogar scriptbar.

Gruß
Netman

Und Iccepdf ist wohl recht gut dokumentiert: http://www.icesoft.org/java/projects/ICEpdf/documentation.jsf
Mitglied: Lonsdaleit
Lonsdaleit 18.09.2013 um 10:40:48 Uhr
Goto Top
Hi,

Hättest du ein Codebeispiel.
Leider scheint die icepdf-dokumentation etwas spärlich mit Informationen ausgestattet zu sein.
Ich habe also keine Vorstellung, wie ich mir in icepdf aus einer pdf datei eine neue datei erstelle.

Wäre da sehr dankbar.

lg
JP aka Lonsdaleit
Mitglied: Mantigul
Mantigul 18.09.2013 aktualisiert um 12:40:31 Uhr
Goto Top
Hi,

Hättest du ein Codebeispiel.
Leider scheint die icepdf-dokumentation etwas spärlich mit Informationen ausgestattet zu sein.
Ich habe also keine Vorstellung, wie ich mir in icepdf aus einer pdf datei eine neue datei erstelle.


Also:

PDF Creator ist ein Programm was nichts mit dem icepdf zu tun hat. --> Wenn du das installierst hast du in deinem PC einen neuen Drucker der sich PDF Creator nennt.

Dann öffnest du deine "defekte" PDF mit dem icepdf und gehst auf drucken. Anstatt deinen Drucker zu Hause oder so auszuwählen wählst du den PDF-Creator. Es öffnet sich ein Fenster indem du nur noch sagen musst: Speichere mir bitte dieses neue PDF in dem und dem Pfad.

Näher kann ich es irgendwie nicht beschreiben face-smile
Mitglied: Lonsdaleit
Lonsdaleit 18.09.2013 um 13:47:02 Uhr
Goto Top
Ah.
Verstehe - vielen Dank!
Habe ich auch die Möglichkeit diesen Vorgang zu automatisieren, sodass ich keine Pfade angeben und keine Fenster bestätigen muss?
Das wäre sehr wichtig!

lg
JP
Mitglied: MrNetman
MrNetman 18.09.2013 um 16:12:24 Uhr
Goto Top
Scripten ist automatisieren ....
Mitglied: Lonsdaleit
Lonsdaleit 20.09.2013 aktualisiert um 09:32:47 Uhr
Goto Top
Hallo,

Verschiedenes habe ich mittlerweile ausgetestet - leider ohne zufriedenstellendes Ergebnis.

Wenn ich mit ice-pdf die Datei geöffnet und einem neuen Dokument übergeben habe, um es anschließend zu drucken, konnte ich die PDF-Datei anschließend zwar mit dem Acrobat-Reader öffnen, aber leider war das Ergebnis zerstückelt.
Die Inhalte sind ungeordnet und teilweise unvollständig angekommen und Image-Seiten waren um 90° gedreht und abgeschnitten.


Um diesem Problem vorzubeugen möchte ich nun Seite für Seite dem neuen Dokument übergeben. Und anschließend das (komplett) "neuerstellte" Dokument speichern.

Hier stoße ich auf das nächste Problem. Ich weiß nicht, wie ich in icepdf Inhalte einzelnd an ein Dokument übergebe - Seite für Seite.
Ist dies mit icepdf möglich?

Ich habe bereits versucht das Dokument mit icepdf zu öffnen und mit iText neu zu schreiben (anhand der Inhalte aus dem geöffneten icepdf Dokument). Leider funktioniert dies wie erwartet aufgrund Formatierungsunterschieden und Codierungsunterschieden nicht.

Heraus kommt beispielsweise aus einer 10 Seitigen pdf-Datei eine sehr kryptische 6500 seitige PDF-Datei.

Über einen Hinweis bzw ein Codebeispiel wäre ich sehr erfreut!

Die API/Viewer Doc von icepdf habe ich mir bereits angeschaut und bin leider nicht fündig geworden.

Cliffs
  • ich versuche mit icepdf aus dem geöffneten Dokument ein neues Dokument zu erstellen
  • einfaches übergeben des gesamten Dokumentes führt zu fehlern
  • ich versuche jedes Element jeder Seite einzelnd zu übergebe
  • ich benötige ein Codebeispiel oder ein Hinweis wie ich dies mit der icepdf API durchführen kann


lg
JP aka Lonsdaleit
Mitglied: MrNetman
MrNetman 20.09.2013 um 10:24:07 Uhr
Goto Top
Warum willst du etwas übergeben?

  • Hast du denn schon mal das normale Ausdrucken auf Papier probiert? Bei 10 Seiten wäre das ja nicht so schlimm und ausserdem kanst du weniger Seiten auch manuell auswählen.
  • Hast du denn schon das ausdrucken mit dem pdf-creator probiert?

Zum Glück gibt es auf dem PC so etwas wie wysiwyg.
Damit siehst du vorab in ice-pdf ob sich das Drucken lohnt.

GRuß Netman
Mitglied: Lonsdaleit
Lonsdaleit 20.09.2013 um 10:49:40 Uhr
Goto Top
Hi,
danke für deine Antwort.

das "Drucken mit dem pdf-creator" habe ich probiert - gleiches Ergebnis.

Es geht mir auch nicht um das drucken auf Papier - und dass die PDF Dateien theoretisch korrekt sind weiß ich.
Ein bitweiser Vergleich der korrupten Datei und der original Datei (ich habe mir einige Originaldateien besorgt zur Analyse) hat mir gezeigt, dass es nur zu viele oder zu wenige Leerzeichen an manchen Stellen des Dokumentes sind. Wie diese dort reinkommen weiß ich nicht.
Für die reine Lesbarkeit und Verwaltung macht dies auch keinen Unterschied - aber der Acrobat Reader beschwert sich deshalb und kann die Datei nicht öffnen (oder will es nicht).
iText kann die Datei ebenfalls nicht öffnen.
Ich benötige nichts in Papierform - zu keinem Zeitpunkt.
Es geht nur darum die jenigen Dateien, die fehlerhaft sind (in ice-pdf werden sie korrekt angezeigt, mit dem Acrobat Reader gar nicht) zu "reparieren", so dass sie mit dem Acrobat Reader wieder angezeigt werden können.


Da ich eine große Menge an solcher PDF-Dateien unterschiedlicher Größe habe und rein digital verwalte, möchte ich das ganze einheitlich mit dem Acrobat Reader machen und nicht (vereinzelnd) icepdf nutzen.


Meine Idee war nun: Wenn es möglich ist diese PDF-Datei mit Ice-PDF korrekt und vollständig anzuzeigen, diese Daten zu nehmen und eine neue - nicht beschädigte - pdf Datei zu erzeugen, in der Hoffnung, dass diese nun von dem Acrobat Reader erfolgreich geöffnet werden kann.

lg
JP aka Lonsdaleit
Mitglied: MrNetman
MrNetman 20.09.2013 um 13:09:29 Uhr
Goto Top
Gleiches Ergebnis?

Klappt das Drucken auf Papier?
Klappt das Drucken in den pdf-creator, der ja dann ein fertiges pdf erzeugt?

Oder sprichts du die ganze Zeit, wenn du über ice-pdf sprichst über den Konjunktiv?
Das Dokument sollte so aussehen, ist aber in ice-pdf statt 10 nun 6500 Seiten groß.
Dann würde ich ja sagen, dass ice-pdf das Dokument auch nicht öffnen oder bearbeiten kann. Oder du machst einen Textexport und löscht alle doppelten Leerzeichen.

Wenn ja, ist das schon scriptbar.
Mitglied: Lonsdaleit
Lonsdaleit 20.09.2013 um 13:53:02 Uhr
Goto Top
Hey,

vielen Dank für deine Hilfe.

Zitat von @MrNetman:
Gleiches Ergebnis?

Klappt das Drucken auf Papier?
Klappt das Drucken in den pdf-creator, der ja dann ein fertiges pdf erzeugt?
Also: Das Drucken auf Papier hat funktioniert, das Drucken mit dem pdf-creator auch - allerdings war das pdf weiterhin korrupt.

Zitat von @MrNetman:
Gleiches Ergebnis?

Oder sprichts du die ganze Zeit, wenn du über ice-pdf sprichst über den Konjunktiv?
Das Dokument sollte so aussehen, ist aber in ice-pdf statt 10 nun 6500 Seiten groß.
Also: Der Vorfall, dass aus 10 Seiten 6500 wurden, war ein Experiment mit ice-pdf zu öffnen und mit iText wieder abzuspeichern - da ich nicht wusste, wie dies mit ice-pdf geht. Mir war klar, dass es vermutlich zu einem derartigen Fehler kommen kann, getestet habe ich es dennoch.

Wenn ich mir das Dokument mit dem Viewer über ein JLabel anzeigen lasse oder mit ice-pdf (SwingViewController) anzeigen lasse, ist alles in Ordnung und es funktioniert auch.

-->Daraus entstand die Idee: Ich lese das Dokument mit ice-pdf ein, speichere die Informationen aus dem Dokument in ein neues und speichere dieses dann ab.
Dabei hatte ich die Hoffnung, dass sich die korruption durch erneutes (korrektes) abspeichern 'aufhebt'.


Mittlerweile konnte ich das Problem lösen und die PDF erfolgreich 'reparieren'.
Ich habe mit der PDFBox API die Idee von oben umgesetzt. Die PDFs lassen sich nun erfolgreich mit dem Acrobat Reader öffnen.


lg
JP aka Londsdaleit
Mitglied: MrNetman
MrNetman 20.09.2013 um 14:46:11 Uhr
Goto Top
Zitat von @Lonsdaleit:
Klappt das Drucken auf Papier?
Klappt das Drucken in den pdf-creator, der ja dann ein fertiges pdf erzeugt?

Also: Das Drucken auf Papier hat funktioniert, das Drucken mit dem pdf-creator auch - allerdings war das pdf weiterhin korrupt.

Besser geht es nicht!

Wenn das Drucken klappt und das Drucken in pdf Creator.
Was denkst du denn, was dabei raus kommt?
ein PDF - Dokument
Das kannst du im Adobe Reader anzeigen oder wo auch immer.
Das kann auch gar nicht mehr korrupt sein, da es neu aufgebaut worden ist.

Aber das Urspungsdokument wird natürlich nicht repariert. Du hast ein neues mit dem kompletten Inhalt. Und alles scriptbar.

Gruß Netman
Mitglied: Lonsdaleit
Lonsdaleit 20.09.2013 um 15:04:46 Uhr
Goto Top
Zitat von @MrNetman:
Was denkst du denn, was dabei raus kommt?
ein PDF - Dokument
Das kannst du im Adobe Reader anzeigen oder wo auch immer.
Das kann auch gar nicht mehr korrupt sein, da es neu aufgebaut worden ist.

Aber das Urspungsdokument wird natürlich nicht repariert. Du hast ein neues mit dem kompletten Inhalt. Und alles scriptbar.

Gruß Netman

Natürlich kommt ein PDF-Dokument heraus, was sonst?
Und ja, es war nicht mehr korrupt. An dieser Stelle habe ich mich falsch ausgedrückt bzw verschrieben.
Aber das Ergebnis war: Zerstückelte, falsch angeordnete und teils abgeschnittene, 90° verdrehte (Images) Inhalte. Also absolut unbrauchbar - bzw. "korrupt".

Die Variante mit der PDFBox funktioniert problemlos.

lg
JP aka Lonsdaleit
Mitglied: Mantigul
Mantigul 20.09.2013 um 15:12:47 Uhr
Goto Top
Aber das Ergebnis war: Zerstückelte, falsch angeordnete und teils abgeschnittene, 90° verdrehte (Images) Inhalte. Also
absolut unbrauchbar - bzw. "korrupt".

Ich glaube du solltest die Verwendung von dem Wort "korrupt" ein wenig einschränken, weil es nicht die Bedeutung hat, wofür du es verwendest.

Wie wurden die ursprünglichen PDFs erzeugt? Evtl. kann sind die Ursprungsdateien nicht "Korrupt" face-smile sondern fehlerhaft. (Falsche Bildformate etc. mit dem gewisse Programme nicht arbeiten können.
Mitglied: Lonsdaleit
Lonsdaleit 20.09.2013 um 15:40:24 Uhr
Goto Top
Hallo,

in diesem Zusammenhang habe ich das Wort korrupt tatsächlich falsch verwendet.

Allerdings ist die zu reparierende Datei tatsächlich korrupt. In der pdf-creator-Version dann nicht mehr korrupt, allerdings fehlerhaft!

<--Besser?? face-big-smile


Die ursprüngliche Erzeugung der originalen PDFs kann ich leider nicht nachvollziehen. Diese kommen aus anderer Quelle.
Allerdings kann ich folgendes sagen:

*Das Original funktioniert
*Die im Email-Anhang ankommende PDF ist MANCHMAL korrupt (tatsächlich korrupt!!: d.h. sie kann vom Acrobat Reader nicht geöffnet werden)
*Wenn die Email erneut versendet wird, ist die ankommende Datei auch nicht korrupt

(Ja, ich weiß, ich könnte einfach jedes Mal die Email erneut versenden - theoretisch. Praktisch ist es zum einen nicht praktikabel und zum anderen nicht immer direkt nachvollziehbar. Außerdem handelt es sich um eine sehr große Menge an PDFs)

lg
JP aka Lonsdaleit
Mitglied: MrNetman
MrNetman 21.09.2013 um 09:53:32 Uhr
Goto Top
Und wenn du dich nicht auf das PDF, sondern auf die beteiligten Email-Programme konzentrierst?
Es liegt ja nicht am PDF selbst sondern an der Art des Anhangs.
Wenn also eines der Email-Porgramme oder der Attachment-Vorgang fehlerhaft ist.
Da gibt es ja noch historische Altlasten mit unterschiedlichen Zeichnesätzen und evtl sogar 7/8 Bit Kodierung.

Bist du Sender oder Empfänger des Emails?
Oder läuft das firmenintern über verschiedene Server?

Gruß
Netman
Mitglied: Lonsdaleit
Lonsdaleit 21.09.2013 um 13:46:12 Uhr
Goto Top
Heyho,


also ich bin genaugenommen weder Empfänger noch Sender der Emails.

Das Problem tritt jedoch sowohl als auch auf - beim Senden und Empfangen.

Die Fehlerquelle ist schwer zu bestimmen, da dieses Problem nicht regelmäßig auftritt und auch nicht konsequent.

lg
JP aka Lonsdaleit
Mitglied: MrNetman
MrNetman 21.09.2013 um 14:37:07 Uhr
Goto Top
Das Problem hatte ich auch einmal.

Da wurde ich nach einer Lösung gefragt.
Zwei man mit dem selben Handy im selben Raum und nur einer konnte eine bestimmte Funktion ausführen.

Nach etlichen Nachfragen habe ich mich auch nach der Häufigkeit erkundigt.
Antwort:"Ein Mal vor etwa einem halben Jahr."

Manche Dinge muss man eben wieder vergessen. face-wink
Du hast ja keine Chance an die Ursache oder an die Kette zu kommen.
Mitglied: Lonsdaleit
Lonsdaleit 21.09.2013 um 14:53:33 Uhr
Goto Top
:D
Die Behebung der Ursache wird wohl nicht möglich sein, solange man nicht über eine größere Menge an Daten verfügt.

Allerdings sollte das Problem - da es eben das ein oder andere Mal auftaucht - gelöst - wenn auch nicht behoben werden.

Wie gesagt - mittlerweile kann ich besagte PDFs erkennen und "reparieren" - auch wenn die Ursache damit nicht behoben ist!


Vielen Dank für deine Hilfe und Ideenface-big-smile
Mitglied: Dragonfly.J
Dragonfly.J 06.09.2018 um 08:57:59 Uhr
Goto Top
guck mal diese Anleitung:PDF reparieren