2016-03-26 17 views
1

ben basit docx dosyası like this var (sadece metne dosyayı png bir satır içi yerleştirin)python docx metin satır içi resimlerle nasıl okunur? Denedim <a href="https://i.stack.imgur.com/bJQTp.png" rel="nofollow noreferrer"><img src="https://i.stack.imgur.com/bJQTp.png" alt="enter image description here"></a></p> <p>:

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


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

Ve 12.docx sıkıştırılmış dosyasını açın word/media/image1.png konumdur bulundu. hiçbiri gösterisi yukarı sonra muhtemelen gerekiyordu

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

ise: Böyle satır içi şekillerin bir listesini almak mümkün olmalıdır

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


head<word/media/image1.png>end 

cevap

2

: Yani böyle bir çıktı almak için bir yol var Neden XPath konumunun '//w:p/w:r/w:drawing/wp:inline' numaralı telefonunda bir şey bulamadığını bulmak için XML'yi inceleyin. Orada boş bir liste görürseniz, bu ilginç bir bulguya neden olabilir.

Belge sırasına göre görüntü ile metin almanın bitişi ile ilgili olarak, lxml katmanına gitmeniz gerekir.

w:p numaralı paragraf lxml öğesini Paragraph._element kullanarak alabilirsiniz. Oradan .xml özelliğiyle XML inceleyebilirsiniz:

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

Sen w:p elemanın çocukları arasında yineleme gerekir, ben öncelikle w:r (run) unsurları bulacaksınız bekliyoruz. Metin, w:t öğelerindeki öğelerin altında tutulur ve hatalı değilse w:t öğesinin bir eşleşmesidir.

Doğru biti yerleştirdikten sonra daha uygun bir API'ye erişmek için InlineShape gibi python-docx nesnelerini doğru alt öğe ile oluşturabilirsiniz.

Bu yüzden biraz iş var, ancak lxml düzeyindeki aramalarla çalışmaya devam ederseniz, bunu yapabilirsiniz.

+0

Teşekkürler adamım. Aynı sorunu github'unuza da koydum. – tcpiper

İlgili konular

 İlgili konular