当前位置: 首页 > news >正文

Python PDF 解析入门:提取信息、表格与元数据

1. 环境准备

1.1 安装免费 Python PDF 库

可以通过 pip 直接安装:

pip install Spire.Pdf.Free

安装后,在代码中导入所需模块即可:

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

注意:该库的免费版本对处理的 PDF 页数有限制(每次最多 10 页),本文示例均基于免费版的功能范围。

1.2 基本工作流程

使用该库读取 PDF 的一般步骤为:

  1. 创建PdfDocument对象。
  2. 调用LoadFromFile()方法加载 PDF 文件。
  3. 通过Pages集合访问每一页。
  4. 使用对应提取器(如PdfTextExtractorPdfImageHelper)提取内容。
  5. 关闭文档释放资源。

2. 读取 PDF 基本信息(页数、页面尺寸等)

在提取具体内容前,通常需要先了解文档的元数据。

from spire.pdf import PdfDocument # 加载 PDF 文档 pdf = PdfDocument() pdf.LoadFromFile("sample.pdf") # 获取页数 page_count = pdf.Pages.Count print(f"总页数: {page_count}") # 遍历每一页,获取页面尺寸 for i in range(page_count): page = pdf.Pages.get_Item(i) width = pdf.Size.Width height = page.Size.Height print(f"第 {i+1} 页尺寸: {width} x {height}") pdf.Close()

输出示例:

总页数: 5 第 1 页尺寸: 595.0 x 842.0 第 2 页尺寸: 595.0 x 842.0 ...

3. 提取 PDF 中的文本

文本提取是最常见的需求。PdfTextExtractor类提供了逐页提取文本的方法。

from spire.pdf import * def extract_text_from_pdf(pdf_path, start_page=1, end_page=None): pdf = PdfDocument() pdf.LoadFromFile(pdf_path) total_pages = pdf.Pages.Count if end_page is None or end_page > total_pages: end_page = total_pages # 免费版最多处理前10页,此处限制输出 end_page = min(end_page, 10) for i in range(start_page - 1, end_page): page = pdf.Pages.get_Item(i) extractor = PdfTextExtractor(page) # 提取文本,可以设置提取参数(如是否保留空白布局) options = PdfTextExtractOptions() options.IsExtractAllText = True # 提取全部文本(忽略表格/图片区域) text = extractor.ExtractText(options) print(f"--- 第 {i+1} 页文本 ---") print(text) print("\n") pdf.Close() extract_text_from_pdf("sample.pdf", end_page=2)

说明:如果 PDF 中的文字为扫描图片(无文本层),则无法直接提取,需要配合 OCR 技术(该库不提供 OCR 功能)。


4. 提取 PDF 中的图片

Free Spire.PDF 提供了PdfImageHelper来提取页面中的图片资源。

import os from spire.pdf import * def extract_images_from_pdf(pdf_path, output_dir="images"): """ 提取 PDF 中所有图片并保存到指定文件夹 注意:免费版最多处理前 10 页 """ # 创建输出目录 if not os.path.exists(output_dir): os.makedirs(output_dir) # 加载 PDF 文档 pdf = PdfDocument() pdf.LoadFromFile(pdf_path) # 免费版限制:最多处理前 10 页 page_limit = min(pdf.Pages.Count, 10) # 准备图片提取器 image_helper = PdfImageHelper() # 遍历页面 for page_index in range(page_limit): page = pdf.Pages.get_Item(page_index) images_info = image_helper.GetImagesInfo(page) # 保存当前页的所有图片 for i, img_info in enumerate(images_info): # Image.Save() 方法会根据扩展名自动保存为 PNG 格式 img_info.Image.Save(f"{output_dir}/page_{page_index}_img_{i}.png") print(f"已保存: page_{page_index}_img_{i}.png") pdf.Close() print(f"图片提取完成,共处理 {page_limit} 页,图片保存在 {output_dir} 目录下") # 使用示例 extract_images_from_pdf("sample.pdf")

5. 提取 PDF 中的表格

