反饋已提交
網絡繁忙
對於多張範本,使用者希望一鍵列印出來。
對於動態參數範本,使用者希望一鍵列印不同參數值時的報表。
例如有一張全國銷售人員的業績報表,傳入不同地區參數後,批量列印出這些報表。如下圖所示:
使用 JavaScript 呼叫 FineReport 的列印API FR.doURLPrint(config) 來批量列印報表。
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', 地區: '華東',銷售員: '張珊'}]"
建立普通報表,建立資料集 ds1:
select 地區 from 銷量
將地區欄位拖入 A2 儲存格,選中 A2 儲存格,點選「儲存格屬性」>「進階」按鈕,自訂顯示值,如下圖所示:
自訂顯示值內容:
'<input id="config1" type="checkbox" value="'+$$$+'" checked />'+$$$
注:checked 代表初始化時參數複選框預設全選,如果不需要被選中,去掉此參數。
為了將 A2 顯示成複選框樣式,還需要將其樣式設計成「用 HTML 顯示內容」。
選中 A2 儲存格,點選「儲存格屬性>其他」,設定顯示內容為「用 HTML 顯示內容」,如下圖所示:
選中 A4 儲存格,點選「元件」,設定為「按鈕元件」。
按鈕類型為「普通」,按鈕名稱為「批量列印」,如下圖所示:
選中 A4 儲存格,點選「元件」>「事件」,新增「點選事件」,輸入 JavaScript 程式碼,如下圖所示:
JavaScript 程式碼如下:
var printurl = "http://localhost:8075/webroot/decision/view/report";var p = [];//獲取當前頁面選中的參數值,並將值put 命令陣列中 $(":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, // 是否彈出設定視窗,true為彈出,false為不彈出 data: { reportlets: reportlets // 需要列印的範本列表 }, printType: 0, // 列印類型,0為零用戶端列印,1為本地列印 // 以下為本地列印的參數,僅當 printType 為 1 時生效 printerName: 'Microsoft Print to PDF', // 印表機名 pageType: 2, // 列印頁碼類型:0:所有頁,1:當前頁,2:指定頁 pageIndex: '1-3', // 頁碼範圍。當 pageType 為 2 時有效 copy: 1, // 列印份數 }; FR.doURLPrint(config);} else alert("請選擇需要列印的參數");
儲存範本,點選填報預覽,即可對選中的按鈕值根據不同參數批量列印。效果如「1.2 節預期效果」所示。
注:不支援行動端。
如何在 Web 頁面中,透過自訂列印按鈕實現批量列印報表呢?
本節範例:在 iframe 中嵌入一張各地區銷售人員的業績報表,並在頁面上提供參數複選框。參數選擇完成後,點選「自訂列印按鈕」,傳入不同地區參數,實現批量列印不同參陣列合的報表。
本文範例將範本%FR_HOME%\webapps\webroot\WEB-INF\reportlets\GettingStartedTW.cpt嵌入 iframe 中。
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(){ //透過sessionid列印 var printurl="http://localhost:8075/webroot/decision/view/report"; var p=[]; //獲取當前頁面選中的參數值,並將值put 命令陣列中 $(":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, // 列印類型,0為零用戶端列印,1為本地列印 // 以下為本地列印的參數,僅當 printType 為 1 時生效 printerName: 'Microsoft Print to PDF', // 印表機名 pageType: 2, // 列印頁碼類型:0:所有頁,1:當前頁,2:指定頁 pageIndex: '1-3', // 頁碼範圍。當 pageType 為 2 時有效 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 路徑下,如下圖所示:
開啟內建伺服器,在瀏覽器中存取:http://localhost:8075/webroot/help/page_demo/print_batch.html,選中複選框,點選「doPrint」按鈕即可列印,效果如下圖所示:
範例一:
點選下載範本:JS實現批量列印.cpt
範例二:
點選下載並解壓獲取 HTML 檔案:print_batch.zip
滑鼠選中內容,快速回饋問題
滑鼠選中存在疑惑的內容,即可快速回饋問題,我們將會跟進處理。
不再提示
10s後關閉
反馈已提交
网络繁忙