首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

pdf2image,PDF转图像的完美方案!

PDF转图片是个老大难的问题了。要么清晰度不行,要么速度慢得要死,还有各种乱七八糟的问题。不过别担心,有了pdf2image这个神器,PDF转图片分分钟的事。

1.

安装配置

pdf2image依赖poppler,得先把这玩意装好。Mac用户直接用brew安装:

brew install poppler

Windows用户麻烦点,要下载poppler的二进制文件,把bin目录加到环境变量。装好poppler再装pdf2image:

pip install pdf2image

温馨提示:Windows用户记得重启电脑,让环境变量生效。不然一会儿运行代码可能会报错,找不到poppler。

2.

基本用法

来看看最简单的用法,一个PDF转成一堆图片:

from pdf2image import convert_from_path

# PDF转图片,默认格式是PNG

images = convert_from_path('demo.pdf')

# 保存图片,每页PDF生成一张图片

for i, image in enumerate(images):

  image.save(f'page_{i+1}.png')

这代码超级简单,但已经能应付80%的需求了。每页PDF会转成一张图片,默认是PNG格式。我一般用PNG,因为清晰度高,不过占用空间也大。

3.

进阶玩法

想要调整图片质量和大小?这样搞:

images = convert_from_path(

  'demo.pdf',

  dpi=300,  # 分辨率,越大越清晰

  size=(800, None),  # 指定宽度,高度自动调整

  fmt='jpeg',  # 换成JPEG格式

  output_folder='output',  # 指定输出目录

  thread_count=4  # 多线程处理,速度杠杠的

)

温馨提示:dpi别设太大,300够用了。设太大不仅慢,文件还特别大。真要高清,建议用原始PDF。

4.

内存优化

PDF太大?一次性转换会把内存撑爆?试试分批处理:

from pdf2image import convert_from_path

def convert_batch(pdf_path, batch_size=5):

  for i in range(0, 100, batch_size):  # 假设PDF有100页

      images = convert_from_path(

          pdf_path,

          first_page=i+1,

          last_page=min(i+batch_size, 100)

      )

      for j, image in enumerate(images):

          image.save(f'page_{i+j+1}.png')

convert_batch('large.pdf')

一次处理几页,内存占用小很多。就是速度会慢点,看具体需求取舍。

5.

坑点提醒

有几个坑得提前说清楚:

PDF有密码?得先解密,不然转不了

有些花里胡哨的PDF可能转出来不太对劲,比如有透明效果

Mac用户碰到权限问题,记得给poppler执行权限

转换速度和电脑配置、PDF复杂度都有关系,别指望太快

代码示例:

# 处理加密的PDF

images = convert_from_path(

  'encrypted.pdf',

  password='123456'

)

# 处理质量和文件大小的平衡

images = convert_from_path(

  'demo.pdf',

  dpi=150,  # 适中的分辨率

  fmt='jpeg',

  jpeg_quality=80  # JPEG压缩质量

)

好了,现在可以愉快地把PDF转成图片了。这些代码都是实打实地测试过的,拿去用就完事了。要是想研究更多花样,pdf2image的文档写得挺详细,去看看准没错。

· END ·

欢迎分享到朋友圈

 MU MU MA

  • 发表于:
  • 原文链接https://page.om.qq.com/page/OBABIb7seWDdSKf4slPYHpsg0
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券