使用PyMuPDF程序处理PDF

MuPDF 是一个 C/C++ 编写的跨平台 PDF 库,它提供强大的功能来处理 PDF 文件,包括提取文本、图像和元数据,以及支持PDF页面的添加、删除和旋转。PyMuPDF 是 MuPDF 的 Python 版本,允许 Python 程序使用 MuPDF 的强大功能。

首先,确保已经安装了PyMuPDF库。可以使用pip来安装:

pip install pymupdf

以下是使用 PyMuPDF 的简单示例:

打开和读取 PDF 文件

import fitz  # 引入 PyMuPDF 库

# 打开 PDF 文件
doc = fitz.open("test.pdf")

# 输出文件信息
print(f"文件名称: {doc.name}")
print(f"页面数: {len(doc)}")

# 读取第一页
page = doc[0]  # 获取第一页
text = page.get_text()
print(f"第一页文本:\n{text}")

提取PDF文本和图像

import fitz

doc = fitz.open("test.pdf")
page = doc[0]

# 提取文本
text = page.get_text()
print(text)

# 提取图片
for img in page.get_images():
    imgf= img[0]
    pix = fitz.Pixmap(doc, imgf)
    pix.save(f"image_{imgf}.png")

给文档添加注释

import fitz

doc = fitz.open("test.pdf")
page = doc[0]

# 添加注释
annot = page.add_rect_annot(fitz.Rect(100, 100, 200, 200))
annot.set_text("这是一个注释")

# 保存修改后的 PDF 文件
doc.save("out.pdf")

转换 PDF 为图像

import fitz

doc = fitz.open("test.pdf")
page = doc[0]

# 将页面转换为 PNG 图像
pix = page.get_pixmap()
pix.save("image.png")

进行 OCR识别

import fitz  # PyMuPDF 库
import pytesseract  # 这里需要安装Tesseract OCR 库

# 确保已安装 Tesseract OCR 引擎并设置好环境变量

# 打开 PDF 文件
doc = fitz.open("my.pdf")

# 处理每一页
for page_num in range(len(doc)):
    page = doc[page_num]

    # 获取图像
    pix = page.get_pixmap()

    # 保存图像
    image_path = f"page_{page_num + 1}.png"
    pix.save(image_path)

    # 使用 Tesseract 进行 OCR
    text = pytesseract.image_to_string(image_path, lang='eng')  # 设置语言

    # 打印 OCR 结果
    print(f"页面 {page_num + 1} 的文本:\n{text}")

    # 可选:保存 OCR 结果到文本文件
    with open(f"output_{page_num + 1}.txt", "w", encoding="utf-8") as f:
        f.write(text)

关于更多使用PyMuPDF方法可以参考官方手册 PyMuPDF 1.24.4 documentation

或者mupdf的官方文档 MuPDF documentation

文章地址:使用PyMuPDF程序处理PDF – AI小站

### 使用 PyMuPDF (Fitz) 提取 PDF 中的文本 PyMuPDF 是一个功能强大且灵活的库,能够高效地处理 PDF 文件中的各种内容,包括但不限于文本、图片和其他嵌入对象。以下是关于如何使用 PyMuPDF 提取 PDF 文件中文本的具体方法。 #### 安装 PyMuPDF 在开始之前,请确保已安装 `pymupdf` 库。可以通过 pip 工具轻松完成安装: ```bash pip install pymupdf ``` --- #### 示例代码:提取 PDF 中的所有文本 以下是一段完整的 Python 代码示例,展示如何利用 PyMuPDF 提取 PDF 文件中的全部文本内容: ```python import fitz # PyMuPDF 的别名 def extract_text_from_pdf(pdf_path): """ 提取指定 PDF 文件中的所有文本。 参数: pdf_path (str): 输入 PDF 文件的路径 返回: str: 整个 PDF 文件中的文本内容 """ doc = fitz.open(pdf_path) # 打开 PDF 文件 total_text = "" for page_num in range(len(doc)): # 遍历每一页 page = doc.load_page(page_num) # 加载当前页 text = page.get_text("text") # 提取页面上的文本 total_text += text + "\n" # 将文本追加到总字符串中 return total_text.strip() # 移除多余的空白字符 # 主程序入口 if __name__ == "__main__": input_pdf_path = "example.pdf" # 替换为实际的 PDF 文件路径 extracted_text = extract_text_from_pdf(input_pdf_path) print(extracted_text) # 输出提取的文本 ``` 上述代码实现了从给定 PDF 文件中逐页加载并提取文本的功能[^3]。 --- #### 自定义提取逻辑 除了提取整篇文档的文本外,还可以根据需求自定义提取行为。例如,只提取某几页的内容或者过滤掉不需要的部分。 ##### 只提取部分页面的文本 如果只需要提取特定范围内的页面(如第 2 至第 5 页),可以调整循环条件如下所示: ```python start_page = 1 # 开始页码(索引从 0 开始) end_page = 4 # 结束页码(包含) for page_num in range(start_page, end_page + 1): page = doc.load_page(page_num) text = page.get_text("text") total_text += text + "\n" ``` --- #### 提取带样式的文本(如加粗或斜体) 类似于 `pdfplumber` 的实现方式,PyMuPDF 同样支持按样式筛选文本。通过解析页面上的字形属性,可识别出特殊格式的文本,例如 **加粗** 或 *斜体* 字符。 以下是一个检测加粗字体的例子: ```python def is_bold(font_name): """ 判断字体名称是否表示加粗风格 """ return "bold" in font_name.lower() def extract_bold_text(pdf_path): """ 提取 PDF 文件中的加粗文本。 参数: pdf_path (str): 输入 PDF 文件的路径 返回: list: 包含所有加粗文本的列表 """ doc = fitz.open(pdf_path) bold_texts = [] for page_num in range(len(doc)): page = doc.load_page(page_num) blocks = page.get_text("dict")["blocks"] # 获取页面块信息 for block in blocks: if block["type"] != 0: # 类型为 0 表示文本块 continue lines = block["lines"] for line in lines: spans = line["spans"] for span in spans: if is_bold(span["font"]): # 检查字体是否为加粗 bold_texts.append(span["text"]) return bold_texts # 测试函数 input_pdf_path = "example.pdf" bold_texts = extract_bold_text(input_pdf_path) print(bold_texts) ``` 这段代码会遍历每个页面的文本块,并逐一检查其中是否存在加粗字体的字符[^2]。 --- #### 注意事项 - 并非所有的 PDF 文件都以纯文本形式存储内容。有些可能是由扫描仪生成的图像文件,这种情况下需要借助 OCR 技术才能提取有用的信息。 - 对于受密码保护的 PDF 文件,在尝试读取前需调用相应的解锁接口提供正确的密钥[^1]。 --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

walk walk

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值