You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用iTextpdf 5.5.13.3与itext-asian 5.2.0生成PDF时𠮷字无法显示

解决iText 5中汉字「𠮷」无法显示的问题及替代字体设置方法

问题原因

「𠮷」属于Unicode扩展B区的生僻汉字,你当前使用的AsianFontMapper.JapaneseFont_Min对应内置字体未包含该字符的字形,因此无法正常渲染。以下是几种可行的替代设置方案:

方案1:嵌入系统自带的完整日文字体

直接调用系统中包含完整CJK字符集的日文字体,同时指定IDENTITY_H编码(支持全Unicode字符)并嵌入字体,确保字符能被正确渲染:

// Windows系统:使用MS Mincho字体
BaseFont bfJapanese = BaseFont.createFont(
    "MS Mincho",
    BaseFont.IDENTITY_H,
    BaseFont.EMBEDDED
);

// Mac系统:使用Hiragino Mincho ProN字体
BaseFont bfJapanese = BaseFont.createFont(
    "Hiragino Mincho ProN",
    BaseFont.IDENTITY_H,
    BaseFont.EMBEDDED
);

方案2:加载自定义全字符集字体文件

使用覆盖完整Unicode CJK范围的字体(如Google Noto Sans/JP系列),从本地加载字体文件并嵌入:

// 替换为你的字体文件路径,示例使用Noto Sans JP Regular
BaseFont bfJapanese = BaseFont.createFont(
    "/your/font/path/NotoSansJP-Regular.otf",
    BaseFont.IDENTITY_H,
    BaseFont.EMBEDDED
);

Noto系列字体专门针对生僻字做了覆盖,能有效解决这类字符缺失问题。

方案3:自定义AsianFontMapper映射

若需保留AsianFontMapper的使用方式,可自定义映射指向包含目标字符的系统字体:

// 初始化自定义字体映射,指定支持生僻字的字体
AsianFontMapper fontMapper = new AsianFontMapper(
    "MS Mincho", // 替换为系统中存在「𠮷」的字体名称
    BaseFont.IDENTITY_H
);

// 生成PDF时使用该映射
Document document = new Document();
PdfWriter writer = PdfWriter.getInstance(document, new FileOutputStream("output.pdf"));
document.open();
Font font = new Font(fontMapper.getBaseFont(), 12);
document.add(new Paragraph("包含𠮷的测试文本", font));
document.close();

关键注意事项

  • 务必使用BaseFont.IDENTITY_H编码,它支持所有Unicode字符,避免原JapaneseEncoding_H的编码范围限制。
  • 开启BaseFont.EMBEDDED选项,确保字体字形被嵌入PDF,避免在其他设备上因缺失字体导致显示异常。

内容的提问来源于stack exchange,提问作者Vivek Tailang

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.06 01:31:16