2014-10-27 80 views
4

我試圖遍歷Word文檔並保存Word文檔中找到的所有圖像。我嘗試了樣品word文檔上傳到online demo,發現圖像被列爲:如何在DOCX4J中保存Word文檔中的圖像

/word/media/image1.png rId5 image/png 
/word/media/image2.png rId5 image/png 
/word/media/image3.jpg rId5 image/jpeg 

在遍歷文件我如何編程方式保存這些照片?

目前我得到的所有從文檔中的文字是這樣的:

WordprocessingMLPackage wordMLPackage = WordprocessingMLPackage.load(new java.io.File(filePath)) 
    MainDocumentPart documentPart = wordMLPackage.getMainDocumentPart() 
    Document wmlDocumentEl = (org.docx4j.wml.Document)documentPart.getJaxbElement() 
    Body body = wmlDocumentEl.getBody(); 
    DocumentTraverser traverser = new DocumentTraverser(); 

    class DocumentTraverser extends TraversalUtil.CallbackImpl { 
     @Override 
     public List<Object> apply(Object o) { 
     if (o instanceof org.docx4j.wml.Text) { 
     .... 
     } 
     return null; 
     } 
    } 
+0

您關心圖像的上下文(即順序,周圍文本)還是隻想轉儲他們在哪裏? – JasonPlutext 2014-10-28 00:14:45

+0

雖然這將是以後的良好信息......現在只需傾銷它們就足夠了。 – birdy 2014-10-28 02:35:48

+0

只需點擊此鏈接(http://cnedelcu.blogspot.in/2013/02/top-3-ways-to-extract-images-from-word-docx-doc-document.html)可能對您有用 – yugi 2014-10-30 04:27:20

回答

1

對於嵌入式(而不是外部)的圖像,最簡單的方法是:

import java.io.FileOutputStream; 
import java.util.Map.Entry; 

import org.docx4j.openpackaging.packages.WordprocessingMLPackage; 
import org.docx4j.openpackaging.parts.Part; 
import org.docx4j.openpackaging.parts.PartName; 
import org.docx4j.openpackaging.parts.WordprocessingML.BinaryPart; 
import org.docx4j.openpackaging.parts.WordprocessingML.BinaryPartAbstractImage; 

public class SaveImages { 

     public static void main(String[] args) throws Exception { 

      WordprocessingMLPackage wordMLPackage = WordprocessingMLPackage.load(new java.io.File(inputfilepath)); 

      for (Entry<PartName, Part> entry : wordMLPackage.getParts().getParts().entrySet()) { 

       if (entry.getValue() instanceof BinaryPartAbstractImage) { 

        FileOutputStream fos = new FileOutputStream(yourfile); // TODO: you can get file extension from PartName, or part class. 
        ((BinaryPart)entry.getValue()).writeDataToOutputStream(fos); 
        fos.close(); 

       } 


      } 
     } 

    } 

如果你關心的圖像的上下文,你必須在相關部分搜索它們(例如MainDocumentPart,和你的頁眉/頁腳部分等)。

https://github.com/plutext/docx4j/blob/master/src/samples/docx4j/org/docx4j/samples/ImageConvertEmbeddedToLinked.java會給你提示如何做到這一點。請注意,圖像有兩種不同的XML結構。較新的DrawingML XML和傳統的VML。

+0

偉大的作品!有沒有辦法不拉縮略圖?這似乎也拉動縮略圖。 – Anthony 2014-11-04 16:43:47

0

要訪問嵌入式圖像.docx文件,使用以下步驟:

◾If它尚未.docx文件,在Word 2007中打開文件,將文件保存爲Word文檔(* .DOCX)。 ◾將原始文件的文件擴展名從.docx更改爲.zip,如圖D所示。