Report+jasperReport客户端打印

    技术2022-05-20  42

    http://ajava.org/hot/print/16569.html Report+jasperReport客户端打印 时间:2009-10-28 23:44    来源:未知    作者:凌晨风 IE QQ 百度 我挖 Google POCO Yahoo 新浪 365Key 天极 和讯 博拉 Live 奇客 鲜果 收客 饭否 叽歪 挖客 核心提示:jasperReport客户端采用 applet,applet和activeX插件的区别大家搜一下,有一堆东西可以借鉴,下载jasperreports-3.0.0,在相应的 sample OR demo(记得不清了)中可以找到jasperReport实现的客户端打印demo,下来就来分析下具体实现。 新建一print.js文件: fun      jasperReport客户端采用 applet,applet和activeX插件的区别大家搜一下,有一堆东西可以借鉴,下载jasperreports-3.0.0,在相应的 sample OR demo(记得不清了)中可以找到jasperReport 实现的客户端打印demo,下来就来分析下具体实现。   新建一print.js文件: function  loadApplet(applet_URL)  {      var  URL  =  applet_URL  +   " /applets/jre-1_5_0_18-windows-i586-p.exe " ;     document.write(' < OBJECT id = " myApplet "  name = " myApplet " ');     document.write('classid = " clsid:8AD9C840-044E-11D1-B3E9-00805F499D93 "  WIDTH = " 0 "  HEIGHT = " 0 "  MAYSCRIPT name = " myApplet " ');     document.write('codebase = ' +  URL  + ' > ');     document.write(' < PARAM NAME = " CODE "  VALUE = " org.bulktree.report.print.applet.PrinterApplet "   /> ');     document.write(' < PARAM NAME = " CODEBASE "  VALUE = " ../applets "   /> ');     document.write(' < PARAM NAME = " ARCHIVE "  VALUE = " jasperreports-3.0.1-applet.jar "   /> ');     document.write(' < PARAM NAME = " type "  VALUE = " application/x-java-applet;version=1.5.0 "   /> ');     document.write(' < PARAM NAME = " scriptable "  VALUE = " false "   /> ');     document.write(' < PARAM NAME = " REPORT_URL "  VALUE = " ../report.view " > ');     document.write('no support java');     document.write(' < comment > ');     document.write(' < embed type = " application/x-java-applet;version=1.5.0 " ');     document.write('CODE = " org.bulktree.report.print.applet.PrinterApplet " ');     document.write('JAVA_CODEBASE = " applets "  ARCHIVE = " jasperreports-3.0.1-applet.jar " ');     document.write('scriptable = false ');     document.write('pluginspage = ' +  URL  + ' > ');     document.write(' < noembed ></ noembed > ');     document.write(' </ embed > ');     document.write(' </ comment > ');     document.write(' </ OBJECT > '); }      URL为一个固定的路径,是为了下载/applets/jre-1_5_0_18-windows-i586-p.exe(JRE运行环境)而存在的,也可以使用外网从sun公司网站下载,      REPORT_URL 为applet所要访问的地址,在工程的web.xml配置/report.view如下servlet即可,此servet可接收applet参数,生成jasperPrint对象,并传递到客户端applet中进行打印或者预览。   servlet配置如下: < servlet >                  < servlet-name > ReportServlet </ servlet-name >          < servlet-class > org.bulktree.report.print.applet.ReportServlet </ servlet-class >      </ servlet > < servlet-mapping >          < servlet-name > ReportServlet </ servlet-name >          < url-pattern > /report.view </ url-pattern >      </ servlet-mapping > ReportServlet核心代码就是根据业务找到对应的模板文件填充数据生成jasperPrint对象,产生的jasperPrint对象以对象流的形式发送给客户端,核心代码如下: //  生成jasperPrint对象             JasperPrint jasperPrint  =  JasperFillManager.fillReport(jasperReport,                     mapParam,  new  JREmptyDataSource()); // 组装流 response.setContentType( " application/octet-stream " );                 response.setBufferSize( 8986000 );                 ServletOutputStream outStream  =  response.getOutputStream();                 ObjectOutputStream oos  =   new  ObjectOutputStream(outStream);                 oos.writeObject(jasperPrint); 当然,客户端的applet使用如下: /*                      * applet与Servlet交互 URL传递页面传来的参数请求服务器Servlet                      * 把applet传递的参数追加到servlet中 2008-10-14 laoshulin                       */                     url  =   new  URL(getCodeBase(), requestUrl  +   " ?printView=true "                              +  paraStr);                      if  (url  ==   null {                         JOptionPane.showMessageDialog( this ,                                  " Source URL not specified " );                     }   else   {                         InputStream in  =  url.openStream();                         ObjectInputStream objIn  =   new  ObjectInputStream(in);                         Object obj  =  objIn.readObject();                          if  (obj  instanceof  JasperPrint)  {                         }   else   {                             JOptionPane.showMessageDialog( this , obj.toString());                              return ;                         }                          if  (jasperPrint  ==   null {                              //  根据Servlet返回的URL(ObjectStream)产生JasperPrint对象                             jasperPrint  =  (JasperPrint) obj;                         }                          //  拦截出现空报表问题                          if  (jasperPrint  !=   null                                  &&  jasperPrint.getPages().size()  >   0 {                              /*                              * 调用JasperReport.jar中JasperViewer绘制报表Frame                              * JasperViewer继承自JFrame,采用setDefaultCloseOperation响应关闭窗口事件                               */                             ViewerFrame viewerFrame  =   new  ViewerFrame( this                                     .getAppletContext(), jasperPrint,isShowPrintButton);                                                          viewerFrame.setVisible( true );                              // viewerFrame.show();                              //  JasperViewer viewer = new                              //  JasperViewer(jasperPrint);                              //  viewer.setVisible(true);                              //  viewer.setDefaultCloseOperation(javax.swing.WindowConstants.DISPOSE_ON_CLOSE);                              //  如果请求为空弹出对话框予以提示                         }   else   {                             JOptionPane                                     .showMessageDialog( this ,                                              " Please check Your Report SQL! It resulted in empty Report!  " );                              return ;                         }                     } 其中requestUrl为applet配置中的REPORT_URL,现实中可以采用此种方式传递参数到applet中,下篇文章会介绍更合适 的业务数据传递,?printView=true表示,传递printView参数对应的值为true,用来预览使用。剩下的工作就是怎么按照自己的要求 打印和预览了。  jasperReport为我们提供了打印和预览现成的方法: //  打印报表                                     JasperPrintManager                                             .printReport(print,  false ); /*   预览报表                              * 调用JasperReport.jar中JasperViewer绘制报表Frame                              * JasperViewer继承自JFrame,采用setDefaultCloseOperation响应关闭窗口事件                               */                             ViewerFrame viewerFrame  =   new  ViewerFrame( this                                     .getAppletContext(), jasperPrint);                             viewerFrame.setVisible( true ); 最后记着释放对象哦,浏览器会受不了得: url  =   null ;             jasperPrint  =   null ; OK,客户端就出现了,参照demo没有什么难度,下一篇我会介绍一下具体的细节,及套打的实现。

    最新回复(0)