我正在尝试使用Jinja2和Weasyprint准备报告。为此,我使用以下html模板,并将一个数据框作为表格输入到html中。
<!DOCTYPE html>
<html>
<head>
<link href="https://fonts.googleapis.com/css?family=Roboto:400,100,100italic,300,300italic 400italic,500,500italic,700italic,700,900,900italic" rel="stylesheet">
<link type="text/css" rel="stylesheet" href="assets/css/main.css">
<style>
</style>
</head>
<body>
<div align = "center" class="container">
{{table}}
</div>
</body>
</html>
我按如下所示渲染模板:
import pandas
from jinja2 import Environment, FileSystemLoader
from weasyprint import HTML, CSS
import seaborn as sns
fmri = sns.load_dataset('fmri')
env = Environment(loader=FileSystemLoader(''))
template = env.get_template("/html_templates/example.html")
variables = {"table": fmri.to_html(classes='table table-bordered',index=False, justify='left')}
html_out = template.render(variables)
HTML(string=html_out).write_pdf("report.pdf", stylesheets=[
CSS(filename="main.css")])
生成的pdf报告为43页,其中包含表标题和表中的一项,如图所示。example of a page。 将html_out保存为html文件并在浏览器中打开显示该表没有问题。有什么主意吗?
编辑:此外,css在报告中的应用不正确。下图显示了jinja2输出html时的结果表: Table in browser
Edit2:在没有CSS的情况下打印报表效果很好,似乎是CSS文件导致了打印问题。