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

如何在C# WPF中将项目嵌入的字体文件添加到Stimulsoft报表中

解决方案

前置配置

首先确认字体文件的项目属性设置:

  • 在VS解决方案资源管理器中找到FNT文件夹下的BTITRBD.TTF文件
  • 右键选择「属性」,将「生成操作」设置为嵌入的资源

实现代码

StiFontCollection.AddFontFile仅支持本地物理文件路径,不识别WPF的pack URI也无法直接读取程序集资源流,所以需要先将嵌入的字体资源导出到本地临时文件,再传递路径:

using System.IO;
using System.Reflection;
using Stimulsoft.Report;

// 读取嵌入的字体资源流,注意资源名大小写要和实际一致
string fontResourceName = "WpfApp5.FNT.BTITRBD.TTF";
using Stream fontStream = Assembly.GetExecutingAssembly().GetManifestResourceStream(fontResourceName);

if (fontStream == null)
{
    // 若流为空,可执行下方代码打印所有嵌入资源名,确认正确的资源名写法
    // string[] allResourceNames = Assembly.GetExecutingAssembly().GetManifestResourceNames();
    // foreach (string name in allResourceNames) Console.WriteLine(name);
    throw new FileNotFoundException("未找到嵌入的字体资源", fontResourceName);
}

// 将字体流写入系统临时目录
string tempFontPath = Path.Combine(Path.GetTempPath(), "BTITRBD.TTF");
if (!File.Exists(tempFontPath))
{
    using FileStream tempFs = File.Create(tempFontPath);
    fontStream.CopyTo(tempFs);
}

// 加载字体到Stimulsoft字体集合
StiFontCollection.AddFontFile(tempFontPath);

后续操作

在Stimulsoft报表设计器中,将需要使用该字体的文本控件字体设置为B Titr即可,与你XAML中引用的字体名保持一致。


旧方案失败原因

  • 第一个方案使用pack URI失败:StiFontCollection.AddFontFile是面向本地文件系统的API,不支持WPF专属的pack资源路径格式,所以抛出路径格式不支持的异常
  • 第二个方案失败:GetManifestResourceStream返回的是资源流对象,直接调用ToString()不会得到文件路径,只会返回类名;若流为空则说明你填写的资源名和实际嵌入的资源名不匹配,可通过上述代码中打印所有资源名的方式排查正确名称

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 07:09:03