龙空技术网

利用Python将PDF转化为图片的方法

Python智禅 266

前言:

今天各位老铁们对“python 图片生成pdf”大概比较注意,兄弟们都需要分析一些“python 图片生成pdf”的相关文章。那么小编也在网上网罗了一些有关“python 图片生成pdf””的相关资讯,希望各位老铁们能喜欢,兄弟们快快来了解一下吧!

python的功能真是强大,可以做词云图、可以优雅地八卦、可以做游戏外挂、还可以将PDF转化成图片,这个功能你还不知道吧,赶紧随小编我一起来看看吧:

之前收集了很多优秀的 PDF文档,但是需要看的时候不是很方便,需要去找到这个文件,如果是在手机上的话往往还需要下载 PDF相关的插件才行,而且最大的问题是不便于资料的整理和分享。如果能够将 PDF转换成网页,岂不是就能解决这些问题了?还能直接分享出去。

这里利用 PyPDF包来处理 PDF文件,为了方便快捷,我这里直接将一个页面转换成图片,就不需要去识别页面中的每一个 PDF元素了,这是没必要的。

转换

核心代码很简单,就是将 PDF文件读取出来,转换成 PdfFileReader,然后就可以根据 PyPDF2的API去获得每一个页面的二进制数据,拿到二进制数据过后,就能很方便的进行图片处理了,这里用 wand包来进行图片处理。

# -*- coding: utf-8 -*- import io from wand.image import Image from wand.color import Color from PyPDF2 import PdfFileReader, PdfFileWriter memo = {} def getPdfReader(filename): reader = memo.get(filename, None) if reader is None: reader = PdfFileReader(filename, strict=False) memo[filename] = reader return reader def _run_convert(filename, page, res=120): idx = page + 1 pdfile = getPdfReader(filename) pageObj = pdfile.getPage(page) dst_pdf = PdfFileWriter() dst_pdf.addPage(pageObj) pdf_bytes = io.BytesIO() dst_pdf.write(pdf_bytes) pdf_bytes.seek(0) img = Image(file=pdf_bytes, resolution=res) img.format = 'png' img.compression_quality = 90 img.background_color = Color("white") img_path = '%s%d.png' % (filename[:filename.rindex('.')], idx) img.save(filename=img_path) img.destroy()

需要注意的是一般PDF文件较大,如果一次性转换整个PDF文件需要小心内存溢出的问题,我们这里将第一次载入的整个PDF文件保存到内存,避免每次读取的时候都重新载入。

批量处理

上面已经完成了一个 PDF页面的转换,要完成整个文件的转换就很简单了,只需要拿到文件的总页码,然后循环执行就行。考虑到转换比较耗时,可以使用异步处理的方式加快速度。比如可以使用 celery来搭配处理,一定注意小心内存泄露。

核心代码已经整理放到github上去了,好了,等有时间的时候准备做一个公共的PDF转成 H5的服务,开放给大众使用。

最后,小编想说一句话:我是一名python开发工程师,整理了一套最新的python系统学习教程,包括从基础的python脚本到web开发、爬虫、数据分析、数据可视化、机器学习,面试宝典。想要这些资料的可以关注小编,私信小编“01”即可(免费分享哦)希望能对你有所帮助

标签: #python 图片生成pdf #pythonbytes转图片