MENU

使用Jacob合并、转换word文档

JACOB一个Java-COM中间件,通过这个组件你可以在Java应用程序中调用COM组件和Win32程序库。

本文使用Jacob版本为1.20,示例源码使用SpringBoot构建,相关工具放在JacobUtils中
地址:https://gitee.com/pangdonghai/jacob-document-merge-api

文档合并

如果在处理过程中抛出异常,word会提示是否保存文件,导致文件一直被占用无法删除。所以将Close方法放到了finally处理。

    public static void merge(List<String> fileList, String savePath) {
        if (fileList.size() == 0) {
            return;
        }
        // 打开word
        Object doc = null;
        ActiveXComponent axc = new ActiveXComponent("Word.application");
        try {

            // 设置word不可见 ---也就是设置ActiveXComponent对象的一个属性
            axc.setProperty("Visible", new Variant(false));
            // 获得documents对象----Variant。toDispatch()
            Object docs = axc.getProperty("Documents").toDispatch();
            // 打开第一个文件
            // 功能调用,
            // 对ActiveX对象docs的"Open"属性执行Dispatch.Method(Dispatch.Put\Dispatch.Get等)操作,
            // 执行后"Open"的值为参数4,
            // 参数5为错误参数码常定义为new int[1],
            // (注:call、get和put方法都是通过该方法实现的)
            doc = Dispatch
                    .invoke(
                            (Dispatch) docs, //调用目标
                            "Open",
                            Dispatch.Method,
                            new Object[]{fileList.get(0), new Variant(false), new Variant(true)}, //参数4
                            new int[3]).toDispatch(); // 参数5
            // 追加文件
            // 和上面一样,不过换种通俗的解释:
            // 参数1就是这个invoke方法的主题操作对象,
            // 参数2就是要对参数1执行的方法的名字,
            // 参数3就是参数2这个方法的具体操作;
            // 参数4就是一系列的参数;
            // 参数5为错误参数码常定义为new int[1]
            for (int i = 1; i < fileList.size(); i++) {
                Dispatch.invoke(
                        axc.getProperty("Selection").toDispatch(), // 参数1
                        "insertFile", // 参数2
                        Dispatch.Method, // 参数3
                        new Object[]{(String) fileList.get(i), "", new Variant(false), new Variant(false), new Variant(false)}, // 参数4
                        new int[3] // 参数5
                );
            }
            // 保存新的word文件
            Dispatch.invoke(
                    (Dispatch) doc,
                    "SaveAs",
                    Dispatch.Method,
                    new Object[]{savePath, new Variant(12)},
                    new int[3]);
            Variant f = new Variant(false);
            // 该方法和get方法非常类似,他是把"Close"属性赋值给f
//            Dispatch.call((Dispatch) doc, "Close", f);
        } catch (Exception e) {
            System.out.println("Merge word file failed:" + e);
        } finally {
            if (doc != null) {
                Dispatch.call((Dispatch) doc, "Close", new Variant(0));
            }
            axc.invoke("Quit", new Variant[]{});
        }
    }

将Word文件转换为Html文件

    public static void word2Html(String srcPath, String destPath) {
        ActiveXComponent axc = new ActiveXComponent("Word.application");
        try {
            axc.setProperty("Visible", new Variant(false));
            Dispatch docs = axc.getProperty("Documents").toDispatch();
            Dispatch doc = Dispatch.invoke(docs, "Open", Dispatch.Method, new Object[]{srcPath, new Variant(false), new Variant(true)}, new int[1]).toDispatch();
            Dispatch.invoke(doc, "SaveAs", Dispatch.Method, new Object[]{destPath, new Variant(8)}, new int[1]);
            Variant f = new Variant(false);
            Dispatch.call(doc, "Close", f);
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            axc.invoke("Quit", new Variant[]{});
        }
    }

文章标题:使用Jacob合并、转换word文档
如果文中内容侵犯了您的权益,请及时与博主取得联系进行删除!
本站文章未经许可禁止转载,本文地址:https://blog.wanvale.com/archives/339/

Archives QR Code Tip
QR Code for this page
Tipping QR Code