专栏名称: 程序员大咖
为程序员提供最优质的博文、最精彩的讨论、最实用的开发资源;提供最新最全的编程学习资料:PHP、Objective-C、Java、Swift、C/C++函数库、.NET Framework类库、J2SE API等等。并不定期奉送各种福利。
目录
相关文章推荐
程序员的那些事  ·  热搜第一!DeepSeek百万年薪招AI人才 ... ·  11 小时前  
程序员的那些事  ·  o3-mini ... ·  3 天前  
OSC开源社区  ·  萨姆·奥特曼:OpenAI在开源问题上一直处 ... ·  4 天前  
码农翻身  ·  强烈建议尽快搞个软考证!(2025重大红利) ·  5 天前  
程序员小灰  ·  不要脸!DeepSeek被美国海军禁用 ·  6 天前  
51好读  ›  专栏  ›  程序员大咖

利用 Python 优雅地将 PDF 转换成图片

程序员大咖  · 公众号  · 程序员  · 2018-05-17 10:24

正文

点击上方“程序员大咖”,选择“置顶公众号”

关键时刻,第一时间送达!


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

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

转换

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

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

  2. import io

  3. from wand.image import Image

  4. from wand.color import Color

  5. from PyPDF2 import PdfFileReader, PdfFileWriter

  6. memo = {}

  7. def getPdfReader(filename):

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

  9.    if reader is None:

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

  11.        memo[filename] = reader

  12.    return reader

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

  14.    idx = page + 1

  15.    pdfile = getPdfReader(filename)

  16.    pageObj = pdfile.getPage(page)

  17.    dst_pdf = PdfFileWriter()

  18.    dst_pdf.addPage(pageObj)

  19.    pdf_bytes = io.BytesIO()

  20.    dst_pdf.write(pdf_bytes)

  21.    pdf_bytes.seek(0)

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

  23.    img.format = 'png'

  24.    img.compression_quality = 90

  25.    img.background_color = Color





    请到「今天看啥」查看全文