gpt4 book ai didi

java - Apache FOP 中的印度字体支持

转载 作者:太空宇宙 更新时间:2023-11-04 09:53:47 27 4
gpt4 key购买 nike

在我的 Java 应用程序中使用 Apache FOP 2.2 通过 mangal.ttf 打印 PDF 中的印地语字符串时,某些印地语字符无法正确显示。
我正在使用 JDK 1.8 和 spring MVC。

我尝试了 lohit.ttf、devanagari.ttf、aparajita.ttf 和 kokila.ttf,但都有相同的问题。

情况1:

当fop-conf.xml设置如下时:

<font kerning="yes"    embed-url="classpath:/mangal.ttf"   >
<font-triplet name="Mangal" style="normal" weight="normal"></font-triplet>
</font>

结果:से显示为से,如截图所示

case1

情况2:

当fop-conf.xml设置如下时:

<font kerning="yes"   metrics-url="classpath:/mangal.xml" embed-url="classpath:/mangal.ttf"   >
<font-triplet name="Mangal" style="normal" weight="normal"></font-triplet>
</font>

结果:案例 1 中列出的问题已解决,但我面临另一个附加问题,如以下屏幕截图所示

case2

<小时/>

您可以在链接 https://www.fonts.com/font/microsoft-corporation/aparajita 中看到预期的输出)使用此示例文本:

से and ग्रामीण should be printed in pdf

我尝试过的其他事情:

  • 我试过 PDFOne生成 PDF。然而同样的问题。然而,Windows 似乎正确显示了它。
  • 配置复杂脚本:<fop version="1.0"> <complex-scripts disabled="true"/> ... </fop>
  • 使用script属性:<fo:block font-family="ARIALUNI" script="dev2" > देवी ग्रामीण</fo:block>

FOP 中是否有我缺少的配置设置?

最佳答案

更简短的一般答案:

如果配置了字体但输出不正确,问题可能是 FOP 错误地确定了要使用的脚本模式

解决方案:显式设置 script FO 文件中的属性,使用 standardextended脚本代码。
请注意,印度语脚本既有标准代码,也有扩展代码(例如梵文的 devadev2),并且生成的输出不同,因此您可能需要同时尝试这两种代码并选择合适的代码。

更长的答案:

我没有您提到的可用字体,因此我使用Amiko进行了测试谷歌开放字体。
更重要的是,我对梵文脚本一无所知,所以我真的不能说输出是正确还是错误,我只能将其与您的图像进行比较。

这是我使用的完整输入文件,其中的句子是从您的问题中复制的:

<?xml version="1.0" encoding="UTF-8"?>
<fo:root xmlns:fo="http://www.w3.org/1999/XSL/Format">
<fo:layout-master-set>
<fo:simple-page-master master-name="simpleA4" page-height="29.7cm" page-width="21cm" margin-top="2cm" margin-bottom="2cm" margin-left="2cm" margin-right="2cm">
<fo:region-body/>
</fo:simple-page-master>
</fo:layout-master-set>
<fo:page-sequence master-reference="simpleA4">
<fo:flow flow-name="xsl-region-body">
<fo:block font-family="Amiko" script="deva">deva: से and ग्रामीण should be printed in pdf</fo:block>
<fo:block font-family="Amiko" script="dev2">dev2: से and ग्रामीण should be printed in pdf</fo:block>
</fo:flow>
</fo:page-sequence>
</fo:root>

这是一个最小的配置:

<?xml version="1.0"?>
<fop version="1.0">
<renderers>
<renderer mime="application/pdf">
<fonts>
<font kerning="yes" embed-url="Amiko/Amiko-Regular.ttf">
<font-triplet name="Amiko" style="normal" weight="normal"/>
</font>
</fonts>
</renderer>
</renderers>
</fop>

产生这个输出:

output with complex script ON

如果我理解正确,您想要实现的输出是 script="deva" 的输出。 .

<小时/>

请注意 metrics-url不需要配置中的属性。

此外,输入 <complex-scripts disabled="true"/>您的配置中具有禁用“复杂脚本”支持的效果,因此我预计这会产生错误输出。

配置

<?xml version="1.0"?>
<fop version="1.0">
<complex-scripts disabled="true"/>
<renderers>
<renderer mime="application/pdf">
<fonts>
<font kerning="yes" embed-url="Amiko/Amiko-Regular.ttf">
<font-triplet name="Amiko" style="normal" weight="normal"/>
</font>
</fonts>
</renderer>
</renderers>
</fop>

产生以下输出:

enter image description here

关于java - Apache FOP 中的印度字体支持,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54399302/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com