POI把html寫入word doc文件


直接把Html文本寫入到Word文件

  1. 獲取查看頁面的body內容和引用的css文件路徑傳入到后台。
  2. 把對應css文件的內容讀取出來。
  3. 利用body內容和css文件的內容組成一個標准格式的Html文本。
  4. 根據組合后的Html文本生成對應的ByteArrayInputStream。
  5. 構建一個默認的POIFSFileSystem,並利用它和生成的ByteArrayInputStream創建一個WordDocument。
  6. 把構建的POIFSFileSystem寫入到對應的輸出流。

       經過上面這幾步之后我們就可以把Html格式的文本寫入到Word文件中,同時使生成的Word文件呈現出對應的Web樣式。需要注意的是原本Html文件中引用到的css文件的內容需要放到生成的Word文件中,生成后的Word文件才會呈現出對應的Web樣式。下面是一個針對於該方式的一個簡單例子:

 public void htmlToWord2() throws Exception {
          InputStream bodyIs = new FileInputStream("f:\\1.html");
          InputStream cssIs = new FileInputStream("f:\\1.css");
          String body = this.getContent(bodyIs);
          String css = this.getContent(cssIs);
          //拼一個標准的HTML格式文檔
          String content = "<html><head><style>" + css + "</style></head><body>" + body + "</body></html>";
          InputStream is = new ByteArrayInputStream(content.getBytes("GBK"));
          OutputStream os = new FileOutputStream("f:\\1.doc");
          this.inputStreamToWord(is, os);
       }
      
       /**
        * 把is寫入到對應的word輸出流os中
        * 不考慮異常的捕獲,直接拋出
        * @param is
        * @param os
        * @throws IOException
        */
       private void inputStreamToWord(InputStream is, OutputStream os) throws IOException {
          POIFSFileSystem fs = new POIFSFileSystem();
          //對應於org.apache.poi.hdf.extractor.WordDocument
          fs.createDocument(is, "WordDocument");
          fs.writeFilesystem(os);
          os.close();
          is.close();
       }
      
       /**
        * 把輸入流里面的內容以UTF-8編碼當文本取出。
        * 不考慮異常,直接拋出
        * @param ises
        * @return
        * @throws IOException
        */
       private String getContent(InputStream... ises) throws IOException {
          if (ises != null) {
             StringBuilder result = new StringBuilder();
             BufferedReader br;
             String line;
             for (InputStream is : ises) {
                br = new BufferedReader(new InputStreamReader(is, "UTF-8"));
                while ((line=br.readLine()) != null) {
                    result.append(line);
                }
             }
             return result.toString();
          }
          return null;
       }

1.css代碼如下

table {
       border: 1px solid blue;
       width: 800px;
       height: 500px;
       text-align: center;
}
td {
       width: 200px;
       border: 1px solid blue;
}

1.html對應的內容如下:

<table cellpadding="5" style="border-collapse: collapse;">
       <tr>
              <td>中文</td>
              <td>中文</td>
              <td>中文</td>
              <td>中文</td>
       </tr>
       <tr>
              <td>中文</td>
              <td>中文</td>
              <td>中文</td>
              <td>中文</td>
       </tr>
</table>

效果圖

(注:本文是基於poi3.9所寫)


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM