报错TypeError: 'IndirectObject' object is not subscriptable
时间: 2023-07-01 21:24:34 浏览: 233
这个错误通常是因为PyPDF2库版本的问题导致的。在PyPDF2 1.26.0版本及之后的版本中,getPage()方法返回的是一个IndirectObject对象,而不是PageObject对象。因此在使用该对象时需要先使用resolve()方法将它转换成PageObject对象。
如果你使用的是PyPDF2 1.26.0及之后的版本,可以尝试在代码中使用resolve()方法来解决这个问题。你可以尝试将代码修改为以下形式:
```python
import PyPDF2
from PIL import Image
def is_blank_page(pdf_path, page_num):
pdf_file = open(pdf_path, 'rb')
pdf_reader = PyPDF2.PdfFileReader(pdf_file)
page = pdf_reader.getPage(page_num).resolve()
# Check if page has no elements
if page['/Contents'] is None:
return True
# Check if page has blank image
for obj in page['/Resources']['/XObject'].values():
if obj['/Subtype'] == '/Image':
img = PyPDF2.PdfImageXObject(obj).resolve()
img_data = img.getData()
img_pil = Image.open(img_data)
if img_pil.mode == 'L': # Convert grayscale image to RGB
img_pil = img_pil.convert('RGB')
img_arr = img_pil.load()
width, height = img_pil.size
# Check if image is mostly white
white_count = 0
for x in range(width):
for y in range(height):
r, g, b = img_arr[x, y]
if r > 240 and g > 240 and b > 240:
white_count += 1
if white_count >= width * height * 0.9: # If more than 90% of pixels are white
return True
return False
# Example usage
pdf_path = 'example.pdf'
for i in range(10):
if is_blank_page(pdf_path, i):
print(f'Page {i+1} of {pdf_path} is a blank page')
```
如果你仍然遇到问题,可以尝试升级或降级PyPDF2库的版本,或者尝试使用其他PDF处理库。
阅读全文