PDF处理

import fitz
import os
import datetime
from PyPDF2 import PdfFileReader, PdfFileWriter
# 导入相关的库
from PIL import Image
import shutil

class PDF():


    def pdf_segmentation(self,dirname,name,split_dirname):
        """
        操作PDF,分页
        :param dirname:PDF所在目录名称
        :param name:pdf名称
        :return:保存在pdf所在的目录下
        """
        # 存放拆分后的PDF的文件夹
        if os.path.exists(split_dirname):
            shutil.rmtree(split_dirname)
            os.makedirs(split_dirname)
        else:
            os.makedirs(split_dirname)
        filepath = os.path.join(dirname,name)
        pdf_reader = PdfFileReader(filepath)
        for page in range(pdf_reader.getNumPages()):  # 读取所有页数  从0开始
            pdf_writer = PdfFileWriter()
            pdf_writer.addPage(pdf_reader.getPage(page))
            pdf_file_path = os.path.join(split_dirname,'name{}.pdf'.format(page+1))
            with open(pdf_file_path, 'wb') as f:

                pdf_writer.write(f)


    def pdf_to_png(self,pdfPath, imagePath):
        """
        pdf转成png
        :param pdfPath: pdf的路径
        :param imagePath: 保存图片的路径
        :return: 返回切割后的png 列表
        """
        f = []
        #pdf转图片
        startTime_pdf2img = datetime.datetime.now()  # 开始时间
        print("imagePath=" + imagePath)
        pdfDoc = fitz.open(pdfPath)
        for pg in range(pdfDoc.pageCount):
            page = pdfDoc[pg]
            rotate = 0
            # 每个尺寸的缩放系数为1.3,这将为我们生成分辨率提高2.6的图像。
            # 此处若是不做设置,默认图片大小为:792X612, dpi=72
            zoom_x = 1.33333333  # (1.33333333-->1056x816)   (2-->1584x1224)
            zoom_y = 1.33333333
            mat = fitz.Matrix(zoom_x, zoom_y).preRotate(rotate)
            pix = page.getPixmap(matrix=mat, alpha=False)

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

            pix.writePNG(imagePath + '/' + 'images_%s.png' % pg)  # 将图片写入指定的文件夹内
            f.append(imagePath + '\\' + 'images_%s.png' % pg)
        endTime_pdf2img = datetime.datetime.now()  # 结束时间
        print('pdf2img时间=', (endTime_pdf2img - startTime_pdf2img).seconds)
        return f


    def jpg_segmentation(self,filepath,png_name1,png_name2):
        """
        每张图片切分成2个
        :param filepath: 要切分的图片
        :param png_name1: 切分后的图片1名称
        :param png_name2: 切分后的图片2名称
        :return:
        """
        img_list=[]
        # 打开一张图
        img = Image.open(filepath)
        # 图片尺寸
        img_size = img.size
        h = img_size[1]
        h2 = h/2# 图片高度
        w = img_size[0]  # 图片宽度
        print(h,w)
        #通过高度进行切分
        region1 = img.crop((0, 0, 770, h2))
        # 开始截取
        region2 = img.crop((0, h2,770, h))
        # 保存图片
        region1.save("{}.jpg".format(png_name1))
        region2.save("{}.jpg".format(png_name2))
        img_1 = "{}.jpg".format(png_name1)
        img_2 = "{}.jpg".format(png_name2)
        img_list.append(img_1)
        img_list.append(img_2)
        return img_list


if __name__ == '__main__':
    pdf_ob = PDF()
    pdf_folder_path = r"D:\桌面\PDF"
    pdf_file = r"SZSV1074_U2111_2021-04-01_2021-04-30_CMB_E48B6351D3159E159EAFFB17352ED93BPexM2.pdf"
    pdf_ob.pdf_segmentation(pdf_folder_path,pdf_file,r"D:\桌面\新建文件夹")

 

posted @ 2021-05-31 16:54  拷贝达人  阅读(102)  评论(0编辑  收藏  举报