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.
in pdf
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 itext 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
Post a Comment