2012-10-29

Hello JasperReports 4.7.1 with Spring MVC 3.1.2

先從可以生出報表開始,只傳一個字串到 Jasper 檔裡。

做報表先


兩個重點,我常忘記的事情。

第一個是報表使用的程式語言,預設是 Groovy,要改成 Java。

第二個是當沒有 Detail 資料時,不管是真的沒資料,或者是根本沒傳過來,都要將「When No Data」設成「All Sections, No Detail」,不然就會怎麼執行都生出空白報表來


再來寫程式。

先加入 dependency。
<dependency>
  <groupId>net.sf.jasperreports</groupId>
  <artifactId>jasperreports</artifactId>
  <version>4.7.1</version>
</dependency>
再加入 ViewResolver,因為 InternalResourceViewResolver 只用來處理 JSP,所以得加入 ResourceBundleViewResolver 來處理 PDF 的需求,並使用較少的 order 值來確保 ResourceBundleViewResolver 在 InternalResourceViewResolver 之前執行。
<bean class="org.springframework.web.servlet.view.ResourceBundleViewResolver">
  <property name="basename" value="views" />
  <property name="order" value="0" />
</bean>

<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
  <property name="viewClass" value="org.springframework.web.servlet.view.JstlView" />
  <property name="prefix" value="/WEB-INF/views/" />
  <property name="suffix" value=".jsp" />
  <property name="order" value="1" />
</bean>
再加入 views.properties 設定 jasper 檔的位置,聽說可以用未編譯的 jrxml 取代已編譯的 jasper 檔,Spring 會幫忙編譯。
helloReport.(class)=org.springframework.web.servlet.view.jasperreports.JasperReportsPdfView
helloReport.url=/WEB-INF/reports/helloReport.jasper
最後就是 Controller,中文問題請看 用 Java 產出中文的 JasperReports PDF
@RequestMapping("/helloReport")
public String helloReport(Model model) {
  model.addAttribute("title", "This is a 標題...");
  return "helloReport";
}
完成,可以用 http://.../helloReport 來產出 PDF 檔,或可以用 http://.../helloReport.pdf 來明示瀏覽器這是個 PDF 檔。


---
---
---

沒有留言:

張貼留言