jacob調用打印機打印


環境准備:

1.首先將JACOB的DLL(如jacob-1.17-x64.dll,要跟jar包版本一致)拷貝至 C:\Windows\System32 中

2.在計算機管理的服務中將服務DCom Server Process Launcher(DcomLaunch)打開。

3.將jacob.jar拷貝到項目的/libs目錄下,jdk/bin目錄下,jdk/jre/bin目錄下,以及jre/bin目錄下。

4.需要安裝Microsoft office 2003以上版本

 

代碼:

import com.jacob.activeX.ActiveXComponent;
import com.jacob.com.ComThread;
import com.jacob.com.Dispatch;
import com.jacob.com.Variant;

public class PrintByJacobUtil {
	
		/**	  Excel
		 * @param path 打印文件路徑,形如 E:\\temp\\tempfile\\1494607000581.xls
		 */
		public static void printExcel(String filepath){
			if(filepath.isEmpty()){
				return;
			}
			//初始化COM線程
			ComThread.InitSTA();
			//新建Excel對象
			ActiveXComponent xl=new ActiveXComponent("Excel.Application");
			try { 
				System.out.println("Version=" + xl.getProperty("Version"));
				//設置是否顯示打開Excel  
				Dispatch.put(xl, "Visible", new Variant(false));
				//打開具體的工作簿
				Dispatch workbooks = xl.getProperty("Workbooks").toDispatch(); 
				Dispatch excel=Dispatch.call(workbooks,"Open",filepath).toDispatch(); 
				
				//設置打印屬性並打印
				Dispatch.callN(excel,"PrintOut",new Object[]{Variant.VT_MISSING, Variant.VT_MISSING, new Integer(1),//new Integer(1),設置打印的份數
						new Boolean(false),/*PRINT_NAME*/Variant.VT_MISSING, new Boolean(true),Variant.VT_MISSING, ""});
				
				//關閉文檔
				Dispatch.call(excel, "Close", new Variant(false));  
			} catch (Exception e) { 
				e.printStackTrace(); 
			} finally{
				xl.invoke("Quit",new Variant[0]);//關閉進程
				//始終釋放資源 
				ComThread.Release(); 
			} 
		}


		
		/**	  Word
		 * @param path 打印文件路徑,形如 E:\\temp\\tempfile\\1494607000581.doc
		 */
		public  static  void printWord(String filepath) {
			if(filepath.isEmpty()){
				return;
			}
			System.out.println("開始打印word");
			//初始化COM線程
			ComThread.InitSTA();
			
			//使用Jacob創建 ActiveX部件對象:
			ActiveXComponent word=new ActiveXComponent("Word.Application");
			
			//打開Word文檔
			Dispatch doc=null;
			Dispatch.put(word, "Visible", new Variant(false));// 這里Visible是控制文檔打開后是可見還是不可見,若是靜默打印,那么第三個參數就設為false
//			word.setProperty("ActivePrinter", new Variant("pdfFactory Pro")); //設置打印機,第二個參數即為打印機的name
			Dispatch docs=word.getProperty("Documents").toDispatch();
			doc=Dispatch.call(docs, "Open", filepath).toDispatch();
			try {
				Dispatch.call(doc, "PrintOut");//打印
			} catch (Exception e) {
				e.printStackTrace();
				System.out.println("word打印失敗");
			}finally{
				try {
					if(doc!=null){
						//關閉文檔
						Dispatch.call(doc, "Close",new Variant(0));
					}
				} catch (Exception e2) {
					e2.printStackTrace();
				}
				word.invoke("Quit", new Variant[] {});//關閉進程
				//釋放資源
				ComThread.Release();
				
			}
			
		}
		
}

 

其他問題:

上面的某步中,我們使用“open”打開了一個現有的word文檔,如果改用“add”,那么我們就可以新建一個文檔了

Dispatch document = Dispatch.call(documents, "Add").toDispatch(); // 使用Add命令創建一個新文檔  
  
Dispatch wordContent = Dispatch.get(document, "Content").toDispatch(); // 取得word文件的內容  
  
Dispatch.call(wordContent, "InsertAfter", "這里是一個段落的內容");//插入一個段 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM