web-dev-qa-db-fra.com

Y a t-il PDF analyseur syntaxique pour PHP?

Bonjour, je connais plusieurs PDF Générateurs pour php (fpdf, dompdf, etc.) Ce que je veux savoir, c’est un analyseur.

Pour des raisons indépendantes de ma volonté, certaines informations dont j'ai besoin ne se trouvent que dans un tableau au sein d'un fichier pdf Je dois extraire ce tableau et le convertir en tableau.

Aucune suggestion?

41
elviejo79

J'en ai déjà écrit un (pour des besoins similaires), et je peux dire ceci: Amusez-vous. C'est une tâche assez complexe. La spécification PDF est large et difficile à manier. Il existe plusieurs méthodes pour stocker du texte à l'intérieur de celui-ci. Et le kicker est que chaque générateur PDF est différent dans son fonctionnement. Ainsi, bien que quelque chose comme TFPDF ou DOMPDF crée des PDF vraiment faciles à lire (du point de vue de la machine), Acrobat crée des documents vraiment infernaux. 

La raison en est comment il écrit le texte. La plupart des moteurs de rendu basés sur le DOM - que j'ai utilisés - écrivent la ligne entière sous la forme d'une chaîne et la positionnent une fois (ce qui est très facile à lire). Acrobat tente d’être plus efficace (et c’est le cas) en n’écrivant qu’un ou quelques caractères à la fois et en les positionnant de manière indépendante. Bien que cela simplifie VRAIMENT le rendu, cela rend la lecture BEAUCOUP plus difficile. 

Le bon côté ici est que le format PDF en lui-même est vraiment simple. Vous avez des "objets" qui suivent une syntaxe régulière. Ensuite, vous pouvez les lier pour générer le contenu. La spécification fait un bon travail pour décrire le format de fichier. Mais la lecture dans le monde réel va demander un peu de puissance cérébrale ...

Quelques conseils utiles que j'ai dû apprendre à la dure si vous voulez l'écrire vous-même:

  1. Adobe aime remapper les polices. Ainsi, le caractère 65 ne sera probablement pas A... Vous devez trouver un objet de carte et en déduire ce qu'il fait en fonction des caractères qu'il contient. Et c'est efficace car si un caractère n'apparaît pas dans le document pour cette police, il ne l'inclut pas (ce qui rend la vie difficile si vous essayez de modifier un PDF par programme) ...
  2. Ecris-le aussi abstrait que possible. Écrivez des classes pour chaque type d'objet et chaque type natif (chaînes, nombres, etc.). Laissez ces classes analyser pour vous. Il y aura un peu de répétition, mais vous vous épargnerez à la fin lorsque vous réaliserez que vous devez ajuster quelque chose pour un type spécifique uniquement) ...
  3. Ecrivez pour une version spécifique ou deux de la spécification PDF et appliquez-la. Vérifiez le numéro de version, et s'il est plus élevé que prévu, libérez-vous sous caution ... Et n'essayez pas de le "faire fonctionner". Si vous souhaitez prendre en charge des versions plus récentes, définissez la spécification et mettez à niveau l'analyseur à partir de là. N'essayez pas de faire des essais et des erreurs en montant (ce n'est pas amusant) ...
  4. Bonne chance avec les flux compressés. J'ai constaté qu'en général, vous ne pouvez pas vous fier aux arguments de longueur pour vérifier ce que vous décompressez. Parfois (pour certains générateurs) cela fonctionne bien ... D'autres sont désactivés d'un ou plusieurs octets. J'essaie juste de le dégonfler si le filtre correspond, puis de forcer la longueur ...
  5. Lorsque vous testez des longueurs, n'utilisez pas strlen. Utilisez mb_strlen($string, '8bit') car il compensera pour différents jeux de caractères (et autorisera les caractères potentiellement non valides dans d'autres jeux de caractères).

Sinon, bonne chance ...

29
ircmaxell

J'utilise PDFBox pour cela ( http://pdfbox.Apache.org/ ). Ce logiciel est javabasé et indépendant de la plate-forme. Cela fonctionne rapidement et fiable. Vous pouvez l'utiliser via exec ou Shell execute ou via un pont PHP/Java ( http://php-Java-bridge.sourceforge.net/ )

17
Timo

Avez-vous déjà examiné xPDF ? Il existe un programme appelé pdftotext qui effectuera la conversion. Vous pouvez l'appeler à partir de PHP, puis lire la version texte du PDF. Vous devrez avoir la possibilité d’exécuter exec () ou system () à partir de php. Il est donc possible que cela ne fonctionne pas sur toutes les solutions hébergées. 

En outre, il existe quelques exemples sur le site PHP qui convertiront PDF en texte, bien que ce soit un peu approximatif. Vous voudrez peut-être aussi essayer certains de ces exemples. Sur cette page PHP , recherchez luc sur phpt dot org.

3
ryanday

Jetez un coup d’œil à GhostScript ou ITextSharp, il existe différentes versions multiplateformes des deux.

1
Mark Redman

Zend_Pdf fait partie du Zend Framework . Leur manuel dit:

Le composant Zend_Pdf est un PDF (Portable Document Format) moteur de manipulation. Il peut charger, créer, modifier et sauvegarder des documents . Ainsi, il peut aider toute application PHP créer dynamiquement des documents PDF par modifier des documents existants ou générer de nouvelles à partir de zéro.

1
Bill Karwin

Il se peut que ce ne soit pas vraiment un tableau à l'intérieur du PDF car le PDF perd ce type d'informations ...

0
mark stephens

Ceci est un analyseur syntaxique PHP PDF, qui existe en deux versions:

  1. La version gratuite peut analyser les fichiers PDF jusqu'au format PDF 1.5
  2. Le module complémentaire commercial peut analyser n’importe quel format PDF (jusqu’à la version 1.9 actuelle)
0
lubosdz