python docx 如何将文本与内联图像一起阅读?

python docx how to read text along with inline images?

我有一个简单的 docx 文件 like this(just insert a inline png file to text):

我试过:

>>> x=docx.Document('12.docx')
>>> for p in x.paragraphs:
    print(p.text)


headend
>>> list(x.inline_shapes)
[]

然后我解压12.docx文件,发现word/media/image1.png是位置。那么有没有办法得到这样的输出:

>>> for p in x.paragraphs:
    print(p.text_with_image_info)


head<word/media/image1.png>end

您应该能够像这样获得内联形状列表:

>>> [s for s in x.inline_shapes]
[<InlineShape object at 0x...>]

如果 none 出现,那么您可能需要检查 XML 以找出它在 XPath 位置 '//w:p/w:r/w:drawing/wp:inline' 中找不到任何内容的原因。如果您在那里看到一个空列表,那可能会产生一个有趣的发现。

关于按文档顺序获取带有图像的文本,您需要下到 lxml 层。

您可以使用 Paragraph._element 获取段落 lxml 元素 w:p。从那里你可以检查 XML 与 .xml 属性:

>>> p = paragraph._p
>>> p.xml
'<w:p> etc ...'

您需要遍历 w:p 元素的子元素,我希望您会发现主要是 w:r (运行) 元素。文本位于 w:t 元素的下方,如果我没记错的话,w:drawing 元素是 w:t 的对等元素。

您可以使用正确的子元素构造 python-docx 对象,如 InlineShape,以便在找到正确的位后访问更方便的 API。

所以这是一项工作,但如果您准备好使用 lxml 级调用,这是可行的。