PDF转图片

2021-08-04 14:16:10 浏览数 (3)

经过测试,fitz是目前PDF转图片相对较简单快捷且无bug的一个方法,不会出现转换图片时白屏的情况。弊端是转换较慢。

fitz——高质量转PDF

安装

  1. pip install traits
  2. pip install fitz
  3. pip install PyMuPDF

示例

代码语言:txt复制
import os
import fitz
import traceback
from concurrent.futures import ThreadPoolExecutor, wait
from loguru import logger

'''
# 将PDF转化为图片
pdfPath pdf文件的路径
imgPath 图像要保存的文件夹
zoom_x x方向的缩放系数
zoom_y y方向的缩放系数
rotation_angle 旋转角度

zoom_x和zoom_y一般取相同值,值越大,图像分辨率越高。
'''

# 读取存放PDF的文件夹
file_path = r"E:合同PDF\HTPDF1\"
# 保存文件夹
save_path = r"F:HTPNG1\"
file_list = os.listdir(file_path)
# 日志模块
logger.add('pdf2png.log', format="{time} {level} {message}", level="INFO")

# pdf_image(r"E:PyPro小功能PDF切割图片PDF700000062.pdf", r"E:PyPro小功能PDF切割图片PNG\", 2, 2, 0)
def pdf_image(pdfPath, imgPath=save_path, zoom_x=2, zoom_y=2, rotation_angle=0):
    CosNo = pdfPath.split('\')[-1].strip('.pdf')
    logger.info(f"开始切割 {CosNo}")
    save_path_dir=imgPath CosNo '\'
    os.mkdir(save_path_dir)
    try:
        # 打开PDF文件
        pdf = fitz.open(pdfPath)
        # 逐页读取PDF
        for pg in range(0, pdf.pageCount):
            page = pdf[pg]
            # 设置缩放和旋转系数
            trans = fitz.Matrix(zoom_x, zoom_y).preRotate(rotation_angle)
            pm = page.getPixmap(matrix=trans, alpha=False)
            # 开始写图像
            pm.writePNG(save_path_dir   CosNo '_' str(pg 1)   ".jpg")
        pdf.close()
    except:
        logger.error(f"{CosNo} 切割失败")
        print(traceback.print_exc())
        return False
    logger.info(f"{CosNo} 切割完毕")
    return True




if __name__ == '__main__':
    t=ThreadPoolExecutor(20)
    tt=[]
    for filename in file_list:
        if '.pdf' in filename:
            full_path=file_path filename
            task=t.submit(pdf_image,full_path)
            tt.append(task)
    wait(tt)

参数解释

zoom_x:x方向的缩放系数

zoom_y:y方向的缩放系数

rotation_angle:旋转角度

注意:

zoom_x 和 zoom_y 一般是相同的

系数越大,像素越高,越清晰,相对文件越大。

实测一般 2 满足清晰度以及大小的需求

0 人点赞