Java jacob調用打印機打印word文檔


前面說了Java如何生成復雜的Word文檔,今年記錄下Java如何調用打印機打印word文檔。

起初用的是自帶的PrintJob,但是系統提供的打印機制並不成熟完整。網上的代碼也是千篇一律,在我的打印設備Canon iR2525/2530 UFRII LT上,我能獲取到打印機的各屬性,當前任務數。但是打印機沒反應。

可參考這兩篇文章:

http://www.360doc.com/content/05/0916/11/332_12789.shtml

http://www.ibm.com/developerworks/cn/java/l-javaprint/

折騰了好久,最終決定由用一個第三方的,找到了jacob,還不錯,特此記錄下。

1.將jacob的dll文件拷貝到C:\Windows\System32中。

2.在任務管理器中將服務DCom Server Process Launcher(DcomLaunch)打開。

3.將jacob.jar拷貝到項目的/libs目錄下。

值得注意的是,我在Windows Server 2008上,找不到dll文件,報錯:Exception in thread "main" java.lang.UnsatisfiedLinkError: no jacob-1.17-x86 in java.library.path

但是在win系統上,就沒事了。

所以這時候你需要將dll文件也拷貝至你的jdk/bin目錄下,jdk/jre/bin目錄下,以及jre/bin目錄下。這樣就沒有什么問題了。

代碼如下:

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();
        }
    }
}

示例代碼:

http://pan.baidu.com/s/1o7NrPcY    up56

如果此文對您有幫助,微信打賞我一下吧~


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM