Манипулирование шрифтами TrueType и их замена
Aspose.Words требуются шрифты TrueType для выполнения различных задач, включая перевод документов в формат фиксированной страницы, например, PDF или XPS. Когда Aspose.Words отрисовывает документ, ему необходимо выполнить встраивание и подмножество шрифтов TrueType в результирующий документ, что является обычной практикой при создании документа, включая популярные форматы PDF или XPS. Это гарантирует, что документ будет выглядеть одинаково для любого пользователя. Кроме того, спецификация XPS требует, чтобы шрифты всегда были встроены в документ.
Чтобы гарантировать, что Aspose.Words точно отображает символы и успешно вставляет соответствующие шрифты, должны быть выполнены следующие условия:
- Aspose.Words должна быть возможность находить файлы шрифтов TrueType в системе и получать к ним доступ.
- Для Aspose.Words должно быть доступно достаточное количество шрифтов TrueType, предпочтительно с теми же названиями семейств шрифтов, что и те, которые используются в документе.
Обратите внимание, что шрифт в документе представляет собой объект, такой как фамилия, стиль, размер, цвет, который отличается от объекта TrueType
font (физический шрифт). Aspose.Words преобразует шрифт в документе в физический шрифт на определенном этапе обработки. Это позволяет выполнять определенные задачи, чаще всего это задача расчета размера текста при создании макета и встраивания/подгонки к форматам фиксированных страниц. Аналогичным образом включен ряд других, менее популярных задач, таких как разрешение и замена шрифтов при загрузке HTML или встраивание/подстановка в некоторые форматы flow.
Манипулирование шрифтами и проблемы с производительностью
Все доступные механизмы манипулирования шрифтами содержатся в классе FontSettings. Этот класс отвечает за выборку шрифтов из определенных источников, а также за процесс замены шрифта, как описано ниже.
Анализ шрифтов выполняется в несколько этапов:
- Получение информации о шрифте, выбор из всех доступных шрифтов.
- Анализ разрешенных шрифтов для получения доступных глифов и метрик (горизонтальных и вертикальных).
- Анализ разрешенных шрифтов для встраивания и подгруппирования.
Когда Aspose.Words впервые встречает шрифт в документе, он пытается получить основную информацию о шрифте, такую как полное название шрифта, фамилия, версия, стиль, из файлов шрифтов, расположенных в каждом источнике шрифта. После извлечения всех шрифтов Aspose.Words использует эти сведения для поиска требуемых данных шрифта или подходящей замены запрошенного шрифта.
Поскольку описанная выше процедура занимает много времени, это может негативно сказаться на производительности приложения при его первом запуске. Однако каждый экземпляр FontSettings имеет свой собственный кэш, что может сократить время обработки последующих документов. Например, вы можете совместно использовать экземпляр класса FontSettings для разных документов, что позволяет ускорить загрузку документов. Следующий пример демонстрирует это:
В случае, когда FontSettings не определено явно, Aspose.Words использует экземпляр по умолчанию FontSettings. Этот экземпляр также автоматически распределяется между документами и может быть извлечен следующим образом:
Если вы уверены, что для всех обрабатываемых документов требуются одинаковые настройки шрифта, рекомендуется настроить и использовать экземпляр по умолчанию FontSettings. Предположим, что вам нужно использовать одинаковые источники шрифтов для всех ваших документов. В этом случае вы можете просто изменить экземпляр по умолчанию следующим образом:
Доступность шрифта и его замена
Текст в документе может быть отформатирован различными шрифтами, такими как Arial, Times New Roman, Verdana и другими. При отображении документа Aspose.Words выполняется попытка выбрать шрифты, указанные в документе.
Однако бывают ситуации, когда невозможно найти точный шрифт, и Aspose.Words необходимо заменить его на аналогичный шрифт. Aspose.Words выбор шрифта осуществляется в соответствии со следующим процессом:
- Aspose.Words пытается найти шрифт с точным названием среди доступных источников шрифтов.
- Aspose.Words пытается найти нужный шрифт среди шрифтов, встроенных в исходный документ. Некоторые форматы документов, такие как DOCX, могут содержать встроенные шрифты.
- Если Aspose.Words не удается найти требуемый шрифт с точным совпадением названия и свойства alt_name, определенного для этого шрифта, то Aspose.Words найдет шрифт, определенный с помощью alt_name из класса FontInfo, который определяет информацию о шрифте.
- Если Aspose.Words не удается найти определенный шрифт, а alt_name также не определен, то правила замены шрифта применяются последовательно, как описано ниже (когда соответствующая замена найдена, процесс замены шрифта останавливается и следующий шаг не выполняется).:
- Сначала Aspose.Words пытается обработать название шрифта, чтобы получить замену, в частности, он пытается удалить суффиксы с разделителями “-” и “,”.
Если выполняется это правило замены, то “Шрифт ‘’ не найден. Используя ‘ “вместо шрифта. Причина: подмена названия шрифта”. появляется предупреждение. - Затем Aspose.Words попытается применить настройки шрифта OS, если они доступны, с помощью утилиты FontConfig. Эта функция, не совместимая с Windows, должна использоваться с OS, совместимым с FontConfig. Практически в любой Unix-системе OS уже есть библиотека
FontConfig
, предназначенная для обеспечения общесистемной настройки шрифтов, кастомизации и доступа к приложениям. В противном случае пользователь может легко установить эту библиотеку. Aspose.Words умеет запрашивать данные и интерпретировать результаты FontConfig для своих собственных целей. По умолчанию утилитаFontConfig
отключена. Вы можете включить ее следующим образом:
fontSettings.substitution_settings.font_config_substitution.enabled = True
- На следующем шаге используется простой, но мощный механизм, называемый правилом подстановки Table. По умолчанию эта функция активна и доступна для данной операционной системы. Шрифт Aspose.Words будет заменен этим правилом, если он не был заменен правилом подстановки
FontConfig
.
Aspose.Words использует таблицы XML, которые определяют основные правила подстановки для различных OS. В соответствии с правилом подстановки в таблицу, будет использоваться список заменяющих названий шрифтов.
XMLГлавной особенностью этого правила является возможность загрузки ваших собственных таблиц подстановки, как это показано в следующем примере:<TableSubstitutionSettings xmlns="Aspose.Words"> <SubstitutesTable> <Item OriginalFont="Arabic Transparent" SubstituteFonts="Arial" /> … </SubstitutesTable> </TableSubstitutionSettings>
Несмотря на гибкость этого механизма, в некоторых случаях его лучше отключить, как показано ниже:fontSettings.substitution_settings.table_substitution.load("Table.xml")
fontSettings.substitution_settings.table_substitution.enabled = False
- Правило подстановки FontInfo будет применено, если не удается найти шрифт с помощью правила подстановки в таблицу. Этот механизм включен по умолчанию. Aspose.Words находит наиболее подходящий шрифт в соответствии с информацией о шрифте, содержащейся в конкретном документе. Эту информацию можно получить из класса FontInfo, как показано ниже:
Пользователи не могут вмешиваться в рабочий процесс этой функции, если только они не решат отключить ее в случае неудовлетворительных результатов:fontInfos = doc.font_infos
Если FontInfo недоступно для отсутствующего шрифта, то процесс останавливается.fontSettings.substitution_settings.font_info_substitution.enabled = False
- правило подстановки DefaultFont будет применено в том случае, если подстановка
FontInfo
также завершилась неудачей. Это правило также включено по умолчанию. В соответствии с этим правилом Aspose.Words попытается использовать шрифт по умолчанию, указанный в свойстве default_font_name. Если пользователь не выбрал свой собственный шрифт по умолчанию, то в качестве шрифта по умолчанию будет использоваться “Times New Roman”. Это правило можно отключить, как показано ниже:
Чтобы проверить текущий шрифт по умолчанию, используйте:fontSettings.substitution_settings.default_font_substitution.enabled = False
Чтобы настроить свой собственный вариант замены, примените:fontSettings.substitution_settings.default_font_substitution.default_font_name
fontSettings.substitution_settings.default_font_substitution.default_font_name = "Arial"
- Сначала Aspose.Words пытается обработать название шрифта, чтобы получить замену, в частности, он пытается удалить суффиксы с разделителями “-” и “,”.
- Если Aspose.Words не может выполнить замену шрифта, он пытается получить первый доступный шрифт из доступных источников шрифтов.
- Наконец, если Aspose.Words не удается найти какие-либо шрифты среди доступных источников шрифтов, документ отрисовывается с использованием бесплатного шрифта Fanwood, встроенного в пакет Aspose.Words.
Если доступно значение FontInfo, параметр FontInfo substitution rule всегда будет разрешать шрифт и переопределять правило шрифта по умолчанию. Если вы хотите использовать правило шрифта по умолчанию, вам следует отключить параметр FontInfo substitution rule. Обратите внимание, что FontConfig substitution rule в большинстве случаев определяет шрифт и, таким образом, переопределяет все остальные правила.
Настройки шрифта FallBack из XML
В Aspose.Words используются два разных механизма - подстановка шрифта и резервный вариант шрифта. Подстановка шрифта используется, когда шрифт, указанный в документе, не может быть найден среди источников шрифта, как это было описано в предыдущих разделах. Механизм восстановления шрифта используется, когда шрифт разрешен, но он не содержит определенного символа. В этом случае Aspose.Words пытается использовать один из резервных шрифтов для символа.
Существует метод build_automatic, который автоматически создает резервные настройки путем сканирования доступных шрифтов. Поскольку этот метод может привести к неоптимальным резервным настройкам, вы можете управлять поведением резервного шрифта, используя свойства класса FontFallbackSettings. Этот класс определяет настройки резервного механизма font. Вы можете получить экземпляр класса FontFallbackSettings следующим образом:
settings = fontSettings.fallback_settings
Аналогично Table substitution rule, этот механизм использует XML таблицы для настройки. Эти XML таблицы могут быть загружены и сохранены следующими способами:
fontSettings.fallback_settings.load("MyNewFallbackTable.xml")
fontSettings.fallback_settings.save("Current_FallbackTable.xml")
Версия Aspose.Words содержит две таблицы: MsOfficeFallbackSetting.xml и NotoFallbackSetting.xml.
Таблица MsOfficeFallbackSetting определяет стратегию замены для диапазона символов, которая аналогична стратегии, используемой в Microsoft Word. Таким образом, стратегия требует установки шрифтов Office Microsoft. MsOfficeFallbackSetting можно активировать следующим способом:
fontSettings.fallback_settings.load_ms_office_fallback_settings()
Таблица NotoFallbackSetting создана специально для использования со шрифтами Google Noto (подробнее о настройках шрифта Google Noto читайте в следующем разделе) и может быть включена следующим образом:
fontSettings.fallback_settings.load_noto_fallback_settings()
Следующий пример кода демонстрирует, как загрузить резервные настройки шрифта из файла XML:
В приведенном выше примере кода используется следующий файл XML:
<FontFallbackSettings xmlns="Aspose.Words">
<FallbackTable>
<!-- Fallback table consists of the rules. Each rule defines the fallback fonts which Aspose.Words should use for specified Unicode ranges and base fonts. Rules are checked one by one and the first applicable fallback font is used. If none of the rules are applicable then ".notdef" glyph (missing glyph) from the base font will be used. -->
<!-- This rule defines that "Vijaya" fallback font should be used for "U+0B80..U+0BFF Tamil" Unicode block. -->
<Rule Ranges="0B80-0BFF" FallbackFonts="Vijaya"/>
<!-- This rule defines that "Segoe UI Emoji" and "Segoe UI Symbol" fallback fonts should be used for "U+1F300..U+1F5FF Miscellaneous Symbols and Pictographs", "U+1F600..U+1F64F Emoticons" Unicode blocks. If "Segoe UI Emoji" font does not contains the glyph for the requested Unicode code point then "Segoe UI Symbol" will be checked. -->
<Rule Ranges="1F300-1F64F" FallbackFonts="Segoe UI Emoji, Segoe UI Symbol"/>
<!-- This rule defines that "Arial" fallback font should be used for "U+2000..U+206F General Punctuation", "U+2070..U+209F Superscripts and Subscripts" Unicode blocks and specific "U+20B9 INDIAN RUPEE SIGN" code point. -->
<Rule Ranges="2000-206F, 2070-209F, 20B9" FallbackFonts="Arial" />
<!-- These rules defines that for "U+3040..U+309F Hiragana" Unicode block "MS Gothic" fallback font should be used if base font is "Times New Roman" and "MS Mincho" fallback font for all other base fonts. -->
<Rule Ranges="3040-309F" FallbackFonts="MS Gothic" BaseFonts="Times New Roman"/>
<Rule Ranges="3040-309F" FallbackFonts="MS Mincho"/>
<!-- This rule defines that "Arial Unicode MS" fallback font should be used if applicable fallback font was not found by previous rules. -->
<Rule FallbackFonts="Arial Unicode MS"/>
</FallbackTable>
</FontFallbackSettings>
Предопределенные настройки шрифта FallBack для шрифтов Google Noto
Aspose.Words предоставляет предопределенные параметры резервного копирования шрифтов для Google Noto шрифтов. Это бесплатные шрифты, лицензированные по лицензии SIL Open Font, которые можно загрузить из Google Noto Fonts. Класс FontFallbackSettings предоставляет метод load_noto_fallback_settings. Он загружает предопределенные резервные настройки, в которых используются шрифты Google Noto, как показано в примере кода ниже:
Где Aspose.Words Выполняет поиск шрифтов
Aspose.Words пытается автоматически найти TrueType шрифта в файловой системе. Обычно для поиска TrueType
шрифтов вы можете положиться на поведение Aspose.Words по умолчанию, но иногда вам нужно указать свои собственные папки, содержащие TrueType шрифта. То Указание расположения TrueType шрифтов в этом разделе описывается, как и где Aspose.Words выполняет поиск шрифтов, а также как указать собственное расположение шрифтов.
Различия в обработке форматов шрифтов в Aspose.Words и Microsoft Word
Существуют некоторые различия в обработке форматов шрифтов в Aspose.Words и Microsoft Word, как показано в таблице ниже:
Microsoft Word | Aspose.Words | |
---|---|---|
TrueType шрифтов и OpenType шрифтов с TrueType контурами | Поддерживаемый. | Поддерживаемый. |
OpenType шрифты с PostScript контурами | Поддерживается для большинства сценариев. Встраивание в форматы с фиксированной страницей, такие как PDF и XPS, не поддерживается. Текст заменяется растровыми изображениями. | Поддерживается для большинства сценариев, включая встраивание в форматы с фиксированными страницами. |
OpenType Варианты шрифта | Поддерживаются только именованные экземпляры. Непрерывные изменения не поддерживаются. | Поддерживается только для экземпляра по умолчанию. Именованные экземпляры и непрерывные изменения не поддерживаются. |
Шрифты Type1 | Поддерживается в версиях Windows до 2013 года и в версиях MacOS. Начиная с 2013 года поддержка в версиях Windows прекращена. | Не поддерживается. |
Смотрите также
- Google Noto Шрифты как скачать бесплатные шрифты