前面說了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
如果此文對您有幫助,微信打賞我一下吧~