JasperReport由jrxml->jasper编译出错:Too many groovy classes were generated.
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了JasperReport由jrxml->jasper编译出错:Too many groovy classes were generated.相关的知识,希望对你有一定的参考价值。
详细错误信息如下:
Compilation exceptions: com.jaspersoft.ireport.designer.compiler.ErrorsCollector@19c10e82
net.sf.jasperreports.engine.JRException: Too many groovy classes were generated.
Please make sure that you don't use Groovy features such as closures that are not supported by this report compiler.
at net.sf.jasperreports.compilers.JRGroovyCompiler.compileUnits(JRGroovyCompiler.java:113)
at net.sf.jasperreports.engine.design.JRAbstractCompiler.compileReport(JRAbstractCompiler.java:188)
at net.sf.jasperreports.engine.JasperCompileManager.compileReport(JasperCompileManager.java:212)
at net.sf.jasperreports.engine.JasperCompileManager.compileReportToFile(JasperCompileManager.java:128)
at com.jaspersoft.ireport.designer.compiler.IReportCompiler.run(IReportCompiler.java:516)
at org.openide.util.RequestProcessor$Task.run(RequestProcessor.java:572)
at org.openide.util.RequestProcessor$Processor.run(RequestProcessor.java:997)
Compilation running time:
12,010
即使使用最简单的 Jasperreport jrxml 也是空白 PDF
【中文标题】即使使用最简单的 Jasperreport jrxml 也是空白 PDF【英文标题】:Blank PDF even with the simplest Jasperreport jrxml 【发布时间】:2011-07-12 14:42:54 【问题描述】:我有一个 EJB 站点,其中包含 glassfish 3.1 + JSF 用于 jasperreport 4.0.1。该网站在流式传输 pdf 上没有问题,但它在使用 runReportToPdfStream 打印 PDF 时生成空白 PDF,下面是代码 sn-p:
EJB
public class BookEJB
public void printReport() throws ClassNotFoundException, IOException, JRException
Map parameterMap = new HashMap();
FacesContext ctx = FacesContext.getCurrentInstance();
HttpServletResponse response = (HttpServletResponse) ctx.getExternalContext().getResponse();
InputStream reportStream = ctx.getExternalContext().getResourceAsStream("/reports/test.jasper");
ServletOutputStream servletOutputStream = response.getOutputStream();
servletOutputStream.flush();
response.setContentType("application/pdf");
JasperRunManager.runReportToPdfStream(reportStream, servletOutputStream, parameterMap);
servletOutputStream.flush();
servletOutputStream.close();
ctx.responseComplete();
test.jrxml - 没有 SQL 连接的简单报告
<?xml version="1.0" encoding="UTF-8"?>
<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="test" pageWidth="800" pageHeight="1200" columnWidth="555" leftMargin="25" rightMargin="25" topMargin="30" bottomMargin="30">
<property name="ireport.zoom" value="1.0"/>
<property name="ireport.x" value="0"/>
<property name="ireport.y" value="0"/>
<queryString>
<![CDATA[]]>
</queryString>
<pageHeader>
<band >
<staticText>
<reportElement x="0" y="0" />
<textElement>
<font size="24" isBold="true"/>
</textElement>
<text><![CDATA[Report of Testing]]></text>
</staticText>
</band>
</pageHeader>
<detail>
<band >
<staticText>
<reportElement x="0" y="0" />
<textElement>
<font size="18"/>
</textElement>
<text><![CDATA[If you don't see this, it didn't work blah blah blah.... ]]></text>
</staticText>
</band>
</detail>
<pageFooter>
<band />
</pageFooter>
</jasperReport>
在 JSF 上生成此报告时 glassfish 中没有错误日志,但只显示了空白 PDF。请帮忙,如果您需要进一步的分析信息,请告诉我。
史蒂文
【问题讨论】:
【参考方案1】:毕竟JasperRunManager.runReportToPdfStream(reportStream, servletOutputStream, parameterMap, new JREmptyDataSource());
解决了这个问题。
来自 Jasperreport 的 Sanda 的引述:
默认情况下,当报表中没有数据源信息时,JR 不会生成任何页面。另一个选项(可以在报告的
whenNoDataType
属性中设置)是打印所有报告部分,<detail>
除外。此报告包含一个详细信息部分,但仅包含一些静态数据。为确保也打印此部分,最简单的方法是提供一个空数据源,其中包含一条空记录。
来源:https://community.jaspersoft.com/questions/537650/blank-pdf-even-simplest-jrxml
【讨论】:
你救了我。谢谢!! 这对我也有帮助。非常感谢。【参考方案2】:当您不使用详细信息带时,仅使用静态值,您可以执行以下操作:
在iReport项目中右击,然后选择“Properties”,搜索“When no Data”属性,选择“All Sections, No Detail”
它适用于我,使用 iReport 4.0
【讨论】:
【参考方案3】:除了 Mythox 所说的之外,我将展示在 jasper 中伪造数据源的最佳方法,如果您还需要在 JasperServer 上进行。
1) 定义一个 Empty Data Adapter(一个简单的 .xml 文件),并将其部署在 Server 中或放在报告文件夹中:
<?xml version="1.0" encoding="UTF-8" ?><emptyDataAdapter class="net.sf.jasperreports.data.empty.EmptyDataAdapterImpl"><name>Nuovo Data Adapter 1</name><recordCount>1</recordCount></emptyDataAdapter>
2) 将其链接到主报告中:
<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="repor" language="javascript" pageWidth="612" pageHeight="792" whenNoDataType="NoDataSection" columnWidth="555" leftMargin="20" rightMargin="20" topMargin="20" bottomMargin="20" isFloatColumnFooter="true" uuid="c0eee90e-1b1a-4f34-ad99-1112847752de">
<property name="net.sf.jasperreports.data.adapter" value="EmptyDataAdapter.xml"/>
如果 xml 部署在 jasper 服务器上,则为数据适配器的属性值添加前缀“repo:”。
属性“whenNoDataType”将被忽略。
其他详情here。
【讨论】:
以上是关于JasperReport由jrxml->jasper编译出错:Too many groovy classes were generated.的主要内容,如果未能解决你的问题,请参考以下文章
jasperReport/iReport 子报表显示空白(未显示)