【python初级】 pdf转化图片

1、背景

最近同事下发pdf图纸发现需要裁剪,通过ChatGPT完成了pdf裁剪代码。

ChatGPT确实强大,通过不断的和它聊天,不断的试错,最终同事完成了程序的开发。

这是一种神奇而惊艳的体验,但是这种生成式的算法,在体验之后,明显能感觉在短期内并不会像自媒体宣传的那样取代程序员。

通过ChatGPT裁剪的pdf 放到pdf编辑器中发现pdf未被裁剪,我给同事出了主意,先转化为图片,裁剪完图片,再把图片转化为pdf。

2、关于PyMuPDF及fitz

pdf转化图片使用的是fitz模块,而fitz是pymupdf的子模块。
代码中import fitz导入模块就需要提前安装三方包pymupdf,比如通过清华镜像源安装:

pip install -i https://pypi.tuna.tsinghua.edu.cn/simple/  PyMuPDF==1.18.14

PyMuPDF是MuPDF的Python绑定。
MuPDF是一个轻量级的 PDF、XPS和电子书查看器。MuPDF由软件库、命令行工具和各种平台的查看器组成。

关于命名fitz的说明:
Fitz最初是作为一个研发项目,以取代老化的Ghost图形库,但却成为了MuPDF的渲染引擎。

更多pdf操作的功能请查看PyMuPDF三方包的接口。

3、pdf转化图片代码

使用python3将pdf转png的示例代码。

# -*- coding: utf-8 -*-
# pip install -i https://pypi.tuna.tsinghua.edu.cn/simple/  PyMuPDF==1.18.14
# jn10010537

import fitz

import glob
import datetime
import os

def pyMuPDF_fitz(pdfPath, imagePath, count):
    pdfDoc = fitz.open(pdfPath)    # 打开文档
    pageCount = pdfDoc.page_count  # 获得PDF页码数量
    for i in range(pageCount):   # 逐页读取PDF
        page = pdfDoc[i]

        # 设置缩放zoom和旋转系数rotate
        # zoom_x, zoom_y取相同值,表示等比例缩放

        rotate = int(0)
        zoom_x = 4
        zoom_y = 4

        # 使用matrix参数来控制输出图像的精度
        matrix = fitz.Matrix(zoom_x, zoom_y).preRotate(rotate)
        print("matrix:",matrix)

        rect = page.rect                               # 示例:Rect(0.0, 0.0, 882.17138671875, 635.3142700195312)
        clip = fitz.Rect(rect.tl + 15, rect.br - 13)   # 裁剪尺寸,Rect(15.0, 15.0, 869.17138671875, 622.3142700195312)

        # 将其转化为光栅文件(位数)
        pix = page.getPixmap(matrix=matrix, alpha=False, clip=clip)

        if not os.path.exists(imagePath):  # 判断存放图片的文件夹是否存在
            os.makedirs(imagePath)         # 若图片文件夹不存在就创建

        # 设置jpg/tif文件的分辨率,程序默认分辨率为96
        image_dpi = 300
        pix.setResolution(image_dpi, image_dpi)

        # 生成PNG文件
        pix.writePNG(imagePath + '/' + 'pdf2images_%s_%s.png' % (count, i))

if __name__ == "__main__":
    # 1、PDF地址
    pdfPath = r"backup"
    # 2、需要储存图片的目录
    imagePath = r"new"
    # 3.文件后缀数字
    count = 1
    # 4.获取文件
    files = glob.glob(pdfPath + r'\*.pdf')
    # 5.循环调用函数进行转化
    for file in files:
        pyMuPDF_fitz(file, imagePath, count)
        count = count + 1

猜你喜欢

转载自blog.csdn.net/jn10010537/article/details/130757138