在实际办公与数据处理场景中,PDF 文件里的表格往往无法直接复制到 Word 中,尤其是当表格结构复杂、跨页或包含不规则布局时,手动复制不仅耗时,还容易出现错位、换行混乱或格式被破坏的问题。许多用户也尝试使用在线工具或桌面转换软件,但对批量文档、结构化提取、精准写入 Word 表格的需求来说,自动化方式仍然是最高效、最可靠的解决方案。

本文将介绍如何使用 Python 从 PDF 文件中提取表格数据,并将其以标准、结构化的表格形式写入 Word 文档。整个过程可以实现自动化,无需人工干预,适用于财务报表归档、合同中表格提取、数据治理流程、第三方 PDF 报表转换等多个业务场景。

本文使用的方法需要用到 Free Spire.PDF for PythonFree Spire.Doc for Python,可通过pip安装:

pip install spire.pdf.free, spire.doc.free

1. 加载 PDF 文件并准备 Word 文档

在处理 PDF 之前,我们需要先加载源文件并初始化 Word 文档的结构。

from spire.pdf import PdfDocument, PdfTableExtractor from spire.doc import Document, FileFormat, DefaultTableStyle, AutoFitBehaviorType, BreakType input_pdf = "sample.pdf" output_docx = "output/pdf_table_to_docx.docx" # 载入 PDF 文档 pdf = PdfDocument() pdf.LoadFromFile(input_pdf) # 创建 Word 文档 doc = Document() section = doc.AddSection()

说明:

  • PdfDocument() 用于加载 PDF 文件,为后续表格提取提供基础。
  • Document() 创建 Word 文档对象,所有表格将插入到默认的 Section 内。
  • 我们提前设置输出路径,确保程序可以直接生成可编辑的 .docx 文件。

此阶段相当于是搭建转换流程的“基础框架”。


2. 提取 PDF 表格并创建 Word 表格

接下来进入整篇文章的核心——如何从 PDF 中提取表格数据并写入 Word。

# 提取 PDF 表格数据并写入 Word 文档 table_extractor = PdfTableExtractor(pdf) for i in range(pdf.Pages.Count): tables = table_extractor.ExtractTable(i) if tables is not None and len(tables) > 0: for i in range(len(tables)): table = tables[i] # 创建 Word 表格 word_table = section.AddTable() word_table.ApplyStyle(DefaultTableStyle.ColorfulGridAccent4) word_table.ResetCells(table.GetRowCount(), table.GetColumnCount()) for j in range(table.GetRowCount()): for k in range(table.GetColumnCount()): cell_text = table.GetText(j, k).replace("\n", " ") tr = word_table.Rows[j].Cells[k].AddParagraph().AppendText(cell_text) tr.CharacterFormat.FontName = "微软雅黑" tr.CharacterFormat.FontSize = 11 word_table.AutoFit(AutoFitBehaviorType.AutoFitToWindow) section.AddParagraph().AppendBreak(BreakType.LineBreak)

关键步骤解析

(1)逐页读取 PDF 表格

ExtractTable(i) 会返回指定页面上解析出的所有表格。
PDF 本身没有真正意义上的“表格结构”,因此工具会根据线条、文本排列、单元格间距识别表格。

这一步决定了能否正确提取表格,是整个流程最重要的环节之一。

(2)动态创建 Word 表格

word_table = section.AddTable() word_table.ResetCells(row_count, column_count)

利用提取出的行列数,在 Word 中创建结构一致的表格。

  • ResetCells 会在 Word 中按行列生成一个空表格框架。
  • 表格采用 ColorfulGridAccent4 样式,使结果更易读。

(3)处理单元格内容

cell_text = table.GetText(j, k).replace("\n", " ")

PDF 单元格中经常包含换行符,因此写入 Word 前需要清理文本,避免格式错乱。

同样为提升最终文档的可读性,我们对文本进行了基础格式设置:

tr.CharacterFormat.FontName = "微软雅黑" tr.CharacterFormat.FontSize = 11

使生成的 Word 文档具有更标准、更整洁的视觉效果。

(4)自动表格宽度适配

word_table.AutoFit(AutoFitBehaviorType.AutoFitToWindow)

这一步能让表格自动适配 Word 页面宽度,在不同屏幕、Word 布局里都有良好的可视性。


3. 保存 Word 文档

最后,执行保存操作即可生成完整的 Word 文件。

doc.SaveToFile(output_docx, FileFormat.Docx)

Word 文档会按前述的结构与样式生成,可直接打开查看,也适用于进一步编辑、排版或作为报告的一部分。

提取写入结果

Python提取PDF表格写入Word文档


关键类与方法说明表

为了便于查阅,下面整理本文中主要使用到的类、属性与方法。

类 / 方法说明
PdfDocument表示 PDF 文档对象,负责加载源文件
PdfTableExtractor从 PDF 页面中解析表格的核心类
ExtractTable(page_index)返回指定页面的表格集合
DocumentWord 文档对象
AddSection()添加文档节,用于插入表格、段落等内容
section.AddTable()在 Word 中创建新表格
ResetCells(row, col)根据行列数初始化 Word 表格结构
AppendText()向表格单元格写入文本
DefaultTableStyleWord 表格样式枚举
AutoFitToWindow表格宽度自动适配页面

总结

通过本文示例,你已经了解如何使用 Python 自动化实现 PDF 表格 → Word 表格 的完整流程。从 PDF 识别表格、解析行列结构,到在 Word 中创建并填充内容,整个过程高度自动化,特别适用于批量处理与业务系统集成场景。

相比手动复制格式凌乱、在线工具功能受限、桌面工具难以批量处理,代码方式具有更高的灵活性与可控性。你可以在此基础上扩展更多能力,例如批量转换、内容清洗、模板合并、文本识别(OCR)等,为企业类文档处理提供稳定高效的解决方案。

如果你正在处理大量 PDF 表格或需要长期的文档自动化流程,这种基于 Python 的方案将为你的工作带来显著提升。


大丸子
87 声望20 粉丝