zoukankan      html  css  js  c++  java
  • jacob调用打印机打印

    环境准备:

    1.首先将JACOB的DLL(如jacob-1.17-x64.dll,要跟jar包版本一致)拷贝至 C:WindowsSystem32 中

    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", "这里是一个段落的内容");//插入一个段 
    
  • 相关阅读:
    JS正则表达式
    JS验证电话号是否合法
    特性Attribute 的使用
    三层架构(面向对象思想)
    oracle 游标的使用
    oracle中的net manager 无法配置
    .net学习网站汇总
    每天进步一点点之后缀表达式求值
    每天进步一点点之中缀表达式转后缀表达式
    下载Android代码
  • 原文地址:https://www.cnblogs.com/zy2009/p/6870374.html
Copyright © 2011-2022 走看看