办公自动化系统中对Word文档操作的研究
2019-05-24陈进才
陈进才
摘要:隨着我国互联网和信息化的发展,越来越多的企事业单位及政府单位实现了基于互联网的办公自动化,通过办公自动化系统实现日常办公,大大提高了办公效率。自动化办公系统中通常存在着大量对WORD文档的操作,但WORD文档不能在浏览器中预览和编辑,只有下载后才能预览和编辑,编辑后又不能直接保存到服务器上,这给广大用户在使用上造成了很大不便。本文重点讨论在互联网办公自动化系统中如何在线进行WORD文档的预览及编辑。
关键词: PIO;WORD读写;WORD在线预览;WORD在线编辑;办公自动化
中图分类号:TP391 文献标识码:A
文章编号:1009-3044(2019)07-0215-02
1 引言
基本互联网的办公自动化系统通常是B/S架构,也就是客户端是浏览器,后端是服务器。该架构相对于C/S架构的优势是客户端直接使用PC系统集成的浏览器访问系统,不需要专门在每台客户机上安装客户端软件。C/S架构的系统需要在每个客户电脑上安装客户端,所以相对B/S架构维护起来比较麻烦;C/S架构的系统由于客户端是本机程序所以能很方便地通过WINDOWS的OLE(Object Linking and Embedding,即对象连接与嵌入技术)对象访问WORD对象,进而对WORD文档进行预览读写等操作。 B/S架构的前端是浏览器,由第三方公司开发,不提供对WORD文档的直接操作,无法查看WORD文档的内容,通常是直接下载,下载后使用本机OFFICE打开,不能提供在线预览功能。
2 需要解决的问题
本单位办公自动化系统主要为本单位的日常办公服务,后端服务器端使用JAVA开发,前端使用JS开发,主要模块有合同管理、项目管理、收款管理、支出管理、资料管理等,每个模块中都要上传WORD文档。比如合同管理模块,经办人在申请合同时需要上传WORD版本的合同,然后提交部门经理审批,部门经理在审批该合同时,只需要阅读该合同的内容,如发现有错误,将退回给经办人,让经办人修改,现在部门经理阅读该WORD文档的办法通常是下载该文档,然后用本机的OFFICE软件打开阅读,这样每次阅读都要下载一次,产生了大量的垃圾文件,也给他们在使用中造成很大的不便;所以他们急切需要更简便的操作,也就是需要系统能提供在线预览功能,不需要下载文档直接使用浏览器在线查看WORD文档的内容。
3 预览WORD文档的解决方法
由于本单位的WORD文档是作为单独文件存放于服务器上的,所以可以通过转换成其浏览器可显示的文件的方式来预览WORD文档。
3.1 将WORD文档转换成HTML显示
将WORD文档转换成HTML显示的方法有很多,这里使用Apache的提供的PIO库进行转换;由于WORD有DOC和DOCX两种,所以需要区别对待,以下为实现的关键代码:
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文档转换为HTML文件后,基本可以实现WORD文档的预览功能了。
3.2 将WORD转换为PDF进行显示
将WORD文档转换为HTML文件后,基本可以实现WORD文档的预览功能了,但是却不能保持良好的WORD的排版格式,为了有更好的用户体验,可以进一步将HTML文件转换成PDF文档。
1) 第一步 将WORD文档转换成HTML
参见3.1
2) 将HTML文档转换为PDF文档
使用Apache的iText库进行转换,以下为实现的关键代码:
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);//创建文件
outStream.flush();//存盘
outStream.close();//关闭文件
return 1;
}
3) 显示PDF文档
可以通过jquery将PDF文件显示在网页中,代码如下: