1. 問題描述編輯
FR工具欄中雖然有打印按鈕,但是位置與樣式比較死,只能固定在報表上方或下方的工具欄中,不靈活。
用戶系統已經自己定義了一套工具欄按鈕,頁面中只需要嵌入報表內容,不使用FR的工具欄,如果需要打印報表,點擊自定義的按鈕,調用FR的打印方法進行打印,如下圖:
2. 解決方案編輯
對於這種打印iframe中嵌入的報表情況,點擊“打印”按鈕時,先通過js獲取到報表所在iframe,進而獲得iframe中的window對象,最後調用打印事件,打印出當前iframe中的報表內容。
該方法不管iframe中的報表與當前系統是否是同一個應用,都可以使用,而且不用額外引入finereport.js,避免了js跨域問題。
3. 實現步驟編輯
如報表嵌入在id爲reportFrame的iframe中,則點擊“打印”按鈕觸發的事件js如下:
- "text/javascript">
- function doFRPrint(){ //點擊打印按鈕時觸發
- document.getElementByIdx_x('reportFrame').contentWindow.contentPane.pdfPrint();
- //flash打印:.contentWindow.contentPane.flashPrint();
- //applet打印:.contentWindow.contentPane.appletPrint();
- //服務器端打印:.contentWindow.contentPane.printReportServer();
- }
4. 注意編輯
在自定義按鈕打印時,有的可能由於業務需要,會將報表所在的iframe隱藏,直接點擊打印按鈕的時候就打印報表,如果用flash和applet打印的時候,就會發現無法進行下去,這個是因爲flash和applet打印的時候會彈出一個打印設置窗口,這個窗口時彈出在報表頁面的,即iframe框架內,而iframe框卻被隱藏了,所以才無法進行下去,需要在管理平臺設置不彈出該設置窗口即可。如下圖: