9.1 設計報表模板
9.1.1 使用Table組件新建模板(步驟參考教程七)如下:
9.1.2 模板自帶變量
$V{PAGE_NUMBER} :代表當前頁數(可以是頁碼也可以是頁數,通過TextField的計算時間的不同值來設置)
$V{PAGE_COUNT} :當前頁面中記錄的數目
$V{groupname_COUNT} : 代表當前組的記錄數
$V{COLUMN_NUMBER} :列號碼
$V{COLUMN_COUNT} :當前列中記錄的數目(是當前頁裏行的序號,在新頁上會重置爲1)
$V{REPORT_COUNT} :當前文檔中數據源記錄數目。
這裏主要使用 $V{PAGE_NUMBER} 來做報表分頁
對於$V{PAGE_NUMBER}:當evaluationTime="Now"時,即是計算當頁所在哪一頁。 (now:即時執行此表達式)
當evaluationTime="Report"時,計算最後一頁,即總頁數。(Report:整個報表執行完後才執行此表達式)
9.1.3 拖動6個Text Field組件到Page Footer Band中
設置 第幾頁 ,注意 其 Evaluation Time 選中 Now。
設置 共幾頁 ,注意 其 Evaluation Time 選中 Report。
9.1.4 設置 首頁、上一頁、下一頁、末頁 需要使用超鏈接
新建一個模板,把 首頁 拷貝過去(這裏使用DemoReport1.jrxml)
點擊首頁顯示Properties ,搜索HyperLink PageException
設置 鏈接 爲 “https://www.baidu.com/”
保存後,以 HTML 方式 Preview 後,點擊首頁跳轉到百度。
9.1.5 設置 首頁、上一頁、下一頁、末頁
在 Hyperlink PageExpression 框中輸入時需要注意,我們需要設定變量才能正確的導向是哪一頁
以下是各選擇在HyperlinkPage Expression框中輸入的信息
首頁 : "/JasperWeb/JasperServlet9?page=0"
上一頁 : "/JasperWeb/JasperServlet9?page="+($V{PAGE_NUMBER}-Long.valueOf("1"))
下一頁 : "/JasperWeb/JasperServlet9?page="+($V{PAGE_NUMBER}+Long.valueOf("1"))
末頁 : "/JasperWeb/JasperServlet9?page=lastPage"
保存模板文件後拷貝到JasperWeb項目中
9.2 編寫java代碼,實現分頁邏輯及大量數據內存處理
- protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
- Map<String,Object> parameters = new HashMap<String,Object>(16);
- String pageStr = request.getParameter("page");
- HttpSession session = request.getSession();
- int pageIndex = 0;
- int lastPageIndex = 0;
-
- //list數據源
- List<Users> list = new ArrayList<Users>();
- for(int i = 1 ; i <= 50 ; i++) {
- Users users = new Users(i,"name"+i,"grade"+i,"college"+i,"mobile"+i);
- list.add(users);
- }
- ModelTableSource mts = new ModelTableSource();
- mts.setDate(new SimpleDateFormat("yyyy-MM-dd").format(new Date()));
- mts.setTableData(new JRBeanCollectionDataSource(list));
- List<ModelTableSource> mlist = new ArrayList<ModelTableSource>();
- mlist.add(mts);
-
- String jrxmlPath = request.getServletContext().getRealPath("/")+"/jrxml/DemoReport9.jrxml";
- //由jrxml文件編譯後生產jasper文件的路徑
- String jasperPath = request.getServletContext().getRealPath("/")+"/jasper/DemoReport9.jasper";
- PrintWriter out = null;
- try {
-
- //編譯jrxml生產jasper文件
- JasperCompileManager.compileReportToFile(jrxmlPath, jasperPath);
-
- //JasperPrint將數據全部取出,放到session中
- JasperPrint jasperPrint = (JasperPrint) session.getAttribute("jasperPrint");
- if(null == jasperPrint) {
- jasperPrint = this.getJasperPrint(jasperPath, parameters, mlist);
- session.setAttribute("jasperPrint", jasperPrint);
- }
-
-
- if(null != jasperPrint.getPages()) {
- lastPageIndex = jasperPrint.getPages().size() - 1;
- }
- if(null == pageStr) {
- pageStr = "0";
- }
- try {
- pageIndex = Integer.valueOf(pageStr);
- if(pageIndex > 0) {
- pageIndex = pageIndex -1 ;
- }
- } catch (Exception e) {
- // 如果得到的非數字字符串
- if("lastPage".equals(pageStr)) {
- pageIndex = lastPageIndex;
- }
- }
-
- if (pageIndex < 0) {
- pageIndex = 0;
- }
- if (pageIndex > lastPageIndex) {
- pageIndex = lastPageIndex;
- }
-
- //將html輸出到瀏覽器上
- JRHtmlExporter exporter = new JRHtmlExporter();
- response.setCharacterEncoding("UTF-8");
- out = response.getWriter();
- //分頁
- exporter.setParameter(JRExporterParameter.PAGE_INDEX, pageIndex);
- exporter.setParameter(JRExporterParameter.JASPER_PRINT, jasperPrint);
- exporter.setParameter(JRExporterParameter.OUTPUT_WRITER, out);
- exporter.setParameter(JRHtmlExporterParameter.IS_USING_IMAGES_TO_ALIGN, Boolean.FALSE);
- exporter.exportReport();
-
- } catch (Exception e) {
- e.printStackTrace();
- }finally {
- out.flush();
- out.close();
- }
- }
-
-
- private JasperPrint getJasperPrint(String jasperPath, Map<String, Object> parameters, List<?> list) throws JRException {
- //解決大數據量保留在內存中,只在內存中保留兩頁,剩下的放入磁盤中
- JRFileVirtualizer virtualizer = new JRFileVirtualizer(2, "D:/data");
- parameters.put(JRParameter.REPORT_VIRTUALIZER, virtualizer);
- virtualizer.setReadOnly(true);
-
- return JasperFillManager.fillReport(jasperPath, parameters, new JRBeanCollectionDataSource(list));
- }
-
訪問servlet,如下:
將第三頁存儲在磁盤中。
教程就先寫到這,以後有知識點再加添補。本教程Demo源碼提供,JasperWeb源碼