2009-03-18 24 views
13

Ich versuche, eine vorhandene PDF-Datei (die sonst erstellt wurde) zu einer PDF hinzuzufügen, die mit FPDF mithilfe von FPDI erstellt wurde. Es scheint für die meisten PDF-Dateien finden zu arbeiten, aber ich erhalte den folgenden Fehler:Gibt es eine Möglichkeit, FPDF/FPDI oder Zend_Pdf das Parsen von PDFs größer als 1,4 zu unterstützen?

FPDF error: Unable to find xref table. 

Nach einigen Tests, habe ich herausgefunden, dass, wenn ich eine PDF-Version 1.4 oder niedriger (Acrobat v5 oder niedriger) verwenden es scheint Arbeit. Beim Betrachten der Datei scheint es wegen eines anderen PDF-Formats zu sein.

Gibt es eine Lösung oder eine Lösung? Ich habe wahrscheinlich 10 000 PDFs von Benutzern hochgeladen, einige der neuen arbeiten, einige von ihnen nicht. Es ist auch ärgerlich, dass FPDI einfach stirbt, anstatt irgendeine Art von Fehler zu verursachen oder sogar falsch zurück zu geben. Die einzige Lösung, die ich im Moment denken kann, ist die erste Zeile der PDF-Datei zu analysieren, um die Version zu bestimmen und nur die zu addieren dass über Versionen, die funktionieren werden.

Edit:

ich dies auch in Zend_Pdf versucht, und es hatte folgendes Ergebnis, die Demo-Datei, die mit dem Zend Framework kommt:

Fatal error: Uncaught exception 'Zend_Pdf_Exception' with message 'Cross-reference streams are not supported yet.' in /Volumes/Documents/temp/ZendFramework-1.7.7/library/Zend/Pdf/Parser.php:331 
Stack trace: 
#0 /Volumes/Documents/temp/ZendFramework-1.7.7/library/Zend/Pdf/Parser.php(455): Zend_Pdf_Parser->_loadXRefTable('116') 
#1 /Volumes/Documents/temp/ZendFramework-1.7.7/library/Zend/Pdf.php(297): Zend_Pdf_Parser->__construct('/Volumes/Docume...', Object(Zend_Pdf_ElementFactory_Proxy), true) 
#2 /Volumes/Documents/temp/ZendFramework-1.7.7/library/Zend/Pdf.php(250): Zend_Pdf->__construct('/Volumes/Docume...', NULL, true) 
#3 /Volumes/Documents/temp/ZendFramework-1.7.7/demos/Zend/Pdf/demo.php(37): Zend_Pdf::load('/Volumes/Docume...') 
#4 {main} 
    thrown in /Volumes/Documents/temp/ZendFramework-1.7.7/library/Zend/Pdf/Parser.php on line 331 

Ist es nicht möglich, PDF-Dateien mehr zu analysieren als 1.4?

Antwort

4

Ich habe festgestellt, dass die Verwendung der kommerziellen Version von FPDI PDF-Parser mein Problem gelöst hat. Ich benutze es seit einem Jahr und hatte keine PDFs, die es nicht analysieren konnte (es sei denn, das PDF war beschädigt oder hatte etwas anderes Seltsames).

+0

Können Sie bitte mit uns teilen, wie Sie mit diesem Add-on gearbeitet? Weil ich keine Ahnung habe, wie man es benutzt. Ich habe die Datei installiert, bin mir nicht sicher, wie ich sie benutzen soll. Im mit der folgenden PDFmerger https://github.com/myokyawhtun/PDFMerger/blob/master/PDFMerger.php#L78 –

18

Sie können FPDI mit TCPDF verwenden, es generiert und liest (mit FPDI) Version 1.7 PDFs.

Siehe TCPDF - PHP class for PDF.


EDIT

Ich habe mit der Frage herausgefordert der Verwendung verschiedener Versionen und Formate PDF mit FPDI und TCPDF vor kurzem, und ich kann die PDF-Versionen bestätigen über 1,4 sind der Hit, die Interessante Sache ist, dass ich viel Arbeit 1.7 PDFs habe, und Arbeiten über 50/50 auf 1.5 und 1.6.

