iT邦幫忙

2024 iThome 鐵人賽

DAY 8
0
Software Development

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

JasperReports-為PDF加上浮水印

  • 分享至 

  • xImage
  •  

pdf檔常需要浮水印來顯示文件的擁有者或版權,在JasperReports中也能夠輕鬆的為pdf檔加上浮水印。

Background

除了常用的Title、Column Header、Detail之外,還有Background Band,新增在Background上的元素都會顯示在報表文件的背景,因此浮水印就很適合放在Background。

  • 由於元素擺放的位置是依據Backgroud調整,因此要先將報表的大小設定好,同樣以學生基本資料PDF為例,先到左下區域點選報表 -> 點擊右下區域「Edit Page Format」 -> 調整文件大小(這個範例調整為A4)
  • 在左下區域對「Background」點右鍵 -> Maximize Band Height
  • Background就會被調整為A4的大小了

圖片元素-Image

Image是一個可以將圖片嵌入到報表中的元素,常用在佈局logo、浮水印等圖片。

  • 將Image元素從右上Basic Element區域拖曳到Background中,就會跳出設定圖片路徑的視窗
  • 這篇會介紹兩種設定圖片的方式:從檔案系統加入圖片、以後端取得路徑加入圖片。
  • 使用的圖片是從iconmonstr下載的,先以一個學校的icon作為範例。

從檔案加入圖片

  • 選擇「Absolute Path in the filesystem」這種方式是可以透過點擊「Browse」直接從本機將圖片的絕對路徑放入Image的表達式中,但是路徑只在本機有效,所以Jaspersoft Studio也提醒這只用於快速測試的情況。
  • 匯入圖片之後可以直接拖曳調整圖片的大小與位置
  • 實際匯出pdf後如下圖(報表有將studentId調整為studentNumber並排序)

以後端取得路徑加入圖片

如果將圖片放在專案目錄中,以程式取得絕對路徑的話,就比較能避免更換環境就找不到圖片的狀況。

  • 為了將後端路徑傳入圖片表達式,先新增一個parameter,由於後端要使用getResourceAsStream()取得路徑,因此型別使用InputStream
    ▲下拉選單沒有InputStream型別,可以點選parameter中Class右方的「...」,自行輸入型別
  • 選擇「Custom expression」 -> 於下方Options區塊點擊右側icon -> 選擇剛剛新增的parameter放入表達式

  • 我將浮水印的圖放在Resources/static/images資料夾中,以getResourceAsStream()取得絕對路徑,放入REPORT_PARAMETERS_MAP中
InputStream waterMarkPath = getClass().getResourceAsStream("/static/images/iconmonstr-school-20%.png");
Map<String, Object> parametersMap = new HashMap<>();
parametersMap.put("waterMarkPath", waterMarkPath);
  • 實際匯出pdf後如下圖
    https://ithelp.ithome.com.tw/upload/images/20240922/20169094dB4sX0CGwJ.jpg

為pdf加上浮水印當然不止這種方法,不過我覺得Image元素還算容易操作,直接在報表上調整圖片位置大小都滿直覺的。
下一篇會持續優化pdf,使用Jaspersoft Studio的Group功能為報表資料分組~


Reference


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

尚未有邦友留言

立即登入留言