itext1.4中,使用Graphics2D操作,對中文問題,一般使用iTextAsian.jar的方式處理,但iTextAsian.jar中文只有一種字體,設置字體的bold方法,是無效的。
一般模式:
FontMapper fontMapper = new AsianFontMapper(AsianFontMapper.ChineseSimplifiedFont, AsianFontMapper.ChineseSimplifiedEncoding_H);
_doc = new Document();
_writer = PdfWriter.getInstance(_doc, new FileOutputStream(_pdfFile));
_doc.open();
_cb = _writer.getDirectContent();
_graphics = _cb.createGraphics(_doc.getPageSize().width(), _doc.getPageSize().height(),fontMapper);
_graphics.setFont(...);
_graphics.drawString(....);
這裡AsianFontMapper.ChineseSimplifiedFont只有一種字體。
查看AsianFontMapper源代碼,可以看到
public class AsianFontMapper extends DefaultFontMapper {
....
public BaseFont awtToPdf(Font font) {
......
return BaseFont.createFont(defaultFont, encoding, true);
}
主要作用是把awt的字體轉換成pdf的字體。
為了支持bold等,我們可以繼承AsianFontMapper,覆蓋awtToPdf方法:
public BaseFont awtToPdf(Font font) {
if(font.isBold()){
fontName =“bold字體”;//msyhbd.ttf 微軟雅黑
}else{
fontName =“normal字體”;//msyh.ttf
}
BaseFont baseFont = BaseFont.createFont("C:/WINDOWS/Fonts/"+fontName, BaseFont.IDENTITY_H,BaseFont.NOT_EMBEDDED);