iT邦幫忙

2024 iThome 鐵人賽

DAY 10
0
Software Development

Java工程師的報表入門與實作系列 第 10

JasperReports-為報表加上頁碼

  • 分享至 

  • xImage
  •  

頁碼算是一個必備的的功能,JasperReports一樣很貼心的讓我們能輕鬆以變數加上頁碼。

預設變數

在上一篇有提到,變數是用來儲存和計算報表資料的工具,而在我們建立空白模板的那一刻,JasperReports就會產生一些預設的變數,如下圖:

  • PAGE_NUMBER: 這就是我們今天要用的變數,可以顯示每頁的頁碼
  • COLUMN_NUMBER: 當報表同一類欄位有多欄資料時,這個變數可以顯示欄位編號
    例如當我們報表有Customer欄位,而且Customer欄位有多個的時候,就可以用COLUMN_NUMBER來編號


    圖片取自Jaspersoft community
  • COLUMN_COUNT: 當前資料列數,可以用於產生列的序號

    圖片取自 Jasper report 設定報表,自動產生行號
  • REPORT_COUNT: 計算從報表開始到當前記錄的資料總數量
  • PAGE_COUNT: 計算當前頁面的資料總數量

下列預設變數則是報表有包含子報表時才適用的,要如何新增子報表之後也會介紹與實作。

  • MASTER_CURRENT_PAGE: 當生成含子報表的報表時,表示當前父報表的頁碼
  • MASTER_TOTAL_PAGES: 當生成含子報表的報表時,表示父報表的總頁數

以預設變數PAGE_NUMBER設置報表頁碼

接下來會示範為學生基本資料報表加上頁碼。

Page X of Y

我們可以用PAGE_NUMBER做一個「第X頁 / 共Y頁」的功能

  • 我想把頁碼放在報表底部,因此新增Page Footer
  • 在右上的Composite Elements可以找到「Page X of Y」這個組合元素,直接拖曳到Page Footer中
  • 可以看到這其實是兩個Text Fields組成的
  • 分別把兩個Text Fields的表達式改為中文並調整好位置:"第 " + $V{PAGE_NUMBER} + " 頁 ""/ 共 " + $V{PAGE_NUMBER} + " 頁"

那現在可能會有個疑問,兩個PAGE_NUMBER都計算當前頁數,要怎麼顯示「共Y頁」?
關鍵就在Text Field有個屬性叫做「Evaluation Time」!

  • 第一個Text Field的Evaluatation Time為 ** Now ** ,表示取值時間是輸出該頁的當下,就是當頁的頁碼
  • 第二個Text Field的Evaluatation Time為 ** Report ** ,表示取值時間是輸出完整個報表時,就是最後一頁的頁碼

匯出PDF

在匯出的pdf每頁的底部就可以看到頁碼顯示了

這就是一種預設變數的用法,下一篇要來介紹自訂變數


Reference


上一篇
JasperReports-使用Group功能將報表資料分組
下一篇
JasperReports-自訂變數
系列文
Java工程師的報表入門與實作30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言