在我的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>
结果:screenshot像这样显示से,如屏幕截图所示
按以下方式设置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中是否缺少我需要的任何配置设置?
答案 0 :(得分:0)
如果配置了字体但输出不正确,则可能是FOP错误地确定要使用哪种脚本模式。
解决方案::使用script
或standard脚本代码在FO文件中显式设置extended属性。
请注意,印度脚本同时具有标准代码和扩展代码(例如Devanagari的deva
和dev2
),并且输出结果不同,因此您可能需要尝试他们两个,然后选择合适的一个。
我没有您提到的字体,因此我使用Amiko Google Open字体进行了测试。
更重要的是,我对devanagari脚本一无所知,所以我真的不能说输出是正确还是错误,我只能将其与您的图像进行比较。
这是我使用的完整的输入文件,其中的句子是从您的问题中复制来的:
<?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>
产生以下输出: