java - Jasper Report Character Encoding in PDF -


i trying use custom font in jasper report. myanmar3 standard font of myanmar. ok, reporttitle must myanmar font myanmar3. google use myanmar3 myanmar locale.

when export report html file. can display report title, well.but, exported pdf file cannot display incorrectly.

in browser.

enter image description here

in pdf

enter image description here

public void report() throws exception {     list<salesreport> salereports = salesreportservice.findsalesreport(new salesreportcriteria());     inputstream inputstream = new fileinputstream("report-template/salereporttemplate.jrxml");     string outputfilepdf = "d:/temp/basicreport.pdf";     string outputfilehtml = "d:/temp/basicreport.html";     map parammap = new hashmap();     parammap.put("reporttitle", "\u1005\u101b\u1004\u103a\u1038\u1021\u1004\u103a\u1038\u1019\u103b\u102c\u1038\u1011\u100a\u103a\u101e\u103d\u1004\u103a\u1038\u1001\u103c\u1004\u103a\u1038");     parammap.put("tabledatasource", new jrbeancollectiondatasource(salereports));     jasperdesign jasperdesign = jrxmlloader.load(inputstream);     jasperreport jasperreport = jaspercompilemanager.compilereport(jasperdesign);     jasperprint jasperprint = jasperfillmanager.fillreport(jasperreport, parammap, new jrbeancollectiondatasource(salereports));     jasperexportmanager.exportreporttopdffile(jasperprint, outputfilepdf);     jasperexportmanager.exportreporttohtmlfile(jasperprint, outputfilehtml); } 

salereporttemplate.jrxml

<?xml version="1.0" encoding="utf-8"?> <jasperreport xmlns="http://jasperreports.sourceforge.net/jasperreports"                xmlns:xsi="http://www.w3.org/2001/xmlschema-instance"                xsi:schemalocation="http://jasperreports.sourceforge.net/jasperreports http://jasperreports.sourceforge.net/xsd/jasperreport.xsd"                name="tablereport" pagewidth="842" pageheight="595" orientation="landscape" whennodatatype="allsectionsnodetail" columnwidth="802"                leftmargin="20" rightmargin="20" topmargin="30" bottommargin="30" isfloatcolumnfooter="true" whenresourcemissingtype="empty" uuid="a255c602-4ff1-4db8-ab72-65b5c3ff9bdd">      <property name="ireport.zoom" value="1.0"/>     <property name="ireport.x" value="0"/>     <property name="ireport.y" value="0"/>     <style name="myanmar3" isdefault="true" fontname="myanmar3" fontsize="10" isbold="false" isitalic="false" isunderline="false" isstrikethrough="false"/>     <style name="table">         <box leftpadding="0">             <pen linewidth="1.0" linecolor="#000000"/>         </box>     </style>     <style name="tableheader" mode="opaque" backcolor="#808080"/>     <style name="tablefooter" mode="opaque" backcolor="#c0c0c0"/>     <subdataset name="tabledata" uuid="41cd3dac-2d22-41b9-9872-8fdb465d0f85">         <field ... table generation/>     </subdataset>     <parameter name="tabledatasource" class="net.sf.jasperreports.engine.jrdatasource"/>     <parameter name="reporttitle" class="java.lang.string" isforprompting="false"/>     <title>         <band height="153">             <textfield isblankwhennull="true">                 <reportelement uuid="b44cb7c1-f7d5-467c-8982-b95f65dcb849" x="106" y="0" width="573" height="59"/>                 <textelement textalignment="center" verticalalignment="middle">                     <font size="22" isbold="true" ispdfembedded="true"/>                 </textelement>                 <textfieldexpression><![cdata[$p{reporttitle}]]></textfieldexpression>             </textfield>             <componentelement>                 -->other tag table....             </componentelement>         </band>     </title> </jasperreport> 

i add myanmar3.ttf file , configure in jasperreports-fonts-5.1.0.jar myanmar3 font.

jasperreports_extension.properties

net.sf.jasperreports.extension.registry.factory.simple.font.families=net.sf.jasperreports.engine.fonts.simplefontextensionsregistryfactory net.sf.jasperreports.extension.simple.font.families.dejavu=net/sf/jasperreports/fonts/fonts.xml net.sf.jasperreports.extension.simple.font.families.myanmar3=net/sf/jasperreports/fonts/fonts.xml 

font.xml

...other default config.  <fontfamily name="myanmar3">     <normal>net/sf/jasperreports/fonts/myanmar3/myanmar3.ttf</normal>     <bold>net/sf/jasperreports/fonts/myanmar3/myanmar3.ttf</bold>     <italic>net/sf/jasperreports/fonts/myanmar3/myanmar3.ttf</italic>     <bolditalic>net/sf/jasperreports/fonts/myanmar3/myanmar3.ttf</bolditalic>     <pdfencoding>identity-h</pdfencoding>     <pdfembedded>true</pdfembedded> </fontfamily> 

i have tested many configuration, reference , example. but, there no effect on pdf file.

let me know, if u have suggestion , providing.

this problem of itext (version tested 5.5.4) , ttf font, itext doesn't support ligatures, see comment below

since jasper-reports using itext library render pdf there nothing can in jasper report solve problem.

example code using only itext render same output jasper report

public class fonttest {      /** resulting pdf file. */     public static final string result = "pdf/fonttest.pdf";     /** test text. */     public static final string test = "\u1005\u101b\u1004\u103a\u1038\u1021\u1004\u103a\u1038\u1019\u103b\u102c\u1038\u1011\u100a\u103a\u101e\u103d\u1004\u103a\u1038\u1001\u103c\u1004\u103a\u1038";      public void createpdf(string filename) throws ioexception, documentexception {         document document = new document();         pdfwriter writer = pdfwriter.getinstance(document, new fileoutputstream(filename));         document.open();         basefont bf = basefont.createfont(             "lib/myanmar3.ttf", basefont.identity_h, basefont.embedded);         font font = new font(bf, 20);         columntext column = new columntext(writer.getdirectcontent());         column.setsimplecolumn(36, 730, 569, 36);         column.addelement(new paragraph(test, font));         column.go();         document.close();     }      public static void main(string[] args) throws ioexception, documentexception {         new fonttest().createpdf(result);     } } 

i have posted follow question in section understand why itext can't render font correctly.

this comment of @bruno lowagie (original developer of itext) is

"the behavior see caused fact itext doesn't support ligatures. need 1 of next, unreleased versions of itext. we'll release beta versions next year customers."


Comments