Java使用Jacob转换Word为HTML
从今天开始,我也要养成记录开发中遇到的问题和解决方法的好习惯!
最近开发一个Android项目,需要用到查看Word和Pdf文档的功能,由于Android没有直接显示Word和PDF文档的组件,只有一个Webview能查看html网页,所以决定将文档于服务器端转换为html,之后不论是在线预览还是下载到移动终端都可以直接查看了。
最近在网上查阅相关资料,找到利用Jacob来转换Word为html,除了占用CPU性能多一些,好像还不错(.doc和.docx都可以转换的!)。废话不多说,切入正题,这篇文章就先介绍转换Word为html的过程,Pdf还在研究当中,如果有结果我也会发出来!
"JACOB一个Java-COM中间件.通过这个组件你可以在Java应用程序中调用COM组件和Win32 libraries。"
Ps:Jacob只能用于windows系统,如果你的系统不是windows,建议使用Openoffice.org,这个是跨平台的,虽然我没用,但是应该不麻烦,就是需要先安装Openoffice这个软件,然后使用8100服务。至于Poi,说实话,我真不爱用,那个需要先解析word,然后自己覆写成html,工作量大不说,还得不偿失,因为很难保证转换的html内容的格式与原来word文档格式一致,并且.docx转换也很费劲。
1、到官网下载Jacob,目前最新版是1.17,地址链接:http://sourceforge.net/projects/jacob-project/
2、将压缩包解压后,Jacob.jar添加到Libraries中(先复制到项目目录中,右键单击jar包选择Build Path—>Add to Build Path);
3、将Jacob.dll放至当前项目所用到的“jre\bin”下面(比如我的Eclipse正在用的Jre路径是D:\Java\jdk1.7.0_17\jre\bin)。
Ps:我就是按照上面的步骤配置的,一点问题没有,但是有些人可能还会报错,比如:java.lang.UnsatisfiedLinkError: no jacob in java.library.path,这是系统没有加载到jacob.dll,网上解决方法是将Jacob.dll放至“WINDOWS\SYSTEM32”下面(我没试过,因为我的直接没问题)。
Java代码:
- public class JacobUtil {
- // 8 代表word保存成html
- public static final int WORD_HTML = 8;
- public static void main(String[] args) {
- String docfile = "C:\\Users\\無名\\Desktop\\xxx.doc";
- String htmlfile = "C:\\Users\\無名\\Desktop\\xxx.html";
- JacobUtil.wordToHtml(docfile, htmlfile);
- }
- /**
- * WORD转HTML
- * @param docfile WORD文件全路径
- * @param htmlfile 转换后HTML存放路径
- */
- public static void wordToHtml(String docfile, String htmlfile) {
- // 启动word应用程序(Microsoft Office Word 2003)
- ActiveXComponent app = new ActiveXComponent("Word.Application");
- System.out.println("*****正在转换...*****");
- try {
- // 设置word应用程序不可见
- app.setProperty("Visible", new Variant(false));
- // documents表示word程序的所有文档窗口,(word是多文档应用程序)
- Dispatch docs = app.getProperty("Documents").toDispatch();
- // 打开要转换的word文件
- Dispatch doc = Dispatch.invoke(
- docs,
- "Open",
- Dispatch.Method,
- new Object[] { docfile, new Variant(false),
- new Variant(true) }, new int[1]).toDispatch();
- // 作为html格式保存到临时文件
- Dispatch.invoke(doc, "SaveAs", Dispatch.Method, new Object[] {
- htmlfile, new Variant(WORD_HTML) }, new int[1]);
- // 关闭word文件
- Dispatch.call(doc, "Close", new Variant(false));
- } catch (Exception e) {
- e.printStackTrace();
- } finally {
- // 关闭word应用程序
- app.invoke("Quit", new Variant[] {});
- }
- System.out.println("*****转换完毕********");
- }
- }
EXCEL转HTML代码:
- package test;
- import java.io.File;
- import com.jacob.activeX.ActiveXComponent;
- import com.jacob.com.Dispatch;
- import com.jacob.com.Variant;
- public class WordToHtml {
- int WORD_HTML = 8;
- int WORD_TXT = 7;
- int EXCEL_HTML = 44;
- /**
- * WORD转HTML
- * @param docfile WORD文件全路径
- * @param htmlfile 转换后HTML存放路径
- */
- public void wordToHtml(String docfile, String htmlfile) {
- ActiveXComponent app = new ActiveXComponent("Word.Application"); // 启动word
- try {
- app.setProperty("Visible", new Variant(false));
- Dispatch docs = app.getProperty("Documents").toDispatch();
- Dispatch doc = Dispatch.invoke(
- docs,
- "Open",
- Dispatch.Method,
- new Object[] { docfile, new Variant(false),
- new Variant(true) }, new int[1]).toDispatch();
- Dispatch.invoke(doc, "SaveAs", Dispatch.Method, new Object[] {
- htmlfile, new Variant(WORD_HTML) }, new int[1]);
- Variant f = new Variant(false);
- Dispatch.call(doc, "Close", f);
- } catch (Exception e) {
- e.printStackTrace();
- } finally {
- app.invoke("Quit", new Variant[] {});
- }
- }
- /**
- * EXCEL转HTML
- * @param xlsfile EXCEL文件全路径
- * @param htmlfile 转换后HTML存放路径
- */
- public void excelToHtml(String xlsfile, String htmlfile) {
- ActiveXComponent app = new ActiveXComponent("Excel.Application"); // 启动excel
- try {
- app.setProperty("Visible", new Variant(false));
- Dispatch excels = app.getProperty("Workbooks").toDispatch();
- Dispatch excel = Dispatch.invoke(
- excels,
- "Open",
- Dispatch.Method,
- new Object[] { xlsfile, new Variant(false),
- new Variant(true) }, new int[1]).toDispatch();
- Dispatch.invoke(excel, "SaveAs", Dispatch.Method, new Object[] {
- htmlfile, new Variant(EXCEL_HTML) }, new int[1]);
- Variant f = new Variant(false);
- Dispatch.call(excel, "Close", f);
- System.out.println("wordtohtml转换成功");
- } catch (Exception e) {
- e.printStackTrace();
- } finally {
- app.invoke("Quit", new Variant[] {});
- }
- }
- /**
- * /删除指定文件夹
- * @param folderPath 文件夹全路径
- * @param htmlfile 转换后HTML存放路径
- */
- public void delFolder(String folderPath) {
- try {
- delAllFile(folderPath); // 删除完里面所有内容
- String filePath = folderPath;
- filePath = filePath.toString();
- java.io.File myFilePath = new java.io.File(filePath);
- myFilePath.delete(); // 删除空文件夹
- } catch (Exception e) {
- e.printStackTrace();
- }
- }
- /**
- * /删除指定文件夹下所有文件
- * @param path 文件全路径
- */
- public boolean delAllFile(String path) {
- boolean flag = false;
- File file = new File(path);
- if (!file.exists()) {
- return flag;
- }
- if (!file.isDirectory()) {
- return flag;
- }
- String[] tempList = file.list();
- File temp = null;
- for (int i = 0; i < tempList.length; i++) {
- if (path.endsWith(File.separator)) {
- temp = new File(path + tempList[i]);
- } else {
- temp = new File(path + File.separator + tempList[i]);
- }
- if (temp.isFile()) {
- temp.delete();
- }
- if (temp.isDirectory()) {
- delAllFile(path + "/" + tempList[i]);// 先删除文件夹里面的文件
- delFolder(path + "/" + tempList[i]);// 再删除空文件夹
- flag = true;
- }
- }
- return flag;
- }
- public static void main(String[] args) {
- // TODO Auto-generated method stub
- WordToHtml wordtohtml = new WordToHtml();
- wordtohtml.wordToHtml("D://test.doc", "D://test.html");
- System.out.println("word转html成功");
- }
- }
本文转自:http://www.cnblogs.com/qingxinblog/articles/3399454.html
参考文章:http://blog.csdn.net/zhuyi412546724/article/details/5825983#
Java使用Jacob转换Word为HTML的更多相关文章
- java 使用jacob把word转pdf
一.使用前要下载必要包及文件 链接: https://pan.baidu.com/s/1nvutQxb 密码: qgpi 二.引包和dll文件 1.引包:eclipse引包就不用说了,idea引包步骤 ...
- Java 使用 jacob 将 word 文档转换为 pdf 文件
网上查询了许许多多的博客,说利用 poi.iText.Jsoup.jdoctopdf.使用 jodconverter 来调用 openOffice 的服务来转换等等,我尝试了很多种,但要么显示不完全, ...
- Java使用Jacob将Word、Excel、PPT转化成PDF
使用Jacob将金山WPS转化成PDF,其中WPS文字使用KWPS.Aplication.Excel表格是KET.Application.演示文档是KWPP.Application,废话不多说,直接上 ...
- 【文件】使用jacob将word转换成pdf格式
使用jacob将word转换成pdf格式 1.需要安装word2007或以上版本,若安装07版本学确保该版本已安装2downbank0204MicrosoftSaveasPDF_ XPS,否则安装 ...
- java通过jacob来读取word转换为htm格式
转自:http://blog.csdn.net/chinapi_hzh/article/details/5798689 因为微软没有公开word源代码,所以直接用java流来读取word的后果是读出来 ...
- Java文件操作系列[3]——使用jacob操作word文档
Java对word文档的操作需要通过第三方组件实现,例如jacob.iText.POI和java2word等.jacob组件的功能最强大,可以操作word,Excel等格式的文件.该组件调用的的是操作 ...
- Linux系统下Java 转换Word到PDF时,结果文档内容乱码的解决方法
本文分享在Linux系统下,通过Java 程序代码将Word转为PDF文档时,结果文档内容出现乱码该如何解决.具体可参考如下内容: 1.问题出现的背景 在Windows系统中,使用Spire.Doc ...
- Java转换Word文件到PDF文件
使用Docx4j将Word文件转换为PDF文件: public static void convertDocxToPDF(String docxFilePath, String pdfPath) th ...
- jacob 操作word转pdf
项目需要对上传的word及pdf进行在线预览,因基于jquery的pdf插件,很方面实现在线预览,而word实现在线预览费劲不少,于是想到在进行上传处理时,直接将word转成pdf,在预览时直接预览p ...
随机推荐
- HDU 1253:胜利大逃亡(简单三维BFS)
pid=1253">胜利大逃亡 Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/ ...
- hql 多对多查询
这种查询,hibernate 建议用 From Dealer s inner join fetch s.carSerieses cs 实现,注意这种实现只支持b.c,不支持b.cs. 如果要用b.c ...
- Redhat hadoop2.7.2安装笔记
本次安装是在windows7环境下安装redhat虚拟机进行的,所须要的软件例如以下: VirtualBox-5.0.16-105871-Win.exe rhel-server-5.4-x86_64- ...
- 计算机的一些经典书籍CS经典书单
c++: <c++程序设计> <c++primer> <effective c++> <more effective c++> <深入探索c++对 ...
- CUGBACM_Summer_Tranning1 二进制枚举+模拟+离散化
整体感觉:这个组队赛收获还挺多的.自从期末考试以后已经有一个多月没有 做过组队赛了吧,可是这暑假第一次组队赛就找回了曾经的感觉.还挺不错的!继续努力!! 改进的地方:这次组队赛開始的时候题目比較难读懂 ...
- 实记处理mongodb的NUMA问题
一次在启动mongodb的过程中,出现过NUMA这个问题, mongodb日志显示如下: WARNING: You are running on a NUMA machine. We suggest ...
- 高性能MySQL(四)
Schema与数据类型优化 需要优化的数据类型 更小的通常更好 简单就好 尽量避免NULL 整数类型 存储整数,有TINYINT.SMALLINT.MEDIUMINT.INT.BIGINT,分别使用8 ...
- 计算IMEI号的校验位
计算IMEI号的校验位 移动设备国际识别码(IMEI:International Mobile Equipment Identification Number)是差别移动设备的标志,具有唯一性,贴在手 ...
- EasyDarwin手机直播转发快速显示问题之音频处理过程
前言 在我们前面一篇<EasyDarwin手机直播是如何实现的快速显示视频的方法>中,我们描述到了EasyDarwin流媒体服务器端是如何对视频H.264进行缓冲,再以最快的方式将最新的视 ...
- 嵌套的EasyUI 怎么获取对象
说明: 1.本篇文章介绍的是,怎么获取嵌套的Easyui 中的id为pageDetail的iframe对象 2.刚开始的页面效果如下图,是一个只有north,center区域的easyUI easy ...