使用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]:

猜你喜欢

转载自blog.csdn.net/Crazy_zh/article/details/105342573