文章主要内容主要参考几篇文章并合并在一起的,文章链接依次如下,第二和第三的文章链接是从第一篇文章找到的:
(1)、https://blog.csdn.net/qq_25115281/article/details/90766814
(2)、https://blog.csdn.net/qq_43145035/article/details/83270501
(3)、https://blog.csdn.net/levy_96/article/details/83379373#commentsedit
这里只给出相关简单的代码,实际项目应用还需大家自己结合
1、首先,第一步,安装pymupdf模块,使用下面的命令安装:
pip install pymupdf
2、第二步,安装成功后,开始写我们的代码,这里改了一下第一篇参考文章的代码,主要实现将一个pdf转换为图片的代码,其中改了一点代码,增加了异常处理,返回值为布尔类型,True和False:
import fitz
import os
def convert_img(file_path):
try:
# 打开PDF文件,生成一个对象
doc = fitz.open(file_path)
img_path = r'F:\pro\study\imgs' # 这里的文件路径看你自己的项目路径,
# 我的项目是F:\pro\study 这个是我的项目路径,后边是要创建的文件夹路径
# 判断路径文件夹是否存在,如果不存在我们就创建一个 好吧
if not os.path.exists(img_path):
os.mkdir(img_path)
# 这里就是参考的上边连接的方法了,你们看人家的代码很容易明白
for pg in range(doc.pageCount):
page = doc[pg]
rotate = int(0)
# 每个尺寸的缩放系数为1.5,这将为我们生成分辨率提高三倍多的图像。如果转换出来图片是横排的话(即方向改变的话),请把下面的数值改小点
zoom_x = 1.5
zoom_y = 1.5
trans = fitz.Matrix(zoom_x, zoom_y).preRotate(rotate)
pm = page.getPixmap(matrix=trans, alpha=False)
# pm.writePNG('%s.png' % pg)
# 这里因为我要写入我上边创建的文件加下,所以我要进行路径的拼接,
# 注意不要直接在这里去改img_path,否则他会在原有path基础上向后追加新的字段,产生新的路径,一定要重新写的新的变量存储路径
temppic_path = os.path.join(img_path, ('img'+str(pg) + '.png'))
print(temppic_path)
pm.writePNG(temppic_path)
print('done@@@')
# 这里是因为我后边需要在最后一页加盖章,所以我要返回个关于页数的图片索引,去进行图片的寻找
# 这里减1是因为 pageCount 得到的是从1 开始的pdf页数,而我后边要索引的时候是从0 进行查查找的,所以先在这里 -1
# print(str(doc.pageCount - 1))
# return str(doc.pageCount - 1)
return True
except Exception as e:
return False
3、第三步,接下来安装PIL相关的库,使用命令,如果安装失败,可能缺少什么依赖,网上资料很多,请自行查阅:
pip install Pillow
4、第四步,通过PIL合并生成一张图片,主要参考用了第二篇文章的一部分代码,我直接搬过来了,改了下合成后图片的保存路径,保存为项目底下imgs目录下的img.png,跟pdf拆分出来的图片放在同一个目录,代码如下:
def _merge_img(img_list):
"""拼接图片"""
if img_list:
img_name = img_list[0]
color_mod = 'RGBA' if img_name.endswith('.png') else 'RGB' # jpeg格式不支持RGBA
first_img = PIL_Image.open(img_list[0])
height_size = first_img.size[1]
total_width = first_img.size[0]
total_height = height_size * len(img_list)
left = 0
right = height_size
target = PIL_Image.new(color_mod, (total_width, total_height)) # 最终拼接的图像的大小
for img in img_list:
target.paste(PIL_Image.open(img), (0, left, total_width, right))
left += height_size
right += height_size
target.save('F:\\pro\\study\\imgs\\img.png', quality=100)
return img_name
else:
return ''
5、第五步,测试代码,上面的代码都是写在同一个py文件底下,因此我们可以用下面的代码调试,即用的main方法:
if __name__ == '__main__':
# 拆分pdf,生成多张图片
convert_flag = convert_img('F:\pro\study\test.pdf')
# 拆分成功,将多张图片追加进列表,并合并为一张图片
if convert_flag:
img_list = []
img_list.append(r'F:\pro\study\imgs\img0.png')
img_list.append(r'F:\pro\study\imgs\img1.png')
img_list.append(r'F:\pro\study\imgs\img2.png')
_merge_img(img_list)
6、此时可以看下F:\pro\study\imgs目录底下是否将test.pdf文件拆分为img0.png、img1.png、img2.png三张图片,并合成一张新的图片img.png:
7、以上内容仅供学习参考,谢谢!