Aspose.PDF for .NET中HtmlFragment自定义字体无法生效求助
在Aspose.PDF for .NET的HtmlFragment中使用自定义字体的正确方法
直接设置HtmlFragment.TextState.Font不会生效,因为HtmlFragment是基于HTML解析渲染的,HTML内部的样式优先级高于TextState的设置。要让自定义字体生效,需要结合字体注册和HTML内联CSS来实现,具体步骤如下:
关键操作步骤
- 注册自定义字体到FontRepository:让Aspose.PDF能够识别并加载该字体
- 在HTML内容中通过CSS指定字体:使用字体的正确家族名称(而非文件名)来设置文本样式
- 可选:嵌入字体到PDF:确保没有安装该字体的机器也能正常显示文本
修改后的完整代码
var _dataDir = @"C:\Users\akash.choubey\"; Document doc = new Document(); Page page = doc.Pages.Add(); var fontPath = _dataDir + "astmensh.otf"; // 加载并注册自定义字体 var customFont = FontRepository.OpenFont(fontPath); FontRepository.RegisterFont(customFont); // 可选:开启字体嵌入,避免缺失字体时显示异常 customFont.IsEmbedded = true; // 在HTML中通过内联CSS指定字体家族名称 // 注意:使用customFont.FontName获取字体的正确名称(可能与文件名不同) HtmlFragment hf = new HtmlFragment($"<p style='font-family: {customFont.FontName}; font-size: 14pt;'>this is text</p>"); page.Paragraphs.Add(hf); doc.Save(_dataDir + "output.pdf");
额外说明
- 若HTML内容更复杂,可使用
<style>标签统一定义字体样式:<style> body { font-family: '{customFont.FontName}'; } </style> <p>this is text</p> - 不要直接使用文件名作为字体家族名,可通过
customFont.FontName或customFont.FamilyName属性获取字体的实际家族名称
内容的提问来源于stack exchange,提问作者Akash Choubey
相关产品推荐
相关产品推荐

