首先想到的当然是 PDF 格式,利用 Python 操作 PDF 也是之前文章分享过很多,想必利用表格+图片生成一个新的PDF并不困难。研究了一番后,发现确实不难,但是太繁琐了,并且 PDF 涉及格式、分页等,如果没有调整好可能会将一张图片放在两页或者一页只有一张图其余全是空白,十分影响美观,由于我每次产生的结果并不固定,因此很难找到一个通用的模版,遂放弃。
PDF 既然不行,Word就更不用考虑了,所以只能选择 html 格式,虽然跨平台性没有 PDF 好,但是胜在排版简单,不需要考虑分页处理。基于 Python 生成 html 有很多成熟的 web 开发框架可以选择,但为了整体过程不太复杂,最终选择 Jinja2 来实现这个需求。
02
jinja2
Jinja2 是一个 Python 的功能齐全的模板引擎,简单来说就是我们将 html 的主要部分写好,将需要填充的内容空出来,这样就是一个模版,之后就可以使用 Jinja2 来自动将模版文件填充,形成一个完整的 html 文件。
import pandas as pd from jinja2 import Environment, FileSystemLoader
data = {'strategy_name': '第一个策略', 'start_time': '2020-01-01', 'end_time': '2021-06-01', 'money': 20000}
env = Environment(loader=FileSystemLoader('./'))
template = env.get_template('template.html')
with open("out.html", 'w+', encoding='utf-8') as f: out = template.render(strategy_name=data['strategy_name'], start_time=data['start_time'], end_time=data['end_time'], money=data['money']) f.write(out) f.close()
在上面的代码中,我们使用env.get_template('template.html')读取模版文件,并将需要需要传入的数据写入字典中,并将 value 通过template.render传给模版并渲染输出,现在打开生成的 out.html 内容如下