SetFontsSources
内容
[
隐藏
]SetFontsSources(FontSourceBase[])
设置 Aspose.Words 在渲染文档或嵌入字体时查找 TrueType 字体的源。
public void SetFontsSources(FontSourceBase[] sources)
范围 | 类型 | 描述 |
---|---|---|
sources | FontSourceBase[] | 包含 TrueType 字体的源数组。 |
评论
默认情况下,Aspose.Words 会查找系统中安装的字体。
设置此属性将重置所有先前加载的字体的缓存。
例子
展示如何将字体源添加到我们现有的字体源。
Document doc = new Document();
DocumentBuilder builder = new DocumentBuilder(doc);
builder.Font.Name = "Arial";
builder.Writeln("Hello world!");
builder.Font.Name = "Amethysta";
builder.Writeln("The quick brown fox jumps over the lazy dog.");
builder.Font.Name = "Junction Light";
builder.Writeln("The quick brown fox jumps over the lazy dog.");
FontSourceBase[] originalFontSources = FontSettings.DefaultInstance.GetFontsSources();
Assert.AreEqual(1, originalFontSources.Length);
Assert.True(originalFontSources[0].GetAvailableFonts().Any(f => f.FullFontName == "Arial"));
// 默认字体源缺少我们在文档中使用的两种字体。
// 当我们保存此文档时,Aspose.Words 会将后备字体应用于所有使用不可访问字体格式化的文本。
Assert.False(originalFontSources[0].GetAvailableFonts().Any(f => f.FullFontName == "Amethysta"));
Assert.False(originalFontSources[0].GetAvailableFonts().Any(f => f.FullFontName == "Junction Light"));
// 从包含字体的文件夹创建字体源。
FolderFontSource folderFontSource = new FolderFontSource(FontsDir, true);
// 应用一个新的字体源数组,其中包含原始字体源以及我们的自定义字体。
FontSourceBase[] updatedFontSources = {originalFontSources[0], folderFontSource};
FontSettings.DefaultInstance.SetFontsSources(updatedFontSources);
// 在将文档渲染为 PDF 之前,验证 Aspose.Words 是否可以访问所有必需的字体。
updatedFontSources = FontSettings.DefaultInstance.GetFontsSources();
Assert.True(updatedFontSources[0].GetAvailableFonts().Any(f => f.FullFontName == "Arial"));
Assert.True(updatedFontSources[1].GetAvailableFonts().Any(f => f.FullFontName == "Amethysta"));
Assert.True(updatedFontSources[1].GetAvailableFonts().Any(f => f.FullFontName == "Junction Light"));
doc.Save(ArtifactsDir + "FontSettings.AddFontSource.pdf");
// 恢复原始字体源。
FontSettings.DefaultInstance.SetFontsSources(originalFontSources);
也可以看看
- class FontSourceBase
- class FontSettings
- 命名空间 Aspose.Words.Fonts
- 部件 Aspose.Words
SetFontsSources(FontSourceBase[], Stream)
设置 Aspose.Words 查找 TrueType 字体的来源,并另外加载之前保存的 字体搜索缓存。
public void SetFontsSources(FontSourceBase[] sources, Stream cacheInputStream)
范围 | 类型 | 描述 |
---|---|---|
sources | FontSourceBase[] | 包含 TrueType 字体的源数组。 |
cacheInputStream | Stream | 具有保存的字体搜索缓存的输入流。 |
评论
加载以前保存的字体搜索缓存将加快字体缓存初始化过程。当对字体源的访问很复杂时(例如,当通过网络加载字体时),它是 特别有用。
保存和加载字体搜索缓存时,提供的源中的字体通过缓存键进行识别。 对于SystemFontSource
和FolderFontSource
缓存键是字体文件的path 。为了MemoryFontSource
和StreamFontSource
缓存键定义在 中CacheKey
和CacheKey
分别是properties 。为了FileFontSource
缓存键是CacheKey
属性或文件路径(如果CacheKey
是无效的
。
强烈建议在加载缓存时提供与保存缓存时相同的字体源。 字体源中的任何更改(例如添加新字体、移动字体文件或更改缓存键)都可能导致 字体不准确通过Aspose.Words 解析。
例子
展示如何加快字体缓存初始化过程。
public void LoadFontSearchCache()
{
const string cacheKey1 = "Arvo";
const string cacheKey2 = "Arvo-Bold";
FontSettings parsedFonts = new FontSettings();
FontSettings loadedCache = new FontSettings();
parsedFonts.SetFontsSources(new FontSourceBase[]
{
new FileFontSource(FontsDir + "Arvo-Regular.ttf", 0, cacheKey1),
new FileFontSource(FontsDir + "Arvo-Bold.ttf", 0, cacheKey2)
});
using (MemoryStream cacheStream = new MemoryStream())
{
parsedFonts.SaveSearchCache(cacheStream);
loadedCache.SetFontsSources(new FontSourceBase[]
{
new SearchCacheStream(cacheKey1),
new MemoryFontSource(File.ReadAllBytes(FontsDir + "Arvo-Bold.ttf"), 0, cacheKey2)
}, cacheStream);
}
Assert.AreEqual(parsedFonts.GetFontsSources().Length, loadedCache.GetFontsSources().Length);
}
/// <summary>
/// 仅在需要时加载字体数据而不是将其存储在内存中
/// 在“FontSettings”对象的整个生命周期内。
/// </summary>
private class SearchCacheStream : StreamFontSource
{
public SearchCacheStream(string cacheKey):base(0, cacheKey)
{
}
public override Stream OpenFontDataStream()
{
return File.OpenRead(FontsDir + "Arvo-Regular.ttf");
}
}
也可以看看
- class FontSourceBase
- class FontSettings
- 命名空间 Aspose.Words.Fonts
- 部件 Aspose.Words