2011年6月1日 星期三

JasperReports/iReport中,Text Field的字串長度過長,如何自動斷行(換行),避免值被截斷

版本

JasperReports版本為4.0.1。

前言

有個報表設計如下,其中紅框處的Text Field其寬度為226。


此份報表的資料來源,包含了三筆記錄,其中有一筆記錄的ADDRESS為「大台南市永康區永元路123段456巷789弄876號543樓之21室」。如果報表不做任何設定,則產生出來的報表,這筆記錄的ADDRESS會被截斷成如下圖紅框處(之21室消失了):



解決方案一

這時候解決方式之一是增加band的高度,同時增加每個Text Field的高度,如下圖:


但這樣子的調整只是治標不治本,因為日後可能會有新的記錄,其ADDRESS的字串長度更長;而且上述的調整會導致所有記錄的高度都增加,如下圖:


解決方案二

為了彈性調整每筆記錄的高度,而且能夠正確顯示ADDRESS,使其不會被截斷(亦即自動換行),可以設定Text Field的屬性《Stretch With Overflow》為true,如下圖。如此一來,當ADDRESS長度超過Text Field的長度時,會自動伸展Text Field的高度,以顯示完整的ADDRESS。


但是,上述做法只會伸展有設定《Stretch With Overflow》為true的Text Field而已,亦即不會變動其他Text Field的高度,造成如下圖中格線沒有對齊的情形:


這時候要調整其他欄位的《Stretch Type》屬性,將其設成Relative to Band Height,則報表的格線就會對齊了:


可是這時折行後的字卻會蓋到格線,要解決這種情形,就得調整Text Field的padding,做法如下:

1. 對Text Field點選右鍵,選擇Padding And Borders,如下圖。


2. 在出現的視窗中,將Padding frame中的Bottom的值從0改成5,然後按下OK。


調整後產生的報表為:


結論

要避免Text Field的值,其字串長度過長,而無法完全顯示在Text Field中,亦即自動換行,總共有三個步驟:
1. 設定可能字串長度過長的Text Field的屬性《Stretch With Overflow》為true。
2. 設定其他Text Field的屬性《Stretch Type》為Relative to Band Height。
3. 調整Text Field的padding。

jrxml



2 則留言:

  1. 請問下如下方還有資料列的處理也是相同嘛?

    回覆刪除
  2. https://blog.csdn.net/iteye_13874/article/details/81970242

    回覆刪除