You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用docxtpl可保存为DOCX但无法保存为PDF格式求助

问题原因

docxtpl库的DocxTemplate.save()方法仅支持保存为DOCX格式,没有直接生成PDF的功能。你调用doc.save(f"{row['name']}.pdf")本质上是把DOCX内容强行改了后缀名,生成的文件实际还是DOCX格式,自然无法用PDF阅读器正常打开。

解决方案

提供两种实用的实现方式,按需选择:

方式一:用docx2pdf库(简单快捷,依赖微软Word)

docx2pdf可以直接将DOCX转PDF,要求系统安装微软Word(Windows/macOS均可)。

操作步骤

  1. 安装依赖包:
pip install docxtpl pandas docx2pdf
  1. 修改后的代码:
import pandas as pd
from datetime import datetime
from docxtpl import DocxTemplate
from docx2pdf import convert

today_date = datetime.today().strftime("%d/%m/%y")
my_context = {'today_date': today_date}

df = pd.read_excel('list.xlsx')

for index, row in df.iterrows():
    # 每次循环重新加载模板,避免之前的渲染内容残留
    doc = DocxTemplate("sample.docx")
    context = {'my_name': row['name'], 'my_age': row['age']}
    context.update(my_context)
    doc.render(context)
    
    docx_path = f"{row['name']}.docx"
    doc.save(docx_path)
    # 调用docx2pdf转换为PDF
    convert(docx_path)

方式二:用LibreOffice(跨平台,无需微软Word)

如果系统没装微软Word,可借助LibreOffice的命令行工具完成转换,支持Windows、Linux、macOS。

操作步骤

  1. 安装LibreOffice,并确保soffice命令行工具在系统PATH中。
  2. 修改后的代码:
import pandas as pd
from datetime import datetime
from docxtpl import DocxTemplate
import subprocess

today_date = datetime.today().strftime("%d/%m/%y")
my_context = {'today_date': today_date}

df = pd.read_excel('list.xlsx')

for index, row in df.iterrows():
    doc = DocxTemplate("sample.docx")
    context = {'my_name': row['name'], 'my_age': row['age']}
    context.update(my_context)
    doc.render(context)
    
    docx_path = f"{row['name']}.docx"
    pdf_path = f"{row['name']}.pdf"
    doc.save(docx_path)
    
    # 调用LibreOffice命令行转换
    subprocess.run([
        'soffice',
        '--headless',  # 无界面模式
        '--convert-to', 'pdf',
        '--outdir', '.',  # 输出到当前目录
        docx_path
    ], check=True)
额外注意事项
  • 必须每次循环重新加载DocxTemplate,否则前一次的渲染内容会保留在模板对象中,导致后续文件内容重复。
  • 使用docx2pdf时,Word会后台启动,转换过程中不要手动关闭Word进程。

内容的提问来源于stack exchange,提问作者jjbkd

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.26 01:12:30