Python实现PDF转 Markdown的完整指南

 更新时间:2026年07月07日 08:23:02   作者:SunnyDays1011  
PDF 虽能完美保留版式,但在编辑、复用及程序化处理时却缺乏灵活性,在本文中,我们将介绍几种使用 Python 将 PDF 转换为 Markdown 的实用场景,文中的示例代码讲解详细,感兴趣的小伙伴可以了解下

PDF 虽能完美保留版式,但在编辑、复用及程序化处理时却缺乏灵活性。即便是复制表格、提取章节或导入文档系统等基础操作,也往往需要繁琐的手动重排。

将 PDF 转换为 Markdown 可有效解决这一痛点。作为纯文本格式,Markdown 不仅易于编辑和 Git 版本管理,还能无缝对接 GitHub、MkDocs 等平台,更是 AI 处理与自动化工作流的理想选择。

在本文中,我们将介绍几种使用 Python 将 PDF 转换为 Markdown 的实用场景,主要包括以下内容:

  • 将整个 PDF 转换为 Markdown 
  • 仅转换指定页面 
  • 提取 PDF 表格并转换为 Markdown 表格 
  • 使用 OCR 将扫描版 PDF 转换为 Markdown 

安装所需 Python 库

要在 Python 中实现 PDF 到 Markdown 的转换,可以使用 Spire.PDF for Python。该库支持加载 PDF 文件,并将其保存为多种格式,包括 Markdown。

在开始之前,请确保你已安装 Python 3.7 或以上版本。然后通过终端安装 Spire.PDF:

pip install Spire.PDF

Python 将整个 PDF 转换为 Markdown

如果你希望将完整 PDF 一次性转换为 Markdown,而不进行逐页处理,这是最简单的方法。

使用 Spire.PDF for Python,可以通过一个方法直接完成转换:

from spire.pdf import *

input_file = "sample.pdf"
output_file = "output.md"

# 加载 PDF 文件
doc = PdfDocument()
doc.LoadFromFile(input_file)

# 保存为 Markdown 格式
doc.SaveToFile(output_file, FileFormat.Markdown)

doc.Close()

该库会自动解析 PDF 内容并转换为 Markdown 格式。具体处理方式如下:

  • 文本会被保留为段落,并自动添加换行结构
  • 图片会被转换为 Base64 编码的 PNG,并嵌入 Markdown 文件中
  • 表格会转换为 Markdown 的管道符(|)表格结构
  • 粗体、斜体等格式会尽可能保留为标准 Markdown 语法

最终生成的 Markdown 在结构上尽量贴近原始 PDF,同时保持可编辑性与兼容性。

Python 转换 PDF 指定页面为 Markdown

很多 PDF(例如报告、手册或技术文档)通常内容较长,但我们往往只需要其中某一部分章节或页面。

在这种情况下,可以先提取指定页面,再进行 Markdown 转换。

from spire.pdf import *

input_file = "report.pdf"
output_file = "chapter2.md"

# 加载原始 PDF
src_pdf = PdfDocument()
src_pdf.LoadFromFile(input_file)

# 创建新的 PDF 文档用于存放选定页面
partial_pdf = PdfDocument()

# 提取第 3–6 页(从 0 开始计数)
partial_pdf.InsertPageRange(src_pdf, 2, 5)

# 保存为 Markdown
partial_pdf.SaveToFile(output_file, FileFormat.Markdown)

src_pdf.Close()
partial_pdf.Close()

InsertPageRange() 方法会将选定页面复制到新文档中,再进行转换。

需要注意的是,页面索引从 0 开始,因此 2–5 实际对应第 3–6 页。

Python 提取 PDF 表格并转换为 Markdown 表格

表格是 PDF 中最常见的结构化数据类型之一,尤其常见于发票、财务报表和产品目录中。然而,手动复制表格到 Markdown 往往既耗时又容易出错。

更高效的方式是直接提取表格数据并转换为 Markdown 格式。

from spire.pdf import *

input_file = "invoice.pdf"
output_file = "extracted_tables.md"

# 加载 PDF 文件
pdf = PdfDocument()
pdf.LoadFromFile(input_file)

