前段时间对JasperReports使用的比较熟了,可是今天为了省事(仅用于调试代码),做了下图所示的报表:
然后Junit测试的时候报以下异常:
java.lang.IndexOutOfBoundsException: Index: 0, Size: 0
at java.util.ArrayList.RangeCheck(ArrayList.java:547)
at java.util.ArrayList.get(ArrayList.java:322)
at java.util.Collections$SynchronizedList.get(Collections.java:1820)
at net.sf.jasperreports.engine.export.JRGraphics2DExporter.exportReportToGraphics2D(JRGraphics2DExporter.java:245)
at net.sf.jasperreports.engine.export.JRGraphics2DExporter.exportReport(JRGraphics2DExporter.java:184)
at grp.pt.pb.ss.bs.CreateEvocherImageService.generateJpeg(CreateEvocherImageService.java:266)
而且用IReport预览也不显示任何信息。我先是取看看源码,注意到有个pages信息,于是我想是不是与分页相关。
public void exportReportToGraphics2D() throws JRException
{
grx.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
//grx.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_OFF);
grx.setRenderingHint(RenderingHints.KEY_FRACTIONALMETRICS, RenderingHints.VALUE_FRACTIONALMETRICS_ON);
grx.setRenderingHint(RenderingHints.KEY_INTERPOLATION, RenderingHints.VALUE_INTERPOLATION_BICUBIC);
AffineTransform atrans = new AffineTransform();
atrans.translate(globalOffsetX, globalOffsetY);
atrans.scale(zoom, zoom);
grx.transform(atrans);
List<JRPrintPage> pages = jasperPrint.getPages();
if (pages != null)
{
Shape oldClipShape = grx.getClip();
grx.clip(new Rectangle(0, 0, jasperPrint.getPageWidth(), jasperPrint.getPageHeight()));
try
{
JRPrintPage page = pages.get(startPageIndex);
exportPage(page);
}
finally
{
grx.setClip(oldClipShape);
}
}
}
调整报表
这样就可以了,看来detail里面是不能放Parameter类型的参数的。