統計報表系統FineReport中如何設置批量列印

若您有很多張模板需要列印,而如果一個一個進行列印的話會比較麻煩,希望批量列印出來,下面就通過統計報表系統FineReport來介紹一下如何進行設置。

工具/原料

統計報表系統FineReport7.1.1
大小:148.2M 適用平台:windows/linux

方法/步驟

批量列印傳入的url格式

批量列印多張報表url格式如:http://localhost:8075/WebReport/ReportServer?reportlets=[{reportlet:'reportname1.cpt',paraname:'paravalue'},{reportlet:'reportname2.cpt',paraname:'paravalue'}]。

調用內置的列印方法直接使用完整的url進行批量列印:

var printurl="http://localhost:8075/WebReport/ReportServer?reportlets=[{reportlet:'reportname1.cpt',paraname:'paravalue'},{reportlet:'reportname2.cpt',paraname:'paravalue'}]";

FR.doURLPDFPrint(printurl,true);   //get方式傳參

如批量列印的模板過多的話,url就很長,而get方式對長度有限制,url過長時會導致列印失敗。推薦批量列印的時候用post方式,reportlets參數打包在數據包中傳輸,不在url中顯示,從而縮短url長度,另外安全性較好,如下:

var printurl="http://localhost:8075/WebReport/ReportServer";

var reportlets = FR.cjkEncode("[{reportlet: '/doc/Primary/Parameter/Parameter_1.cpt', 地區 : '華東'}, {reportlet: '/doc/Primary/Parameter/Parameter_1.cpt', 地區 : '華北'}]");

var config = {

url : printurl,

isPopUp : false,

data : {

reportlets: reportlets

}

};

FR.doURLPDFPrint(config);

註:調用列印方法中的第二個參數為true表示彈出對話框,為false表示不彈出對話框即靜默列印。

示例

如需要列印出某個模板所有參數情況對應的結果,如下圖,選擇希望列印的參數值,點擊doPrint按鈕批量列印出對應的結果。

實現思路

首先通過JS獲取複選框的值然後拼湊出正確的url,最後調用列印方法如PDF列印,通過post方法傳參(FR.doURLPDFPrint(printurl,true,{data: {reportlets : paravalue}});)或get方法傳參(FR.doURLPDFPrint(printurl,true);)進行批量列印。

post傳參PDF列印完整代碼

<html>

<head>

<title>FineReport Demo</title>

<script type="text/javascript" src="/WebReport/ReportServer?op=emb&resource=finereport.js"></script>

<link rel="stylesheet" type="text/css" href="/WebReport/ReportServer?op=emb&resource=finereport.css"/>

<script type="text/javascript">

function doPrint(){     //通過sessionid列印

var printurl="http://localhost:8075/WebReport/ReportServer";

var p=[];

//獲取當前頁面選中的參數值,並將值放入數組中

$(":checkbox").each(function(){

if($(this).attr("checked")=="checked")

p.push("{reportlet: '/doc/Primary/Parameter/Parameter_1.cpt', 地區 : " + $(this).val() + "}");

})

if(p.length>0){

//將參數值組成的數組轉化為字符串

var rp=p.join(",");

//使用FineReport自帶的方法cjkEncode進行轉碼

var reportlets=FR.cjkEncode("["+rp+"]");

var config = {

url : printurl,

isPopUp : false,

data : {

reportlets: reportlets

}

};

FR.doURLPDFPrint(config);  }

else

alert("請選擇需要列印的參數");

}

</script>

</head>

<body>

<form name="report" width="200" height="200">

<input id="config1" type="checkbox" value="華東" />華東<br>

<input id="config2" type="checkbox" value="華北" />華北<br>

<input type="button" onClick="doPrint();" value="doPrint"><br>

</form>

<body>

</html>

效果查看

打開內置伺服器,在瀏覽器中輸入http://localhost:8075/WebReport/page_demo/cusprint_batch.html,選中多個複選框,點擊doprint按鈕,既可以實現批量列印了。

原作者:FineReport

本文內容整理自網絡, 文中所有觀點看法不代表淘大白的立場