如何使用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
相关产品推荐
相关产品推荐

