ireport new java.lang.boolean,java – 在JasperReports中使用ArrayList作为主数...

我在使用ArrayList作为JasperReports中的主数据源时遇到了问题.

我的程序是一个简单的Java程序,我有一个非常简单的报告.我在ArrayList中有两个数据对象,我用JRBeanCollectionDataSource包装它们,并通过JasperFillManager将它传递给JRPrint.生成了我的报告,但只生成了第一个数组项.

我基本上遵循this tutorial,然后将另一个项添加到ArrayList.但只有一个打印出来.

代码段:

ArrayList listOfReports = new ArrayList();

ProtoReport protoReport1 = new ProtoReport();

ProtoReport protoReport2 = new ProtoReport();

//Simple Fields and text

protoReport1.setTitle("Example Fact Sheet");

protoReport2.setTitle("2nd Fact Sheet");

//add all reports to the list

listOfReports.add(protoReport1);

listOfReports.add(protoReport2);

//and wrap the ArrayList in a JRBeanCollectionDataSource

JRBeanCollectionDataSource beanBurritoWrap = new JRBeanCollectionDataSource(listOfReports);

//build the jasper report

JasperReport jasperReport;

JasperPrint jasperPrint;

HashMap hashMap = new HashMap<>();

boolean reportCreated;

try {

jasperReport = JasperCompileManager.compileReport(jrxmlLocation);

jasperPrint = JasperFillManager.fillReport(jasperReport, hashMap, beanBurritoWrap);

JasperExportManager.exportReportToPdfFile(jasperPrint, outputFileName);

reportCreated = true;

} catch (JRException e) {

e.printStackTrace();

reportCreated = false;

}

//Report on build status

System.out.println("Jasper Report built: " + reportCreated);

ProtoReport类基本上只是报表字段,表格和图表数据的容器

例如:

package org.reportprotojava.protosheet;

import java.util.ArrayList;

public class ProtoReport {

private String outputFileName;

private String title;

private String logoLocation;

private String paragraphText;

private ArrayList tableData;

private String picLocation;

private int[][] graphData; //TODO decide how to store chart data

private ChartData chartData;

private String path;

//default constructor

public ProtoReport() {

// Initialize object fields

outputFileName = "PrototypeReport";

title = "Prototype Report";

paragraphText = "Default text";

tableData = new ArrayList();

chartData = new ChartData();

//set path to working directory

path = System.getProperty("user.dir");

//default to assumed report location

//(ie same folder as .jrxml and .jasper files)

logoLocation = path + "\\reports";

picLocation = path + "\\reports";

}

加上参数化的构造函数,然后是getter和setter等

编译没有问题,第一个报告导出到pdf没问题.我得到的唯一警告是:

log4j:WARN No appenders could be found for logger (net.sf.jasperreports.engine.xml.JRXmlDigesterFactory).

log4j:WARN Please initialize the log4j system properly.

但我不认为这与这个问题有任何关系(如果不是这样,请纠正我).

这是我的.jrxml文件(忽略图表的东西,我现在正在努力,但它正在形成另一个问题的材料;-))

有没有人知道我做错了什么?

编辑

好的我已经根据AlexK的建议进行了一些更改,将我的所有字段,图表和表格移动到Detail 1乐队中,但现在当我去编译时,我收到以下错误:

net.sf.jasperreports.engine.JRException: Byte data not found at : C:\Users\eljaydub\workspace\ReportProtoJava\reports

at net.sf.jasperreports.repo.RepositoryUtil.getBytesFromLocation(RepositoryUtil.java:324)

at net.sf.jasperreports.engine.RenderableUtil.getRenderable(RenderableUtil.java:121)

at net.sf.jasperreports.engine.fill.JRFillImage.evaluateImage(JRFillImage.java:505)

at net.sf.jasperreports.engine.fill.JRFillImage.evaluate(JRFillImage.java:442)

at net.sf.jasperreports.engine.fill.JRFillElementContainer.evaluate(JRFillElementContainer.java:257)

