PyMuPDF 库使用

PyMuPDF 库使用

简介

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

安装

pip install PyMuPDF==1.18.3

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

PDF拆分

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)

PDF 转 图片

import fitz

def pdftoimg(pdf_path, img_path, dpi= 300):
    with fitz.open(pdf_path) as pdf:
            page = pdf[i]
            # 使用matrix参数来控制输出图像的精度
            matrix = fitz.Matrix(dpi/72, dpi/72)  # 放大倍  不建议这么大
            # 还有 colorspace 指定rgb颜色 和 alpha false 不带透明度  true 带有透明度
            pix = page.getPixmap(matrix=matrix)
            # 生成PNG文件
            pix.writePNG(img_path.format(i))
            # 设置jpg/tif文件的分辨率,程序默认分辨率为96
            pix.setResolution(dpi+100, dpi+100)
            # 生成jpg/tif文件
            pix.writeImage(img_path.format(i).replace("png","jpg"))

if __name__ == '__main__':
    pdftoimg('text.pdf',"{}.png")

图片转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进阶,python,numpy,开发语言)