利用Python实现将PDF转成图片文件

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

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

转换过程

这里使用的核心库是PyPDF2


# -*- coding: utf-8 -*-
import io
from wand.image importImage
from wand.color importColor
fromPyPDF2importPdfFileReader, PdfFileWriter
memo = {}
def getPdfReader(filename):
    reader = memo.get(filename, None)
    if reader isNone:
        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来搭配处理,一定注意小心内存泄露

里面涉及到一些库的按照可以参考这篇blog:
https://blog.csdn.net/hewy0526/article/details/8218450
wand库的官方介绍:
https://docs.wand-py.org/en/latest/guide/install.html#install-imagemagick-on-windows

各种PDF文件转图片教程

不需要按照额外库的PDF转图片教程

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值