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