在實際辦公與數據處理場景中,PDF 文件裏的表格往往無法直接複製到 Word 中,尤其是當表格結構複雜、跨頁或包含不規則佈局時,手動複製不僅耗時,還容易出現錯位、換行混亂或格式被破壞的問題。許多用户也嘗試使用在線工具或桌面轉換軟件,但對批量文檔、結構化提取、精準寫入 Word 表格的需求來説,自動化方式仍然是最高效、最可靠的解決方案。
本文將介紹如何使用 Python 從 PDF 文件中提取表格數據,並將其以標準、結構化的表格形式寫入 Word 文檔。整個過程可以實現自動化,無需人工干預,適用於財務報表歸檔、合同中表格提取、數據治理流程、第三方 PDF 報表轉換等多個業務場景。
本文使用的方法需要用到 Free Spire.PDF for Python 與 Free 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 文檔會按前述的結構與樣式生成,可直接打開查看,也適用於進一步編輯、排版或作為報告的一部分。
提取寫入結果
關鍵類與方法説明表
為了便於查閲,下面整理本文中主要使用到的類、屬性與方法。
| 類 / 方法 | 説明 |
|---|---|
PdfDocument |
表示 PDF 文檔對象,負責加載源文件 |
PdfTableExtractor |
從 PDF 頁面中解析表格的核心類 |
ExtractTable(page_index) |
返回指定頁面的表格集合 |
Document |
Word 文檔對象 |
AddSection() |
添加文檔節,用於插入表格、段落等內容 |
section.AddTable() |
在 Word 中創建新表格 |
ResetCells(row, col) |
根據行列數初始化 Word 表格結構 |
AppendText() |
向表格單元格寫入文本 |
DefaultTableStyle |
Word 表格樣式枚舉 |
AutoFitToWindow |
表格寬度自動適配頁面 |
總結
通過本文示例,你已經瞭解如何使用 Python 自動化實現 PDF 表格 → Word 表格 的完整流程。從 PDF 識別表格、解析行列結構,到在 Word 中創建並填充內容,整個過程高度自動化,特別適用於批量處理與業務系統集成場景。
相比手動複製格式凌亂、在線工具功能受限、桌面工具難以批量處理,代碼方式具有更高的靈活性與可控性。你可以在此基礎上擴展更多能力,例如批量轉換、內容清洗、模板合併、文本識別(OCR)等,為企業類文檔處理提供穩定高效的解決方案。
如果你正在處理大量 PDF 表格或需要長期的文檔自動化流程,這種基於 Python 的方案將為你的工作帶來顯著提升。