Java-jacob-文件转HTML

简介:

Java-jacob-文件转HTML:

下载jacob的jar包,然后举个例子。

public static final int WORD_HTML = 8;
 
public static final int WORD_TXT = 7;
 
public static final int EXCEL_HTML = 44;
 
/**
 * WORD转HTML
 * 
 * @param docfile
 *            WORD文件全路径
 * @param htmlfile
 *            转换后HTML存放路径
 */
public static 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 static void excelToHtml(String xlsfile, String htmlfile) {
    ActiveXComponent app = new ActiveXComponent("Excel.Application"); // 启动word
    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);
    } catch (Exception e) {
        e.printStackTrace();
    } finally {
        app.invoke("Quit", new Variant[] {});
    }
}
 
public static void main(String[] args) {
    excelToHtml(
            "D:\\work\\apache-tomcat-6.0.36\\webapps\\ReportSystem\\upload\\1374758916167.xls",
            "D:\\work\\apache-tomcat-6.0.36\\webapps\\ReportSystem\\upload\\1374758916167.html");
}

 

Jacob把Word Excel PPT转成Html

 首先,必须将jacob-1.15-M3-x86.dll这个文件(视版本而定,在32位xp系统中使用该文件,在64位系统中,如win7,就得使用该文件jacob-1.15-M3-x64.dll了)拷贝到C:\Program Files\Java\jdk1.6.0_04\jre\bin的目录下,然后将jacob.jar在添加到C:\Program Files\Apache Software Foundation\Tomcat 6.0\lib的目录下,在项目中导入jacob.jar即可使用下面程序:

 

1.wordhtml

Word转起来还是比较容易的,不会出什么问题,转换之后进程自动关闭。

 

public class Word2Html {

   public static void change(String filename, String htmlFilename) {

       ActiveXComponent xl = new ActiveXComponent("Word.Application");

//打开一个word,不显示窗口      

      try {

           Dispatch.put(xl, "Visible", new Variant(false));

           Object workbooks = xl.getProperty("Documents").toDispatch();

           Object workbook = Dispatch.call((Dispatch) workbooks, "Open",

                  filename).toDispatch();

           Dispatch.invoke((Dispatch) workbook, "SaveAs", Dispatch.Method,

                 new Object[] { htmlFilename, new Variant(8) }, new int[1]);

           Variant f = new Variant(false);

           //Close关闭文件,不关闭窗口

           Dispatch.call((Dispatch) workbooks, "Close", f);

       } catch (Exception e) {

           e.printStackTrace();

       } finally {

           // 调用office关闭方法,关闭窗口和word进程         

           xl.invoke("Quit", new Variant[] {});                 

           xl = null;

       }

    }

   

   public static void main(String[] args) {

       Word2Html.change("d:/a.doc", "d:/a");

    }

 

}

因为word转html之后,word进程自动关闭,所以在finally中不写关闭进程代码,但在excel和ppt转换后进程不会自动关闭,要加上关闭进程代码。

 

2.Excelhtml

 

Excel最头疼的就是转换完之后,进程不会释放,而且每一次转换都会加一个进程,崩溃!!

无奈之下不得不在finally中杀掉excel进程。

 

public class Excel2Html {

