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

Aspose.PDF for .NET中HtmlFragment自定义字体无法生效求助

在Aspose.PDF for .NET的HtmlFragment中使用自定义字体的正确方法

直接设置HtmlFragment.TextState.Font不会生效,因为HtmlFragment是基于HTML解析渲染的,HTML内部的样式优先级高于TextState的设置。要让自定义字体生效,需要结合字体注册和HTML内联CSS来实现,具体步骤如下:

关键操作步骤

  1. 注册自定义字体到FontRepository:让Aspose.PDF能够识别并加载该字体
  2. 在HTML内容中通过CSS指定字体:使用字体的正确家族名称(而非文件名)来设置文本样式
  3. 可选:嵌入字体到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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 12:30:22