# 初始化表格提取器
extractor = PdfTableExtractor(pdf)

markdown_tables = []

# 遍历每一页
for page_idx in range(pdf.Pages.Count):
    table_list = extractor.ExtractTable(page_idx)

    if table_list:
        for table in table_list:
            row_count = table.RowCount
            col_count = table.ColumnCount

            for row in range(row_count):
                row_text = []

                for col in range(col_count):
                    cell_value = table.GetText(row, col).replace("\n", " ")
                    row_text.append(cell_value)

                # 转换为 Markdown 表格行
                markdown_tables.append("| " + " | ".join(row_text) + " |")

                # 添加表头分隔线
                if row == 0:
                    markdown_tables.append(
                        "| " + " | ".join(["---"] * col_count) + " |"
                    )

            # 表格之间添加空行
            markdown_tables.append("\n")

# 写入文件
with open(output_file, "w", encoding="utf-8") as f:
    f.write("\n".join(markdown_tables))

pdf.Close()

当 PDF 中包含结构化表格时,会被转换为 Markdown 表格语法:

| Product | Price | Quantity |
|--------|------|----------|
| A      | 10   | 2        |
| B      | 15   | 5        |

最终效果取决于原始 PDF 的结构:

  • 结构清晰的表格转换效果较好
  • 复杂布局(如合并单元格或不规则表格)可能需要后期微调

Python 使用 OCR 将扫描版 PDF 转换为 Markdown

有些 PDF 并不是文本型文件,而是扫描件或纯图片形式,内容以像素存在,无法直接提取文本。

在这种情况下,需要使用 OCR(光学字符识别)来提取内容。

基本流程如下:

  1. 将 PDF 每一页转换为图片
  2. 使用 OCR 识别图片中的文字
  3. 将结果写入 Markdown 文件

OCR 环境安装

在运行 OCR 之前,需要安装相关依赖:

pip install Spire.OCR

此外,还需要下载 OCR 模型文件:

  • 根据操作系统(Windows / Linux / macOS)下载对应模型
  • 解压到本地目录
  • 在代码中指定模型路径

该模型用于文本识别与语言处理。

Python 示例代码

from spire.pdf import *
from spire.ocr import *

def convert_pdf_page_to_image(pdf, page_index):
    """将 PDF 指定页面转换为图片"""
    return pdf.SaveAsImage(page_index)

def recognize_text_from_image(image_path, language, model_path):
    """使用 OCR 识别图片文字"""
    scanner = OcrScanner()

    configure_options = ConfigureOptions()
    configure_options.Language = language
    configure_options.ModelPath = model_path

    scanner.ConfigureDependencies(configure_options)
    scanner.Scan(image_path)

    visualTextAligner = VisualTextAligner(scanner.Text)
    return visualTextAligner.ToString()

input_file = "ScannedDocument.pdf"
output_file = "ScannedPDF.md"

model_path = r"D:\Download\win-x64"

pdf = PdfDocument()
pdf.LoadFromFile(input_file)

with open(output_file, "w", encoding="utf-8") as writer:
    writer.write("# 扫描 PDF 的 OCR 结果\n\n")

    for page_index in range(pdf.Pages.Count):
        image = convert_pdf_page_to_image(pdf, page_index)

        image_path = f"page_{page_index + 1}.png"
        image.Save(image_path)

        recognized_text = recognize_text_from_image(
            image_path,
            "Chinese",
            model_path
        )

        writer.write(f"## 第 {page_index + 1} 页\n\n")
        writer.write(recognized_text)
        writer.write("\n\n")

pdf.Close()

print(f'扫描版 PDF 已成功转换为 "{output_file}"')

OCR 多语言支持

如果 PDF 语言不是中文,可以修改识别语言,例如中文:

recognized_text = recognize_text_from_image(
    image_path,
    "English",
    model_path
)

注意事项

OCR 的识别准确率与扫描质量密切相关:

  • 高分辨率、清晰扫描效果最佳
  • 模糊或倾斜文档会降低准确率
  • 手写文本或复杂背景可能无法正确识别

总结

将 PDF 转换为 Markdown 是一种将静态文档转化为结构化、可编辑、可复用内容的高效方式。

