Java 使用jacob打印word文档

版权声明:本文为博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/qq_26891233/article/details/79225536


记录并整理自己网上查阅的资料,网上的代码感觉始终有点不全,一些操作没有完全关闭,比如打开的Word没有关闭,一直占用这系统资源;由于网上很多实例都是讲解打印Excel文档的,微软的MSDN上面的具体的ActiveX部件对象的属性、事件、方法等也是以Excel为例的(https://msdn.microsoft.com/zh-cn/VBA/Excel-VBA/articles/sheets-printout-method-excel

而我这里打印的文件是Word文档,所以在设置打印参数的时候发现没有打印份数这个参数(也可能是我没有深究到),还没有具体的打印完成状态返回,直接发送打印指令过去就完了。

具体操作如下:

  1. 首先将JACOB的DLL拷贝至 C:\Windows\System32 中,然后引入jar包(jacob.jar)到项目中
  2. DCom Server Process Launcher(DcomLaunch)服务需要打开[services.msc]
  3. 需要安装Microsoft office 2003+

具体的实现代码:

/**
 * @param path  文档路径
 * @param copies  打印份数(word的打印这个参数无法设置)
 */
public static void printWord(String path,int copies){
    if(path.isEmpty()||copies<1){
        System.out.println("无文档文件");
        return;
    }
    System.out.println("开始打印");
    ComThread.InitSTA();
    ActiveXComponent word=new ActiveXComponent("Word.Application");//创建 ActiveX部件对象,这里是Word的
    Dispatch doc=null;
    Dispatch.put(word, "Visible", new Variant(false));//// Visible是控制文档打开后是可见还是不可见,false:静默打印(不可见)
    Dispatch docs=word.getProperty("Documents").toDispatch();
    doc=Dispatch.call(docs, "Open", path).toDispatch();

    try {
        Dispatch.call(doc, "PrintOut");//打印
        System.out.println("完成打印");
    } catch (Exception e) {
        e.printStackTrace();
        System.out.println("打印失败");
    }finally{
        try {
            if(doc!=null){
                Dispatch.call(doc, "Close",new Variant(true));//word文档关闭
            }
        } catch (Exception e2) {
            e2.printStackTrace();
        }
        //退出
        word.invoke("Quit", new Variant[0]);
        //释放资源
        ComThread.Release();
        ComThread.quitMainSTA();
    }
}

一个基本的打印就完成了,直接调用这个方法即可打印Word文档。
附(jar包和dll文件下载,由于csdn已经不能设置免费下载了,所以我就设了最少的一个2积分):http://download.csdn.net/download/qq_26891233/10234805

展开阅读全文

没有更多推荐了,返回首页