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

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

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

報表相關(guān)URL

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

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

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

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

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

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

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

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

       報表預(yù)覽后,通過預(yù)覽頁面上方工具欄中一排按鈕,可以實現(xiàn)報表的PDF打印、導(dǎo)出Word、Excel、PDF等,對應(yīng)的相關(guān)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=報表名稱導(dǎo)出對應(yīng)報表的Word文件
http://host[:port][/context-path]/ureport/excel?_u=報表名稱不分頁導(dǎo)出對應(yīng)報表的Excel文件
http://host[:port][/context-path]/ureport/excel/paging?_u=報表名稱分頁導(dǎo)出對應(yīng)報表的Excel文件
http://host[:port][/context-path]/ureport/excel/sheet?_u=報表名稱分頁分Sheet導(dǎo)出對應(yīng)報表的Excel文件
http://host[:port][/context-path]/ureport/pdf?_u=報表名稱導(dǎo)出對應(yīng)報表的PDF文件
關(guān)于報表參數(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導(dǎo)出成word時,傳入兩個參數(shù),分別是:deptId=D11以及age=50

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

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

tools

      在上面的工具欄中,一共有9個按鈕,分別用于實現(xiàn)打印及導(dǎo)出其它格式報表, 在實際使用中,如果希望這個工具欄只出現(xiàn)其中某些個工具的話,我們可以參數(shù)在URL后面添加_t參數(shù)來實現(xiàn),_t參數(shù)如果不指定,那么會顯示所有的按鈕,否則只顯示_t參數(shù)指定的按鈕。上面這些按鈕的顯示分別對應(yīng)參數(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預(yù)覽頁面的工具欄,那么設(shè)置_t=0即可。

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

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

在代碼中使用報表

       在UReport2當(dāng)中,我們可以使用ExportManager實現(xiàn)在業(yè)務(wù)代碼中導(dǎo)出各種類型的報表,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";
    /**
     * 導(dǎo)出Html報表
     * @param file 報表模版文件名
     * @param contextPath 當(dāng)前項目的context path
     * @param parameters 參數(shù)
     * @return 返回一個HtmlReport對象,里面有報表產(chǎn)生的HTML及相關(guān)CSS
     */
    HtmlReport exportHtml(String file,String contextPath,Map<String, Object> parameters);
    /**
     * 導(dǎo)出指定頁碼的Html報表
     * @param file 報表模版文件名
     * @param contextPath 當(dāng)前項目的context path
     * @param parameters 參數(shù)
     * @param pageIndex 頁碼
     * @return 返回一個HtmlReport對象,里面有報表產(chǎn)生的HTML及相關(guān)CSS
     */
    HtmlReport exportHtml(String file,String contextPath,Map<String, Object> parameters,int pageIndex);
    /**
     * 導(dǎo)出PDF報表
     * @param config 包含報表模版文件名、參數(shù)等信息的配置對象
     */
    void exportPdf(ExportConfigure config);
    /**
     * 不分頁導(dǎo)出Excel
     * @param config 包含報表模版文件名、參數(shù)等信息的配置對象
     */
    void exportExcel(ExportConfigure config);
    /**
     * 分頁導(dǎo)出Excel
     * @param config 包含報表模版文件名、參數(shù)等信息的配置對象
     */
    void exportExcelWithPaging(ExportConfigure config);
    /**
     * 分頁分Sheet導(dǎo)出Excel
     * @param config 包含報表模版文件名、參數(shù)等信息的配置對象
     */
    void exportExcelWithPagingSheet(ExportConfigure config);
    /**
     * 導(dǎo)出Word
     * @param config 包含報表模版文件名、參數(shù)等信息的配置對象
     */
    void exportWord(ExportConfigure config);
}

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

       首先我們需要采用報表設(shè)計器設(shè)計好一個報表模版文件,將其保存,比如報表模版保存后的文件名為demo.ureport.xml,然后在項目中創(chuàng)建一個JSP(這里之所以選擇JSP,是因為它最為簡單,可以保證所有的J2EE開發(fā)者都能看懂,實際使用時可能是MVC框架、Ajax等,但如果了解了在JSP中用法,其它的就簡單了),在JSP中輸入相應(yīng)代碼,導(dǎo)出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鏈接來導(dǎo)出目標報表模版的PDF格式報表 -->
<a href="<%=request.getContextPath() %>/ureport/pdf?_u=file:demo.ureport.xml">導(dǎo)出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中,可以點擊上方的鏈接導(dǎo)出PDF格式報表,下方的表格則是這個報表的HTML格式展現(xiàn),實際使用時還可以在這個頁面里加入一些其它與業(yè)務(wù)相關(guān)元素,具體做法這里就不再贅述。


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

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號