2012-10-09

在 JasperReports 裡使用多行文字(Multiple Lines)

我想要得到的結果如下:


雖然是條列式結果,但不是出現在 Detail,而是在報表結尾的 Summary,這就是棘手的地方。

首先 Summary 不知道能不能用迴圈,如果不行,那能不能用斷行符號,實驗後,幸好可以接受後者,也就是可以在文字裡塞入斷行符號。
List<String> noteList = new ArrayList<String>();
for (int i = 0; i < 5; i++) {
  noteList.add("‧第 " + (i + 1) + " 行文字.............。");
}
parameters.put("note", StringUtils.join(noteList, "\n"));
以 \n 分行,然後以單一字串送給 Jasper 檔。

然後到 iReport 拉出以下的配置。


在不做任何設定的情況下,輸出的結果如下:


第二行以後的文字都不見了,預設行為是這樣沒錯,那就來修改預設值,勾選 $P{note} 的屬性值 Stretch With Overflow


再看看結果。


好消息是文字都出來了,而且 \n 也有作用,但是破表了。

破表可以分兩部份來看,第一個是左右的框線要隨著內容延伸,第二個是下框線要隨著內容往下遞移。

多選左右框線,修改屬性 Stretch Type 從預設值 No Stretch 改為 Relative to Tallest Object


選擇下框線,修改屬性 Position Type 從預設值 Fix Relative To Top 改為 Float


這樣幾乎就可以得到我想要得結果了。

說幾乎是因為還有一個可以省略的小動作,如果省略這個小動作,那下框線就會緊貼著最後一行文字,感覺會有點擠,我的作法是,在 $P{note} 下面再塞一個空白的 Static Text,然後將其 Position Type 一樣設為 Float,這樣就可以多一空白行了。

後來想想不用這麼累,只要在 Java 裡將 note 後面在多一個空白行(\n),也可以得到一樣的效果。

實測之後,發現最簡單的方法,就是在 $P{note} 與下框線之間留白就好,這個留白的空間,不會因 $P{note} overflow 而消失。

---
---
---

沒有留言:

張貼留言