如何通过溢出来调整文本字段

时间:2018-04-18 23:28:21

标签: jasper-reports

我使用的是iReport 4.5.1(我知道它已经很老了,但它正在工作,我无权升级它)。 无论如何,我有一个文本字段具有以下值:

$F{field1} + " — " + $F{field2}

field1和field 2都是java.lang.String类型。 由于field1和field2都没有一致的长度,我已经使用overflow属性检查了拉伸为TRUE。但问题是,当我有一个字段2的长文本时,其余部分来自field1,而我需要它在field2下面开始。

实际上,它似乎是:

something for field1 — something very long 
for field2

虽然我需要它,但是:

something for field1 — something very long 
                       for field2

如果我将$F{field1}放在一个单独的文本字段中,因为它没有固定的长度,有时会在$F{field1}之后出现一个额外的空格,或者如果我将其expand值设置为TRUE ,$F{field1}出现在两行中,我也不喜欢它。 一般来说,我需要$F{field1}出现在一行中,其后只有一个空格而$F{field2}分成两行,如果它的长度太长,则显示如上所述。

有没有办法做到这一点?

这是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="adjust_textField" language="groovy" pageWidth="595" pageHeight="842" columnWidth="555" leftMargin="20" rightMargin="20" topMargin="20" bottomMargin="20">
    <parameter name="parameter1" class="java.lang.Integer"/>
    <queryString>
        <![CDATA[SELECT code, name FROM test_co1 WHERE id = $P{parameter1}]]>
    </queryString>
    <field name="code" class="java.lang.String"/>
    <field name="name" class="java.lang.String"/>
    <detail>
        <band height="125" splitType="Stretch">
            <textField isStretchWithOverflow="true">
                <reportElement positionType="Float" x="41" y="66" width="270" height="20"/>
                <textElement verticalAlignment="Bottom">
                    <font fontName="Gill Sans MT" size="12" isBold="true"/>
                </textElement>
                <textFieldExpression class="java.lang.String"><![CDATA[$F{code} + " — " + $F{name}]]></textFieldExpression>
            </textField>
        </band>
    </detail>
</jasperReport>

从下表中读取数据:

CREATE TABLE public.test_co1 (
  id INTEGER,
  code TEXT,
  name TEXT
) ;

/* Data for the 'public.test_co1' table  (Records 1 - 54) */

INSERT INTO public.test_co1 ("id", "code", "name")
VALUES 
  (1, E'J', E'WELDING & CUTTING'),
  (2, E'L', E'CONFINED SPACES'),
  (6, E'N', E'COMPRESSED GAS/FUEL CYLINDERS'),
  (15, E'W18', E'java code to iReportWEAPON SAFETY FOR PROP. MASTERS'),
  (45, E'GD$', E'java code to iReportGENERAL SAFETY TRAINING/INJURY & ILLNESS PREVENTION PROGRAM'),
  (49, E'GD$', E'java code to iReportENVIRONMENTAL SAFETY');

输入45作为参数值时,会将其显示为

GD$ — java code to iReportGENERAL SAFETY
TRAINING/INJURY & ILLNESS PREVENTION
PROGRAM

虽然我需要它:

GD$ — java code to iReportGENERAL SAFETY
      TRAINING/INJURY & ILLNESS PREVENTION
      PROGRAM

1 个答案:

答案 0 :(得分:0)

尝试这样的事情:

<?xml version="1.0" encoding="UTF-8"?>
<!-- Created with Jaspersoft Studio version 6.3.0.final using JasperReports Library version 6.3.0  -->
<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="adjust_textField" language="groovy" pageWidth="595" pageHeight="842" columnWidth="555" leftMargin="20" rightMargin="20" topMargin="20" bottomMargin="20" uuid="f5fbc25f-d746-4a3c-bb20-80389233ba42">
    <property name="ireport.zoom" value="1.0"/>
    <property name="ireport.x" value="0"/>
    <property name="ireport.y" value="0"/>
    <parameter name="parameter1" class="java.lang.Integer"/>
    <queryString>
        <![CDATA[SELECT id, code, name FROM test_co1
WHERE id = $P{parameter1}]]>
    </queryString>
    <field name="id" class="java.lang.Integer"/>
    <field name="code" class="java.lang.String"/>
    <field name="name" class="java.lang.String"/>
    <detail>
        <band height="125" splitType="Stretch">
            <textField isStretchWithOverflow="true">
                <reportElement stretchType="RelativeToTallestObject" x="0" y="0" width="100" height="30" uuid="b40f6b54-cdd8-4bed-8a3f-96808e8eeecb"/>
                <textElement textAlignment="Right"/>
                <textFieldExpression><![CDATA[$F{code} + " — "]]></textFieldExpression>
            </textField>
            <textField isStretchWithOverflow="true">
                <reportElement x="100" y="0" width="180" height="30" uuid="db6850d8-c213-4544-8bae-cf515ae7484e"/>
                <textFieldExpression><![CDATA[$F{name}]]></textFieldExpression>
            </textField>
        </band>
    </detail>
</jasperReport>

我还没有对它进行过测试,但我们的想法是创造两个相互高度伸展的领域。第一个字段是右对齐的,第二个字段是左对齐的。

这是使用JasperReports 6.3编写的,因此代码可能无法在旧版本中使用。不过,这种方法可能是正确的。