Gibt es einen PDF-Parser für PHP? [closed]

Lesezeit: 6 Minuten

Hallo, ich kenne mehrere PDF Generatoren für PHP (fpdf, dompdf usw.) Was ich wissen möchte, ist ein Parser.

Aus Gründen, die außerhalb meiner Kontrolle liegen, befinden sich bestimmte Informationen, die ich benötige, nur in einer Tabelle in einer PDF-Datei, und ich muss diese Tabelle extrahieren und in ein Array konvertieren.

Irgendwelche Vorschläge?

  • Ich gebe jedem ein Kopfgeld, der uns ein funktionierendes Beispiel dafür geben kann, wie man den Text einer PDF-Datei extrahiert. Die Lösung muss freie Bibliotheken verwenden (kein xPDF oder PDF2Text) und plattformunabhängig (muss unter Win und Unix funktionieren, also kein PDF2Text). Es kann die exec()- oder shell()-Funktion von PHP verwenden.

    – 2. Kauboy

    31. August 2010 um 11:50 Uhr


  • Danke Kau-Boy. Vielleicht hilft ein Kopfgeld dabei, ausführlichere Antworten zu motivieren.

    – elviejo79

    1. September 2010 um 4:39 Uhr

Ich habe schon einmal einen geschrieben (für ähnliche Bedürfnisse), und ich kann dies sagen: Viel Spaß. Es ist eine ziemlich komplexe Aufgabe. Die PDF-Spezifikation ist groß und unhandlich. Es gibt mehrere Methoden, um darin Text zu speichern. Und der Kicker ist, dass jeder PDF-Generator anders funktioniert. Während also etwas wie TFPDF oder DOMPDF WIRKLICH einfach zu lesende PDFs erstellt (aus Sicht der Maschine), erstellt Acrobat einige wirklich höllische Dokumente.

Der Grund ist, wie es den Text schreibt. Die meisten DOM-basierten Renderer – die ich verwendet habe – schreiben die gesamte Zeile als eine Zeichenfolge und positionieren sie einmal (was wirklich einfach zu lesen ist). Acrobat versucht, effizienter zu sein (und das ist es auch), indem es nur ein oder vielleicht ein paar Zeichen gleichzeitig schreibt und sie unabhängig voneinander positioniert. Während dies das Rendern WIRKLICH vereinfacht, macht es das Lesen VIEL schwieriger.

Der Vorteil hier ist, dass das PDF-Format an sich wirklich einfach ist. Sie haben “Objekte”, die einer regulären Syntax folgen. Dann können Sie sie miteinander verknüpfen, um den Inhalt zu generieren. Die Spezifikation leistet gute Arbeit bei der Beschreibung des Dateiformats. Aber das Lesen in der realen Welt wird ein bisschen Gehirnleistung erfordern …

Einige hilfreiche Ratschläge, die ich auf die harte Tour lernen musste, wenn Sie es selbst schreiben wollen:

  1. Adobe ordnet Schriftarten gerne neu zu. Also Charakter 65 wird es wahrscheinlich nicht sein A… Sie müssen ein Kartenobjekt finden und daraus ableiten, was es tut, basierend darauf, welche Charaktere sich darin befinden. Und es ist effizient, denn wenn ein Zeichen für diese Schriftart nicht im Dokument erscheint, ist es nicht enthalten (was das Leben erschwert, wenn Sie versuchen, eine PDF-Datei programmgesteuert zu bearbeiten) …
  2. Schreiben Sie es so abstrakt wie möglich. Schreiben Sie Klassen für jeden Objekttyp und jeden nativen Typ (Strings, Zahlen usw.). Lassen Sie diese Klassen für Sie parsen. Es wird einiges an Wiederholungen geben, aber Sie werden sich am Ende retten, wenn Sie feststellen, dass Sie etwas nur für einen bestimmten Typ optimieren müssen) …
  3. Schreiben Sie für eine oder zwei bestimmte Versionen der PDF-Spezifikation und setzen Sie sie durch. Überprüfen Sie die Versionsnummer, und wenn sie höher ist, als Sie erwarten, bürgen Sie … Und versuchen Sie nicht, “es zum Laufen zu bringen”. Wenn Sie neuere Versionen unterstützen möchten, brechen Sie die Spezifikation heraus und aktualisieren Sie den Parser von dort aus. Versuchen Sie nicht, Ihren Weg nach oben zu versuchen (es macht keinen Spaß) …
  4. Viel Glück mit komprimierten Streams. Ich habe festgestellt, dass Sie den Längenargumenten normalerweise nicht vertrauen können, um zu überprüfen, was Sie dekomprimieren. Manchmal (bei einigen Generatoren) funktioniert es gut … Bei anderen ist es um ein oder mehrere Bytes daneben. Ich versuche nur, es zu entleeren, wenn der Filter passt, und erzwinge dann die Länge …
  5. Beim Testen von Längen nicht verwenden strlen. Verwenden mb_strlen($string, '8bit') da es unterschiedliche Zeichensätze kompensiert (und möglicherweise ungültige Zeichen in anderen Zeichensätzen zulässt).

Ansonsten viel Glück…

  • +1 Ich könnte es sogar als Albtraum bezeichnen. Die Spezifikation ist riesig, eine PDF-Datei ähnelt fast einem Dateisystem mit so vielen verschiedenen Optionen und Auswahlmöglichkeiten darin … Sie können sicherlich sehen, wie sie Jail-Breaking-Fähigkeiten darin verbergen können.

    – Rudu

    31. August 2010 um 22:07 Uhr

  • Würden Sie von Adobe etwas weniger erwarten?

    – bpeterson76

    2. September 2010 um 15:49 Uhr

  • @bpeterson76, ja.. Ich möchte nicht, dass meine PDFs herunterladbar sind 🙁

    – Ravi Dhoriya ツ

    13. Februar 2014 um 10:32 Uhr

Ich benutze PDFBox dafür (http://pdfbox.apache.org/). Diese Software ist javabasiert und plattformunabhängig. Es funktioniert schnell und zuverlässig. Sie können es per exec oder Shell Execute oder über eine PHP/Java-Bridge (http://php-java-bridge.sourceforge.net/)

  • Vielen Dank, genau das habe ich gesucht!

    – 2. Kauboy

    2. September 2010 um 16:44 Uhr

Schon angeschaut xPDF ? Dort gibt es ein Programm namens pdftotext, das die Konvertierung durchführt. Sie können es aus PHP aufrufen und dann die Textversion des PDFs einlesen. Sie müssen die Möglichkeit haben, exec() oder system() von PHP aus auszuführen, daher funktioniert dies möglicherweise nicht bei allen gehosteten Lösungen.

Außerdem gibt es einige Beispiele auf der PHP-Site das konvertiert PDF in Text, obwohl es ziemlich grob ist. Vielleicht möchten Sie auch einige dieser Beispiele ausprobieren. Auf diesem PHP-Seitesuchen Sie bei phpt dot org nach luc.

  • Ich habe xpdf aufgrund Ihrer Empfehlung ausprobiert und war überrascht, wie gut es funktioniert – danke!

    – Tomb

    4. Februar 2011 um 17:07 Uhr

Schauen Sie sich GhostScript oder ITextSharp an, es gibt verschiedene plattformübergreifende Versionen von beiden.

Zend_Pdf ist Teil von Zend-Framework. In ihrem Handbuch heißt es:

Die Zend_Pdf Komponente ist eine PDF (Portable Document Format)-Manipulations-Engine. Es kann Dokumente laden, erstellen, ändern und speichern. Daher kann es jeder PHP-Anwendung helfen, PDF-Dokumente dynamisch zu erstellen, indem vorhandene Dokumente geändert oder neue von Grund auf neu erstellt werden.

  • +1 – Zend Framework-Komponenten tun zuverlässig, was sie versprechen.

    – karim79

    9. August 2009 um 22:50 Uhr

  • Ich glaube nicht, dass Sie mit Zend_Pdf Text in PDF-Dateien lesen können

    – Niklas Berglund

    18. März 2010 um 14:14 Uhr

  • Außerdem unterstützt Zend_Pdf das PDF-Format > 1.4 nicht

    – fkössler

    9. Mai 2013 um 1:12 Uhr

  • @Marronsuisse, ja, Zend_Pdf ist brachgefallen und hat seit 2011 fast keine Updates erhalten. In ZF2 wurde es aus der Core-Distribution entfernt.

    – Bill Karwin

    10. Mai 2013 um 15:04 Uhr

Gibt es einen PDF Parser fur PHP closed
markiere stephen

Es ist möglicherweise keine Tabelle im PDF, da das PDF diese Art von Informationen verliert …

  • +1 – Zend Framework-Komponenten tun zuverlässig, was sie versprechen.

    – karim79

    9. August 2009 um 22:50 Uhr

  • Ich glaube nicht, dass Sie mit Zend_Pdf Text in PDF-Dateien lesen können

    – Niklas Berglund

    18. März 2010 um 14:14 Uhr

  • Außerdem unterstützt Zend_Pdf das PDF-Format > 1.4 nicht

    – fkössler

    9. Mai 2013 um 1:12 Uhr

  • @Marronsuisse, ja, Zend_Pdf ist brachgefallen und hat seit 2011 fast keine Updates erhalten. In ZF2 wurde es aus der Core-Distribution entfernt.

    – Bill Karwin

    10. Mai 2013 um 15:04 Uhr

Gibt es einen PDF Parser fur PHP closed
Pranav 웃

Dies ist PHP PDF Parser, der in zwei Varianten existiert:

  1. Die kostenlose Version kann PDFs bis zum Format PDF 1.5 parsen
  2. Kommerzielles Add-On kann jedes PDF-Format analysieren (bis zur aktuellen Version 1.9)

  • Dieser Link ist tot, aber ich denke, das ist ein Fork davon: github.com/mark9000/FPDI

    – Nichtigkeit

    24. September 2013 um 18:47 Uhr


924830cookie-checkGibt es einen PDF-Parser für PHP? [closed]

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy