Fonts

Fonts

Это руководство показывает, как проверять шрифты, указанные в документе, извлекать внедрённые данные шрифтов и управлять TrueType встраиванием шрифтов при сохранении с помощью Aspose.Words FOSS для .NET. Aspose.Words FOSS для .NET отслеживает каждый шрифт, указанный загруженным документом, через FontInfoCollection, и предоставляет метаданные по каждому шрифту, извлечение встроенных шрифтов и управление встраиванием при сохранении через FontInfo. Document.FontSettings и LoadOptions.FontSettings предоставляют (намеренно минимальную в этом издании) точку входа FontSettings.


Проверка шрифтов, используемых в документе

DocumentBase.FontInfos (наследуется от Document) возвращает FontInfoCollection, описывающий каждый шрифт, указанный где-либо в документе. Обращайтесь к нему по имени (например, fontInfos["Arial"]), проверяйте его существование с помощью Contains(name), подсчитывайте их с помощью Count или перечисляйте всю коллекцию через GetEnumerator().


Свойства шрифтов и классификация

Каждый FontInfo описывает один шрифт: Name и AltName идентифицируют его, Family классифицирует его через перечисление FontFamily (Auto, Roman, Swiss, Modern, Script, Decorative), Pitch сообщает его FontPitch (Default, Fixed, Variable), а IsTrueType, Charset и Panose раскрывают данные более низкого уровня сопоставления шрифтов.


Извлечение встроенных шрифтов

Если документ содержит встроенные шрифты, FontInfo.GetEmbeddedFont(format, style) возвращает необработанные байты встроенного шрифта для заданного EmbeddedFontFormat (EmbeddedOpenType или OpenType) и EmbeddedFontStyle (Regular, Bold, Italic, BoldItalic). GetEmbeddedFontAsOpenType(style) возвращает шрифт, преобразованный непосредственно в формат OpenType, независимо от того, как он был изначально встроен.


Права лицензирования встраивания шрифтов

Перед извлечением или повторным встраиванием шрифта проверьте FontInfo.EmbeddingLicensingRights, объект FontEmbeddingLicensingRights. EmbeddingUsagePermissions сообщает уровень лицензии через перечисление FontEmbeddingUsagePermissions (Installable, RestrictedLicense, PrintAndPreview, Editable), в то время как NoSubsetting и BitmapEmbeddingOnly отмечают дополнительные ограничения, установленные поставщиком шрифта.


Управление встраиванием шрифтов при сохранении

FontInfoCollection также содержит переключатели встраивания на уровне документа: установите EmbedTrueTypeFonts в значение true, чтобы встраивать каждый TrueType шрифт, используемый в документе при сохранении, EmbedSystemFonts, чтобы включать шрифты, обычно предполагаемые присутствующими в любой системе, и SaveSubsetFonts, чтобы встраивать только фактически используемые глифы, а не полный шрифт.


Область FontSettings в этом издании

Document.FontSettings и LoadOptions.FontSettings оба возвращают объект FontSettings, а FontSettings.DefaultInstance предоставляет общую экземпляр по умолчанию. В этом FOSS-издании поверхность FontSettings’ API ограничена только этим свойством экземпляра по умолчанию — разрешение шрифтов из папок и системных источников, которое в других частях Aspose.Words используется для подстановки или разрешения шрифтов при верстке и рендеринге страниц, отсутствует, поскольку верстка и рендеринг выходят за рамки данного издания. Обработка шрифтов здесь означает проверку метаданных и встраивание, а не подстановку шрифтов для рендеринга.


Советы и лучшие практики

  • Всегда проверяйте FontInfo.EmbeddingLicensingRights.EmbeddingUsagePermissions перед извлечением или распространением внедрённого шрифта — некоторые шрифты лицензированы только RestrictedLicense или PrintAndPreview.
  • Используйте GetEmbeddedFontAsOpenType(), когда вам нужен единый формат вывода независимо от того, как исходный документ внедрил шрифт (EmbeddedOpenType vs OpenType).
  • Установите FontInfoCollection.SaveSubsetFonts в значение true, чтобы уменьшить размер выходного файла при внедрении шрифтов, использующих лишь несколько глифов.
  • FontInfoCollection.Contains(name) дешевле, чем индексировать и обрабатывать неудачный поиск (например, fontInfos[name]), когда вам нужно лишь проверить наличие шрифта.

Распространённые проблемы

ПроблемаПричинаИсправление
GetEmbeddedFont() не возвращает полезных данныхУказанный шрифт фактически не встроен в документПроверьте настройки внедрения документа, прежде чем предполагать наличие данных шрифта
Индексация FontInfoCollection по имени ничего не находитИмя шрифта не совпадает точно, включая регистрПеречислите FontInfoCollection с GetEnumerator() для подтверждения точной строки Name
Ожидаемые API подстановки/разрешения шрифтов отсутствуютРазрешение источников шрифтов на основе папок и системы не реализовано в этом FOSS-изданииИспользуйте FontInfo/FontInfoCollection только для метаданных и встраивания; подстановка шрифтов для рендеринга не входит в область этой версии

FAQ

Как вывести список всех шрифтов, на которые ссылается документ?

Перечислите Document.FontInfos (это FontInfoCollection) через GetEnumerator() или обратитесь к нему по имени, чтобы найти конкретный элемент (например, fontInfos["Arial"]).

Могу ли я извлечь необработанные байты встроенного шрифта из документа?

Да, если шрифт встроен — вызовите FontInfo.GetEmbeddedFont(format, style) для оригинального встроенного формата, или GetEmbeddedFontAsOpenType(style), чтобы нормализовать результат до OpenType.

Как убедиться, что шрифты встраиваются при сохранении документа?

Установите FontInfoCollection.EmbedTrueTypeFonts в true перед сохранением; добавьте EmbedSystemFonts, если также нужны шрифты, предполагаемые присутствующими в любой системе, и SaveSubsetFonts, чтобы встроить только используемые глифы.

Поддерживает ли это издание разрешение шрифтов из пользовательской папки для рендеринга?

Нет — разрешение источников шрифтов на основе папок и системы (FontSettings конфигурация источника) здесь не реализовано, поскольку оно служит для верстки страниц и рендеринга, что выходит за рамки данного издания FOSS.

Что означает FontEmbeddingLicensingRights.NoSubsetting?

Это флаг лицензирования, сообщаемый правами встраивания поставщика шрифта: когда true, шрифт нельзя субсетировать только до используемых глифов.


API Reference Сводка

Класс / МетодОписание:
FontInfoCollectionШрифты, указанные в документе; индексатор по имени (fontInfos[name]), Contains(), Count, GetEnumerator(), плюс EmbedTrueTypeFonts/EmbedSystemFonts/SaveSubsetFonts
FontInfoМетаданные одного шрифта: Name, AltName, Family, Pitch, IsTrueType, Charset, Panose, EmbeddingLicensingRights
FontInfo.GetEmbeddedFont() / GetEmbeddedFontAsOpenType()Извлечь встроенные байты шрифта
EmbeddedFontFormat / EmbeddedFontStyleПеречисления, определяющие формат и вариант стиля встроенного шрифта
FontEmbeddingLicensingRights / FontEmbeddingUsagePermissionsОграничения лицензии встраивания, сообщаемые для каждого шрифта
FontSettingsМинимальная точка входа font-settings (Document.FontSettings, LoadOptions.FontSettings); в этом издании нет разрешения font-source.

См. также:

 Русский