使用我的Java应用程序中的Apache FOP 2.2使用mangal.ttf打印PDF格式的印地语字符串时,某些印地语字符无法正确显示。 我正在使用JDK 1.8和spring MVC。
我试过lohit.ttf,devanagari.ttf,aparajita.ttf和kokila.ttf,但都有同样的问题。
当fop-conf.xml设置如下:
<font kerning="yes" embed-url="classpath:/mangal.ttf" >
<font-triplet name="Mangal" style="normal" weight="normal"></font-triplet>
</font>
结果:如此截图所示,से显示如下
当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中列出的问题已解决,但我面临另一个问题,如下面的屏幕截图所示
您可以使用以下示例文本在链接https://www.fonts.com/font/microsoft-corporation/aparajita上查看预期输出:
से and ग्रामीण should be printed in pdf
我试过的其他事情:
<fop version="1.0"> <complex-scripts disabled="true"/> ... </fop>
script
属性:<fo:block font-family="ARIALUNI" script="dev2" > देवी ग्रामीण</fo:block>
FOP中是否有任何我错过的配置设置?
如果配置了字体但输出不正确,则问题可能是FOP错误地确定要使用哪种脚本模式。
解决方案:使用script
或standard脚本代码在FO文件中显式设置extended属性。
请注意,印度语脚本既有标准代码也有扩展代码(例如天蝎座的deva
和dev2
),结果输出不同,因此您可能需要尝试两种方法并选择合适的输出。
我没有你提到的字体,所以我测试使用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>
产生这个输出:
如果我理解正确,你想要实现的输出就是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>
产生以下输出: