Jaspser Reports Detail Dyanmic Column Width - jasper-reports

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.

Related

Make Height of Field Dynamic?

I am trying to get a field in my parent report to adjust its height dynamically based on the height of a SubReport in the same row. The SubReport could return anywhere from 1 to about 20 rows, and I want the field in the parent report to adjust based on the height of the SubReport.
Further, and I am pretty sure this is not possible, can I center the text in this field vertically? I think CR only allows for horizontal alignment.
This is in CR 2013 sp7
Neither of these are supported by Crystal. Once the report data is generated and ready to display, vertical placement is largely automatic.
In theory, auto-generating line breaks in your field could push things down and simulate vertical alignment, but it would require extensive use of shared variables. Perhaps it's time to consider a different design for your report?

Vertical & Horizontal data arrangement in same page of Crystal Reports

I am importing data from a single data set in my crystal reports. I have just a single column table in my report. I want to arrange some data vertically say 10 rows of the table (In two vertical lines) and some data horizontally say next 10 rows of the same table (In two horizontal lines). I have managed to do the first part that is arranged the vertical lines side by side (By using the option Format With Multiple Columns in the section expert. I am facing difficulty in arranging horizontal lines on the same page (side by side of vertical lines). Any hints how can I achieve this. Any help will be appreciated.
Note: I have tried the subreports method, but was unsuccessful. The subreports shows one row per page for horizontal data and vertical data also limits then one row per page when I use subreports.
Image also attached for reference
Make sure to choose the correct printing direction. Tick `Across then Down':
Go to Section Expert.
Select the section you want to make it multiple column under "Sections" (usually it's 'Details')
Make sure you have "Format with Multiple Columns" is checked under Common Tab
Now you should see Layout Tab on the top right corner, select that.
Set Width to 2" or whatever you want under Detail Size.
Then under "Printing Direction" set "Across then Down" option.
Click OK and you are all set :)

Detail band resize dynamically vertically when textfield is NULL

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.

Create a Crystal Report cross-tab 'header' label

I'd like to create a 'header' label that 1) is centered over the cross-tab and 2) grows with it. Unfortunately, CR 2008 (or earlier for that matter) doesn't have this feature.
In image (below), I've added a text field above the cross-tab, but I can't think of a way to get it to grow/shrink (horizontally) with it.
If you're able to calculate, say by a summary function, the number of columns you will have then you can do this:
In your crosstab, check to see the width of your columns. The columns should be set widths. Edit: The crosstab adds some padding, so you will have to figure out the column width by measuring in Crystal with another field and eyeballing until it's close enough to work
Right-click on your label, and hit "Size & Position".
Add a new formula for the "Width". The X,Y positions should stay the same.
Use the summary function (You could create a SQL Expression or formula that only shows the month/year of your date fields and then distinctCount() them) to find out how many columns you will have multiplied by the width of each column. This will take some trial and error for sure, but I don't see why it wouldn't work.

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.