【发布时间】:2019-12-27 11:24:44
【问题描述】:
我必须在 iReport 中为条形码添加“id”(字符串)。
id 是 8 位数字(这可能会有所不同),我想在其中添加 4 个前导 0。这样id的长度就变成了12。
jrxml
<?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="PadStringNumber" pageWidth="595" pageHeight="842" whenNoDataType="AllSectionsNoDetail" columnWidth="555" leftMargin="20" rightMargin="20" topMargin="20" bottomMargin="20" uuid="07c0dc81-9b58-48f9-8129-e0e08fe1cb98">
<parameter name="id" class="java.lang.String">
<defaultValueExpression><![CDATA["23423552"]]></defaultValueExpression>
</parameter>
<queryString>
<![CDATA[]]>
</queryString>
<title>
<band height="39" splitType="Stretch">
<textField>
<reportElement x="0" y="0" width="550" height="30" uuid="26317c0f-77c0-46cb-a4d8-1ee4fa1e7387"/>
<textFieldExpression><![CDATA[String.format("%12d",$P{id})]]></textFieldExpression>
</textField>
</band>
</title>
</jasperReport>
我目前的错误是:
Caused by: net.sf.jasperreports.engine.fill.JRExpressionEvalException: Error evaluating expression for source text: String.format("%12d",$P{id})
at net.sf.jasperreports.engine.fill.JREvaluator.evaluate(JREvaluator.java:291)
at net.sf.jasperreports.engine.fill.JRCalculator.evaluate(JRCalculator.java:618)
at net.sf.jasperreports.engine.fill.JRCalculator.evaluate(JRCalculator.java:586)
at net.sf.jasperreports.engine.fill.JRFillElement.evaluateExpression(JRFillElement.java:1020)
at net.sf.jasperreports.engine.fill.JRFillTextField.evaluateText(JRFillTextField.java:567)
at net.sf.jasperreports.engine.fill.JRFillTextField.evaluate(JRFillTextField.java:551)
at net.sf.jasperreports.engine.fill.JRFillElementContainer.evaluate(JRFillElementContainer.java:281)
at net.sf.jasperreports.engine.fill.JRFillBand.evaluate(JRFillBand.java:504)
at net.sf.jasperreports.engine.fill.JRVerticalFiller.fillTitle(JRVerticalFiller.java:315)
at net.sf.jasperreports.engine.fill.JRVerticalFiller.fillReportStart(JRVerticalFiller.java:251)
at net.sf.jasperreports.engine.fill.JRVerticalFiller.fillReport(JRVerticalFiller.java:119)
at net.sf.jasperreports.engine.fill.JRBaseFiller.fill(JRBaseFiller.java:558)
at net.sf.jasperreports.engine.fill.BaseFillHandle$ReportFill.run(BaseFillHandle.java:119)
at java.lang.Thread.run(Thread.java:745)
Caused by: java.lang.ClassCastException: java.lang.Integer cannot be cast to java.lang.String
at PadStringNumber_1566475648252_841187.evaluate(PadStringNumber_1566475648252_841187:178)
at net.sf.jasperreports.engine.fill.JREvaluator.evaluate(JREvaluator.java:277)
... 13 more
【问题讨论】:
-
@PetterFriberg ID 不是固定的,长度可能会有所不同,但我需要为条形码显示固定长度 12。我试过 String.format("%12d", $F{myBarcode}),它抛出了这个错误:“ Caused by: net.sf.jasperreports.engine.fill.JRExpressionEvalException”
-
好的,显示 jrxml minimal reproducible example 的最小版本以及您得到的确切错误 (stacktrace) edit 问题。
-
在我的数据库中,id 值是整数,我在 java 类中转换为 String 并进一步使用数据。它将此显示为另一个原因,“原因:java.util.IllegalFormatConversionException:d!= java.lang.String”
-
是的,您需要将其解析为整数(或将其作为整数传递)或使用库,如果您编辑,也许我可以回答
-
用这个问题新建一个小的 jrxml 并显示 stacktrace
标签: jasper-reports