【问题标题】:How to adjust text field with stretch with overflow如何使用溢出调整文本字段
【发布时间】:2018-04-20 04:31:50
【问题描述】:

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

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

field1 和 field 2 都是java.lang.String 类型。 由于 field1 和 field2 的长度都不是一致的,因此我检查了溢出属性为 TRUE 的拉伸。但问题是,当我为 field2 提供长文本时,其余部分位于 field1 下方,而我需要它从 field2 下方开始。

其实是这样的:

something for field1 — something very long 
for field2

虽然我需要它:

something for field1 — something very long 
                       for field2

如果我将$F{field1} 放在单独的文本字段中,因为它没有固定长度,有时在$F{field1} 之后会出现一个额外的空格,或者如果我将其带有溢出属性的拉伸设置为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

【问题讨论】:

  • 此链接以某种方式描述了我的问题,但我在中间有静态文本,所以答案对我不起作用:stackoverflow.com/questions/8979134/…
  • 必须使用单个字段吗?相反,三列会简化解决方案。
  • 谢谢回复,问题是如果我用三列还是有调整一行第一个字段的问题

标签: jasper-reports


【解决方案1】:

试试这样的:

<?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 编写的,因此代码可能无法在旧版本中运行。不过,这种方法可能是正确的。

【讨论】:

  • 不错的解决方案!如果我不需要保持整个文本左对齐,它就可以工作
猜你喜欢
  • 2011-11-18
  • 1970-01-01
  • 1970-01-01
  • 2020-07-21
  • 2012-04-04
  • 2018-02-01
  • 2020-06-01
  • 1970-01-01
  • 2017-02-11
相关资源
最近更新 更多