ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

Python - PyMuPDF模块的简单使用

2022-08-16 15:30:08  阅读:129  来源: 互联网

标签:Python doc1 PyMuPDF fitz 文档 模块 PDF pdf page


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")

 

标签:Python,doc1,PyMuPDF,fitz,文档,模块,PDF,pdf,page
来源: https://www.cnblogs.com/mayi0312/p/16591719.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有