`
zzc1684
  • 浏览: 1191373 次
  • 性别: Icon_minigender_1
  • 来自: 广州
文章分类
社区版块
存档分类
最新评论

Spring MVC+Jasper Report 及生成PDF的中文问题

阅读更多

先说两句报表框架的选择,JasperReport和BIRT都是不错的JAVA报表工具,不过BIRT和Spring的整合比较麻烦,Spring官网论坛里有篇不错的文章,不过我觉得还是挺麻烦的。而Jasper简单一些。

 

SpringMVC和JasperReport的整合方法有很多,这里介绍一下Spring文档里的官方方法,这个方法比较简单,编写的代码很少,缺点是不自动,每加一个报表都需要修改配置文件,重启服务。对于专门做报表的WEB服务来说就不合适了。

 

1、在配置文件中增加:

 

 

Xml代码  收藏代码
  1. <beans:bean id="viewResolver" class="org.springframework.web.servlet.view.ResourceBundleViewResolver">  
  2.     <beans:property name="basename" value="views"/>  
  3. </beans:bean>  
 

注意Resolver的顺序。

 

2、在classpath里面增加views.properties。我的文件放在src/main/resources下面。

views的内容是:

 

 

Properties代码  收藏代码
  1. #设置报表输出格式  
  2. simpleReport.(class)=org.springframework.web.servlet.view.jasperreports.JasperReportsPdfView  
  3. #设置报表文件路径  
  4. simpleReport.url=/WEB-INF/reports/report1.jasper  
  5. #数据的key值  
  6. simpleReport.reportDataKey=datasource  
 

 

每一个表报都需要一套如上的配置。spring支持运行时自动选择报表输入格式。详细可以查spring的官方文档。

 

3、用iReport编辑报表。iReport版本是4.5.1

iReport的pdf有个传统的中文问题,网上有很多介绍文章。在ireport的lib下有itext-2.1.7.jar、iTextAsian-2.1.7.jar和iText-AsianCmaps-2.1.7包。(可在附件中下载)

我以为iReport4.5.1能先进点,没想到还是用iText-2.1.7和配套的其他两个包,别用最新版本,最新版本无效。

1)将上述3个包加到iReport  工具-->选项-->Classpath里

2)iReport  工具-->选项-->Fonts里,将这3个包前面的复选框打钩。

3)在编辑报表的Text框时,编辑其属性如下

 

 Pdf Font  name:STSong-Light;

 Pdf Embedded:勾上

 Pdf Enccoding:UniGB-UCS2-H (Chinese Simplified)

4)将这3个jar包加到Eclipse项目ClassPath下。

这样pdf就可以正常显示中文了。

 

将编辑好的.jasper文件拷贝到Eclipse项目中。

 

 

4、编写Controller。

 

 

 

Java代码  收藏代码
  1. import java.util.ArrayList;  
  2. import java.util.List;  
  3.   
  4. import javax.servlet.http.HttpServletRequest;  
  5.   
  6. import org.slf4j.Logger;  
  7. import org.slf4j.LoggerFactory;  
  8. import org.springframework.stereotype.Controller;  
  9. import org.springframework.ui.ModelMap;  
  10. import org.springframework.web.bind.annotation.RequestMapping;  
  11. import org.springframework.web.servlet.ModelAndView;  
  12.   
  13. @Controller  
  14. @RequestMapping("/report.html")  
  15. public class ReportCtrl {  
  16.     private static final Logger logger = LoggerFactory.getLogger(ReportCtrl.class);  
  17.       
  18.     @RequestMapping()  
  19.     public ModelAndView showReport(ModelMap model, HttpServletRequest request) {  
  20.         logger.info("ReportCtrl-showReport start!");  
  21.           
  22.         DataSource map = new DataSource();  
  23.         map.setPlanno("APP1-1039-0990");  
  24.         map.setPlanname("上海出租车");  
  25.         List<DataSource> beanData = new ArrayList<DataSource>();  
  26.         beanData.add(map);  
  27.         model.addAttribute("datasource", beanData); //datasource和views.properties配置的相同  
  28.           
  29.         logger.info("ReportCtrl-showReport end!");  
  30.         return new ModelAndView("simpleReport", model); //simpleReport和views.properties配置的相同  
  31.     }  
  32.   
  33.     //bean定义  
  34.     public class DataSource {  
  35.         private String planno = "";  
  36.         private String planname = "";  
  37.         public String getPlanno() {  
  38.             return planno;  
  39.         }  
  40.         public void setPlanno(String planno) {  
  41.             this.planno = planno;  
  42.         }  
  43.         public String getPlanname() {  
  44.             return planname;  
  45.         }  
  46.         public void setPlanname(String planname) {  
  47.             this.planname = planname;  
  48.         }  
  49.     }  
  50. }  
 

 

运行就可以显示报表了。

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics