日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

java导出html word文档_java生成带html样式的word文件

發布時間:2024/3/12 编程问答 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 java导出html word文档_java生成带html样式的word文件 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

最近在項目中需要將通過富文本編輯器處理過的文字轉換為Word,查了很久,大家通常的解決辦法是使用Jacob或POI等組件直接生成Word,但是都無法將富文本編輯器處理過的文字保留樣式并保存為Word,最終以失敗而告終,無奈只有自己研究Word的格式轉換;

分析了轉換過程,總體分兩個步驟:

1、實現富文本中樣式代碼的分離;

2、保留CSS樣式;

其實以上兩個步驟是相互矛盾的處理過程,無法通過Jacob或POI組件加正則表達式過濾解決,于是進行了以下步驟的實驗:

1、首先創建了一個空白word文檔,格式(office 2003格式或office 2007格式)不限;

2、將word格式保存為html格式,通過Edit Plus打開,發現代碼中使用了office的命名空間,同時使用了office命名空間的標簽定義了CSS樣式,自己測試了一下,將生成的html文件頭和尾拷貝出來:代碼如下:

xmlns:o="urn:schemas-microsoft-com:office:office"

xmlns:w="urn:schemas-microsoft-com:office:word"

xmlns:m="http://schemas.microsoft.com/office/2004/12/omml"

xmlns="http://www.w3.org/TR/REC-html40">

以上HTML頭是office的命名空間定義。

3、將使用富文本代碼粘貼到紅色標識的中,并以doc或docx格式保存文件;

4、大功告成,打開文件時,Word將會以“Web版視圖”完美顯示了富文本樣式,成功解決了富文本代碼中樣式代碼,并同時保留了格式;

目前研究的僅能保存文字,未處理有圖片的代碼,朋友們可以再研究一下帶圖片的富文本代碼的轉換;

[@more@]

根據上面的,現在我們只需要在服務器建一個.doc的文件,然后再把我們的帶html樣式的文本寫到這個文件中,再下載到客戶端就可以了

下面實現的代碼,首先寫一個工具類用來生成word文件

package net.uni.util;

import java.io.File;

import java.io.FileOutputStream;

import java.io.OutputStreamWriter;

/**

* 處理內容:生成帶html樣式的word文檔

* @version: 1.0

* @see:net.uni.util.JavaWordUtil.java

* @date:2012-7-5

* @author:孫偉

*/

public class JavaWordUtil {

private JavaWordUtil(){}

private static String CHARSET = "gbk";//編碼格式

private static String PATH = "E:uploadword";//本地測試路徑

//private static String PATH = "/home/upload/base/word/";//服務器文件存放路徑

/**

* @param fileName

* @param content

* @return

* @方法說明 生成word文檔,如果返回null,則表示生成失敗

* @date 2012-7-5

* @author 孫偉

*/

public static String createWordFile(String fileName,String content){

OutputStreamWriter os = null;

FileOutputStream fos = null;

try{

if(fileName.indexOf(".doc")>-1){

fileName = fileName.substring(0, fileName.length()-4);

}

File file = new File(PATH);

//如果目錄不存在就創建

if (!(file.exists() && file.isDirectory())) {

file.mkdirs();

}

fileName = PATH + "" + fileName + "-" +System.currentTimeMillis() + ".doc";

//創建文件

File targetFile = new File(fileName);

if(!targetFile.exists()){

targetFile.createNewFile();

}

fos = new FileOutputStream(fileName);

os = new OutputStreamWriter(fos,CHARSET);

os.append(content.toString());

os.flush();

return fileName;

}catch(Exception e){

return null;

}finally{

try{

os.close();

fos.close();

}catch(Exception e){

return null;

}

}

}

}

然后就是struts2配置下載文件的步驟:

action里定義兩個屬性

private String conFileName;//生成的合同模板的word文件名稱

private InputStream inputStream;//下載商務合同模板流

注意這兩個屬性的文件名稱的get方法有些不同,為了處理文件名中文亂碼的問題

public String getConFileName() {

String downFileName = conFileName;

try {

downFileName = new String(downFileName.getBytes(), "ISO8859-1");

} catch (UnsupportedEncodingException e) {

e.printStackTrace();

}

return downFileName;

}

然后是action的主方法

/**

* @return

* @throws ActionException

* @方法說明 下載商務合同模板

* @date 2012-7-5

* @author 孫偉

*/

public String downLoadCustCon() throws ActionException{

try{

StringBuffer content = new StringBuffer();

Long conId = this.cscustcon.getId();

this.cscustcon = this.csCustConService.findCsCustConbyID(conId);

List?conHead = csCustConService.findCustConHeadInfo(conId);

//合同頭信息

for(String s : conHead){

content.append(s);

}

//合同條款已經條款的內容

List conItem = csCustConService.findCustConContent(conId);

for(List?ls : conItem){

for(String sl : ls){

content.append(sl);

}

}

String filePath = JavaWordUtil.createWordFile(cscustcon.getContName(), content.toString());

if(filePath==null||filePath.trim().equals("")) throw new ActionException("合同模板下載失敗");

File file = new File(filePath);

if(!file.exists()){

throw new ActionException("文件不存在!");

}

conFileName = cscustcon.getContName()+".doc";

inputStream = new FileInputStream(file);

}catch(Exception e){

throw new ActionException("下載商務合同模板失敗",e);

}

return SUCCESS;

}

struts.xml文件的配置:

inputStream

application/octet-stream;charset=ISO8859-1

attachment;filename=${conFileName}

2048

頁面的寫法:

window.location.href=getBasePath()+"/cs/downLoadCustCon.action?cscustcon.id="+conId+"&itemContent="+$("#itemContentId").val();

到此下面帶html樣式的word文件就完成了

轉自:http://blog.itpub.net/25261409/viewspace-1058739/

總結

以上是生活随笔為你收集整理的java导出html word文档_java生成带html样式的word文件的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。