20多行 Python 代码优雅搞定 PDF 转换成图片
源 / 程序员大咖
本文利用 PyPDF包来处理 PDF文件,为了方便快捷,我这里直接将一个页面转换成图片,就不需要去识别页面中的每一个 PDF元素了,这是没必要的。
转换
核心代码很简单,就是将 PDF文件读取出来,转换成 PdfFileReader,然后就可以根据 PyPDF2的API去获得每一个页面的二进制数据,拿到二进制数据过后,就能很方便的进行图片处理了,这里用 wand包来进行图片处理。
1# -*- coding: utf-8 -*- 2 3import io 4from wand.image import Image 5from wand.color import Color 6from PyPDF2 import PdfFileReader, PdfFileWriter 7memo = {} 8''' 9需要注意的是一般PDF文件较大,如果一次性转换10整个PDF文件需要小心内存溢出的问题,我们这里11将第一次载入的整个PDF文件保存到内存,避免每12次读取的时候都重新载入。13'''14def getPdfReader(filename):15 reader = memo.get(filename, None)16 if reader is None:17 reader = PdfFileReader(filename, strict=False)18 memo[filename] = reader19 return reader2021def _run_convert(filename, page, res=120):22 idx = page + 123 pdfile = getPdfReader(filename)24 pageObj = pdfile.getPage(page)25 dst_pdf = PdfFileWriter()26 dst_pdf.addPage(pageObj)27 pdf_bytes = io.BytesIO()28 dst_pdf.write(pdf_bytes)29 pdf_bytes.seek(0)30 img = Image(file=pdf_bytes, resolution=res)31 img.format = png 32 img.compression_quality = 9033 img.background_color = Color("white")34 img_path = %s%d.png % (filename[:filename.rindex( . )], idx)35 img.save(filename=img_path)36 img.destroy()# -*- coding: utf-8 -*- 2 3import io 4from wand.image import Image 5from wand.color import Color 6from PyPDF2 import PdfFileReader, PdfFileWriter 7memo = {} 8''' 9需要注意的是一般PDF文件较大,如果一次性转换10整个PDF文件需要小心内存溢出的问题,我们这里11将第一次载入的整个PDF文件保存到内存,避免每12次读取的时候都重新载入。13'''14def getPdfReader(filename):15 reader = memo.get(filename, None)16 if reader is None:17 reader = PdfFileReader(filename, strict=False)18 memo[filename] = reader19 return reader2021def _run_convert(filename, page, res=120):22 idx = page + 123 pdfile = getPdfReader(filename)24 pageObj = pdfile.getPage(page)25 dst_pdf = PdfFileWriter()26 dst_pdf.addPage(pageObj)27 pdf_bytes = io.BytesIO()28 dst_pdf.write(pdf_bytes)29 pdf_bytes.seek(0)30 img = Image(file=pdf_bytes, resolution=res)31 img.format = png 32 img.compression_quality = 9033 img.background_color = Color("white")34 img_path = %s%d.png % (filename[:filename.rindex( . )], idx)35 img.save(filename=img_path)36 img.destroy()
批量处理
上面已经完成了一个 PDF页面的转换,要完成整个文件的转换就很简单了,只需要拿到文件的总页码,然后循环执行就行。考虑到转换比较耗时,可以使用异步处理的方式加快速度。比如可以使用 celery来搭配处理,一定注意小心内存泄露。
——————————————
往期精彩:
我造的假我自己打,Adobe推出“反PS”
微软删除人脸识别,除了隐私,更重要的可能是性别歧视与种族主义
亚马逊在中国失败,而中国却在亚马逊成功
20多行 Python 代码优雅搞定 PDF 转换成图片相关推荐
- 程序员的乐趣,生成自定义二维码,5 行 Python 代码就搞定
选自 | towardsdatascience 作者 | Arindom Bhattacharjee 转自 | 机器之心 参与 | 杜伟.小舟 随处可见的二维码是怎么生成的?自己做一个试试吧. 随着互 ...
- python打地鼠脚本_制作一个打地鼠的小游戏!100行Python代码轻松搞定
本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,如有问题请及时联系我们以作处理. 以下文章来源于萝卜大杂烩 ,作者周萝卜 游戏画面 首先先进行游戏画面排版, classTopWin ...
- android开发将h5转换成pdf_如何将PDF转换成图片?搞定PDF格式转换,就用这招就够了!...
原标题:如何将PDF转换成图片?搞定PDF格式转换,就用这招就够了! 在我们日常学习和日常工作中,我们有时候会遇到要使用到PDF中某一部分的情况,这时候我们可以将PDF文件转成图片.有什么办法可以把P ...
- pdf转换成jpg python_【PDF转图片】如何将PDF转换成图片格式--Python
可能会有人问,很多PDF阅读软件都是可以直接将PDF文件保存成图片格式的,为什么非得用Python?? 使用Python(代码)的优势就在于可以批量操作,试想,如果你有成百上千的PDF文件,你很有可能 ...
- python在线学习pdf_扣丁学堂Python在线学习之将pdf转成图片的方法
扣丁学堂Python在线学习之将pdf转成图片的方法 2018-05-23 11:29:01 1266浏览 Python将pdf转成图片的方法,不论是参加 本篇文章记录如何使用python将pdf文件 ...
- 【Python】只需2行代码,轻松将PDF转换成Word(含示范案例)
文章目录 一.前期准备 二.pdf2docx功能 三.限制 四.案例 一.前期准备 可将 PDF 转换成 docx 文件的 Python 库.该项目通过 PyMuPDF 库提取 PDF 文件中的数据, ...
- 【Python】只需2行代码,轻松将PDF转换成Word
编辑:数据分析与统计学之美 可将 PDF 转换成 docx 文件的 Python 库.该项目通过 PyMuPDF 库提取 PDF 文件中的数据,然后采用 python-docx 库解析内容的布局.段落 ...
- Python库 pdf2docx 轻松将PDF转换成docx
前言: 可将 PDF 转换成 docx 文件的 Python 库.该项目通过 PyMuPDF 库提取 PDF 文件中的数据,然后采用 python-docx 库解析内容的布局.段落.图片.表格等,最后 ...
- 20 行 Python 代码批量抓取免费高清图片!
前言 相信在你的工作中可能会经常用到PPT吧,你在PPT制作过程中有没有这样的困惑,就是可以到哪里找到既高清又无版权争议的图片素材呢?这里强烈推荐ColorHub,这是一个允许个人和商业用途的免费图片 ...
- 20行Python 代码批量抓取免费高清图片!
前言 相信在你的工作中可能会经常用到PPT吧,你在PPT制作过程中有没有这样的困惑,就是可以到哪里找到既高清又无版权争议的图片素材呢?这里强烈推荐ColorHub,这是一个允许个人和商业用途的免费图片 ...
最新文章
- linux 测试环境启用jar_Linux下用java -jar运行可执行jar包的方法教程
- centos 7 安装 mantisbt-2.12.0 —— 安装LAMP环境、安装mantisbt-2.12.0
- 一直在构建版本_构建系统与代码结构SpringBoot
- 微软开源Bing搜索背后的关键算法
- 华南理工网络计算机基础知识,2019年华南理工大学网络教育计算机基础随堂练习题第一章.docx...
- .net中的压力测试
- 华侨大学计算机应用技术章亮,华侨大学学生综合素质测评成绩汇总表
- 第七篇 ScrollView控件
- 微信二次修改微信号_微信正测试微信号修改功能:一年只有一次机会
- 智能优化算法:适应度相关优化算法 - 附代码
- Jira 破解版 Docker 部署
- PHP生成缩略图、加水印
- Windows 10/11【家庭版】设置本地账户密码永不过期的方法
- oracle如何判断节假日,oracle function 用于判断是否为节假日
- Linux date 命令
- iOS-关于微信支付
- 开发辅助:从Eclipse转到Android Studio/Intellij Idea需要做的设置
- [ linux ] vim 编辑器的三种模式介绍
- 认证认可机构收费项目和标准
- Atcoder F - Mirrored(思维+搜索)