Viele Menschen, die mit JasperReports arbeiten, machen sich wahrscheinlich gar keine Gedanken über Unicode. Sie wählen für die Formularfelder und den statischen Text ganz einfach eine Schriftart, die ihnen gefällt, führen den Report aus und das wars. Aber wenn Ihr Report Zeichen enthält, die in dem default non-unicode Zeichensatz Ihres Betriebssystems nicht enthalten sind, werden Sie eine Überraschung erleben. Die Druckvorschau und der Druck werden zwar ganz korrekt dargestellt, das exportierte PDF aber nicht. Manche Zeichen werden fehlen.
Ich hatte selber dieses Problem. Und das, was ich im Internet fand, war ziemlich verwirrend. Ich fand alles Mögliche von "dies ist ein Bug in der darunterliegenden itext Library" bis zu Lösungen mit überholten Funktionen von JasperReports, die sehr kompliziert aussahen.
Aber die richtige Lösung ist zum Glück sehr einfach...
Wählen Sie für das gewünschte Feld die Schrifart "DejaVu Sans". Je nach dem, welche Zeichen verwendet wurden, werden sie nun wahrscheinlich auch in der PDF Datei sichtbar.
(Die Fontfamilie DejaVu ist etwas begrenzt, aber Sie können zum Beispiel kyrillische Zeichen damit exportieren. Siehe http://dejavu-fonts.org für weitere Informationen.)
Sie haben den Fontnamen für das gewünschte Feld richtig auf "DejaVu Sans" gestellt und Sie haben auf der Webseite nachgeschaut, dass der Font alle Zeichen beinhaltet, aber Sie haben in dem PDF noch immer keine Zeichen?
Kann es sein, dass Sie mal in der Vergangenheit mit den überholten Funktionen wie z.B. "PDF font name" oder "PDF Encoding" gespielt haben? Sogar dann, wenn Sie die Einstellungen auf Default zurücksetzen, könnte es der Grund sein, warum die Zeichen im PDF nicht angezeigt werden. Schalten Sie die Report Definition in die xml Ansicht und versichern Sie sich, dass diese Optionen GAR NICHT vorhanden sind!
Das folgende Beispiel funktioniert nicht:
<staticText> <reportElement x="14" y="63" width="521" height="24"/> <textElement> <font fontName="DejaVu Sans" size="15" pdfFontName="DejaVu Sans" pdfEncoding="Identity-H"/> </textElement> <text><![CDATA[Cyrillic: б в г д ж з и ь к л м н п ф ц ч ш шт э я ю я ы]]></text> </staticText>
Das wird funktionieren, denn die Attribute pdfFontName und pdfEncoding sind gar nicht vorhanden:
<staticText> <reportElement x="14" y="63" width="521" height="24"/> <textElement> <font fontName="DejaVu Sans" size="15"/> </textElement> <text><![CDATA[Cyrillic: б в г д ж з и ь к л м н п ф ц ч ш шт э я ю я ы]]></text> </staticText>
Vielleicht werden die von Ihnen gewünschten Zeichen mit der DejaVu Schriftart nicht angezeigt oder die Schriftart gefällt Ihnen einfach nicht. Wie wäre es mit Arial oder jeder anderen Unicode-Schriftart?
Um das zu erreichen, müssen Sie Ihre Schriftart auf eine besonderer Weise dem JasperReport bereitstellen. Das bedeutet, dass die Schriftarten in eine .jar Datei gepackt werden müssen, die zusätzliche Informationen in einer Property-Datei und einer speziellen xml Datei, die die beinhalteten Schriftarten beschreibt, beinhalten muss. Diese jar Datei muss sich im Java Classpath befinden, während Sie den Report ausführen. Klingt kompliziert? Keine Panik... ;-)
Solch eine jar Datei für Schriftarten können Sie mit Hilfe des grafischen Reporteditors, den Sie ohnehin vielleicht schon benutzen, in zwei Schritten erstellen. iReport
Wenn Sie in iReport das Auswahlmenu für Schrifteigenschaften öffnen, merken Sie vielleicht, dass es dort einige Einträge am Anfang der Liste gibt, und dann, getrennt mit einem Strich, folgt eine längere Liste von Schriftarten. In der längeren Liste unter dem Strich befinden sich Schriftarten, die in Ihrem Betriebssystem installiert sind. Die Einträge über dem Strich sind Schriftarten, die im iReport installiert sind. Nur die in iReport installierten Schriftarten können zum exportieren von Unicode-Zeichen als pdf in iReport benutzt werden. Der erste Schritt ist also Ihre Lieblingsschriftarten in iReport zu installieren.
Jetzt sehen Sie eine Liste von allen bereits installierten Schriftarten. Die drei DejaVu Fonts sind per default installiert, die anderen drei sind allgemeine Schriftartennamen.
Jetzt sollte es Ihnen möglich sein in iReport Ihren Report mit fremden Zeichen mithilfe der von Ihnen installierten Schriftarten als pdf zu exportieren.
Eine Notiz für Windows 7 Benutzer:
Sie bekommen möglicherweise eine Fehlermeldung, wenn Sie versuchen in iReport eine Schriftart zu installieren, weil Sie keine Schreibrechte in dem Verzeichnis haben. Ändern Sie die Sicherheitseinstellungen von dem Verzeichnis
C:\Program Files\Jaspersoft\iReport-4.1.1\ireport\fonts
oder
C:\Program Files (x86)\Jaspersoft\iReport-4.1.1\ireport\fonts
damit es beschreibbar wird.
Jetzt haben Sie eine gebrauchsfertige Schriftarten-jar-Datei, die Sie mit JasperReports benutzen können. Fügen Sie sie dem classpath Ihrer Applikation zu.