
环境准备1. 依赖库安装本次实现依赖 PDF 解析组件与 Python 原生库执行以下命令安装免费版 PDF 解析组件pip install Spire.Pdf.Free2. 技术说明核心依赖spire.pdf.free负责识别、提取 PDF 中的表格结构与单元格数据文件导出使用 Python 内置csv、os标准库完成目录创建、CSV 写入无需额外第三方数据处理库适用场景支持单页/多页 PDF、单页多表格场景可自动按页面表格序号拆分输出文件兼容性导出 UTF-8 编码 CSV可直接用 Excel、WPS、Pandas 等工具读取。二、核心实现思路初始化 PDF 文档对象加载本地 PDF 文件创建表格提取器绑定已加载的 PDF 文档遍历 PDF 所有页面逐页提取当前页面内的全部表格针对每个表格逐行、逐列读取单元格文本并做基础文本清洗自动创建输出目录将单张表格数据写入独立 CSV 文件文件按页面、表格编号命名执行资源释放操作释放 PDF 文档占用的内存与文件流。三、完整代码实现该示例完整还原逐页、逐表提取逻辑自动创建输出目录每个表格单独生成 CSV 文件附带文本清洗逻辑from spire.pdf import PdfDocument, PdfTableExtractor import csv import os # 初始化PDF文档对象并加载文件 pdf PdfDocument() pdf.LoadFromFile(Sample.pdf) # 创建PDF表格提取器 extractor PdfTableExtractor(pdf) # 定义输出目录目录不存在则自动创建 output_root Tables os.makedirs(output_root, exist_okTrue) # 遍历PDF每一页 for page_index in range(pdf.Pages.Count): # 提取当前页面下所有表格 tables extractor.ExtractTable(page_index) # 遍历当前页面中的每一个表格 for table_index, table in enumerate(tables): table_data [] # 读取表格所有行 row_total table.GetRowCount() for row in range(row_total): row_data [] # 读取当前行所有列 col_total table.GetColumnCount() for col in range(col_total): # 提取单元格文本去除换行符、首尾空白字符 cell_text table.GetText(row, col).replace(\n, ).strip() row_data.append(cell_text) table_data.append(row_data) # 拼接CSV文件路径按 页面-表格 编号命名 csv_name fPage{page_index 1}-Table{table_index 1}.csv csv_path os.path.join(output_root, csv_name) # 写入CSV文件指定UTF-8编码newline避免多余空行 with open(csv_path, w, newline, encodingutf-8) as csvfile: writer csv.writer(csvfile) writer.writerows(table_data) print(f已导出{csv_path}) # 释放PDF文档资源 pdf.Dispose() print(所有表格导出完成)四、代码解析4.1 核心类说明PdfDocumentPDF 文档操作主类LoadFromFile()用于加载本地 PDF 文件Pages.Count获取文档总页数Dispose()用于释放文件流、内存等资源批量处理文件时必须调用防止内存堆积。PdfTableExtractor专用表格提取器依赖已加载的PdfDocument对象初始化ExtractTable(page_index)接收页码索引返回当前页面内所有表格对象集合。4.2 表格数据读取方法GetRowCount()获取当前表格的总行数GetColumnCount()获取当前行的总列数GetText(row, col)根据行、列索引读取单元格原始文本。4.3 文本清洗逻辑replace(\n, ).strip()是实用的预处理逻辑去除单元格内的换行符避免 CSV 格式错乱清除文本首尾空格、制表符保证数据整洁。4.4 CSV 写入关键配置encodingutf-8统一使用 UTF-8 编码从根源避免中文乱码newlinePythoncsv库专属配置禁止自动插入空行保证 CSV 格式标准os.makedirs(..., exist_okTrue)自动创建多级目录exist_okTrue表示目录已存在时不抛出异常。4.5 文件命名规则文件采用Page页码-Table表格序号.csv命名可直观区分数据来源方便后续文件管理与溯源。五、拓展应用方向批量处理多文件