Чтение изображений из файла docx с помощью python-docx - PullRequest
0 голосов
/ 01 сентября 2018

У меня есть файл docx, который содержит изображения, показанные ниже в распакованном формате document.xml. Здесь конкретный файл изображений называется его идентификатором в структуре docx: 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))

Есть ли другой способ прочитать эти данные? Я вижу, что изображение содержится в «run», но я не вижу способа использовать API класса docx.text.Run для доступа к изображению. Идентификатор элемента imagedata будет достаточно.

1 Ответ

0 голосов
/ 03 июня 2019

См. Документацию python-docx 0.8.9

Документы Word имеют два слоя, текстовый слой и слой для рисования. Когда изображение появляется в текстовом слое, оно называется встроенным изображением. На момент написания статьи python-docx поддерживает только встроенные изображения.

Я предполагаю, что ваши картинки в слое для рисования, поэтому вы не можете читать картинки по python-docx.

Вы можете прочитать это сообщение https://stackoverflow.com/a/27705408/8484506

...