Укажите истинное Тип расположения шрифтов
Эта тема описывает поведение по умолчанию Aspose.Words когда он ищет шрифты TrueType, включая специфические отличия операционной системы, и демонстрирует, как указать источники шрифтов пользователя.
The FontSourceBase Класс используется для указания различных источников шрифтов. Существует несколько реализаций FontSourceBase класс:
Подробная информация о реализации некоторых классов объясняется ниже.
Загрузка шрифтов из системы
Есть особая SystemFontSource Класс, который всегда используется по умолчанию. Он представляет все шрифты TrueType, установленные в системе. Таким образом, можно создать список источников с SystemFontSource и любые другие необходимые источники:
Один экземпляр из SystemFontSource Класс определяется по умолчанию в FontSettings. На разных операционных системах шрифты могут располагаться в разных местах. Однако, используя a FontSettings Пример для каждого документа не является оптимальным решением. В большинстве случаев, используя DefaultInstance Должно быть достаточно.
Инстанции для каждого документа нужны только в том случае, если для разных документов требуется использовать разные источники шрифтов, что является редким случаем. Использование нескольких FontSettings Примеры снижают производительность, потому что они не разделяют кэш.
Где? Aspose.Words Ищите шрифты TrueType Windows
В большинстве случаев, Windows Пользователи не сталкиваются со значительными проблемами с пропущенными шрифтами или неправильными макетами. Как правило, Aspose.Words проходит через документ и, когда он сталкивается со ссылкой шрифта, успешно извлекает данные шрифта из системной папки.
На Windows Aspose.Words Сначала берет все доступные шрифты из %windir% Папка шрифтов. Эта настройка будет работать для вас большую часть времени. Вы указываете только свои собственные папки шрифтов, если это необходимо. Aspose.Words для .NET Ищите дополнительные шрифты, зарегистрированные в HKEY LOCAL_MACHINE\SOFTWAREMicrosoft\Windows NT\CurrentVersion\ Ключ реестра шрифтов. Кроме того, Windows 10 позволяет устанавливать шрифты для текущего пользователя. Шрифты помещаются в %userprofile%\ AppData\LocalMicrosoft\Windows\ Папка шрифтов, а также указанная в HKEY_ Current_USER\SoftwareMicrosoft\Windows NT\CurrentVersion\ Реестр шрифтов, где Aspose.Words Будем искать эти шрифты.
Если документ содержит встроенные шрифты, Aspose.Words Вы можете прочитать соответствующие данные шрифта из документа и использовать их для создания макета документа. Документы также могут содержать ссылки на шрифты, которых нет в системных папках, и в этом случае работают следующие сценарии:
- Пользователи могут создавать новые источники шрифтов через FontSettings класс
- Aspose.Words можно попытаться заменить пропущенный шрифт на аналогичный
Фонты на Non-Windows Системы
Aspose.Words будет искать шрифты в системных папках шрифтов. Список этих папок можно увидеть по GetSystemFontFolders метод. Если не найдено поддерживаемых шрифтов, Aspose.Words Используется встроенный по умолчанию шрифт Fanwood.ttf.
Поскольку метрики шрифтов Windows и не-Windows OS отличается, Aspose.Words делает все возможное, чтобы найти похожий шрифт и построить макет, похожий на оригинал. Однако это не всегда возможно. В этих случаях, FontSettings Класс должен использоваться для добавления пользовательских шрифтов или правил замены.
Где? Aspose.Words Ищите шрифты TrueType Linux
Различный Linux Дистрибутивы могут хранить шрифты в разных папках. Aspose.Words Ищите шрифты в нескольких местах. По умолчанию, Aspose.Words /usr/share/fonts
/usr/local/share/fonts
/usr/X11R6/lib/X11/fonts
Это поведение по умолчанию будет работать для большинства Linux дистрибутивы, но это не гарантируется работать все время, в этом случае вам может потребоваться указать местоположение true шрифтов явно. Для этого вам нужно знать, где на вашем устройстве установлены шрифты TrueType. Linux распределения.
Где? Aspose.Words Поиск шрифтов TrueType на Mac OS X
Aspose.Words Поиск шрифтов в папке /Library/Fonts, которая является стандартным расположением шрифтов TrueType на Mac OS X. Хотя этот параметр будет работать для вас большую часть времени, вам может потребоваться указать свои собственные папки шрифтов в случае, когда вам нужно.
Загрузка шрифтов из папки
Если обрабатываемый документ содержит ссылки на шрифты, которых нет в системе, или вы не хотите добавлять их в системную папку, или вам не хватает разрешений, то лучшим решением будет добавить папку со своими собственными шрифтами с помощью системы. SetFontsSources метод. Это позволит заменить системный источник на пользовательский. Aspose.Words больше не будет искать шрифты в реестре или Windows\ Папка шрифта и вместо этого только сканирование шрифтов в указанной папке (ах). The GetFontSources Метод возвращает соответствующие значения.
Укажите одну или несколько папок шрифта
The SetFontsFolder и SetFontsFolders Методы являются короткими для SetFontSources Способ с одним или несколькими FolderFontSource Примеры. Эти методы используются для определения того, где Aspose.Words Нужно искать шрифты. Если папка отсутствует или недоступна, Aspose.Words Просто игнорирует эту папку. Если все папки, включая источники для замены шрифта, были проигнорированы, Aspose.Words По умолчанию будет использоваться шрифт Fanwood.
Следующий пример показывает, как установить папку или источник, который Aspose.Words Впоследствии будет использоваться для поиска шрифтов TrueType при рендеринге или встраивании шрифтов:
Вы можете скачать файл шаблона этого примера из Aspose.Words GitHub.
Дополнительный булевой параметр контролирует, сканируются ли шрифты рекурсивно через все папки, следовательно, сканируют все детские папки указанной папки. Следующий пример показывает, как установить Aspose.Words искать в нескольких папках шрифты TrueType при рендеринге или встраивании шрифтов:
Обратите внимание на приоритеты. Если есть шрифты с одинаковым фамилией и стилем в разных источниках шрифтов, то Aspose.Words Выберите шрифт из источника с более высоким приоритетом. См. описание поля “Приоритет” ниже.
Если вы не хотите использовать системные шрифты, Aspose.Words Позволяет игнорировать их и использовать только собственные шрифты:
Приоритетное имущество
The Priority Собственность используется, когда есть шрифты с одинаковым именем и стилем в разных источниках шрифтов. В этом случае Aspose.Words Выберите шрифт из источника с более высоким приоритетным значением. Например, есть старая версия шрифта в системной папке, и клиент добавил новую версию того же шрифта в пользовательскую папку.
Загрузка шрифтов от Stream
Aspose.Words обеспечивает StreamFontSource класс, который позволяет загружать шрифты из потока. Для использования источника потокового шрифта пользователю необходимо создать производный класс из StreamFontSource и обеспечить осуществление OpenFontDataStream метод. The OpenFontDataStream Метод можно назвать несколько раз. Впервые он будет называться Aspose.Words сканирует предоставленные источники шрифтов, чтобы получить список доступных шрифтов. Позже его можно назвать, если шрифт используется в документе для разбора данных шрифта и встраивания данных шрифта в некоторые выходные форматы. StreamFontSource может быть полезным, поскольку позволяет загружать данные шрифта только тогда, когда это необходимо, и не хранить их в памяти для Настройки шрифтов пожизненно.
StreamFontSource является альтернативой MemoryFontSource Поскольку всегда можно загрузить поток в память и передать его в MemoryFontSource. Разница заключается в том, что MemoryFontSource хранится в памяти постоянно, и StreamFontSource Загружен по требованию и утилизирован сразу. Но он может быть загружен несколько раз, как описано выше. В некоторых случаях MemoryFontSource предпочтительнее, а в других StreamFontSource.
Сохраните и загрузите кэш поиска шрифта
При первом поиске шрифта, Aspose.Words Итерирует по источникам шрифта, указанным пользователем, и формирует кэш поиска шрифта на основе данных из этих источников. Таким образом, кэш будет собирать информацию о доступных шрифтах: семействе шрифтов, стиле, полном названии шрифта и других. Последующие звонки, Aspose.Words осуществляет поиск информации о желаемом шрифте по его названию в кэше поиска шрифта, после чего анализирует указанные файлы для использования шрифта.
Процедура анализа всех доступных файлов шрифтов для инициализации кэша занимает довольно много времени. Aspose.Words позволяет сохранять и загружать кэш с помощью SaveSearchCache Способ решения проблемы производительности. То есть пользователь может загрузить ранее сохраненный кэш из файла и пропустить этап разбора всех доступных файлов шрифтов.
Следующий пример кода показывает, как заранее подготовить источники шрифтов и создать кэш поиска шрифтов:
// Prepare font sources and generate font search cache beforehand.
FileFontSource fileSource = new FileFontSource(filePath, fileSourcePriority, fileSourceKey);
MemoryFontSource memorySource = new MemoryFontSource(fontData, memorySourcePriority, memorySourceKey);
StreamFontSource streamSource = new SteamFontSourceMemoryImpl(streamSourcePriority, streamSourceKey);
FontSettings settings = new FontSettings();
settings.SetFontsSources(new FontSourceBase[] { fileSource, memorySource, streamSource });
settings.SaveSearchCache(cacheOutputStream);
Следующий пример кода показывает, как установить источники шрифтов и загрузить кэш поиска перед обработкой документов:
// Set font sources and load search cache before processing documents. Note that sources should be the same as when saving font search cache.
FileFontSource fileSource = new FileFontSource(filePath, fileSourcePriority, fileSourceKey);
MemoryFontSource memorySource = new MemoryFontSource(fontData, memorySourcePriority, memorySourceKey);
StreamFontSource streamSource = new SteamFontSourceMemoryImpl(streamSourcePriority, streamSourceKey);
FontSettings settings = new FontSettings();
settings.SetFontsSources(new FontSourceBase[] { fileSource, memorySource, streamSource }, cacheInputStream);
Поисковый кэш отлично подходит для Aspose.Words интеграция в AWS Lambda из-за ряда ограничений. Например, на основной размер контейнера и, как следствие, на количество шрифтов.
Кэш также подходит для других сценариев, когда шрифты загружаются по сети. Или для сценариев, когда нет возможности хранить FontSettings
Пример с загруженным кэшем.
Получите список доступных шрифтов
Если вы хотите получить список доступных шрифтов, которые, например, могут быть использованы для рендеринга PDF-документа, вы можете использовать GetAvailableFonts Способ, как показано в следующем примере кода. The PhysicalFontInfo класс указывает информацию о физическом шрифте, доступном для Aspose.Words Двигатель шрифта: