由于项目需要,要完成将上传的word文件转成html文件的功能。在网上搜了一下,大致有3种方法:1、用jacob实现 2、用poi实现 3、用openoffice实现。
从网上来看好像jacob用的人最多,我就选择了这种方法来做。需要引入jacob.jar jar包,并且jar包还要调用jacob.dll文件,需要事先把jacob.dll文件放到以下3处地方:C:WindowsSystem32 目录下,安装的jdk文件夹下的bin目录中,以及jre文件夹下的bin目录(注意一定是你这个项目运行所用到的jdk和jre,如果你的机器上装有多个,首先你要确认清楚放到哪个中)。编写程序,运行通过,达到了想要的效果,生成了html文件,同时还生成了一个文件夹,里边放了若干文件,包括所含的源图片。如果你的文档里包含图片的话要注意生成的html中的图片的src路径默认的是放图片的文件夹和生成的html文件要放到同样的路径中,这样才能找得到图片,否则图片不能加载到html中。介于这个原因,我决定不把html文件中所含字符串存入数据库,而是把htnl的链接地址存入数据库,这样根据这个链接加载的html就可正确的显示图片。
接下来悲剧的事情发生了。项目要布在linux服务器上,这意味着我之前的努力全白费了。特此声明, jacob 只支持windows服务器,不支持linux,.dll文件也是windows所特有的!所以大家在选择采用何种方式时一定要结合自己要用的操作系统。
万般无奈之下只好再采用poi去做。还是要导入要用到的jar包,网上有很多实现的代码可直接拿来用。我在本地的java项目中试着写了这个功能(非web的),ok,生成了html文件,同时生成了所含的图片。然后我就把代码转到我的web项目中,但是悲剧发生了,生成的html页面显示是乱码,用notepad++打开源代码也是乱码。我解决了好久没有解决,直到最后把程序中以下两句中的编码由“utf-8”改为“GB2312”后,问题才得以解决,但是至今还不知道为什么这样。
serializer.setOutputProperty(OutputKeys.ENCODING, "utf-8");//一定要改成“GB2312”
FileUtils.writeStringToFile(new File(tpFile), content, "utf-8"); //一定要改成“GB2312”
至于openoffice的方式,我没有试。在网上搜到一些资料是这么说的: