如何在导出为pdf时正确呈现印地文?

时间:2015-12-15 10:48:55

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

我正在使用i-report 5.5.0获取jasper报告。我需要将印地语文本导出为PDF格式,但印地语部分已转换为???????

我已经使用了字体扩展但它没有帮助:

  

字体名称:" lohit Devanagari"
PDF嵌入式:已检查
PDF   编码:Identity-H

我也尝试了其他印地语字体但到目前为止没有任何效果......

<textField>
    <reportElement x="111" y="26" width="100" height="20" uuid="5a471a16-de7b-4f55-9c9f-b01d37938b9f"/>
     <textElement>
        <font fontName="Lohit Devanagari" pdfEncoding="Identity-H" isPdfEmbedded="false"/>
    </textElement>
    <textFieldExpression><![CDATA[$F{DISTRICT_NAME}]]></textFieldExpression>
</textField>

4 个答案:

答案 0 :(得分:0)

正确的方法是使用font-extensionspdfEncoding="Identity-H" 已弃用

首先清除此checklist to render font in pdf

  1. 我的实际.tff 是否支持OpenType),字体实际上呈现字符。并非所有字体都呈现 UTF-8
  2. 中的所有字符
      

    一旦你创建了正确的字体扩展名并且它无法正常工作,这可能是你的问题..

    1. 我是否将正确的编码传递给iText。怀疑(或一般)使用 编码 Identity-H 这适用于较新的PDF标准 并使您能够混合使用不同的编码。
    2.   

      Identity-H似乎没问题

      1. 我的字体是嵌入,这样如果我分享pdf也不是计算机 拥有此字体可以显示内容。
      2.   

        嵌入您的字体(否则如果您在计算机上运行它可能   不适用于其他人),请在jrxml中注明isPdfEmbedded=false,删除标记,然后在字体扩展名中选择true或将标记设置为true

        现在只需正确生成 font-extension 并将其添加到classpath

        How to add font extensions

        编辑:用户通过字体后

        字体Krutidev_011.TTF不是有效的ttf字体,因为很遗憾,根据Apple的标准和微软的标准不同(我的猜测你的字体是苹果ttf而不是开放式的ttf)。

        Caused by: net.sf.jasperreports.engine.JRRuntimeException: java.awt.FontFormatException: java.nio.BufferUnderflowException
        at net.sf.jasperreports.engine.fonts.SimpleFontFace.setTtf(SimpleFontFace.java:178)
        

        我尝试download来自网络的有效ttf字体 Lohit Devanagari ,并将其添加为字体扩展名,fontName="Lohit Devanagari"这是我的结果:

        fontTest

        渲染字体但结果可能有 Ligaturizer问题,有关如何解决这些问题,请参阅Why is the Gujarati-Indian text not rendered correctly using Arial Unicode MS?

        如果您想尝试这是我使用的font extension jar for Lohit Devanagari字体扩展程序,请记得设置fontName="Lohit Devanagari"

答案 1 :(得分:0)

我用gargi.ttf字体解决了同样的问题。 download here 使用此配置

typeof array[index] === 'undefined'

答案 2 :(得分:0)

这对我有用

IndicLigaturizer  hindi = new DevanagariLigaturizer();
String result = hindi.process(string);

答案 3 :(得分:0)

Jasper 报告:- 您可以将 Arial Unicode MS 用于印地语,并在 java 构建路径中包含相同的字体 jar

Jasper Font Arial Unicode MS

Arial unicode jar exported from ireport tool import in STS

Output same as input