Existe-t-il une bibliothèque PHP PDF qui puisse remplacer les variables d'espace réservé dans un document PDF, ODT ou DOCX existant, et générer un fichier PDF comme résultat final, sans foirer la disposition?
Exigences:
N'a besoin d'aucun service Web tiers
La capacité de fonctionner sur un hébergement Web partagé serait idéale (aucune installation/package binaire requis)
Attention, une bibliothèque capable de charger un fichier PDF existant et d'insérer du texte par programme à un emplacement spécifique est pas assez pour mon cas d'utilisation.
D'après mes recherches, aucune bibliothèque ne peut le faire:
TCPDF ne peut générer que des documents à partir de zéro
FPDI peut lire les modèles PDF existants, mais ne peut ajouter du contenu que par programme (pas de remplacement de variable de modèle)
Il existe différentes bibliothèques de modèles DOCX/ODT mais elles ne sont pas générées PDF.
PHPDOCx prétend pouvoir faire exactement ce dont j'ai besoin - mais ils n'offrent pas de version d'essai et je ne vais pas acheter un chat dans un sac, surtout quand il semble y avoir non autre produit sur le Web qui le fait. J'ai du mal à croire qu'ils puissent le faire sans problème - si vous avez réussi à utiliser cela avec le produit, laissez-nous tomber ici.
Est-ce que je néglige quelque chose?
Y a-t-il un moyen de faire cela en utilisant des formulaires PDF? Je crée les documents sources dans OpenOffice 3.
Je pourrais peut-être utiliser des commandes Linux standard (pdftk
est disponible, par exemple, essayez-le maintenant.)
Mise à jour: * Argh! * J'ai été appelé à quitter le bureau et la prime a expiré entre-temps. Commencer une nouvelle prime: d'après mes tests, aucune solution ne fonctionne parfaitement pour moi pour le moment.
Mise à jour II: Je me pencherai bientôt sur l'approche pdftk, mais je commence également à percevoir une nouvelle prime pour une nouvelle série de collecte d'informations supplémentaires. Cette question a maintenant vu 1300 points de repère dans les primes, doit être une sorte de record :)
Pekka,
Je pensais que vous pouvez utiliser pdftk (un utilitaire de ligne de commande) pour remplir un formulaire PDF à l’aide de fichiers de données FDF/XFDF, que vous pouvez facilement générer à partir de PHP. C’était la meilleure option que j’ai vue jusqu’à présent, bien qu’il puisse y avoir une bibliothèque native.
pdftk est très utile en général et mérite d'être examiné.
Mise à jour: Regardez ici: http://php.net/manual/fr/book.fdf.php
Ce n’est pas très pratique, mais pour être complet: si vous avez déjà un modèle ODT, vous pouvez très bien le conserver comme modèle. Modifier le contenu OpenDocument content.xml et y remplacer les espaces réservés est assez simple. Si tel est le cas, vous pouvez utiliser unoconv
ou pyodconverter
pour transformer l'ODT en fichier PDF final.
unoconv -f pdf -o final.pdf template.odt
Bien évidemment, cela nécessite une installation OpenOffice complète (UNO et Writer) sur le serveur Web. Et évidemment, tous les hébergeurs Web n'iraient pas avec ça! haha. Même si c'est simple sur n'importe quelle configuration Debian ou Fedora. La vitesse d'exécution ne serait probablement pas exceptionnelle non plus. Mais alors, cela pourrait être l’approche la plus propre, puisque OOo gouverne les deux formats bien mieux que n’importe quelle classe PHP aurait pu le faire.
Vous n'avez pas fait free une exigence, je vais donc suggérer LiveDocX . Ils ont une option gratuite, mais cela ne répond pas à votre pas à une exigence de tierce partie, ce qui signifie que vous devez le concéder sous licence par serveur).
Il existe également un package ZF pour cela:
Avez-vous envisagé d'utiliser quelque chose comme XSL: Mise en forme d'objets (XSL: FO)? Fondamentalement, ce sont des documents XML qui sont traités et convertis en PDF. Faire des ficelles - ou mieux, des remplacements DOM - devrait être assez simple. Il prend en charge l'intégration d'images, de liens, d'annotations, etc.
Ce n'est pas PHP, mais il y a un certain nombre de wrappers PHP pour cela, ainsi que des façons de l'utiliser via exec, etc. Ce n'est pas un idéal, mais il prend complètement en charge la partie modèle. Pour plus d'informations: http://techportal.inviqa.com/2009/12/16/transforming-xml-with-php-and-xsl/
Une implémentation est disponible sous forme de projet Apache - http://xmlgraphics.Apache.org/fop/
Votre meilleur choix serait de générer le document entier à la volée, avec le modèle défini par programme en utilisant fpdf ou quelque chose de similaire. De cette façon, votre texte ne sera pas coupé par des paragraphes ou quoi que ce soit, et vous pourrez facilement positionner des images/autres éléments selon vos besoins.
fpdf et il y a une autre extension en plus de celle-ci, dont je ne me souviens plus, qui vous permet d'importer des modèles
Cela ne répondra pas à votre mandat "non binaire", mais PDFlib a un système de templates utilisant des "blocs", qui sont des métadonnées spécifiques à PDFlib que vous pouvez "dessiner" dans un PDF à l'aide d'un plugin Acrobat , puis complétez par programme au moment de l’exécution avec un seul appel de fonction par bloc. Les blocs peuvent être du texte (avec pseudo-html pour un formatage simple du visage, de la taille ou de la couleur de la police), des images (la plupart des éléments pouvant être affichés dans un PDF) et des PDF eux-mêmes. Vous pouvez ainsi intégrer des documents entiers ou des extraits. de documents dans un bloc.
Il peut le faire à partir d’un PDF pré-existant (le charger, insérer un contenu/un bloc de remplissage/etc .., en sortie) ou créer un nouveau PDF à partir de rien (il est très pénible de le faire par programmation mais possible).
J'ai utilisé les blocs avec succès pour générer un système de modèles simple pour un client, où ils pourraient dessiner des blocs dans un document avec de petites métadonnées incorporées, qui ont ensuite été analysées côté serveur pour générer un formulaire dans Invite à insérer des données dans ces blocs au moment de la génération du document.
PDFlib est Nice, et votre hôte partagé l’a peut-être déjà. J'ai été capable d'accomplir des choses comme celle-ci http://www.housejockey.com/flyers/12/80/MyListing.pdf avec PDFlib assez facilement, mais la technique de base est le texte de paragraphe ... que vous avez dit n'était pas bon.
J'ai également travaillé avec abcPDF pour ASP/ASP.NET et je l'ai trouvé très utile pour fouiller dans les fichiers PDF, mais, encore une fois, il n'a pas été conçu pour explorer les zones de texte existantes.
Travailler avec des modèles et des espaces réservés robustes est un saut de complexité par rapport au contenu instable. La restitution du texte existant dans un PDF n’est généralement pas possible. Cela nécessite une structure de document supplémentaire, ce à quoi sont conçus des progiciels coûteux à données variables comme XMPie et Creo ...
PHPDOCX commence à sonner vraiment bien! Bonne chance.
En retard, mais vous pouvez utiliser le concepteur de modèles OpenSource https://github.com/applicius/dhek/releases , pour définir des pkaceholders/zones sur tout fichier PDF existant, puis le charger dans PHP format) et écrivez en conséquence sur l’original PDF à l’aide de fpdf lib, pour générer PDF personnalisé avec des données dynamiques écrites.
J'ajouterai cette nouvelle réponse car l'extension FDF PHP est maintenant morte.
Je viens de suivre ces instructions et j'ai fini par exécuter un script Perl, puis la commande pdftk
Je suis plutôt conscient que c'est loin d'être une vraie solution PHP mais c'est fiable et assez facile à implémenter sur n'importe quelle plate-forme * nix.
Les outils décrits ici sont également disponibles sur Debian, juste au cas où vous vous poseriez la question.
Bien que ce ne soit pas exactement ce que vous avez demandé, vous pouvez envisager de le faire en deux étapes: en utilisant un système de templates php ( smarty , dwoo ) pour générer une page html, puis en utilisant des outils comme Html2Pdf convert il à pdf. Je l'utilise et les résultats sont bons (pas de problème de mise en page, etc.)
Bien sûr, cela dépend de vos documents d'entrée (pouvez-vous utiliser HTML au lieu de PDF/ODT comme source) et de la complexité de la présentation de ceux-ci.
Ok, j'essaie de vous aider à résoudre un peu le problème.
Tout d'abord la réponse pour quelques de votre question.
Q - Est-ce que je néglige quelque chose?
Il existe une bibliothèque PHP PDF qui peut remplacer les variables d'espace réservé dans un PDF existant et générer un fichier PDF comme résultat final, sans nuire à la présentation.
Q - Y a-t-il un moyen de faire cela en utilisant des formulaires PDF?
A - oui Pour ce faire, il faut absolument utiliser un PDF formulaire
Pour les deux réponses, vous pouvez utiliser Justin Koivisto pour remplir le champ de formulaire pdf. Bibliothèque php . Pour plus de détails, veuillez aller à http://koivi.com/fill-pdf-form-fields/tutorial.php . Jetez un oeil là-bas pour plus d'informations.
Un crédit à Justin Koivisto pour son travail
P.S
Pour contourner le problème d'affichage d'un tableau tel que la sortie d'un formulaire pdf , Envisagez de lire le document sur Guide de l'utilisateur d'Oracle Business Intelligence Publisher - Création d'un modèle PDF
J'ai pu remplacer les valeurs de marque de réservation dans un fichier .docx via une bibliothèque sur github appelée phpdocx (https://github.com/djpate/phpdocx) (et non celle référencée ailleurs)
J'ai ensuite réussi à placer une version portable de libreoffice sur le serveur Web de mon hôte, que j'appelle avec PHP, pour convertir au format pdf la ligne de commande .docx, etc. à la volée. Je n'ai pas de droits d'administrateur sur le serveur Web de mon hôte. Voici mon blog de ce que j'ai fait:
Cela répond partiellement à votre question. J'espère que c'est utile.
DOM Pdf et mPdf sont les deux bibliothèques disponibles pour y parvenir.
Si vous souhaitez utiliser un service externe, PDF Otter pourrait résoudre votre problème. Il existe un forfait gratuit auquel vous pouvez vous inscrire et que vous intégrez immédiatement à votre application.
Les avantages supplémentaires liés à l’utilisation de PDF Otter incluent moins de dépendances dans votre application et une expérience plus conviviale dans la sélection des champs à renseigner (j’utilise la méthode essai-erreur manuelle pour obtenir les positions des champs dans le passé, et cela prenait beaucoup de temps).
Il est un peu tard, mais jetez un œil à la bibliothèque PDFTemplate qui correspond exactement à ce que vous voulez. Vous pouvez créer des fichiers Open Document (odt) et y ajouter des espaces réservés. La bibliothèque PDFTemplate peut remplir ces espaces réservés (même avec des images) et créer un fichier PDF.