首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Apache中的Indic字体支持

Apache中的Indic字体支持
EN

Stack Overflow用户
提问于 2019-01-28 09:51:12
回答 2查看 624关注 0票数 1

当使用我的Java应用程序中的ApacheFOP2.2使用mangal.ttf以PDF格式打印印地语字符串时,有些印地语字符没有正确显示。

我正在使用JDK1.8和spring。

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

案例1:

当fop-conf.xml设置如下:

代码语言:javascript
复制
<font kerning="yes"    embed-url="classpath:/mangal.ttf"   >
<font-triplet name="Mangal" style="normal" weight="normal"></font-triplet>
</font>   

结果:से和से一样显示,如下面的屏幕截图所示

案例2:

当fop-conf.xml设置如下:

代码语言:javascript
复制
<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中列出的问题已经解决,但我面临另一个问题,如下面的屏幕截图所示

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

代码语言:javascript
复制
से 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中是否有我缺少的配置设置?

EN

回答 2

Stack Overflow用户

发布于 2019-02-01 20:50:50

较短的一般答案:

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

解决方案:使用标准扩展脚本代码显式地设置FO文件中的script属性。

注意,Indic脚本有一个标准代码和一个扩展的(例如,Devanagari的devadev2 ),结果输出是不同的,所以您可能需要同时尝试并选择合适的代码。

较长的答覆:

我没有你提到的字体,所以我使用阿米科 Google进行测试。

更重要的是,我对devanagari脚本一无所知,所以我真的不能说输出是对还是错,我只能将其与您的图像进行比较。

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

代码语言:javascript
复制
<?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>

这里是一个最小的configuration

代码语言:javascript
复制
<?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>

生成这个输出

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

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

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

这个configuration

代码语言:javascript
复制
<?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>

生成以下输出

票数 0
EN

Stack Overflow用户

发布于 2021-11-29 11:57:35

这可能有助于其他在Apache中获得Indic语言支持的人。我试着用Amiko字体渲染印地语,效果就像一种魅力。

我想看看其他的印度语言是否以同样的方式得到支持,经过一番努力,我可以看到Kannada也可以被呈现出来。

但是它必须在XSL中提到脚本。

ಕನ್ನಡನನಗೆಇನ್ನೂಒಂದುಪ್ರಶ್ನೆಇದೆ

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54399302

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档