You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python将PDF转JPEG遇错误:无法识别BytesIO图像文件

问题描述

尝试用Python将PDF转换为JPEG用于OCR操作时,持续触发以下错误:

cannot identify image file <_io.BytesIO object at 0x7cf34c6276a0>

相关转换代码如下:

def convert_pdf_to_jpeg(self, jpeg_output_dir='jpeg_output'):
      try:
        
          os.makedirs(jpeg_output_dir, exist_ok=True)
          pages = convert_from_path(self.input_path, fmt='jpeg', poppler_path = '/usr/bin')
          image_paths=[]

          for i, page in enumerate(pages):
            image_path = os.path.join(jpeg_output_dir, f'page_{i+1}.jpg')
            page.save(image_path,'JPEG', quality=self.image_quality)
            image_paths.append(image_path)
            logging.info(f'Page {i+1} saved as JPEG at {image_path} with quality {self.image_quality}')

          return image_paths
      except Exception as e:
        logging.error(f'PDF to JPEG conversion failed: {e}')
        import traceback
        traceback.print_exc()
        raise

调用该功能的代码:

pages = convert_from_path('/content/3031358-TTI_SN20210823-004(01SEP).pdf', dpi = 200, poppler_path='/usr/bin')
解决方法

这个错误大多是pdf2image返回的BytesIO对象无法被PIL正确解析,或是Poppler路径、PDF文件本身存在问题,可尝试以下修复方案:

  • 确认Poppler路径正确性
    执行终端命令which pdftoppm,找到Poppler核心工具的实际路径,替换代码中的poppler_path参数。注意路径要指向包含pdftoppm等二进制文件的目录,而非泛用的/usr/bin(部分系统中Poppler可能安装在/usr/local/bin)。

  • 显式转换BytesIO为PIL Image
    如果convert_from_path返回的是BytesIO流而非Image对象,手动转换后再保存:

    from PIL import Image
    import io
    
    # 修改转换逻辑
    pages = convert_from_path(self.input_path, fmt='jpeg', poppler_path='/usr/bin')
    image_paths = []
    for i, page in enumerate(pages):
        if isinstance(page, io.BytesIO):
            page = Image.open(page)
        image_path = os.path.join(jpeg_output_dir, f'page_{i+1}.jpg')
        page.save(image_path, 'JPEG', quality=self.image_quality)
        image_paths.append(image_path)
    
  • 移除冗余格式参数
    删掉fmt='jpeg',让pdf2image默认返回PIL Image对象,再手动保存为JPEG格式:

    pages = convert_from_path(self.input_path, dpi=200, poppler_path='/usr/bin')
    # 后续保存逻辑保持不变
    
  • 检查PDF文件状态
    手动打开目标PDF,确认文件未损坏、未加密。也可尝试用其他工具(如系统自带的PDF查看器)转换一页为图片,验证文件本身是否可用。

  • 升级依赖库
    更新pdf2image和Pillow到最新版本,修复已知兼容性问题:

    pip install --upgrade pdf2image pillow
    

内容的提问来源于stack exchange,提问作者Alvin Joseph

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.19 01:40:01