at net.sf.jasperreports.engine.fill.JRFillBand.evaluate(JRFillBand.java:457)

at net.sf.jasperreports.engine.fill.JRVerticalFiller.fillColumnBand(JRVerticalFiller.java:2037)

at net.sf.jasperreports.engine.fill.JRVerticalFiller.fillDetail(JRVerticalFiller.java:771)

at net.sf.jasperreports.engine.fill.JRVerticalFiller.fillReportContent(JRVerticalFiller.java:301)

at net.sf.jasperreports.engine.fill.JRVerticalFiller.fillReport(JRVerticalFiller.java:148)

at net.sf.jasperreports.engine.fill.JRBaseFiller.fill(JRBaseFiller.java:909)

at net.sf.jasperreports.engine.fill.JRBaseFiller.fill(JRBaseFiller.java:841)

at net.sf.jasperreports.engine.fill.JRFiller.fill(JRFiller.java:88)

at net.sf.jasperreports.engine.JasperFillManager.fill(JasperFillManager.java:653)

at net.sf.jasperreports.engine.JasperFillManager.fillReport(JasperFillManager.java:969)

at org.reportprotojava.protosheet.Program.main(Program.java:130)

我做了一些谷歌搜索,发现大部分时间这是由与图像文件位置有关的问题引起的,所以我用这个修改了我的代码:

//Locations

//Absolute

protoReport1.setLogoLocation("C:\\Users\\eljaydub\\workspace\\ReportProtoJava\\reports\\logo.gif");

protoReport1.setPicLocation("C:\\Users\\eljaydub\\workspace\\ReportProtoJava\\reports\\portfolio.jpg");

//Relative

// protoReport1.setLogoLocation(protoReport1.getPath() + "\\reports\\logo.gif");

// protoReport1.setPicLocation(protoReport1.getPath() + "\\reports\\portfolio.jpg");

并尝试了相对和绝对路径,但得到了相同的错误.这些是相关的,还是应该为此错误创建新帖子?

编辑

解决了! AlexK的建议确实解决了第一个问题然后揭示了第二个问题:当报告转到下一个数组元素protoReport2时,它发现该对象的图像链接是我的默认构造函数提供的,只猜测可能的图像文件的名称和位置.然后抛出异常,因为两个图像的imageType属性onErrorType都设置为Error.我只需要在iReports中将属性更改为Icon,生成的报告没有进一步的问题,我得到了我的预期:两个数组元素打印在不同的页面上,第二个使用默认的构造函数值.

谢谢您的帮助!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
iReport是一款非常方便实用的报表设计器工具,通过iReport可以轻松地设计和生成各种形式的报表。对于新手来说,理解如何使用iReport可能有些困难,因此一份文教程非常有帮助。 在《iReport文教程.doc》,我预计会找到以下内容: 1. iReport的介绍:教程应该会对iReport的功能和优势进行简要的介绍,包括它的报表设计能力、数据源连接、布局设计等。 2. iReport的安装和配置:教程会提供详细的步骤,指导用户如何下载、安装和配置iReport。这包括选取正确的版本、安装JDK、设置环境变量等。 3. 报表设计基础:教程应该会解释iReport的一些基本概念和术语,如报表元素、数据源、参数等。此外,还应该教会用户如何创建新的报表、选择合适的布局、调整样式和格式等。 4. 数据源连接:教程可能会介绍如何连接各种不同的数据源,如数据库、XML文件等。这包括配置连接参数、执行查询、获取数据等。 5. 报表设计高级技巧:教程可能会深入探讨一些高级的报表设计技巧,如子报表的嵌套、图表的设计、条件格式化等。 6. 报表导出和发布:教程可能会介绍如何将设计好的报表导出为不同的格式,如PDF、Excel等。此外,还可以教会用户如何将报表集成到自己的应用程序。 总的来说,《iReport文教程.doc》应该是一份详细而全面的教程,通过阅读和理解教程,用户能够快速上手并熟练使用iReport进行报表设计和生成。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值