iText lowagie 2.1.7版本PDF导出时简繁体中文无法转换问题咨询
iText 2.1.7(lowagie)PDF导出中文不显示问题解决方案
问题根因
iText 2.1.7内置的默认字体仅支持拉丁字符集,法语、西班牙语、意大利语等西欧语言字符都属于该集合可直接渲染,而简体中文、繁体中文属于CJK字符集,默认没有绑定适配的字体,因此导出后中文会显示为空白或方框。
具体解决步骤
- 第一步:准备适配中文的字体文件
可以选用开源可商用的中文字体,比如思源黑体、思源宋体,也可使用系统自带的宋体、黑体、微软雅黑(商用需确认版权),获取字体的.ttf或.ttc格式文件即可。 - 第二步:代码中引入自定义中文字体
不要使用iText默认的无字体参数的FontFactory.getFont调用方式,显式加载你准备好的中文字体,示例代码如下:// 第二个参数BaseFont.IDENTITY_H是CJK字符渲染必填参数,代表使用Unicode横向编码 // 第三个参数设为true代表嵌入字体,可保证PDF在任意设备打开都能正常显示中文 BaseFont baseFont = BaseFont.createFont("你的字体文件存储路径/SourceHanSansCN-Regular.ttf", BaseFont.IDENTITY_H, BaseFont.EMBEDDED); Font cnFont = new Font(baseFont, 12, Font.NORMAL); // 后续所有包含中文的文本,都绑定这个cnFont渲染即可 Paragraph paragraph = new Paragraph("待导出的简体/繁体中文内容", cnFont); document.add(paragraph); - 第三步:繁体中文适配
无需单独做特殊配置,只要选用的字体文件覆盖了需要的繁体字符,即可同时正常渲染简繁中文内容。
注意事项
- 如果是web项目打包部署,建议把字体文件放到项目资源目录下,加载时用类路径读取,避免部署后路径找不到的问题。
- 字体嵌入设为
true会略微增加PDF文件的体积,如果确定打开PDF的设备都安装了对应字体,可设为false减小文件体积。 - 2.1.7属于lowagie版本的iText,已经停止维护多年,有条件的话建议升级到社区维护分支OpenPDF或更高版本的iText 7,后续CJK字符适配会更便捷。
内容的提问来源于stack exchange,提问作者venkata raghavendra
相关产品推荐
相关产品推荐

