寻找推荐使用Python(优先)或NodeJS的库的建议,该库最好可以从要在AWS中运行的动态HTML模板生成pdf文件。要求是生成要发送给客户的发票pdf。
遇到了以下2个Node库:
- PDFKit
- jsPDF
在这里,我们可能不得不处理X和Y的数字。
更好的方法是,我们可以简单地使用html / css生成带有占位符的模板,该占位符可以被动态数据替换(来自数据库查询)。 任何建议,将不胜感激。
谢谢!
寻找推荐使用Python(优先)或NodeJS的库的建议,该库最好可以从要在AWS中运行的动态HTML模板生成pdf文件。要求是生成要发送给客户的发票pdf。
遇到了以下2个Node库:
在这里,我们可能不得不处理X和Y的数字。
更好的方法是,我们可以简单地使用html / css生成带有占位符的模板,该占位符可以被动态数据替换(来自数据库查询)。 任何建议,将不胜感激。
谢谢!
https://www.npmjs.com/package/pdfmake 上面的库在node.js中的动态发票方面提供了灵活性
,这种方法在Python中使用以下库对我有效:
Jinja2-用于使用自定义数据生成HTML
xhtml2pdf-用于从HTML生成PDF
考虑在您的项目目录中,有一个模板文件(invoice.html)和python文件(pdf_generator.py)
pdf_generator.py
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)
invoice.html
<!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>
,
使用https://getpdfapi.com,您可以使用基于Web的编辑器设计PDF模板,完成后,将为您创建REST API端点。
此端点可用于将JSON格式的数据发送到刚创建的PDF模板。 您唯一需要编写的代码就是集成了API的代码。
您可以在此处查看快速演示:https://www.youtube.com/watch?v=cv4ZYd_aJO8