Android中使用iTextG 5.5.9生成PDF如何正确显示中文?
解决iTextG 5.5.9生成PDF时中文字符不显示的问题
嘿,这个问题我熟!iTextG默认用的Times-Roman字体根本不包含中文字形,所以中文会直接“消失”,得手动引入支持中文的字体文件才行,具体操作步骤给你列出来:
第一步:准备中文字体文件
找一个支持中文的字体文件,比如Windows系统里的simhei.ttf(黑体)、simsun.ttc(宋体),或者开源的Noto Sans SC字体。把这个字体文件放到Android项目的assets目录下——如果你的项目里没有assets文件夹,直接在main目录下新建一个就行。第二步:修改代码加载中文字体
替换你原来用FontFactory.getFont加载Times-Roman的代码,改成从assets目录加载中文字体:// 加载assets里的黑体字体,参数分别是字体文件名、编码方式、嵌入字体、字号、样式 Font fontbold = FontFactory.getFont("simhei.ttf", BaseFont.IDENTITY_H, BaseFont.EMBEDDED, 11, Font.BOLD); Font fontTimes = FontFactory.getFont("simhei.ttf", BaseFont.IDENTITY_H, BaseFont.EMBEDDED, 11);这里重点说下参数:
BaseFont.IDENTITY_H:指定使用Unicode编码,确保能正确识别中文字符BaseFont.EMBEDDED:把字体嵌入PDF文件里,这样不管打开PDF的设备有没有这个字体,中文都能正常显示
如果用的是字体集合文件(比如.ttc格式)
像simsun.ttc这种包含多个字体的文件,需要额外指定字体索引,比如宋体在simsun.ttc里的索引是0:Font fontChinese = FontFactory.getFont("simsun.ttc,0", BaseFont.IDENTITY_H, BaseFont.EMBEDDED, 11);几个避坑提示
- 别用系统路径加载字体,Android里优先用assets目录,避免权限问题
- 尽量选体积小的字体文件,不然生成的PDF会变大很多
- 要是还是有问题,加个try-catch看看是不是字体加载失败了:
try { Font fontbold = FontFactory.getFont("simhei.ttf", BaseFont.IDENTITY_H, BaseFont.EMBEDDED, 11, Font.BOLD); } catch (Exception e) { e.printStackTrace(); }
内容的提问来源于stack exchange,提问作者Vaibhav More




