How to properly stretch with overflow for non-detail band [duplicate]

耗尽温柔 提交于 2021-02-07 03:22:52

问题


I have fields in title and page header that have multiple lines. I want them to stretch vertically but the problem is the field below the stretched field is missing. I also grouped them using a frame.

The properties I set:

Position Type : Float
Stretch Type : Relative to Tallest Object
Stretch With Overflow : True

Please see below screen shot. enter image description here


回答1:


You can try these properties of text : -

For first field (Cashier Name) of title band use this properties :-

Position Type-         Fix Relative to Top

Stretch Type-          Relative to Band Height

Stretch With Overflow -    true

For the second field (Date) set these properties

Position Type-         Fix Relative to Bottom

Stretch Type-          No stretch

Stretch With Overflow-     false

In this report you can see the properties if you run the report with Sample HSQL database in ireport :-

<?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="ward utilization" pageWidth="300" pageHeight="300" orientation="Landscape" columnWidth="280" leftMargin="10" rightMargin="10" topMargin="10" bottomMargin="10" uuid="85476864-df43-454c-83dd-9c1b475ec223">
<property name="ireport.zoom" value="1.0"/>
<property name="ireport.x" value="0"/>
<property name="ireport.y" value="0"/>
<queryString>
    <![CDATA[select * from orders]]>
</queryString>
<field name="ORDERID" class="java.lang.Integer"/>
<field name="CUSTOMERID" class="java.lang.String"/>
<field name="EMPLOYEEID" class="java.lang.Integer"/>
<field name="ORDERDATE" class="java.sql.Timestamp"/>
<field name="REQUIREDDATE" class="java.sql.Timestamp"/>
<field name="SHIPPEDDATE" class="java.sql.Timestamp"/>
<field name="SHIPVIA" class="java.lang.Integer"/>
<field name="FREIGHT" class="java.math.BigDecimal"/>
<field name="SHIPNAME" class="java.lang.String"/>
<field name="SHIPADDRESS" class="java.lang.String"/>
<field name="SHIPCITY" class="java.lang.String"/>
<field name="SHIPREGION" class="java.lang.String"/>
<field name="SHIPPOSTALCODE" class="java.lang.String"/>
<field name="SHIPCOUNTRY" class="java.lang.String"/>
<group name="bed"/>
<title>
    <band height="42">
        <textField isStretchWithOverflow="true">
            <reportElement uuid="c438eefe-5415-409e-8e7c-c763a7305ae2" stretchType="RelativeToBandHeight" x="87" y="0" width="24" height="20"/>
            <textElement/>
            <textFieldExpression><![CDATA[$F{SHIPNAME}]]></textFieldExpression>
        </textField>
        <textField>
            <reportElement uuid="83c8a0d7-af5f-43ec-88dd-7d923a5b2a28" positionType="FixRelativeToBottom" x="87" y="21" width="24" height="20"/>
            <textElement/>
            <textFieldExpression><![CDATA[$F{SHIPCITY}]]></textFieldExpression>
        </textField>
    </band>
</title>




回答2:


I see two possible solutions here.

  1. based on tests reproducing your error, you can set the date field as float also and it will shift down as the previous label (cashier name) overflows. Unfortunately this is part of a solution because then the field date does not align with its label.

  2. create a table and set those labels and fields as a table and let it handle the overflow naturally. I failed to test it without using a datasource but I'm sure you can pass it the current report's datasource and fetch the data you need from it and display that info on that table.

Let me know if it worked for you. Also, tell me what else did you try. I'm curious now :)

Good luck.




回答3:


Stretch Type : Relative to Tallest Object make verttical size of any items as maximal from all items. In this case previous element overlaps next (missing) item.

This is not need. Set stretch type = "No stretch". "Stretch with overflow = true" is enough for correct display items. (imho)

Solution: Put each pair label:field into individual frame. In this case label-fields will display in the corresponding rows



来源:https://stackoverflow.com/questions/24445831/how-to-properly-stretch-with-overflow-for-non-detail-band

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!