Jasper Report truncates text before filling the whole text field - jasper-reports

I'm having a problem with my PDF report where a String in a text field is truncated before filling the text field. The amount of missing characters (5-6) would not be enough to go over the end of the textField.
I added the text.truncate.at.char property to the report element but the String is still truncated (after displaying some more characters than before).
I also checked if there are other report elements blocking the end of the text field, but there are none.
Lastly I tried a potential fix I found and added "\n" to the end of the line, but that also did not help.
In iReport Designer the whole String is displayed.
PDF report
iReport Designer Preview
Does anyone know how to make Jasper Reports use the whole space in the text field?
PS: Allowing the text to overflow to the next line is not possible due to customer wishes.
I'm using Jasper Reports 5.5.2.
Edit:
The textField is part of a detail band in a subreport. I'm not allowed to share the whole .jrxml, but this is the code for the textField:
<textField>
<reportElement style="Unicode" mode="Opaque" x="0" y="2" width="467" height="17" forecolor="#FFFFFF" backcolor="#00007F" uuid="e810d7a4-6802-4620-af2f-4c385a9e80a6">
<property name="net.sf.jasperreports.text.truncate.at.char" value="true"/>
</reportElement>
<textElement verticalAlignment="Middle" markup="none">
<font size="10" isBold="true"/>
</textElement>
<textFieldExpression><![CDATA[" More Details - "+$F{Description} + " ("+$F{Id}+")"]]></textFieldExpression>
</textField>
The description is of variable length, the Id is a GUID. In this case there should still be more than enough space in the textField to display the whole GUID.
Here is another screenshot with isStretchWithOverflow="true":
The text is now displayed completely in the first line but the textField is larger which is not accepted by the customer.

Why is it different in pdf and iReport designer?
This is because iText (the library creating your pdf) is doing its "best effort" to render the font you have indicated in jrxml and its not good enough (it is using another font that is bigger...).
To avoid these problems you need to use font extensions and check your settings on style and textElement
Checklist to rendered font correctly in pdf
How to add font extension using iReport
OP solved as in comment:
Font extension installed, removing isBold="true" on textElement, since the style set to textElement had isBold="false"

Related

Detail's text field seems to have a characters limit and stops stretching

I have four reports that are basically different formats of the same report and the following problem happens with three of them. I have a text field in the Detail's band that is marked as Stretch with Overflow. The problem is that it seems that it has some kind of characters limit, because with the following text (110 characters):
MAD.ESP.TAUARI(COURATARI GUIANENSIS AUBL.)SERRADA EM RIPA.KD.FAS.FSC 100% MED.19,1MMX38,1MMX2438,4MM DE COMP.
It's only printing:
MAD.ESP.TAUARI(COURATARI GUIANENSIS AUBL.)SERRADA EM RIPA.KD.FAS.FSC 100% MED.19,1MMX38,1MMX2438,4MM DE
As shown in the screen shots:
It's woth noting that when using the "preview" of the JasperStudio, the whole text appears normally for all of them.
Here's the text field's code of one of them. They're basically the same, changing the width, height and position.
<textField isStretchWithOverflow="true">
<reportElement x="26" y="0" width="76" height="10">
</reportElement>
<textElement textAlignment="Center" verticalAlignment="Top">
<font fontName="Arial" size="8"/>
</textElement>
<textFieldExpression><![CDATA[$F{descricaoProduto}]]></textFieldExpression>
</textField>
I'm using the 6.2.2 version of JasperReports.
EDIT:
I created a gist with a minimal version of the report that the problem happens:
Sample
I'm exporting it to PDF and using Arial as the font (I added a JAR with the Arial font).
Set the net.sf.jasperreports.export.pdf.force.linebreak.policy property to true (in jasperreports.properties or programmatically). See http://jasperreports.sourceforge.net/config.reference.html#net.sf.jasperreports.export.pdf.force.linebreak.policy
The property instructs the PDF exporter to use java.text.BreakIterator to determine where line breaks can occur in texts, which ensures that the line breaks at PDF export time match the breaks uses when the text was measured at report fill time. As a note, this might come with some impact on PDF exporting performance, but it shouldn't be dramatic.

