使用C++为Node.js配置字体以呈现电子表格
可能的使用场景
Aspose.Cells API提供渲染电子表格为图片格式,以及转换为PDF和XPS格式的功能。为了最大化转换的准确性,必须确保电子表格中使用的字体已在操作系统的默认字体目录中。如果缺少所需字体,Aspose.Cells API将尝试用可用的字体进行替代。
选择字体
以下是 Aspose.Cells API 在幕后执行的过程。
- API试图在文件系统中找到与电子表格中使用的确切字体名称匹配的字体。
- 如果API无法找到具有相同名称的精确字体,则尝试使用工作簿的DefaultStyle.getFont()属性下指定的默认字体。
- 如果API无法找到工作簿的DefaultStyle.getFont()属性下定义的字体,则尝试使用PdfSaveOptions.getDefaultFont()或ImageOrPrintOptions.getDefaultFont()属性下指定的字体。
- 如果API无法找到PdfSaveOptions.getDefaultFont()或ImageOrPrintOptions.getDefaultFont()属性下定义的字体,则尝试使用FontConfigs.getDefaultFontName()属性下指定的字体。
- 如果API无法找到FontConfigs.getDefaultFontName()属性下定义的字体,则尝试从所有可用字体中选择最合适的字体。
- 最后,如果API在文件系统中找不到任何字体,则使用Arial呈现电子表格。
设置自定义字体文件夹
Aspose.Cells API在操作系统的默认字体目录中搜索所需字体。如未找到,API会在自定义(用户定义)目录中搜索。FontConfigs类提供了多种设置自定义字体目录的方法。
- FontConfigs.setFontFolder(string, boolean):如果只有一个要设置的文件夹,则此方法很有用。
- **FontConfigs.setFontFolders(string[], boolean)**:当字体存在于多个文件夹中,而用户希望将所有文件夹分开设置而不是将所有字体合并到一个文件夹中时,此方法很有用。
- **FontConfigs.setFontSources(FontSourceBase[])**:当用户希望从多个文件夹加载字体或从字节数组加载单个字体文件或字体数据时,此机制很有用。
const AsposeCells = require("aspose.cells.node");
const path = require("path");
// The path to the documents directory.
const dataDir = path.join(__dirname, "data");
// Defining string variables to store paths to font folders & font file
const fontFolder1 = path.join(dataDir, "Arial");
const fontFolder2 = path.join(dataDir, "Calibri");
const fontFile = path.join(dataDir, "arial.ttf");
// Setting first font folder with SetFontFolder method
// Second parameter directs the API to search the subfolders for font files
AsposeCells.FontConfigs.setFontFolder(fontFolder1, true);
// Setting both font folders with SetFontFolders method
// Second parameter prohibits the API to search the subfolders for font files
AsposeCells.FontConfigs.setFontFolders([fontFolder1, fontFolder2], false);
// Defining FolderFontSource
const sourceFolder = new AsposeCells.FolderFontSource(fontFolder1, false);
// Defining FileFontSource
const sourceFile = new AsposeCells.FileFontSource(fontFile);
// Defining MemoryFontSource
const sourceMemory = new AsposeCells.MemoryFontSource(require("fs").readFileSync(fontFile));
// Setting font sources
AsposeCells.FontConfigs.setFontSources([sourceFolder, sourceFile, sourceMemory]);
字体替换机制
Aspose.Cells API还提供了指定替代字体以便渲染的能力。当目标机器上没有所需字体时,此机制非常有用。用户可以提供一份字体名称列表作为替代。为实现此功能,Aspose.Cells API提供了接受两个参数的FontConfigs.setFontSubstitutes(string, string[])**方法,第一个参数为string类型,表示需要替代的字体名称,第二个参数为string**数组,列出作为原字体替代的字体名称。
这里是一个简单的使用场景。
const AsposeCells = require("aspose.cells.node");
const path = require("path");
// The path to the documents directory.
const dataDir = path.join(__dirname, "data");
const filePath = path.join(dataDir, "sample.xlsx");
// Loads the workbook which contains hidden external links
const workbook = new AsposeCells.Workbook(filePath);
// Substituting the Arial font with Times New Roman & Calibri
AsposeCells.FontConfigs.setFontSubstitutes("Arial", ["Times New Roman", "Calibri"]);
信息收集
除上述方法外,Aspose.Cells API还提供了收集已设置的源和替代信息的方式。
- FontConfigs.getFontSources()方法返回一个包含指定字体源列表的FontSourceBase类型数组。如果未设置任何源,FontConfigs.getFontSources()方法将返回空数组。
- FontConfigs.getFontSubstitutes(string)方法接受一个string类型的参数,可以用来指定已设置替代的字体名。如未为该字体名设置替代,则FontConfigs.getFontSubstitutes(string)方法返回null。