如何从 C# WPF 中的嵌入字体将字体文件添加到 Stimulsoft 报告

Posted

技术标签:

【中文标题】如何从 C# WPF 中的嵌入字体将字体文件添加到 Stimulsoft 报告【英文标题】:How to Add Font File to Stimulsoft report from embedded font in C# WPF 【发布时间】:2021-11-07 10:34:14 【问题描述】:

我使用 C# WPF 和 Stimulsoft

我想在需要显示时发送我的字体文件嵌入到我的报告中的路径

我在我的 WPF 项目中嵌入了字体,我这样使用它:

在 XAML 中:

<Label x:Name="preloader" HorizontalContentAlignment="Center" VerticalContentAlignment="Center" Content="Loading . . ." Margin="319,178,48,34" FontFamily="/WpfApp5;component/FNT/#B Titr" FontSize="48" Background="White"/>

字体是从我项目的字体文件夹中嵌入的:

因为我的报告是在 stimulsoft 中生成的,所以我无法嵌入字体,但我可以向它发送我的字体路径 enter link description here

这样我可以将我的字体路径发送给它

为此我尝试了两种方法

C# 代码:

1-:

StiFontCollection.AddFontFile(@"pack://application:,,,/FNT/#B Titr");

这种情况会显示这个错误:

System.NotSupportedException: '不支持给定路径的格式。'

2-:

var fntpath = Assembly.GetEntryAssembly().GetManifestResourceStream("WpfApp5.FNT.BTITRBD.TTF");
            StiFontCollection.AddFontFile(fntpath.ToString());

在这个 fntpath.ToString() 中是 null !

如何做到这一点?

请帮忙

【问题讨论】:

【参考方案1】:

AddFontFile 方法需要磁盘上物理文件的路径。您不能传入 pack: URI,因为它不理解该格式。而且您不能只在Stream 上调用.ToString(),因为这不会产生任何有意义的信息。

您需要将字体文件提取到一个临时文件,并将该文件的路径传递给AddFontFile 方法。

string tempPath = Path.GetTempPath();
string fileName = "WpfApp5.FNT.BTITRBD.TTF";
string fontPath = Path.Combine(tempPath, fileName);
if (!File.Exists(fontPath))

    using (var stream = Assembly.GetEntryAssembly().GetManifestResourceStream(fileName))
    using (var output = File.Create(fontPath))
    
        stream.CopyTo(output);
    


StiFontCollection.AddFontFile(fontPath);

【讨论】:

以上是关于如何从 C# WPF 中的嵌入字体将字体文件添加到 Stimulsoft 报告的主要内容,如果未能解决你的问题,请参考以下文章

WPF添加自定义字体

WPF 从文件加载字体

WPF 怎么使用资源文件中的字体

如何将 TextBlock(字体大小)增大/缩小到 WPF 中的可用空间?

如何更改 wpf 中的字体系列? [复制]

如何在 WPF C# 中更改验证结果的字体大小