iT邦幫忙

2024 iThome 鐵人賽

DAY 18
0
Software Development

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

JasperReports-static text、text field適應內容高度

  • 分享至 

  • xImage
  •  

在使用 JasperReports 生成報表時,經常會遇到報表中的static text和text field元素的內容無法完全顯示的問題,尤其當輸出的內容長度超過所設定的欄寬時,文字可能會被截斷,無法完整顯示。這時候,我們就需要讓文字能夠自動適應內容高度,確保所有文字都能正確地顯示出來。

情境:軟體簡介表單

以下圖這個開源軟體簡介為例,Detail Band中有「名稱」、「介紹」兩個static text,以及對應的text field,表中「介紹」欄位的內容text field將會是一串很長的文字。

我用ChatGPT產生一段簡介的內容,此段文字會放入$F{content}

JasperReports 是一個強大的開源 Java 報表生成引擎,廣泛應用於企業應用中,用於創建各種格式的報表,例如 PDF、Excel、HTML、CSV 等。它支持從多種數據來源中提取數據,像是 SQL 數據庫、JavaBeans、XML 和自定義數據源等,並將這些數據格式化成可讀的報表。

Text Field

Text Adjust屬性

  • 先選取$F{content}的text field,可以在右下屬性區域查看「Text Adjust」屬性,會發現預設是「Cut Text」,表示過長的文字會被截斷

    匯出後會是只有一小段文字,後面的內容被截斷
  • 如果「Text Adjust」選取的是 「ScaleFont」,文字內容會以文字大小適應text field ,不過大多數情況為了使報表字體一致,比較不會用這個屬性
  • 因此我們可以選擇 「StretchHeight」,讓text field的高度來適應文字內容
    只是匯出的內容還是讓人不滿意,「介紹」的這個static text變得與text field高度不同,但是static text沒有「Text Adjust」屬性可以選...

Static Text

Stretch Type屬性

  • static text的調整要用JasperReports-SubReport 子報表(下)這篇中做合併儲存格時提到的「Stretch Type」,選擇 「ElementGroupHeight」,讓static text高度展開到此列元素的最大高度

後端設定

setAutoFitPageHeight

也可以在Java後端匯出報表時使用的SimpleXlsxReportConfiguration設定setAutoFitPageHeight(true)

SimpleXlsxReportConfiguration xlsxReportConfiguration = new SimpleXlsxReportConfiguration();
xlsxReportConfiguration.setAutoFitPageHeight(true);

JRXlsxExporter exporter = new JRXlsxExporter();
exporter.setConfiguration(xlsxReportConfiguration);

之後匯出的報表就比較正常了

不過我自己的經驗是調整pdf比較容易,Excel的話不確定是不是版本的問題,有時候在Jaspersoft Studio做了設定都沒有用,用後端設定setAutoFitPageHeight還比較有效。如果真的JasperReports無法調整好的話,後面的文章會介紹專門調整Excel等Microsoft Office軟體的Apache POI,再與JasperReports搭配使用應該能解決問題。


Reference


上一篇
JasperReports-匯出沒有DataSource的靜態報表內容
下一篇
JasperReports-Chart元素
系列文
Java工程師的報表入門與實作30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言