我正在编写一个使用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又名 )?
答案 0 :(得分:3)
使用Unicode Consortium Last Resort Font作为FontSelector
搜索的最后一种字体,每个可能的Unicode字符都会有一个字形。
Last Resort Font是一种特殊字体,它具有不同字符类别的不同字形,可以很好地提示您的字体不支持哪种字符。
因此,显示here的字形不会显示 字形,而是显示在PDF中。