c# - 如何从 C# WPF 中的嵌入字体将字体文件添加到 Stimulsoft 报告
问题描述
我使用 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 中生成的,所以我无法嵌入字体,但我可以向它发送我的字体路径, 在此处输入链接描述
通过这个我可以将我的字体路径发送给它:
为此我尝试了两种方法
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 !
这个怎么做 ?
请帮忙
解决方案
该AddFontFile
方法需要磁盘上物理文件的路径。您不能传入pack:
URI,因为它不理解该格式。而且您不能只调用.ToString()
a Stream
,因为这不会产生任何有意义的信息。
您需要将字体文件提取到一个临时文件,并将该文件的路径传递给该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);
推荐阅读
- python - 元素不可交互的 Selenium Python
- javascript - Javascript 发送一个带有文本值的 id
- laravel - 如何在 Laravel 资源中检索具有多对多关系的数据
- python - 将单列 pyodbc 行转换为纯整数值
- r - R中的“localgauss”包 - 绘图问题
- typo3 - TYPO3 TCA 填写创建年份和 UID 的字段
- phpexcel - PHPExcel - 单元格格式
- c# - 如何在 xamarin 集合视图中仅显示 DateTime 的几天和几个月?
- html - 在 AfterViewInit 中获取不正确的 offsetTop 值
- azure - 使用下载的模板创建 Azure VM 失败(实体名称“vmImageName”根据其验证规则无效)