【问题标题】:The pdf report with manual tagging throws EmptyStackException带有手动标记的 pdf 报告抛出 EmptyStackException
【发布时间】:2020-08-09 20:59:56
【问题描述】:

我有 spring webapp,我在其中使用 JasperReports 生成一些基本的数据库查询报告并导出为 pdf。

我尝试使用动态碧玉以编程方式添加标签而不是使用 jrxml,但这会遇到不同的问题。我的 jrxml 文件几乎是来自 Jaspersoft Studio 的 tabular-report.jrxml 示例的副本。如果您需要查看其他内容来解决此问题,请告诉我,此时我们将不胜感激。

找到了这个但是没有解决方法:https://community.jaspersoft.com/questions/1112221/error-manulal-tagging-table-pdf-export

这是我的 jrxml 文件:

<?xml version="1.0" encoding="UTF-8"?>
<jasperReport ....>
    <style>....
    </style>
    <queryString>
        This works, deleted because its sensitive.
    </queryString>
    <field name="last_login" class="java.sql.Timestamp"/>
    <field name="first_name" class="java.lang.String"/>
    <field name="middle_name" class="java.lang.String"/>
    <field name="last_name" class="java.lang.String"/>
    <field name="IAL" class="java.lang.Integer"/>
    <field name="xid" class="java.lang.String"/>
    <field name="email" class="java.lang.String"/>
    <title>
        <band height="45">
            <staticText>
                <reportElement style="reportTitleStyle" positionType="Float" x="0" y="0" width="595" height="30">
                    <property name="net.sf.jasperreports.export.pdf.tag.h1" value="full"/>
                </reportElement>
                <textElement/>
                <text><![CDATA[User Login Report]]></text>
            </staticText>
            <textField>
                <reportElement style="subTitleStyle" positionType="Float" x="0" y="30" width="595" height="15">
                    <property name="net.sf.jasperreports.export.pdf.tag.h2" value="full"/>
                </reportElement>
                <textElement/>
                <textFieldExpression>
                    <![CDATA["This report was generated at " + new java.util.Date()]]></textFieldExpression>
            </textField>
        </band>
    </title>
    <pageHeader>
        <band height="30">
            <textField isStretchWithOverflow="true" isBlankWhenNull="true">
                <reportElement style="defaultHeaderStyle" positionType="Float" stretchType="RelativeToTallestObject" x="0" y="0" width="95" height="30" isPrintWhenDetailOverflows="true">
                    <property name="net.sf.jasperreports.export.pdf.tag.table" value="start"/>
                    <property name="net.sf.jasperreports.export.pdf.tag.th" value="full"/>
                    <property name="net.sf.jasperreports.export.pdf.tag.rowspan" value="2"/>
                </reportElement>
                <textElement/>
                <textFieldExpression><![CDATA["Last Login"]]></textFieldExpression>
            </textField>
            <textField isStretchWithOverflow="true" isBlankWhenNull="true">
                <reportElement style="defaultHeaderStyle" positionType="Float" stretchType="RelativeToTallestObject" x="95" y="0" width="83" height="30" isPrintWhenDetailOverflows="true">
                    <property name="net.sf.jasperreports.export.pdf.tag.th" value="full"/>
                    <property name="net.sf.jasperreports.export.pdf.tag.rowspan" value="2"/>
                </reportElement>
                <textElement/>
                <textFieldExpression><![CDATA["First Name"]]></textFieldExpression>
            </textField>
            <textField isStretchWithOverflow="true" isBlankWhenNull="true">
                <reportElement style="defaultHeaderStyle" positionType="Float" stretchType="RelativeToTallestObject" x="178" y="0" width="59" height="30" isPrintWhenDetailOverflows="true">
                    <property name="net.sf.jasperreports.export.pdf.tag.th" value="full"/>
                    <property name="net.sf.jasperreports.export.pdf.tag.rowspan" value="2"/>
                </reportElement>
                <textElement/>
                <textFieldExpression><![CDATA["Middle Name"]]></textFieldExpression>
            </textField>
            <textField isStretchWithOverflow="true" isBlankWhenNull="true">
                <reportElement style="defaultHeaderStyle" positionType="Float" stretchType="RelativeToTallestObject" x="237" y="0" width="83" height="30" isPrintWhenDetailOverflows="true">
                    <property name="net.sf.jasperreports.export.pdf.tag.th" value="full"/>
                    <property name="net.sf.jasperreports.export.pdf.tag.rowspan" value="2"/>
                </reportElement>
                <textElement/>
                <textFieldExpression><![CDATA["Last Name"]]></textFieldExpression>
            </textField>
            <textField isStretchWithOverflow="true" isBlankWhenNull="true">
                <reportElement style="defaultHeaderStyle" positionType="Float" stretchType="RelativeToTallestObject" x="320" y="0" width="35" height="30" isPrintWhenDetailOverflows="true">
                    <property name="net.sf.jasperreports.export.pdf.tag.th" value="full"/>
                    <property name="net.sf.jasperreports.export.pdf.tag.rowspan" value="2"/>
                </reportElement>
                <textElement/>
                <textFieldExpression><![CDATA["IAL"]]></textFieldExpression>
            </textField>
            <textField isStretchWithOverflow="true" isBlankWhenNull="true">
                <reportElement style="defaultHeaderStyle" positionType="Float" stretchType="RelativeToTallestObject" x="355" y="0" width="59" height="30" isPrintWhenDetailOverflows="true">
                    <property name="net.sf.jasperreports.export.pdf.tag.th" value="full"/>
                    <property name="net.sf.jasperreports.export.pdf.tag.rowspan" value="2"/>
                </reportElement>
                <textElement/>
                <textFieldExpression><![CDATA["XID"]]></textFieldExpression>
            </textField>
            <textField isStretchWithOverflow="true" isBlankWhenNull="true">
                <reportElement style="defaultHeaderStyle" positionType="Float" stretchType="RelativeToTallestObject" x="414" y="0" width="141" height="30" isPrintWhenDetailOverflows="true">
                    <property name="net.sf.jasperreports.export.pdf.tag.th" value="full"/>
                    <property name="net.sf.jasperreports.export.pdf.tag.rowspan" value="2"/>
                </reportElement>
                <textElement/>
                <textFieldExpression><![CDATA["Email"]]></textFieldExpression>
            </textField>
        </band>
    </pageHeader>
    <detail>
        <band height="15" splitType="Immediate">
            <frame>
                <reportElement x="0" y="0" width="555" height="15">
                    <property name="net.sf.jasperreports.export.pdf.tag.tr" value="full"/>
                </reportElement>
                <textField isStretchWithOverflow="true" isBlankWhenNull="true">
                    <reportElement style="timeStampColumnStyle" positionType="Float" stretchType="RelativeToTallestObject" x="0" y="0" width="95" height="15" isPrintWhenDetailOverflows="true">
                        <property name="net.sf.jasperreports.export.pdf.tag.td" value="full"/>
                    </reportElement>
                    <textFieldExpression><![CDATA[$F{last_login}]]></textFieldExpression>
                </textField>
                <textField isStretchWithOverflow="true" isBlankWhenNull="true">
                    <reportElement style="columnStyle" positionType="Float" stretchType="RelativeToTallestObject" x="95" y="0" width="83" height="15" isPrintWhenDetailOverflows="true">
                        <property name="net.sf.jasperreports.export.pdf.tag.td" value="full"/>
                    </reportElement>
                    <textFieldExpression><![CDATA[$F{first_name}]]></textFieldExpression>
                </textField>
                <textField isStretchWithOverflow="true" isBlankWhenNull="true">
                    <reportElement style="columnStyle" positionType="Float" stretchType="RelativeToTallestObject" x="178" y="0" width="59" height="15" isPrintWhenDetailOverflows="true">
                        <property name="net.sf.jasperreports.export.pdf.tag.td" value="full"/>
                    </reportElement>
                    <textFieldExpression><![CDATA[$F{middle_name}]]></textFieldExpression>
                </textField>
                <textField isStretchWithOverflow="true" isBlankWhenNull="true">
                    <reportElement style="columnStyle" positionType="Float" stretchType="RelativeToTallestObject" x="237" y="0" width="83" height="15" isPrintWhenDetailOverflows="true">
                        <property name="net.sf.jasperreports.export.pdf.tag.td" value="full"/>
                    </reportElement>
                    <textFieldExpression><![CDATA[$F{last_name}]]></textFieldExpression>
                </textField>
                <textField isStretchWithOverflow="true" isBlankWhenNull="true">
                    <reportElement style="columnStyle" positionType="Float" stretchType="RelativeToTallestObject" x="320" y="0" width="35" height="15" isPrintWhenDetailOverflows="true">
                        <property name="net.sf.jasperreports.export.pdf.tag.td" value="full"/>
                    </reportElement>
                    <textFieldExpression><![CDATA[$F{IAL}]]></textFieldExpression>
                </textField>
                <textField isStretchWithOverflow="true" isBlankWhenNull="true">
                    <reportElement style="columnStyle" positionType="Float" stretchType="RelativeToTallestObject" x="355" y="0" width="59" height="15" isPrintWhenDetailOverflows="true">
                        <property name="net.sf.jasperreports.export.pdf.tag.td" value="full"/>
                    </reportElement>
                    <textFieldExpression><![CDATA[$F{xid}]]></textFieldExpression>
                </textField>
                <textField isStretchWithOverflow="true" isBlankWhenNull="true">
                    <reportElement style="columnStyle" positionType="Float" stretchType="RelativeToTallestObject" x="414" y="0" width="141" height="15" isPrintWhenDetailOverflows="true">
                        <property name="net.sf.jasperreports.export.pdf.tag.td" value="full"/>
                        <property name="net.sf.jasperreports.export.pdf.tag.table" value="end"/>
                    </reportElement>
                    <textElement textAlignment="Right"/>
                    <textFieldExpression><![CDATA[$F{email}]]></textFieldExpression>
                </textField>
            </frame>
        </band>
    </detail>
