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")
原创文章,作者:ItWorker,如若转载,请注明出处:https://blog.ytso.com/tech/python/280921.html