word轉html(一)

1、依賴的包,部署環境
html

2、後臺代碼實現java

import com.jacob.activeX.ActiveXComponent;
import com.jacob.com.Dispatch;
import com.jacob.com.Variant;

/**
	 *
	 * <p>【導入word文件,解析word文件轉換成HTML】</p>
	 * <p>條件:</p>
	 * <p>備註:</p>
	 * <p>例子:</p>
	 * <p>日誌:</p>
	 *
	 * @author:zhu  [2016年1月29日 下午2:50:28]
	 */
	public void importDocToHtml() {
		//啓動word
		ActiveXComponent axc = new ActiveXComponent("Word.Application");
		StringWriter stringWriter = null;
		try {
			// doc臨時存放文件夾路徑
			String realpath = ServletActionContext.getServletContext().getRealPath("/UserUploadFile/WordToHTML");
			File tempfile = null;
			if (docFile != null) {
				String tempName = String.valueOf((new Date()).getTime());
				tempfile = new File(new File(realpath), tempName + ".doc");
				//判斷文件是否存在
				if (!tempfile.getParentFile().exists()) {
					//建立文件
					tempfile.getParentFile().mkdirs();
				}
				//copy文件的建立的文件上
				FileUtils.copyFile(docFile, tempfile);
				//設置word不可見
				axc.setProperty("Visible", new Variant(false));
				Dispatch docs = axc.getProperty("Documents").toDispatch();
				//打開word文檔
				Dispatch doc = Dispatch.invoke(docs, "Open", Dispatch.Method,
						new Object[] { docFile.getPath(), new Variant(false), new Variant(true) }, new int[1])
						.toDispatch();
				String htmlUrl = tempfile.getPath().substring(0, tempfile.getPath().lastIndexOf(".") + 1) + "html";
				//做爲html格式保存到臨時文件
				Dispatch.invoke(doc, "SaveAs", Dispatch.Method, new Object[] { htmlUrl, new Variant(8) }, new int[1]);
				//下方若是報錯,去除f參數變量
				//0不保存修改 -1 保存修改 -2 提示是否保存修改 
				Variant f = new Variant(0);
				Dispatch.call(doc, "Close", f);
				//刪除文件
				//FileUtils.forceDelete(tempfile);
				File file = new File(htmlUrl);
				//讀取須要注意編碼
				InputStreamReader isr = new InputStreamReader(new FileInputStream(file), "gbk");
				BufferedReader br = new BufferedReader(isr);
				String s = null;
				StringBuffer html = new StringBuffer();
				while ((s = br.readLine()) != null) {//使用readLine方法,一次讀一行
					html.append(s);
				}
				br.close();
				Map<String, Object> result = new HashMap<String, Object>();
				//由於一次讀一行的緣由,能夠標籤和屬性之間沒間隔,因此須要格式化
				result.put("html", formatHTML(html.toString(), tempName));
				// 操做成功的話,將文檔id返回
				Struts2Utils.outJSON(result);
			}
		} catch (Exception e) {
			setErrMessage("導入Excel數據錯誤,請檢查數據!");
		} finally {
			axc.invoke("Quit", new Variant[] {});
		}
	}
	/**
	 * 
	 * <p>【對當前html進行處理】</p>
	 * <p>條件:</p>
	 * <p>備註:若是有圖片會在html同目錄下生成一個存放圖片的文件夾</p>
	 * <p>例子:</p>
	 * <p>日誌:</p>
	 *
	 * @param html			html的內容
	 * @param htmlName		html文件名
	 * @return
	 * @author:zhu  [2016年2月3日 下午5:01:36]
	 */
	private String formatHTML(String html, String htmlName) {
		//截取出body中的內容
		html = html.substring(html.indexOf("body"), html.lastIndexOf("body"));
		html = html.substring(html.indexOf(">") + 1, html.lastIndexOf("<"));
		//對src、style、lang進行處理,可能和標籤連接緊密
		html = html.replaceAll("src", "\t src").replaceAll("style", "\t style").replaceAll("lang", "\t lang");
		//圖片須要真是的路徑
		html = html.replaceAll(htmlName, "../../UserUploadFile/WordToHTML/" + htmlName);
		return html;
	}

3、前臺實現app

     前臺主要一個上傳,和獲取html代碼後直接賦值到編輯器上的功能。編輯器

    我使用uploadify實現上傳,核心代碼post

$(function() {
		$("#fileUp").uploadify({
			swf				: '${request.contextPath}/resources/uploadify/uploadify.swf', 
			uploader		: 'hdAction!importDocToHtml.shtml',							// 用於接收上傳文件的action
			auto			: true,									// 是否自動開始 上傳
			buttonText		: '導入Word', 							// 按鈕上的文字 
			debug			: false,								// 是否調試狀態
			fileObjName		: 'docFile',							// action中的文件對象名
	 		fileSizeLimit	: (100*1024*1024), 						// 設置單個文件大小限制,單位爲byte。設置爲100m
			fileTypeDesc	: '支持格式:*.doc', 				// 若是配置瞭如下的'fileExt'屬性,那麼這個屬性是必須的  
	 		fileTypeExts	: '*.doc',								// 容許的格式,如:*.jpg;*.gif;*.jpeg;*.png;*.bmp
			method          : 'post',								// 上傳數據的方法
			multi			: true,									// 是否支持多文件上傳 
			onUploadSuccess : function(file, data, response) {
				var result=$.parseJSON(data);
				//eWebEditor編輯器賦值
				$("#eWebEditor1").contents().find("body").find("#eWebEditor").contents().find("body").html(result.html);
			},
			onError: function(event, queueID, fileObj) {
				alert("文件:" + fileObj.name + "上傳失敗!");  
			},		
			onUploadError : function(file,errorCode,errorMsg,errorString,swfuploadifyQueue) {// 上傳文件出錯是觸發(每一個出錯文件觸發一次)
				alert( '上傳文件出錯,id: ' + file.id
						+ ' \r\n- 索引: ' + file.index
						+ ' \r\n- 文件名: ' + file.name
						+ ' \r\n- 文件大小: ' + file.size
						+ ' \r\n- 類型: ' + file.type
						+ ' \r\n- 建立日期: ' + file.creationdate
						+ ' \r\n- 修改日期: ' + file.modificationdate
						+ ' \r\n- 文件狀態: ' + file.filestatus
						+ ' \r\n- 錯誤代碼: ' + errorCode
						+ ' \r\n- 錯誤描述: ' + errorMsg
						+ ' \r\n- 簡要錯誤描述: ' + errorString
						+ ' \r\n- 出錯的文件數: ' + swfuploadifyQueue.filesErrored
						+ ' \r\n- 錯誤信息: ' + swfuploadifyQueue.errorMsg
						+ ' \r\n- 要添加至隊列的數量: ' + swfuploadifyQueue.filesSelected
						+ ' \r\n- 添加至對立的數量: ' + swfuploadifyQueue.filesQueued
						+ ' \r\n- 隊列長度: ' + swfuploadifyQueue.queueLength);
			},
			onCancel: function(event, queueID, fileObj){  
				//alert("取消了" + fileObj.name);  
			}
		});	
	})
<tr>
    	<th></th>
    	<td><input type='file' id='fileUp' name='fileUp' /></td>
  </tr>
相關文章
相關標籤/搜索