java生成帶html樣式的word檔案
參考:http://blog.csdn.net/xiexl/article/details/6652230
最近在專案中需要將透過富文字編輯器處理過的文字轉換為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=""
xmlns="">
<!-- 富文字程式碼區 -->
以上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
//合同頭資訊
for(String s : conHead){
content.append(s);
}
//合同條款已經條款的內容
List> conItem = csCustConService.findCustConContent(conId);
for(List
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檔案就完成了
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/25261409/viewspace-1058739/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Java 讀取txt檔案生成Word文件Java
- 用php生成HTML檔案的類PHPHTML
- 我是如何使用freemarker生成Word檔案的?
- java生成word文件Java
- C# 讀取txt檔案生成Word文件C#
- pageoffice線上開啟word檔案生成表格
- java 生成 excel檔案JavaExcel
- Python解析XML檔案生成HTMLPythonXMLHTML
- Oracle使用SQL*Plus生成html檔案OracleSQLHTML
- 【odoo】【知識點】生成pdf檔案時缺少樣式的問題Odoo
- Caj檔案怎樣整篇轉換成Word
- java 對word 檔案的讀寫問題Java
- 怎樣用純HTML和CSS更改預設的上傳檔案按鈕樣式HTMLCSS
- 用Python將word檔案轉換成htmlPythonHTML
- DocTemplateTool - 可根據模板生成word或pdf檔案的工具
- Flask中怎樣返回html檔案?FlaskHTML
- java生成PDF檔案【Z】Java
- HTML樣式HTML
- HTML 樣式HTML
- asp.net (C#)生成html檔案ASP.NETC#HTML
- Java 將Word轉為HTML的方法JavaHTML
- Java 將HTML轉為WordJavaHTML
- 請問怎麼樣用流讀WORD檔案?
- freemarker生成複雜樣式圖片並無檔案損壞的excelExcel
- html預設的樣式HTML
- 把domino 的文件生成 doc 或者 html 檔案的實現HTML
- wangEditor編輯器過濾word文件自帶標籤樣式
- word怎麼恢復儲存前的檔案,word檔案恢復
- Word中的樣式設定快捷鍵
- Java 根據模板生成 PDF 檔案 以及 excel 檔案JavaExcel
- electron中使用adm-zip將多個excel檔案壓縮排資料夾,使用XLSX以及XLSXStyle生成帶樣式excel檔案Excel
- word檔案怎樣取消只讀模式 把只讀檔案轉化為可編輯檔案模式
- java 生成 zip格式 壓縮檔案Java
- Java壓縮檔案生成工具類Java
- word自動儲存的檔案怎麼恢復,word檔案恢復
- bootstrap中好看的檔案上傳樣式boot
- 檔案上傳按鈕樣式
- dos下的exp匯出日期檔名樣式的檔案