   public static void change(String filename, String htmlFilename) {

       ActiveXComponent xl = new ActiveXComponent("Excel.Application");

      try {

           Dispatch.put(xl, "Visible", new Variant(false));

//打开一个Excel,不显示窗口

           Object workbooks = xl.getProperty("workbooks").toDispatch();

                        Object workbook = Dispatch.call((Dispatch) workbooks, "Open",

                  filename).toDispatch();

           Dispatch.invoke((Dispatch) workbook, "SaveAs", Dispatch.Method,

                 new Object[] { htmlFilename, new Variant(44) }, new int[1]);

           Dispatch.call((Dispatch) workbooks, "Close");

       } catch (Exception e) {

           e.printStackTrace();

       } finally {

           xl.invoke("Quit", new Variant[] {});

           xl = null;

           Process process;

          int pid = 0;

          try {

              process = Runtime.getRuntime().exec("tasklist");

              Scanner in = new Scanner(process.getInputStream());

             while (in.hasNextLine()) {

                  String p = in.nextLine();

                  // 打印所有进程

                  System.out.println(p);

                 if (p.contains("EXCEL.EXE")) {

                     StringBuffer buf = new StringBuffer();

                    for (int i = 0; i < p.length(); i++) {

                        char ch = p.charAt(i);

                        if (ch != ' ') {

                            buf.append(ch);

                         }

                     }

                     // 打印pid,根据pid关闭进程

                     System.out.println(buf.toString().split("Console")[0]

                            .substring("EXCEL.EXE".length()));

                     pid = Integer.parseInt(buf.toString().split("Console")[0]

                            .substring("EXCEL.EXE".length()));

                     Runtime.getRuntime().exec("tskill"+" "+pid);

                  }

              }

           } catch (IOException e) {

              e.printStackTrace();

           }

       }

    }

   

   public static void main(String[] args) {

       Excel2Html.change("d:/b.xls", "d:/b");

    }

}

 

3.PPT转html

 

PPT转html最头疼的就是new Variant(false)会报错,无奈只能设成true,然后在finally中杀掉powerpnt进程。

 

public class Ppt2Html {

   public static void change(String filename, String htmlFilename) {

       ActiveXComponent xl = new ActiveXComponent("Powerpoint.Application");

      try {

           Dispatch.put(xl, "Visible", new Variant(true));

//打开一个PPT,显示窗口,PPT的不显示就会报错,狂晕!

           Object workbooks = xl.getProperty("Presentations").toDispatch();

           Object workbook = Dispatch.call((Dispatch) workbooks, "Open",

                  filename).toDispatch();

           Dispatch.invoke((Dispatch) workbook, "SaveAs", Dispatch.Method,

                 new Object[] { htmlFilename, new Variant(20) }, new int[1]);

           //Variant f = new Variant(false);

           //Dispatch.call((Dispatch) workbooks, "Close",f);

           //PPT的加这两行会报错,干脆注释上,反正在下面也关闭进程

       } catch (Exception e) {

           e.printStackTrace();

       } finally {

           xl.invoke("Quit", new Variant[] {});

           xl = null;

           Process process;

          int pid = 0;

          try {

              process = Runtime.getRuntime().exec("tasklist");

              Scanner in = new Scanner(process.getInputStream());

             while (in.hasNextLine()) {

                  String p = in.nextLine();

                  // 打印所有进程

                  System.out.println(p);

                 if (p.contains("POWERPNT.EXE")) {

                     StringBuffer buf = new StringBuffer();

                    for (int i = 0; i < p.length(); i++) {

                        char ch = p.charAt(i);

                        if (ch != ' ') {

                            buf.append(ch);

                         }

                     }

                     // 打印pid,根据pid关闭进程

                     System.out.println(buf.toString().split("Console")[0]

                            .substring("POWERPNT.EXE".length()));

                     pid = Integer

                            .parseInt(buf.toString().split("Console")[0]

                                   .substring("POWERPNT.EXE".length()));

                     Runtime.getRuntime().exec("tskill" + " " + pid);

                  }

              }

           } catch (IOException e) {

              e.printStackTrace();

           }

       }

    }

 

   public static void main(String[] args) {

       Ppt2Html.change("d:/c.ppt", "d:/c");

    }

}

