WeaseyPrint格式不正确的PDF

时间:2019-05-14 11:42:48

标签: python-3.x web flask weasyprint

我正在尝试从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模板。

1 个答案:

答案 0 :(得分:0)

该解决方案可能会有些复杂,但是它可以工作,所以我将在这里为所有阅读此解决方案的人添加它...


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'))

因此,我们在表格中查询要填充pdf的数据-post = Quote.query.get_or_404(lead_id)

然后我们将HTML传递的帖子作为自变量呈现,因为我的神社是{{ post.[variable] }}

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

可能会有更好的方法来执行此操作,请随时发布更好的解决方案,但这将基于HTML模板动态创建PDF。