顯示具有 iReport 標籤的文章。 顯示所有文章
顯示具有 iReport 標籤的文章。 顯示所有文章

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 拉出以下的配置。

2012-10-06

JasperReports Split Type in Subreport

這篇筆記延伸自 JasperReports Split Type in Bands 與 使用 Java 輸出資料到 Jasperreports 子報表表身(Subreport Detail),也就說如果子報表整個 Detail 不可分頁,要在同一頁。

其實這問題在主報表的 Detail 的話,我倒還不知道怎麼處理,因為 Detail 的 Split Type 應用的是一筆資料,而不是整個 Detail,當然這問題只會發生在一筆資料有多行時。

使用 Java 輸出資料到 Jasperreports 子報表表身(Subreport Detail)得到的結果如下。

使用 Java 輸出資料到 JasperReports 子報表表身(Subreport Detail)

前面講過 使用 Java 輸出資料到 Jasperreports 主報表表身(Detail),再來看看丟資料給子報表。

拉報表
  • 建立空白主報表。
  • 新增兩個從 Java 傳進來的 Parameter

2012-10-05

使用 Java 輸出資料到 JasperReports 主報表表身(Detail)

常見的情況是 jasper 檔讀取資料庫的資料來造表,Java 挺多傳參數過去,但是如果連表身(Detail)的資料都要由 Java 傳過去呢?關鍵就是 JRMapCollectionDataSource。

用 Java 產出中文的 JasperReports PDF

Jasperreports 與 iReport 的中文問題,網路上可以找到的文章多半都是在講 Jasperreports 1 或 2 那個年代的作法,就是去設 Pdf Font name、Pdf Embedded 與 Pdf Encoding,都是四五年前的事,這些屬性也被 Deprecated 了。


我也不知道 Jasperreports 什麼時候改作法,這篇筆記用的是 4.6 這個版本,離最新的 4.7.1 應該不會有差別。

中文顯示可以分成三個部份:
  • iReport Preview
  • iReport 產出 PDF
  • Java 產出 PDF

2012-06-29

JasperReports 圖形元件(Graphic Elements)

JasperReports 提供的元件有:

  • 文字元件 - Static Text、Text Field
  • 圖形元件 - Ellipse、Image、Line、Rectangle、Round Rectangle
  • 容器元件 - Frame
  • 排版元件 - Break、List、Table
  • 特殊元件 - Chart、Crosstab、Spider Chart、Sort、Subreport、Barcode
  • 外部元件 - Html、Map
  • 自訂元件 - Generic Element

2012-06-28

JapserReports Null 值與空白行(Blank When Null and Remove Line When Blank)

欄位有時會有 Null 值,若是直接輸出到報表上,則會出現醜醜的 null 字眼。


可以勾選該元件的屬性「Blank When Null」。


就可以轉 Null 為空白了。

2012-06-27

JasperReports 相同的欄位值出現一次就好(Print repeated values and Print in first whole band)

亂亂的範例,同樣的欄位值一直出現,看起來很不專業。


選取該重複出現的欄位,在「屬性」裡取消勾選「Print Repeated Values」。

JasperReports Formatting Tools(排版工具)

從「視窗 > Formatting Tools」可以開啟功能強大的排版工具,不用在「屬性」視窗裡與數字奮鬥,或者「Designer」裡跟滑鼠靈敏度過不去,懷疑自己手殘(水晶報表後遺症),雖然 iReport 的鎖點自動對齊功能已經比水晶報表好用多了,但是用過 Formatting Tools 之後,突然覺得人生一片光明啊。

在開始之前,先修改 Designer 垂直水平座標軸的單位,可以從「工具 > 選項 > iReport > General > Units」做修改。

還有重要的選取單一或多個物件方式:
  • 從 Report Inspector 展開各個 Bands,就可以看到該 Band 裡所有的元件,單點就可以選取 Designer 裡的元件並顯示在「屬性」視窗,可以搭配 Ctrl 或 Shift 做多筆選取。
  • 從 Designer 裡直接單點,可以搭配 Ctrl 做多筆選取。
  • 從 Designer 裡框選,往右框選必須整個物件框進才算選到,往左框選只要摸到邊就算選到

2012-06-26

JasperReports Print When Expression in Bands

Bands 有三屬性:Band height、Print When Expression 和 Split Type,Print When Expression 用法和 Filter Expression 很相近,Filter Expression 用來過濾資料,而 Print When Expression 用來決定該 Band 是否顯示,所以 Print When Expression 一定要回傳 boolean 值。

單點 Print When Expression 右邊的「...」。


用法同 Filter Expression,所有報表物件都可以使用,包括 $F、$P 和 $V。

JasperReports Split Type in Bands

Split Type 為 Bands 的三屬性之一,另外兩個為 Band height 和 Print When Expression,用來設定當該頁或該欄剩餘的空間不足以容納該 Band 時,要如何安排該 Band。


iReport 的 Split Type 預設是 Stretch,但是不管選 Immediate 或者 Prevent,就會馬上跳回去 Stretch,本來以為是設限為不可選其他兩個選項,但找不出理由,後來直接到 XML 編輯模式去改就可以了。

2012/11/13 補充
在更新到 iReport 4.7.1 版以後,就可以選 Prevent 沒問題了。

2012-06-25

JasperReports 報表封面(Static Text, Cover Page, Pagination, Watermark)

Title 水平帶可以單獨在一頁,不用和其他水平帶擠在同一頁,就可以做出封面的效果。

只要勾選報表屬性裡的「Title on a new page」就可以了。


2012-06-24

JasperReports Layout 基本元素 - 水平帶 Bands

JasperReports 報表 Layout 由 Band(水平帶)組成,預設有七個水平帶。

Title

只會出現一次,不會每頁都出現,可以搭配「Title on a new page」屬性來作為報表的封面

從 iReport 學 JasperReports

JasperReports Filter Expression

Filter Expression 像是 SQL 裡的 Where 語法,用來過濾 SQL 得到的資料。

在兩個地方可以看到 Filter Expressioin,第一個是報表的屬性,第二個是 Report Query 視窗。


2012-06-23

JasperReports 多欄設計(Multiple Columns)

Column 不是指 Table 的欄,而是 Word 的欄,多欄用在單筆資料過短,而 iReport 每一個 band 的寬度都是 page 寬度,所以若用單欄會相當浪費空間,或者資料筆數過多時,也可以用多欄減少頁數。

2012-06-22

第一個 JasperReports Sample with Java - JREmptyDataSource

建立 Eclipe project
mvn archetype:create -DgroupId=idv.neil.jr622 -DartifactId=jr622
cd jr622
mvn eclipse:eclipse
開啟 pom.xml,加上 JasperReports Dependency
<dependency>
    <groupId>net.sf.jasperreports</groupId>
    <artifactId>jasperreports</artifactId>
    <version>4.6.0</version>
</dependency>
再加上 downloadSources
<build>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-eclipse-plugin</artifactId>
            <configuration>
                <!-- 讓產生的 .classpath 包含 source jar -->
                <downloadSources>true</downloadSources>
            </configuration>
        </plugin>
    </plugins>
</build>
再執行一次 mvn eclipse:eclipse,第一次執行需要一些時間下載一堆 library。

2012-06-21

JasperReports 與 iReport

JasperReports 報表的生命週期:
  1. 設計:報表設計,產出 JRXML,一種 XML 檔案
  2. 編譯:將 JRXML 編譯成 JASPER 檔,並檢查語法正確性
  3. 套版:執行 JASPER 檔,讀入 Datasource,然後輸出各種格式的報表
應該不會有人直接去寫 JRXML,所以圖形化編輯工具 iReport 就出現了。

基本上,iReport 可以執行 JasperReports 報表生命週期裡的所有階段,但在與 Java 合作的系統裡,iReport 主要負責前兩個步驟來產出 JASPER 檔,然後交由 Java 呼叫 JasperReports Engine 來產出報表,第三個步驟在 iReport 裡則作為測試用。