博客 / 詳情

返回

如何用Python提取PDF文檔中的表格

PDF文檔中常常包含大量數據,尤其是官方報告、學術論文、財務報表等文檔,往往包含了結構化的表格數據。表格作為承載關鍵信息的載體,其內容的準確提取對於數據分析、研究論證乃至業務決策具有重大意義。然而,PDF格式雖保證了文檔的跨平台一致性,卻給數據的直接提取和利用設置了障礙。掌握如何用Python高效地從PDF文檔中提取表格,可以提升我們的數據處理能力、加速信息流轉的能力。本文介紹如何利用Python來快速提取PDF文檔中的表格數據,以及將表格數據保存到Excel表格和CSV文件。

  • 用Python提取PDF文檔中的表格數據
  • 提取PDF文檔中的表格並保存到Excel文件

本文所使用的方法需要用到Spire.PDF for Python,可通過PyPI安裝:pip install Spire.PDF

提取PDF文檔中的表格數據

PdfTableExtractor(PdfDocument) 類可以用於處理PDF文檔表格提取工作。創建好此類的實例之後,再使用 PdfTableExtractor.ExtractTable(int: page index) 方法就可以提取到指定頁面上的所有表格了。獲取到表格之後,我們就可以使用 PdfTable.GetText(int: row index, int column index) 方法提取表格數據保存到其他位置了。
以下是提取PDF表格並保存到文本的操作步驟:

  1. 導入所需模塊。
  2. 創建 PdfDocument 實例,並使用 PdfDocument.LoadFromFile() 方法載入PDF文檔。
  3. 創建一個列表儲存表格數據,再使用文檔創建一個 PdfTableExtractor 實例。
  4. 遍歷文檔頁面,使用 PdfTableExtractor.ExtractTable(int: page index) 方法提取頁面上的表格。
  5. 遍歷每個提取到的表格,為每個表格創建字符串對象,再使用 PdfTable.GetText(int: row index, int column index) 方法獲取表格數據並添加到字符串中。
  6. 將每個表格保存為一個文本文件。
  7. 釋放資源。

代碼示例:

from spire.pdf import *
from spire.pdf.common import *

# 創建PdfDocument類的實例
pdf = PdfDocument()

# 加載PDF文件
pdf.LoadFromFile("示例.pdf")

# 創建列表
list = []

# 創建PdfTableExtractor對象
extractor = PdfTableExtractor(pdf)

# 遍歷文檔的頁面
for pageIndex in range(pdf.Pages.Count):
    # 從頁面提取表格
    tableList = extractor.ExtractTable(pageIndex)

    # 檢查表格列表是否不為空且列表不為空
    if tableList is not None and len(tableList) > 0:
        # 遍歷列表中的表格
        for table in tableList:
            tableData = ''
            # 獲取行數和列數
            row = table.GetRowCount()
            column = table.GetColumnCount()

            # 遍歷表格的行和列
            for i in range(row):
                for j in range(column):
                    # 從單元格獲取文本
                    text = table.GetText(i, j)

                    # 將文本添加到列表中
                    tableData += text + " "
                tableData += "\n"
        list.append(tableData)

# 將每個表格保存為txt文件
for i in range(len(list)):
    fileName = "output/Tables/ExtractedPDFTables{0}.txt".format(i)
    with open(fileName, "w") as f:
        f.writelines(list[i])

# 釋放資源
pdf.Close()

提取結果:

提取PDF文檔中的表格並保存到CSV文件

在提取表格數據時,我們可以結合Spire.XLS for Python庫(pip install Spire.XLS)來直接將表格數據寫入Excel文件中。以下是操作步驟:

  1. 導入所需模塊。
  2. 創建一個 PdfDocument 類的實例。
  3. 使用 PdfDocument.LoadFromFile() 方法加載一個示例PDF文檔。
  4. 創建一個 Workbook 類的實例,並清除其中的默認工作表。
  5. 遍歷PDF文檔中的頁面。
  6. 使用 PdfTableExtractor.ExtractTable() 方法從頁面中提取表格。
  7. 遍歷提取出的表格。
  8. 對於每個表格,使用 Workbook.Worksheets.Add() 方法向工作簿中添加一個工作表。
  9. 使用 PdfTable.GetText() 方法獲取表格中單元格的文本。
  10. 使用 Worksheet.Range[rowIndex, columnIndex].Value 屬性將文本寫入工作表中的特定單元格。
  11. 使用 Workbook.SaveToFile() 方法將結果工作簿保存為Excel文件。
  12. 釋放資源。

代碼示例:

from spire.pdf import *
from spire.xls import *

# 創建一個PdfDocument對象
doc = PdfDocument()

# 加載示例PDF文件
doc.LoadFromFile("示例.pdf")

# 創建一個Workbook對象
workbook = Workbook()

# 清除默認的工作表
workbook.Worksheets.Clear()

# 創建一個PdfTableExtractor對象
extractor = PdfTableExtractor(doc)

sheetNumber = 1

# 循環遍歷頁面
for pageIndex in range(doc.Pages.Count):
    # 從特定頁面提取表格
    tableList = extractor.ExtractTable(pageIndex)

    # 判斷表格列表是否不為空
    if tableList is not None and len(tableList) > 0:
        # 循環遍歷列表中的表格
        for table in tableList:
            # 添加一個工作表
            sheet = workbook.Worksheets.Add(f"sheet{sheetNumber}")

            # 獲取某個表格的行數和列數
            row = table.GetRowCount()
            column = table.GetColumnCount()

            # 循環遍歷行和列
            for i in range(row):
                for j in range(column):
                    # 從特定單元格獲取文本
                    text = table.GetText(i, j)

                    # 將文本寫入指定的單元格
                    sheet.Range[i + 1, j + 1].Value = text

            # 自動調整列寬
            sheet.AllocatedRange.AutoFitColumns()

            sheetNumber += 1

# 保存到文件
workbook.SaveToFile("output/Tables/PDF表格到Excel文件.xlsx", ExcelVersion.Version2013)
workbook.Dispose()

提取的表格:

本文演示瞭如何使用Python提取PDF文檔中的表格數據,並將其保存到文本文件或Excel文件。

更多PDF文檔操作技巧請前往Spire.PDF for Python教程。

申請免費許可

user avatar
0 位用戶收藏了這個故事!

發佈 評論

Some HTML is okay.