WeaseyPrint 错误地格式化 PDF

WeaseyPrint Formats a PDF incorrectly

我正在尝试从 HTML 文件创建 PDF,我还想将变量传递给 JINJA 模板以获取它。目前我一直在尝试使用 weasyprint 这样做:

from weasyprint import HTML, CSS

css = CSS(string='@page { size: A3; margin: 0cm }')
html = HTML('/home/templates/pdf_test.html')

html.write_pdf('test.pdf', stylesheets=[css])

然后我将如何重构它以在创建 PDF 之前将变量发送到 HTML?我正在为我的框架使用 Flask,HTML 包含 JINJA 模板。

这个解决方案可能有点复杂,但它确实有效,所以我会在此处添加它以供阅读本文的任何人使用...


from weasyprint import HTML

@leads.route("/create-quote/<int:lead_id>", methods=['GET', 'POST'])
def generate_pdf(lead_id):
    post = Quote.query.get_or_404(lead_id)
    html_template = render_template('leads/pdf_test.html', post=post)
    HTML(string=html_template).\
        write_pdf('DESTINATION_OF_FILE/{}_quote.pdf'.format(post.business_name),
                  stylesheets=['PATH_TO_CSS_FOR_PDF'])
    flash('Your quote email has been generate! Please see var/b2b/quotes', 'success')
    return redirect(url_for('main.dashboard'))

所以我们在 table 中查询要填充 pdf 的数据 - post = Quote.query.get_or_404(lead_id)

然后我们渲染 HTML 作为参数传递 post 因为我的神社是 {{ post.[variable] }}

使用 Wea​​seyPrint,我们可以创建一个 HTML 对象,传入填充的 HTML 和 PDF 的 CSS。

可能有更好的方法,请随时 post 更好的解决方案,但这会根据 HTML 模板动态创建 PDF。