直接把Html文本寫入到Word文件
- 獲取查看頁面的body內容和引用的css文件路徑傳入到后台。
- 把對應css文件的內容讀取出來。
- 利用body內容和css文件的內容組成一個標准格式的Html文本。
- 根據組合后的Html文本生成對應的ByteArrayInputStream。
- 構建一個默認的POIFSFileSystem,並利用它和生成的ByteArrayInputStream創建一個WordDocument。
- 把構建的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所寫)