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

Posted

技术标签:

【中文标题】导出为 pdf 时如何正确呈现印地语?【英文标题】:How can I render hindi correctly when exporting to pdf? 【发布时间】:2016-03-21 02:57:36 【问题描述】:

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

我已经使用过字体扩展,但没有帮助:

字体名称:“lohit Devanagari”PDF 嵌入:检查 PDF 编码:Identity-H

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

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

【问题讨论】:

你用过font extensions吗? 可能重复:Creating Hindi PDF using UTF-8 in JasperReport & Hindi Fonts in JasperReports & Jasper report PDF in hindi @AlexK,可能的重复项没有答案或接受的答案,用户已尝试字体扩展,请参阅问题(可能不正确或 ttf 字体无法呈现 uni-code),这就是为什么我已经发布了答案。 这篇文章包含有用的cmets和答案 有人找到解决这个问题的方法吗? 【参考方案1】:

这对我有用

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

【讨论】:

谢谢你,我在这上面浪费了几天时间。【参考方案2】:

正确的方法是使用font-extensions。 pdfEncoding="Identity-H"弃用

先清除这个checklist to render font in pdf:

    是我实际的.tff 支持 (OpenType) 并且字体实际上可以渲染 字符。并非所有字体都呈现 UTF-8 中的所有字符

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

    我是否将正确的编码传递给 iText。有疑问(或一般)使用 编码 Identity-H 推荐用于较新的 PDF 标准 并让您能够混合使用不同的编码。

Identity-H 好像没问题

    我的字体是嵌入吗,这样如果我共享 pdf 也不是计算机 有这个字体可以显示内容。

嵌入你的字体(否则,如果你让它在你的电脑上工作,它可能 不适用于其他人),请注意您的 jrxml 中为 isPdfEmbedded=false,删除标签并在字体扩展中选择 true 或将标签设置为 true

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

How to add font extensions

编辑:用户传递字体后

Krutidev_011.TTF 字体不是有效的 ttf 字体,这可能是因为不幸的是,Apple 的标准和 Microsoft 的标准出现了分歧(我猜你的字体是 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" 这是我的结果:

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

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

【讨论】:

我的实际 .tff 正在正确呈现单词,当我导出为其他格式时它运行良好(如 html、ODT、EXCEL)只有 PDF 导出会产生问题 你能分享你的字体扩展的jar吗?和你的 jrxml(或者一个小 jrxml,没有显示文本来测试你的字体扩展)? Jar 文件 :-s000.tinyupload.com/index.php?file_id=03986171897156283365 Jrxml:- @Priyesh Mishra 我已编辑答案,您的 TTF 无效(这取决于存在不同 TTF 类型的事实......),检查编辑 当我将 jar 文件附加为外部时,问题得到了解决。非常感谢您的帮助和指导【参考方案3】:

我有同样的问题,我用 gargi.ttf 字体解决了它。 download here 有了这个配置

"gargi" => array(
        'R' => "gargi.ttf",
        'useOTL' => 0xFF,
    ),

【讨论】:

【参考方案4】:

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

【讨论】:

以上是关于导出为 pdf 时如何正确呈现印地语?的主要内容,如果未能解决你的问题,请参考以下文章

打印到 PDF:文本呈现不正确

Matlab 字体在打印或导出时无法正确呈现

Windows 和 Ubuntu 上印地语 Unicode 的打印问题

如何从 Android 中的印地语 PDF 文件中提取文本

Rotativa 生成的 PDF 无法正确呈现 - 分页符/元素中断

如何在正确的位置渲染 CALayer 子层