利用Python提取PDF文本并转换为JSON

 更新时间:2026年06月30日 08:26:34   作者:大丸子  
本文介绍了如何使用Python将PDF文件转换为JSON格式,涵盖文档属性提取与逐页文本内容提取,并实现自动化处理,关键类与方法包括PdfDocument、PdfTextExtractor等,适用于文档归档、数据治理等场景

在企业数据整合与文档处理流程中,PDF 文件中的内容往往需要被提取并转化为结构化格式,以便后续系统消费或进一步分析。PDF 作为一种展示型文档格式,其内容并不天然具备结构化特征,手动提取效率低且容易出错。

通过编程方式将 PDF 转换为 JSON 格式,可以实现批量、自动化处理,将 PDF 中的文档属性和各页面文本内容整理为标准的键值对结构,便于 API 传输、数据库存储或与其他系统对接。

本文将介绍如何使用 Python 从 PDF 文件中提取文档元信息和逐页文本内容,并将其组装为 JSON 格式输出。整个过程完全自动化,适用于文档归档、数据治理、内容管理等场景。

本文使用的方法需要用到 Free Spire.PDF for Python,可通过 pip 安装:

pip install spire.pdf.free

加载 PDF 文件并提取文档属性

首先,我们需要加载 PDF 文件,并从中读取文档的基本元信息,如作者、标题、创建日期等。

from spire.pdf.common import *
from spire.pdf import *
import json
input_pdf = "SampleReport.pdf"
# 创建 PDF 文档对象
pdf = PdfDocument()
# 加载 PDF 文件
pdf.LoadFromFile(input_pdf)
# 获取文档属性信息
doc_info = pdf.DocumentInformation
metadata = {
    "title": doc_info.Title,
    "author": doc_info.Author,
    "subject": doc_info.Subject,
    "keywords": doc_info.Keywords,
    "creation_date": doc_info.CreationDate.strftime("%Y-%m-%d %H:%M:%S"),
    "modification_date": doc_info.ModificationDate.strftime("%Y-%m-%d %H:%M:%S")
}

说明:

  • PdfDocument() 创建 PDF 文档对象,是所有操作的入口。
  • LoadFromFile() 加载指定路径的 PDF 文件。
  • DocumentInformation 属性返回文档的元数据对象,包含标题、作者、主题、关键词、创建日期和修改日期等信息。
  • 我们将这些元信息整理为一个 Python 字典,作为最终 JSON 结构的顶层字段。

逐页提取文本内容

接下来,遍历 PDF 的每一页,使用文本提取器获取页面中的文本内容。

pages_data = []
page_count = pdf.Pages.Count

for i in range(page_count):
    # 获取当前页面
    page = pdf.Pages[i]

    # 创建文本提取器
    text_extractor = PdfTextExtractor(page)
    # 创建提取选项
    text_options = PdfTextExtractOptions()

    # 提取页面文本
    page_text = text_extractor.ExtractText(text_options)

    # 将页面信息记录到列表
    pages_data.append({
        "page_number": i + 1,
        "content": page_text.strip()
    })

说明:

  • pdf.Pages.Count 获取 PDF 的总页数。
  • pdf.Pages[i] 获取指定索引的页面对象。
  • PdfTextExtractor(page) 基于页面创建文本提取器,负责从页面中解析和提取文本。
  • PdfTextExtractOptions() 创建提取选项对象,可配置提取区域等参数。此处使用默认选项,提取整个页面的文本。
  • ExtractText() 返回提取到的文本内容。
  • 每页的文本与页码一起组成一个字典,追加到列表中,形成按页组织的文本数据。

组装 JSON 结构并输出

将文档属性和页面文本数据合并为一个完整的字典,然后序列化为 JSON 格式并保存到文件。

