`
neil-jh
  • 浏览: 145457 次
  • 性别: Icon_minigender_1
  • 来自: 上海
文章分类
社区版块
存档分类
最新评论

jasperreport and ireport and action export PDF

阅读更多
如果用STRUTS2 + jasperreport 必定要加struts2包 struts2-jasperreports-plugin-2.0.11.2.jar jasperreports-2.0.2.jar iText-2.1.3.jar iTextAsian.jar 后两个包是解决输出PDF不能显示中文


第一步:首先用Ireport 生成jrxml文件 输入得内容格式如下

Title
(标题)
Page Header
(页头,可以提供一些说明性信息,比如页码)
Column Header
(列头,一般填入列名)
Row(s)
(实际的数据)
Column Footer
(列脚,一般填入列的汇总信息,如和,平均值等等)
Page Footer
(页脚,比如页码,或者该页上数据的汇总信息)
Report Footer
(报表脚,一般填入整个报表的汇总信息,或者一些说明性信息)

设置你ireport javabean得数据源:
例如要输入List<Person> 数据源 在ireport DATA-new 选择 JavaBeans set data source
在下面得页面Name 中输入Peron得包路径 例如:com.quickstart.model.Person 保存

在option 中设置你CLASS得路径。例如 d:\myspace\jpa\web\WEB-INF\classes\

然后编译选择 build 下面得编译 编译生成 jasper 文件

然后把此文件保存在WEB-INF\template 目录下

第二步:设置ACTION

例如下面得代码 Peron
public class Person {

    @Id
    @GeneratedValue
    private Long id;

    private String firstName;

    private String lastName;

    ......


ExportJasperAction

public class ExportJasperAction extends ActionSupport {

    private PersonService personService;
    private List<Person> persons;

    public ExportJasperAction(PersonService personService) {
        this.personService = personService;
    }

    public String exportPdf() {
        persons = personService.findAll();
        

        return SUCCESS;
    }

    public PersonService getPersonService() {
        return personService;
    }

    public void setPersonService(PersonService personService) {
        this.personService = personService;
    }

    public List<Person> getPersons() {
        return persons;
    }

    public void setPersons(List<Person> persons) {
        this.persons = persons;
    }
}



配置struts.xml

例如:
<package name="person" extends="struts-default" namespace="/person">
        <result-types>
            <result-type name="jasper" class="org.apache.struts2.views.jasperreports.JasperReportsResult"/>
        </result-types>

<action name="export" method="exportPdf" class="exportJasperAction">
            <result name="success" type="jasper">
                <param name="location">WEB-INF\template\listname.jasper</param>
                <param name="format">PDF</param>
                <param name="dataSource">persons</param>
            </result>


第三步:view页面

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ taglib uri="/struts-tags" prefix="s" %>
<html>
<body>
<form id="report" action="export.action">
    <input type="submit" value="生成报表"/>
</form>
</body>
</html>


在下面补充 输出乱码问题得解决方案:
iReport与JasperReport中文支持全面解决
在使用iReport与JasperReport作为报表产生工具时, 中文支持是经常遇到的问题,笔者最近做的一个J2EE Web项目采用这套工具开发报表,也遇到了类似问题,本文总结了在使用iReport与JasperReport开发报表时中文支持的有关内容,希望能对读者有所帮助.
1 运行环境
1.1 JasperReport 1.2.8
JasperReports是iReport的核心内容。它是一个强有力的开源报表产生工具,可以将内容输出到屏幕上、打印机或生成PDF, HTML, XLS, CSV和XML等文件。它完全用Java编写,并可在各种Java应用(包括J2EE或WEB应用)中用来产生动态报表内容。JasperReports组织根据在一个XML文件中定义的报表设计通过JDBC访问关系数据库中的数据.填充报表数据之前必须先将报表设计被编译成一个jasper文件。
下载地址: http://jasperreports.sourceforge.net/
1.2 iReport 1.2 8
iReport是一个制作Jasperreport XML文件的优秀可视化开发工具,通过它可以方便的设计报表模板。目前最高版本为iReport 1.3.0
下载地址: http://ireport.sourceforge.net
1.3 iText 1.3.1
iText是一个开放源码的Java类库,是用来生成PDF文件的。
下载地址: http://itext.sourceforge.net
1.4 iTextAsian.jar
如果要在生成的pdf文件显示中文等亚洲字符,还必须下载itext的亚洲字符包。
下载地址: http://itextdocs.lowagie.com/downloads/iTextAsian.jar
以上四个包必须加到应用程序的构建路径中或加到CLASSPATH,若是Web应用放入相应的WEB-INF\lib\中。
2 设置中文支持
为了在报表中能够显示中文,加入以上四个包还不够(因为以上四个包仅对报表生成及中文显示提供了支持),必须设置报表上各显示对象的相关属性,各属性设置说明如下:
Font name: 宋体 (中文字体)
PDF font name: STSong-Light
PDF Encoding: UniGB-UCS2-H(Chinese Siplified)
PDF Embeded: √
如下图所示(显示对象的属性设置):

注意:此三项的设置必须确保iTextAsian.jar亚洲语言包已经包含在项目中,否则出现编译错误.
若读者觉得对每一个对象设置比较麻烦,可通过iReport的”Format””Fonts”菜单进行统一设置,并设成报表的默认字体。如下图所示:

3可能出现的问题
经过以上的设置,报表中文的显示应该没什么问题了,笔者在报表的开发过程中遇到几个问题,现总结如下:
3.1 问题描述
在WinXp中运行iReport1.2.8,设计报表时将数据字段的字体设置成中文字体,调好格式后编译并运行,并使用JRViewer进行预览一切正常(中文显示正常),但使用PDF、Excel预览出现如下错误:
Could not load the following font :
pdfFontName : STSong-Light
pdfEncoding : UniGB-UCS2-H
isPdfEmbedded : true
产生原因:成成PDF的亚洲语言包没有包含到项目中
解决办法:将亚洲语言包iTextAsian.jar包含到项中,可能过iReport的”Options””Classpath”将iTextAsian.jar添加Classpath中或者直接将iTextAsian.jar复制到iReport安装目录下的lib中.若是Web项目则应该将iTextAsian.jar复制到此项目的WEB-INF\lib\中.
3.2 问题描述
在WinXp中运行iReport1.2.8,设计报表时将数据字段的字体设置成中文字体,调好格式后编译并运行,并使用JRViewer进行预览一切正常(中文显示正常),使用PDF、Excel预览时无任何错误,但中文无法显示(只显示空白).
产生原因:报表显示对象的PDF字体属性设置不正确
解决办法: 报表对象有关字体属性的设置如下:
Font name: 宋体 (中文字体)
PDF font name: STSong-Light
PDF Encoding: UniGB-UCS2-H(Chinese Siplified)
PDF Embeded: √
即如下图所法

3.3问题描述
生成PDF、Excel文件时,中文显示一切正常,但生成Html文件时显示乱码
 产生原因:主要是网页编码问题
解决方法
 在JSP页中生成Html时,设置 <%@ page contentType="text/html;charset=GB2312" %> 
 在Servlet中生成Html时,response.setContentType("text/html;charset=GB2312");
 若用户对项目进行了统一编码设定及过滤,则需要另作考虑,但主要还是集中在编码问题上.例如:笔者最近做的项目是其于Struts的,对编码进行了统一和过滤处理,生成Html页面时无需指编码就可正确生成Html页面,并不会出乱码,若设置成charset=GB2312反而出现了乱码.总之,对编码的统一与处理还是比较嘛烦的事.
另外, 我们通过查看iReport生成的jrxml(<?xml version="1.0" encoding="UTF-8" ?>)文件可以发现, iReport保存的汉字都是UTF-8编码。了解它的编码可以有助于我们统一编码方式。

附件中加源码:不包含lib包
  • jpa.rar (46.7 KB)
  • 描述: 此包包含了JPA注解代码,JBOSS的 ENVERS,JASPERREPORT 源码但不包含库文件
  • 下载次数: 119
分享到:
评论
1 楼 nopain_nogain 2009-03-17  
Find it thanks so much.

相关推荐

Global site tag (gtag.js) - Google Analytics