当前位置: 首页 > 知识库问答 >
问题:

Jasper报表-编号格式问题

洪德寿
2023-03-14

我在Jaspersoft Studio 6.11.0+Java lib net.sf.JasperReports 6.11.0上遇到了一个奇怪的问题

我正在测试一个简单的报告,从Studio生成的报告很好,但是从Java生成的报告就不行了。

这是从Jaspersoft Studio生成的

在Java代码中,Pojo实例被数据填充,用Jackson封送,用JRXmlUtils解析成org.w3c.dom.document,然后作为parameter_xml_data_document发送给Jasper。

    JasperReport jasperReport = JasperReportUtils.generateJasperReportInstance(dataModel);

    StringWriter writer = new StringWriter();

    JAXBContext context = JAXBContext.newInstance(ContoEconomicoReport.class);
    context.createMarshaller().marshal(dataModel, writer);

    String str = writer.toString();

    System.out.println(str);

    Document document = JRXmlUtils.parse(new ByteArrayInputStream(str.getBytes()));

    parameters.put(JRXPathQueryExecuterFactory.PARAMETER_XML_DATA_DOCUMENT, document);

    JasperPrint jPrint = JasperFillManager.fillReport(jasperReport, parameters);

执行上述代码将生成以错误格式(左移2位)打印的数字(BigDecimal)的报告。

Jaspersoft报表生成

从上面的代码中,带有syso的打印字符串是

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<report>
    <object>
        <controvalore>2564894.01</controvalore>
    </object>
    <object>
        <controvalore>25648946.21</controvalore>
    </object>
    <object>
        <controvalore>25648.01</controvalore>
    </object>
</report>

如果它接受该字符串,将其放入xml文件中,并将其用作Jaspersoft Studio中的数据适配器,那么生成的报告将显示预期的值。

我已经检查了Locale,Java和Studio都使用相同的语言。

这是报告:

    <?xml version="1.0" encoding="UTF-8"?>
