Live2D

Python - PyMuPDF模块的简单使用

1.简介

能够用来对PDF文档进行操作的Python包有好几个,如用于提取内容的PdfPlumber、PDFMiner,可以用来对PDF文件进行修改操作的PyPDF2等等,如果只是需要简单地对PDF文件实现合并、拆分、书签操作,使用PyPDF2就足以满足。但如果想对PDF文件进行一些底层操作,基本上只有PyMuPDF了。PyMuPDF是一个用来操作PDF文档的Python包,功能比较强大,不依赖其他的Python包,除了提供方便易用的功能外,还提供了一些底层的操作方法,对于熟悉PDF文档结构的人员来说,可以使用这些底层操作函数实现几乎所有对PDF文档的操作。

2.安装

使用命令:pip install pymupdf。

不同版本之间有些函数的使用发生了一些改变,使用时需要注意。

3.应用1:PDF合并

#! /usr/bin/env python3
# -*- coding:utf-8 -*-

# Author   : MaYi
# Blog     : http://www.cnblogs.com/mayi0312/
# Date     : 2022-08-16
# Name     : test02
# Software : PyCharm
# Note     : 使用PyMuPDF模块对PDF文档进行合并:将test001.pdf与test002.pdf文件合并为merge.pdf文件
# 导入模块
import fitz

# 打开PDF文档
doc1 = fitz.open("test001.pdf")
doc2 = fitz.open("test002.pdf")
# 将doc2文档插入到doc1后面
doc1.insertPDF(doc2)
# 将插入后的文档保存为“merge.pdf”
doc1.save("merge.pdf")

4.应用2:PDF拆分

#! /usr/bin/env python3
# -*- coding:utf-8 -*-

# Author   : MaYi
# Blog     : http://www.cnblogs.com/mayi0312/
# Date     : 2022-08-16
# Name     : test01
# Software : PyCharm
# Note     : 使用PyMuPDF模块对PDF文档进行拆分:按拆分后的每个PDF文件最多20页
# 导入模块
import fitz

# 打开PDF文档
doc1 = fitz.open("test.pdf")

# PDF文档的总页数
page_num = doc1.pageCount

# 计算拆分后的PDF文件数(20页生成一个新的PDF文件)
pdf_num = (page_num + 20 - 1) // 20
# 遍历生成每一个新的PDF文件
for i_pdf in range(pdf_num):
    # 拼接新的PDF文件名
    pdf_name = "test%s.pdf" % str(i_pdf + 1).zfill(3)
    # 创建一个新的空文档
    new_doc = fitz.Document()
    # 往空文档中插入拆分的PDF文件
    new_doc.insertPDF(doc1, i_pdf * 20, (i_pdf + 1) * 20 - 1)
    # 保存PDF文件
    new_doc.save(pdf_name)

5.应用3:PDF转图像

#! /usr/bin/env python3
# -*- coding:utf-8 -*-

# Author   : MaYi
# Blog     : http://www.cnblogs.com/mayi0312/
# Date     : 2022-08-16
# Name     : test03
# Software : PyCharm
# Note     : 使用PyMuPDF模块将PDF文档转为图像
# 导入模块
import fitz

# 打开PDF文档
doc1 = fitz.open("test.pdf")

# PDF文档的总页数
page_num = doc1.pageCount

# 遍历每一页
for i_page in range(page_num):
    # png图像名
    png_name = "test%s.png" % str(i_page + 1).zfill(3)
    # jpg/tif图像名
    # image_name = "test%s.jpg" % str(i_page + 1).zfill(3)
    image_name = "test%s.tif" % str(i_page + 1).zfill(3)
    # 获取一页PDF
    page = doc1.loadPage(i_page)
    # 使用matrix参数来控制输出图像的精度
    matrix = fitz.Matrix(10, 10)  # 放大10倍
    pix = page.getPixmap(matrix=matrix, colorspace="rgb", alpha=True)
    # 生成PNG文件
    pix.writePNG(image_name)
    # 设置jpg/tif文件的分辨率,程序默认分辨率为96
    image_dpi = 300
    pix.setResolution(image_dpi, image_dpi)
    # 生成jpg/tif文件
    pix.writeImage(image_name)

6.应用4:图像转PDF

#! /usr/bin/env python3
# -*- coding:utf-8 -*-

# Author   : MaYi
# Blog     : http://www.cnblogs.com/mayi0312/
# Date     : 2022-08-16
# Name     : test04
# Software : PyCharm
# Note     : 使用PyMuPDF模块将图像文件转为PDF文档:将1.jpg文件转为1.pdf文件
# 导入模块
import fitz

# 创建一个新的文档
doc = fitz.Document()
# 创建一个新的页面,指定页面的宽高
page = doc.newPage(width=607, height=780)
# 图像在页面中的位置,这里是充满整个页面
rect = fitz.Rect(0, 0, 607, 780)
page.insertImage(rect, filename="1.jpg")
# 保存PDF文件
doc.save("1.pdf")

 

posted @ 2022-08-16 15:25  骑着螞蟻流浪  阅读(3799)  评论(0编辑  收藏  举报