Java引用POI實現Word轉Html方法
1.下載POI工具並引用
2.讀取整個doc文件,獲得該文件的所有字串。
3.從該字串中得到標題,把該標題構成一個HTML格式的字串,如<html><head><title>測試文件</title></head><body>。
4.從該文件中判斷是否有表格,如有,把每個表格的開始偏移量,結束偏移量記錄下來,同時根據每個表格的行,列讀取表格的內容,並構造出表格的HTML字串。
5.從該字串的第一個字元開始逐個字元迴圈,得到字元的字型,字號大小,直到下一個字元的字型,字號不一樣時,把這些字元內容構造成一個HTML格式的字串。
6.如果碰到字元為回車符,製表符,把回車符,製表符構造成HTML格式的字串。
7.如果碰到字元為圖片,讀取圖片,把圖片放在指定路徑,再把這一路徑的資訊構造成HTML字串,如<img src='c://test//1.jpg'/>。
8.如讀取字串的位置等於表格的開始偏移量時,插入前面一構造出的表格HTML字串,同時跳過表格的結束偏移量,繼續往下迴圈讀取字元。
9.由於以上讀取是按字串逐個讀取,並且根據字元的變化同時構造出HTML字串,所以當字串讀取完畢後,即構造出一個完整的HTML字串。
10.舉例
Word檔案
HTML檔案
11.原始碼
WordExcelToHtml.java
- package com;
- import java.io.BufferedWriter;
- import java.io.File;
- import java.io.FileInputStream;
- import java.io.FileNotFoundException;
- import java.io.FileOutputStream;
- import java.io.IOException;
- import java.io.OutputStream;
- import java.io.OutputStreamWriter;
- import org.apache.poi.hwpf.HWPFDocument;
- import org.apache.poi.hwpf.model.PicturesTable;
- import org.apache.poi.hwpf.usermodel.CharacterRun;
- import org.apache.poi.hwpf.usermodel.Picture;
- import org.apache.poi.hwpf.usermodel.Range;
- import org.apache.poi.hwpf.extractor.WordExtractor;
- import org.apache.poi.hwpf.usermodel.Paragraph;
- import org.apache.poi.hwpf.usermodel.Table;
- import org.apache.poi.hwpf.usermodel.TableCell;
- import org.apache.poi.hwpf.usermodel.TableIterator;
- import org.apache.poi.hwpf.usermodel.TableRow;
- publicclass WordExcelToHtml {
- /**
- * 回車符ASCII碼
- */
- privatestaticfinalshort ENTER_ASCII = 13;
- /**
- * 空格符ASCII碼
- */
- privatestaticfinalshort SPACE_ASCII = 32;
- /**
- * 水平製表符ASCII碼
- */
- privatestaticfinalshort TABULATION_ASCII = 9;
- publicstatic String htmlText = "";
- publicstatic String htmlTextTbl = "";
- publicstaticint counter=0;
- publicstaticint beginPosi=0;
- publicstaticint endPosi=0;
- publicstaticint beginArray[];
- publicstaticint endArray[];
- publicstatic String htmlTextArray[];
- publicstaticboolean tblExist=false;
- publicstaticfinal String inputFile="c://bb.doc";
- publicstaticvoid main(String argv[])
- {
- try {
- getWordAndStyle(inputFile);
- } catch (Exception e) {
- // TODO Auto-generated catch block
- e.printStackTrace();
- }
- }
- /**
- * 讀取每個文字樣式
- *
- * @param fileName
- * @throws Exception
- */
- publicstaticvoid getWordAndStyle(String fileName) throws Exception {
- FileInputStream in = new FileInputStream(new File(fileName));
- HWPFDocument doc = new HWPFDocument(in);
- Range rangetbl = doc.getRange();//得到文件的讀取範圍
- TableIterator it = new TableIterator(rangetbl);
- int num=100;
- beginArray=newint[num];
- endArray=newint[num];
- htmlTextArray=new String[num];
- // 取得文件中字元的總數
- int length = doc.characterLength();
- // 建立圖片容器
- PicturesTable pTable = doc.getPicturesTable();
- htmlText = "<html><head><title>" + doc.getSummaryInformation().getTitle() + "</title></head><body>";
- // 建立臨時字串,好加以判斷一串字元是否存在相同格式
- if(it.hasNext())
- {
- readTable(it,rangetbl);
- }
- int cur=0;
- String tempString = "";
- for (int i = 0; i < length - 1; i++) {
- // 整篇文章的字元通過一個個字元的來判斷,range為得到文件的範圍
- Range range = new Range(i, i + 1, doc);
- CharacterRun cr = range.getCharacterRun(0);
- //beginArray=new int[num];
- //endArray=new int[num];
- //htmlTextArray=new String[num];
- if(tblExist)
- {
- if(i==beginArray[cur])
- {
- htmlText+=tempString+htmlTextArray[cur];
- tempString="";
- i=endArray[cur]-1;
- cur++;
- continue;
- }
- }
- if (pTable.hasPicture(cr)) {
- htmlText += tempString ;
- // 讀寫圖片
- readPicture(pTable, cr);
- tempString = "";
- }
- else {
- Range range2 = new Range(i + 1, i + 2, doc);
- // 第二個字元
- CharacterRun cr2 = range2.getCharacterRun(0);
- char c = cr.text().charAt(0);
- System.out.println(i+"::"+range.getEndOffset()+"::"+range.getStartOffset()+"::"+c);
- // 判斷是否為回車符
- if (c == ENTER_ASCII)
- {
- tempString += "<br/>";
- }
- // 判斷是否為空格符
- elseif (c == SPACE_ASCII)
- tempString += " ";
- // 判斷是否為水平製表符
- elseif (c == TABULATION_ASCII)
- tempString += " ";
- // 比較前後2個字元是否具有相同的格式
- boolean flag = compareCharStyle(cr, cr2);
- if (flag)
- tempString += cr.text();
- else {
- String fontStyle = "<span style="font-family:" + cr.getFontName() + ";font-size:" + cr.getFontSize() / 2 + "pt;";
- if (cr.isBold())
- fontStyle += "font-weight:bold;";
- if (cr.isItalic())
- fontStyle += "font-style:italic;";
- htmlText += fontStyle + "" mce_style="font-family:" + cr.getFontName() + ";font-size:" + cr.getFontSize() / 2 + "pt;";
- if (cr.isBold())
- fontStyle += "font-weight:bold;";
- if (cr.isItalic())
- fontStyle += "font-style:italic;";
- htmlText += fontStyle + "">" + tempString + cr.text() + "</span>";
- tempString = "";
- }
- }
- }
- htmlText += tempString+"</body></html>";
- writeFile(htmlText);
- }
- /**
- * 讀寫文件中的表格
- *
- * @param pTable
- * @param cr
- * @throws Exception
- */
- publicstaticvoid readTable(TableIterator it, Range rangetbl) throws Exception {
- htmlTextTbl="";
- //迭代文件中的表格
- counter=-1;
- while (it.hasNext())
- {
- tblExist=true;
- htmlTextTbl="";
- Table tb = (Table) it.next();
- beginPosi=tb.getStartOffset() ;
- endPosi=tb.getEndOffset();
- System.out.println("............"+beginPosi+"...."+endPosi);
- counter=counter+1;
- //迭代行,預設從0開始
- beginArray[counter]=beginPosi;
- endArray[counter]=endPosi;
- htmlTextTbl+="<table border>";
- for (int i = 0; i < tb.numRows(); i++) {
- TableRow tr = tb.getRow(i);
- htmlTextTbl+="<tr>";
- //迭代列,預設從0開始
- for (int j = 0; j < tr.numCells(); j++) {
- TableCell td = tr.getCell(j);//取得單元格
- int cellWidth=td.getWidth();
- //取得單元格的內容
- for(int k=0;k<td.numParagraphs();k++){
- Paragraph para =td.getParagraph(k);
- String s = para.text().toString().trim();
- if(s=="")
- {
- s=" ";
- }
- System.out.println(s);
- htmlTextTbl += "<td width="+cellWidth+ ">"+s+"</td>";
- System.out.println(i+":"+j+":"+cellWidth+":"+s);
- } //end for
- } //end for
- } //end for
- htmlTextTbl+="</table>" ;
- htmlTextArray[counter]=htmlTextTbl;
- } //end while
- }
- /**
- * 讀寫文件中的圖片
- *
- * @param pTable
- * @param cr
- * @throws Exception
- */
- publicstaticvoid readPicture(PicturesTable pTable, CharacterRun cr) throws Exception {
- // 提取圖片
- Picture pic = pTable.extractPicture(cr, false);
- // 返回POI建議的圖片檔名
- String afileName = pic.suggestFullFileName();
- OutputStream out = new FileOutputStream(new File("c://test" + File.separator + afileName));
- pic.writeImageContent(out);
- htmlText += "<img src="c://test//" + afileName + "" mce_src="c://test//" + afileName + ""/>";
- }
- publicstaticboolean compareCharStyle(CharacterRun cr1, CharacterRun cr2)
- {
- boolean flag = false;
- if (cr1.isBold() == cr2.isBold() && cr1.isItalic() == cr2.isItalic() && cr1.getFontName().equals(cr2.getFontName()) && cr1.getFontSize() == cr2.getFontSize())
- {
- flag = true;
- }
- return flag;
- }
- /**
- * 寫檔案
- *
- * @param s
- */
- publicstaticvoid writeFile(String s) {
- FileOutputStream fos = null;
- BufferedWriter bw = null;
- try {
- File file = new File("c://abc.html");
- fos = new FileOutputStream(file);
- bw = new BufferedWriter(new OutputStreamWriter(fos));
- bw.write(s);
- } catch (FileNotFoundException fnfe) {
- fnfe.printStackTrace();
- } catch (IOException ioe) {
- ioe.printStackTrace();
- } finally {
- try {
- if (bw != null)
- bw.close();
- if (fos != null)
- fos.close();
- } catch (IOException ie) {
- }
- }
- }
相關推薦
Java引用POI實現Word轉Html方法
1.下載POI工具並引用 2.讀取整個doc文件,獲得該文件的所有字串。 3.從該字串中得到標題,把該標題構成一個HTML格式的字串,如<html><head><title>測試文件</title></head&
POI實現Word轉HTML檔案
package cn.wgd.util; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOExcept
用poi實現doc轉html
alt 保存圖片 man input bdb result amr try catch 廢話,不多說直接上代碼。 一、doc轉html,並且帶文件夾 / * word轉html * html轉圖片 * @param tagPath 轉換htm
以poi實現PPT轉html
temp nts user 阿裏 oat ali bag exc ffffff 哈哈,終於兩個月了(筆者不玩網遊,雖然脾氣越來越不好,但是生活越來越充實)。不扯了,今晚還要再寫一篇呢,直接上代碼。 package com.css.java.learn
poi實現doc轉html獲取帶樣式內容,並在ueditor中顯示
doc轉html獲取帶樣式內容,並在ueditor中顯示 工具類: 獲取返回的內容,存到資料庫。 package com.wb.core.utils; import org.apache.poi.hwpf.HWPFDocument; import org.apach
C# web實現word 轉Html、office轉Html、pdf轉圖片 線上預覽檔案
改篇 pdf 預覽再本機沒問題,釋出再iis中 不行 ,(使用剪貼簿的問題..excel和word 可以,) 詳細配置及程式碼 word 轉Html 複製程式碼 1 /// <summary> 2 /// word轉成html 3
Java:封裝POI實現word的docx檔案的簡單模板功能
一:場景 通過Word模板來實現動態的word生成 二: 基本要求 1:替換文字中的內容 2:替換表格中的內容(不用動態生成表格) 3:替換後的內容應該與替換前的內容格式相同 4:模板修改方便 5:效果如下: 模板: 結果: 三:p
java實現線上預覽--poi實現word、excel、ppt轉html
分享一下我的偶像大神的人工智慧教程!http://blog.csdn.net/jiangjunshow 也歡迎轉載我的文章,轉載請註明出處 https://blog.csdn.net/aabbyyz java實現線上預覽 - -之poi實現word、e
java實現線上預覽--poi實現word excel ppt轉html
java實現線上
java語言通過Aspose元件 實現word轉pdf、png、html..
:使用Aspose元件可以實現word向DOC, DOCX, OOXML, RTF HTML,OpenDocument, PDF,EPUB, XPS, SWF 轉換 由於基本方法都一樣,在此我只展示word轉pdf的功能 前期準備: MyEcl
java 實現word 轉PDF (採用第三方技術 IText、Poi、Jsoup)
先講講思路: 第一步:使用 poi 將word轉換成 html,這裡程式碼一搜一堆沒什麼好說的,千篇一律。 (值得注意的地方是IText 根據html生成pdf檔案的時候
java用poi實現對word讀取和修改操作(轉)
java程式設計要實現對word的操作沒有vb那種程式語言來得容易,得藉助一些開源元件,其中就包括jacob、poi等, 而poi應用得最為廣泛,對word2003和2007的讀和寫word操作都十分方便。它是Apache組織的一個專案,早在2001年就已經發布了第 一個版本,可以說是apache組織的一
java實現word轉pdf第二種方法
import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.InputStream; import java.io.OutputStream; import java.util.HashMap;
[轉載]java實現word轉pdf
write 方法 class toolbar servlet 效果 app 文檔 實現 最近遇到一個項目需要把word 轉成pdf,百度了一下網上的方案有很多,比如虛擬打印、給word 裝擴展插件等,這些方案都依賴於ms word 程序,在java代碼中也得使用諸如jac
實現word轉pdf,HTML轉pdf(探索篇)
ner ase node eth ack line prope fin -o 筆者找依賴的jar包,找的好辛苦。 ITextRenderer、ITextFontResolver這兩個類依賴的jar包到底是哪個,還有怎麽下載?苦苦糾結了3個小時。終於找到你了!記錄個網址:ht
POI將word轉化為html
參考資料 1.POI包依賴:https://poi.apache.org/components/index.html 2.包版本問題:https://bbs.csdn.net/topics/392208805 並沒有使用其中的3.9的版本,使用的為3.13 最開始使用的
PCB MS SQL 標量函式(CLR) 實現DataTable轉HTML的方法
一.準備需轉為HMLT字串的DataTable資料 在資料庫中執行一段SQL返回的資料 需轉換後的HTML的文字 <
Java實現Word轉PDF方案選擇
Java實現Word轉PDF方案選擇 很多應用場景中都會涉及到Word轉PDF,但Word轉PDF的方案在網上一搜一大把,讓人眼花繚亂,筆者踩過無數的坑後,最終總結出以下三種方案 OpenOffice實現
Word轉html實現線上預覽
word轉html,可以同時支援doc和docx兩種格式,非常好用 開發工具:idea 專案管理工具:maven 不多說,直接擼程式碼 1、首先配置pom.xml檔案,具體配置如下 2、工具類的開發 /** * WORD轉HTML docx格式 * POI版本: 3.10-
C#實現的word轉html命令列工具
需求 有個CMS系統的詳細資訊的來源是人手工編寫的word文件,需求如下: 文件是手工編輯而成的word文件(.docx) 文件具備一定的基本格式,其中包括標題、圖片、流程圖、簡介、按序號排布的詳細說明 初步只需要將這些文件可以以html頁面的形