2017-01-09 1 views
1

Wie kann ich alle Überlauf-/Abschneidetexte in einem Jasper-Bericht automatisch erkennen?Wie kann ich Überläufe in Jasper-Berichten feststellen?

Mein Anwendungsfall: Ich habe einen mehrsprachigen Bericht. Wenn eine Übersetzung geändert wird, möchte ich sicherstellen, dass der nächste (möglicherweise längere Text) nicht abgeschnitten wird, ohne jede Änderung zu berücksichtigen.

Der Check sollte für alle Elemente funktionieren, auch für diejenigen, die wachsen. Stellen Sie sich vor, ich habe ein Textfeld, das zu wachsen versucht und über den Seitenrand hinausreicht. Vielleicht wäre eine bessere Beschreibung: Ich möchte wissen, wann die Engine der Seite Text hinzufügt, den der Benutzer nicht sehen kann, egal aus welchem ​​Grund.

+0

Versuchen Sie, die Eigenschaft stretch mit Überlauf auf true zu setzen. –

+0

@AaronDigulla Brauchen Sie eine Art "Flagge"? Ist es in Ordnung, die Höhe von textField im automatischen Modus (per Engine) zu erhöhen? –

+0

@FahadAnjum Ich möchte wissen, wenn der Text nicht passt. Ich möchte nicht, dass die Elemente wachsen. –

Antwort

0

Ich habe eine Problemumgehung gefunden: Wenn Text überläuft, lässt JasperReports es in der PDF (anstatt auf Clipping beruhen).

Sie können ein Framwork wie PDFBox verwenden, um den Text von der Seite abzurufen. In einem Komponententest können Sie dann prüfen, ob der Volltext sichtbar ist.

Dies funktioniert gut mit statischen Texten.

Ich habe eine gist with some demo code erstellt.

Dynamische Texte sind schwieriger, weil sie in der Produktion überlaufen können. Sie können den gleichen Ansatz verwenden, um zu prüfen, ob der Text es auf der Seite unverändert gemacht hat, aber es ist ein bisschen langsam.

Eine schnellere Lösung für Einzeilentexte ist es, die durchschnittliche Zeichenbreite zu verwenden (Die PDFont class hat dafür eine Methode getAverageFontWidth()).

Die durchschnittliche Anzahl an Zeichen, die in die Box passen, ist boxWidth/averageCharWidth. Vergleichen Sie die Zeichenfolgenlänge mit diesem Wert. Wenn es weniger ist, dann bist du höchstwahrscheinlich sicher. Wenn es länger ist, können Sie zumindest eine Warnung mit der Zeichenfolge protokollieren.

Nach einiger Zeit können Sie alle diese Protokolle sammeln und versuchen, einen besseren Weg herauszufinden, welche Texte passen und welche nicht.

Die ideale Lösung wäre eine API, die Schriftart, Stil und Text an JasperReports übergibt und die Breite zurückgibt.

Verwandte Themen