查看: 132|回复: 1

Python PDF解析入门:用Free Spire.PDF提取文本、表格与元数据

[复制链接]
发表于 2 小时前 | 显示全部楼层 |阅读模式
在日常办公和数据处理中,PDF文档的编程式读取是一个常见需求。借助Python第三方库Free Spire.PDF for Python,我们可以自动化提取PDF中的文本、图片、表格以及文档元数据,从而支撑文档解析、数据采集等场景。本文将从环境准备开始,逐步演示该库的核心用法,并说明免费版本的限制(每次最多处理10页)。

一、环境准备与基本工作流

首先通过pip安装免费库:
  1. pip install Spire.Pdf.Free
复制代码
安装后在代码中导入所需模块:
  1. from spire.pdf import *
  2. from spire.pdf.common import *
复制代码
该库的基本工作流程如下:
1. 创建PdfDocument对象;
2. 调用LoadFromFile()加载PDF文件;
3. 通过Pages集合访问每一页;
4. 使用对应的提取器(如PdfTextExtractor、PdfImageHelper)提取内容;
5. 处理完毕后调用Close()释放资源。

二、读取PDF基本信息(页数、页面尺寸)

提取具体内容前,通常需要先了解文档的元数据。以下代码演示如何获取总页数以及每页的尺寸:
  1. from spire.pdf import PdfDocument
  2. pdf = PdfDocument()
  3. pdf.LoadFromFile("sample.pdf")
  4. page_count = pdf.Pages.Count
  5. print(f"总页数: {page_count}")
  6. for i in range(page_count):
  7.     page = pdf.Pages.get_Item(i)
  8.     width = page.Size.Width
  9.     height = page.Size.Height
  10.     print(f"第 {i+1} 页尺寸: {width} x {height}")
  11. pdf.Close()
复制代码
输出示例:
  1. 总页数: 5
  2. 第 1 页尺寸: 595.0 x 842.0
  3. 第 2 页尺寸: 595.0 x 842.0
复制代码

三、提取PDF中的文本

文本提取是最常见的操作,PdfTextExtractor类提供了逐页提取的方法。我们可以指定起始页和结束页,并利用PdfTextExtractOptions控制提取参数(如是否保留空白布局)。注意免费版最多提取前10页:
  1. from spire.pdf import *
  2. def extract_text_from_pdf(pdf_path, start_page=1, end_page=None):
  3.     pdf = PdfDocument()
  4.     pdf.LoadFromFile(pdf_path)
  5.     total_pages = pdf.Pages.Count
  6.     if end_page is None or end_page > total_pages:
  7.         end_page = total_pages
  8.     end_page = min(end_page, 10)  # 免费版限制
  9.     for i in range(start_page - 1, end_page):
  10.         page = pdf.Pages.get_Item(i)
  11.         extractor = PdfTextExtractor(page)
  12.         options = PdfTextExtractOptions()
  13.         options.IsExtractAllText = True  # 提取全部文本,忽略表格/图片区域
  14.         text = extractor.ExtractText(options)
  15.         print(f"--- 第 {i+1} 页文本 ---")
  16.         print(text)
  17.     pdf.Close()
  18. extract_text_from_pdf("sample.pdf", end_page=2)
复制代码
需要特别说明:如果PDF中的文字是扫描图片(无文本层),则无法直接提取,需要借助OCR技术,而该库不提供OCR功能。

四、提取PDF中的图片

