2012-10-05

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

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

Java 程式。
String jsFile = "D:/_Download/report5.jasper";
String outFile = "D:/_Download/report5.pdf";
try {
  Map<String, Object> parameters = new HashMap<String, Object>();

  // Map 表示一筆資料,再用 List 裝起來,表示所有資料
  Collection<Map<String, ?>> list = new ArrayList<Map<String, ?>>();

  // 塞入測試資料
  for (int i = 0; i < 10; i++) {
    Map<String, Object> data = new HashMap<String, Object>();
    data.put("id", new BigDecimal(i + 1));
    data.put("title", "中文 字串 String " + i);
    data.put("date", new Date(112, 9, i + 1));
    list.add(data);
  }

  // 使用 JRMapCollectionDataSource 打包資料成 JRDataSource 介面
  JRMapCollectionDataSource dataSource = new JRMapCollectionDataSource(list);

  // 產出報表
  JasperPrint print = JasperFillManager.fillReport(jsFile, parameters, dataSource);
  JRExporter exporter = new JRPdfExporter();
  exporter.setParameter(JRExporterParameter.OUTPUT_FILE_NAME, outFile);
  exporter.setParameter(JRExporterParameter.JASPER_PRINT, print);
  exporter.exportReport();
}
catch (JRException e) {
  e.printStackTrace();
}
然後只要在 iReport 裡建立同名的 field,就只要這樣,其他什麼都不用設。


並確認型別與 Java 程式相同。


噹噹,報表就這麼產生了。


中文問題請看 用 Java 產出中文的 Jasperreports PDF
---
---
---

沒有留言:

張貼留言