• 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:桌面新建文件夹")
  • 相关阅读:
    vim操作指南
    Linux的常用命令
    Maven的标准settings.xml文件
    常用的Docker镜像及处理命令
    Java新特性 5、6、7、8、9、10、11、12、13
    数据库的元数据抽取SQL
    元类metaclass
    MySQL视图,函数,触发器,存储过程
    ajax与后台交互案例
    python数据类型小测试
  • 原文地址:https://www.cnblogs.com/lnd-blog/p/14832143.html
Copyright © 2020-2023  润新知