# 组装完整的 JSON 数据结构
result = {
    "document_info": metadata,
    "total_pages": page_count,
    "pages": pages_data
}
# 设置 JSON 输出路径
output_json = "output/pdf_content.json"
# 写入 JSON 文件
with open(output_json, "w", encoding="utf-8") as f:
    json.dump(result, f, ensure_ascii=False, indent=2)
# 关闭文档
pdf.Close()

说明:

  • result 字典包含三个顶层字段:document_info(文档元信息)、total_pages(总页数)、pages(各页文本数据列表)。
  • json.dump() 将 Python 字典序列化为 JSON 格式,ensure_ascii=False 确保中文字符正常输出,indent=2 使输出具有良好的缩进格式。
  • 最后调用 pdf.Close() 释放文档资源。

关键类与方法说明表

下面整理本文中涉及的核心类、方法与属性。

类 / 方法说明
PdfDocumentPDF 文档对象,负责加载和管理 PDF 文件
LoadFromFile()从指定路径加载 PDF 文件
DocumentInformation获取 PDF 文档的元信息(作者、标题、日期等)
Pages页面集合,支持通过索引访问具体页面
Pages.Count获取 PDF 文档的总页数
PdfTextExtractor文本提取器,基于指定页面创建,用于提取页面文本
PdfTextExtractOptions文本提取选项,可配置提取区域等参数
ExtractText()执行文本提取,返回页面文本内容
Close()关闭文档,释放资源

知识扩展

下面是一个将 PDF 文本内容转换为结构化 JSON 的 Python 实现。它使用 pdfplumber 逐页提取文本,并生成包含页码和内容的 JSON 数组。

1. 安装依赖

pip install pdfplumber

2. 转换函数

import json
import pdfplumber
from pathlib import Path
def pdf_to_json(pdf_path, output_path=None, include_metadata=False):
    """
    将 PDF 文本内容转换为 JSON 格式。
    Args:
        pdf_path (str): PDF 文件路径。
        output_path (str, optional): 输出 JSON 文件路径。若不指定,则返回 JSON 字符串。
        include_metadata (bool): 是否包含文档元数据(如标题、作者等)。
    Returns:
        str or None: 如果 output_path 为 None,返回 JSON 字符串;否则保存文件并返回 None。
    """
    result = {
        "source": str(pdf_path),
        "pages": []
    }
    with pdfplumber.open(pdf_path) as pdf:
        if include_metadata:
            result["metadata"] = pdf.metadata
        for i, page in enumerate(pdf.pages, start=1):
            text = page.extract_text() or ""  # 若无法提取则设为空字符串
            result["pages"].append({
                "page_num": i,
                "text": text.strip()
            })
    json_output = json.dumps(result, ensure_ascii=False, indent=2)
    if output_path:
        with open(output_path, "w", encoding="utf-8") as f:
            f.write(json_output)
        print(f"JSON 已保存至 {output_path}")
    else:
        return json_output

3. 使用示例

# 返回 JSON 字符串
json_str = pdf_to_json("sample.pdf")
print(json_str[:200])  # 打印前200个字符
# 保存为文件
pdf_to_json("sample.pdf", output_path="output.json", include_metadata=True)

4. 输出 JSON 格式示例

{
  "source": "sample.pdf",
  "metadata": {
    "Title": "示例文档",
    "Author": "张三"
  },
  "pages": [
    {
      "page_num": 1,
      "text": "这是第一页的内容。\n包含多行文本。"
    },
    {
      "page_num": 2,
      "text": "第二页的内容……"
    }
  ]
}

5. 高级处理(可选)

如果需要按段落拆分、保留字体大小或坐标等更多信息,可修改提取逻辑。例如:

# 提取每个文本块(带位置和字体)
blocks = []
for word in page.extract_words():
    blocks.append({
        "text": word["text"],
        "x0": word["x0"],
        "y0": word["top"],
        "font": word.get("fontname")
    })

但上述字段需视 PDF 内容而定,并非所有 PDF 都能提供完整信息。

总结

