python

关注公众号 jb51net

关闭
首页 > 脚本专栏 > python > Python PDF表格提取

使用Python将PDF表格提取到文本,CSV和Excel文件中

作者:Eiceblue

本文将介绍如何使用简单的Python代码从PDF文档中提取表格数据并将其写入文本、CSV和Excel文件,从而轻松实现PDF表格的自动化提取,有需要的可以参考下

从PDF文档中提取表格并将其转换为更易于处理的格式(如文本、CSV和Excel文件),是数据分析和信息管理中的常见需求。此过程可显著简化表格数据的处理,使数据的操作、分析和与其他数据集的集成更加便捷。无论是财务报表、研究论文,还是包含结构化信息的其他文档,掌握这些表格准确转换的方法对于充分发挥数据潜力至关重要。

本文将介绍如何使用简单的Python代码从PDF文档中提取表格数据并将其写入文本、CSV和Excel文件,从而轻松实现PDF表格的自动化提取。

本文所需的库为Spire.PDF for Python。可通过PyPI安装:pip install spire.pdf

用于操作的示例PDF

如何使用Python提取PDF表格数据

库中的PdfTableExtractor类用于处理PDF文档的表格提取。可以通过PdfTableExtractor.ExtractTable(pageIndex: int)方法从PDF页面中提取表格,并以Utilities_PdfTable对象的集合形式返回表格数据。接着,可通过遍历表格并使用Utilities_PdfTable.GetCellText(rowIndex: int, columnIndex: int)方法获取每个单元格中的数据。

提取PDF表格数据的一般步骤如下:

注意:当使用提取的表格数据构建字符串时,如果单元格文本中包含换行符,最终生成的文本文件中可能会多出额外的换行符。为了避免造成混淆,应将这些换行符去除或替换为空格。

用Python将PDF表格数据提取为文本文件

提取PDF文档中的表格数据后,可直接将每个表格的数据写入字符串并保存到文本文件中,从而实现将PDF表格数据导出为文本文件。

具体步骤如下:

1.导入所需模块:PdfDocument和PdfTableExtractor。

2.创建PdfDocument实例并使用PdfDocument.LoadFromFile()方法加载PDF文档。

3.使用该文档创建PdfTableExtractor实例。

4.使用PdfTableExtractor.ExtractTable(pageIndex: int)方法提取每页中的表格。

5.遍历提取的表格:

6.释放资源

代码示例

from spire.pdf import PdfDocument, PdfTableExtractor

# 创建一个 PdfDocument 对象
pdf = PdfDocument()
# 加载一个 PDF 文档
pdf.LoadFromFile("Sample.pdf")

# 创建一个 PdfTableExtractor 对象
extractor = PdfTableExtractor(pdf)

# 遍历所有页面
for pageIndex in range(pdf.Pages.Count):
    # 从每个 PDF 页面中提取表格
    tables = extractor.ExtractTable(pageIndex)
    # 如果存在多个表格,则遍历这些表格
    if tables is not None:
        for tableIndex in range(len(tables)):
            # 获取一个表格
            table = tables[tableIndex]
            # 创建一个字符串对象来存储表格数据
            tableData = ""
            # 遍历表格的行和列
            for rowIndex in range(table.GetRowCount()):
                for colIndex in range(table.GetColumnCount()):
                    # 获取单元格文本
                    text = table.GetText(rowIndex, colIndex)
                    text = text.replace("\n", " ")
                    # 将单元格文本添加到表格数据中
                    tableData += text
                    if colIndex < table.GetColumnCount() - 1:
                        tableData += "\t"
                tableData += "\n"
            # 将表格数据写入文本文件
            with open(f"output/Tables/Page{pageIndex+1}-Table{tableIndex+1}.txt", "w", encoding="utf-8") as f:
                f.write(tableData)

# 释放资源
pdf.Dispose()

输出结果

用Python将PDF表格数据提取为CSV文件

同样,可以使用类似方法从PDF文档中提取表格数据,并利用Python标准库中的CSV模块将每个表格写入CSV文件。在此过程中也需注意去除或替换换行符,以改善CSV文件的结果。具体步骤如下:

1.导入所需模块:PdfDocument、PdfTableExtractor和CSV。

2.创建PdfDocument实例并使用PdfDocument.LoadFromFile()方法加载PDF文档。

3.使用该文档创建PdfTableExtractor实例。

4.使用PdfTableExtractor.ExtractTable(pageIndex: int)方法提取每页中的表格。

5.遍历提取的表格:

6.释放资源。

代码示例

from spire.pdf import PdfDocument, PdfTableExtractor
import csv

# 创建一个 PdfDocument 对象
pdf = PdfDocument()
# 加载一个 PDF 文档
pdf.LoadFromFile("Sample.pdf")

# 创建一个 PdfTableExtractor 对象
extractor = PdfTableExtractor(pdf)

