使用Python將PDF表格自動(dòng)提取并寫(xiě)入Word文檔表格
引言
在實(shí)際辦公與數(shù)據(jù)處理場(chǎng)景中,PDF 文件里的表格往往無(wú)法直接復(fù)制到 Word 中,尤其是當(dāng)表格結(jié)構(gòu)復(fù)雜、跨頁(yè)或包含不規(guī)則布局時(shí),手動(dòng)復(fù)制不僅耗時(shí),還容易出現(xiàn)錯(cuò)位、換行混亂或格式被破壞的問(wèn)題。許多用戶也嘗試使用在線工具或桌面轉(zhuǎn)換軟件,但對(duì)批量文檔、結(jié)構(gòu)化提取、精準(zhǔn)寫(xiě)入 Word 表格的需求來(lái)說(shuō),自動(dòng)化方式仍然是最高效、最可靠的解決方案。
本文將介紹如何使用 Python 從 PDF 文件中提取表格數(shù)據(jù),并將其以標(biāo)準(zhǔn)、結(jié)構(gòu)化的表格形式寫(xiě)入 Word 文檔。整個(gè)過(guò)程可以實(shí)現(xiàn)自動(dòng)化,無(wú)需人工干預(yù),適用于財(cái)務(wù)報(bào)表歸檔、合同中表格提取、數(shù)據(jù)治理流程、第三方 PDF 報(bào)表轉(zhuǎn)換等多個(gè)業(yè)務(wù)場(chǎng)景。
本文使用的方法需要用到 Free Spire.PDF for Python 與 Free Spire.Doc for Python,可通過(guò)pip安裝:
pip install spire.pdf.free, spire.doc.free
1. 加載 PDF 文件并準(zhǔn)備 Word 文檔
在處理 PDF 之前,我們需要先加載源文件并初始化 Word 文檔的結(jié)構(gòu)。
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) # 創(chuàng)建 Word 文檔 doc = Document() section = doc.AddSection()
說(shuō)明:
PdfDocument()用于加載 PDF 文件,為后續(xù)表格提取提供基礎(chǔ)。Document()創(chuàng)建 Word 文檔對(duì)象,所有表格將插入到默認(rèn)的 Section 內(nèi)。- 我們提前設(shè)置輸出路徑,確保程序可以直接生成可編輯的
.docx文件。
此階段相當(dāng)于是搭建轉(zhuǎn)換流程的“基礎(chǔ)框架”。
2. 提取 PDF 表格并創(chuàng)建 Word 表格
接下來(lái)進(jìn)入整篇文章的核心——如何從 PDF 中提取表格數(shù)據(jù)并寫(xiě)入 Word。
# 提取 PDF 表格數(shù)據(jù)并寫(xiě)入 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]
# 創(chuàng)建 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)關(guān)鍵步驟解析
(1)逐頁(yè)讀取 PDF 表格
ExtractTable(i) 會(huì)返回指定頁(yè)面上解析出的所有表格。
PDF 本身沒(méi)有真正意義上的“表格結(jié)構(gòu)”,因此工具會(huì)根據(jù)線條、文本排列、單元格間距識(shí)別表格。
這一步?jīng)Q定了能否正確提取表格,是整個(gè)流程最重要的環(huán)節(jié)之一。
(2)動(dòng)態(tài)創(chuàng)建 Word 表格
word_table = section.AddTable() word_table.ResetCells(row_count, column_count)
利用提取出的行列數(shù),在 Word 中創(chuàng)建結(jié)構(gòu)一致的表格。
ResetCells會(huì)在 Word 中按行列生成一個(gè)空表格框架。- 表格采用
ColorfulGridAccent4樣式,使結(jié)果更易讀。
(3)處理單元格內(nèi)容
cell_text = table.GetText(j, k).replace("\n", " ")PDF 單元格中經(jīng)常包含換行符,因此寫(xiě)入 Word 前需要清理文本,避免格式錯(cuò)亂。
同樣為提升最終文檔的可讀性,我們對(duì)文本進(jìn)行了基礎(chǔ)格式設(shè)置:
tr.CharacterFormat.FontName = "微軟雅黑" tr.CharacterFormat.FontSize = 11
使生成的 Word 文檔具有更標(biāo)準(zhǔn)、更整潔的視覺(jué)效果。
(4)自動(dòng)表格寬度適配
word_table.AutoFit(AutoFitBehaviorType.AutoFitToWindow)
這一步能讓表格自動(dòng)適配 Word 頁(yè)面寬度,在不同屏幕、Word 布局里都有良好的可視性。
3. 保存 Word 文檔
最后,執(zhí)行保存操作即可生成完整的 Word 文件。
doc.SaveToFile(output_docx, FileFormat.Docx)
Word 文檔會(huì)按前述的結(jié)構(gòu)與樣式生成,可直接打開(kāi)查看,也適用于進(jìn)一步編輯、排版或作為報(bào)告的一部分。
提取寫(xiě)入結(jié)果

