美文网首页
2019-07-12_Java通过JACOB生成页眉

2019-07-12_Java通过JACOB生成页眉

作者: kikop | 来源:发表于2019-07-12 23:49 被阅读0次

Java通过JACOB生成页眉

1概述

JACOB-JavaCOMBridge标准的操作word、excel工具包。用户本地系统中安装Word的应用程序可选(office、wps有其一即可)。

1.1 wps创建分节符宏指令

新建一个wps的word,然后点击视图,宏,定义宏的名称为:InsertBreakWdSectionBreakNextPage。

输入如内容:

Sub InsertBreakWdSectionBreakNextPage()

'

' InsertBreakWdSectionBreakNextPage Macro

'

Selection.InsertBreak Type:=wdSectionBreakNextPage

End Sub

image.png
image.png
image.png

1.2 office创建分节符宏指令

image.png image.png image.png

要注意到分页符和分节符的区别,分页符是Selection.InsertBreak Type:=0

1.3环境准备

在程序中用jacob调用它。

Dispatch.call(app, "Run",

new Variant("InsertBreakWdSectionBreakNextPage"));

2 wps实战

2.1 合并多个Word为一个Word

2.1.1 merge

/**

 * 合并多个word为一个Word

 *

 * @param srcdocs

 * @param destDoc

 * @return

 */

public boolean mergeMultipleWord2Single2(java.util.List srcdocs, String destDoc) {

    //1.校验

    if (srcdocs.size() == 0 || srcdocs == null) {

        return false;

    }

    System.out.println("启动 Word...");

    long start = System.currentTimeMillis();

    //2.判断

    ActiveXComponent app = null;

    Object currentDoc = null;

    try {

// app = new ActiveXComponent("Word.Application"); // 基于microsoft office

        app = new ActiveXComponent("KWPS.Application");  // 基于kwps的方式,具体和调用ActiveX控件有关

        // 2.1.设置word不可见

        app.setProperty("Visible", new Variant(false));

        //获得Documents对象

        Object docs = app.getProperty("Documents").toDispatch();

        currentDoc = Dispatch.call((Dispatch) docs, "Add").toDispatch();

        Dispatch selection = app.getProperty("Selection").toDispatch();

        // 2.3.追加后续文件(排除最后一个)

        for (int i = 0; i < srcdocs.size(); i++) {

            Dispatch.call(selection, "MoveDown");

            Dispatch.call(selection, "insertFile",srcdocs.get(i));

            Dispatch.call(selection, "EndKey", new Variant(6));

            if (i < srcdocs.size() - 1) {

                Dispatch.call(app, "Run", new Variant("InsertBreakWdSectionBreakNextPage"));

            }

        }

        //2.4.如果目的word存在,则删除

        File tofile = new File(destDoc);

        if (tofile.exists()) {  // 目标pdf存在,则删除,前提未使用

            tofile.delete();

        }

        // 2.5.保存为新的word

        Dispatch.invoke((Dispatch) currentDoc, "SaveAs", Dispatch.Method, new Object[]{destDoc, new Variant(1)}, new int[3]);

        Variant f = new Variant(false);

        Dispatch.call((Dispatch) currentDoc, "Close", f);  // 把close属性赋值个f

        long end = System.currentTimeMillis();

        System.out.println("转换完成..用时:" + (end - start) + "ms.");

    } catch (Exception e) {

        System.out.println("========合并Word文件失败:" + e.getMessage());

        //throw new RuntimeException("========合并Word文件失败:" + e);

        return false;

    } finally {

        System.out.println("关闭文档");

        if (app != null) {

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

        }

    }

    // 如果没有这句话,winword.exe进程将不会关闭

    ComThread.Release();

    return true;

}

2.2 测试

package com.tech.ability.myjacob;

/**

  • @author kikop

  • @version 1.0

  • @project Name: TechnicalAbilityToolBox

  • @file Name: MyWord2PDFTest

  • @desc 功能描述

  • @date 2019/7/8

  • @time 23:04

  • @by IDE: IntelliJ IDEA

*/

public class MyWord2PDFTest {

/**

 *

 * @param args

 */

public static void main(String[] args) {

    MyWord2PDF d = new MyWord2PDF();

    d.wordToPDF("D:/Java通过jacob操作wps记录.doc", "D:/Java通过jacob操作wps记录.pdf");

}

}

2.3 结果查看

[图片上传失败...(image-1aa8d-1562946473126)]

[图片上传失败...(image-666976-1562946473126)]

3 参考

1.合并word文档时,用Jacob 插入分节符以达到保持原来的页眉的一个可行方案

https://blog.csdn.net/gaokao_20110607/article/details/8824116

相关文章

网友评论

      本文标题:2019-07-12_Java通过JACOB生成页眉

      本文链接:https://www.haomeiwen.com/subject/kubukctx.html