Recherche de recommandation d'une bibliothèque en Python (première préférence) ou NodeJS qui peut générer un fichier pdf de préférence à partir d'un modèle html dynamique à exécuter dans AWS. L'exigence est de générer une facture PDF à envoyer aux clients.
J'ai rencontré ci-dessous 2 bibliothèques de nœuds:
Ici, nous pourrions avoir à traiter des nombres pour X et Y.
Une meilleure approche serait quelque chose où nous pouvons simplement utiliser html / css pour générer un modèle avec des espaces réservés qui peuvent être remplacés par des données dynamiques (provenant d'une requête de base de données). Toute suggestion serait appréciée.
Merci!
3 Réponses :
https://www.npmjs.com/package/pdfmake La bibliothèque ci-dessus permet une flexibilité en ce qui concerne les factures dynamiques dans node.js
Cette approche a fonctionné pour moi en Python en utilisant les bibliothèques ci-dessous:
Jinja2 - pour générer du HTML avec des données personnalisées
xhtml2pdf - pour générer un PDF à partir de HTML
Considérez dans votre PROJECT DIR, il existe un fichier modèle (facture.html) et un fichier python (pdf_generator.py)
pdf_generator.py
<!DOCTYPE html> <html lang="en"> <body> Name: {{ json_data.company_name }} <br> City/State: {{ json_data.city }}, {{ json_data.state }} <br> Date: {{ json_data.order_creation_date }} <br> Order ID: {{ json_data.order_id }} <br> </body> </html>
facture.html
from xhtml2pdf import pisa import jinja2 templateLoader = jinja2.FileSystemLoader(searchpath="./") templateEnv = jinja2.Environment(loader=templateLoader) TEMPLATE_FILE = "invoice.html" template = templateEnv.get_template(TEMPLATE_FILE) # This data can come from database query body = { "data":{ "order_id": 123, "order_creation_date": "2020-01-01 14:14:52", "company_name": "Test Company", "city": "Mumbai", "state": "MH", } } # This renders template with dynamic data sourceHtml = template.render(json_data=body["data"]) outputFilename = "invoice.pdf" # Utility function def convertHtmlToPdf(sourceHtml, outputFilename): # open output file for writing (truncated binary) resultFile = open(outputFilename, "w+b") # convert HTML to PDF pisaStatus = pisa.CreatePDF( src=sourceHtml, # the HTML to convert dest=resultFile) # file handle to receive result # close output file resultFile.close() # return True on success and False on errors print(pisaStatus.err, type(pisaStatus.err)) return pisaStatus.err if __name__ == "__main__": pisa.showLogging() convertHtmlToPdf(sourceHtml, outputFilename)
Avec https://getpdfapi.com, vous pouvez concevoir des modèles PDF à l'aide d'un éditeur Web et une fois que vous avez terminé, un point de terminaison d'API REST sera créé juste pour vous.
Ce point de terminaison peut être utilisé pour envoyer vos données au format JSON au modèle PDF que vous venez de créer. Le seul code que vous devez écrire est le code qui intègre l'API.
Vous pouvez consulter une démo rapide ici: https://www.youtube.com/watch?v=cv4ZYd_aJO8