Python实现读取PDF文件并提取文本、表格和图像

 更新时间:2026年06月10日 08:47:34   作者:Office办公小助手  
PDF是日常工作中最常用的文档格式之一,借助 Python,我们可以批量提取 PDF 中的文本、图片、表格等数据,下面我们就来看看如何使用 Free Spire.PDF for Python 这个免费库来完成常见的 PDF 读取任务吧

PDF是日常工作中最常用的文档格式之一。借助 Python,我们可以批量提取 PDF 中的文本、图片、表格等数据,从而实现自动化处理。本文将介绍如何使用 Free Spire.PDF for 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 的一般步骤为:

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

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")

注意:PdfTableExtractor 只能识别有明确边框和结构的表格,对于扫描表格或复杂排版可能失效。

结语

通过上述方法,可以较为全面地实现对 PDF 文件的读取操作,涵盖基本信息、文本、图片和表格数据获取等核心功能。这些能力为文档自动化处理、数据采集和内容分析等场景提供了基础支撑。根据实际需求选择适当的提取方式,能够高效地完成 PDF 文档的编程式读取任务。

以上就是Python实现读取PDF文件并提取文本、表格和图像的详细内容,更多关于Python读取PDF的资料请关注脚本之家其它相关文章!

相关文章

  • python3中正则表达式处理函数用法总结

    python3中正则表达式处理函数用法总结

    Python中的正则表达式是一个强大的文本处理工具,用于匹配、查找、替换等操作,在Python中正则表达式的操作主要通过内置的re模块来实现,这篇文章主要给大家介绍了关于python3中正则表达式处理函数用法的相关资料,需要的朋友可以参考下
    2025-11-11
  • Python实现读取txt文件并画三维图简单代码示例

    Python实现读取txt文件并画三维图简单代码示例

    这篇文章主要介绍了Python实现读取txt文件并画三维图简单代码示例,具有一定借鉴价值,需要的朋友可以参考下。
    2017-12-12
  • 在PyTorch中实现高效的多进程并行处理

    在PyTorch中实现高效的多进程并行处理

    PyTorch是一个流行的深度学习框架,一般情况下使用单个GPU进行计算时是十分方便的,但是当涉及到处理大规模数据和并行处理时,需要利用多个GPU,所以这篇文章我们将介绍如何利用torch.multiprocessing模块,在PyTorch中实现高效的多进程处理,需要的朋友可以参考下
    2024-07-07
  • Python实现GIF动图加载和降帧的方法详解

    Python实现GIF动图加载和降帧的方法详解

    这篇文章主要为大家详细介绍了如何利用Python和Pygame实现GIF动图加载和降帧的效果,文中的示例代码讲解详细,感兴趣的小伙伴可以了解一下
    2023-02-02
  • python中内置类型添加属性问题详解

    python中内置类型添加属性问题详解

    这篇文章主要介绍了python中内置类型添加属性问题详解,文章围绕主题展开详细的内容介绍,具有一定的参考价值,需要的小伙伴可以参考一下
    2022-09-09
  • python根据日期返回星期几的方法

    python根据日期返回星期几的方法

    这篇文章主要介绍了python根据日期返回星期几的方法,涉及Python针对日期模块的相关使用技巧,需要的朋友可以参考下
    2015-07-07
  • Python全栈之学习MySQL(1)

    Python全栈之学习MySQL(1)

    这篇文章主要为大家介绍了Python全栈之MySQL,具有一定的参考价值,感兴趣的小伙伴们可以参考一下,希望能够给你带来帮助
    2022-01-01
  • pytorch实现MNIST手写体识别

    pytorch实现MNIST手写体识别

    这篇文章主要为大家详细介绍了pytorch实现MNIST手写体识别,使用全连接神经网络,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2020-02-02
  • Python常用爬虫代码总结方便查询

    Python常用爬虫代码总结方便查询

    今天小编就为大家分享一篇关于Python常用爬虫代码总结方便查询,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
    2019-02-02
  • Python3 列表list合并的4种方法

    Python3 列表list合并的4种方法

    这篇文章主要介绍了Python3 列表list合并的4种方法,需要的朋友可以参考下
    2021-04-04

最新评论