图片提取通过PdfImageHelper完成。该库会将每张图片保存为PNG格式,并可指定输出目录。同样受限于免费版的前10页:
  1. import os
  2. from spire.pdf import *
  3. def extract_images_from_pdf(pdf_path, output_dir="images"):
  4.     if not os.path.exists(output_dir):
  5.         os.makedirs(output_dir)
  6.     pdf = PdfDocument()
  7.     pdf.LoadFromFile(pdf_path)
  8.     page_limit = min(pdf.Pages.Count, 10)
  9.     image_helper = PdfImageHelper()
  10.     for page_index in range(page_limit):
  11.         page = pdf.Pages.get_Item(page_index)
  12.         images_info = image_helper.GetImagesInfo(page)
  13.         for i, img_info in enumerate(images_info):
  14.             img_info.Image.Save(f"{output_dir}/page_{page_index}_img_{i}.png")
  15.             print(f"已保存: page_{page_index}_img_{i}.png")
  16.     pdf.Close()
  17.     print(f"图片提取完成,共处理 {page_limit} 页,图片保存在 {output_dir} 目录下")
  18. extract_images_from_pdf("sample.pdf")
复制代码

五、提取PDF中的表格

表格提取稍微复杂一些,该库没有提供直接导出CSV/Excel的方法,但可以通过PdfTableExtractor获取表格结构数据,然后手动解析。注意,PdfTableExtractor只能识别有明确边框和结构的表格,对于扫描表格或复杂排版可能失败:
  1. from spire.pdf import *
  2. def extract_tables_from_pdf(pdf_path):
  3.     pdf = PdfDocument()
  4.     pdf.LoadFromFile(pdf_path)
  5.     page_limit = min(pdf.Pages.Count, 10)
  6.     extractor = PdfTableExtractor(pdf)
  7.     for i in range(page_limit):
  8.         page = pdf.Pages.get_Item(i)
  9.         tables = extractor.ExtractTable(i)
  10.         if tables:
  11.             print(f"第 {i+1} 页发现 {len(tables)} 个表格")
  12.             for t_idx, table in enumerate(tables):
  13.                 print(f"  表格 {t_idx+1}:")
  14.                 rows = table.GetRowCount()
  15.                 cols = table.GetColumnCount()
  16.                 print(f"  行数: {rows}, 列数: {cols}")
  17.                 if rows > 0:
  18.                     header = [table.GetText(0, c) for c in range(cols)]
  19.                     print(f"  表头: {header}")
  20.                     for r in range(min(rows, 4)):
  21.                         row_data = [table.GetText(r, c) for c in range(cols)]
  22.                         print(f"  第{r+1}行: {row_data}")
  23.         else:
  24.             print(f"第 {i+1} 页未发现表格")
  25.     pdf.Close()
  26. extract_tables_from_pdf("sample.pdf")
复制代码

六、总结

通过上述方法,我们可以用Python实现对PDF文档的全面读取,涵盖基本信息、文本、图片和表格数据获取。这些能力为文档自动化处理、数据采集和内容分析提供了基础支撑。实际使用时需注意免费版10页的限制,若需处理完整文档可考虑付费版本或类似开源方案。根据具体需求选择合适的提取方式,即可高效完成PDF的编程式解析任务。
回复

使用道具 举报

发表于 2 小时前 | 显示全部楼层

Re: Python PDF解析入门:用Free Spire.PDF提取文本、表格与元数据

很实用的入门教程,感谢分享!尤其注意到免费版10页的限制和表格提取的适用条件,这些细节对实际选型很有帮助。请问如果PDF是扫描件,除了使用其他OCR库,这个库本身有没有办法识别带文本层的图片型PDF?另外提取表格时,对于没有明显边框的表格,您有没有尝试过其他辅助提取的方法?
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

指导单位

江苏省公安厅

江苏省通信管理局

浙江省台州刑侦支队

DEFCON GROUP 86025

Hacking Group 021A

旗下站点

态势感知中心

应急响应中心

红盟安全

联系我们

官方QQ群:112851260

官方邮箱:security#ihonker.org(#改成@)

官方核心成员

关注微信公众号

Archiver|手机版|小黑屋| ( 沪ICP备2021026908号 )

GMT+8, 2026-6-11 11:29 , Processed in 0.045830 second(s), 18 queries , Gzip On, Redis On.

Powered by ihonker.com

Copyright © 2015-现在.

  • 返回顶部