UReport2 與業(yè)務結(jié)合

2022-09-05 14:31 更新
UReport2教學視頻http://pan.baidu.com/s/1boWTxF5,密碼:98hj

       本小節(jié)中我們將介紹如何在業(yè)務頁面中展示報表、導出報表文件、引用報表內(nèi)容等操作。

報表相關URL

       在配置好一個包含UReport2的項目后,就可以運行我們的項目,打開UReport2的基于網(wǎng)頁的報表設計器,它的地址如下:

UReport2報表設計器URLhttp://host[:port][/context-path]/ureport/designer

       如果我們是在本地啟動項目,并且服務器端口號為8080,context-path為ureport2-demo,那么我們的報表設計器的URL就是:http://localhost:8080/ureport2-demo/ureport/designer。

       在報表設計器中,設計好報表后,點擊左上角的圖標就可以在線預覽報表(預覽報表有兩種方式,一種是不分頁預覽報表;一種是分頁預覽報表,如果報表數(shù)據(jù)量較大,我們推薦預覽時采用分頁方式,這樣可以減輕瀏覽器渲染壓力);預覽報表的URL如下:

UReport2預覽報表URLhttp://host[:port][/context-path]/ureport/preview?_u=報表名稱

       在上面的URL中有個名為“_u”的參數(shù),它是用來指定當前要預覽的報表模版名稱,如果是對正在設計器中的報表進行預覽,那么它的值就是“p”,這是一個約定的值,表示要預覽的是正在設計器中的報表,所以可以看到我們演示時預覽的URL都是這樣:http://localhost:8080/ureport2-demo/ureport/preview?_u=p 。

預覽正在設計中的報表注意事項在預覽正在設計器中設計的報表時(也就是_u=p),UReport2會在點擊設計器工具欄圖標時,將設計中的報表模版信息提交到服務器,存放于當前用戶的session中(用戶會話中),所以一旦用戶session失效,如果我們再次直接預覽_u=p類型報表時,會看到“com.bstek.ureport.console.exception.ReportDesignException: Report data has expired,can not do preview.”這樣的錯誤提示,表示存放于session中的正在設計器中設計的報表模版已經(jīng)失效,不能預覽。當然,如果_u的值是一個具體的報表名稱,則不存在這種問題,只有正在設計器中設計的報表模版在預覽中采用了這種機制,這點需要注意。

       如果預覽的不是正在設計器中設計的模版,那么只需要給出具體的報表名稱即可,需要注意的是,這里的報表名稱要以其ReportProvider中要求的前綴開始,比如http://localhost:8080/ureport2-demo/ureport/preview?_u=file:test.ureport.xml等。

       報表預覽后,通過預覽頁面上方工具欄中一排按鈕,可以實現(xiàn)報表的PDF打印、導出Word、Excel、PDF等,對應的相關URL如下:

URL
說明
http://host[:port][/context-path]/ureport/pdf/show?_u=報表名稱

這個URL將向瀏覽器寫入一個PDF文件流,在Chrome、Firefox、Edge這些

 瀏覽器中將會直接在線顯示PDF文件內(nèi)容,這樣可以實現(xiàn)在線瀏覽PDF并打印輸出。

http://host[:port][/context-path]/ureport/word?_u=報表名稱導出對應報表的Word文件
http://host[:port][/context-path]/ureport/excel?_u=報表名稱不分頁導出對應報表的Excel文件
http://host[:port][/context-path]/ureport/excel/paging?_u=報表名稱分頁導出對應報表的Excel文件
http://host[:port][/context-path]/ureport/excel/sheet?_u=報表名稱分頁分Sheet導出對應報表的Excel文件
http://host[:port][/context-path]/ureport/pdf?_u=報表名稱導出對應報表的PDF文件
關于報表參數(shù)上面的這些URL在使用時,如果需要向報表傳入?yún)?shù),可以將這些參數(shù)直接放在URL后面使用,如:http://localhost:8080/ureport2-demo/ureport/word?_u=file:test.ureport.xml&deptId=D11&age=50,將報表file:test.ureport.xml導出成word時,傳入兩個參數(shù),分別是:deptId=D11以及age=50

       上述的這些URL后面除了可以用_u參數(shù)來指定要預覽的報表名稱外,還可以通過_i參數(shù)來指定當前要預覽報表頁碼,也就是說如果上述這些URL后面沒有_i參數(shù),將會顯示整個報表,如果有則顯示_i參數(shù)指定頁碼對應的報表,比如URL后面跟_i=2,表示預覽報表分頁后第2頁內(nèi)容。

       在http://host[:port][/context-path]/ureport/preview對應的HTML報表預覽頁面中,默認頁面上部工具欄會顯示一排按鈕,用于實現(xiàn)打印和導出其它格式報表,如下圖所示:

tools

      在上面的工具欄中,一共有9個按鈕,分別用于實現(xiàn)打印及導出其它格式報表, 在實際使用中,如果希望這個工具欄只出現(xiàn)其中某些個工具的話,我們可以參數(shù)在URL后面添加_t參數(shù)來實現(xiàn),_t參數(shù)如果不指定,那么會顯示所有的按鈕,否則只顯示_t參數(shù)指定的按鈕。上面這些按鈕的顯示分別對應參數(shù)值:1、2、3、4、5、6、7、8、9,多個參數(shù)間用“,”分隔,下面是一些示例:

示例
說明
_t=1,3顯示第一個和第三個按鈕
_t=1,2,5顯示第一個,第二個和第五個按鈕
_t=1,2,3,4,5顯示第一個,第二個,第三個,第四個和第五個按鈕

       如果我們不希望顯示HTML預覽頁面的工具欄,那么設置_t=0即可。

