历史版本1 :批量打印 返回文档
编辑时间: 内容长度:图片数:目录数: 修改原因:

1. 问题描述编辑

若您有很多张模板需要打印,而如果一个一个进行打印的话会比较麻烦,希望批量打印出来。
例如有一张全国销售人员的业绩报表,我传入不同销售人员参数后,批量打印出这些报表。

2. 批量打印传入的url格式编辑

批量打印多张报表url格式如:http://localhost:8075/WebReport/ReportServer?reportlets=[{reportlet:'reportname1.cpt',paraname:'paravalue'},{reportlet:'reportname2.cpt',paraname:'paravalue'}]
调用内置的打印方法直接使用完整的url进行批量打印:
  1. var printurl="http://localhost:8075/WebReport/ReportServer?reportlets=[{reportlet:'reportname1.cpt',paraname:'paravalue'},{reportlet:'reportname2.cpt',paraname:'paravalue'}]";  
  2. FR.doURLPDFPrint(printurl,true);   //get方式传参  
如批量打印的模板过多的话,url就很长,而get方式对长度有限制,url过长时会导致打印失败。推荐批量打印的时候用post方式,reportlets参数打包在数据包中传输,不在url中显示,从而缩短url长度,另外安全性较好,如下:
  1. var printurl="http://localhost:8075/WebReport/ReportServer";       
  2.     var reportlets = FR.cjkEncode("[{reportlet: '/doc/Primary/Parameter/Parameter_1.cpt', 地区 : '华东'}, {reportlet: '/doc/Primary/Parameter/Parameter_1.cpt', 地区 : '华北'}]");  
  3.             var config = {  
  4.             url : printurl,  
  5.             isPopUp : false,  
  6.             data : {  
  7.                 reportlets: reportlets  
  8.             }  
  9.     };  
  10.     FR.doURLPDFPrint(config);  
注:调用打印方法中的第二个参数为true表示弹出对话框,为false表示不弹出对话框即静默打印。具体可参考不预览模板直接打印文档。

3. 示例编辑

如需要打印出某个模板所有参数情况对应的结果,如下图,选择希望打印的参数值,点击doPrint按钮批量打印出对应的结果。
3.1 实现思路
首先通过JS获取复选框的值然后拼凑出正确的url,最后调用打印方法如PDF打印,通过post方法传参(FR.doURLPDFPrint(printurl,true,{data: {reportlets : paravalue}});)或get方法传参(FR.doURLPDFPrint(printurl,true);)进行批量打印。
3.2 post传参PDF打印完整代码
  1. <html>         
  2. <head>        
  3. <title>FineReport Demo</title>       
  4. <script type="text/javascript" src="/WebReport/ReportServer?op=emb&resource=finereport.js"></script>         
  5. <link rel="stylesheet" type="text/css" href="/WebReport/ReportServer?op=emb&resource=finereport.css"/>         
  6. <script type="text/javascript">              
  7.     function doPrint(){     //通过sessionid打印        
  8.         var printurl="http://localhost:8075/WebReport/ReportServer";     
  9.         var p=[];  
  10.         //获取当前页面选中的参数值,并将值放入数组中  
  11.         $(":checkbox").each(function(){  
  12.             if($(this).attr("checked")=="checked")  
  13.                 p.push("{reportlet: '/doc/Primary/Parameter/Parameter_1.cpt', 地区 : " + $(this).val() + "}");  
  14.   
  15.         })  
  16.         if(p.length>0){  
  17.         //将参数值组成的数组转化为字符串  
  18.         var rp=p.join(",");  
  19.         //使用FineReport自带的方法cjkEncode进行转码  
  20.         var reportlets=FR.cjkEncode("["+rp+"]");  
  21.                 var config = {    
  22.                 url : printurl,    
  23.                 isPopUp : false,  
  24.                 data : {    
  25.                     reportlets: reportlets    
  26.                 }    
  27.         };    
  28.         FR.doURLPDFPrint(config);  }  
  29.         else  
  30.         alert("请选择需要打印的参数");  
  31.     }    
  32. </script>         
  33. </head>         
  34. <body>         
  35. <form name="report" width="200" height="200">    
  36.     <input id="config1" type="checkbox" value="华东" />华东<br>      
  37.     <input id="config2" type="checkbox" value="华北" />华北<br>      
  38.     <input type="button" onClick="doPrint();" value="doPrint"><br>       
  39. </form>         
  40. <body>         
  41. </html>    
代码可查看%FR_HOME%/WebReport/page_demo/cusprint_batch.html
3.3 效果查看

打开内置服务器,在浏览器中输入http://localhost:8075/WebReport/page_demo/cusprint_batch.html,选中多个复选框,点击doprint按钮,既可以实现批量打印了。