注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

刘小龙

成功需要的是一场持久的战役!

 
 
 

日志

 
 

Java实现word转成html(转)  

2015-04-10 14:52:40|  分类: 知识积累 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

有需求,就会有相应的技术出现,以前知道word可以用来书写html网页,那自然就可以转成html页面,难道我们要用word开发html页面吗?

你可能会问,我为什么要把word转成html?是的,开始我也很不理解为什么会有这样的需求。


后来,我竟然真的迫切地需要一个这样的功能,把word直接转成html,挂入我们的网站。


我们要自己的oa系统,有很多经验分享要挂在oa系统上,但这些经验很多都是以word文档的形式保存的。如何能在线预览?

有很多方式,比如转为flash等等,但都太复杂了。

我想到了一种变通的方式,即提前把word转换为html,预览的时候,直接返回这个html即可,当然不能手工转,要借助工具,即jacob


详见如下DEMO:


1、导入jacob.jar

2、核心测试代码

  1. import com.jacob.activeX.ActiveXComponent;  
  2. import com.jacob.com.Dispatch;  
  3. import com.jacob.com.Variant;  
  4.   
  5. /** 
  6.  *  
  7.  *  
  8.  * @author jialin 
  9.  * @since 2015-3-27 
  10.  */  
  11. public class word2html {  
  12.     public static boolean wordToHtml(String inPath, String toPath) {  
  13.         // 启动word  
  14.         ActiveXComponent axc = new ActiveXComponent("Word.Application");  
  15.   
  16.         boolean flag = false;  
  17.   
  18.         try {  
  19.             // 设置word不可见  
  20.             axc.setProperty("Visible"new Variant(false));  
  21.   
  22.             Dispatch docs = axc.getProperty("Documents").toDispatch();  
  23.   
  24.             // 打开word文档  
  25.             Dispatch doc = Dispatch.invoke(  
  26.                     docs,  
  27.                     "Open",  
  28.                     Dispatch.Method,  
  29.                     new Object[] { inPath, new Variant(false),  
  30.                             new Variant(true) }, new int[1]).toDispatch();  
  31.   
  32.             // 作为html格式保存到临时文件  
  33.             Dispatch.invoke(doc, "SaveAs", Dispatch.Method, new Object[] {  
  34.                     toPath, new Variant(8) }, new int[1]);  
  35.   
  36.             Variant f = new Variant(false);  
  37.             Dispatch.call(doc, "Close", f);  
  38.             flag = true;  
  39.             return flag;  
  40.   
  41.         } catch (Exception e) {  
  42.             e.printStackTrace();  
  43.             return flag;  
  44.         } finally {  
  45.             axc.invoke("Quit"new Variant[] {});  
  46.         }  
  47.     }  
  48.   
  49.     public static void main(String[] args) {  
  50.           
  51.     word2html.wordToHtml("E://01_Document//ths_project//webservice//webservice_invoke_help.docx",  
  52.                 "E://01_Document//ths_project//webservice//webservice_invoke_help.htm");  
  53.   
  54.     }  
  55. }  

忽然想起当年老师说的一句话:遇到问题,你就去搜吧,肯定前面已经有很多人遇到和你一样的问题了。看看别人是怎么干的,借鉴一下,站在巨人的肩膀上。

有了需求,自然有解决需求的工具。


此篇转自:http://blog.csdn.net/shan9liang/article/details/44706963


另外需要注意的是,此方法只支持windows平台,而且对于32位和64位jacob.dll对应选择,对于比较流行的linux平台是不适用的。看下下边这篇博客:


 由于项目需要,要完成将上传的word文件转成html文件的功能。在网上搜了一下,大致有3种方法:1、用jacob实现 2、用poi实现 3、用openoffice实现。

  从网上来看好像jacob用的人最多,我就选择了这种方法来做。需要引入jacob.jar jar包,并且jar包还要调用jacob.dll文件,需要事先把jacob.dll文件放到以下3处地方:C:\Windows\System32 目录下,安装的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的方式,我没有试。在网上搜到一些资料是这么说的:

 openoffice 会在第一次打开包含他的页面的时候弹出小广告。linux服务器还要解决acess问题。  
 openoffice有个服务可以开启,再加上 jodconverter.jar 组合使用。


转自:http://www.cnblogs.com/qingxinblog/p/3404051.html

  评论这张
 
阅读(2261)| 评论(5)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017