目录
1、简介
1.1 基本流程
(1)、本次采用html模版文件,使用jinja2库将数据动态渲染进入html模版,并生成新的html文件;
(2)、使用wkhtmltopdf工具将html文件转换为pdf文件
1.2 wkhtmltopdf工具简介
(1)、wkhtmltopdf 是一个开源命令行工具,用于将 HTML 文件或网页转换为 PDF 格式。它基于 WebKit 渲染引擎,支持 CSS、JavaScript 等现代网页技术,能够生成高质量的 PDF 文件。
(2)、主要特点:
-
跨平台支持:适用于 Windows、Linux 和 macOS。
-
高质量输出:生成的 PDF 文件质量高,支持复杂布局和样式。
-
灵活配置:提供多种选项,如页眉、页脚、页边距等。
-
支持 JavaScript:能够处理动态内容。
-
命令行操作:易于集成到自动化流程中。
具体使用可参考官方文档:wkhtmltopdf.org/usage/wkhtmltopdf.txt
工具下载地址:wkhtmltopdf;可根据需求自行下载对应版本
2、具体使用
2.1 安装并配置所需工具和库
pip install jinja2
pip install pdfkit
from jinja2 import Environment, FileSystemLoader
# 加载模板
env = Environment(loader=FileSystemLoader('.'))
template = env.get_template('butuoTableHtml.html')
# 渲染模板
html_content = template.render(datas=new_dict)
其中datas是传递进html模版的值,html模版文件中使用 { { }} 解析并渲染传递过来的数据;
如果需要对某个标签进行循环渲染,可采用以下方式:
使用{% for item in Array%}开头并以{% endfor %}结尾
{% for row in datas.newfa %}
<tr>
{% for rows in row %}
<td>
{
{ rows.C6 }}
</td>
<td>
{
{ rows.C7 }}
</td>
<td>
{
{ rows.C8 }}
</td>
<td>
{
{ rows.C9 }}
</td>
{% endfor %}
<td colspan="2" rowspan="{
{datas.newfa.length}}">
{
{ datas.B9 }}
</td>
</tr>
{% endfor %}
>>> wkhtmltopdf 工具的简单使用:
将下载到本地的wkhtmltopdf 工具放在项目目录下,在代码中引入该工具,并配置具体参数,如下所示:
"""HTML 2 PDF"""
paths = os.getcwd()
# 引入wkhtmltopdf工具
wkpdf = os.path.join(paths, 'wkhtmltopdf\\bin\\wkhtmltopdf.exe')
config = pdfkit.configuration(wkhtmltopdf=wkpdf)
options = {
'page-size': 'A3', # 设置页面大小为A3
'zoom': 0.67, # 设置缩放比例为 67%
'orientation': 'Landscape', # 设置页面方向为横向
'disable-smart-shrinking': True, # 禁用智能缩小以保持清晰度
'margin-bottom': 21.5, # 设置页面底部边距为21.5毫米
}
2.2 结合上述几种工具实现pdf批量导出
首先是将数据结合模版文件处理为相应的格式,方便html的动态渲染;
可以采用多线程的方式去讲这些处理后的数据批量写入html文件;
最后再将这些文件批量转换为pdf文件,如下所示:
pdfkit.from_file(filename_html, filename_pdf, configuration=config, options=options)
其中:filename_html为所需要转换的html文件地址,是在批量将数据写入html时动态拼接而成;
with open(f'处理后生成Html文件/example_{item['householder_name']}.html', mode='w',
encoding='utf-8') as f:
f.write(html_content)
filename_pdf是转换为pdf后文件的地址;config是引入的wkhtmltopdf工具;options是pdf文件页面的具体配置信息;
转换为pdf后的效果,本次以表格为例,效果图如下:
可通过调整pdf页面缩放比例来调整显示效果;
wkhtmltopdf 工具的具体使用还可以参考以下文档
wkhtmltopdf 0.12.6 中文文档(精心整理)-CSDN博客
里面介绍较为详细,还可直接通过命令行的方式将html文档转为pdf