陳進才
摘要:隨著我國互聯(lián)網(wǎng)和信息化的發(fā)展,越來越多的企事業(yè)單位及政府單位實現(xiàn)了基于互聯(lián)網(wǎng)的辦公自動化,通過辦公自動化系統(tǒng)實現(xiàn)日常辦公,大大提高了辦公效率。自動化辦公系統(tǒng)中通常存在著大量對WORD文檔的操作,但WORD文檔不能在瀏覽器中預(yù)覽和編輯,只有下載后才能預(yù)覽和編輯,編輯后又不能直接保存到服務(wù)器上,這給廣大用戶在使用上造成了很大不便。本文重點討論在互聯(lián)網(wǎng)辦公自動化系統(tǒng)中如何在線進行WORD文檔的預(yù)覽及編輯。
關(guān)鍵詞: PIO;WORD讀寫;WORD在線預(yù)覽;WORD在線編輯;辦公自動化
中圖分類號:TP391 文獻標識碼:A
文章編號:1009-3044(2019)07-0215-02
1 引言
基本互聯(lián)網(wǎng)的辦公自動化系統(tǒng)通常是B/S架構(gòu),也就是客戶端是瀏覽器,后端是服務(wù)器。該架構(gòu)相對于C/S架構(gòu)的優(yōu)勢是客戶端直接使用PC系統(tǒng)集成的瀏覽器訪問系統(tǒng),不需要專門在每臺客戶機上安裝客戶端軟件。C/S架構(gòu)的系統(tǒng)需要在每個客戶電腦上安裝客戶端,所以相對B/S架構(gòu)維護起來比較麻煩;C/S架構(gòu)的系統(tǒng)由于客戶端是本機程序所以能很方便地通過WINDOWS的OLE(Object Linking and Embedding,即對象連接與嵌入技術(shù))對象訪問WORD對象,進而對WORD文檔進行預(yù)覽讀寫等操作。 B/S架構(gòu)的前端是瀏覽器,由第三方公司開發(fā),不提供對WORD文檔的直接操作,無法查看WORD文檔的內(nèi)容,通常是直接下載,下載后使用本機OFFICE打開,不能提供在線預(yù)覽功能。
2 需要解決的問題
本單位辦公自動化系統(tǒng)主要為本單位的日常辦公服務(wù),后端服務(wù)器端使用JAVA開發(fā),前端使用JS開發(fā),主要模塊有合同管理、項目管理、收款管理、支出管理、資料管理等,每個模塊中都要上傳WORD文檔。比如合同管理模塊,經(jīng)辦人在申請合同時需要上傳WORD版本的合同,然后提交部門經(jīng)理審批,部門經(jīng)理在審批該合同時,只需要閱讀該合同的內(nèi)容,如發(fā)現(xiàn)有錯誤,將退回給經(jīng)辦人,讓經(jīng)辦人修改,現(xiàn)在部門經(jīng)理閱讀該WORD文檔的辦法通常是下載該文檔,然后用本機的OFFICE軟件打開閱讀,這樣每次閱讀都要下載一次,產(chǎn)生了大量的垃圾文件,也給他們在使用中造成很大的不便;所以他們急切需要更簡便的操作,也就是需要系統(tǒng)能提供在線預(yù)覽功能,不需要下載文檔直接使用瀏覽器在線查看WORD文檔的內(nèi)容。
3 預(yù)覽WORD文檔的解決方法
由于本單位的WORD文檔是作為單獨文件存放于服務(wù)器上的,所以可以通過轉(zhuǎn)換成其瀏覽器可顯示的文件的方式來預(yù)覽WORD文檔。
3.1 將WORD文檔轉(zhuǎn)換成HTML顯示
將WORD文檔轉(zhuǎn)換成HTML顯示的方法有很多,這里使用Apache的提供的PIO庫進行轉(zhuǎn)換;由于WORD有DOC和DOCX兩種,所以需要區(qū)別對待,以下為實現(xiàn)的關(guān)鍵代碼:
public static void docToHtml(String inFile, String outFile)
throws TransformerException, IOException,
ParserConfigurationException {
HWPFDocument hwpf = new HWPFDocument(new FileInputStream(inFile));
if (null==hwpf)
return;
WordToHtmlConverter hConverter = new WordToHtmlConverter(
DocumentBuilderFactory.newInstance().newDocumentBuilder().newDocument());
if (null==hConverter)
return; hConverter.setPicturesManager( new PicturesManager() {
public String savePicture( byte[] content, PictureType picType, String sugName, float wInc, float hInc ) {
return "./"+sugName;
}
} );
hConverter.processDocument(hwpf);
List picList = hwpf.getPicturesTable().getAllPictures();
if (null==picList)
return;
for(int i=0;i Picture pic = (Picture)picList.get(i); try { pic.writeImageContent(new FileOutputStream("./" + pic.suggestFullFileName())); } catch (FileNotFoundException e) { e.printStackTrace(); } } Document htmFile = hConverter.getDocument(); if (null==htmFile) return; ByteArrayOutputStream outStream = new ByteArrayOutputStream();
if (null==outStream)
return;
DOMSource dmsrc = new DOMSource(htmFile);
if (null==dmsrc)
return;
StreamResult strmResult = new StreamResult(outStream);
if (null==strmResult)
return;
TransformerFactory tf = TransformerFactory.newInstance();
Transformer tformer = tf.newTransformer();
tformer.setOutputProperty(OutputKeys.ENCODING, "UTF-8");
tformer.setOutputProperty(OutputKeys.INDENT, "yes");
tformer.setOutputProperty(OutputKeys.METHOD, "HTML");
tformer.transform(dmsrc, strmResult);
outStream.close();
writeFile(new String(outStream.toByteArray()), ouFile);
}
將WORD文檔轉(zhuǎn)換為HTML文件后,基本可以實現(xiàn)WORD文檔的預(yù)覽功能了。
3.2 將WORD轉(zhuǎn)換為PDF進行顯示
將WORD文檔轉(zhuǎn)換為HTML文件后,基本可以實現(xiàn)WORD文檔的預(yù)覽功能了,但是卻不能保持良好的WORD的排版格式,為了有更好的用戶體驗,可以進一步將HTML文件轉(zhuǎn)換成PDF文檔。
1) 第一步 將WORD文檔轉(zhuǎn)換成HTML
參見3.1
2) 將HTML文檔轉(zhuǎn)換為PDF文檔
使用Apache的iText庫進行轉(zhuǎn)換,以下為實現(xiàn)的關(guān)鍵代碼:
public int htmlToPdf(String inFile, String outFile)
throws Exception {
OutputStream outStream = new FileOutputStream(outFile);
ITextRenderer render = new ITextRenderer();
if (null==render || null== outStream)
return 0;
render.setDocument(new File(intFile));
ITextFontResolver tfont = render.getFontResolver();
//加入對中文字體的支持
tfont.addFont("simsunb.ttf", BaseFont.IDENTITY_H, BaseFont.NOT_EMBEDDED); render.getSharedContext().setBaseURL("./");
render.layout(); render.createPDF(outStream);//創(chuàng)建文件
outStream.flush();//存盤
outStream.close();//關(guān)閉文件
return 1;
}
3) 顯示PDF文檔
可以通過jquery將PDF文件顯示在網(wǎng)頁中,代碼如下: