Настройка шрифтов PowerPoint в .NET
Aspose Slides позволяет загружать эти шрифты с помощью метода FontsLoader.LoadExternalFonts :
Загрузка пользовательских шрифтов
Aspose.Slides позволяет загружать шрифты, используемые в презентации, без их установки в системе. Это влияет на вывод при экспорте — например PDF, изображения и другие поддерживаемые форматы — поэтому получаемые документы выглядят одинаково в разных средах. Шрифты загружаются из пользовательских каталогов.
- Укажите одну или несколько папок, содержащих файлы шрифтов.
- Вызовите статический метод FontsLoader.LoadExternalFonts для загрузки шрифтов из указанных папок.
- Загрузите и отрендерите/экспортируйте презентацию.
- Вызовите FontsLoader.ClearCache для очистки кэша шрифтов.
Ниже приведён пример кода, демонстрирующий процесс загрузки шрифтов:
// Определите папки, содержащие пользовательские файлы шрифтов.
string[] fontFolders = { externalFontFolder1, externalFontFolder2 };
// Загрузите пользовательские шрифты из указанных папок.
FontsLoader.LoadExternalFonts(fontFolders);
using Presentation presentation = new Presentation("sample.pptx");
// Отрендерите/экспортируйте презентацию (например, в PDF, изображения или другие форматы), используя загруженные шрифты.
presentation.Save("output.pdf", SaveFormat.Pdf);
// Очистите кэш шрифтов после завершения работы.
FontsLoader.ClearCache();
Note
FontsLoader.LoadExternalFonts добавляет дополнительные папки в пути поиска шрифтов, но не меняет порядок инициализации шрифтов. Шрифты инициализируются в следующем порядке:
- Путь к шрифтам операционной системы по умолчанию.
- Пути, загруженные через FontsLoader.
Получить пользовательские папки шрифтов
Aspose.Slides предоставляет метод GetFontFolders для поиска папок шрифтов. Этот метод возвращает папки, добавленные через метод LoadExternalFonts, а также системные папки шрифтов.
Пример кода на C# показывает, как использовать GetFontFolders:
// Эта строка выводит папки, которые проверяются на наличие файлов шрифтов.
// Это папки, добавленные через метод LoadExternalFonts и системные папки шрифтов.
string[] fontFolders = FontsLoader.GetFontFolders();
Указать пользовательские шрифты, используемые в презентации
Aspose.Slides предоставляет свойство DocumentLevelFontSources для указания внешних шрифтов, которые будут использованы в презентации.
Пример кода на C# показывает, как использовать свойство DocumentLevelFontSources:
byte[] memoryFont1 = File.ReadAllBytes("customfonts\\CustomFont1.ttf");
byte[] memoryFont2 = File.ReadAllBytes("customfonts\\CustomFont2.ttf");
LoadOptions loadOptions = new LoadOptions();
loadOptions.DocumentLevelFontSources.FontFolders = new string[] { "assets\\fonts", "global\\fonts" };
loadOptions.DocumentLevelFontSources.MemoryFonts = new byte[][] { memoryFont1, memoryFont2 };
using (IPresentation presentation = new Presentation("MyPresentation.pptx", loadOptions))
{
// Работа с презентацией
// CustomFont1, CustomFont2 и шрифты из папок assets\fonts & global\fonts и их подпапок доступны презентации
}
Управление шрифтами внешне
Aspose.Slides предоставляет метод LoadExternalFont(byte[] data) для загрузки внешних шрифтов из бинарных данных.
Пример кода на C# демонстрирует процесс загрузки шрифта из массива байтов:
FontsLoader.LoadExternalFont(File.ReadAllBytes("ARIALN.TTF"));
FontsLoader.LoadExternalFont(File.ReadAllBytes("ARIALNBI.TTF"));
FontsLoader.LoadExternalFont(File.ReadAllBytes("ARIALNI.TTF"));
try
{
using (Presentation pres = new Presentation(""))
{
// внешний шрифт загружен на время жизни презентации
}
}
finally
{
FontsLoader.ClearCache();
}
Вопросы и ответы
Влияют ли пользовательские шрифты на экспорт во все форматы (PDF, PNG, SVG, HTML)?
Да. Подключённые шрифты используются рендерером во всех форматах экспорта.
Встраиваются ли пользовательские шрифты автоматически в полученный PPTX?
Нет. Регистрация шрифта для рендеринга не равна его встраиванию в PPTX. Если нужен шрифт внутри файла презентации, используйте явные возможности встраивания.
Можно ли управлять поведением fallback, если у пользовательского шрифта отсутствуют некоторые глифы?
Да. Настройте замену шрифтов, правила замены и наборы fallback для точного указания шрифта, который будет использован при отсутствии запрашиваемого глифа.
Можно ли использовать шрифты в контейнерах Linux/Docker без их системной установки?
Да. Указывайте свои папки со шрифтами или загружайте шрифты из массивов байтов. Это убирает любую зависимость от системных каталогов шрифтов в образе контейнера.
Что насчёт лицензирования — могу ли я встраивать любые пользовательские шрифты без ограничений?
Вы отвечаете за соблюдение лицензий шрифтов. Условия различаются; некоторые лицензии запрещают встраивание или коммерческое использование. Всегда проверяйте EULA шрифта перед распространением результатов.