关于Java:为什么使用Arial Unicode MS无法正确显示古吉拉特语-印度语文本?

Why is the Gujarati-Indian text not rendered correctly using Arial Unicode MS?

这是该问题的后续工作,iText的质量检查工程师@ amedee-van-gasse,如何将古吉拉特语-印度语言的字体导出为pdf?我问我如何用相关的mcve发表针对itext的问题。

为什么此序列Unicode \\u0ab9\\u0abf\\u0aaa\\u0acd\\u0ab8无法正确呈现?

它应该这样呈现:

?????? ,还通过unicode-converter测试

但是,此代码(示例改编的iText形式:第11章:选择正确的字体)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
public class FontTest {

    /** The resulting PDF file. */
    public static final String RESULT ="fontTest.pdf";
    /** the text to render. */
    public static final String TEST ="\\u0ab9\\u0abf\\u0aaa\\u0acd\\u0ab8";

    public void createPdf(String filename) throws IOException, DocumentException {
        Document document = new Document();
        PdfWriter writer = PdfWriter.getInstance(document, new FileOutputStream(filename));
        document.open();
        BaseFont bf = BaseFont.createFont(
           "ARIALUNI.TTF", BaseFont.IDENTITY_H, BaseFont.EMBEDDED);
        Font font = new Font(bf, 20);
        ColumnText column = new ColumnText(writer.getDirectContent());
        column.setSimpleColumn(36, 730, 569, 36);
        column.addElement(new Paragraph(TEST, font));
        column.go();
        document.close();
        System.out.println("DONE");
    }

    public static void main(String[] args) throws IOException, DocumentException {
        new FontTest().createPdf(RESULT);
    }
}

产生此结果:

pdf output

看起来与

?????

我已经测试了itextpdf-5.5.4.jaritextpdf-5.5.9.jaritext-2.1.7.js3.jar(随jasper-reports一起分发)

字体使用了它,该字体随MS Office ARIALUNI.TTF一起分发,可以从此处下载Arial Unicode MS *也许下载中存在一些法律问题,请参阅Mike'Pomax'Kamermans评论


无论您选择哪种字体,iText5和iText2(顺便说一下这是一个非常过时的版本)都不支持印度语脚本的呈现。

Rendering Indic脚本与任何拉丁脚本都不相似,因为应采取一系列其他附加操作来获得正确的结果,例如 某些字符需要首先根据语言规则进行重新排序。

这是iText公司的已知问题。

iText5中有一个针对Gujaranti的存根实现,称为GujaratiLigaturizer,但该实现的确很差,您不能期望获得正确的结果。

您可以尝试使用此ligaturizer处理字符串,然后以以下方式输出结果字符串:

1
2
3
IndicLigaturizer g = new GujaratiLigaturizer();
String processed = g.process(inputString);
// proceed with the processed string


使用最新的版式jar文件构建您的应用程序
将解决您的古吉拉特语字体渲染问题
在itext中。