Настройка шрифтов для рендеринга таблиц с помощью Node.js через C++
Возможные сценарии использования
API Aspose.Cells позволяют отображать таблицы в изображениях и конвертировать их в PDF и XPS форматы. Для максимальной точности конвертации необходимо, чтобы используемые в таблице шрифты были доступны в стандартной директории шрифтов операционной системы. Если необходимые шрифты отсутствуют, API попытается заменить их доступными шрифтами.
Выбор шрифтов
Ниже приведен процесс, который API Aspose.Cells следует за кулисами.
- API пытается найти шрифты на файловой системе, соответствующие точному имени шрифта, используемому в электронной таблице.
- Если API не может найти шрифты с точно таким же именем, он пытается использовать шрифт по умолчанию, указанный в свойстве DefaultStyle.getFont() книги.
- Если API не может найти шрифт, определенный в свойстве DefaultStyle.getFont() книги, он пытается использовать шрифт, указанный в свойствах PdfSaveOptions.getDefaultFont() или ImageOrPrintOptions.getDefaultFont().
- Если API не может найти шрифт, определенный в свойствах PdfSaveOptions.getDefaultFont() или ImageOrPrintOptions.getDefaultFont(), он пытается использовать шрифт, указанный в свойстве FontConfigs.getDefaultFontName().
- Если API не может найти шрифт, определенный в свойстве FontConfigs.getDefaultFontName(), он пытается выбрать наиболее подходящие шрифты из всех доступных шрифтов.
- Наконец, если API не может найти шрифты на файловой системе, он визуализирует электронную таблицу с использованием шрифта Arial.
Установка пользовательских каталогов шрифтов
API Aspose.Cells ищут нужные шрифты в стандартной директории шрифтов операционной системы. Если шрифты не найдены там, поиск продолжается по пользовательским (настроенным) каталогам. Класс 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]);
Механизм подстановки шрифтов
API Aspose.Cells также позволяют указывать заменяющий шрифт для рендеринга. Это полезно, когда необходимый шрифт недоступен на машине, где выполняется конвертация. Пользователи могут задать список имен шрифтов для замены оригинальных. Для этого API предоставляет метод **FontConfigs.setFontSubstitutes(string, string[])**, который принимает 2 параметра. Первый — это строка 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"]);
Сбор информации
Помимо вышеуказанных методов, API Aspose.Cells позволяют собирать информацию о выбранных источниках и заменах шрифтов.
- Метод FontConfigs.getFontSources() возвращает массив типа FontSourceBase, содержащий список указанных источников шрифтов. Если источники не заданы, метод FontConfigs.getFontSources() возвратит пустой массив.
- Метод FontConfigs.getFontSubstitutes(string) принимает параметр типа string, позволяющий указать имя шрифта, для которого задана замена. Если для указанного шрифта замена не задана, метод FontConfigs.getFontSubstitutes(string) вернет null.