POI把html寫入word doc文件

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

  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樣式。下面是一個針對於該方式的一個簡單例子:html

 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代碼以下apache

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

1.html對應的內容以下:app

<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>

效果圖ui

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

相關文章
相關標籤/搜索