当使用我的Java应用程序中的ApacheFOP2.2使用mangal.ttf以PDF格式打印印地语字符串时,有些印地语字符没有正确显示。
我正在使用JDK1.8和spring。
我试过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> 结果:से和से一样显示,如下面的屏幕截图所示

案例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中列出的问题已经解决,但我面临另一个问题,如下面的屏幕截图所示

使用以下示例文本可以在链接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中是否有我缺少的配置设置?
发布于 2019-02-01 20:50:50
较短的一般答案:
如果配置了字体,但输出不正确,那么问题可能是FOP错误地确定要使用哪个脚本模式的。
解决方案:使用标准或扩展脚本代码显式地设置FO文件中的script属性。
注意,Indic脚本有一个标准代码和一个扩展的(例如,Devanagari的deva和dev2 ),结果输出是不同的,所以您可能需要同时尝试并选择合适的代码。
较长的答覆:
我没有你提到的字体,所以我使用阿米科 Google进行测试。
更重要的是,我对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>这里是一个最小的configuration
<?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
<?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>生成以下输出

发布于 2021-11-29 11:57:35
这可能有助于其他在Apache中获得Indic语言支持的人。我试着用Amiko字体渲染印地语,效果就像一种魅力。
我想看看其他的印度语言是否以同样的方式得到支持,经过一番努力,我可以看到Kannada也可以被呈现出来。
但是它必须在XSL中提到脚本。
ಕನ್ನಡನನಗೆಇನ್ನೂಒಂದುಪ್ರಶ್ನೆಇದೆ
https://stackoverflow.com/questions/54399302
复制相似问题