下面就通過報表分析工具FineReport來介紹一下如何設置批量打印
工具/原料
報表分析工具FineReport7.1.1
大小:148.2M 適用平臺:windows/linux
批量打印_(Get/Post)
問題描述
若您有很多張模板需要打印,而如果一個一個進行打印的話會比較麻煩,希望批量打印出來。
例如有一張全國銷售人員的業績報表,我傳入不同銷售人員參數後,批量打印出這些報表。
批量打印傳入的url格式
批量打印多張報表url格式如:;reportname1.cpt',paraname:'paravalue'},{reportlet:'reportname2.cpt',paraname:'paravalue'}]。
調用內置的打印方法直接使用完整的url進行批量打印:
var printurl=";reportname1.cpt',paraname:'paravalue'},{reportlet:'reportname2.cpt',paraname:'paravalue'}]";
FR.doURLPDFPrint(printurl,true); //get方式傳參
如批量打印的模板過多的話,url就很長,而get方式對長度有限制,url過長時會導致打印失敗。推薦批量打印的時候用post方式,reportlets參數打包在數據包中傳輸,不在url中顯示,從而縮短url長度,另外安全性較好,如下:
var printurl=";;
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打印完整代碼
function doPrint(){ //通過sessionid打印
var printurl=";;
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("請選擇需要打印的參數");
}
效果查看
打開內置服務器,選中多個複選框,點擊doprint按鈕,既可以實現批量打印了。
批量打印時是否累加頁碼
問題描述
在批量預覽或者批量打印報表時會發現報表頁碼是累加的,因為這些報表是獨立的沒有什麼關聯的進行批量預覽或批量打印只是為了節省工作,不用一個一個預覽模板或者打印模板,因此希望頁碼是這些報表的頁面是獨立的。
解決方案
在批量打印的URL後增加&__cumulatepagenumber__=false即可。
示例
如:批量打印或預覽兩個報表模板時,即打印或預覽第二張模板時,頁碼仍從第一頁開始。
各報表設置打印顯示的頁數
如:k1.cpt,除了報表內容外,再任意單元格處,輸入公式:顯示當前頁與總頁數。例如,如下樣式:
如:k2.cpt,同上。如下:
若兩張模板均放置在reportlets下,URL中的輸入地址如下。
預覽效果
不累加頁碼效果
如:啟動我們的內置服務器,預覽這兩張模板,URL中輸入,{reportlet:/k2.cpt})&__cumulatepagenumber__=false
預覽,效果如下:
第一個模板(k1.cpt)的第一頁,如下:
第一個模板(k1.cpt)的第三頁,如下:
第二個模板(k2.cpt)為第四頁內容,顯示如下:
如上看出,就是第二個模板的頁碼,仍從第一頁開始。
累加頁碼效果
而地址欄後面不加&__cumulatepagenumber__=false ,其效果是頁碼累加的效果,如下:
第一個模板(k1.cpt)的每頁內容的當前頁還是如上效果,而總頁數變為4。
第二個模板(k2.cpt)為第四頁的內容,顯示如下:
查看到,第二個模板的頁碼,是累加其第一個模板的頁碼的,就不是從第一頁開始重新計算當前第二個模板頁碼的。