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

用Python提取docx嵌入式文件:PDF/ZIP无法打开问题求助

解决线索
  • 剥离OLE包装头:PDF和ZIP是以OLE对象形式嵌入的,导出的.bin文件开头包含OLE容器的元数据,并非纯文件内容。可通过文件特征码定位真实内容起始位置:

    • PDF的特征码是%PDF-,在.bin文件中找到该字符串的起始索引,截取从该位置到文件末尾的内容保存为.pdf;
    • ZIP的特征码是PK\x03\x04,同样截取对应位置后的内容保存为.zip。
      示例代码(以PDF为例):
    with open("word_embeddings_oleObject1.bin", "rb") as f:
        data = f.read()
    pdf_start = data.find(b"%PDF-")
    if pdf_start != -1:
        with open("extracted.pdf", "wb") as f_out:
            f_out.write(data[pdf_start:])
    
  • 使用OLE解析库:借助olefile库直接解析OLE容器文件,提取内部真实内容。先安装库pip install olefile,示例代码:

    import olefile
    
    ole = olefile.OleFileIO("word_embeddings_oleObject1.bin")
    # 查看所有可用流
    print(ole.listdir())
    # 提取对应流的内容,通常真实内容在"Contents"或类似流中
    if ole.exists("Contents"):
        content = ole.openstream("Contents").read()
        # 根据MIME类型判断保存后缀,比如PDF则保存为.pdf
        with open("extracted.pdf", "wb") as f:
            f.write(content)
    
  • 区分嵌入类型:docx中嵌入式文件有两种存储方式:

    • 嵌入式docx用的是Package嵌入(对应关系类型http://schemas.openxmlformats.org/officeDocument/2006/relationships/package),这类文件可直接提取使用;
    • PDF/ZIP用的是OLE嵌入(对应关系类型http://schemas.openxmlformats.org/officeDocument/2006/relationships/oleObject),必须解析OLE容器才能获取真实内容。可查看word/_rels/document.xml.rels文件里的关系项,确认每个嵌入对象的类型后针对性处理。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.08 22:30:10