如何使用iText 2.1.3打印字体中不存在的字符

时间:2015-09-10 20:37:37

标签: unicode itext

我正在编写一个使用iText 2.1.3生成PDF文件的应用程序。当打印包含非使用字体的字符的Unicode文本时,字符在输出中消失。

我已经读过解决这个问题的方法是使用FontSelector这样的东西:

public void createPdf(final String filename, final String text)
  throws IOException, DocumentException {
    // Get at document for printing.
    final Document document = new Document(...);
    PdfWriter.getInstance(document, new FileOutputStream(filename));
    document.open();

    // Create a FontSelector with multiple fonts.
    final FontSelector selector = new FontSelector();
    final Font f1 = ...; // Covers e.g. Western glyphs
    selector.addFont(f1);
    final Font f2 = ...; // Covers e.g. Chinese glyphs
    selector.addFont(f2);

    // Phrase contains of chunks each using an approriate font
    // for rendering part of the text.
    final Phrase ph = selector.process(text);
    document.add(new Paragraph(ph));

    document.close();
}

(从this示例重写的示例。)

但是,文本中可能仍有一些字符未被任何可用字体覆盖。

有没有办法告诉iText 2.1.3打印例如这些字符的Unicode替换字符(U + FFFD又名 )?

1 个答案:

答案 0 :(得分:3)

使用Unicode Consortium Last Resort Font作为FontSelector搜索的最后一种字体,每个可能的Unicode字符都会有一个字形。

Last Resort Font是一种特殊字体,它具有不同字符类别的不同字形,可以很好地提示您的字体不支持哪种字符。

因此,显示here的字形不会显示 字形,而是显示在PDF中。