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

如何使用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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 22:30:04