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:桌面新建文件夹")