我想在jasper报告版本5.1的PDF导出报告中显示不同的字体(古吉拉特语 - 印度语)。
我尝试过: 运行工具后打开位置 第1步:
工具 - >选项 - >字体
sshpass -p 'mypassword' ansible-playbook myplaybook.yml --ask-pass -c paramiko -vvvv
已安装字体“Arial Unicode MS”并且还创建了其jar文件.Jar文件在jasper报告的类路径中退出。
关注链接:1)Fonts 2)Sample fonts
第2步:irfonts.xml
默认情况下,jasper报告会将此文件中的其他字体更改为。
net.sf.jasperreports.default.font.name=Arial Unicode MS - the default font name.
net.sf.jasperreports.default.font.size=10 - the default font size.
net.sf.jasperreports.default.pdf.font.name=Identity-H - the default PDF font.
net.sf.jasperreports.default.pdf.encoding=UTF-8 - the default PDF character encoding.
net.sf.jasperreports.default.pdf.embedded=true - by default PDF fonts are not embedded
第3步:
我得到了什么结果: હીપ્સ 我真正想要的是: હિપ્સ
花了一些时间后我知道你在Jasper报告模板中呈现页面的时候,字体按需要工作,但当你将它导出为pdf时,它会改变原因所有字体都通过“itext pdf engine”。
现在,技巧是itext没有我目前正在使用的字体。
有什么方法可以实现这一点。
注意: 它不是使用Java创建的。我是Oracle数据库开发人员,因此仅使用工具创建并使用工具边界进行打印。
也跟着这个博客但是它在java中所以不知道在哪里做出改变。 Blog of java
示例代码:
<fontFamily name="Arial Unicode MS">
<normal>net/sf/jasperreports/fonts/dejavu/ArialUnicodeMS.ttf</normal>
<pdfEncoding>Identity-H</pdfEncoding>
<pdfEmbedded>true</pdfEmbedded>
一些类似的问题也在堆栈溢出中,但它们都使用java来调用和打印。
那么,我可以更改itext库或任何其他解决方法都可以。 我是如何创造的:
2)Jasper
答案 0 :(得分:2)
我通过@AmedeeVanGasse创建了一个仅与question相关的新suggested我将在此向我们展示如何在jasper报告中实现Alexey Subach answer。
注意:Alexy Subach说“实施真的很差 并且你不能期望用它来获得正确的结果“
添加到classpath itext5库(注意最新的jasper报告使用itext2,您将需要两者)并将GujaratiLigaturizer
类定义为变量,然后在每次需要输出时处理文本。
示例强>
<?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="FontTest" columnCount="5" pageWidth="595" pageHeight="842" whenNoDataType="AllSectionsNoDetail" columnWidth="111" leftMargin="20" rightMargin="20" topMargin="20" bottomMargin="20" uuid="2347c131-1884-430a-b77f-59f08f896c8a">
<variable name="g" class="com.itextpdf.text.pdf.languages.GujaratiLigaturizer">
<initialValueExpression><![CDATA[new com.itextpdf.text.pdf.languages.GujaratiLigaturizer()]]></initialValueExpression>
</variable>
<title>
<band height="25">
<textField pattern="">
<reportElement x="0" y="0" width="200" height="25" uuid="ee49d149-394b-4ac6-a0a2-6d207b0c8d89"/>
<textElement>
<font fontName="Arial Unicode MS" size="14"/>
</textElement>
<textFieldExpression><![CDATA[$V{g}.process("\u0ab9\u0abf\u0aaa\u0acd\u0ab8")]]></textFieldExpression>
</textField>
</band>
</title>
</jasperReport>
重要提示:只有pdf导出才是正确的!
Pdf结果
在通过java导出之前,如果需要生成pdf,请在导出之前切换JasperPrint
对象中的文本
JasperPrint print = JasperFillManager.fillReport(report, new HashMap<String, Object>(), theDatasource);
IndicLigaturizer g = new GujaratiLigaturizer();
for (JRPrintPage page : print.getPages()) {
for (JRPrintElement element : page.getElements()) {
if (element instanceof JRTemplatePrintText){
JRTemplatePrintText text = (JRTemplatePrintText)element;
text.setText(g.process(text.getText()));
}
}
}
答案 1 :(得分:2)
尝试使用JasperReports 6.2.0或更新版本。它为印度语脚本提供PDF支持(通过将AWT文本布局传输到PDF来实现)。
JasperReports发行版中的Unicode报告示例(在demo / samples / unicode下)显示了几个印度语脚本中的文本,包括古吉拉特语(使用谷歌诺托字体)。