Comment puis-je remplir automatiquement un formulaire PDF dans Django/Python? [fermé]
J'ai des formulaires PDF que je veux autopopuler avec les données de mon application web Django, puis proposer à l'utilisateur de télécharger. Quelle bibliothèque python me permettrait de pré-remplir facilement les formulaires PDF? Ces formulaires sont destinés à être imprimés.
3 réponses
Reportlab est génial si vous générez des fichiers PDF très dynamiques et que vous avez besoin de tout contrôler par programme: données et mise en page.
Pour simplement remplir des formulaires dans des PDF existants, reportlab est exagéré et vous devrez essentiellement reconstruire le PDF à partir de zéro dans reportlab au lieu de simplement prendre un PDF avec un formulaire qui a déjà été fait.
Les formulaires PDF fonctionnent avec les données FDF. J'ai porté une bibliothèque PHP FDF en Python il y a un moment quand je devais le faire et l'ai publié comme fdfgen. - Je l'utiliser pour générer un fichier fdf avec les données de ce formulaire, puis utilisez pdftk pour pousser le fdf dans un formulaire PDF et générer la sortie.
L'ensemble du processus fonctionne comme ceci:
- Vous (ou un concepteur) Concevez le PDF dans Acrobat ou autre et marquez les champs du formulaire et notez les noms des Champs (Je ne sais pas exactement comment cela est fait; notre concepteur fait cette étape). Disons que votre formulaire contient des champs "nom" et "téléphone".
-
Utilisation fdfgen pour créer un fichier FDF:
from fdfgen import forge_fdf fields = [('name','John Smith'),('telephone','555-1234')] fdf = forge_fdf("",fields,[],[],[]) fdf_file = open("data.fdf","w") fdf_file.write(fdf) fdf_file.close()
-
Ensuite, vous exécutez pdftk pour fusionner et aplatir:
pdftk form.pdf fill_form data.fdf output output.pdf flatten
Et un pdf rempli, aplati (ce qui signifie qu'il n'y a plus de champs de formulaire modifiables) sera en sortie.PDF.
C'est un peu compliqué, et pdftk peut être pénible à installer (nécessite une pile java et il y a des bugs sur Ubuntu 9.10 qui doivent être contournés) mais c'est le processus le plus simple que j'ai pu trouver et le flux de travail est pratique (c'est-à-dire que nos concepteurs peuvent apporter toutes les modifications de mise en page au PDF qu'ils veulent et tant qu'ils ne changent pas les noms des champs, je peux déposer le nouveau et tout continue de fonctionner).
Je m'excuse pour le manque de docs sur fdfgen. forge_fdf () est vraiment la seule fonction dont vous devriez avoir besoin et il a un docstrings pour expliquer les arguments. Je n'ai jamais vraiment réussi à en faire plus avec.
Regardez également ce segment de code qui est une solution prête à l'emploi pour créer une vue pdf dans django qui s'appuie sur la solution de Thraxil ci-dessus. Merci à l'utilisateur GitHub zyegfryed.
Essayez reportlab.
Aussi, jetez un coup d'œil à sortie des fichiers PDF.
Modifier
J'ai eu une autre pensée (mais cela n'aidera pas si vous avez déjà les fichiers PDF, et j'aime mieux la réponse de @thraxil).
Plus tôt cette année, j'ai travaillé sur un projet où j'ai généré des "certificats d'achèvement" pour les cours de formation continue. L'un des angles que j'ai regardé était d'essayer de générer un PDF directement à partir d'un fichier approprié page Web de style (quelque chose comme un côté serveur "Imprimer au format PDF").
L'Un des outils que j'ai trouvé est de wkhtmltopdf. C'est un navigateur WebKit autonome qui transformera une URL en PDF, et avec de très bons résultats.
L'idée est que vous utilisez le moteur de modèle de django pour créer une page contenant ce que vous voulez (y compris les images), passer son url à wkhtmltopdf, récupérer la sortie et la renvoyer à l'utilisateur.
J'ai aimé l'approche parce que c'est vraiment simple à implémenter (il suffit d'ouvrir un tuyau), vous n'avez pas à vous soucier de garder les fichiers PDF source accessibles au serveur, et vous pouvez redessiner les fichiers PDF en changeant le code HTML.