如何使用pdfminer.six的extract_pages API提取保存LTFigure包含的PDF图片
如何从pdfminer.six的LTFigure对象中提取并保存图片
可以提取LTFigure对象内包含的图片,操作思路和具体实现如下:
实现原理
LTFigure是PDF页面对象中的图形容器类,本身不直接存储图片数据,它的内部会嵌套多个子元素,其中LTImage类型的子元素才对应实际的图片资源,只需要在拿到LTFigure对象后继续遍历其子元素即可定位到图片内容。
完整实现代码
from pdfminer.high_level import extract_pages from pdfminer.layout import LTFigure, LTImage from io import BytesIO from PIL import Image import os # 替换为你的PDF文件路径 test_pdf = "example.pdf" save_dir = "./extracted_images" os.makedirs(save_dir, exist_ok=True) img_index = 0 for page_layout in extract_pages(test_pdf): for element in page_layout: # 先定位LTFigure容器 if isinstance(element, LTFigure): # 遍历LTFigure的所有子元素 for sub_element in element: # 筛选出LTImage类型的图片对象 if isinstance(sub_element, LTImage): # 读取图片原始字节 img_bytes = sub_element.stream.get_data() # 转成PIL Image对象,可自由处理裁剪、格式转换等操作 try: img = Image.open(BytesIO(img_bytes)) # 保存图片,可自定义命名规则 save_path = os.path.join(save_dir, f"img_{img_index}.{img.format.lower()}") img.save(save_path) img_index += 1 except Exception as e: print(f"第{img_index}张图片解析失败:{e}")
注意事项
- 部分PDF中的视觉图片是由矢量路径拼接而成,没有对应
LTImage对象,无法直接提取原始图片,需要额外对整个LTFigure区域进行渲染生成位图。 - 如果遇到加密PDF,需要先传入密码参数到
extract_pages方法解密后再提取。 - 若需要更精细的控制,可以通过
LTImage的width、height、bits等属性获取图片的元信息,适配不同的处理需求。
内容的提问来源于stack exchange,提问作者Dustin Michels
相关产品推荐
相关产品推荐

