2016-07-22 8 views
1

Ich habe pdf-Datei ohne XRef-Tabelle, dieses PDF wurde generiert von 3D-Seite ServiceWie repariert man PDF-Dateien ohne Xref in PHP?

Ist eine Bibliothek \ Lösung, diese PDF-Datei zu beheben, ohne es in Adobe Acrobat zu öffnen? vielleicht der Fehler Unable to find xref table

+0

* Ich habe PDF-Datei ohne XRef-Tabelle, dieses PDF wurde von 3d-Seite-Service generiert * - Haben Sie überprüft, ob das PDF einfach einen Querverweis-Stream anstelle der Querverweistabelle hat? Wenn dies der Fall ist, ist keine Querverweistabelle erforderlich. Wenn darüber hinaus Objektströme im PDF verwendet werden, müssen die Querverweise in einen Stream anstelle einer Tabelle eingefügt werden ... – mkl

+0

mkl bringt einen interessanten Punkt. Wenn die PDF-Version> = 1.5 ist, kann die startxref-Datei auf einen Querverweis-Stream verweisen (siehe Abschnitt 3.4.7). Wenn dies der Fall ist, könnte Ihre PDF-API einen Querverweis-Stream nicht ordnungsgemäß verarbeiten. In diesem Fall wäre es besser, Ihre PDF-API zu aktualisieren. –

+0

Version der Datei ist PDF-1.4.%. Ich habe nicht sehr tiefe Erfahrung mit pdf-Struktur, ich zeigte diese Datei zu einigen Leuten und sie sagen, dass es – kusanagi

Antwort

0

: (! sehr)

http://www.verypdf.com/wordpress/201302/how-to-repair-pdfs-corrupted-xref-table-and-stream-lengths-34784.html

Sie könnten es sich beheben, wenn Sie vertraut mit dem PDF-Format sind :) PDF intern Text ist .. gut, mit Ausnahme der Ströme und eingebettete Objekte

+0

wie ich sehe, es ist Windows-Tool, jede Art und Weise, die ich brauche PHP-Weg-Lösung – kusanagi

+0

vielleicht sollten Sie den Anbieter der PDF zu kontaktieren repariere das an erster Stelle ... –

+0

es ist der letzte weg, zuerst möchte ich versuchen, das pdf zu reparieren – kusanagi

4

Das Erstellen einer XRef-Tabelle für ein PDF, das nie vorhanden war, sollte nicht zu schwierig sein (Linearisierung oder inkrementelles Speichern ist unwahrscheinlich), so dass Sie sich über die Qualität der PDF-Datei wundern müssen PDF-Produzent.

Holen Sie sich eine Kopie des PDF (v1.7) Referenz; Die Abschnitte, auf die Sie verweisen müssen, sind 3.2.9 und 3.4 (insbesondere 3.4.3 und 3.4.4), und öffnen Sie Ihre Datei in einem Hex-Editor.

Zurück nach ganz unten in der Datei. Die Datei sollte mit "%% EOF" enden; unmittelbar davor sollte 'startxref' [\ r \ n] stehen, gefolgt von einer Zahl, die der Byte-Offset für den Start des Abschnitts 'xref' ist. Aufgrund Ihrer Fehlermeldung ist diese Nummer wahrscheinlich nicht vorhanden oder deaktiviert. Der XRef-Abschnitt befindet sich normalerweise hinter dem letzten Endobj, aber oberhalb des Trailerabschnitts, der selbst über dem StartXref-Abschnitt liegt. Sie werden eine Kopie des Trailers behalten wollen, nachdem Sie den 'Xref'-Abschnitt ausgeschrieben haben.

den Xref Abschnitt zu erstellen, müssen Sie den Körper der PDF für Linien scannen, bestehend aus: IDNumber GenNumber ‚obj‘ \ r \ n. Im einfachsten Fall wird GenNumber immer 0 sein und IDNumber wird immer in sequentieller Reihenfolge zunehmen, wenn Sie sich von oben nach unten bewegen. (Wenn GenNumber nie Null ist, dann handelt es sich um eine Datei, die inkrementell gespeichert wurde; das ist eine Komplikation, die Sie nicht behandeln möchten). Verfolgen Sie die Offsets jeder dieser Linien zusammen mit IDNumber und GenNumber. eine erste Zeile in der xref auszuschreiben, bestehend aus dem ersten IDNumber und die Anzahl der indirekten Objekte gefunden (unter der Annahme, dass sie alle in sequentieller Reihenfolge sind). Dann schreibe für jedes indirekte Objekt den Offset (aufgefüllt zu 10 Ziffern), Leerzeichen, GenNumber (00000), Leerzeichen, 'n', eol (\ r \ n). Anschließend klebst du den zuvor gespeicherten Trailer und den Abschnitt "startxref" sowie die Zeile "%% EOF" an. Speichern Sie Ihre Datei und überprüfen Sie, ob dadurch das Problem für die Datei behoben wird.

+0

danke für antwort, ich öffnete pdf-datei in vim hex, am ende fand ich 'startxref.111945. %% EOF' aber IDNumber und GenNumber kann nicht gefunden werden. Es ist auch sehr neue Bereich für mich wie Hex-Edit oder PDF-Struktur – kusanagi

+0

, wenn es nicht schwer für Sie ist, können Sie dieses Problem pdf betrachten? – kusanagi

+1

Wenn Sie tatsächlich in die Datei schauen, sehen Sie Bytefolgen wie: 13 0 obj, 19 0 obj oder 27 0 obj und so weiter. Die erste Nummer ist die ID des indirekten Objekts, die zweite Nummer ist die Generierung und nur relevant, dass die Datei inkrementell gespeichert wurde. –

2

Das eigentliche Problem der Datei

Nachdem die file provided by the OP es stellt sich heraus kontrolliert, dass das Basisproblem nicht eine fehlende Tabelle Querverweis ist. Stattdessen ist das Problem letztlich, dass die Datei tatsächlich eine Kombination aus zwei vollständigen PDF-Dateien ist, die erste 93863 Bytes in der Größe und die zweite 112857 Bytes.

zeigen beide die gleiche Form, den einzigen Unterschied ist, dass die zweiten sechs QR-Codes am Ende hinzugefügt.

Wahrscheinlich versucht jemand die beiden PDF-Dateien zu zusammenführen (die einfach nicht auf diese Weise funktioniert), oder vielleicht ganz zufällig ist es passiert.

Also, was das OP tatsächlich benötigt, ist ein Werkzeug, um die Datei nach 93863 Bytes, direkt vor dem %PDF-1.4 Dateikopf dort zu teilen.

Warum diese Fehlermeldung

Wenn Sie sich fragen, warum einige Programm Unable to find xref table behauptet - am Ende eines PDF gibt es Zeilen wie diese:

startxref 
111945 
%%EOF 

Die Zahl gibt an, an dem von der gezählte Offset Beginn der Datei die Querverweise sind lokalisiert.

Wenn Sie also eine Datei haben, in der sich zwei PDFs hintereinander befinden, wird dieser Offset verfälscht (da der Offset vom Anfang der Datei gezählt wird) und in die Datei zeigt, in der keine Querverweise vorhanden sind jetzt.

Einige Programme in einer solchen Situation versuchen, die Datei zu reparieren, eine Querverweistabelle zu rekonstruieren, während andere mit einem Fehler fehlschlagen. Der Adobe Reader ist vom früheren Typ und das Programm, das das OP versucht, letzteres auszuführen.