相关介绍可参照博客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行即是设置打印机的打印属性。