DataSource → Report query,輸入 SQL(如 SELECT * FROM titles),取消 Automatically Retrieve Fields,點 Read Fields 讀取欄位View → Report Fields,將所需欄位(如 title_id, pubdate, title)拖入 Detail 區段Properties → Text Field 分頁設定:
Field Class:對應資料庫型別(關鍵,錯誤會導致編譯/執行失敗)Text Field Expression:預設 $F{field},將 field 改為實際欄位名(如 $F{title_id})| 區段 | 用途 | 執行時機 |
|---|---|---|
| Title | 報表標題(僅第一頁) | 報表開始 |
| Page Header | 頁首(每頁) | 每頁開始 |
| Column Header | 欄位標題 | 每頁/每欄開始 |
| Detail | 資料列(重複) | 每筆記錄 |
| Column Footer | 欄位頁尾 | 每頁/每欄結束 |
| Page Footer | 頁尾(頁碼等) | 每頁結束 |
| Summary | 彙總/圖表 | 報表結束 |
$F{fieldName} // 資料庫欄位
$V{variableName} // 變數(如計數、加總)
$P{parameterName} // 參數(外部傳入)
Font 分頁設定Print When Expression 輸入運算式(如 $P{showTitle} == Boolean.TRUE)iTextAsian.jar 放入 iReport lib/ 目錄PDF Font Name → STSong-LightPDF Embedded → truePDF Encoding → UniGB-UCS2-H (簡體) 或 UniCNS-UCS2-H (繁體).jasper 檔原理:iText 亞洲字體包提供 CJK 字型映射,JasperReport 透過 PDF 字體嵌入實現跨平台顯示。
| 異常 | 原因 | 解決 |
|---|---|---|
NoClassDefFoundError | JasperReport 相關 JAR 缺漏 | 引用 JasperReport demo/samples/webapp/WEB-INF/lib/ 所有 JAR,或 Maven 管理依賴 |
UnsupportedEncodingException | PDF Font Name 未設為 STSong-Light | 修正字體名稱並重新編譯 |
編譯報錯 .jrxml 找不到 | 檔名與編譯路徑不符 | 儲存檔名與專案名一致,使用檔案流讀取時路徑正確 |
靜態文字顯示、動態欄位 null | 使用靜態預覽按鈕而非動態填充 | 點擊「執行動態報表」圖示(資料庫圖示) |
Build → 選擇 PDF、XLS、CSV、HTML、XML、RTFJasperFillManager.fillReport() → JasperExportManager.exportReportToPdfStream()JasperReportsView / JasperReportsPdfViewTools → Options → General → Language 選擇中文(需重啟)。
掌握 iReport 視覺化設計、表達式語法、區段佈局、中文字體嵌入、異常排查五大核心,即可高效產出企業級報表。建議以 Maven 管理 jasperreports、itext-asian 依賴,納入 CI/CD 流程自動編譯 .jrxml → .jasper。