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

1. 问题描述编辑

在进行报表查看时,有时会发现一两条重要或者错误信息,需要将其进行打印出来备份一下,这时就需要动态实现打印效果,勾选需打印的信息,将其打印出来。

2. 实现思路编辑

通过勾选复选框控件,获取到需要打印的值,点击自定义打印按钮,把值以参数的形式传到另一个模板,并打印出来,以达到只打印出客户所勾选记录的效果。

3. 实现步骤编辑

3.1 父模板
  • 数据准备
新建模板,新建数据查询:sql为SELECT * FROM 雇员
  • 报表主体设计
在A3单元格中使用复选框控件,用来勾选需要打印的信息,如下图:
获取复选框的值
为复选框添加初始化事件,将勾选项的信息放到数组中保存,代码如下:
  1. if(!FR.checkBoxes){  
  2. FR.checkBoxes=new Array();  
  3. }  
  4. var len=FR.checkBoxes.length;  
  5. FR.checkBoxes[len]=this;  
工具栏添加自定义打印按钮
点击模板>模板web属性>填报页面设置,选择为该模板单独设置,添加一个自定义打印按钮至工具栏中,并把自定义打印按钮清空,详细请参照填报页面设置
自定义JavaScript,代码如下:
  1. var joinData=function(){  
  2. var datas=[];  
  3.  for(var i=0;i<FR.checkBoxes.length;i++){  
  4. var checkBox=FR.checkBoxes[i];  
  5. if(checkBox.getValue()===true){  
  6. var colRow=FR.cellStr2ColumnRow(checkBox.options.location);  
  7. colRow.col++;  
  8. var location=FR.columnRow2CellStr(colRow);  
  9. var value=_g().getCellValue(location,null);  
  10. datas[datas.length]=value;  
  11. }  
  12. }  
  13. return datas.join(",");  
  14.   
  15. }  
  16. var data=joinData();  
  17. var url="http://localhost:8075/WebReport/ReportServer?reportlet=doc/Advanced/PrintReport/SelectPrint_son.cpt"+"&ids="+data;  
  18. window.onbeforeunload=null;  
  19. FR.doURLPDFPrint(url);  
  • 保存
已完成模板请参见%FR%\WebReport\WEB-INF\reportlets\doc\Advanced\PrintReport\SelectPrint.cpt
3.2 子模板
  • 数据准备
新建模板,新建数据查询ds1,sql为SELECT * FROM 雇员 where 雇员id in (${ids}),该参数是为了接收父模板传递过来的雇员id。
  • 报表主体设计
  • 保存
已完成模板请参见%FR%\WebReport\WEB-INF\reportlets\doc\Advanced\PrintReport\SelectPrint_son.cpt
注:父模板与子模板的样式应当保持一致,因为点击打印按钮之后,将父模板中的数据以参数的形式传递给子模板,并打印子模板。
3.3 预览与打印
打开父模板,点击填报预览,选中需要打印的数据,点击工具栏上的打印按钮,即可将选中信息打印出来了,如下图:

注:由于父模板中填报控件的存在,必须以填报预览的方式查看。