<!-- Created with Jaspersoft Studio version 6.11.0.final using JasperReports Library version 6.11.0-0c4056ccaa4d25a5a8c45672d2f764ea3498bebb  -->
<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="CONTO_ECONOMICO" pageWidth="842" pageHeight="595" orientation="Landscape" columnWidth="802" leftMargin="20" rightMargin="20" topMargin="20" bottomMargin="20" isSummaryNewPage="true" uuid="ec42ac74-05f9-4eeb-988b-cb92c2bd1e27">
    <property name="com.jaspersoft.studio.data.defaultdataadapter" value="ReportDataAdapter"/>
    <property name="com.jaspersoft.studio.unit." value="pixel"/>
    <property name="com.jaspersoft.studio.unit.pageHeight" value="pixel"/>
    <property name="com.jaspersoft.studio.unit.pageWidth" value="pixel"/>
    <property name="com.jaspersoft.studio.unit.topMargin" value="pixel"/>
    <property name="com.jaspersoft.studio.unit.bottomMargin" value="pixel"/>
    <property name="com.jaspersoft.studio.unit.leftMargin" value="pixel"/>
    <property name="com.jaspersoft.studio.unit.rightMargin" value="pixel"/>
    <property name="com.jaspersoft.studio.unit.columnWidth" value="pixel"/>
    <property name="com.jaspersoft.studio.unit.columnSpacing" value="pixel"/>
    <subDataset name="ListDataset" uuid="3b446c0b-520e-494d-97e6-0118bad0afb6">
        <property name="com.jaspersoft.studio.data.defaultdataadapter" value="ReportDataAdapter"/>
        <queryString language="XPath">
            <![CDATA[/report/object]]>
        </queryString>
        <field name="controvalore" class="java.math.BigDecimal">
            <property name="net.sf.jasperreports.xpath.field.expression" value="controvalore"/>
            <fieldDescription><![CDATA[controvalore]]></fieldDescription>
        </field>
    </subDataset>
    <parameter name="XML_DATA_DOCUMENT" class="org.w3c.dom.Document" isForPrompting="false"/>
    <parameter name="XML_INPUT_STREAM" class="java.io.InputStream" isForPrompting="false"/>
    <parameter name="XML_FILE" class="java.io.File" isForPrompting="false"/>
    <parameter name="net.sf.jasperreports.xml.source" class="java.lang.String" isForPrompting="false"/>
    <parameter name="XML_DATE_PATTERN" class="java.lang.String" isForPrompting="false"/>
    <parameter name="XML_NUMBER_PATTERN" class="java.lang.String" isForPrompting="false"/>
    <parameter name="XML_LOCALE" class="java.util.Locale" isForPrompting="false"/>
    <parameter name="XML_TIME_ZONE" class="java.util.TimeZone" isForPrompting="false"/>
    <queryString language="xPath">
        <![CDATA[/report]]>
    </queryString>
    <background>
        <band splitType="Stretch"/>
    </background>
    <detail>
        <band height="348" splitType="Stretch">
            <property name="com.jaspersoft.studio.layout" value="com.jaspersoft.studio.editor.layout.FreeLayout"/>
            <componentElement>
                <reportElement x="70" y="0" width="170" height="50" uuid="52daaff5-b717-469a-b917-dea9d70a05e0">
                    <property name="com.jaspersoft.studio.unit.height" value="px"/>
                    <property name="com.jaspersoft.studio.layout" value="com.jaspersoft.studio.editor.layout.FreeLayout"/>
                    <property name="com.jaspersoft.studio.unit.width" value="px"/>
                </reportElement>
                <jr:list xmlns:jr="http://jasperreports.sourceforge.net/jasperreports/components" xsi:schemaLocation="http://jasperreports.sourceforge.net/jasperreports/components http://jasperreports.sourceforge.net/xsd/components.xsd" printOrder="Vertical">
                    <datasetRun subDataset="ListDataset" uuid="0e9f5f26-3550-44fd-b1c3-bc3417de86e6">
                        <datasetParameter name="XML_DATA_DOCUMENT">
                            <datasetParameterExpression><![CDATA[$P{XML_DATA_DOCUMENT}]]></datasetParameterExpression>
                        </datasetParameter>
                        <datasetParameter name="XML_INPUT_STREAM">
                            <datasetParameterExpression><![CDATA[$P{XML_INPUT_STREAM}]]></datasetParameterExpression>
                        </datasetParameter>
                        <datasetParameter name="XML_FILE">
                            <datasetParameterExpression><![CDATA[$P{XML_FILE}]]></datasetParameterExpression>
                        </datasetParameter>
                        <datasetParameter name="net.sf.jasperreports.xml.source">
                            <datasetParameterExpression><![CDATA[$P{net.sf.jasperreports.xml.source}]]></datasetParameterExpression>
                        </datasetParameter>
                        <datasetParameter name="XML_DATE_PATTERN">
                            <datasetParameterExpression><![CDATA[$P{XML_DATE_PATTERN}]]></datasetParameterExpression>
                        </datasetParameter>
                        <datasetParameter name="XML_NUMBER_PATTERN">
                            <datasetParameterExpression><![CDATA[$P{XML_NUMBER_PATTERN}]]></datasetParameterExpression>
                        </datasetParameter>
                        <datasetParameter name="XML_LOCALE">
                            <datasetParameterExpression><![CDATA[$P{XML_LOCALE}]]></datasetParameterExpression>
                        </datasetParameter>
                        <datasetParameter name="XML_TIME_ZONE">
                            <datasetParameterExpression><![CDATA[$P{XML_TIME_ZONE}]]></datasetParameterExpression>
                        </datasetParameter>
                        <connectionExpression><![CDATA[$P{REPORT_CONNECTION}]]></connectionExpression>
                    </datasetRun>
                    <jr:listContents height="50" width="170">
                        <rectangle>
                            <reportElement x="0" y="0" width="170" height="50" backcolor="rgba(255, 255, 255, 0.0)" uuid="0f5160ff-c98b-470e-b70e-a8a04ac36dd7">
                                <property name="com.jaspersoft.studio.unit.x" value="px"/>
                                <property name="com.jaspersoft.studio.unit.y" value="px"/>
                            </reportElement>
                        </rectangle>
                        <textField pattern="#,##0.00">
                            <reportElement x="0" y="0" width="170" height="50" uuid="09c367e3-c63f-4e1c-9602-080e5fe20049"/>
                            <textElement textAlignment="Right" verticalAlignment="Middle"/>
                            <textFieldExpression><![CDATA[$F{controvalore}]]></textFieldExpression>
                        </textField>
                    </jr:listContents>
                </jr:list>
            </componentElement>
        </band>
    </detail>
