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