相關介紹可參照博客http://blog.csdn.net/hemingwang0902/article/details/4377994
以下摘錄部分內容進行簡述:
Jacob ,官方的解釋是Java COM Bridge,即java和com組件間的橋梁。com一般表現為dll或exe等二進制文件(如:jacob.dll文件),這里說說為什么我們用Java去操縱office(如:Word)要使用com,而不直接使用java去做?
首先,我們清楚office是建立在Windows平台之上的,本身是一個軟件,除了他自己提供的宏似乎沒有什么能對它進行直接的操作;在windows平台上為了解決像這樣的不同應用軟件,通信缺乏通用api問題,推出了com的解決方案;
其次,我們使用dll中的一組或多組相關的函數存取組件數據,總的合稱為接口,具體到每個細節的實現稱為方法;如果我們要調用接口里的方法,唯一的途徑就是調用指向接口的指針;
所以總的來說使用就是dll完成api的轉換。
下面利用Jacob進行Excel的打印:
1 import com.jacob.activeX.*; 2 import com.jacob.com.*; 3 4 public class Print { 5 private static final String PRINT_NAME=new String("FX7AF20D"); 6 /** 7 * @param path 打印路徑地址,形如 \\XX\\YY.xls 8 * @param copies 打印份數 9 */ 10 public static void printExcel(String path,int copies){ 11 if(path.isEmpty()||copies<1){ 12 return; 13 } 14 //初始化COM線程 15 ComThread.InitSTA(); 16 //新建Excel對象 17 ActiveXComponent xl=new ActiveXComponent("Excel.Application"); 18 try { 19 System.out.println("Version=" + xl.getProperty("Version")); 20 //設置是否顯示打開Excel 21 Dispatch.put(xl, "Visible", new Variant(true)); 22 //打開具體的工作簿 23 Dispatch workbooks = xl.getProperty("Workbooks").toDispatch(); 24 Dispatch excel=Dispatch.call(workbooks,"Open",System.getProperty("user.dir")+path).toDispatch(); 25 26 //設置打印屬性並打印 27 Dispatch.callN(excel,"PrintOut",new Object[]{Variant.VT_MISSING, Variant.VT_MISSING, new Integer(copies), 28 new Boolean(false),PRINT_NAME, new Boolean(true),Variant.VT_MISSING, ""}); 29 30 //關閉文檔 31 //Dispatch.call(excel, "Close", new Variant(false)); 32 } catch (Exception e) { 33 e.printStackTrace(); 34 } finally{ 35 //xl.invoke("Quit",new Variant[0]); 36 //始終釋放資源 37 ComThread.Release(); 38 } 39 } 40 }
網上的帖子中很少有提到打印機選項設置的,因為運用了Office的功能,所以需要查找MSDN ,具體參見PrintOut 方法 (Excel)
參數摘錄如下:
名稱 |
必需/可選 |
數據類型 |
說明 |
From |
可選 |
Variant |
在要打印的頁的頁碼。如果省略此參數,則從開頭開始打印。 |
To |
可選 |
Variant |
最后一個要打印的頁的數目。如果省略該參數,則打印完最后一頁后停止。 |
Copies |
可選 |
Variant |
要打印的份數。如果省略此參數,則只打印一份。 |
Preview |
可選 |
Variant |
如果為 True,Microsoft Excel 將在打印對象之前調用打印預覽。如果為 False(或省略該參數),則立即打印對象。 |
ActivePrinter |
可選 |
Variant |
設置活動打印機的名稱。 |
PrintToFile |
可選 |
Variant |
如果為 True,則打印到文件。如果沒有指定 PrToFileName,Microsoft Excel 將提示用戶輸入要使用的輸出文件的文件名。 |
Collate |
可選 |
Variant |
如果為 True,要逐份打印多個副本。 |
PrToFileName |
可選 |
Variant |
如果PrintToFile設置為True,則此參數指定您想要打印到的文件的名稱。 |
IgnorePrintAreas |
可選 |
Variant |
如果為 True,要忽略打印區域並打印整個對象。 |
在上文給出的源碼中,第27行即是設置打印機的打印屬性。