Ich habe das Problem behoben, indem ich alle nicht ausführbaren PDF-Dateien mit GhostScript in v1.4 konvertiert habe, das Sie über die Befehlszeile exec eingeben können. Verwenden Sie ps2pdf14 aus dem Ordner GhostScript lib.

+0

würde ich den Befehl nicht zu erwarten 'ps2pdf14' mit PDF als Eingabe zu arbeiten, aber es wie ein Charme. – jeteon

4

Setasign bietet einen PDF-Parser als commercial addon für FPDI an. Wir hatten bis jetzt keine Probleme PDF-Dateien bis Version 1.7 zu analysieren, indem wir den neuen Parser benutzten.

+0

Können Sie uns bitte mitteilen, wie Sie mit diesem Add-on gearbeitet haben? Weil ich keine Ahnung habe, wie man es benutzt. Ich habe die Datei installiert, bin mir nicht sicher, wie ich sie benutzen soll. Im mit dem folgenden PDFmerger github.com/myokyawhtun/PDFMerger/blob/master/PDFMerger.php#L 78 –

-1

mein Team hatte einen Teil des Codes entfernt. Wir haben den Code angehalten, kein Wasserzeichen mehr in das PDF einzufügen. Das hat das Problem für uns gelöst. PDF> = 1,5

6

Ich habe gerade ein paar Projekte freigegeben (TCPDI/tcpdi_parser, basierend auf FPDI und tcpdf_parser, respectively), die mit TCPDF arbeitet 6 (und FPDF_TPL) PDFs über v1.4 importieren (getestet bis zu 1.6 bis jetzt, aber ich werde sicherstellen, dass es mit 1.7 funktioniert, sobald ich einen 1.7 PFD finde, um es mit zu testen!), Ohne irgendwelche kommerziellen Addons zu erfordern.Grundlegende Installations- und Gebrauchsanweisungen finden Sie in der TCPDI README; Bitte zögern Sie nicht, es auszuprobieren und Probleme über den Github-Tracker zu melden.

+0

Ich habe gerade versucht, versucht, Text in eine PDF-Version 1.5 hinzuzufügen und es funktioniert nicht. – greg

+0

@ Greg, wenn Ihr PDF nicht durch ein Passwort geschützt ist, benutzen Sie bitte ein Thema auf das jeweilige Projekt (TCPDI oder tcpdi_parser) mit allen Einzelheiten von dem, was Sie versuchen zu tun, und was passiert ist (dh welche Fehler (n) Sie erhalten) Datei . Ich werde versuchen nachzuforschen, kann aber keine zeitlichen Zusagen machen. – NullColaShip

+0

Ok, fertig, danke. – greg

1

Wenn Sie Acrobat PDF-Writer haben, können Sie die Auftragseinstellungen manipulieren, um die PDF-Datei machen Sie drucken/savingAs zu PDF 1.4 kompatibel ist. Aus dem winzigen Grund, ich brauche dieses Produkt, scheint es nicht die 100 Euro wert, um die kommerzielle Version zu erhalten, die zu Versionen größer als 1,4 kompatibel ist.

3

für symfony, benutzte ich diese lib zu konvertieren> 1.4 https://packagist.org/packages/xthiago/pdf-version-converter

+1

Weiß du ... Ich glaube, ich so etwas wie dies tatsächlich an einem Punkt umgesetzt mit diesem eineine anderen Problemen zu behandeln. Ich rufe Ghostscript gerade in meinem Fall an, aber das könnte das Leben ein bisschen leichter machen. –

+1

Ich bin der Autor von 'xthiago/pdf-version-converter'. Die Bibliothek kann in jedem PHP-Projekt verwendet werden - es erfordert nicht die Verwendung von Symfony Framework (Full Stack). Die Bibliothek verwendet intern zwei Komponenten von Symfony (Prozess und Dateisystem), aber Composer kümmert sich darum. Ich empfehle Ihnen, die Benutzung der Bibliothek, weil es Unit-Tests (PHPUnit) und ist Open-Source - Sie von der Community aus Fehlerbehebungen und Verbesserungen profitieren können. –