根据不同类型的 PDF,可以选择不同方法:

  • 完整转换:适用于简单文档
  • 页面提取:适用于大文件或局部内容
  • 表格提取:适用于结构化数据
  • OCR 识别:适用于扫描件或图片型 PDF

合理选择转换方式,可以显著提升文档处理效率,并减少大量手动排版工作。

常见问题(FAQs)

所有 PDF 都可以转换为 Markdown 吗?

并非所有 PDF 都能以相同方式转换。文本型 PDF 通常可以直接处理,而扫描版 PDF 需要 OCR。最终效果也取决于文档结构复杂程度。

如何选择合适的 PDF 转 Markdown 方法?

取决于使用场景:

  • 简单文档 → 完整转换
  • 大型文件 → 页面提取
  • 结构化数据 → 表格提取
  • 扫描或图片 PDF → OCR

PDF 转 Markdown 能保留格式吗?

基础格式(如段落、列表、简单表格)通常可以保留。但复杂布局(如多栏排版、合并单元格等)可能需要后期手动调整。

到此这篇关于Python实现PDF转 Markdown的完整指南的文章就介绍到这了,更多相关Python PDF转Markdown内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • python 实现一个反向单位矩阵示例

    python 实现一个反向单位矩阵示例

    今天小编就为大家分享一篇python 实现一个反向单位矩阵示例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-11-11
  • Python 中判断列表是否为空的方法

    Python 中判断列表是否为空的方法

    这篇文章主要介绍了Python 中判断列表是否为空的方法,本文通过代码详解的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下
    2019-11-11
  • Python实现的破解字符串找茬游戏算法示例

    Python实现的破解字符串找茬游戏算法示例

    这篇文章主要介绍了Python实现的破解字符串找茬游戏算法,简单分析了找茬游戏的原理,并结合具体实例形式分析了Python实现破解找茬游戏的相关实现技巧,需要的朋友可以参考下
    2017-09-09
  • Python中MySQLdb和torndb模块对MySQL的断连问题处理

    Python中MySQLdb和torndb模块对MySQL的断连问题处理

    这篇文章主要介绍了Python中MySQLdb和torndb模块对MySQL的断连问题处理,torndb使用起来相对更加简洁一些,需要的朋友可以参考下
    2015-11-11
  • 使用python在本地电脑上快速处理数据

    使用python在本地电脑上快速处理数据

    这篇文章主要介绍了使用python在本地电脑上快速处理数据的相关资料,需要的朋友可以参考下
    2017-06-06
  • Python Enum枚举类的定义及使用场景最佳实践

    Python Enum枚举类的定义及使用场景最佳实践

    枚举(Enum)是一种有助于提高代码可读性和可维护性的数据类型,允许我们为一组相关的常量赋予有意义的名字,在Python中,枚举类(Enum)提供了一种简洁而强大的方式来定义和使用枚举
    2023-11-11
  • Python实现时间序列变化点检测功能

    Python实现时间序列变化点检测功能

    平稳性是时间序列分析与预测的核心概念,在平稳条件下,时间序列的统计特性(如均值)在时间维度上保持不变,仅存在随机波动,但是时间序列通常会经历结构性断裂或变化,本文给大家介绍了Python实现时间序列变化点检测功能,需要的朋友可以参考下
    2024-09-09
  • Python打包exe时各种异常处理方案总结

    Python打包exe时各种异常处理方案总结

    今天教大家用Python打包exe时各种异常处理的方案总结,下文中有非常详细的介绍,对正在学习python的小伙伴们很有帮助哟,需要的朋友可以参考下
    2021-05-05
  • virtualenv介绍及简明教程

    virtualenv介绍及简明教程

    这篇文章主要介绍了virtualenv介绍及简明教程,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-06-06
  • Python如何根据字幕文件自动给视频添加字幕效果

    Python如何根据字幕文件自动给视频添加字幕效果

    视频中字幕的重要性不用多说了,下面这篇文章主要给大家介绍了关于Python如何根据字幕文件自动给视频添加字幕效果的相关资料,文中通过实例代码介绍的非常详细,需要的朋友可以参考下
    2022-02-02

最新评论