当前位置: 首页 > 知识库问答 >
问题:

具有 Bean 集合数据源的 Jasper 报表生成一个空页

周和歌
2023-03-14

我正在尝试使用Jasper Reports 6.5.1将数据从Java传递到使用JRBeanCollectionDataSource的报告中的字段属性。

我已经创建了JavaBean和报告,所有数据似乎都顺利通过,但最终结果是一个空白页面,我似乎无法解决这个问题。任何帮助都将不胜感激。请看下面我的代码...

提前致谢

代码生成报告

import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Map;

import net.sf.jasperreports.engine.JRDataSource;
import net.sf.jasperreports.engine.JRException;
import net.sf.jasperreports.engine.JasperCompileManager;
import net.sf.jasperreports.engine.JasperExportManager;
import net.sf.jasperreports.engine.JasperFillManager;
import net.sf.jasperreports.engine.JasperPrint;
import net.sf.jasperreports.engine.JasperReport;
import net.sf.jasperreports.engine.data.JRBeanCollectionDataSource;

public class Jasper{

    public static void main(String[] args) throws JRException, FileNotFoundException {

        ArrayList<JasperBean> list = new ArrayList<JasperBean>();

        String reportFile = "C:\\test\\tester.jrxml";
        String output = "C:\\test\\Jasper.pdf";

        JasperBean data = new JasperBean();

        data.setName("Freddie");
        data.setSurname("Wilson");
        data.setTitle("Mr.");

        list.add(data);
        JasperReport jr = JasperCompileManager.compileReport(reportFile);
        JRDataSource dataSource = new JRBeanCollectionDataSource(list);
        Map<String, Object> params = new HashMap<>();
        params.put("DataSource", dataSource);
        JasperPrint print = JasperFillManager.fillReport(jr, params);
        FileOutputStream out = new FileOutputStream(new File(output));
        JasperExportManager.exportReportToPdfStream(print, out);        
    }
}

爪哇豆

import java.io.Serializable;

public class JasperBean implements Serializable {

    /**
     * 
     */
    private static final long serialVersionUID = 1L;

    private String name;
    private String Surname;
    private String title;

    public String getName() {
        return name;
    }

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

    public String getSurname() {
        return Surname;
    }

    public void setSurname(String surname) {
        Surname = surname;
    }

    public String getTitle() {
        return title;
    }

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

以下是报告源XML

<?xml version="1.0" encoding="UTF-8"?>
<!-- Created with Jaspersoft Studio version 6.5.1.final using JasperReports Library version 6.5.1  -->
<jasperReport xmlns="http://jasperreports.sourceforge.net/jasperreports" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://jasperreports.sourceforge.net/jasperreports http://jasperreports.sourceforge.net/xsd/jasperreport.xsd" name="tester" pageWidth="595" pageHeight="842" columnWidth="555" leftMargin="20" rightMargin="20" topMargin="20" bottomMargin="20" uuid="2dabb962-4ca0-4006-881b-9c608349031a">
    <property name="com.jaspersoft.studio.data.defaultdataadapter" value="One Empty Record"/>
    <field name="DataSource" class="testing.JasperBean"/>
    <field name="title" class="java.lang.String"/>
    <field name="name" class="java.lang.String"/>
    <field name="surname" class="java.lang.String"/>
    <background>
        <band splitType="Stretch"/>
    </background>
    <detail>
        <band height="311" splitType="Stretch">
            <textField>
                <reportElement x="50" y="162" width="232" height="18" uuid="00051b07-d9a7-4531-a757-70afa89f17cf"/>
                <textFieldExpression><![CDATA[$F{title} + " " + $F{name} + " " + $F{surname}]]></textFieldExpression>
            </textField>
        </band>
    </detail>
</jasperReport>

共有1个答案

晁璞
2023-03-14

在main()方法中使用:

JasperPrint print = JasperFillManager.fillReport(jr, params, dataSource);

从jrxml文件中删除:

<field name="DataSource" class="testing.JasperBean"/>
 类似资料:
  • 我使用jasper设计器(不是iReport而是eclipse的插件)创建了一个使用excel文件作为数据源的报表。 该报表在设计器中运行良好,并且从文件中读取数据没有问题,但是在将该文件编译为并在JasperViewer中给出excel文件的路径后,jasperViewer中没有任何内容! 这是我的代码:

  • 我需要创建订单申报报告,我正在使用jasper studio创建jasper模板。在该模板中,我有订单id、客户详细信息和他的地址,我必须用这些详细信息创建一个报告。 我下面有jasper报告代码 但是不是,我必须传递Java bean类,所以jasper引擎必须从一个Java bean中获取数据,我已经将,它获取bean列表,但我的要求只是一个具有订单详细信息的bean。请给我一点建议

  • 我目前的技能只能通过使用JRBeanCollectionDataSource(list)作为数据源,在不使用子报表的情况下制作pdf。(数据打印成功) 谁能告诉我如何制作包含多个子报表的pdf报表,主jrxml文件和子报表jrxml文件中应该包含哪些内容,以及java代码中应该包含哪些内容?以及如何使用多个JRBeanCollectionDataSource(列表)?我唯一知道的是使用Map pa

  • 我正在创建一个JasperReports的报告,其中只有子报告。 以下是我目前面临的场景。 为了简化问题,让我们只考虑两个 jasper 报告:mainReport 和 subReportFile1。 我的主报告jasper文件如下: 子报表具有以下字段,我已为其创建了以下自定义 Bean 类,并将其作为参数发送到主报表文件。我有具有以下字段的自定义BeanClass: 我正在我的 java 文件

  • (使用Jaspersoft Studio 6.6.0,还没有Jasper服务器)我的数据集如下所示 如果我将报告生成为PDF,我将得到一个PDF,页面数和行数一样多。 但我需要的将是有多少分开PDF文件有行。这可能吗?

  • 我有一个要求,我必须阅读CSV文件并在Jasper中准备一份报告。我能够在常规文本字段中使用CSV数据源。但是当我在详细信息或摘要部分添加一个表时,它需要创建一个新的数据集。我成功地创建了它,但是当报告运行时,它无法从CSV数据源获取数据,我得到了一个空白的报告。如果我使用数据库而不是CSV,同样的事情也会发生。Jasper中有bug吗?