6

在 Python(首选)或 NodeJS 中寻找可以生成 pdf 文件的库的推荐,最好从动态 html 模板中生成要在 AWS 中运行的文件。要求是生成发票 pdf 以发送给客户。

遇到过以下 2 个节点库:

  • PDFKit
  • jsPDF

在这里,我们可能不得不处理 X 和 Y 的数字。

更好的方法是我们可以简单地使用 html/css 生成带有占位符的模板,这些占位符可以替换为动态数据(来自数据库查询)。任何建议,将不胜感激。

谢谢!

4

3 回答 3

5

这种方法在 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)

发票.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>
于 2020-01-03T12:27:55.980 回答
4

https://www.npmjs.com/package/pdfmake 当涉及到 node.js 中的动态发票时,上述库提供了灵活性

于 2019-12-02T09:20:59.503 回答
0

使用https://getpdfapi.com,您可以使用基于 Web 的编辑器设计 PDF 模板,完成后,将为您创建一个 REST API 端点。

此端点可用于将 JSON 格式的数据发送到您刚刚创建的 PDF 模板。您需要编写的唯一代码是集成 API 的代码。

您可以在此处查看快速演示:https ://www.youtube.com/watch?v=cv4ZYd_aJO8

于 2020-11-19T14:08:59.943 回答