package com.HeiBeiEDU.test2; import java.io.File; import com.jacob.activeX.ActiveXComponent; import com.jacob.com.ComThread; import com.jacob.com.Dispatch; import com.jacob.com.Variant; public class PrintDemo { public static boolean printOfficeFile(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", new Variant[] {}); 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", new Variant[] {}); wd = null; return true; } catch (Exception e) { e.printStackTrace(); return false; } finally { // 始終釋放資源 ComThread.Release(); } } else { return false; } } else { return false; } } public static void main(String[] args) { PrintDemo.printOfficeFile(new File("hehe.xls")); } }