1. 概述
在進行報表集成時,常常需要通過 JavaScript 來調用FR的打印事件。例如:不查看報表直接打印、批量打印
JAR 包時間在 2018-04-09 之前的設計器,有兩種辦法實現 Flash、PDF 兩種客戶端打印:doURLFlashPrint、doURLPDFPrint
JAR 包時間在 2018-04-09 及之後的設計器,有一種辦法實現新客戶端打印:doURLPrint
在實現具體實例前,您需要了解 JS 調用 FR 打印方法的語法。
注1:10.0 設計器和部署包使用的都是 openjdk,而使用 openjdk 無法啓動 flash 打印,使用 Oracle/sun jdk 可以。
注2:flash 打印目前是已經被淘汰了的技術,很多浏覽器都将不再支持 flash 打印,建議客戶使用零客戶端或本地打印。
2. 新打印接口
JS 打印接口:FR.doURLPrint(config),使用 get 傳參,具體 config 參數如下表所示:
參數 | 含義 |
---|---|
printurl | 需要打印的模板的應用地址和服務,如"http://localhost:8075/webroot/decision/view/report" 允許爲空。如果爲空的話,就使用當前的 servlet 地址。如果需要跨域,則此參數不能爲空 |
isPopUp | 是否彈出設置窗口 true:彈出 false:不彈出 |
data | 爲需要打印的模板列表及其參數,如"[{reportlet: '1.cpt', p1: 'a'}, {reportlet: '1.cpt', p1: 'b'}]" |
printType | 打印類型 0:零客戶端打印 1:本地打印 |
下面的參數爲零客戶端打印的參數,僅當 printType 爲 0 時生效 | |
ieQuietPrint | IE 靜默打印設置 true:靜默 false:不靜默 |
下面的參數爲本地打印的參數,僅當 printType 爲 1 時生效 | |
printerName | 打印機名 |
pageType | 打印頁碼類型 0:所有頁 1:當前頁 2:指定頁 |
pageIndex | 頁碼範圍 當 pageType 爲 2 時有效 |
copy | 打印份數 |
needSelectSheet | 是否打印指定 Sheet 頁 true:指定 Sheet 頁 false或參數爲空:打印全部 Sheet |
sheetIndex | Sheet頁,只支持正整數或正整數區間 正整數示例:2 正整數區間示例:'7-10' |
示例:
新建一個模板,在單元格 A1 添加“按鈕控件”,并添加“點擊”事件,如下圖所示:
JS 代碼:
var printurl="http://localhost:8075/webroot/decision/view/report";
var reportlets ="[{reportlet: 'GettingStarted.cpt', 地區: '華北'}, {reportlet: 'GettingStarted.cpt', 地區: '華東'}]";
var config = {
printUrl : printurl,
isPopUp : true,
// 是否彈出設置窗口,true爲彈出,false爲不彈出
data :{
// 多模板格式: [{reportlet: 'name.cpt', a: 'a1'}, {reportlet: 'name.cpt', b: 'b1'}] 同樣的模板會出現多頁
// 單模板格式: [{reportlet: 'name.cpt', a: 'a1', b: 'b1'}] 同樣的模板只會有單頁
reportlets: reportlets // 需要打印的模板列表
},
printType : 1, // 打印類型,0爲零客戶端打印,1爲本地打印
// 以下爲零客戶端打印的參數,僅當 printType 爲 0 時生效
ieQuietPrint : false,// IE靜默打印設置 true爲靜默,false爲不靜默
// 以下爲本地打印的參數,僅當 printType 爲 1 時生效
printerName : 'Microsoft Print to PDF', // 打印機名
pageType: 2, // 打印頁碼類型:0:所有頁,1:當前頁,2:指定頁
pageIndex: '1-3', // 頁碼範圍。當 pageType 爲 2 時有效
copy: 3, // 打印份數
};
FR.doURLPrint(config)
保存模板,選擇填報預覽,當點擊按鈕時,将使用本地打印方式打印模板,如下圖:
3. 服務器端打印接口
// 彈窗
window.contentPane.printReportServer();
// 靜默打印
window.contentPane.printReportServer({
pageType: 2, // 打印頁碼類型:0:所有頁,1:當前頁,2:指定頁
pageIndex: '1-3', // 頁碼範圍。當 pageType 爲 2 時有效
printerName: "" // 指定打印機
});
// 靜默打印
window.contentPane.printReportServer({
pageType: 1
});
// 靜默打印
window.contentPane.printReportServer({})

4. 老打印接口
調用以下方法前,需要先引入 finereport.js,再通過 doURLxxxxPrint() 進行調用。
4.1 doURLxxxxPrint(printurl)
get 方式傳遞給服務器,服務器将報表結果返回給客戶端,彈出打印選項框及打印對話框,供用戶選擇打印範圍及打印機,然後進行打印。
printurl 爲需要打印的報表路徑,printurl以FR.doURLFlashPrint("/webroot/decision/view/report?viewlet=report.cpt")
4.2 doURLxxxxPrint(printurl,isPopUp)
說明:printurl 爲需要打印的報表路徑
isPopUp 布爾值(true/false),表示是否進行靜默打印,true 爲彈出打印對話框,false 爲不彈出。
FR.doURLFlashPrint("/webroot/decision/view/report?viewlet=report.cpt",true);
Flash 打印不支持靜默打印,true/false 效果相同。
FR.doURLPDFPrint("/webroot/decision/view/report?viewlet=report.cpt",true);
PDF 打印,true 時彈出打印對話框,false 不彈出。
4.3 doURLxxxxPrint(config)
4.3.1 post 傳參
post 方式傳遞給服務器,config 數據格式爲 {url : url,isPopUp : isPopUp,data:{reportlets:reportlets}}.
config 爲參數配置,參數可以以URL 爲需要打印的報表路徑,isPopUp 布爾值(true/false),表示是否進行靜默打印,true 爲彈出打印對話框,false 爲不彈出,data 需要打印的報表以及報表參數。
var printurl="http://localhost:8075/webroot/decision/view/report";
var reportlets ="[{reportlet: '1.cpt', p1: 'a'}, {reportlet: '1.cpt', p1: 'b'}]";
var config = {
url : printurl,
isPopUp : false,
data : {
reportlets: reportlets
}
};
FR.doURLPDFPrint(config)
詳細示例可查看 批量打印_(Get/Post)。
4.3.2 get 傳參
get 方式傳遞給服務器,config 數據格式爲 {url : url,isPopUp : isPopUp}.
config 爲參數配置,參數可以以URL 爲需要打印的報表路徑,isPopUp 布爾值(true/false),表示是否進行靜默打印,true 爲彈出打印對話框,false 爲不彈出。
var url="http://localhost:8075/webroot/decision/view/report?viewlet=";
url+=document.report.cpt.value;
var isPopUp = false;
var config = {url : url,isPopUp : isPopUp}
FR.doURLPDFPrint(config)
詳細示例可查看 JS 調用打印_不查看直接打印。
注:post 傳參與 get 傳參的區别請查看 post 傳參和 get 傳參。