python

关注公众号 jb51net

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

Python实现PDF转 Markdown的完整指南

作者:SunnyDays1011

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

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

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

在本文中,我们将介绍几种使用 Python 将 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 格式。具体处理方式如下:

最终生成的 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 模型文件:

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

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,可以选择不同方法:

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

常见问题(FAQs)

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

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

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

取决于使用场景:

PDF 转 Markdown 能保留格式吗?

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

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

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