做報表先。
兩個重點,我常忘記的事情。
第一個是報表使用的程式語言,預設是 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 檔。
---
---
---
沒有留言:
張貼留言