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