Word/PDF 文档处理:模板填充与格式转换

合同模板、证明模板、报告模板...每次都要手动改内容?这一节讲如何用 Python 自动填充 Word 模板、读取 PDF 内容、批量转换格式。让文档处理像填表一样简单。


1. Word 文档自动化

python-docx 库

安装:

bash 复制代码
pip install python-docx

读取 Word

python 复制代码
from docx import Document

doc = Document("合同.docx")

# 读取所有段落
for para in doc.paragraphs:
    print(para.text)

# 读取表格
for table in doc.tables:
    for row in table.rows:
        for cell in row.cells:
            print(cell.text)

写入 Word

python 复制代码
from docx import Document
from docx.shared import Pt, RGBColor
from docx.enum.text import WD_ALIGN_PARAGRAPH

doc = Document()

# 添加标题
doc.add_heading("测试文档", 0)

# 添加段落
p = doc.add_paragraph("这是第一段")
p.add_run("这是加粗").bold = True

# 添加表格
table = doc.add_table(rows=2, cols=3)
table.style = "Light Grid Accent 1"

# 填充表格数据
data = [("姓名", "年龄", "部门"), ("张三", "28", "技术部")]
for i, row_data in enumerate(data):
    row = table.rows[i]
    for j, cell_data in enumerate(row_data):
        row.cells[j].text = cell_data

# 保存
doc.save("输出.docx")

2. 模板填充

基础模板替换

python 复制代码
from docx import Document

# 准备数据
data = {
    "name": "张三",
    "id": "2024001",
    "date": "2024年1月15日",
    "amount": "壹万元整"
}

# 加载模板
doc = Document("合同模板.docx")

# 替换占位符
for para in doc.paragraphs:
    for key, value in data.items():
        if f"{{{key}}}" in para.text:
            para.text = para.text.replace(f"{{{key}}}", value)

# 处理表格中的占位符
for table in doc.tables:
    for row in table.rows:
        for cell in row.cells:
            for key, value in data.items():
                if f"{{{key}}}" in cell.text:
                    cell.text = cell.text.replace(f"{{{key}}}", value)

doc.save(f"合同_{data['name']}.docx")

批量生成

python 复制代码
from docx import Document
import pandas as pd

# 读取员工名单
df = pd.read_excel("员工名单.xlsx")

# 加载模板
template = Document("合同模板.docx")

# 批量生成
for _, row in df.iterrows():
    doc = Document()
    # 复制模板内容到新文档
    for para in template.paragraphs:
        doc.add_paragraph(para.text)

    # 替换数据
    for para in doc.paragraphs:
        para.text = para.text.replace("{name}", str(row["姓名"]))
        para.text = para.text.replace("{id}", str(row["工号"]))

    # 保存
    doc.save(f"合同_{row['姓名']}.docx")

print(f"已生成 {len(df)} 份合同")

3. PDF 处理

PDF 读取

安装:

bash 复制代码
pip install pypdf
python 复制代码
from pypdf import PdfReader

reader = PdfReader("报告.pdf")

# 读取所有页面
for i, page in enumerate(reader.pages):
    text = page.extract_text()
    print(f"--- 第{i+1}页 ---")
    print(text[:500])  # 只打印前500字符

PDF 写入

安装:

bash 复制代码
pip install reportlab
python 复制代码
from reportlab.lib.pagesizes import A4
from reportlab.pdfgen import canvas

c = canvas.Canvas("报告.pdf", pagesize=A4)
c.drawString(100, 800, "Hello PDF!")
c.save()

Word 转 PDF

需要安装 Word 应用(Windows):

python 复制代码
import win32com.client
import os

def word_to_pdf(word_path, pdf_path):
    word = win32com.client.Dispatch("Word.Application")
    word.Visible = False

    doc = word.Documents.Open(os.path.abspath(word_path))
    doc.SaveAs(os.path.abspath(pdf_path), 17)  # 17 = PDF format
    doc.Close()
    word.Quit()

word_to_pdf("合同.docx", "合同.pdf")

4. 格式转换

Excel 转 Word 报告

python 复制代码
import pandas as pd
from docx import Document
from docx.shared import Inches

# 读取数据
df = pd.read_excel("销售数据.xlsx")

# 创建 Word 文档
doc = Document()
doc.add_heading("销售报告", 0)

