导出为 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:-我有同样的问题,我用 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 时如何正确呈现印地语?的主要内容,如果未能解决你的问题,请参考以下文章
Windows 和 Ubuntu 上印地语 Unicode 的打印问题