packagecom.HeiBeiEDU.test2;importjava.io.File;importcom.jacob.activeX.ActiveXComponent;importcom.jacob.com.ComThread;importcom.jacob.com.Dispatch;importcom.jacob.com.Variant;public classPrintDemo {public static booleanprintOfficeFile(File f) {if (f != null &&f.exists()) {
String fileNameString=f.getName();
String postfixString=Utils.getPostfix(fileNameString);if (postfixString.equalsIgnoreCase("xls") || postfixString.equalsIgnoreCase("xlsx")) {/*** 功能:实现excel打印工作*/ComThread.InitSTA();
ActiveXComponent xl= new ActiveXComponent("Excel.Application");try{//System.out.println("version=" +//xl.getProperty("Version"));//不打开文档
Dispatch.put(xl, "Visible", new Variant(false));
Dispatch workbooks= xl.getProperty("Workbooks").toDispatch();//打开文档
Dispatch excel = Dispatch.call(workbooks, "Open", f.getAbsolutePath()).toDispatch();//横向打印(2013/05/24)//Dispatch currentSheet = Dispatch.get(excel,//"ActiveSheet")//.toDispatch();//Dispatch pageSetup = Dispatch//.get(currentSheet, "PageSetup").toDispatch();//Dispatch.put(pageSetup, "Orientation", new Variant(2));//每张表都横向打印2013-10-31
Dispatch sheets = Dispatch.get((Dispatch) excel, "Sheets").toDispatch();//获得几个sheet
int count = Dispatch.get(sheets, "Count").getInt();//System.out.println(count);
for (int j = 1; j <= count; j++) {
Dispatch sheet=Dispatch
.invoke(sheets,"Item", Dispatch.Get, new Object[] { new Integer(j) }, new int[1])
.toDispatch();
Dispatch pageSetup= Dispatch.get(sheet, "PageSetup").toDispatch();
Dispatch.put(pageSetup,"Orientation", new Variant(2));
Dispatch.call(sheet,"PrintOut");
}//开始打印
if (excel != null) {//Dispatch.call(excel, "PrintOut");//增加以下三行代码解决文件无法删除bug
Dispatch.call(excel, "save");
Dispatch.call(excel,"Close", new Variant(true));
excel= null;
}
xl.invoke("Quit", newVariant[] {});
xl= null;return true;
}catch(Exception e) {
e.printStackTrace();return false;
}finally{//始终释放资源
ComThread.Release();
}
}else if (postfixString.equalsIgnoreCase("doc") || postfixString.equalsIgnoreCase("docx")) {
ComThread.InitSTA();
ActiveXComponent wd= new ActiveXComponent("Word.Application");try{//不打开文档
Dispatch.put(wd, "Visible", new Variant(false));
Dispatch document= wd.getProperty("Documents").toDispatch();//打开文档
Dispatch doc =Dispatch
.invoke(document,"Open", Dispatch.Method, new Object[] { f.getAbsolutePath() }, new int[1])
.toDispatch();//开始打印
if (doc != null) {
Dispatch.call(doc,"PrintOut");//增加以下三行代码解决文件无法删除bug
Dispatch.call(doc, "save");
Dispatch.call(doc,"Close", new Variant(true));
doc= null;
}
wd.invoke("Quit", newVariant[] {});
wd= null;return true;
}catch(Exception e) {
e.printStackTrace();return false;
}finally{//始终释放资源
ComThread.Release();
}
}else{return false;
}
}else{return false;
}
}public static voidmain(String[] args) {
PrintDemo.printOfficeFile(new File("hehe.xls"));
}
}