`
Disney2002
  • 浏览: 53936 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

JasperReport 个人使用的一些经验

阅读更多
本文主要介绍下我在工作中使用JasperReport的一些经验,顺便给自己也做个笔记。

关于JasperReport的介绍就不谈了,网上多了去了,不了解的朋友可以去Google下先,这里主要分享经验和技巧,避免一些网友走弯路。

1、关于iReport的使用
JasperReport的使用简单归结就是报表模板+数据填充。

模板是通过一个后缀名为jrxml的XML文件,编译后生成的以.jasper为后缀的JasperReport模板。模板设计目前基本上都是使用其官方的可视化工具iReport来做的,iReport是基于Netbeans的一个插件,通过它可以可视化的编辑JasperReport模板。

数据填充一般分二种方式,一种方式是通过JDBC连接提供数据源,一种就是通过javaBean的集合提供数据源,可以根据自己的情况来选择。

iReport插件安装后,需要设置你在iReport里面使用的类的类路径,这个好多朋友在开始的时候找不到,截个图可以看看:



一般都是Add Folder,如果是已经打成Jar的可以直接选择Add Jar。

2、报表结尾的署名位置
一般报表最后都会有一行关于XXX填写啊,日期啊之类的用于确认或者一些辅助数据。
大家可能会直接放在Page Footer里面,这样打印出来的结果是这一行肯定会在页面底部,不能随着内容的长短来调整位置,哪怕你报表只有一行。这里分享个经验,你可以放到Summary里面,这样就可以根据Detail的长短来显示了。

3、子报表
关于子报表估计是好多网友关心的问题,因为大部分时间需要用到,可是关于这类的教程又太少了,这里我就介绍下如何使用子报表,内容参考了网上的一些资料.
准备工作:
  1.主对象,就是报表要打印的对象,里面含一个List,这个需要用子报表来打印.
import java.util.List;

public class MainVO {

    private String title;
    private List<SubVO> subList;

    public String getTitle() {
        return title;
    }

    public void setTitle(String title) {
        this.title = title;
    }

    public List<SubVO> getSubList() {
        return subList;
    }

    public void setSubList(List<SubVO> subList) {
        this.subList = subList;
    }
}


  2.子报表对象
public class SubVO {

    private String name;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }
}


  3.子报表数据集,测试数据
import java.util.ArrayList;
import java.util.List;
import net.sf.jasperreports.engine.JRDataSource;
import net.sf.jasperreports.engine.data.JRBeanCollectionDataSource;

public class SubFactory {

    public static JRDataSource createDatasource() {
        List<SubVO> list2 = new ArrayList<SubVO>();

        SubVO svo1 = new SubVO();
        svo1.setName("单位1");
        SubVO svo2 = new SubVO();
        svo2.setName("单位2");
        SubVO svo3 = new SubVO();
        svo3.setName("单位3");
        SubVO svo4 = new SubVO();
        svo4.setName("单位4");
        list2.add(svo1);
        list2.add(svo2);
        list2.add(svo3);
        return new JRBeanCollectionDataSource(list2);
    }
}


  4.主报表数据集,测试数据
import java.util.ArrayList;
import java.util.List;
import net.sf.jasperreports.engine.JRDataSource;
import net.sf.jasperreports.engine.JRException;
import net.sf.jasperreports.engine.JasperReport;
import net.sf.jasperreports.engine.data.JRAbstractBeanDataSourceProvider;
import net.sf.jasperreports.engine.data.JRBeanCollectionDataSource;

/**
 *
 * @author xiaoquan
 */
public class TestSubReport extends JRAbstractBeanDataSourceProvider {

    public TestSubReport() {
        super(MainVO.class);
    }

    public JRDataSource create(JasperReport arg0) throws JRException {
        List<MainVO> mainList = new ArrayList<MainVO>();
        List<SubVO> list1 = new ArrayList<SubVO>();
        List<SubVO> list2 = new ArrayList<SubVO>();

        SubVO svo1 = new SubVO();
        svo1.setName("单位1");
        SubVO svo2 = new SubVO();
        svo2.setName("单位2");
        SubVO svo3 = new SubVO();
        svo3.setName("单位3");
        SubVO svo4 = new SubVO();
        svo4.setName("单位4");

        list1.add(svo4);
        list1.add(svo3);

        list2.add(svo1);
        list2.add(svo2);
        list2.add(svo3);

        MainVO vo1 = new MainVO();
        vo1.setTitle("场1");
        vo1.setSubList(list1);

        MainVO vo2 = new MainVO();
        vo2.setTitle("场2");
        vo2.setSubList(list2);

        mainList.add(vo2);
        mainList.add(vo1);

        return new JRBeanCollectionDataSource(mainList);
    }

    public void dispose(JRDataSource arg0) throws JRException {
        
    }
}


  5.准备好上述数据后,开始在iReport上操作了,绑定测试数据源到iReport.

MainVO的测试数据源:


SubVO的测试数据源:


  6.准备好数据源后开始设计JasperReport模板



模板和对象绑定,在MainVOReport(上图)的空白处点一下,然后点击数据库那个小图标:



会打开下面界面,选择DataSource Provider:



点击Get Field from datasource, 会获取到MainVo的属性,如上图下半部分所示.

  7.子报表关联
我们需要将MainVo中的List属性值显示在子报表里面,就需要设置一个变量来传值了.

  1)在MainVOReport界面,添加一个Variables, 命名为other,设置如下图所示:



  2)然后点击MainVOReport界面上的子报表,在右边的属性设置如下图:



  3)创建Scriptlet,用来连接设置变量值
import java.util.List;
import net.sf.jasperreports.engine.JRAbstractScriptlet;
import net.sf.jasperreports.engine.JRDataSource;
import net.sf.jasperreports.engine.JRScriptletException;
import net.sf.jasperreports.engine.data.JRBeanCollectionDataSource;

public class MainReportScriptlet extends JRAbstractScriptlet {
    @Override
    public void afterDetailEval() throws JRScriptletException {
       System.out.println("afterDetailEval...");
       List subList = (List)getFieldValue("subList");
       JRDataSource jr = new JRBeanCollectionDataSource(subList);
       /**
        *该值是在父报表中定义的一个变量Variables,
        *类型为net.sf.jasperreports.engine.JRDataSource
         *(就是上图的变量设置)
        **/
         setVariableValue("other", jr);
    }

    @Override
    public void beforeReportInit() throws JRScriptletException {
    }

    @Override
    public void afterReportInit() throws JRScriptletException {
    }

    @Override
    public void beforePageInit() throws JRScriptletException {
    }

    @Override
    public void afterPageInit() throws JRScriptletException {
    }

    @Override
    public void beforeColumnInit() throws JRScriptletException {
    }

    @Override
    public void afterColumnInit() throws JRScriptletException {
    }

    @Override
    public void beforeGroupInit(String arg0) throws JRScriptletException {
    }

    @Override
    public void afterGroupInit(String arg0) throws JRScriptletException {
    }

    @Override
    public void beforeDetailEval() throws JRScriptletException {
    }
}


上面三步就是创建子报表的重要三步,我刚开始也是这里没摸索到.

  8.子报表设计
    子报表的设计和主报表是一样的,因为它在这里是一个单独的报表,可以用自己的数据源来测试,也就是我们上面创建的SubFactory
    子报表对象绑定,由于主报表和子报表使用的数据源不同,对象属性绑定方式稍有不同,如下图所示:



  9.编译报表
    不同的报表选择不同的数据源来编译.
    选择相对应的数据源后,点击报表工具栏上的preview来预览,预览时会先编译,然后填充数据,有问题的话这个时候会暴露出来,根据错误提示自己再查找查找原因吧.
    子报表变动要先编译子报表,然后编译主报表.



好了,目前就先分享到这里, 上面自己的分享如果有不对之处,欢迎大家提出,并分享.
顺便分享几个链接,对于学习JasperReport比较有帮助,这边文章的部分内容也参考了下面的链接:
1、ireport + jasperreport(上中下)
    http://wangyaodi.iteye.com/blog/214496
    http://wangyaodi.iteye.com/blog/214500
    http://wangyaodi.iteye.com/blog/214504

2、利用复合的javabean构造基于jasperreports的子报表 (子报表内容基本上参考自这里)
    http://blog.csdn.net/lemonfamily/archive/2007/04/05/1553291.aspx






  • 大小: 71.7 KB
  • 大小: 26.9 KB
  • 大小: 28.8 KB
  • 大小: 7.7 KB
  • 大小: 2.9 KB
  • 大小: 21.7 KB
  • 大小: 14.5 KB
  • 大小: 19.2 KB
  • 大小: 23.5 KB
1
1
分享到:
评论
2 楼 Disney2002 2009-07-21  
Disney2002 写道
现在遇到一个问题,如果报表模板列不定怎么来打印呢?

比如有个表格是动态生成的,列不定,这样的话报表模板如何来设计?

貌似对于这类情况,只能手动通过编程来实现, JasperDesign这个类就是做这个事情的.
看看这个例子:
http://sunsy.iteye.com/blog/98140

正在研究ing
1 楼 Disney2002 2009-07-20  
现在遇到一个问题,如果报表模板列不定怎么来打印呢?

比如有个表格是动态生成的,列不定,这样的话报表模板如何来设计?

相关推荐

    JasperReport 用户手册

    - 分享个人项目经验有助于新手快速上手,减少学习曲线。 5. **文档资源** - 尽管官方文档可能需要付费,但社区提供的翻译和教程可以作为补充学习资料。 - 作者分享的 Word 形式的文档将包含更详细的信息和实例,...

    JasperReport + IReport 开发文档

    2. **这几天在弄ireport.doc**:可能是个人的学习笔记,记录了作者使用IReport时的经验和技巧。 3. **JasperReport初级教程(2_0_3)图文详解_绝对原创 - 川江号子_cn - CSDN博客.mht**:针对JasperReport的基础教程,...

    最新java软件设计师个人简历范文.pdf

    - 强调Java相关的专业技能,例如熟悉Struts、Hibernate、Spring等框架,掌握JSP、Servlet、jQuery等Web开发技术,了解JBPM工作流和报表技术如JasperReport、JFreeChart,以及Oracle、SQL Server等数据库的开发经验。...

    ireport资料

    8. **iReport研究.txt** - 可能是作者对iReport的一些个人研究或者心得,可能包含了非官方的技巧或经验分享。 9. **jasperReportDemo2** - 这可能是一个JasperReport的示例项目,包含了一些实际的代码和配置文件。 ...

    java软件设计师个人简历例文.doc.pdf

    此外,他还掌握了JBPM工作流技术、JasperReport和JFreeChart报表技术,并有过Oracle和SQL Server数据库开发经验。 在【部分内容】中,这位Java软件设计师强调了自己的项目经验和职责,比如在电力工程综合管理系统...

    2022技术年度个人工作总结范文[Word版].doc

    第二篇总结则聚焦于技术领域的个人成长和工作经验。作者在这一年里,经历了技术团队的领导角色,阅读了多本热门技术书籍以拓宽视野,尽管没有深入研究,但对各种技术有了整体认识。他参与了多个项目,其中涉及到技术...

    java软件设计师个人简历范文.docx

    在个人简历中,Java软件设计师需要突出其专业技能、项目经验和教育背景,以便吸引潜在雇主的注意。 【核心知识点】: 1. **Java编程**:作为Java软件设计师的基础,精通Java语言,包括面向对象编程概念、类、接口、...

    java软件设计师个人简历范文.pdf

    这篇个人简历展示了一位拥有扎实Java软件设计能力的求职者,他专注于Web应用程序开发,并具有实际项目经验。这位求职者在江西理工大学获得了计算机科学与技术的本科学位,并且已经积累了1年多的工作经验,主要在民营...

    最新java软件设计师个人简历范文.docx

    【Java软件设计师个人简历知识...在准备Java软件设计师的个人简历时,应当注重展示上述技术技能、项目经验和专业素养,以增加获得面试机会的可能性。同时,不断更新技能以适应快速发展的IT行业,也是保持竞争力的关键。

    java程序员个人简历05.docx

    Java 程序员个人简历 基本信息 姓名、性别、年龄、出生日期、婚姻状况、身高、目前所在地、户口所在地、工作年限、英语水平、英语级别、计算机、第二外语、水平、最高学历、专业、目前岗位、软件工程师/程序员、...

    个人简历例子

    - **拥有交通工具**:对于一些需要频繁外出的职位来说是个加分项。 - **获奖情况**:如有获得技术类奖项,则更佳。 - **推荐人**:具有行业影响力的推荐人能够提升简历的可信度。 综上所述,通过这份个人简历的例子...

    Java软件工程师的求职简历模板.docx

    - **数据库**:有Oracle和Sqlserver的开发经验,能使用SQL进行数据库操作。 5. **项目经验**: - **办公自动化(OA)系统**:负责合同管理和系统公共模块,体现了对业务流程的理解和编程能力。 - **电力工程综合...

    程序员简历模板08.doc

    【程序员简历模板08.doc】是一个为程序员设计的简历模板,用于展示个人的教育背景、技能专长、项目经验和自我评价。以下是对该简历中涉及的IT知识点的详细说明: 1. **学历与专业**:计算机科学与技术是IT领域的...

    va软件工程师工作简历模板.doc

    这包括在每份简历上附上个人照片,保持简历格式清晰、突出重点,附上相关证件复印件,使用统一的纸张规格,将简历和附件整齐装订,选择合适的信封,准确填写应聘岗位,提供有效的联系方式,以及确保简历易于打开阅读...

    基于JAVA实现的音像店租赁管理系统的设计与实现(源代码+论文).zip

    1. 用户管理:包括用户注册、登录、个人信息管理等功能,可能用到Java Servlet和JSP(Java Server Pages)技术。 2. 音像品管理:音像品的添加、删除、修改和查询,以及分类管理,可能涉及到Java集合框架和多线程...

    Java软件工程师的求职简历模板.docx编程资料

    1. **避免罗列岗位职责**:简历中的“工作经历”部分应重点突出个人的业绩和成果,而不是简单列举岗位职责。例如,可以具体说明自己在项目中承担的角色、解决的问题以及取得的成绩。 2. **精简且突出重点**:简历...

Global site tag (gtag.js) - Google Analytics