首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 相關知識

iReport 與 JasperReport 開發實戰(二):報表設計、中文處理與常見異常排查

     編輯:Java 相關知識

報表設計流程

  1. 資料源設定:選單 DataSource → Report query,輸入 SQL(如 SELECT * FROM titles),取消 Automatically Retrieve Fields,點 Read Fields 讀取欄位
  2. 拖拉欄位:View → Report Fields,將所需欄位(如 title_id, pubdate, title)拖入 Detail 區段
  3. 手動建立文字欄位:工具列選「文字欄位」工具,繪製框框 → 右鍵 Properties → Text Field 分頁設定:
    • Field Class:對應資料庫型別(關鍵,錯誤會導致編譯/執行失敗)
    • Text Field Expression:預設 $F{field},將 field 改為實際欄位名(如 $F{title_id})
  4. 置於 Detail 區段:確保每筆資料各佔一行,否則僅顯示第一筆

報表結構區段說明

區段用途執行時機
Title報表標題(僅第一頁)報表開始
Page Header頁首(每頁)每頁開始
Column Header欄位標題每頁/每欄開始
Detail資料列(重複)每筆記錄
Column Footer欄位頁尾每頁/每欄結束
Page Footer頁尾(頁碼等)每頁結束
Summary彙總/圖表報表結束

表達式語法速查

$F{fieldName}      // 資料庫欄位
$V{variableName}   // 變數(如計數、加總)
$P{parameterName}  // 參數(外部傳入)

靜態文字與動態標題

  • 工具列「靜態文字」 → 拖入 Title 區 → 雙擊編輯內容(如「測試報表」)
  • 字體/大小:Font 分頁設定
  • 條件顯示:Print When Expression 輸入運算式(如 $P{showTitle} == Boolean.TRUE)

中文亂碼解決方案(PDF/Excel 通用)

  1. 下載 iTextAsian.jar 放入 iReport lib/ 目錄
  2. 報表屬性 PDF Font Name → STSong-Light
  3. PDF Embedded → true
  4. PDF Encoding → UniGB-UCS2-H (簡體) 或 UniCNS-UCS2-H (繁體)
  5. 重新編譯 .jasper 檔

原理:iText 亞洲字體包提供 CJK 字型映射,JasperReport 透過 PDF 字體嵌入實現跨平台顯示。

常見異常與對策

異常原因解決
NoClassDefFoundErrorJasperReport 相關 JAR 缺漏引用 JasperReport demo/samples/webapp/WEB-INF/lib/ 所有 JAR,或 Maven 管理依賴
UnsupportedEncodingExceptionPDF Font Name 未設為 STSong-Light修正字體名稱並重新編譯
編譯報錯 .jrxml 找不到檔名與編譯路徑不符儲存檔名與專案名一致,使用檔案流讀取時路徑正確
靜態文字顯示、動態欄位 null使用靜態預覽按鈕而非動態填充點擊「執行動態報表」圖示(資料庫圖示)

匯出格式與整合

  • 選單 Build → 選擇 PDF、XLS、CSV、HTML、XML、RTF
  • 程式碼整合:JasperFillManager.fillReport() → JasperExportManager.exportReportToPdfStream()
  • Spring MVC 整合:JasperReportsView / JasperReportsPdfView

iReport 介面本地化

Tools → Options → General → Language 選擇中文(需重啟)。

總結

掌握 iReport 視覺化設計、表達式語法、區段佈局、中文字體嵌入、異常排查五大核心,即可高效產出企業級報表。建議以 Maven 管理 jasperreports、itext-asian 依賴,納入 CI/CD 流程自動編譯 .jrxml → .jasper。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved