How to import HTML content (No Styles) into Text Field? - jasper-reports

I have some information in an HTML file. There are more HTML files, which all contains strings which depends on an input parameter(bold).
as an Example:
file_**01**.html --> contains: "Bob Bakers"
file_**02**.html --> contains: "Alice Armstrong"
The HTML files are stored in the repository and I would like to import/load the content of one of these files into a textfield. With some images I've done something similia like:
"repo:/home/res/images/" + $F{html_param} + ".html"
And depending on the parameter, it loads the right image. I need to do the same with the strings from the HTML files.
If it is not possible to do this with an Text Field, are there other options to import/load the content and show them in the report?

You can do something like this
<textField>
<reportElement .../>
<textElement markup="html"/>
<textFieldExpression>new String(net.sf.jasperreports.repo.RepositoryUtil.getInstance($P{JASPER_REPORTS_CONTEXT}).getBytesFromLocation("repo:/home/res/images/" + $F{html_param} + ".html"), java.nio.charset.StandardCharsets.UTF_8)</textFieldExpression>
</textField>
This would work as long as the html file structure is simple, otherwise markup="html" might fail to interpret the document.

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.

Ireport to CSV is appending an  to all currency cells

It seems when I run my report and export it to Excel .CSV all my currency values seem to append an  at the beginning.
My XML is as follows:
</textField>
<textField isStretchWithOverflow="true" pattern="£ #,##0.00" isBlankWhenNull="false">
<reportElement x="760" y="0" width="100" height="20" uuid="cba1b317-f85f-4b3b-9549-66389c451cfa"/>
<textElement>
<font size="10" pdfEncoding="Cp1252"/>
</textElement>
<textFieldExpression><![CDATA[$F{ItemRateBilled}]]></textFieldExpression>
I've changed the pattern numerous times to no avail. It seems the following is the issue however, I can't figure out how to resolve:
The pound symbol is Unicode codepoint 163. If it's written to a UTF-8 encoded file, it's written as the sequence 194, 163. When the file is imported in Excel, a different encoding is assumed, probably the default ANSI code page. Therefore, the sequence 194, 163 is not interpreted as one Unicode codepoint. Instead, it's interpreted as the sequence  and £.
So, either make Excel interpret the file as a UTF-8 encoded file, or write the file yourself by specifying the System.Text.Encoding.Default codepage.
Current error as a CSV:
This is not an issue originating from Jasper but from Excel.
If you take a look into the file with a program able to interpret UTF-8 (like Notepad++), this should not happen at all.
CSV files exported from Jasper should not be opened directly. Instead, Excel should be opened and in the data tab the import from file function should be used.
When importing the CSV file, change the input encoding to UTF-8. Then Excel will interpret the file correctly.

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.

Jasper Studio : Convert 24 format time to 12 format

How can i convert 24 format time to 12 format in jasper studio via expressions?
i have string like below
"19:00" and i want to convert it to "07:00 PM"
Do the same as in java see DateTimeFormatter as you can see the correct format is hh:mm a
The best solution in jasper-reports is using pattern attribute on the textField tag since it will conserve the time object if you export to for example excel
<textField pattern="hh:mm a">
<reportElement x="0" y="0" width="100" height="20"uuid="b8baea82-84c4-42fa-bccd-62abc96eeded"/>
<textElement verticalAlignment="Middle"/>
<textFieldExpression><![CDATA[$F{theTime}]]></textFieldExpression>
</textField>
Another solution is using the SimpleDateFormat in textFieldExpression
<textFieldExpression><![CDATA[new SimpleDateFormat("hh:mm a").format($F{theTime})]]></textFieldExpression>
NOTE: $F{theTime} needs to be of the class java.util.Date or one of its extensions java.sql.TimeStamp,java.sql.Date,java.sql.Time
Use the Pattern property..
Click on the Text Field you want to format.
Right click, click Show Properties.
Click on the Text Field tab.
Look for Pattern and click on the square with the 3 dots (...).
Choose the type of pattern you want to format your Text Field to. You can type a new format yourself if you are not satisfied with the pre-defined ones.
Same as above can be achieved by going to Advanced Properties and looking for the Pattern property.
Hope it helped. Cheers :)

Jasper Report truncates text before filling the whole text field

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"