脚本专家 发表于 2026-6-10 09:25:48

Python使用Spire.PDF库提取PDF文本、图片和表格的实践

在日常文档处理中,PDF 是一种常见格式,而通过 Python 批量提取 PDF 中的文本、图片和表格数据,可以大幅提升自动化效率。本文基于 Free Spire.PDF for Python 库(免费版限制每次最多处理 10 页),演示如何实现 PDF 的基本信息读取、文本提取、图片导出以及表格解析。

## 环境准备
首先通过 pip 安装依赖库:

pip install Spire.Pdf.Free

安装后在脚本中导入核心模块:

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

注意:免费版对处理的 PDF 页数有限制(每次最多 10 页),以下示例均在此限制下运行。

## 基本工作流程
使用该库读取 PDF 的一般步骤为:
1. 创建 PdfDocument 对象。
2. 调用 LoadFromFile() 方法加载 PDF 文件。
3. 通过 Pages 集合访问每一页。
4. 使用对应的提取器(PdfTextExtractor、PdfImageHelper、PdfTableExtractor)提取内容。
5. 关闭文档释放资源。

## 读取 PDF 基本信息(页数、页面尺寸)
在提取具体内容前,先获取文档元数据,有助于了解文档结构。

from spire.pdf import PdfDocument

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 = page.Size.Width
    height = page.Size.Height
    print(f"第 {i+1} 页尺寸: {width} x {height}")

pdf.Close()

输出示例中,A4 尺寸的页面宽高约为 595 x 842 点。

## 提取 PDF 中的文本
利用 PdfTextExtractor 逐页提取文本,可控制是否保留空白布局。注意:如果 PDF 中文字是扫描图片(无文本层),则无法直接提取,需借助 OCR 技术。

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 中的图片
使用 PdfImageHelper 获取页面中的图片资源,并保存为 PNG 文件。

import os
from spire.pdf import *

def extract_images_from_pdf(pdf_path, output_dir="images"):
    if not os.path.exists(output_dir):
      os.makedirs(output_dir)
    pdf = PdfDocument()
    pdf.LoadFromFile(pdf_path)
    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):
            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")

注意:Save() 方法会根据文件名后缀自动确定格式,推荐使用 .png。

## 提取 PDF 中的表格
该库没有直接导出表格为 CSV/Excel 的方法,但可通过 PdfTableExtractor 获取表格结构,再手动解析数据。注意此方法只能识别有明确边框和结构的表格,对扫描表格或复杂排版失效。

from spire.pdf import *

def extract_tables_from_pdf(pdf_path):
    pdf = PdfDocument()
    pdf.LoadFromFile(pdf_path)
    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 =
                  print(f"表头: {header}")
                for r in range(min(rows, 4)):
                  row_data =
                  print(f"第{r+1}行: {row_data}")
      else:
            print(f"第 {i+1} 页未发现表格")
    pdf.Close()

extract_tables_from_pdf("sample.pdf")


## 注意事项
- 免费版每次只能处理 PDF 前 10 页,超出部分将被忽略。
- 文本提取依赖 PDF 内嵌的文本层,扫描件需配合 OCR 工具。
- 表格提取仅适用于有清晰边框的表格结构。
- 图片保存为 PNG 格式,无压缩损失。

掌握以上方法后,可轻松实现 PDF 文档的自动化数据提取,为文档分析、批量内容采集等场景提供基础支撑。实际使用时可根据需求选择合适的提取策略,并注意免费版的页数限制。

热心网友6 发表于 2026-6-10 09:35:00

Re: Python使用Spire.PDF库提取PDF文本、图片和表格的实践

谢谢分享!这个库的用法介绍得很清楚,特别是代码示例直接可以跑,对新手很友好。我也用过 Free Spire.PDF,确实方便,但免费版 10 页限制有时不够用,不知道有没有什么变通方法,比如分章节多次提取?另外提取图片那部分,保存为 PNG 挺实用,不过如果 PDF 里图片很多,生成的命名可能容易重名,能不能像表格那样按页和索引来区分?期待后续能补充一些处理扫描件或复杂排版表格的技巧,谢谢!

热心网友2 发表于 2026-6-22 20:10:01

Re: Python使用Spire.PDF库提取PDF文本、图片和表格的实践

楼主分享的教程很实用,尤其是分步骤说明了文本、图片和表格的提取方法,对于刚接触PDF解析的新手来说非常友好。我有个小疑问:免费版每次最多处理10页,如果要处理超过10页的PDF文件,通常怎么绕过这个限制?比如循环读取文件的不同部分,或者有其他库能配合分段处理吗?另外,Spire.PDF的表格提取对没有明显边框的PDF效果如何?自己有试过,有时结构会乱掉,不知有没有优化技巧。感谢楼主的实践分享!

热心网友6 发表于 2026-6-22 20:20:01

Re: Python使用Spire.PDF库提取PDF文本、图片和表格的实践

感谢分享!写得非常清晰,步骤也很完整。我之前用过PyMuPDF处理PDF,Spire.PDF倒是第一次看到,免费版10页的限制对大部分单次提取应该够用了,批量处理的话可能得注意循环调用或考虑付费版。表格提取那块比较麻烦,很多库都只能处理规则表格,楼主的提醒很到位。整体来说是个很实用的入门教程,收藏了!
页: [1]
查看完整版本: Python使用Spire.PDF库提取PDF文本、图片和表格的实践