我有一个简单的docx文件like this(只需在文本中插入内联png文件):
我试过了:
>>> 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
答案 0 :(得分:2)
您应该能够获得这样的内联形状列表:
>>> [s for s in x.inline_shapes]
[<InlineShape object at 0x...>]
如果没有显示,那么您可能需要检查XML以找出它在XPath位置'//w:p/w:r/w:drawing/wp:inline'
找不到任何内容的原因。如果您在那里看到一个空列表,这可能会产生一个有趣的发现。
关于按文档顺序获取图像文本的问题,您需要转到lxml图层。
您可以使用w:p
获取段落lxml元素Paragraph._element
。从那里,您可以使用.xml属性检查XML:
>>> p = paragraph._p
>>> p.xml
'<w:p> etc ...'
您需要遍历w:p
元素的子元素,我希望您能够找到主要的w:r
(运行)元素。如果我没有弄错的话,文字会保留在w:t
个元素的下方,而w:drawing
元素是w:t
的同伴。
您可以使用正确的子元素构建像InlineShape这样的python-docx对象,以便在找到正确的位后访问更方便的API。
如果您正在使用lxml级别的电话,那么它可以做一些工作但是可行。