2017-03-08 8 views
1

私はdocxファイルからすべてのイメージを抽出する作業をしました。私は同じように以下のスニペットを利用しています。私はApache POI apiを同じものに使用しています。JAX:docxドキュメントからフッターイメージを抽出する

`File file = new File(InputFileString); 
FileInputStream fs = new FileInputStream(file.getAbsolutePath()); 
//FileInputStream fs=new FileInputStream(src); 
    //create office word 2007+ document object to wrap the word file 
    XWPFDocument doc1x=new XWPFDocument(fs); 
    //get all images from the document and store them in the list piclist 
    List<XWPFPictureData> piclist=doc1x.getAllPictures(); 
    //traverse through the list and write each image to a file 
    Iterator<XWPFPictureData> iterator=piclist.iterator(); 
    int i=0; 
    while(iterator.hasNext()){ 
    XWPFPictureData pic=iterator.next(); 
    byte[] bytepic=pic.getData(); 
    BufferedImage imag=ImageIO.read(new ByteArrayInputStream(bytepic)); 
      ImageIO.write(imag, "jpg", new File("C:/imagefromword"+i+".jpg")); 
      i++; 
    }` 

ただし、このコードでは、ドキュメントのフッターセクションまたはヘッダーセクションにあるイメージは検出されません。

私はGoogleの技術を広く使っていて、役に立たないものはありませんでした。

docxファイルのフッターセクションに画像ファイルを取り込むことはできますか?

+0

ヘッダーとフッターに[getAllPictures](https://poi.apache.org/apidocs/org/apache/poi/xwpf/usermodel/XWPFHeaderFooter.html#getAllPictures())を呼び出そうとしましたか? – Gagravarr

答えて

1

私はApache POI問題には専門家ではないが、単純な検索はthisコードを思い付いた:

package com.concretepage; 
import java.io.FileInputStream; 
import org.apache.poi.openxml4j.opc.OPCPackage; 
import org.apache.poi.xwpf.model.XWPFHeaderFooterPolicy; 
import org.apache.poi.xwpf.usermodel.XWPFDocument; 
import org.apache.poi.xwpf.usermodel.XWPFFooter; 
import org.apache.poi.xwpf.usermodel.XWPFHeader; 
public class ReadDOCXHeaderFooter { 
    public static void main(String[] args) { 
    try { 
    FileInputStream fis = new FileInputStream("D:/docx/read-test.docx"); 
    XWPFDocument xdoc=new XWPFDocument(OPCPackage.open(fis)); 
    XWPFHeaderFooterPolicy policy = new XWPFHeaderFooterPolicy(xdoc); 
    //read header 
    XWPFHeader header = policy.getDefaultHeader(); 
    System.out.println(header.getText()); 
    //read footer 
    XWPFFooter footer = policy.getDefaultFooter(); 
    System.out.println(footer.getText()); 
    } catch(Exception ex) { 
    ex.printStackTrace(); 
    } 
    } 
} 

そしてXWPFFooterクラスの直接の父のクラスが含まれているXWPFHeaderFooterのドキュメントページ(上記の例...)は、ドキュメント本体のすべての画像を繰り返し処理するのに使用した同じgetAllPicturesメソッドを示しています。

モバイルでは、実際には何もテストしていませんが、それはうまくいくように見えます。

幸運を祈る!

関連する問題