Apache FOP中的印度字体支持

问题描述 投票:1回答:1

使用我的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中是否有任何我错过的配置设置?

java true-type-fonts apache-fop
1个回答
0
投票

更短,一般的答案:

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

解决方案:使用scriptstandard脚本代码在FO文件中显式设置extended属性。 请注意,印度语脚本既有标准代码也有扩展代码(例如天蝎座的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

© www.soinside.com 2019 - 2024. All rights reserved.