Detail band resize dynamically vertically when textfield is NULL - jasper-reports

I have a JasperReports report build with iReport. I have the normal Detail band but below i have a textField named observations there is sometimes the Observations textField is empty or NULL. I have put both inner components namely textfields, lines into frames something like.
I also set using Print When Expression the below frame the one who holds the Observations textField to appear only when there is data on it this is working very good but the space holds by the frame is still on the Detail and we are losing some space and it's kind annoyng to see this blank space.
Is it possible for the report to "delete" the idle space hold it by the hidden frame?
My report's design:
The generated result (PDF file):

I don't think it's possible to alter the height of a band depending on its content but you can actually have multiple detail bands. So add a new one, move your observation text field into it and set the print when expression of the second band.

Related

Vertically center report footer in remaining space on page

Is it possible to vertically center my report footer in the leftover space at the end of the page? The size of this leftover section depends on number of data rows.
There's no easy way to vertically center things in Crystal. Frustrating as it may be, there's no Vertical Alignment property on most things, and the Size/Position of things is static except when other objects push them around to make room for themselves.
However there is a ridiculously silly hack you can do to make this work.
Write a formula, let's call it SillySpaceFormula, that uses a loop to generate a certain number of return characters. Based on the number of records on this page, SillySpaceFormula will grow or shrink inversely. Set Silly's font size to be half the size of your details section. Then place this formula in a section above the orange-outlined box and set "Can Grow" to True.
If you do this just right, SillySpaceFormula will grow by one line when a record is removed and shrink by one line when a record is added. Because the formula field Can Grow, the orange box in your screenshots will be moved up and down automatically.

Jaspser Reports Detail Dyanmic Column Width

I have a JasperReport file with the basic header/detail/footer bands. In my Details, I have a Column Header row in a Grid Layout and a Detail Row, also in a GridLayout. I'm having a few issues with this Detail section. I have 3 columns that I'm hiding with an expression using printWhenExpression=$P{Exp1}. This works to hide the field, but the rest of the columns in the detail section don't adjust to this. So I'm left with a giant blank column in the middle of my detail section.
I'm coming from Crystal Reports where I could just suppress fields and the CR would adjust widths as necessary. I can't seem to find anything to do the same with JasperReports, which doesn't make much sense since I would expect a GridLayout to try and fill up the space as needed. So is there any way to have a table/grid like layout that will adjust column widths to fill the available space when a field is hidden.

Hide Detail Band in jasper report

Data that we get from data source is not shown in detail band. But make some processing for each of records and processing result is shown in Group footer.
So I cannot remove detail band, as it is the only place for processing individual record. But I want to hide it, making invisible.
If I use printWhenExpression, it causes not only hiding the detail band but also no processing is done for records.
What I want is just hide(making invisible and do not make any blank) but processing is done for each iteration. If possible, may I know how to do it.
Remove all elements (static text, text field and so on) from detail band and set height = 0 px at detail band property
You can either set its height to 0 px in the properties section on the right side
OR
You can Right click > delete band. (The band can later be added back if needed).

How to wrap a detail band in Jasper Reports

I have a detail band with potentially a lot of text fields in it. It can get too wide to fit on a page. The result is that it just runs off the edge of the page and you can't see it all. I'd like the detail band to wrap around to another line. Is there any way to do this?
My detail band is built dynamically in the code and the number of fields can vary. I tried manually placing the overflowing fields lower in the band by setting their y values, but then if the text in the fields overflows into two lines, my height calculations are off and the results get really messed up.
So is there any way to constrain the band to fit on the page?
Unfortunatelly, the strech types in jasper only works between bands, not within the band.
You can't (even manualy) create a jrxml which will cause a lower element in a band be correctly possitioned when an upper element overflows.
You will need to create more than one detail band. In iReport, you use 'Add another detail band' (on the detail band context-menu). Dynamically, it would look something like:
JRDesignSection detailSection = (JRDesignSection)design.getDetailSection();
JRDesignBand detail2 = new JRDesignBand();
detailSection.addBand(detail2);
Perhaps on your reportElement for each field in the band you need to set the attribute stretchType="RelativeToTallestObject".
<reportElement stretchType="RelativeToTallestObject" ...>
I'm pretty sure that's what works for me.

How to increase Detail band height dynamically

My requirement is to increase the Detail band height dynamically when the text field has more data. Are there any settings to increase to it? I am using one textField in the Detail band when it has more information (words), it is displaying only some information.
i.e the words are being cut off. Depending on the detail band height the words are displaying. I would like to increase the band height dynamically when the text field has more data.
First select your field and set following properties (third one is most important):
Position type: float
Stretch type: relative to tallest object
Stretch with overflow: true (checked)
Go to Report level properties. Advanced - Set the Column count and then Print order as Horizontal
Try setting the text field and surround object to Position Type Float in the object's properties.
This should let the report expand as the text field grows.