Japanese characters not printing in pdf [duplicate]

I've hardcoded a Text field with the value
":$£Ω€απ⅔:"
to test if these characters will show in PDF
But it only prints as
:$£€:
I've tried changing the font to "Symbol" but that does not do the trick.
Note: I'm using iReport 5.5
I tried your characters using font-extensions in iReport, These are the steps that I took
Download (or use one on your pc) your desired ttf font (it need to support the characters), I used dejavu-serif.
Install the font in iReport or in Jasper soft studio (click links to understand how)
I used iReport 5.6 and did set the PDF-Encoding: Idenity-H (unicode with horizontal writing) and embedded the font in pdf. This was the code of my textField
<textField>
<reportElement x="8" y="15" width="100" height="20" uuid="41dc1200-091f-4799-a1d2-4622f88a0e84"/>
<textElement>
<font fontName="DejaVu Serif" size="13"/>
</textElement>
<textFieldExpression><![CDATA[":$£Ω€απ⅔:"]]></textFieldExpression>
</textField>
Export the font extension (this creates a .jar)
Add the jar to your classpath.
Export to pdf and enjoy the result.
This is an example of how to use any arbitrary font, if you like to
use DejaVu Sans or DejaVu Serif you can just include the jasper
report fonts library in classpath, hence these font are already included and mapped in library
I had posted a similar question and the above technique solved my problem, until one fine day I restarted the JasperServer context. I was now getting "PDF encoding not found" error when I tried to export the report to pdf.
To solve this problem I had to copy the iText-Asian.jar and Font-extension.jar in the lib folder of the jasperserver context.
"jasperserver/WEB-INF/lib". Once done restart the context and problem solved.
Hope it helps someone.

How can I display "$£Ω€απ⅔" in Jasperserver PDF using iReport?

I've hardcoded a Text field with the value
":$£Ω€απ⅔:"
to test if these characters will show in PDF
But it only prints as
:$£€:
I've tried changing the font to "Symbol" but that does not do the trick.
Note: I'm using iReport 5.5
I tried your characters using font-extensions in iReport, These are the steps that I took
Download (or use one on your pc) your desired ttf font (it need to support the characters), I used dejavu-serif.
Install the font in iReport or in Jasper soft studio (click links to understand how)
I used iReport 5.6 and did set the PDF-Encoding: Idenity-H (unicode with horizontal writing) and embedded the font in pdf. This was the code of my textField
<textField>
<reportElement x="8" y="15" width="100" height="20" uuid="41dc1200-091f-4799-a1d2-4622f88a0e84"/>
<textElement>
<font fontName="DejaVu Serif" size="13"/>
</textElement>
<textFieldExpression><![CDATA[":$£Ω€απ⅔:"]]></textFieldExpression>
</textField>
Export the font extension (this creates a .jar)
Add the jar to your classpath.
Export to pdf and enjoy the result.
This is an example of how to use any arbitrary font, if you like to
use DejaVu Sans or DejaVu Serif you can just include the jasper
report fonts library in classpath, hence these font are already included and mapped in library
I had posted a similar question and the above technique solved my problem, until one fine day I restarted the JasperServer context. I was now getting "PDF encoding not found" error when I tried to export the report to pdf.
To solve this problem I had to copy the iText-Asian.jar and Font-extension.jar in the lib folder of the jasperserver context.
"jasperserver/WEB-INF/lib". Once done restart the context and problem solved.
Hope it helps someone.

Exclude column header (but keep first) from a Table component on CSV export in Jasper Reports

