Python 利用pymupdf将pdf转换为图片并拆分,后通过PIL合并生成一张图片
文章主要内容主要参考几篇文章并合并在一起的,文章链接依次如下,第二和第三的文章链接是从第一篇文章找到的:
(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 osdef 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.5zoom_y = 1.5trans = 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 Trueexcept 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格式不支持RGBAfirst_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 = 0right = height_sizetarget = 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_sizeright += height_sizetarget.save('F:\\pro\\study\\imgs\\img.png', quality=100)return img_nameelse: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、以上内容仅供学习参考,谢谢!
Python 利用pymupdf将pdf转换为图片并拆分,后通过PIL合并生成一张图片相关推荐
- python利用pyMuPdf进行pdf压缩
昨天临时写的压缩脚本,因为对pymupdf不是很了解,查了资料写了这个脚本. 思路很简单,pdf拆分成图片保存到本地,然后把图片压缩,最后重新生成pdf,删除保存的文件夹 (由于没有找到在内存中把pd ...
- 【Python】PyMuPDF模块将PDF转换为图片
上一篇文章介绍了pdf2image模块+poppler将PDF转换为图片,这篇文章主要介绍另外一个模块PyMuPDF. PyMuPDF(又名"fitz"):MuPDF的Pytho ...
- 【Python】pdf2image模块+poppler将PDF转换为图片
有时我们需要将PDF转换成图片,今天我们主要说的是pdf2image+poppler对PDF转换成图片格式. pdf2image是个包装器,真正的转换工具是poppler GitHub地址:https ...
- 如何将pdf转换为图片?
其实在PDF的使用过程中,将PDF转换为不同的文件格式是很常规的一个操作,比如有时为了方便使用,我们就会选择将PDF转换成图片格式,这样我们可以任选我们需要的内容进行使用了,比起不停的翻阅整个pdf文 ...
- 快速将PDF转换为图片:免费的在线PDF转换器
在现代数字时代,PDF是一种非常常见的文件格式.它们在学术界,商业领域和许多其他领域中被广泛使用.有时,您可能需要将PDF文件转换为图像格式,以便能够方便地与他人共享和使用.在这种情况下,您可以使用免 ...
- 实现DOC、DOCX转换为PDF 再将PDF转换为图片
实现DOC.DOCX转换为PDF 再将PDF转换为图片 首先导入需要的依赖 <dependency><groupId>cn.hutool</groupId>< ...
- python:实现将PDF转换为有声读物(附完整源码)
python:实现将PDF转换为有声读物 import PyPDF2 import pyttsx3 book = open(input("Enter the book name: " ...
- Ubuntu下Java使用pdfbox将pdf转换为图片的方法及问题
Ubuntu下Java使用pdfbox将pdf转换为图片的方法及问题 使用pdfbox-2.0.3和fontbox-2.0.3,实现pdf转图片功能. 官方手册链接: http://pdfbox.ap ...
- 文字PDF转换为图片格式的PDF
在我们的日常工作和生活中,有时候我们需要对PDF文件进行一些特殊处理.有时候,我们希望将PDF的每一页提取出来作为图片,方便在其他场景中使用:而有时候,我们则需要将PDF内的内容转换为图片格式,以防止 ...
最新文章
- python模块与包的导入
- python秒转化为时间格式_Python耗费时间秒转 天小时分钟秒 时间格式美化
- SpringBoot(笔记)
- android 防腾讯新闻标题栏,仿腾讯视频android客户端上方的标题栏
- gensim使用FastText训练词向量
- Python用20行代码实现一个验证码的输入与验证(完整源码)
- Android Support Annotations
- MODIS数据的简介和下载(三)——MODIS数据下载方式(基于MODIS Web Service)
- 复制数据库(本地到阿里云)
- [leetcode]693. 交替位二进制数
- 电脑如何进行长截图?
- 腾讯内部出品Android编程入门教程,快快收藏吧!!!
- Linux串口ttyUSB设置
- 启动计算机 登管理员用户,Windows xp系统使用管理员账户登入系统的技巧
- 【 unity3d 】NGUI playTween与Tween动画 脚本的使用
- 从 Uber 数据泄露事件我们可以学到什么?
- 电脑无法新建文件怎么办?
- JS+CSS防FLASH效果竖向可折叠的滑动菜单
- 并发编程四:深入理解java线程
- Ubuntu 18.04 LTS系统主题美化