简述:
在使用报表软件进行打印的时候,对于打印的需求总是灵活多变的,文章主要介绍了Web报表工具FineReport自定义打印的几种方法。
JS调用FineReport打印方法
∙问题描述
∙调用方法
∙报表内置打印方法
∙示例
▪
▪
1. 问题描述
2. 调用方法
先引入FineReport内部的js文件,然后调用js文件中定义好的内部打印方法,如Flash打印方式调用方法如下:
1. <script type="text/javascript" src="/WebReport/ReportServer?op=emb&resource=finereport.js"></script> //调用报表内部finereport.js文件
2. <link rel="stylesheet" type="text/css" href="/WebReport/ReportServer?op=emb&resource=finereport.css" /> //定义弹出打印对话框的样式
3. <script type="text/javascript">
4. FR.doURLFlashPrint(url); //url为打印的报表路径
5. </script>
3. 报表内置打印方法
FineReport提供了三种客户端打印方式,各自的调用方法如下(三种方法传入的参数是一致的):
打印方式 | 打印方法 | 方法的解释说明 |
Flash打印 | doURLFlashPrint(printurl) | printurl需要打印的模板地址,默认弹出对话框,get方式传参 |
doURLFlashPrint(printurl,isPopUp) | isPopUp判断是否弹出打印对话框参数。默认为true表示需要打印设置框,反之,false则表示不弹出打印对话框 | |
doURLFlashPrint(printurl,isPopUp,config) | config参数,有一个data属性,data属性中定义需要加在请求中的参数如: {data : {param1 : XXX, param2 :XXX, ....}}即post传参 | |
PDF打印 | doURLPDFPrint(参数同上) | 同上 |
Applet打印 | doURLAppletPrint(参数同上) | |
具体三种打印效果的介绍可参考文档各打印方式的对比介绍。
4. 示例
4.1 Flash打印为例效果
若您需要在页面中某个位置添加一打印按钮,如以Flash打印为例,调用打印方法时弹出打印对话框,如下效果:
4.2 实现代码
1. <html>
2. <head>
3. <title>FineReport Demo</title>
4. <meta http-equiv="Content-Type" content="text/html; charset=GBK" />
5. <script type="text/javascript" src="/WebReport/ReportServer?op=emb&resource=finereport.js"></script>
6. <link rel="stylesheet" type="text/css" href="/WebReport/ReportServer?op=emb&resource=finereport.css"/>
7. <script type="text/javascript">
8. function doPrint(){
9. var url="localhost:8075/WebReport/ReportServer?reportlet="; //端口和ip根据具体情况设定
10. url+=port.cpt.value;
11. FR.doURLFlashPrint(url);
12. //FR.doURLFlashPrint(url,false); //不需要弹出打印对话框
13. }
14. </script>
15. </head>
16. <body>
17. <form name="report">
18. <input id="cpt" type="checkbox" value="gettingstarted.cpt"/>gettingstarted.cpt<br>
19. </form>
20. <input type=button name=doprint onclick=doPrint() value='doPrint'></input>
21. </body>
22. </html>
代码可参考WebReport/page_demo/cusprint.html,访问该页面,选中模板点击doprint按钮时,即能看到上述效果。
批量打印
∙问题描述
∙批量打印传入的url格式
∙示例
▪
▪
1. 问题描述福田汽车站
多张报表需要打印,一个一个进行打印比较麻烦,此时需要使用批量打印。
下面以PDF打印方式为例
2. 批量打印传入的url格式
批量打印多张报表url格式如:localhost:8075/WebReport/ReportServer?reportlets=[{reportlet:'reportname1.cpt',paraname:'paravalue'},{reportlet:'reportname2.cpt',paraname:'paravalue'}]。
调用内置的打印方法直接使用完整的url进行批量打印:
1. var printurl="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="localhost:8075/WebReport/ReportServer";
2. var paravalue="[{reportlet:'reportname1.cpt',paraname:'paravalue'},{reportlet:'reportname2.cpt',paraname:'paravalue'}]";
3. FR.doURLPDFPrint(printurl,true,{data: {reportlets : paravalue}}); //post传参,reportlets参数不在url中显示
注:调用打印方法中的第二个参数为true表示弹出对话框,为false表示不弹出对话框即静默打印。具体可参考JS调用FineReport打印方法文档。
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 getreportlets(){ //获取报表URL
8. var tmpURL = '';
9. var reportlets='';
10. for (var i=0;i&port.cpt.length;i++ ){
11. if (port.cpt[i].checked) {
12. if (tmpURL) {
13. tmpURL += ',';
14. }
15. tmpURL +=&port.cpt[i].value;
16. }
17. }
18. if(tmpURL)
19. reportlets='['+tmpURL+']';
20. return reportlets;
21. }
发布评论