如何解决使用PrivateFontCollection的WebAPI无法添加字体-有时
我正在获取需要在WebAPI应用程序中呈现的项目列表。这些使用我已经在文件存储中存储的ttf字体。
我正在尝试遍历需要渲染的组件,对于获得的每种字体ID,请下载该字体,然后将其添加到PrivateFontCollection
中,该类对于我的类已声明为静态。 / p>
private static PrivateFontCollection pfc = new PrivateFontCollection();
因此,当我收到组件时,便有了一种将字体加载到集合中的方法。如果还没有字体,请添加它。
我最初显示状态。启动时-它是空的,例外。 我在集合中寻找一种字体,并将其家族名称链接到我的组件。 如果找到它,则继续下一个组件。如果没有,我使用ID调用一个下载字体的byte []的服务。
然后将字体添加到集合中。来自该服务的数据很好。我有一个byte [],大小很完美。
50%的时间有效。但是,有时候,我无法弄清楚为什么,行pfc.AddMemoryFont(ptrData,dataLength);
的执行没有错误,但是之前的计数和之后的计数是相同的。字体未添加到集合中-我也没有收到错误。
请注意,我正在使用相同的数据进行测试。
private async Task LoadFonts(List<PlateDataObj> components)
{
_log.LogDebug("LoadFonts called... Current State:");
foreach (var item in pfc.Families)
{
_log.LogDebug("PFC - Name: {name}",item.Name);
}
foreach(var component in components)
{
var found = pfc.Families.FirstOrDefault(x => x.Name == component.GroupMeta.FontFamilyName);
if(found == null)
{
_log.LogDebug("Font family {family} not found. Will add.",component.GroupMeta.FontFamilyName);
var f = await _data.GetFont(component.GroupMeta.FontTypeId);
var fontUrl = _blobManager.GetPath(ImageTypeEnum.Font) + f.Url;
var fontData = await _blobManager.Download(fontUrl);
int dataLength = fontData.FileData.Length;
IntPtr ptrData = Marshal.AllocCoTaskMem(dataLength);
Marshal.Copy(fontData.FileData,ptrData,dataLength);
_log.LogDebug("Before adding... Count is {count}",pfc.Families.Count());
pfc.AddMemoryFont(ptrData,dataLength);
_log.LogDebug("After adding... Count is {count}",pfc.Families.Count());
fontMapper.Add(new FontMapper
{
FamilyName = component.GroupMeta.FontFamilyName,Id = component.GroupMeta.FontTypeId
});
Marshal.FreeCoTaskMem(ptrData);
} else
{
_log.LogDebug("Font family {family} exist. No need to add.",component.GroupMeta.FontFamilyName);
}
}
_log.LogDebug("LoadFonts Complete... Current State:");
foreach (var item in pfc.Families)
{
_log.LogDebug("PFC - Name: {name}",item.Name);
}
}
这就是我在控制台中看到的内容。
[12:25:40.720 DBG] LoadFonts called... Current State:
[12:25:45.371 DBG] Font family BigHonk handwriting not found. Will add.
[12:25:45.707 DBG] GetFont: Loading Font Id: 1
[12:25:48.123 DBG] GetFont: Complete in 2414ms
[12:25:49.493 DBG] [Download] Request to download image at Url: [https://example.com/fonts/737762b2-2859-419b-8752-1f8bb2e03f5d.ttf]
[12:25:49.834 DBG] [Download] Request to download completed in 323ms
[12:25:57.375 DBG] Before adding... Count is 0
[12:25:58.862 DBG] After adding... Count is 1
[12:26:09.699 DBG] Font family BigHonk handwriting not found. Will add.
[12:26:09.703 DBG] GetFont: Loading Font Id: 1
[12:26:09.749 DBG] GetFont: Complete in 45ms
[12:26:09.750 DBG] [Download] Request to download image at Url: [https://example.com/fonts/737762b2-2859-419b-8752-1f8bb2e03f5d.ttf]
[12:26:10.004 DBG] [Download] Request to download completed in 253ms
[12:26:10.006 DBG] Before adding... Count is 1
[12:26:13.599 DBG] After adding... Count is 1
如您所见,添加了第一个字体,但是添加了第二个... count()保持不变(通过断点验证)。
我将运行几次,有时计数是正确的并且字体添加了-其他的却不是。谁能发现一个明显的问题?
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。