在python中使用wkhtmltopdf结合jinja2库实现pdf的批量转换与导出

目录

1、简介

1.1 基本流程

1.2 wkhtmltopdf工具简介

2、具体使用

2.1 安装并配置所需工具和库

2.2 结合上述几种工具实现pdf批量导出


1、简介

1.1 基本流程

(1)、本次采用html模版文件,使用jinja2库将数据动态渲染进入html模版,并生成新的html文件;

(2)、使用wkhtmltopdf工具将html文件转换为pdf文件

1.2 wkhtmltopdf工具简介

(1)、wkhtmltopdf 是一个开源命令行工具,用于将 HTML 文件或网页转换为 PDF 格式。它基于 WebKit 渲染引擎,支持 CSS、JavaScript 等现代网页技术,能够生成高质量的 PDF 文件。

(2)、主要特点:

  1. 跨平台支持:适用于 Windows、Linux 和 macOS。

  2. 高质量输出:生成的 PDF 文件质量高,支持复杂布局和样式。

  3. 灵活配置:提供多种选项,如页眉、页脚、页边距等。

  4. 支持 JavaScript:能够处理动态内容。

  5. 命令行操作:易于集成到自动化流程中。

具体使用可参考官方文档: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