前言

笔者今天在处理一批 PDF 文档时,使用了 pyMuPDF 库来提取文本和表格。今天在查阅相关文档时无意间发现了一个名为 pymupdf4llm 的库,它是基于 pyMuPDF 的一个扩展,专门针对将 PDF 内容转换为适合 LLM 输入的 Markdown 格式进行了优化。这个库不仅能提取文本,还能识别表格和图片,并将它们以 Markdown 语法的形式输出,非常适合我们在 RAG 流水线中使用。在这篇文章中,我们先重点关注下pyMuPDF的基本使用。

关于 PyMuPDF

PyMuPDF 是一个功能强大的 Python 库,用于处理 PDF、XPS、OpenXPS、CBZ 和 EPUB 等文档格式。它提供了丰富的 API 来提取文本、图像、表格等内容,并支持对文档进行修改和注释。PyMuPDF 的核心优势在于其高效的解析能力和对复杂文档结构的良好支持,使得它成为处理 PDF 文档的首选工具之一。

安装

在 Python 环境中安装 PyMuPDF 非常简单:

bash
pip install --upgrade pymupdf

PyMuPDF 基础功能

1. 打开文档

python
import fitz  # PyMuPDF 的别名
doc = fitz.open("example.pdf")  # 打开 PDF 文档(路径填写相对路径或者绝对路径)
print(f"文档页数: {doc.page_count}")

这里,doc 是一个 Document 对象,表示打开的 PDF 文档。你可以通过 doc.page_count 获取文档的总页数。如果你查看 doc 对象的类型,你会发现它是一个 Document 类的实例。

python
print(type(doc))  # <class 'fitz.Document'>

2. 提取文本

获取 PDF 文档中第一页的文本内容:

python
# get text from the first page
doc = fitz.open("example.pdf")
page = doc[0]  # 获取第一页
text = page.get_text()  # 获取页面文本
print(text)  # 打印页面文本

如果你想提取所有页面的文本,可以使用循环:

python
for page_num in range(doc.page_count):
    page = doc[page_num]
    text = page.get_text()
    print(f"第 {page_num + 1} 页的文本内容:\n{text}\n")

如果你想将提取的文本保存到一个文本文件中,可以这样做:

python
with open("extracted_text.txt", "w", encoding="utf-8") as f: ## "w"表示写入模式,encoding="utf-8"确保文本以UTF-8编码保存
    for page_num in range(doc.page_count):
        page = doc[page_num]
        text = page.get_text()
        f.write(f"第 {page_num + 1} 页的文本内容:\n{text}\n\n")

以上代码会将每页的文本内容写入到 extracted_text.txt 文件中,每页之间用空行分隔。

3. 对 PDF 进行处理

3.1 旋转 PDF

python
# 旋转
doc = fitz.open("example.pdf")
page = doc[0]  
page.set_rotation(90)  # 旋转90度
doc.save("example_rotated.pdf")  # 保存旋转后的页面
doc.close()  # 

3.2 裁剪 PDF

python
# 裁剪
doc = fitz.open("example.pdf")
page = doc[0]  
page.set_cropbox(fitz.Rect(100, 100, 400, 400))  # 裁剪页面
doc.save("example_cropped.pdf")  # 保存裁剪后的页面
doc.close()  

3.3 删除 PDF 页面

python
# 删除页面
doc = fitz.open("example.pdf")
doc.delete_page(0)  # 删除第一页
doc.save("example_deleted.pdf")  # 保存删除后的文档
doc.close()

类似的,我们还可以使用别的方法来处理 PDF 文档,比如添加水印、合并多个 PDF 文件、提取图像等。PyMuPDF 提供了丰富的 API 来满足各种需求。具体的使用方法可以参考官方文档和社区资源。

参考