Reputation: 45
I am having a problem in jasper reports regarding designing a document template. It's like a resume.
I have this document:
Age [static text] | [some field A]
Gender [static text] | [some field B]
Location [static text] | [some field C]
The current structure of my jasper reports is this:
I have this frame A, which has a vertical layout. Every row in the template (age, gender, location) corresponds to the frame I've created frames 1, 2 and 3.
Say, frame 1 has horizontal layout with 'Age [static text]' and '[some field A]' as its contents. The applies to frames 2 and 3.
Frame 1 has a position type of fix relative to top, while frames 2 and 3 are in float.
I want the row gender be hidden and be moved upwards if [some field] B is null or empty. How can I do that?
I've tried working on Remove Line When Blank but it only works inside a frame which has several fields in it. Basically, I want frame 1 to be hidden and have frames 2 and 3 be moved upwards if [some field A] is null or empty.
I hope for the soonest response.
Upvotes: 3
Views: 3219
Reputation: 56
I tried the solution mentioned above and also from a few other posts. This only works when your band height should remain the same, that means when the report gets printed, there was still empty space at the bottom of the report because of the fixed height of the band and the hidden content left empty space.
The solution which worked for me was to create multiple detail bands and put the content to be hidden in separate detail bands. Then use the printWhenExpression on those detail bands. This helped me hide the fields as well as remove the space from the bottom of the report too.
Upvotes: 0
Reputation: 21710
To achieve you desired result set:
positionType="Float"
on the reportElement
inside the frame
(it needs to move on the basis of the other elements.
isRemoveLineWhenBlank="true"
, to remove it if its not visible according to printWhenExpression
Include the check for all the fields inside the frame in the printWhenExpression
es. new Boolean($F{field1}==null || $F{field2}==null || $F{field3}==null)
Example
<frame>
<reportElement positionType="Float" x="13" y="12" width="287" height="35" isRemoveLineWhenBlank="true" uuid="ee6707a4-bcb4-402b-95c0-6f4613747d2f">
<printWhenExpression><![CDATA[new Boolean($F{field1}==null || $F{field2}==null || $F{field3}==null)]]></printWhenExpression>
.. your textFields ...
</reportElement>
</frame>
NOTE: for compatibility with jasper report 3 and jdk 1.4 I have used new Boolean(...) this is not necessary in jasper report 5,6
Upvotes: 3