源 / 程序员大咖

本文利用 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 转换成图片相关推荐

  1. 程序员的乐趣,生成自定义二维码,5 行 Python 代码就搞定

    选自 | towardsdatascience 作者 | Arindom Bhattacharjee 转自 | 机器之心 参与 | 杜伟.小舟 随处可见的二维码是怎么生成的?自己做一个试试吧. 随着互 ...

  2. python打地鼠脚本_制作一个打地鼠的小游戏!100行Python代码轻松搞定

    本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,如有问题请及时联系我们以作处理. 以下文章来源于萝卜大杂烩 ,作者周萝卜 游戏画面 首先先进行游戏画面排版, classTopWin ...

  3. android开发将h5转换成pdf_如何将PDF转换成图片?搞定PDF格式转换,就用这招就够了!...

    原标题:如何将PDF转换成图片?搞定PDF格式转换,就用这招就够了! 在我们日常学习和日常工作中,我们有时候会遇到要使用到PDF中某一部分的情况,这时候我们可以将PDF文件转成图片.有什么办法可以把P ...

  4. pdf转换成jpg python_【PDF转图片】如何将PDF转换成图片格式--Python

    可能会有人问,很多PDF阅读软件都是可以直接将PDF文件保存成图片格式的,为什么非得用Python?? 使用Python(代码)的优势就在于可以批量操作,试想,如果你有成百上千的PDF文件,你很有可能 ...

  5. python在线学习pdf_扣丁学堂Python在线学习之将pdf转成图片的方法

    扣丁学堂Python在线学习之将pdf转成图片的方法 2018-05-23 11:29:01 1266浏览 Python将pdf转成图片的方法,不论是参加 本篇文章记录如何使用python将pdf文件 ...

  6. 【Python】只需2行代码,轻松将PDF转换成Word(含示范案例)

    文章目录 一.前期准备 二.pdf2docx功能 三.限制 四.案例 一.前期准备 可将 PDF 转换成 docx 文件的 Python 库.该项目通过 PyMuPDF 库提取 PDF 文件中的数据, ...

  7. 【Python】只需2行代码,轻松将PDF转换成Word

    编辑:数据分析与统计学之美 可将 PDF 转换成 docx 文件的 Python 库.该项目通过 PyMuPDF 库提取 PDF 文件中的数据,然后采用 python-docx 库解析内容的布局.段落 ...

  8. Python库 pdf2docx 轻松将PDF转换成docx

    前言: 可将 PDF 转换成 docx 文件的 Python 库.该项目通过 PyMuPDF 库提取 PDF 文件中的数据,然后采用 python-docx 库解析内容的布局.段落.图片.表格等,最后 ...

  9. 20 行 Python 代码批量抓取免费高清图片!

    前言 相信在你的工作中可能会经常用到PPT吧,你在PPT制作过程中有没有这样的困惑,就是可以到哪里找到既高清又无版权争议的图片素材呢?这里强烈推荐ColorHub,这是一个允许个人和商业用途的免费图片 ...

  10. 20行Python 代码批量抓取免费高清图片!

    前言 相信在你的工作中可能会经常用到PPT吧,你在PPT制作过程中有没有这样的困惑,就是可以到哪里找到既高清又无版权争议的图片素材呢?这里强烈推荐ColorHub,这是一个允许个人和商业用途的免费图片 ...

最新文章

  1. linux 测试环境启用jar_Linux下用java -jar运行可执行jar包的方法教程
  2. centos 7 安装 mantisbt-2.12.0 —— 安装LAMP环境、安装mantisbt-2.12.0
  3. 一直在构建版本_构建系统与代码结构SpringBoot
  4. 微软开源Bing搜索背后的关键算法
  5. 华南理工网络计算机基础知识,2019年华南理工大学网络教育计算机基础随堂练习题第一章.docx...
  6. .net中的压力测试
  7. 华侨大学计算机应用技术章亮,华侨大学学生综合素质测评成绩汇总表
  8. 第七篇 ScrollView控件
  9. 微信二次修改微信号_微信正测试微信号修改功能:一年只有一次机会
  10. 智能优化算法:适应度相关优化算法 - 附代码
  11. Jira 破解版 Docker 部署
  12. PHP生成缩略图、加水印
  13. Windows 10/11【家庭版】设置本地账户密码永不过期的方法
  14. oracle如何判断节假日,oracle function 用于判断是否为节假日
  15. Linux date 命令
  16. iOS-关于微信支付
  17. 开发辅助:从Eclipse转到Android Studio/Intellij Idea需要做的设置
  18. [ linux ] vim 编辑器的三种模式介绍
  19. 认证认可机构收费项目和标准
  20. Atcoder F - Mirrored(思维+搜索)

热门文章

  1. 谷歌浏览器F12快速定位网页上组件信息
  2. 解决问题--修改weblogic密码后无法启动以及如何解密weblogic的3DES密文
  3. jQery动态添加删除类样式
  4. 知乎热问:一个程序员的水平能差到什么程度?
  5. 又一个程序员在工位上倒下了!
  6. 如何清理 Linux 系统开机启动项?
  7. Studio系列教程来啦
  8. 计算机知识考试试题及答案,职称计算机考试基础知识章节试题及答案一
  9. 用python编程、假设一年期定期利率_《Python程序设计》题库.pdf
  10. LeetCode 33 Search in Rotated Sorted Array(循环有序数组中进行查找操作)