I know how to exclude column header from a JR report on CSV report.
I need to know how to exclude column header (but keep first) from a Table component on CSV report.
If this is not possible, any suggestion other than ignore pagination is highly appreciated.
By using this property you can keep your first header in your csv export.
net.sf.jasperreports.export.csv.exclude.origin.keep.first.band.3=columnHeader
net.sf.jasperreports.export.csv.exclude.origin.keep.first.report.3=*
You can use any another name if you already using 3 in your jrxml.
One possible solution is to add a key to each of the column Header report Element. (In this case, key="col_header" in the reportElement tag.)
<jr:columnHeader style="table_CH" height="50" rowSpan="1">
<staticText>
<reportElement uuid="0c6dfd58-9df2-4e00-b79e-43a457c7b42e" key="col_header" x="0" y="0" width="90" height="50"/>
<textElement textAlignment="Center" verticalAlignment="Middle">
<font size="12"/>
</textElement>
<text><![CDATA[ColumnName]]></text>
</staticText>
</jr:columnHeader>
Next, exclude the key when exporting to CSV. (Add this property to the report properties list).
<property name="net.sf.jasperreports.export.csv.exclude.key.col_header"/>
Voila, the column headers are removed in CSV export.
The downside of this approach:
It removes all the column Headers. (net.sf.jasperreports.export.csv.exclude.key.keep.first.col_header does not work).
Adding Key to each column Header is quite laborious.
If it's possible, just move all column headers to the title band and remove the column headers band itself, and it will only print once in your exported CSV.

different number format in iReport and Jasper Server

i created report in iReport, where is text field with format:
new DecimalFormat("#,##0.00").format($F{NUMBER}) + " €"
In iReport result is 1 234,56 €, which is OK. I am in Slovakia and this is ordinary format here.
In Jasper Server is result 1,234.56 € which is not OK.
Other question: There is still Sk (Slovak Crown) set for Slovakia. Is it possible to set it for EUR ?
Could you help me, what to set where ?
Thanks
If you hard-code the format to use comma for the thousands separator, it's not possible that iReport would ignore this. It sounds like you have not done what you think.
But it seems likely that you need to set the JasperReports Server to use a different locale. You could edit this file:
WEB-INF/applicationContext-security.xml
You'll find the locale section. Add what you need for Slovakia. Then you can choose this locale on the login page.
Or it might be helpful to set the locale in Tomcat's startup script (or whatever app server you are using). These Java parameters might solve your problem (of course you won't want en_US... but those are the parameters):
java -Duser.language=en -Duser.region=US
I have an older version of jasperserver deployed in one of my clients and upgrading it would be a bit of a pain. I'm experiencing the same thing with iReport 4.1.1. My locale is pt_BR and I didn't really want to change my server locale.
I've noticed that iReport is smart (or dumb) enough to not add the class attribute to the textFieldExpression class (I am guessing it guesses from the variable/field type). Jasperserver (at least the version I'm using anyway), on the other hand, does not apply the pattern to numbers if you don't specify the class for that expression.
In other words: iReport generates this markup and renders it as expected:
<textField pattern="###,###,##0.00" isBlankWhenNull="true">
<reportElement mode="Transparent" x="1293" y="0" width="92" height="20"/>
<textElement textAlignment="Right" verticalAlignment="Middle">
<font isBold="true"/>
</textElement>
<textFieldExpression><![CDATA[$V{my_var}]]></textFieldExpression>
</textField>
You can assume that my_var is a BigDecimal. This field does not get rendered correctly in the server, as it simply ignores the pattern (maybe because it assumes all fields are Strings?) unless you specify the expression class for the textFieldExpression:
<textField pattern="###,###,##0.00" isBlankWhenNull="true">
<reportElement mode="Transparent" x="1293" y="0" width="92" height="20"/>
<textElement textAlignment="Right" verticalAlignment="Middle">
<font isBold="true"/>
</textElement>
<textFieldExpression class="java.math.BigDecimal"><![CDATA[$V{my_var}]]></textFieldExpression>
</textField>
Note the class="java.math.BigDecimal" in the second last line. It sucks that I had to manually edit the jrxml file, but at least Jasperserver renders my report properly.