2013-11-21 20 views
5

Sto riscontrando un problema di carattere con il mio report jasper in cui uno dei miei campi di testo più prolissi (l'ultimo in una banda di dettagli) viene interrotto nell'anteprima PDF e PDF ma non nel Anteprima interna.campo di testo jasper che viene troncato

ad es.

Anteprima interno:

Here is a fake description. It fits 
perfectly, fitting just in the lines. 

PDF Preview

Here is a fake description. It 
fits perfectly, fitting just in the 

Jasper è (apparentemente) utilizzando qualche algoritmo per capire quanto alto il campo dovrebbe essere, il mio testo è appena il montaggio, poi, quando il PDF è generato il testo avvolge e scompare sulla riga successiva.

Non sto utilizzando font personalizzati (solo il predefinito/implicito "SansSerif") e non si usano stili personalizzati oltre a grassetto/corsivo. Questo comportamento è dimostrabile sia nell'anteprima PDF di iReport sia nel PDF generato dal mio codice su Windows e MacOS (probabilmente Linux ha ancora il problema, ma il mio testo di esempio non mostrava il comportamento su Ubuntu).

Ho suonato con Stretch Type, Position Type e Stretch con Overflow, nonché spostato questo campo di testo sulla sua banda ma nessuno risolve questo bug (e molti di essi ne causano altri).

Ho avuto fortuna cambiando il font con gli altri font incorporati, ma questo mi dice solo che il mio esempio non funziona per quel particolare font, non che ho risolto il bug.

Qualsiasi consiglio sarebbe molto apprezzato.

Aggiornamento 1

ho provato l'aggiornamento da Jasper Reports 5.2.0 a 6.2.0 e 4.0.0 Jasper font a 6.0.0 ... nessun cambiamento.

Aggiornamento 2

provato a modificare il mio src/main/resources/jasperreports_extension.properties e aggiungendo

net.sf.jasperreports.export.pdf.force.linebreak.policy=true 

... nessun cambiamento.

(Da notare anche se nel mio caso d'uso Non posso usare isStretchWithOverflow="true", quindi questo potrebbe essere il motivo per cui non ha funzionato.)

Update 3

ho provato incorporare il font editing src/main/resources/jasperreports_extension.xml e aggiungendo:

net.sf.jasperreports.extension.registry.factory.fonts=net.sf.jasperreports.engine.fonts.SimpleFontExtensionsRegistryFactory 
net.sf.jasperreports.extension.simple.font.families.arialFontFamily=fonts/customFontFamilies.xml 

customFontFamilies.xml:

<?xml version="1.0" encoding="UTF-8"?> 
<fontFamilies> 
<fontFamily name="ArialEM"> 
    <normal><![CDATA[fonts/Arial/Arial.ttf]]></normal> 
    <bold><![CDATA[fonts/Arial/Arial Bold.ttf]]></bold> 
    <italic><![CDATA[fonts/Arial/Arial Italic.ttf]]></italic> 
    <boldItalic><![CDATA[fonts/Arial/Arial Bold Italic.ttf]]>/boldItalic> 
    <pdfEncoding><![CDATA[Cp1252]]></pdfEncoding> 
    <pdfEmbedded><![CDATA[true]]></pdfEmbedded> 
</fontFamily> 
</fontFamilies> 

... nessun dado. (Anche se questo ha aiutato con un problema in cui il renderer PDF di Firefox non avrebbe reso i font in grassetto.)

Update 4

Ho notato che in tutti i provini casi ho potuto creare che la prima linea era vuota, così ho cambiato la particolare cella di essere verticale allineare superiore, che ha funzionato, ma ovviamente ha reso quella cella un disallineamento quando non c'era molto testo in esso.

Rottamato che come soluzione, ma potrebbe funzionare per qualcuno.

Update 5

A questo punto speriamo che sia chiaro che ho provato le soluzioni "reali" e li guardai tutti muoiono di una morte orribile. Quindi, entriamo nel regno della soluzione di hacking. Per prima cosa ho provato la soluzione di @ wmmci, ma la sua risposta cambia l'altezza della mia casella (poiché viene calcolata dinamicamente da Dynamic Jasper). Ho notato che tutti gli esempi che potevo creare includevano periodi di parole all'interno della stringa, ad es. "Foo ... bar". Potrebbe non essere il tuo caso, ma era per me. Così ho iniettato uno "spazio per i capelli" (&#8202;) dopo gli spazi all'interno della parola.

Questa ovviamente non è una soluzione reale, solo un intervento temporaneo fino a quando non sono in grado di trovare altri esempi del bug.

Update 6

Ho controllato e io non avere @ problema di KarolisŠarapnickis con l'printOrder. Ah bene. Io soldierò su. ;-)

+0

Hai trovato una soluzione per questo problema? Ho lo stesso problema ed è così fastidioso ... sembra che Jasper non possa calcolare il numero massimo di caratteri se è un dato di input in grassetto e quindi taglia il residuo all'esportazione in PDF – Jesus

+0

Per riferimento futuro, gli utenti con questo problema dovresti controllare che [font-extensions] (https://stackoverflow.com/documentation/jasper-reports/5773/font-extensions#t=201705312048127084075) siano usati correttamente –

risposta

7

Ho avuto lo stesso problema e ho provato tutte le possibili configurazioni - non ha funzionato. Alla fine, come soluzione, ho aggiunto un nuovo carattere di linea al campo e ha funzionato. Qualcosa di simile: $ F {descrizione} + "\ n"

+0

che sia un bel trucco. ha funzionato per me :) –

+0

_Any_ textarea espandibile avrà questo problema, quindi è necessario aggiungere il ritorno a capo a _everything_. Inoltre, influenzerà anche le altezze del campo. Ancora ... È una soluzione praticabile per i disperati (che presumibilmente sono). – inanutshellus

+0

ha funzionato anche per me. Nel nostro caso la jasperprint è generata su un server Linux e visualizzata su un client Windows. La mia ipotesi è che usi font di Linux di dimensioni leggermente inferiori per calcolare lo spazio richiesto, e quindi quando lo si mostra su Windows, il carattere di Windows non si adatta. – tobi42

0

Gli stessi problemi con il testo venivano troncati e nulla sembrava funzionare. per fortuna ho scoperto che il mio elemento principale XML ha avuto il seguente attributo:

printOrder="Horizontal" 

Rimozione ha risolto i miei problemi.

+0

Nel mio caso, ho ancora questo problema ma non ho 'printOrder =" Horizontal "' nel nodo root del mio file JRXML. Speriamo che questo aiuti qualcuno là fuori, comunque. – inanutshellus

0

Nel mio caso, ho avuto un testo molto lungo in un singolo campo di testo. L'aggiunta di un'interruzione di riga risolverebbe il problema per alcune celle, ma non per quelle molto lunghe che attraversavano le pagine. Per risolverlo definitivamente, ho dovuto impostare il campo di testo per allungare a RELATIVE_TO_BAND_HEIGHT. In precedenza, era impostato su RELATIVE_TO_TALLEST_OBJECT. Suppongo che RELATIVE_TO_TALLEST_OBJECT sia stato calcolato in modo errato (inferiore al necessario).

Questo ha fatto il trucco:

textField.setStretchType(StretchTypeEnum.RELATIVE_TO_BAND_HEIGHT); 
+0

L'ho fatto ma non ha funzionato – Jesus

Problemi correlati