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

参考技术A report language 改成java 就行了

即使使用最简单的 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 属性中设置)是打印所有报告部分,&lt;detail&gt; 除外。

此报告包含一个详细信息部分,但仅包含一些静态数据。为确保也打印此部分,最简单的方法是提供一个空数据源,其中包含一条空记录。

来源: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报表总页数

jasperReport/iReport 子报表显示空白(未显示)

jasper文件与jrxml文件的关系。

jsp调用jasperreport生成报表问题

java 调用jasperreport生成Pdf报表,目前String类型的字段可以正常显示。

用iReport导出的txt文件中中文部分成了乱码,这是啥原因,如何解决?