2013-05-30 316 views
5

我正在使用iText创建带有中文字符的PDF。我所指定的字体是MS明朝体,我曾使用的代码加载,使用中文字符生成PDF的iText,但不显示

FontFactory.registerDirectory("c:/windows/Fonts/"); 

new Phrase("Asian 汉字/漢字 characters", FontFactory.getFont("MS Mincho", 16, Font.NORMAL)); 

下面的代码检索适当的MS Mincho字体(即不为空),

FontFactory.getFont("MS Mincho", 16, Font.NORMAL) 

但是,生成的PDF仅显示ASCII文本“亚洲字符”,即中文字符不显示在PDF上。

任何想法为什么中文字符在生成的PDF上丢失?

+1

你应该确保你)使用带有适当的[编码]字体(http://itextpdf.com/themes/keyword.php?id=394) ('BaseFont.IDENTITY_H')和​​b)[嵌入](http://itextpdf.com/themes/keyword.php?id=71)它('BaseFont.EMBEDDED')。受到[iText in Action - 2nd Edition](http://itextpdf.com/book/)[第11章](http://itextpdf.com/book/chapter.php?id = 11) 。 – mkl

+1

谢谢。生成的PDF现在正确显示中文字符。不需要调用FontFactory.registerDirectory()。只需使用BaseFont.createFont(“c:/windows/Fonts/MSMINCHO.TTF”,BaseFont.IDENTITY_H,BaseFont.EMBEDDED)并实例化Font(BaseFont,size)。 FontFactory.getFont(“MS Mincho”)不适用于中文字符。 –

+1

实际上'FontFactory'同样可以用来创建适当的参数化字体对象。但是的确如此,你并不需要它。 – mkl

回答

2

由于这个问题已经在注释中得到解决,这里的分辨率:

你应该确保你)使用的字体与适当的encoding(BaseFont.IDENTITY_H)和b)embed它(BaseFont.EMBEDDED )。获得iText in Action — 2nd Editionsamples from chapter 11的启发。

BaseFont bf = BaseFont.createFont("c:/windows/Fonts/MSMINCHO.TTF", BaseFont.IDENTITY_H, BaseFont.EMBEDDED); 
Font f = Font(bf, size); 

现在使用这个Font f.

相关问题