通过本文示例,你已经了解如何使用 Python 将 PDF 文件转换为 JSON 格式。从加载 PDF、提取文档属性,到逐页提取文本内容,再到组装并输出 JSON,整个过程高度自动化,特别适用于批量文档处理和数据集成场景。

相比手动复制粘贴或依赖在线转换工具,代码方式具有更高的灵活性和可控性。你可以在此基础上扩展更多能力,例如按区域提取文本、提取表格数据并嵌套到 JSON 中、结合正则表达式进行内容清洗等。

如果你正在处理大量 PDF 文档并需要将其内容纳入结构化数据流程,这种基于 Python 的方案将为你的工作带来显著提升。

到此这篇关于利用Python提取PDF文本并转换为JSON的文章就介绍到这了,更多相关Python PDF文本转JSON内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Python基础数据类型tuple元组的概念与用法

    Python基础数据类型tuple元组的概念与用法

    元组(tuple)是 Python 中另一个重要的序列结构,和列表类似,元组也是由一系列按特定顺序排序的元素组成,这篇文章主要给大家介绍了关于Python基础数据类型tuple元组的概念与使用方法,需要的朋友可以参考下
    2021-07-07
  • Python使用NumPy对图像进行处理的操作流程

    Python使用NumPy对图像进行处理的操作流程

    在计算机视觉和图像处理领域,NumPy作为Python科学计算的核心库,凭借其高效的多维数组操作和向量化计算能力,成为图像处理的重要工具,本文将系统讲解NumPy在图像处理中的应用,结合实战案例展示其强大功能,需要的朋友可以参考下
    2025-10-10
  • Python中os模块的简单使用及重命名操作

    Python中os模块的简单使用及重命名操作

    这篇文章主要给大家介绍了关于Python中os模块的简单使用及重命名操作的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-04-04
  • Python大数据之使用lxml库解析html网页文件示例

    Python大数据之使用lxml库解析html网页文件示例

    这篇文章主要介绍了Python大数据之使用lxml库解析html网页文件,结合实例形式分析了Python大数据操作中使用lxml库解析html网页具体步骤及相关注意事项,需要的朋友可以参考下
    2019-11-11
  • python使用str & repr转换字符串

    python使用str & repr转换字符串

    str() 是将 数值 转成字符串 repr() 是将一个对象 转成字符串 显示 看明白了么:str()是将一个对象转化成str对象 repr()是将一个对象可视化,使用字符串输出,使编程人员看到其的内部结构
    2016-10-10
  • Python闭包原理与nonlocal关键字实战指南

    Python闭包原理与nonlocal关键字实战指南

    闭包是Python中一个强大而优雅的特性,掌握它能让你写出更灵活、更模块化的代码,本文将深入解析闭包的原理,并通过实战案例带你彻底理解nonlocal关键字,感兴趣的朋友跟随小编一起看看吧
    2026-03-03
  • Python与Matlab混合编程的实现案例

    Python与Matlab混合编程的实现案例

    本文主要介绍了Python与Matlab混合编程的实现案例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-01-01
  • python判断字符串是否是json格式方法分享

    python判断字符串是否是json格式方法分享

    这篇文章主要介绍了python判断字符串是否是json格式方法分享,具有一定参考价值,需要的朋友可以了解下。
    2017-11-11
  • Django中session登录验证操作指南

    Django中session登录验证操作指南

    本文介绍了如何使用Django中的session登录验证来保护网站的安全性。在此过程中,我们首先介绍了Django的认证架构和基本概念,然后我们深入探讨了如何使用session实现登录验证功能。最后,我们解释了如何创建一个Custom User Model,以及如何使用它来自定义用户对象。
    2023-04-04
  • python利用脚本轻松实现ssh免密登陆配置

    python利用脚本轻松实现ssh免密登陆配置

    这篇文章主要为大家详细介绍了python如何利用脚本轻松实现ssh免密登陆配置,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下
    2023-12-12

最新评论