在使用 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 和自定義數據源等,並將這些數據格式化成可讀的報表。
$F{content}
的text field,可以在右下屬性區域查看「Text Adjust」屬性,會發現預設是「Cut Text」,表示過長的文字會被截斷也可以在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搭配使用應該能解決問題。