1. 程式人生 > >jacob操作word

jacob操作word

catch net out img erro cati pro 文件 sat

首先,我是一個新手,也是第一次寫文章,如有不正確的地方請大家見諒,我只是想記錄一下自己學到東西。(都是別人的東西,我自己整理了一下)

一 、簡介:

jacob(java com bridge,java com橋)分為兩個部分,jacob.jar,jacob.dll,使用時兩個東西的版本要一致,而且還分32位和64位,它的位數和jdk的位數有關,與操作系統的位數無關。它的原理是通過java的jni功能,調用系統組件dll,通過這個com橋來操作com組件(windows的一種軟件編程技術吧),最終完成對office文檔的操作。

二 、環境配置:

如果用Maven管理項目,可在pom.xml文件中添加如下的配置,該配置看在Maven倉庫中找到。

技術分享

如果沒有用Maven管理,需進行如下配置:

1、在工程中引入jar包

2、將dll文件放在jdk的path目錄下面(放到jdk/jre/bin下),通過System.getProperty("java.library.path")

三、三種錯誤:

1、找不到jacob.dll,配置路徑問題(確認jacob.dll配置正確) java.lang.UnsatisfiedLinkError: no jacob in java.library.path

2、找不到資源文件,資源文件路徑問題(查看程序中資源文件路徑的設置,並檢查資源文件的存放路徑) com.jacob.com.ComFailException: Invoke of: Open

3、jacob.dll或jacob.jar對應版本錯誤 com.jacob.com.ComFailException: A COM exception has been encountered:

四、打印方法

public class TestDoc {
    public static void main(String[] args) {
        String path="D:\\yanqiong.doc";
        System.out.println("開始打印");
        ComThread.InitSTA();
        ActiveXComponent word=new ActiveXComponent("Word.Application");
        Dispatch doc=null;
        Dispatch.put(word, "Visible", new Variant(false));
        Dispatch docs=word.getProperty("Documents").toDispatch();
        doc=Dispatch.call(docs, "Open", path).toDispatch();
        
        try {
            Dispatch.call(doc, "PrintOut");//打印
        } catch (Exception e) {
            e.printStackTrace();
            System.out.println("打印失敗");
        }finally{
            try {
                if(doc!=null){
                    Dispatch.call(doc, "Close",new Variant(0));
                }
            } catch (Exception e2) {
                e2.printStackTrace();
            }
            //釋放資源
            ComThread.Release();
        }
    }
}

  五、參考

1、http://happyqing.iteye.com/blog/2078151

2、http://blog.csdn.net/u014134766/article/details/50969569

3、http://men4661273.iteye.com/blog/2097871

jacob操作word