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

使用iTextSharp生成PDF时印地语字体显示异常求助

解决iTextSharp生成PDF中印地语文本显示异常的方案
  • 使用支持印地语的嵌入字体
    iTextSharp默认字体不支持Devanagari(印地语)脚本,必须嵌入支持该脚本的TrueType字体,比如Noto Sans Devanagari、Arial Unicode MS等。关键是要指定BaseFont.IDENTITY_H编码,这是处理Unicode复杂脚本的核心设置。示例代码:

    // 加载本地字体文件
    BaseFont hindiBaseFont = BaseFont.CreateFont(@"C:\Fonts\NotoSansDevanagari-Regular.ttf", BaseFont.IDENTITY_H, BaseFont.EMBEDDED);
    Font hindiFont = new Font(hindiBaseFont, 12);
    
    // 向PDF添加印地语文本
    document.Add(new Paragraph("यह एक सAMPLE印地语 पाठ है", hindiFont));
    
  • 启用复杂脚本排版支持
    印地语存在字符连写、元音附标组合等复杂排版规则,使用ColumnText组件处理文本能更好地支持这些规则,避免排版错乱。示例:

    PdfContentByte contentByte = writer.DirectContent;
    ColumnText columnText = new ColumnText(contentByte);
    columnText.SetSimpleColumn(36, 750, 559, 36);
    columnText.AddElement(new Paragraph("प्रोग्रामिंग में इटेक्स्टशार्प का उपयोग", hindiFont));
    columnText.Go();
    

    建议使用iTextSharp 5.5.13及以上版本,旧版本对复杂脚本的支持存在缺陷。

  • 保证文本编码一致性
    确保输入的印地语文本是UTF-8编码格式,从文件或数据库读取时要指定正确编码,避免乱码。比如读取UTF-8文本文件:

    string hindiContent = File.ReadAllText(@"C:\hindi_content.txt", Encoding.UTF8);
    
  • 统一文本元素的字体设置
    所有需要显示印地语的文本组件(包括PdfPTable单元格、Chunk等)都要关联正确的印地语字体,避免混用默认字体导致部分文本显示异常。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 00:05:18