关于打印(自己总结一下)

来源:互联网 发布:淘宝手机详情页图 750 编辑:程序博客网 时间:2024/06/17 05:28
关于打印(自己总结一下)
系统中需要添加一个打印功能,以前没有做过,忙活了几天才做出来
(技术很菜,见谅 ^^)。期间也尝试了几个方法,现总结如下:
 ·用JavaScript调用IE的打印功能,代码如下:
  window.print();  //很简单?貌似是这样!
  但window.print();的功能是打印整个网页,在很多情况下我们并不需要打印整个网页,可能只是
  需要打印网页中的某个部分,怎么解决呢?再看下面的代码:
  function printdiv(printpage)
  {
   var headstr = "<html><head><title></title></head><body>";
   var footstr = "</body>";
   var newstr = document.all.item(printpage).innerHTML;
   var oldstr = document.body.innerHTML;
   document.body.innerHTML = headstr+newstr+footstr;
   window.print();
   document.body.innerHTML = oldstr;
   return false;
  }
  我们把需要打印的内容放到div中,然后再将div传递到上面的方法中即可。怎么调用它我就不说了吧,是个人就会。
  但是,问题又来了,打印出来在纸张上会显示页面和页脚,我晕!
  接下来我们再解决页眉页脚的问题,有两种方法:
  1、使用者打开IE——文件——页面设置,将页眉和页脚设为空
  2、使用程序完成:代码如下:
    var   hkey_root,hkey_path,hkey_key;  
     hkey_root="HKEY_CURRENT_USER";  
     hkey_path="//Software//Microsoft//Internet Explorer//PageSetup//";  
     function pagesetup_null()  
     {  
         try{  
             var RegWsh = new ActiveXObject("WScript.Shell"); 
             hkey_key="header";          
             RegWsh.RegWrite(hkey_root+hkey_path+hkey_key,"");  
             hkey_key="footer";  
             RegWsh.RegWrite(hkey_root+hkey_path+hkey_key,"");  
         }catch(e){
          alert("请先更改您的IE安全设置再打印!步骤如下:打开“IE——Internet选项——安全——自定义级别,将“对未标记为可安全执行脚本的ActiveX控件初始化并执行脚本”修改为“启用”即可");
         }  
     } 
    
     将<body></body>设为<body onload="pagesetup_null()"></body>即可。
     由于上面代码需要更改注册表,而IE默认是不能修改注册表的,所以还得手动设置IE,步骤如下:"打开
      IE——Internet选项——安全——自定义级别——“对未标记为可安全执行的脚本的ActiveX控件初始化并执行脚本”更改为启用"即可,
     这个方法还是需要使用者要手动修改IE,所以感觉并不是十分合适。
  接下来有尝试了几种方法,因为我们需要将数据放到表格中打印出来,所以想到了JTable。
  对JTable不怎么熟悉,而且第一行还需要合并单元格,所以做了很长时间,单独测试终于成功了,很是高兴!
  (由于代码比较多,就不贴上来了)于是放到系统中进行测试,刚开始一切正常(窃喜),当弹出打印选择框时,
   服务器突然自动关闭了,试了很多次都是这样,在Google中找了半天发现是dwr和程序发生冲突(我狂晕!怎么这么倒霉?)
   看来还得另辟蹊径,这时候突然想到了不怎么喜欢的Graphics类,参考着API随便的画了两下没想到结果成功了!终于打印出自己想要的数据了。有点儿欣喜若狂,但更多的是痛心疾首,咋就早没想到她呢?
   长期做J2EE看来对J2SE中的一些东西已经有些生疏了,要补课啊,就写这么多吧。
   代码片段:
      PAGES = 1;
            DocFlavor flavor = DocFlavor.SERVICE_FORMATTED.PRINTABLE;
            PrintRequestAttributeSet pras = new HashPrintRequestAttributeSet();
            PrintService printService[] = PrintServiceLookup.lookupPrintServices(flavor, pras);
            PrintService defaultService = PrintServiceLookup.lookupDefaultPrintService();
            PrintService service = ServiceUI.printDialog(null, 200, 200, printService, defaultService, flavor, pras);
            DocPrintJob job = service.createPrintJob();
            pras.add(MediaSizeName.ISO_A4);
            DocAttributeSet das = new HashDocAttributeSet();
            Doc doc = new SimpleDoc(this, flavor, das);
           
            try {
                job.print(doc, pras);
            } catch (PrintException pe) {
                pe.printStackTrace();
            }
   
   //类要继承Printable
   //重写方法
     public int print(Graphics gp, PageFormat pf, int page)
            throws PrinterException {
     Graphics2D g2 = (Graphics2D) gp;
          g2.setPaint(Color.black);
          if (page >= PAGES){
              return Printable.NO_SUCH_PAGE;
          }
          g2.translate(pf.getImageableX(), pf.getImageableY());
          Font font = new Font("楷体", Font.BOLD, 16);
          g2.setFont(font);
          /* 下面就自己开始画吧 */
        return Printable.PAGE_EXISTS;
    }

 

原创粉丝点击