## 需求
- 有一批word文档需要以网页的形式呈现给用户.
- 需要实现动态更新
## 解决方案
方案一:
建立数据库,把word中的内容放到数据库中去,分别设置不同的字段,通过查询数据库的方式将内容呈现到网页中。这是我最开始的解决思路,但是分析word文档的内容以后发现建立数据库的方案并不可行,原因是word文档的内容格式不统一,比如1.docx的排版是标题+图片+文字介绍+流程图,2.docx的排版是标题+图片+表格+文字介绍,这样设计数据库的时候比较麻烦,一来是图片存储不方便,二来存在字段为空展示页面的时候没有统一的模板的问题。
方案二:
把所有的word文档手工编辑成html。这个方案立马就被否决了,首先word文件有几十个,其次后期更新比较困难。
方案三:
word直接转成HTML.这个方案是和[小郎哥](http://blog.csdn.net/solomonlangrui)讨论以后,大神写了一个C#版本的word2html命令行工具。这个方案完一步到位实现了由word到html的质变,简洁粗暴!C#实现命令行转html的方法见博客[《C#实现的word转html命令行工具》](http://blog.csdn.net/solomonlangrui/article/details/47168449)。word2html.exe洗完后html效果和word对比如下图,可以看出生成的html页面与原始文档相比图片位置略有不同,测试发现word中图片的插入方式会影响最终的生成效果,基本上实现了需求。
![](https://box.kancloud.cn/2016-02-26_56cfbdd44d35b.jpg)
## java调用可执行程序
java提供了exec()方法调用外部可执行程序。(java也有实现word转html的方法,而且不止一种,poi、[jacob](http://www.cnblogs.com/qingxinblog/articles/3399454.html)等都可以。) java调用外部可执行程序方法如下:
~~~
package com.wordtohtml;
public class WordToHtml {
public static void main(String[] args) {
Runtime rn = Runtime.getRuntime();
Process p = null;
String word2html = "";//命令语句
String fileArray[] = new String[] { "1mantou-ts.docx", "2huajuan-ts.docx", "3laobing-ts.docx", "4qiemian-ts.docx","5xianshimian-ts.docx", "6guamian-ts.docx", "7fangbianmian-ts.docx", "8youtiao-ts.docx", "9baozi-ts.docx", "10sudongshuiiao-ts.docx", "11sudonghundun-ts.docx","12doubao-ts.docx", "13fangbianmifan-ts.docx","14fangbianzhou-ts.docx", "15mifen-ts.docx","16surongmifen.docx", "17penghuamibing.docx", "18migaots.docx","19tangyuan-ts.docx", "20yuanxiao-ts.docx", "21miba-ts.docx","22zongzi-ts.docx", "23renxingbinggan-ts.docx", "24suxingbinggan-ts.docx", "25sudabinggan-ts.docx", "26mianbaoyibangongyi-ts.docx", "27eluosimianbao-ts.docx","28meiguomianbao-ts.docx", "29ribenmianbao-ts.docx","30faguomianbao-ts.docx", "31yingguomianbao-ts.docx", "32deguomianbao-ts.docx", "33yidalimianbao-ts.docx","34jianadamianbao-ts.docx", "35dangaoyibangongyi-ts.docx", "36tianshidiangao-ts.docx", "37haimiandangao-ts.docx","38zhongnaiyoudangao-ts.docx", "39qifengdangao-ts.docx", "40zhongnailaodangao-ts.docx", "41qingnailaodangao-ts.docx","42musidangao-ts.docx", "43tongxinfen-ts.docx","44pisabingpi-ts.docx", "45shousi-ts.docx",
};//word文件名数组
try {
for (int i = 0; i < fileArray.length; i++) {
word2html = "WebContent/W2H/word2html.exe ../upload/doc/"+ fileArray[i]; //循环转换所有word文件
p = rn.exec(word2html);//调用exec()方法
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
~~~
word2html.exe位于WebContent/W2H文件夹下,WordToHtml.java位于src目录下,word文件位于WebContent/upload/doc文件夹下 . 在DOS命令行下执行方式和在java下执行本质上没有区别,java中调用的时候注意文件路径。
![](https://box.kancloud.cn/2016-02-26_56cfbdd478efb.jpg)
## 总结
- 需求实现程度90%(高了?),word文件转换存在图片位置瑕疵,图片转换后有毛边。
- 执行时间:转换45个word文件5秒左右(本机配置:Win7 64bit,i5 CPU,8gRAM,SSD,读取word文件需要OS多次 IO读取磁盘,在普通硬盘上转换时间会加长).
- 后期需要实现word上传至WebContent/upload/doc文件夹下,自动转换成html并更新前端页面;获取.docx格式文件名需要自动实现。
- 前言
- [J2EE]java web项目中调用word转html命令行工具
- [J2EE]jsp项目中使用UEditor富文本编辑器
- [J2EE]The superclass "javax.servlet.http.HttpServlet" was not found on the Java Build Path
- [j2ee]Eclipse搭建SSH开发框架
- Could not open Hibernate Session for transaction
- class org.springframework.web.context.ContextLoaderListener
- [java01]Java基本数据类型
- [java02]运算符
- jsp、javabean学生信息管理系统
- [java03]java字符串
- [ssh新闻发布系统一]搭建开发环境
- [ssh新闻发布系统二] 读取新闻
- [ssh新闻发布系统三]存储新闻
- [ssh新闻发布系统四]使用富文本编辑器发布新闻
- [ssh新闻发布系统五]删除新闻
- struts2 helloworld
- struts请求走向流程
- [java04]java大数类