Igor Konoplyanko
Igor Konoplyanko

Reputation: 9374

Dynamically change width of element

I need to create table of contents in JasperReports. I have already achieved this, but cant do anything with lines in TOC.

Currently they have a static width:

Chapter 1          ........ 2
Long Chapter Name  ........ 3
End                ........ 4

I want to stretch dotted lines to the width of the chapter name. Like here:

Chapter 1 ................. 2
Long Chapter Name ......... 3
End ....................... 4

How can I do this? Is there some 'padding' functionality in JR or should I create scriptlet for this task ? Thanks!

P.S. I'm using jasper reports 5.0.1

Upvotes: 1

Views: 3238

Answers (1)

user2010781
user2010781

Reputation: 31

This wouldn't be a very neat way but I would draw many dots in your text box and hide the end using a frame to allow writing the number of the page.

<?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="table of content" language="groovy" pageWidth="595" pageHeight="842" columnWidth="555" leftMargin="20" rightMargin="20" topMargin="20" bottomMargin="20" uuid="df5894b6-0e62-4082-bdb8-3f0a1b26a2f4">
    <property name="ireport.zoom" value="1.0"/>
    <property name="ireport.x" value="0"/>
    <property name="ireport.y" value="0"/>
    <queryString>
        <![CDATA[SELECT
     1 AS page,
     'test' AS title
FROM
     "account" account
Union
SELECT
     4 AS page,
     'chapter 2' AS title
FROM
     "account" account
Union
SELECT
     20 AS page,
     'chapter 3: hello' AS title
FROM
     "account" account]]>
    </queryString>
    <field name="page" class="java.lang.Integer"/>
    <field name="title" class="java.lang.String"/>
    <background>
        <band splitType="Stretch"/>
    </background>
    <title>
        <band height="20" splitType="Stretch">
            <staticText>
                <reportElement uuid="2e81fd32-3b8d-4b98-b96d-6409afb8d16f" x="0" y="0" width="555" height="20"/>
                <textElement>
                    <font isBold="true" isStrikeThrough="false"/>
                </textElement>
                <text><![CDATA[Table of content]]></text>
            </staticText>
        </band>
    </title>
    <columnHeader>
        <band splitType="Stretch"/>
    </columnHeader>
    <detail>
        <band height="20" splitType="Stretch">
            <textField>
                <reportElement uuid="c8707508-946a-48ae-ae75-61810003e1db" x="0" y="0" width="555" height="20"/>
                <textElement/>
                <textFieldExpression><![CDATA[$F{title}+"  .............................................................................................................................."]]></textFieldExpression>
            </textField>
            <frame>
                <reportElement uuid="4040d203-6b49-4da2-8bcf-f3d6d48c7fd7" mode="Opaque" x="341" y="0" width="214" height="20"/>
            </frame>
            <textField>
                <reportElement uuid="472f8f95-fdea-4cd9-b3a5-a1b9b66a8c44" mode="Opaque" x="321" y="0" width="20" height="20"/>
                <textElement textAlignment="Right"/>
                <textFieldExpression><![CDATA[$F{page}]]></textFieldExpression>
            </textField>
        </band>
    </detail>
</jasperReport>

Upvotes: 1

Related Questions