關(guān)鍵類與方法說(shuō)明表
為了便于查閱,下面整理本文中主要使用到的類、屬性與方法。
| 類 / 方法 | 說(shuō)明 |
|---|---|
PdfDocument | 表示 PDF 文檔對(duì)象,負(fù)責(zé)加載源文件 |
PdfTableExtractor | 從 PDF 頁(yè)面中解析表格的核心類 |
ExtractTable(page_index) | 返回指定頁(yè)面的表格集合 |
Document | Word 文檔對(duì)象 |
AddSection() | 添加文檔節(jié),用于插入表格、段落等內(nèi)容 |
section.AddTable() | 在 Word 中創(chuàng)建新表格 |
ResetCells(row, col) | 根據(jù)行列數(shù)初始化 Word 表格結(jié)構(gòu) |
AppendText() | 向表格單元格寫(xiě)入文本 |
DefaultTableStyle | Word 表格樣式枚舉 |
AutoFitToWindow | 表格寬度自動(dòng)適配頁(yè)面 |
總結(jié)
通過(guò)本文示例,你已經(jīng)了解如何使用 Python 自動(dòng)化實(shí)現(xiàn) PDF 表格 → Word 表格 的完整流程。從 PDF 識(shí)別表格、解析行列結(jié)構(gòu),到在 Word 中創(chuàng)建并填充內(nèi)容,整個(gè)過(guò)程高度自動(dòng)化,特別適用于批量處理與業(yè)務(wù)系統(tǒng)集成場(chǎng)景。
相比手動(dòng)復(fù)制格式凌亂、在線工具功能受限、桌面工具難以批量處理,代碼方式具有更高的靈活性與可控性。你可以在此基礎(chǔ)上擴(kuò)展更多能力,例如批量轉(zhuǎn)換、內(nèi)容清洗、模板合并、文本識(shí)別(OCR)等,為企業(yè)類文檔處理提供穩(wěn)定高效的解決方案。
如果你正在處理大量 PDF 表格或需要長(zhǎng)期的文檔自動(dòng)化流程,這種基于 Python 的方案將為你的工作帶來(lái)顯著提升。
以上就是使用Python將PDF表格自動(dòng)提取并寫(xiě)入Word文檔表格的詳細(xì)內(nèi)容,更多關(guān)于Python PDF表格提取并寫(xiě)入Word的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
詳解安裝mitmproxy以及遇到的坑和簡(jiǎn)單用法
mitmproxy 是一款工具,也可以說(shuō)是 python 的一個(gè)包,在命令行操作的工具。這篇文章主要介紹了詳解安裝mitmproxy以及遇到的坑和簡(jiǎn)單用法,感興趣的小伙伴們可以參考一下2019-01-01
Python使用pypandoc將markdown文件和LaTex公式轉(zhuǎn)為word
pypandoc 是一個(gè)用于 pandoc 的輕量級(jí) Python 包裝器,支持多種格式的文檔轉(zhuǎn)換,下面我們來(lái)看看如何使用pypandoc將markdown文件和LaTex公式轉(zhuǎn)為word吧2025-04-04
將tensorflow.Variable中的某些元素取出組成一個(gè)新的矩陣示例
今天小編就為大家分享一篇將tensorflow.Variable中的某些元素取出組成一個(gè)新的矩陣示例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2020-01-01
scrapy redis配置文件setting參數(shù)詳解
這篇文章主要介紹了scrapy redis配置文件setting參數(shù)詳解,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-11-11
Python?Pandas實(shí)現(xiàn)將字符串格式轉(zhuǎn)為日期時(shí)間格式
日期和時(shí)間數(shù)據(jù)在數(shù)據(jù)分析和處理中起著關(guān)鍵作用,本文將詳細(xì)介紹如何使用Pandas將字符串格式的日期時(shí)間數(shù)據(jù)轉(zhuǎn)換為日期時(shí)間格式,需要的可以參考下2024-01-01
python使用pytest接口自動(dòng)化測(cè)試的使用
這篇文章主要介紹了python使用pytest接口自動(dòng)化測(cè)試的使用,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2021-04-04
Python實(shí)現(xiàn)簡(jiǎn)單的語(yǔ)音識(shí)別系統(tǒng)
這篇文章主要介紹了Python實(shí)現(xiàn)簡(jiǎn)單的語(yǔ)音識(shí)別系統(tǒng),具有一定借鑒價(jià)值,需要的朋友可以參考下。2017-12-12
python自動(dòng)打開(kāi)瀏覽器下載zip并提取內(nèi)容寫(xiě)入excel
這篇文章主要給大家介紹了關(guān)于python自動(dòng)打開(kāi)瀏覽器下載zip并提取內(nèi)容寫(xiě)入excel的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2021-01-01