</jasperReport>

错误:

java.util.EmptyStackException
at java.util.Stack.peek(Stack.java:102)
at net.sf.jasperreports.engine.export.JRPdfExporterTagHelper.createTrStartTag(JRPdfExporterTagHelper.java:664)
at net.sf.jasperreports.engine.export.JRPdfExporterTagHelper.createStartTags(JRPdfExporterTagHelper.java:589)
at net.sf.jasperreports.engine.export.JRPdfExporterTagHelper.startElement(JRPdfExporterTagHelper.java:499)
at net.sf.jasperreports.engine.export.JRPdfExporter.exportElements(JRPdfExporter.java:1241)
at net.sf.jasperreports.engine.export.JRPdfExporter.exportPage(JRPdfExporter.java:1210)
at net.sf.jasperreports.engine.export.JRPdfExporter.exportReportToStream(JRPdfExporter.java:1074)
at net.sf.jasperreports.engine.export.JRPdfExporter.exportReport(JRPdfExporter.java:691)
at org.springframework.cglib.proxy.MethodProxy.invoke(MethodProxy.java:218)
at org.springframework.aop.framework.CglibAopProxy$CglibMethodInvocation.invokeJoinpoint(CglibAopProxy.java:749)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:163)

【问题讨论】:

  • 我从指向我的类的错误跟踪中删除了 4 行。
  • 您使用的是什么版本的 JasperReports?
  • 我正在使用 6.13.0net.sf.jasperreportsjasperreports6.13.0

标签: jasper-reports export-to-pdf


【解决方案1】:

该错误是由报告中详细信息带中的元素设置的net.sf.jasperreports.export.pdf.tag.table=end 属性引起的。查询结果中的每条记录的详细带重复,因此在详细带中设置net.sf.jasperreports.export.pdf.tag.table=end 没有意义。

该属性应设置在仅在表格/页面末尾打印一次的元素上,例如在页脚带中:

<pageFooter>
    <band height="1">
        <textField>
            <reportElement x="0" y="0" width="100" height="1">
                <property name="net.sf.jasperreports.export.pdf.tag.table" value="end"/>
            </reportElement>
            <textFieldExpression>""</textFieldExpression>
        </textField>
    </band>
</pageFooter>

【讨论】:

  • 非常感谢您的回答,我的报告不需要页脚,所以最初我没有添加页脚。我现在在我的 pdf 报告中有了我想要的标签,但每个标签下都添加了 标签。你知道删除这些额外标签或将其更改为

    的方法吗?

  • 我认为如果不自己更改 JasperReports 代码,您将无法做到这一点。
猜你喜欢
  • 1970-01-01
  • 2015-12-23
  • 1970-01-01
  • 1970-01-01
  • 2017-06-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多