java使用itext导出pdf导出中文及非中文遇到的问题
需求背景
目前公司有海外的客户,在生成pdf的时候,输入的某些字符无法显示,原因是因为之前解决了一个问题就是中文无法显示,解决方式如下
FontProgram fp = FontProgramFactory.createFont("STSong-Light", false);
PdfType0Font font = new PdfType0FontIgnoreUnknown((CidFont) fp, "UniGB-UCS2-H");
但是上述解决方案在遇到Registo de prestação de trabalho no exterior
这样的字符时,也无法显示
最新版解决方案
使用fontprovider类实现,详细代码如下
static {
fontProvider = new DefaultFontProvider(true, true, false);
try {
FontProgram fp = FontProgramFactory.createFont("STSong-Light", false);
fontProvider.addFont(fp, "UniGB-UCS2-H");
} catch (IOException e) {
log.error("加载中文字体失败");
}
}
public static synchronized FontProvider getFontProvider() {
return fontProvider;
}
使用方法如下
Document document = new Document(pdfDocument);
// document.setFont(font);
document.setFontProvider(fontProvider);
document.setFontFamily(StandardFontFamilies.COURIER, StandardFontFamilies.HELVETICA, StandardFontFamilies.SYMBOL, StandardFontFamilies.TIMES, StandardFontFamilies.ZAPFDINGBATS,"STSong-Light");
最终效果