關于在線打印在UReport2的報表預覽頁面中,可以看到UReport2提供了三種在線打印方式,分別是直接HTML打印、直接PDF打印以及PDF在線預覽打印。這其中直接HTML打印是利用瀏覽器的HTML打印功能實現(xiàn),能用于普通的A4紙類型報表頁面的打印,同時它不能打印出報表中定義的頁眉頁腳,如果有定義的話。對于直接PDF打印以及PDF在線預覽打印是服務端向瀏覽器中寫入PDF流,利用Chrome、Firefox、Edge這些瀏覽器可以在線顯示PDF功能實現(xiàn)的打印,這種是直接打印的PDF,所以可以應付各種復雜報表紙張類型的打印輸出。
Firefox在預覽PDF時存在的問題在預覽PDF時,F(xiàn)irefox不允許當前frame外通過javascript調(diào)用其打印功能(目前來看可能是Firefox的Bug),所以我們需要手工點擊其frame內(nèi)部自帶的打印按鈕實現(xiàn)打印。

       在業(yè)務頁面中,如果需要預覽打印或?qū)С鰣蟊?,那么就可以采用上述URL實現(xiàn)需要的功能。

在代碼中使用報表

       在UReport2當中,我們可以使用ExportManager實現(xiàn)在業(yè)務代碼中導出各種類型的報表,ExportManager接口源碼如下:

package com.bstek.ureport.export;
import java.util.Map;
import com.bstek.ureport.export.html.HtmlReport;
/**
 * @author Jacky.gao
 * @since 2016年12月4日
 */
public interface ExportManager {
    public static final String BEAN_ID="ureport.exportManager";
    /**
     * 導出Html報表
     * @param file 報表模版文件名
     * @param contextPath 當前項目的context path
     * @param parameters 參數(shù)
     * @return 返回一個HtmlReport對象,里面有報表產(chǎn)生的HTML及相關CSS
     */
    HtmlReport exportHtml(String file,String contextPath,Map<String, Object> parameters);
    /**
     * 導出指定頁碼的Html報表
     * @param file 報表模版文件名
     * @param contextPath 當前項目的context path
     * @param parameters 參數(shù)
     * @param pageIndex 頁碼
     * @return 返回一個HtmlReport對象,里面有報表產(chǎn)生的HTML及相關CSS
     */
    HtmlReport exportHtml(String file,String contextPath,Map<String, Object> parameters,int pageIndex);
    /**
     * 導出PDF報表
     * @param config 包含報表模版文件名、參數(shù)等信息的配置對象
     */
    void exportPdf(ExportConfigure config);
    /**
     * 不分頁導出Excel
     * @param config 包含報表模版文件名、參數(shù)等信息的配置對象
     */
    void exportExcel(ExportConfigure config);
    /**
     * 分頁導出Excel
     * @param config 包含報表模版文件名、參數(shù)等信息的配置對象
     */
    void exportExcelWithPaging(ExportConfigure config);
    /**
     * 分頁分Sheet導出Excel
     * @param config 包含報表模版文件名、參數(shù)等信息的配置對象
     */
    void exportExcelWithPagingSheet(ExportConfigure config);
    /**
     * 導出Word
     * @param config 包含報表模版文件名、參數(shù)等信息的配置對象
     */
    void exportWord(ExportConfigure config);
}

       因為ExportManager接口實現(xiàn)是配置在Spring當中,所以要使用ExportManager接口,我們需要首先通過Spring的ApplicationContext取到ExportManager實例對象,我們可以通過ExportManager.BEAN_ID來取到對應的Bean實例。我們來看下如何采用ExportManager導出HTML報表,并將報表內(nèi)容嵌入到一個JSP中。

       首先我們需要采用報表設計器設計好一個報表模版文件,將其保存,比如報表模版保存后的文件名為demo.ureport.xml,然后在項目中創(chuàng)建一個JSP(這里之所以選擇JSP,是因為它最為簡單,可以保證所有的J2EE開發(fā)者都能看懂,實際使用時可能是MVC框架、Ajax等,但如果了解了在JSP中用法,其它的就簡單了),在JSP中輸入相應代碼,導出Html報表,并將其寫入到JSP中,完整的JSP源碼如下:

<%@page import="com.bstek.ureport.export.html.HtmlReport"%>
<%@page import="java.util.HashMap"%>
<%@page import="java.util.Map"%>
<%@page import="com.bstek.ureport.export.ExportManager"%>
<%@page import="com.bstek.ureport.Utils"%>
<%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding="utf-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>HTML報表測試</title>
</head>
<body>
<!-- 通過一個HTML鏈接來導出目標報表模版的PDF格式報表 -->
<a href="<%=request.getContextPath() %>/ureport/pdf?_u=file:demo.ureport.xml">導出PDF格式報表</a>
<p></p>
<%
ExportManager  exportManager=(ExportManager)Utils.getApplicationContext().getBean(ExportManager.BEAN_ID);
Map<String,Object> parameters=new HashMap<String,Object>();
HtmlReport htmlReport = exportManager.exportHtml("file:demo.ureport.xml",request.getContextPath(),parameters);
//輸出Css樣式
out.println("<style type=\"text/css\">");
out.println(htmlReport.getStyle());
out.println("</style>");
//輸出報表內(nèi)容
out.println(htmlReport.getContent());
%>
</body>
</html>

       啟動項目,瀏覽這個JSP,就可以看到生成的HTML報表內(nèi)容,如下圖所示:

demo

       可以看到,在運行后的JSP中,可以點擊上方的鏈接導出PDF格式報表,下方的表格則是這個報表的HTML格式展現(xiàn),實際使用時還可以在這個頁面里加入一些其它與業(yè)務相關元素,具體做法這里就不再贅述。


以上內(nèi)容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號