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(), когда вам нужен единый формат вывода независимо от того, как исходный документ внедрил шрифт (EmbeddedOpenTypevsOpenType). - Установите
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. |