</jasperReport>

共有1个答案

锺离卓
2023-03-14

自从我找到解决问题的方法后,我回答了自己的问题:)

我很确定这与地区有关,因为在意大利,默认的小数分隔符是逗号,而不是点号,但即使强制

parameters.put(JRParameter.REPORT_LOCALE, Locale.US)

什么也没解决。

然后我发现,既然我把数据通过

JRXPathQueryExecuterFactory.PARAMETER_XML_DATA_DOCUMENT
JRXPathQueryExecuterFactory.XML_LOCALE
java prettyprint-override">JasperReport jasperReport = JasperReportUtils.generateJasperReportInstance(dataModel);

StringWriter writer = new StringWriter();

JAXBContext context = JAXBContext.newInstance(ContoEconomicoReport.class);
context.createMarshaller().marshal(dataModel, writer);

String str = writer.toString();

Document document = JRXmlUtils.parse(new ByteArrayInputStream(str.getBytes()));

parameters.put(JRXPathQueryExecuterFactory.PARAMETER_XML_DATA_DOCUMENT, document);
parameters.put(JRXPathQueryExecuterFactory.XML_LOCALE, Locale.US);

JasperPrint jPrint = JasperFillManager.fillReport(jasperReport, parameters);
 类似资料:
  • 我有以下Jasper Report subreport.jrxml文件,它产生了非常奇怪的结果。 返回的每一行数据在报表上被神秘地拆分为两个单独的行。具体地说,location_name中的最后一个字符出现在新行上(除非数据中有逗号,在这种情况下,新行从那里开始)。为什么会这样? 除了解决方案之外,有没有人有一个如何在Jasper报告中加粗文本的示例?

  • 我不明白为什么我得到的是15000,00,而我在填充报告的XML文件中的值是1500.0。 我试图将TextField表达式中的Java类更改为、,但在报告中仍然没有得到正确的值!

  • 我们有一个内部的遗留java库,可以用jasper spring生成报告,并将它们导出为html、pdf或xls。然而,excel文件的所有单元格都具有相同的格式(没有),我们有一个报告,其中一列填充了文本,有人担心它会被解释为带有数值的公式或其他类型的代码。同样,我们有应该出现在报告中的带有前导零的字符串。我试过设置JExcelApiExporterParameter。通过jasperExpor

  • 我有一个带有一些数值的字符串。 然而,这两者都给出了错误。 实现这种格式的正确途径是什么? 这是jasper report jrxml的一部分,我希望在这里避免报告上出现“null”,从而插入以下代码: 如何解决这一问题? 多谢阅读。

  • (使用Jaspersoft Studio 6.6.0,还没有Jasper服务器)我的数据集如下所示 如果我将报告生成为PDF,我将得到一个PDF,页面数和行数一样多。 但我需要的将是有多少分开PDF文件有行。这可能吗?

  • 报告不能全部以编程方式进行,因为它们的布局会不断发生变化,我们不能每次发生这种变化时都更新我们的软件。