JasperReports HTML输出中的':'字符

时间:2011-12-19 04:21:32

标签: encoding jasper-reports

我正在使用JasperReports,HTML作为导出格式。问题是,在我的Java类中,我使用包含“:”字符的String值设置参数,当我单击按钮生成报告时,包含“:”的字段角色,改变其位置并显示在其他地方,如果我删除“:”,它就可以正常工作。

一些输入

  1. 我的jrxml是UTF-8编码的
  2. 我尝试将“:”替换为“\u003a”仍然没有运气
  3. 我尝试将“:”替换为“:”,这样可以“:”而不是“:
  4. jrxml是这样的,这里'leaveTime'的值带有':',因此它不会显示在表中但显示在屏幕上的其他位置(具有不同的x和y值)
  5. <detail>
        <band height="15">
            <textField isStretchWithOverflow="true" isBlankWhenNull="true">
                <reportElement x="600" y="0" width="120" height="15"/>
                <textElement textAlignment="Left"/>
                <textFieldExpression><![CDATA[$F{supervisorName}]]>
                </textFieldExpression>
            </textField>
            <textField isStretchWithOverflow="true" isBlankWhenNull="true">
                <reportElement x="532" y="0" width="65" height="15"/>
                <textElement textAlignment="Left"/>
                <textFieldExpression><![CDATA[$F{leaveTime}]]>
                </textFieldExpression>
            </textField>
        </band>
    </detail>
    

1 个答案:

答案 0 :(得分:1)

基本思路是:JasperReports将$ F {leaveTime}的任何价值放入报告中。这可能包括不是HTML友好的字符。这是合理的,因为JR不知道您是否将导出到Excel或PDF或HTML或其他内容。您将“:”替换为“\u003a”的想法在概念上是正确的......但其细节并不完全正确。你需要HTML转义,而不是UTF-8转义。

我认为在这个特定情况下你需要&#58;

更一般地说,您应该使用为转义HTML字符串而构建的库。我推荐使用Apache Commons Lang。这样,您可以将$F{leaveTime}替换为StringEscapeUtils.escapeHtml($F{leaveTime})