该库未提供直接导出表格为 CSV/Excel 的一键方法,但可以借助PdfTableExtractor获取表格结构,然后手动解析。

from spire.pdf import * def extract_tables_from_pdf(pdf_path): pdf = PdfDocument() pdf.LoadFromFile(pdf_path) # 免费版最多处理前10页 page_limit = min(pdf.Pages.Count, 10) extractor = PdfTableExtractor(pdf) for i in range(page_limit): page = pdf.Pages.get_Item(i) # 提取当前页的所有表格 tables = extractor.ExtractTable(i) if tables: print(f"第 {i+1} 页发现 {len(tables)} 个表格") for t_idx, table in enumerate(tables): print(f" 表格 {t_idx+1}:") rows = table.GetRowCount() cols = table.GetColumnCount() print(f" 行数: {rows}, 列数: {cols}") # 获取表头(第一行) if rows > 0: header = [] for c in range(cols): header.append(table.GetText(0, c)) print(f" 表头: {header}") # 获取前3行数据示例 for r in range(min(rows, 4)): row_data = [] for c in range(cols): row_data.append(table.GetText(r, c)) print(f" 第{r+1}行: {row_data}") else: print(f"第 {i+1} 页未发现表格") pdf.Close() extract_tables_from_pdf("sample.pdf")
http://www.gsyq.cn/news/1606451.html

相关文章:

  • GPT-4动态稀疏激活:2%参数如何驱动万亿级智能
  • 胖头鱼的技术专栏-436 AI时代需要怎样的数据库?今天这场直播也许给出了答案(20260629)
  • 批量更改BOM组件不参与成本计算-CEWB
  • 3分钟搞定M3U8视频下载:告别在线观看限制的高效工具
  • 34 年匠心造好机,大连欣科蜂窝板生产线实力稳居区域第一
  • 面向真实科研场景,构建由Codex、Claude Code、OpenClaw、Hermes四位“AI研究员“组成的可迭代、可迁移的科研协作团队
  • 如何轻松掌控电脑风扇:FanControl完整指南助你实现静音与性能的完美平衡
  • 办公提效工具 OpenClaw 安装全流程,部署报错统一处理方案(含安装包)
  • 做自媒体,我是怎么用花生AI绕过剪辑这道坎的
  • 2026ChatGPT、DEEPSEEK、豆包等AI搜索结果优化方法?
  • 使用低代码爬虫软件自动化采集电商商品数据
  • 网安新手攻克 Kali 难题大全!各类高频报错一次性给出解决方案,搞定环境问题稳步进阶,冲刺高薪安全赛道
  • DeepEval终极指南:5分钟掌握AI模型评估框架的完整配置
  • 从 AI Agent 到具身智能:当智能开始拥有“身体”
  • 5分钟免费实现VR视频转2D的终极指南:VR-Reversal完整教程
  • Minecraft光影终极指南:用Revelation打造电影级方块世界
  • 5步掌握Res-Downloader:跨平台资源下载工具全面指南
  • Audition软件安装步骤(附安装包)Audition AU2026 超详细下载安装教程
  • 3个MeEdu二次开发实战技巧:从API调用到Hook扩展的深度定制指南
  • (安装包)Windows OpenClaw 超详细安装!纯可视化操作,小白一遍装好
  • 配音工具怎选?2026自媒体避坑指南,新手选配音工具看这4点就够了
  • AI 标「已完成」,清单却是空的——让 .ai/ 规矩自检一次(附提示语)
  • 自由能商用燃气热水器:告别热水焦虑,用硬核实力定义高端商用热水
  • 计算机毕业设计之电脑商城销售管理系统的设计与实现
  • lattice propel的使用例子
  • 程序员量化交易实战 23:串起每日模拟盘流程
  • git进阶07_Git 高级技巧与故障排查
  • [大模型架构重构,或可完美适配昇腾]大模型不是生成器而是分类响应器——三段式归档-范式-输出引擎 + 分类调度缓存
  • 2026最新易学入门APP怎么选?
  • 金融法草案正式落地|数据分类分级升级为法定义务,金融机构合规闭环落地指南