Apache POI 操做Word部分

Apache POI
                      ----Word部分
                                



最近在研究Apache POI,不過只研究瞭如何作word的部分。網上對於Excel等的介紹也不少例子也不少,可是對於word缺乏的可憐,致使我學的也很費勁,只能算是會了皮毛。可是整理了下例子,也方便之後你們看。最好能有高手把這個word部分的知識和例子多傳到網上給你們分享。 
Apache POI是一個開源的利用Java讀寫Excel、WORD等微軟OLE2組件文檔的項目。最新的版本有不少改進,加入了對採用OOXML格式的 Office 2007支持,如xlsx、docx、pptx文檔。如下是POI的幾個重要組成部分,以及各組件的功能概述。
POIFS是該項目的最古老,最穩定的一部分。.這是格式化OLE 2複合文檔爲純Java的接口。 它同時支持讀寫功能。全部的組件,最終都依賴於它的定義 HSSF: MS-Excel 97-2003(.xls),基於BIFF8格式的JAVA接口。 XSSF:MS-Excel 2007+(.xlsx),基於OOXML格式的JAVA接口。
HWPF: MS-Word 97-2003(.doc),基於BIFF8格式的JAVA接口。只支持.doc文件簡單的操做,讀寫能力有限。本API爲POI項目早期開發,很不幸的 是主要負責HWPF模塊開發的工程師-"Ryan Ackley"已經離開Apache組織,如今該模塊沒有人維護、更新、完善。 XWPF:MS-Word 2007+(.docx),基於OOXML格式的JAVA接口。較HWPF功能完善。 
Word例子:
1讀取一個word裏的內容,只能讀取純文字,word裏不能有圖片表格等,不然圖片和表格就會成爲亂碼。輸出結果在後臺顯示 
import java.io.FileInputStream;
import java.io.FileNotFoundException; import java.io.IOException;
import org.apache.poi.hwpf.extractor.WordExtractor; 
//輸出文字
public class world {
public static void main(String [] args){  FileInputStream file;  try {   file = new FileInputStream("d:\\a.doc");   WordExtractor extractor;    try {        extractor = new WordExtractor(file);    String st=extractor.getText();    System.out.println(st);    } catch (IOException e) {    // TODO Auto-generated catch block    e.printStackTrace();   }



 


   } catch (FileNotFoundException e) {   // TODO Auto-generated catch block   e.printStackTrace();  }   }    }
用另外一種方式也能夠輸出文字
public class world2 {   public static void main(String[] args) throws Exception{   FileInputStream file;   try {    file=new FileInputStream("d:\\a.doc");
 
 
HWPFDocument hDocument= new HWPFDocument(file);
           Range rang= hDocument.getRange();            String string=rang.text();          
         System.out.println(string);   } catch (FileNotFoundException e) {    // TODO Auto-generated catch block    e.printStackTrace();
 
}
} }
2,把從一個word裏讀出來的內容寫到另外一個裏,雖然能夠寫進去,可是隻能把文字、數字、字母等寫進去,圖片和表格依舊不能夠。並且寫進去的文字只能是字符形式寫進去,這樣在打開word文檔時就會有個轉換器的問題。可是能夠寫進去,不知道怎麼解決。 import java.io.*;
import org.apache.poi.hwpf.HWPFDocument;
import org.apache.poi.hwpf.model.io.HWPFOutputStream; import org.apache.poi.hwpf.usermodel.Range; public class wordWrite {  public static void main(String [] args){ 
        try {
//用了HWPFDocument API對於他的解釋是:做爲一個存儲桶,咱們把全部的word數據拋出到其中 個人理解就是把輸入流讀取的word數據都放到他這裏了 以便調用方法使用
         HWPFDocument hDocument= new HWPFDocument(new
FileInputStream("d:\\a.doc"));
           Range range= hDocument.getRange();
          
 
          String st=range.text();//得到了word裏的內容
              writeDoc("d:\\a.doc",st);//調用寫入的方法            System.out.println(st);



 


         } catch (Exception e) {              e.printStackTrace();          }              }
 public static boolean writeDoc(String path, String string) {   
  boolean w = false;   try {    byte b[] = string.getBytes("utf-8");
   ByteArrayInputStream bais = new ByteArrayInputStream(b);    POIFSFileSystem fs = new POIFSFileSystem();    DirectoryEntry directory = fs.getRoot();
   DocumentEntry de = directory.createDocument("WordDocument", bais);
   FileOutputStream ostream = new FileOutputStream(path);    fs.writeFilesystem(ostream);    bais.close();    ostream.close();   } catch (IOException e) {
   e.printStackTrace();
  }
 
return w;
} }
三、把word文檔裏的某個內容替換成所須要的別的內容。也能夠說是修改爲本身想要的內容。可是仍是僅限於修改文字。 public class word {   public static void main(String [] args){          try {
          HWPFDocument hDocument= new HWPFDocument(new FileInputStream("d:\\a.doc"));
 
          Range range= hDocument.getRange();
 
//在這裏把word裏的name替換成組織 固然word裏要已經有了name這個單詞
其實這個時候replaceText()方法並無真正的替換了你原有word裏的內容 你打開文檔裏面依舊顯示name 可是你看後臺輸出的內容是已經修改了的 這就又須要把修改的內容寫進word                    range.replaceText("name","組織1");            String st=range.text();               writeDoc("d:\\a.doc",st);
           System.out.println(st);          } catch (Exception e) {              e.printStackTrace(); 
        }



 


            
}
public static boolean writeDoc(String path, String string) { 
//這裏的寫入我換了個方式 不過相似 依舊是以字節的形式寫入 仍是會有什麼轉換器的錯誤
我研究很久沒解決這個問題   boolean w = false;        try {  
         byte b[] = string.getBytes(); 
         FileOutputStream fs = new FileOutputStream(「d://b.doc」);          HWPFOutputStream hos = new HWPFOutputStream();          hos.write(b, 0, b.length);          hos.writeTo(fs);          hos.close();                   w=true;
     } catch (Exception e) {            e.printStackTrace();        }        return w;  }  
 
4,把整個word裏的內容讀出來 寫入另外一個裏 此次不管是圖片仍是文字或者表格均可以寫入,並且沒有那個轉換器的錯誤了。可是其實就至關於複製了一個word到另外一個word裏。卻沒法實現修改內容在寫入啊 或者別的。 public class word2 {  public static void main(String[] args) {  
try {
 
POIFSFileSystem fs = new POIFSFileSystem(new FileInputStream("d:\\bb.doc"));
            HWPFDocument hDocument = new HWPFDocument(fs);    Range range = hDocument.getRange();
      String st = range.text();
   FileOutputStream out = new FileOutputStream("d:\\cc.doc");       fs.writeFilesystem(out);    out.flush();    out.close();
   System.out.println(st);   } catch (Exception e) {
   e.printStackTrace();  
}
  } }
五、這個是把圖片從word裏讀出來 生成一張圖片 也就是個.jpg的圖片。可是我讀出來卻無



 





 

 java

相關文章
相關標籤/搜索