相关文章
|
2月前
|
Java
java小工具util系列5:java文件相关操作工具,包括读取服务器路径下文件,删除文件及子文件,删除文件夹等方法
java小工具util系列5:java文件相关操作工具,包括读取服务器路径下文件,删除文件及子文件,删除文件夹等方法
84 9
|
2月前
|
监控 Java 应用服务中间件
高级java面试---spring.factories文件的解析源码API机制
【11月更文挑战第20天】Spring Boot是一个用于快速构建基于Spring框架的应用程序的开源框架。它通过自动配置、起步依赖和内嵌服务器等特性,极大地简化了Spring应用的开发和部署过程。本文将深入探讨Spring Boot的背景历史、业务场景、功能点以及底层原理,并通过Java代码手写模拟Spring Boot的启动过程,特别是spring.factories文件的解析源码API机制。
92 2
|
8天前
|
人工智能 自然语言处理 Java
FastExcel:开源的 JAVA 解析 Excel 工具,集成 AI 通过自然语言处理 Excel 文件,完全兼容 EasyExcel
FastExcel 是一款基于 Java 的高性能 Excel 处理工具,专注于优化大规模数据处理,提供简洁易用的 API 和流式操作能力,支持从 EasyExcel 无缝迁移。
57 9
FastExcel:开源的 JAVA 解析 Excel 工具,集成 AI 通过自然语言处理 Excel 文件,完全兼容 EasyExcel
|
29天前
|
Java
java实现从HDFS上下载文件及文件夹的功能,以流形式输出,便于用户自定义保存任何路径下
java实现从HDFS上下载文件及文件夹的功能,以流形式输出,便于用户自定义保存任何路径下
86 34
|
2月前
|
消息中间件 存储 Java
RocketMQ文件刷盘机制深度解析与Java模拟实现
【11月更文挑战第22天】在现代分布式系统中,消息队列(Message Queue, MQ)作为一种重要的中间件,扮演着连接不同服务、实现异步通信和消息解耦的关键角色。Apache RocketMQ作为一款高性能的分布式消息中间件,广泛应用于实时数据流处理、日志流处理等场景。为了保证消息的可靠性,RocketMQ引入了一种称为“刷盘”的机制,将消息从内存写入到磁盘中,确保消息持久化。本文将从底层原理、业务场景、概念、功能点等方面深入解析RocketMQ的文件刷盘机制,并使用Java模拟实现类似的功能。
46 3
|
2月前
|
Java 测试技术 Maven
Maven clean 提示文件 java.io.IOException
在使用Maven进行项目打包时,遇到了`Failed to delete`错误,尝试手动删除目标文件也失败,提示`java.io.IOException`。经过分析,发现问题是由于`sys-info.log`文件被其他进程占用。解决方法是关闭IDEA和相关Java进程,清理隐藏的Java进程后重新尝试Maven clean操作。最终问题得以解决。总结:遇到此类问题时,可以通过任务管理器清理相关进程或重启电脑来解决。
|
2月前
|
存储 缓存 安全
在 Java 编程中,创建临时文件用于存储临时数据或进行临时操作非常常见
在 Java 编程中,创建临时文件用于存储临时数据或进行临时操作非常常见。本文介绍了使用 `File.createTempFile` 方法和自定义创建临时文件的两种方式,详细探讨了它们的使用场景和注意事项,包括数据缓存、文件上传下载和日志记录等。强调了清理临时文件、确保文件名唯一性和合理设置文件权限的重要性。
151 2
|
2月前
|
存储 安全 Java
如何保证 Java 类文件的安全性?
Java类文件的安全性可以通过多种方式保障,如使用数字签名验证类文件的完整性和来源,利用安全管理器和安全策略限制类文件的权限,以及通过加密技术保护类文件在传输过程中的安全。
74 4
|
2月前
|
存储 Java API
Java实现导出多个excel表打包到zip文件中,供客户端另存为窗口下载
Java实现导出多个excel表打包到zip文件中,供客户端另存为窗口下载
98 4
|
2月前
|
Java 数据格式 索引
使用 Java 字节码工具检查类文件完整性的原理是什么
Java字节码工具通过解析和分析类文件的字节码,检查其结构和内容是否符合Java虚拟机规范,确保类文件的完整性和合法性,防止恶意代码或损坏的类文件影响程序运行。
57 5

热门文章

最新文章