如何将Gujarati-Indian Language中的字体导出为pdf文件?

时间:2016-04-13 13:42:51

标签: fonts jasper-reports export-to-pdf

我想在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库或任何其他解决方法都可以。 我是如何创造的:

1)Jasper report

2)Jasper

2 个答案:

答案 0 :(得分:2)

我通过@AmedeeVanGasse创建了一个仅与question相关的新suggested我将在此向我们展示如何在jasper报告中实现Alexey Subach answer

  

注意:Alexy Subach说“实施真的很差   并且你不能期望用它来获得正确的结果“

策略1:您只需要导出pdf

添加到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结果

result

策略2:如果导出为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下)显示了几个印度语脚本中的文本,包括古吉拉特语(使用谷歌诺托字体)。