python

关注公众号 jb51net

关闭
首页 > 脚本专栏 > python > Python PDF文本转JSON

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

作者:大丸子

本文介绍了如何使用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")
}

说明:

逐页提取文本内容

接下来,遍历 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()
    })

说明:

组装 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()

说明:

关键类与方法说明表

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

类 / 方法说明
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内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

您可能感兴趣的文章:
阅读全文