1. 概述
1.1 版本
1.2 預期效果
對於多張範本,使用者希望一鍵列印出來。
對於動態參數範本,使用者希望一鍵列印不同參數值時的報表。
例如有一張全國銷售人員的業績報表,傳入不同地區參數後,批量列印出這些報表。如下圖所示:

1.3 實現思路
使用 JavaScript 呼叫 FineReport 的列印API FR.doURLPrint(config) 來批量列印報表。
2. API簡介
FR.doURLPrint(config)列印API內容可參考文檔 JS呼叫FR列印API 第 2 章。
實現批量列印需要對API中 data 參數進行設定。data參數形式:
data: {
reportlets: "[{reportlet: 'reportname1.cpt',param1: 'value1',param2: 'value2'},
{reportlet: 'reportname2.cpt',param3: 'value3',param4: 'value4}]"
}
注:其中“[]”中的內容對應需要列印的內容,一個“{}”對應一個範本,“{}”中內容用“,”隔開,順序依次為範本名稱、範本中參數名稱,若有多個參數也用","隔開。
舉例給出不同應用場景下對應的設定:
1)列印同一個範本,傳入範本的參數不同
"[{reportlet: 'GettingStarted.cpt',地區: '華北'},
{reportlet: 'GettingStarted.cpt', 地區: '華東'}]"
2)列印多個範本,傳入的範本名稱不同
"[{reportlet: 'GettingStarted001.cpt',地區: '華北'},
{reportlet: 'GettingStarted002.cpt', 地區: '華東'}]"
3)列印同一個範本,傳入兩個參數
"[{reportlet: 'GettingStarted.cpt',地區: '華北',銷售員: '孫林'},
{reportlet: 'GettingStarted.cpt', 地區: '華東',銷售員: '張珊'}]"
3. 範例一:JS實現本地批量列印
3.1 範本準備
3.1.1 建立資料集
建立普通報表,建立資料集 ds1:
select 地區 from 銷量
3.1.2 設定參數複選框按鈕
將地區欄位拖入 A2 儲存格,選中 A2 儲存格,點選「儲存格屬性」>「進階」按鈕,自訂顯示值,如下圖所示:
自訂顯示值內容:
'<input id="config1" type="checkbox" value="'+$$$+'" checked />'+$$$
注:checked 代表初始化時參數複選框預設全選,如果不需要被選中,去掉此參數。

為了將 A2 顯示成複選框樣式,還需要將其樣式設計成「用 HTML 顯示內容」。
選中 A2 儲存格,點選「儲存格屬性>其他」,設定顯示內容為「用 HTML 顯示內容」,如下圖所示:

3.1.3 設定按鈕元件
選中 A4 儲存格,點選「元件」,設定為「按鈕元件」。
按鈕類型為「普通」,按鈕名稱為「批量列印」,如下圖所示:

3.2 設定批量列印 JS 事件
選中 A4 儲存格,點選「元件」>「事件」,新增「點選事件」,輸入 JavaScript 程式碼,如下圖所示:

JavaScript 程式碼如下:
var printurl = "http://localhost:8075/webroot/decision/view/report";
var p = [];
$(":checkbox").each(function() {
if ($(this).attr("checked") == "checked")
p.push("{reportlet: 'GettingStartedTW.cpt', 地區 : " + $(this).val() + "}");
})
if (p.length > 0) {
var rp = p.join(",");
var reportlets = "[" + rp + "]";
var config = {
printUrl: printurl,
isPopUp: true,
data: {
reportlets: reportlets
},
printType: 0,
printerName: 'Microsoft Print to PDF',
pageType: 2,
pageIndex: '1-3',
copy: 1,
};
FR.doURLPrint(config);
} else
alert("請選擇需要列印的參數");
3.3 效果預覽
儲存範本,點選填報預覽,即可對選中的按鈕值根據不同參數批量列印。效果如「1.2 節預期效果」所示。
注:不支援行動端。
4. 範例二:Web頁面傳參列印
如何在 Web 頁面中,透過自訂列印按鈕實現批量列印報表呢?
本節範例:在 iframe 中嵌入一張各地區銷售人員的業績報表,並在頁面上提供參數複選框。參數選擇完成後,點選「自訂列印按鈕」,傳入不同地區參數,實現批量列印不同參陣列合的報表。
4.1 範本準備
本文範例將範本%FR_HOME%\webapps\webroot\WEB-INF\reportlets\GettingStartedTW.cpt嵌入 iframe 中。
4.2 建立 HTML 檔案
1)建立print_batch.html檔案,內容如下:
注:使用者需自行修改檔案中 printurl 的地址為自身工程的地址及埠。
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<html>
<head>
<title>FineReport Demo</title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<script type="text/javascript" src="/webroot/decision/view/report?op=emb&resource=finereport.js"></script>
<link rel="stylesheet" type="text/css" href="/webroot/decision/view/report?op=emb&resource=finereport.css"/>
<script type='text/javascript'>
function doPrint(){
var printurl="http://localhost:8075/webroot/decision/view/report";
var p=[];
$(":checkbox").each(function(){
if($(this).attr("checked")=="checked")
p.push("{reportlet: 'GettingStarted.cpt', 地區 : " + $(this).val() + "}");
})
if(p.length>0){
var rp=p.join(",");
var reportlets = "[" + rp + "]";
var config = {
printUrl : printurl,
isPopUp : true,
data : {
reportlets: reportlets
},
printType: 0,
printerName: 'Microsoft Print to PDF',
pageType: 2,
pageIndex: '1-3',
copy: 1,
};
FR.doURLPrint(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>
程式碼說明如下:
在 Web 頁面中呼叫 FineReport 列印方法前,需要先引入 finereport.js,這個檔案是報表工程自帶的,直接在 Web 程式碼中新增即可。
注:finereport.js 在報表工程目錄中沒有實體檔案,引用它有個固定寫法,詳情參見文檔:FineReport內建方法
以上程式碼在 iframe 頁面中嵌入多個參數複選框,然後獲取複選框的值拼出API的 data 參數 ,最後呼叫列印方法 doURLPrint() 進行列印,使用者可以根據自己的實際需求對參數複選框修改。
本節範例使用的是本地列印,若想使用其他列印方法可以查看 JS 呼叫 FR 列印方法 文檔,用法類似。
2)將 print_batch.html檔案放置到 %FR_HOME%\webapps\webroot\help\page_demo 路徑下,如下圖所示:

4.3 效果預覽
開啟內建伺服器,在瀏覽器中存取:http://localhost:8075/webroot/help/page_demo/print_batch.html,選中複選框,點選「doPrint」按鈕即可列印,效果如下圖所示:

5. 檔案下載
範例一:
點選下載範本:JS實現批量列印.cpt
範例二:
點選下載並解壓獲取 HTML 檔案:print_batch.zip