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

如何解决iTextSharp嵌入PDF时127以上线条绘制字符丢失问题?

问题描述

我有一款支持ASCII码127以上线条绘制字符的字体,尝试将这些字符嵌入PDF时发现它们被移除。请问是否有办法强制iTextSharp使用该字体显示这些字符?

当前代码:

BaseFont bf = BaseFont.CreateFont("font.ttf", BaseFont.IDENTITY_H, BaseFont.EMBEDDED);

StreamReader reader = new StreamReader(args[0]);

PdfContentByte cb = writer.DirectContent;
cb.SetColorFill(BaseColor.BLACK);
cb.SetFontAndSize(bf, 32);
cb.SetCharacterSpacing(2);
cb.BeginText();
float y = starty;

var line = "”";

while ((line = reader.ReadLine()) != null)
{
    cb.ShowTextAligned(Element.ALIGN_LEFT, line, 0, y, 0);
    y -= 32;
}

cb.EndText();

reader.Close();

尝试嵌入的文本示例:

ÚÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ¿  
 ³ Some text               ³
 ÃÄÄÄÄÄÄÄÄÂÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ´  
解决方案
  • 指定正确的文件编码读取:问题核心大概率是文件读取时编码不匹配,导致扩展ASCII字符丢失。这些线条字符属于Windows-1252(或ISO-8859-1)编码的扩展ASCII范围,默认StreamReader用系统编码读取会解析错误,修改读取代码:

    // 使用Windows-1252编码读取文件
    StreamReader reader = new StreamReader(args[0], Encoding.GetEncoding(1252));
    
  • 确认字体字符覆盖:用Windows字体查看器等工具,确认你的字体确实包含这些扩展ASCII字符,避免因字体本身缺失字符导致无法显示。

  • 替换文本绘制方式(可选):如果ShowTextAligned仍有问题,可尝试用ColumnText渲染文本,它对特殊字符的处理更稳定:

    ColumnText ct = new ColumnText(cb);
    ct.SetSimpleColumn(new Phrase(line, new Font(bf, 32)), 0, y-32, 500, y, 32, Element.ALIGN_LEFT);
    ct.Go();
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.22 12:58:01