# 遍历所有页面
for pageIndex in range(pdf.Pages.Count):
    # 从每个 PDF 页面中提取表格
    tables = extractor.ExtractTable(pageIndex)
    # 如果存在多个表格,则遍历这些表格
    if tables is not None:
        for tableIndex in range(len(tables)):
            # 获取一个表格
            table = tables[tableIndex]
            # 创建一个 CSV 文件
            with open("output/Tables/Page" + str(pageIndex+1) + "-Table" + str(tableIndex+1) + ".csv", "w", newline='', encoding='utf-8') as csvFile:
                writer = csv.writer(csvFile)
                # 遍历表格的行和列
                for rowIndex in range(table.GetRowCount()):
                    row = []
                    for colIndex in range(table.GetColumnCount()):
                        # 获取单元格文本
                        text = table.GetText(rowIndex, colIndex)
                        text = text.replace('\n', ' ')
                        row.append(text)
                    writer.writerow(row)

# 释放资源
pdf.Dispose()

输出结果

用Python将PDF表格数据提取到Excel工作表

可使用另一库Spire.XLS for Python将提取的PDF表格数据写入Excel工作表。通过PyPI获取Spire.PDF for Python:pip install spire.xls

具体步骤如下:

1.导入所需模块:PdfDocument、PdfTableExtractor、Workbook和spire.xls.FileFormat。

2.创建PdfDocument实例并使用PdfDocument.LoadFromFile()方法加载PDF文档。

3.创建Workbook实例用于存储表格,并使用Workbook.Worksheets.Clear()方法清除默认工作表。

4.使用该文档创建PdfTableExtractor实例。

5.使用PdfTableExtractor.ExtractTable(pageIndex: int)方法提取每页中的表格。

6.遍历提取的表格:

7.使用Workbook.SaveToFile()方法保存工作簿。

8.释放资源。

代码示例

from spire.pdf import PdfDocument, PdfTableExtractor
from spire.xls import Workbook, FileFormat, HorizontalAlignType

# 创建一个 PdfDocument 对象
pdf = PdfDocument()
# 加载一个 PDF 文档
pdf.LoadFromFile("Sample.pdf")

# 创建一个 Workbook 对象
workbook = Workbook()
# 清除默认的工作表
workbook.Worksheets.Clear()

# 创建一个 PdfTableExtractor 对象
extractor = PdfTableExtractor(pdf)

# 从每个 PDF 页面中提取表格
for pageIndex in range(pdf.Pages.Count):
    tables = extractor.ExtractTable(pageIndex)
    # 如果存在多个表格,则遍历这些表格
    if tables is not None:
        for tableIndex in range(len(tables)):
            # 获取一个表格
            table = tables[tableIndex]
            # 为表格创建一个工作表
            sheet = workbook.Worksheets.Add(f"Page{pageIndex + 1}-Table{tableIndex + 1}")
            # 遍历表格的行和列
            for rowIndex in range(table.GetRowCount()):
                for colIndex in range(table.GetColumnCount()):
                    # 获取单元格值
                    text = table.GetText(rowIndex, colIndex)
                    cellText = text.replace("\n", "")
                    # 将单元格值写入工作表的相应单元格
                    sheet.Range[rowIndex + 1, colIndex + 1].Text = cellText

            # 可选:自定义表格的外观
            # 设置标题行样式
            sheet.Rows.get_Item(0).Style.Font.FontName = "Yu Gothic UI"
            sheet.Rows.get_Item(0).Style.Font.Size = 12
            sheet.Rows.get_Item(0).Style.Font.IsBold = True
            sheet.Rows.get_Item(0).Style.HorizontalAlignment = HorizontalAlignType.Center
            # 设置数据行样式
            for i in range(1, sheet.Rows.Count):
                sheet.Rows.get_Item(i).Style.Font.FontName = "Yu Gothic UI"
                sheet.Rows.get_Item(i).Style.Font.Size = 12
                sheet.Rows.get_Item(i).Style.HorizontalAlignment = HorizontalAlignType.Left
            # 自动调整列宽
            for j in range(1, sheet.Columns.Count):
                sheet.AutoFitColumn(j)

# 保存工作簿
workbook.SaveToFile("output/PDFTableToExcel.xlsx", FileFormat.Version2016)
# 释放资源
workbook.Dispose()
pdf.Close()

输出结果

使用Python直接将PDF转换为Excel文件

还可以使用PdfDocument.SaveToFile(fileName: str, FileFormat.XLSX)方法将PDF文档直接转换为Excel文件。此方法适用于以表格为主的PDF文档,有助于尽可能保留表格的原始外观。

为减少转换后Excel表格中的空白,可以在转换前去除PDF文档的边距。参考以下文章:

Python删除PDF文档页面的页边距

直接将PDF文档转换为Excel文件的具体步骤如下:

1.导入所需模块:PdfDocument和FileFormat。

2.创建一个PdfDocument实例。

3.使用PdfDocument.LoadFromFile()方法加载PDF文档。

4.将文档转换为Excel文件并使用PdfDocument.SaveToFile(fileName: str, FileFormat.XLSX)方法保存。

5.释放资源。

代码示例

from spire.pdf import PdfDocument, FileFormat

# 创建一个 PdfDocument 实例
pdf = PdfDocument()

# 加载一个 PDF 文档
pdf.LoadFromFile("Sample.pdf")

# 将 PDF 文档转换为 Excel 文件
pdf.SaveToFile("output/PDFToExcel.xlsx", FileFormat.XLSX)

# 关闭 PDF 文档
pdf.Close()

输出结果

到此这篇关于使用Python将PDF表格提取到文本,CSV和Excel文件中的文章就介绍到这了,更多相关Python PDF表格提取内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

您可能感兴趣的文章:
阅读全文