反饋已提交

網絡繁忙

批量列印

1. 概述

1.1 版本

報表伺服器版本
11.0

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 = [];
//獲取當前頁面選中的參數值,並將值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("請選擇需要列印的參數");



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/htmlcharset=UTF-8" />
  <script type="text/javascript" src="/webroot/decision/view/report?op=emb&resource=finereport.js"></script>
<link rel="stylesheet" type="text/csshref="/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 路徑下,如下圖所示:

4.3 效果預覽

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

5. 檔案下載

範例一:

點選下載範本:JS實現批量列印.cpt

範例二:

點選下載並解壓獲取 HTML 檔案:print_batch.zip


附件列表


主題: 報表專題
  • 有幫助
  • 沒幫助
  • 只是瀏覽
  • 圖片不清晰
  • 用語看不懂
  • 功能說明看不懂
  • 操作說明太簡單
  • 內容有錯誤
中文(繁體)

滑鼠選中內容,快速回饋問題

滑鼠選中存在疑惑的內容,即可快速回饋問題,我們將會跟進處理。

不再提示

10s後關閉

獲取幫助
線上支援
獲取專業技術支援,快速幫助您解決問題
工作日9:00-12:00,13:30-17:30在线
頁面反饋
針對當前網頁的建議、問題反饋
售前咨詢
業務咨詢
電話:0933-790886或 0989-092892
郵箱:taiwan@fanruan.com
頁面反饋
*問題分類
不能為空
問題描述
0/1000
不能為空

反馈已提交

网络繁忙