使用PyPDF4提取pdf文件中的图片

首先,打开pdf文件, 检查是否加密:

import PyPDF4
pdf = PyPDF4.pdf.PdfFileReader("filename")
pdf.isEncrypted

如果pdf.isEncrypted返回False,说明未加密,可以继续操作;若返回True,则需要使用pdf.decrypt(password)解密后才能操作。

其次,找到图片所在页,使用pdf.getPage(pagenum)获取那一页(页码从0开始编号),这里返回的是一个字典。如:

pg = pdf.getPage(7)

在这里插入图片描述
在这里插入图片描述
从这里可以看出只有一张图片,存储在['/Resources']['/XObject']里,通过type查看返现pg['/Resources']['/XObject']['/Im8']是一个EncodedStreamObject,通过getData()方法可以获取它的数据,直接以二进制模式写入文件即可保存。

完整代码如下:

In [1]: import PyPDF4

In [2]: pdf = PyPDF4.pdf.PdfFileReader("pdffile.pdf")
PdfReadWarning: Xref table not zero-indexed. ID numbers for objects will be corrected. [pdf.py:1801]

In [3]: pdf.isEncrypted
Out[3]: False

In [4]: pg = pdf.getPage(7)

In [5]: pg.keys()
Out[5]: dict_keys(['/Type', '/Parent', '/MediaBox', '/Contents', '/Resources'])

In [6]: pg.values()
Out[6]: dict_values(['/Page', IndirectObject(901, 0), [0, 0, 514.4882, 665.7059], IndirectObject(917, 0), {'/XObject': {'/Im8': IndirectObject(15, 0)}, '/ProcSet': ['/ImageB']}])

In [7]: im8 = pg['/Resources']['/XObject']['/Im8'].getData()

In [8]: with open('im8.jpg', 'wb') as f:
   ...:     f.write(im8)
   ...:

In [9]:
  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值