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

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.jsqmd.com/news/1092557/

相关文章:

  • Memlink在aarch64架构上的应用:打造高效能ARM云平台内存方案
  • MSPM0 G系列SYSCTL模块深度解析:时钟配置、低功耗模式与实战避坑指南
  • LinkSwift:免费开源网盘下载加速工具,一键获取九大平台直链
  • 从 Python 神经网络到完整 FPGA RTL:MNIST 手写数字项目全自动化生成实战
  • Avalonia中的动画
  • 基于FPGA实现LVDS_7to1接口显示屏显示
  • Google限制Meta使用Gemini模型 凸显AI授权竞争白热化
  • openEuler双桌面环境实战:从ukui到dde的安装与多模式切换指南
  • 报社登报声明一般多少钱?办理登报声明的流程怎么走?
  • BiliTools:一款让你高效管理B站资源的跨平台工具箱
  • NoFences:你的Windows桌面需要一场空间革命吗?
  • 2026 年全球首个自动驾驶法规获批,终结标准割裂,中国深度参与重塑产业格局
  • 【计算机毕业设计案例】基于 Spring Boot+Vue 的电影售票系统设计与实现 前后端分离架构下影院在线购票管理平台(程序+文档+讲解+定制)
  • 抓“静电”痕:ESD失效分析技术实战
  • 到底 TMD 用哪个: npm, pnpm, Yarn, Bun, Deno? 傻瓜, 当然用 npm 啦
  • 为什么需要一个“闭环“
  • 2026年数据安全评估师认证:五位一体技术体系深度解析
  • 如何用BiliTools轻松管理你的B站数字资产?3大核心功能深度解析
  • 使用第三方 API 时保留 Codex 远程操作和官方插件:CC Switch 配置攻略
  • 从零搭建HTTPS双向认证:Nginx+Spring Boot实战与证书管理
  • C# 与 OpenTK:从入门到实战,构建你的第一个3D图形应用
  • 3大实用场景+40+模板:Dify工作流宝库让AI应用开发像搭积木一样简单
  • 当 Alpha 开始影响价格:SEER 如何用符号回归拆出非线性市场冲击
  • PyTorch 实战联邦学习FedAvg:从零构建到隐私保护模型聚合
  • 如何高效管理演示时间:智能PPT计时器的完整指南
  • Git 快速上手指南:半小时掌握日常开发必备命令
  • RSA非对称加密在登录模块的实战应用:从原理到前后端完整实现
  • H3C IPv6实战:从手工配置到无状态自动获取
  • 如何在Windows上为所有游戏添加Steam控制器全局支持?GlosSI完整指南
  • Caffeine是否为分布式缓存