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

如何使用pypdfium2(Python)提取PDF中的内嵌图片?

使用pypdfium2提取PDF内嵌JPEG/PNG图片

核心思路

pypdfium2没有直接封装一键提取内嵌图片的高层API,但可以通过其底层PDFium绑定接口,遍历页面资源中的图像XObject来实现。核心步骤为:

  • 打开PDF文档
  • 遍历每个页面
  • 检索页面资源中的图像对象
  • 提取图像原始字节数据
  • 根据字节特征判断格式并保存

代码实现

import pypdfium2 as pdfium
import os

def extract_embedded_images(pdf_path, output_dir):
    # 创建输出目录
    os.makedirs(output_dir, exist_ok=True)
    
    # 打开PDF文档
    with pdfium.PdfDocument(pdf_path) as doc:
        image_count = 0
        for page_num in range(len(doc)):
            page = doc.get_page(page_num)
            # 获取页面资源字典
            resources = page.get_dict().get("Resources")
            if not resources:
                continue
            
            # 获取XObject字典(PDF内嵌图像通常存储于此)
            xobjects = resources.get("XObject")
            if not xobjects:
                continue
            
            # 遍历所有XObject,筛选图像类型
            for key in xobjects:
                xobj = xobjects.get(key)
                if xobj.get("Subtype") == "Image":
                    image_count += 1
                    # 提取图像原始字节数据
                    image_data = xobj.get_data()
                    
                    # 通过字节头判断图像格式
                    if image_data.startswith(b"\xff\xd8"):
                        ext = ".jpg"
                    elif image_data.startswith(b"\x89PNG"):
                        ext = ".png"
                    else:
                        # 跳过非目标格式的图片
                        continue
                    
                    # 保存图片到指定目录
                    output_path = os.path.join(output_dir, f"image_{image_count}{ext}")
                    with open(output_path, "wb") as f:
                        f.write(image_data)
                    print(f"已提取图片: {output_path}")

# 示例调用
extract_embedded_images("input.pdf", "extracted_images")

关键说明

  • PDF中的内嵌图像一般以XObject形式存储在页面资源中,通过检查Subtype字段是否为Image来筛选目标对象
  • 依赖字节头判断格式:JPEG以\xff\xd8开头,PNG以\x89PNG开头,可根据需求扩展其他格式的判断逻辑
  • 若遇到加密或特殊压缩处理的PDF,需先处理解密或解压逻辑,才能正常提取图像数据

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.24 22:47:06