Quando si desidera visualizzare un contenuto HTML all'interno di un report PDF, TIBCO JasperSoft Studio
offre due possibilità:
1- impostare Markup/HTML in fase di design del template .jrxml;
2- utilizzare HTMLComponent.
La soluzione 1, non richiede di importare librerie aggiuntive e quindi è molto veloce, ma l'insieme dei tag
HTML che vengono convertiti correttamente in PDF è molto ridotto, ed in particolare tag di uso molto
comune come <strong>, <style>, <em> e <img> vengono ignorati.
La soluzione 2 è un poco più articolata, ma offre l'indubbio vantaggio di convertire correttamente un
numero maggiore di tag HTML.
HTMLComponent è una libreria prodotta da JasperSoft, che è stata ed è ancora ampiamente utilizzata,
come testimoniano i numerosi thread di discussione reperibili online.
Al momento, però, non viene distribuita dai repository Maven per il download e non è disponibile sulla
palette degli strumenti di TIBCO JasperSoft Studio 6.3.1.final.
Tuttavia JasperSoft Studio deve continuare a gestirla per ragioni di retrocompatibilità, e quindi, di fatto
quando nel template .jrxml trova questo codice:
<band height="742">
<componentElement>
<reportElement x="0" y="0" width="555" height="742"/>
<hc:html xmlns:hc="http://jasperreports.sourceforge.net/htmlcomponent"
xsi:schemaLocation="http://jasperreports.sourceforge.net/htmlcomponent
http://jasperreports.sourceforge.net/xsd/htmlcomponent.xsd"
scaleType="RetainShape" horizontalAlign="Left" verticalAlign="Top">
<hc:htmlContentExpression><![CDATA[$P{myHtmlContent}]]></hc:htmlContentExpression>
</hc:html>
</componentElement>
</band>
JasperSoft Studio è in grado di mostrare tutte le properties dell 'HTMLComponent in formato visuale e
consente di modificarle in modo assistito.
In aggiunta, le versioni più recenti di JasperSoft Studio, come la 6.3.1 in questione, consentono di utilizzare
HTMLComponent all'interno del tool di palette 'Generic Element' indicando i seguenti valori.
Generic Type Name: htmlelement
Generic Type Namespace: http://jasperreports.sourceforge.net/jasperreports/html
In questo modo tutte le proprietà e i parametri possono essere visualizzate all'interno del pannello di
properties del 'Generic Element', anche se la loro modifica è meno assistita che nel caso precedente,
trattandosi di un tool generico.
Il risultato del nostro operato sarà, ad esempio, il seguente frammento sul template .jrxml.
<band height="742">
<genericElement> <reportElement x="0" y="0" width="555" height="742"/>
<genericElementType namespace="http://jasperreports.sourceforge.net/jasperreports/html"
name="htmlelement"/>
<genericElementParameter name="htmlContent">
<valueExpression><![CDATA[$P{myHtmlContent}]]></valueExpression>
</genericElementParameter>
<genericElementParameter name="scaleType">
<valueExpression><![CDATA["RetainShape"]]></valueExpression>
</genericElementParameter>
<genericElementParameter name="verticalAlign">
<valueExpression><![CDATA["Top"]]></valueExpression>
</genericElementParameter>
<genericElementParameter name="horizontalAlign">
<valueExpression><![CDATA["Left"]]></valueExpression>
</genericElementParameter>
</genericElement>
</band>
Comunque la si utilizzi, la libreria HTMLComponent, necessita al momento di essere configurata su Liferay
mediante i seguenti passaggi.
Queste istruzioni si riferiscono al progetto in cui è già installato e funzionante JasperReport, cioè in cui sono
state dichiarate le dipendenze dalle librerie di JasperReport.
1- Copiare nella cartella src/main/resources/lib tutti i jar contenuti in nella cartella
Jaspersoft Studio-6.3.1.final\configuration\org.eclipse.osgi\38\0\.cp\lib
2- Aggiungere al build.gradle le dipendenze
dependencies {
compileInclude name: 'htmlcomponent'
compileInclude name: 'core-renderer'
compileInclude name: 'jtidy-r938'
//oppure, se si preferisce, 'jtidy' può essere scaricato dai repository Maven:
//compileInclude group: 'net.sf.jtidy', name: 'jtidy', version: 'r938'
}
3- Indicare sul build.gradle la locazione in cui si trovano queste librerie
repositories {
flatDir {
dirs 'src/main/resources/lib'
}
}
4- Aggiungere queste esclusioni al file bnd.bnd
!org.xhtmlrenderer.test,\
!org.xhtmlrenderer.test.*,\
A questo punto si è pronti per produrre i PDF partendo da un contenuto HTML.
Va ricordato che tutto il contenuto HTML viene trasformato da questo componente in un' unica immagine,
che pertanto potrebbe essere visualizzata diversamente rispetto ad un browser HTML e a seconda del
formato di esportazione utilizzato.