使用python-docx从docx文件读取图像

时间:2018-09-01 02:59:54

标签: python openxml docx python-docx

我有一个docx文件,其中包含图像,如下所示,格式为未压缩的document.xml。在这里,特定的图像文件在docx结构中由其ID引用:rId5

<w:p>
  <w:pPr>
    <w:framePr w:h="13450" w:wrap="notBeside" w:vAnchor="text" w:hAnchor="text" w:xAlign="center" w:y="1"/>
    <w:widowControl w:val="0"/>
    <w:jc w:val="center"/>
    <w:rPr>
      <w:sz w:val="2"/>
      <w:szCs w:val="2"/>
    </w:rPr>
  </w:pPr>
  <w:r>
    <w:pict>
      <v:shapetype id="_x0000_t75" coordsize="21600,21600" o:spt="75" o:preferrelative="t" path="m@4@5l@4@11@9@11@9@5xe" filled="f" stroked="f">
        <v:stroke joinstyle="miter"/>
        <v:formulas>
          <v:f eqn="if lineDrawn pixelLineWidth 0"/>
          <v:f eqn="sum @0 1 0"/>
          <v:f eqn="sum 0 0 @1"/>
          <v:f eqn="prod @2 1 2"/>
          <v:f eqn="prod @3 21600 pixelWidth"/>
          <v:f eqn="prod @3 21600 pixelHeight"/>
          <v:f eqn="sum @0 0 1"/>
          <v:f eqn="prod @6 1 2"/>
          <v:f eqn="prod @7 21600 pixelWidth"/>
          <v:f eqn="sum @8 21600 0"/>
          <v:f eqn="prod @7 21600 pixelHeight"/>
          <v:f eqn="sum @10 21600 0"/>
        </v:formulas>
        <v:path o:extrusionok="f" gradientshapeok="t" o:connecttype="rect"/>
        <o:lock v:ext="edit" aspectratio="t"/>
      </v:shapetype>
      <v:shape id="_x0000_s1026" type="#_x0000_t75" style="width:486pt;height:673pt;">
        <v:imagedata r:id="rId5" r:href="rId6"/>
      </v:shape>
    </w:pict>
  </w:r>
</w:p>

我尝试使用document.inline_shapes属性读取图像,但是以下打印0:

PATH = "/home/amoe/test.docx"
doc = docx.Document(PATH)
print(len(doc.inline_shapes))

还有其他方法可以读取此数据吗?我可以看到该图像包含在“运行”中,但是我看不到任何使用docx.text.Run类的API来访问该图像的方法。 imagedata元素的ID就足够了。

1 个答案:

答案 0 :(得分:0)

Refer to python-docx 0.8.9文档

  

Word文档具有两层,即文本层和图形层。   当图片出现在文本层中时,称为嵌入式图片。   在撰写本文时,python-docx仅支持嵌入式图片。

我假设您的图片位于绘图层中,因此您无法通过python-docx读取图片。

您可以阅读这篇文章 https://stackoverflow.com/a/27705408/8484506