如何解决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
相关产品推荐
相关产品推荐

