近有一個業務是前端要上傳word格式的文稿,然后用戶上傳完之后,可以用瀏覽器直接查看該文稿,并且可以在富文本框直接引用該文稿,所以上傳word文稿之后,后端保存到db的必須是html格式才行,所以涉及到word格式轉html格式。
通過調查,這個word和html的處理,有兩種方案,方案1是前端做這個轉換。方案2是把word文檔上傳給后臺,后臺轉換好之后再返回給前端。至于方案1,看到大家的反饋都說很多問題,所以就沒采用前端轉的方案,最終決定是后端轉化為html格式并返回給前段預覽,待客戶預覽的時候,確認格式沒問題之后,再把html保存到后臺(因為word涉及到的格式太多,比如圖片,visio圖,表格,圖片等等之類的復雜元素,轉html的時候,可能會很多格式問題,所以要有個預覽的過程)。
對于word中普通的文字,問題倒不大,主要是文本之外的元素的處理,比如圖片,視頻,表格等。針對我本次的文章,只處理了圖片,處理的方式是:后臺從word中找出圖片(當然引入的jar包已經帶了獲取word中圖片的功能),上傳到服務器,拿到絕對路徑之后,放入到html里面,這樣,返回給前端的html內容,就可以直接預覽了。
maven引入相關依賴包如下:
<poi-scratchpad.version>3.14</poi-scratchpad.version>
<poi-ooxml.version>3.14</poi-ooxml.version>
<xdocreport.version>1.0.6</xdocreport.version>
<poi-ooxml-schemas.version>3.14</poi-ooxml-schemas.version>
<ooxml-schemas.version>1.3</ooxml-schemas.version>
<jsoup.version>1.11.3</jsoup.version>
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi-scratchpad</artifactId>
<version>${poi-scratchpad.version}</version>
</dependency>
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi-ooxml</artifactId>
<version>${poi-ooxml.version}</version>
</dependency>
<dependency>
<groupId>fr.opensagres.xdocreport</groupId>
<artifactId>xdocreport</artifactId>
<version>${xdocreport.version}</version>
</dependency>
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi-ooxml-schemas</artifactId>
<version>${poi-ooxml-schemas.version}</version>
</dependency>
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>ooxml-schemas</artifactId>
<version>${ooxml-schemas.version}</version>
</dependency>
<dependency>
<groupId>org.jsoup</groupId>
<artifactId>jsoup</artifactId>
<version>${jsoup.version}</version>
</dependency>
word轉html,對于word2003和word2007轉換方式不一樣,因為word2003和word2007的格式不一樣,工具類如下:
使用方法如下:
public String uploadSourceNews(MultipartFile file) {
String fileName=file.getOriginalFilename();
String suffixName=fileName.substring(fileName.lastIndexOf("."));
if (!".doc".equals(suffixName) && !".docx".equals(suffixName)) {
throw new UploadFileFormatException();
}
DateTimeFormatter formatter=DateTimeFormatter.ofPattern("yyyyMM");
String dateDir=formatter.format(LocalDate.now());
String directory=imageDir + "/" + dateDir + "/";
String content=null;
try {
InputStream inputStream=file.getInputStream();
if ("doc".equals(suffixName)) {
content=wordToHtmlUtil.Word2003ToHtml(inputStream, imageBucket, directory, Constants.HTTPS_PREFIX + imageVisitHost);
} else {
content=wordToHtmlUtil.Word2007ToHtml(inputStream, imageBucket, directory, Constants.HTTPS_PREFIX + imageVisitHost);
}
} catch (Exception ex) {
logger.error("word to html exception, detail:", ex);
return null;
}
return content;
}
關于doc和docx的一些存儲格式介紹:
docx 是微軟開發的基于 xml 的文字處理文件。docx 文件與 doc 文件不同, 因為 docx 文件將數據存儲在單獨的壓縮文件和文件夾中。早期版本的 microsoft office (早于 office 2007) 不支持 docx 文件, 因為 docx 是基于 xml 的, 早期版本將 doc 文件另存為單個二進制文件。
DOCX is an XML based word processing file developed by Microsoft. DOCX files are different than DOC files as DOCX files store data in separate compressed files and folders. Earlier versions of Microsoft Office (earlier than Office 2007) do not support DOCX files because DOCX is XML based where the earlier versions save DOC file as a single binary file.
可能你會問了,明明是docx結尾的文檔,怎么成了xml格式了?
很簡單:你隨便選擇一個docx文件,右鍵使用壓縮工具打開,就能得到一個這樣的目錄結構:
所以你以為docx是一個完整的文檔,其實它只是一個壓縮文件。
參考:
https://www.cnblogs.com/ct-csu/p/8178932.html
、javaScript介紹
JavaScript是一種基于對象和事件驅動的、并具有安全性能的腳本語言
(客戶端語言)
JavaScript特點
向HTML頁面中添加交互行為
腳本語言,語法和Java類似
解釋性語言,邊解釋邊執行
JavaScript組成:ECMAScript 、DOM、BOM
基本結構:
<script type="text/javascript">
<!—
JavaScript 語句;
—>
</script >
示例:
……
<title>初學JavaScript</title>
</head>
<body>
<script type="text/javascript">
document.write("初學JavaScript");
document.write("<h1>Hello,JavaScript</h1>");
</script>
</body>
</html>
注:<script>…</script>可以包含在文檔中的任何地方,只要保證這些代碼在被使用前已讀取并加載到內存即可
執行原理:
外部JS文件:
<script src="export.js" type="text/javascript"></script>
直接在HTML標簽中使用:
<input name="btn" type="button" value="彈出消息框"
onclick="javascript:alert('歡迎你');"/>
二、基本常見語法:
1、核心語法:同時聲明和賦值變量
var catName="皮皮";
2、數據類型:
undefined:var width;
變量width沒有初始值,將被賦予值undefined;
null:表示一個空值,與undefined值相等;
number:var iNum=23; //整數
var iNum=23.0; //浮點數
boolean:true 和false;
string:一組被引號(單引號或雙引號)括起來的文本
var string1="This is a string";
3、typeof運算符:
typeof檢測變量的返回值
typeof運算符返回值如下函數
undefined:變量被聲明后,但未被賦值
string:用單引號或雙引號來聲明的字符串
boolean:true或false
number:整數或浮點數
object:javascript中的對象、數組和nul
4、String對象:
5、數組:
數組的常用屬性和方法
類別 名稱 描述
屬性 length 設置或返回數組中元素的數目
方法 join( ) 把數組的所有元素放入一個字符串,通過一個的分隔符進行分隔
sort() 對數組排序
push() 向數組末尾添加一個或更多 元素,并返回新的長度
6、邏輯控制語句:
if(條件)
{
//JavaScript代碼;
}
ava開發已經悄無聲息的走進我們的生活中,無論是手機軟件、手機Java游戲還是電腦軟件等,只要你使用到電子產品就會碰到和Java有關的東西,更多的企業正采用Java語言開發網站,也心音了好多志同道合的朋友開始加入Java開發的行列。千鋒教育強勢推出的Java+大數據的新課程,為更多的Java學習者打造更加先進的Java開發技術。
我們知道在Java的學習中,Javaweb是我們的必修階段,而在Javaweb開發中,我們學習的第一課便是HTML5和CSS的入門基礎。我們常說的要瀏覽的網頁就是由HTML語言來編寫的,而CSS就是能讓我們的網頁更加絢麗。通過HTML和CSS的編碼來顯示我們的網頁。所以web開發的必備技能便是HTML和CSS。
那什么是HTML呢?HTML就是超文本標記語言。下面是千鋒小編為大家準備的HTML的發展史,教你一步一步踏入Java的世界。
HTML1.0-2.0,分別是在1989年和1991年誕生,起初的這兩個版本只有幾個基本的標簽,而且做出來的網頁也不是很好看,但已經支持了超文本。所以幾乎web上的每一個人都有他們的主頁。
HTML3是在1995年的時候誕生,那時候還誕生了一場漫長而殘酷的瀏覽器戰爭,Netscape和 microsoft都在試圖爭霸世界,每個瀏覽器都在不斷的增加自己的專用擴展包。
HTML4有1998年誕生,此時瀏覽器戰爭結束web標準誕生,HTML的結構和表現分離到兩種語言,一種語言用于實現結構(HTML);一種語言用于表現(CSS)
HTML4.01在1999年誕生,與HTML4相比只是做了一些簡單的修補,所有的瀏覽器都采用一直的標準,除了IE瀏覽器,所以web開發人員都要單獨做一些工作。
XHTML在 2001年誕生,是XML和HTML的結合,只是XHTML相比于HTML的標準更加嚴格。但是web開發人員對HTML的靈活性更加的擁護。
HTML5是沿用了HTML4.01的大部分特性,提供了體現web新發展的新特性,完全支持XHTML風格的代碼,從此HTML5成為大家公認的標準。也就是我們現在都在用的版本HTML5。
HTML5 目標是書寫簡潔的HTML代碼,創建更加簡單的web程序。而我們HTML5常用的標簽:標題標簽、段落標簽、無序列表標簽、有序列表標簽等
我們目前用的CSS3是CSS的新標準,是對CSS2的更新,就像我們美麗的圖片,和我們在照片中做的特效,將我們的網頁裝飾的更加精彩,我們看起來更加舒服。
高樓之所以能高峨聳立,是因為有地基的權利支撐;同樣的Java開發之所以能夠盡善盡美,是因為我們的HTML和CSS的完美助力,學習Java開發從千鋒開始吧!
千鋒JavaEE+云數據講師團匯集行業頂尖師資,以從業經驗5年以上的技術大咖面授教學,原華為技術官、IBM技術負責人、中興項目負責人為首的千鋒講師,撐起國內JavaEE+云數據教學第一道防線,力保Java的教學品質。選擇千鋒Java培訓,是你成功的開始,過程中的努力,讓你的成功成為必然!
*請認真填寫需求信息,我們會在24小時內與您取得聯系。