一文掌握PyMuPDF
1、引言
小屌丝:我的纸飞机呀,飞呀飞~
小鱼:你要往哪儿飞
小屌丝:飞到你的童年
小鱼:… 能不能不这么扯
小屌丝:(⊙o⊙)…
小鱼:时光如梭,梭梭催人老。
小屌丝:好吧…
小鱼:你就不会说,飞到芦荡边?
小屌丝:…
小鱼:算法,不跟你说了, 我继续写文章了。
小屌丝:额, 写啥文章啊
小鱼:回到童年的文章
小屌丝:…写啥嘛
小鱼:纸飞机
小屌丝:…谢少吗
2、PyMuPDF
2.1 介绍
在日常工作和学习中,我们经常会遇到需要处理PDF文件的需求,例如提取文本、查找关键词、合并拆分文件等。
PyMuPDF是由德国的Till Pieper开发的,用于处理PDF文件的Python库。它基于muPDF,一个轻量级、高效的PDF处理库。PyMuPDF可以运行在Windows、macOS和Linux操作系统上,并且支持Python 2.7和3.x。
本文,小鱼将介绍PyMuPDF的基本信息、主要功能、安装方法以及代码示例。
一次掌握PyMuPDF的主要功能。
2.2 功能
PyMuPDF是基于C++的MuPDF库的Python封装,它提供了许多有用的功能,包括:
-
文本提取:可以从PDF文件中提取文本内容,方便进行关键词搜索、文本分析等操作。
-
图像提取:可以提取PDF文件中的图像,方便进行图像处理、识别等操作。
-
页面操作:可以对PDF文件中的页面进行旋转、裁剪、缩放等操作,实现自定义的页面处理。
-
注释和标记:可以添加、修改和删除PDF文件中的注释和标记,方便进行文档批注和标记重点内容。
-
导出和转换:可以将PDF文件导出为图片或其他格式,也可以将其他格式的文件转换为PDF格式。
-
修改PDF内容:可以在现有PDF的基础上添加、删除或更改内容。
-
合并或拆分PDF文件:可以将多个PDF文件合并成一个,也可以将单个大文件拆分成多个小文件。
-
生成SVG图像:可以将PDF转换为可缩放的矢量图形(SVG)。
加密和解密PDF文件:可以给PDF文件设置密码,防止未经授权的访问
了解了PyMuPDF的功能,接下来,就到了我们实际操练的步骤了。
2.3 安装
因为 PyMuPDF是三方库,所以,需要先安装,在使用。
老规矩, pip安装
pip install pymupdf
其它安装方式,直接看这两篇:
《Python3,选择Python自动安装第三方库,从此跟pip说拜拜!!》
《Python3:我低调的只用一行代码,就导入Python所有库!》
2.4 示例
2.4.1 读取并打印PDF中的文本
# -*- coding:utf-8 -*-
# @Time : 2023-12-02
# @Author : Carl_DJ
'''
实现功能:
使用 PyMuPDF 读取并打印PDF中的文本
'''
import fitz
# 打开名为'example.pdf'的PDF文件
doc = fitz.open('example.pdf')
# 对于PDF中的每一页
for page in doc:
# 获取该页的文本内容
text = page.getText()
print(text)
2.4.2 从PDF中提取特定区域的图像
# -*- coding:utf-8 -*-
# @Time : 2023-12-02
# @Author : Carl_DJ
'''
实现功能:
使用 PyMuPDF 从PDF中提取特定区域的图像
'''
import fitz
from PIL import Image
# 创建一个像素映射对象,并获取其像素数据
img = fitz.Pixmap(doc, page_number).getPixmap()
# 将像素数据转换为PIL图像对象
image = Image.frombytes("RGB", img.size, img.samples)
2.4.3 拆分PDF文件
# -*- coding:utf-8 -*-
# @Time : 2023-12-02
# @Author : Carl_DJ
'''
实现功能:
使用 PyMuPDF 拆分PDF文件
'''
import os
import fitz
# 设置输出目录
output_folder = 'split_pages'
# 如果输出目录不存在,自动创建
if not os.path.exists(output_folder):
os.makedirs(output_folder)
# 打开名为'example.pdf'的PDF文件
doc = fitz.open('example.pdf')
# 对于PDF中的每一页
for page in doc:
# 设置输出文件路径
output_path = f"{output_folder}/{doc.page_index(page)+1}.pdf"
# 将当前页保存为一个新的PDF文件
page.saveAsPDF(output_path)
2.4.4 提取PDF文件内容
# -*- coding:utf-8 -*-
# @Time : 2023-12-02
# @Author : Carl_DJ
'''
实现功能:
使用 PyMuPDF 提取PDF文件内容
'''
import fitz # PyMuPDF的别名导入方式
# 打开PDF文件并提取文本内容
with open("example.pdf", "rb") as file:
doc = fitz.open(file)
text = "" # 初始化文本变量
for page in doc:
# 提取文本内容并追加到文本变量中
text += page.extract_text()
# 输出提取的文本内容
print(text)
2.4.5 添加注释
# -*- coding:utf-8 -*-
# @Time : 2023-12-02
# @Author : Carl_DJ
'''
实现功能:
使用 PyMuPDF 给PDF文件内容添加注释
'''
import fitz
doc = fitz.open('example.pdf')
page = doc.loadPage(0)
# 添加矩形框
rect = fitz.Rect(50, 50, 100, 100)
annot = page.addRectAnnot(rect)
3、总结
看到这里, 关于PyMuPDF的分享差不多就该结束了。
在平时的工作中,对PDF文档的操作很常见,
如果要编译PDF文档,更多的是借助于某些收费软件来进行编译。
但是,针对小鱼来说,咱们的钱,是该省省该花花,
有钱花在刀刃上。
所以,学会PyMuPDF,那剩下的,可不是一分两分钱哦。
我是小鱼:
- CSDN 博客专家;
- 阿里云 专家博主;
- 51CTO博客专家;
- 51认证讲师等;
- 认证金牌面试官;
- 职场面试及培训规划师;
- 多个国内主流技术社区的认证专家博主;
- 多款主流产品(阿里云等)测评一、二等奖获得者;
关注小鱼,带你学习更多更专业更前言的Python数据分析相关技术。