首页 > 编程语言 > 详细

巧用 Python 快速将 PDF 转换成图片

时间:2019-11-28 14:03:15      阅读:80      评论:0      收藏:0      [点我收藏+]

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

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

转换

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

  1. # -*- coding: utf-8 -*-

  2. import io

  3.  

  4. from wand.image importImage

  5. from wand.color importColor

  6. fromPyPDF2importPdfFileReader, PdfFileWriter

  7.  

  8. memo = {}

  9.  

  10. def getPdfReader(filename):

  11.    reader = memo.get(filename, None)

  12.    if reader isNone:

  13.        reader = PdfFileReader(filename, strict=False)

  14.        memo[filename] = reader

  15.    return reader

  16.  

  17. def _run_convert(filename, page, res=120):

  18.    idx = page + 1

  19.    pdfile = getPdfReader(filename)

  20.    pageObj = pdfile.getPage(page)

  21.    dst_pdf = PdfFileWriter()

  22.    dst_pdf.addPage(pageObj)

  23.  

  24.    pdf_bytes = io.BytesIO()

  25.    dst_pdf.write(pdf_bytes)

  26.    pdf_bytes.seek(0)

  27.  

  28.    img = Image(file=pdf_bytes, resolution=res)

  29.    img.format = ‘png‘

  30.    img.compression_quality = 90

  31.    img.background_color = Color("white")

  32.    img_path = ‘%s%d.png‘% (filename[:filename.rindex(‘.‘)], idx)

  33.    img.save(filename=img_path)

  34.    img.destroy()

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

批量处理

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

巧用 Python 快速将 PDF 转换成图片

原文:https://www.cnblogs.com/macjb/p/11949566.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!