我已经制作了一个flask应用程序,它从带有weasyprint的html生成.pdf,并将其作为附件发送。但是显然没有应用bootstrap 4CSS。我找不到解决办法。它与pdfkit工作得很好,但我需要weasyprint,因为pythonanywhere.com不支持pdfkit。
我已经尝试链接bootstrap,在我的html中使用bootstrap css作为文件,但没有区别。
这是我的python部分,它生成并发送pdf。
@app.route('/pdf_send', methods=('GET', 'POST'))
@login_required
def pdf_send():
rendered = render_template(
'pdf_send2.html',
name=name_g,
surname=surname_g,
email=email_g,
address=address_g,
invoice_no=invoice_no_g,
dict_g=dict_g,
bendra_suma_g = ('%.2f' % round(float(bendra_suma_g[0]), 2)),
send=send_g,
today=today_g
)
css_file = ('static/bootstrap.css')
filename = 'SF-' + invoice_no_g +'.pdf'
html = HTML(string=rendered)
css = CSS(filename=css_file)
html.write_pdf(filename, stylesheets=[css])
send_email(filename, email_g)
return redirect(url_for('index'))
发布于 2019-06-27 03:17:59
我知道这是一个老帖子,但我在寻找相同问题的答案时偶然发现了它,所以我添加了我的变通方法,以防它对其他人有帮助。我首先要指出的是,尽管Bootstrap确实可以工作,但它实际上并不是用来打印的,而且weasyprint会忽略@media
查询中的任何内容,所以无论如何你都需要添加大量的css以使其正确呈现,所以这可能是不值得的。
使用原始问题中的代码,如果您将引导cdn css添加到stylesheets
列表,它将呈现:
html = HTML(string=rendered)
css = CSS(filename=css_file)
html.write_pdf(filename, stylesheets=[css, "https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/css/bootstrap.min.css"])
然而,考虑到Bootstrap渲染的问题,我发现这个技巧在应用字体时非常有用。
发布于 2018-04-10 18:59:12
weasyprint在bootstrap中不能很好地工作。
为了清楚起见,这里是参考Link to Github site。
您编写的任何引导程序类都将被WeasyPrint忽略。
你可以看到“忽略...”WeasyPrint错误日志中的消息(如果已初始化)。
所以最好使用CSS来打印页面
https://stackoverflow.com/questions/49496398
复制相似问题