# 添加文字
doc.add_paragraph(f"生成时间: 2024年1月15日")
doc.add_paragraph(f"总计销售额: {df['销售额'].sum():,.2f} 元")

# 添加表格
table = doc.add_table(rows=1, cols=3)
table.style = "Light Grid Accent 1"

# 表头
header_cells = table.rows[0].cells
header_cells[0].text = "产品"
header_cells[1].text = "销量"
header_cells[2].text = "销售额"

# 数据行
for _, row in df.iterrows():
    row_cells = table.add_row().cells
    row_cells[0].text = str(row["产品"])
    row_cells[1].text = str(row["销量"])
    row_cells[2].text = str(row["销售额"])

doc.save("销售报告.docx")

多格式批量转换

python 复制代码
import os
from pathlib import Path

input_dir = Path("待转换")
output_dir = Path("已转换")
output_dir.mkdir(exist_ok=True)

for file in input_dir.glob("*.docx"):
    # 转 PDF
    pdf_path = output_dir / f"{file.stem}.pdf"
    word_to_pdf(str(file), str(pdf_path))

    # 转 HTML
    html_path = output_dir / f"{file.stem}.html"
    # 使用 mammoth 库
    import mammoth
    with open(file, "rb") as docx:
        result = mammoth.convert_to_html(docx)
        with open(html_path, "wb") as html:
            html.write(result.value.encode())

print("转换完成!")

5. 实战:批量生成证明

python 复制代码
from docx import Document
from docx.shared import Pt, RGBColor
import pandas as pd

# 读取员工数据
df = pd.read_excel("员工信息.xlsx")

# 模板内容
template_text = """
在职证明

兹证明 {name}(身份证号:{id})为我公司员工,
于 {join_date} 入职,现担任 {position} 一职。

特此证明。

公司名称:北京科技有限公司
日期:{date}
"""

for _, row in df.iterrows():
    # 替换占位符
    content = template_text.format(
        name=row["姓名"],
        id=row["身份证号"],
        join_date=row["入职日期"],
        position=row["职位"],
        date="2024年1月"
    )

    # 创建文档
    doc = Document()
    doc.add_paragraph(content)

    # 设置格式
    for para in doc.paragraphs:
        para.paragraph_format.line_spacing = 1.5

    # 保存
    doc.save(f"证明_{row['姓名']}.docx")

print(f"已生成 {len(df)} 份证明")

6. 注意事项

问题 解决方案
Word 模板占位符不生效 确认占位符格式,如 {name}
批量生成速度慢 使用 python-docx 更快,win32com 较慢
PDF 中文乱码 使用支持中文的字体
转换后格式丢失 检查转换库的兼容性

小结

学会的 要点
Word 读取 python-docx 读取段落和表格
Word 写入 添加标题、段落、表格
模板填充 批量替换占位符
PDF 读取 pypdf 提取文字
格式转换 Word↔PDF、Word↔HTML

下节预告

第3节:数据分析与可视化------数据清洗、图表生成、自动报告


📺 系列文章: 智能办公自动化

  • 第1节:Excel 自动化(已发布)
  • 第2节:Word/PDF 文档处理(本文)
  • 第3节:数据分析与可视化(待发布)
  • 第4节:邮件与消息自动化(待发布)
  • 第5节:综合实战:周报一键生成(待发布)
相关推荐
阿牛哥_GX18 小时前
综合实战:周报一键生成
人工智能
leo在掘金18 小时前
GPT-5.6自动删文件事件:开发者必须知道的安全防护方案
人工智能
代码青铜18 小时前
Zion CLI & Plugin 正式发布,用 AI 搭建可视化后端
人工智能
合合技术团队18 小时前
让批改更高效、让解题更生动,合合信息“蜜蜂AI”携AI教育新场景亮相WAIC
人工智能
Android洋芋18 小时前
AI辅助C盘清理
c语言·开发语言·人工智能·ai辅助c盘清理
蓝速科技18 小时前
蓝速科技 3D 全息舱与 AI 数字人酒店降本增效实战
人工智能·科技·3d
Geoffwo18 小时前
脑控设备涉及的交叉领域
人工智能
cxr82818 小时前
智能体工程(Agent Engineering)
人工智能·智能体·认知架构·认知工程
CAE虚拟与现实18 小时前
AI 编程助手的语境下Fork是什么意思?
人工智能·claude·codex·豆包·deepseek