Доступность и замена шрифтов
Текст в документе может быть отформатирован различными шрифтами, такими как Arial, Times New Roman, Verdana и другими. При отображении документа Aspose.Words выполняется попытка выбрать шрифты, указанные в документе.
Однако бывают ситуации, когда невозможно найти точный шрифт, и Aspose.Words необходимо заменить его на аналогичный шрифт. Aspose.Words выбор шрифта осуществляется в соответствии со следующим процессом:
- Aspose.Words пытается найти шрифт с точным названием среди доступных источников шрифтов.
- Aspose.Words пытается найти нужный шрифт среди шрифтов, встроенных в исходный документ. Некоторые форматы документов, такие как DOCX, могут содержать встроенные шрифты.
- Если Aspose.Words не удается найти требуемый шрифт с точным совпадением названия и свойства AltName, определенного для этого шрифта, то Aspose.Words найдет шрифт, определенный с помощью AltName из класса FontInfo, который определяет информацию о шрифте.
- Если Aspose.Words не удается найти определенный шрифт, а AltName также не определен, то правила замены шрифта применяются последовательно, как описано ниже (когда соответствующая замена найдена, процесс замены шрифта останавливается и следующий шаг не выполняется).:
- Aspose.Words попытается применить настройки шрифта операционной системы, если они доступны, с помощью утилиты
FontConfig. Эта функция, отличная от Windows, должна использоваться в операционной системе, совместимой с FontConfig. Практически в любой операционной системе на базе Unix уже есть библиотека FontConfig, предназначенная для обеспечения общесистемной настройки шрифтов, кастомизации и доступа к приложениям. В противном случае пользователь может легко установить эту библиотеку.
Aspose.Words умеет запрашивать данные и интерпретировать результаты FontConfig в своих собственных целях. По умолчанию утилита FontConfig отключена. Вы можете включить ее следующим образом:
С++
fontSettings->get_SubstitutionSettings()->get_FontConfigSubstitution()->set_Enabled(true);
- Следующий шаг - это простой, но невероятно мощный механизм, называемый TableSubstitutionRule. По умолчанию эта функция активна и доступна для любой операционной системы. Aspose.Words использует XML-таблицы, которые определяют основные правила подстановки для разных операционных систем. В соответствии с правилом подстановки в таблицу, будет использоваться список заменяющих названий шрифтов.
XML-код
<TableSubstitutionSettings xmlns="Aspose.Words">
<SubstitutesTable>
<Item OriginalFont="Arabic Transparent" SubstituteFonts="Arial" />
…
</SubstitutesTable>
</TableSubstitutionSettings>
OriginalFont - шрифт, который необходимо заменить, SubstituteFonts - список вариантов замены, разделенных запятой. Для замены используется первый доступный шрифт.
Главной особенностью этого правила является возможность загрузки ваших собственных таблиц подстановки, как это показано в следующем примере:
С++
fontSettings->get_SubstitutionSettings()->get_TableSubstitution()->Load(u"Table.xml");
Вы можете взять за основу существующую таблицу из jar или сохранить ее программно следующим образом:
С++
fontSettings->get_SubstitutionSettings()->get_TableSubstitution()->Save(u"MyTable.xml");
Несмотря на гибкость этого механизма, в некоторых случаях его лучше отключить, как показано ниже:
С++
fontSettings->get_SubstitutionSettings()->get_TableSubstitution()->set_Enabled(false);
- Правило подстановки FontInfo будет применено, если в правиле подстановки в таблицу не удается найти шрифт. Этот механизм включен по умолчанию. Aspose.Words выполняется поиск наиболее подходящего шрифта в соответствии с информацией о шрифте, содержащейся в конкретном документе. Эта информация может быть получена из класса FontInfo, как показано ниже:
С++
System::SharedPtr<FontInfoCollection> fontInfos = doc->get_FontInfos();
Пользователи не могут вмешиваться в рабочий процесс этой функции, если только они не решат отключить ее в случае неудовлетворительных результатов:
С++
fontSettings->get_SubstitutionSettings()->get_FontInfoSubstitution()->set_Enabled(false);
Если FontInfo недоступно для отсутствующего шрифта, то процесс останавливается.
- правило подстановки DefaultFont будет применено в том случае, если подстановка
FontInfo также завершилась неудачей. Это правило также включено по умолчанию. В соответствии с этим правилом Aspose.Words попытается использовать шрифт по умолчанию, указанный в свойстве DefaultFontName. Если пользователь не выбрал свой собственный шрифт по умолчанию, то в качестве шрифта по умолчанию будет использоваться “Times New Roman”. Это правило можно отключить, как показано ниже:
С++
fontSettings->get_SubstitutionSettings()->get_DefaultFontSubstitution()->set_Enabled(false);
Чтобы проверить текущий шрифт по умолчанию, используйте:
С++
fontSettings->get_SubstitutionSettings()->get_DefaultFontSubstitution()->get_DefaultFontName();
Чтобы настроить свой собственный вариант замены, примените:
С++
fontSettings->get_SubstitutionSettings()->get_DefaultFontSubstitution()->set_DefaultFontName(u"Arial");
- Если Aspose.Words не может выполнить замену шрифта, он пытается получить первый доступный шрифт из доступных источников шрифтов.
- Наконец, если Aspose.Words не удается найти какие-либо шрифты среди доступных источников шрифтов, документ отрисовывается с использованием бесплатного шрифта Fanwood, встроенного в сборку Aspose.Words.
Если доступно значение FontInfo, параметр FontInfo substitution rule всегда будет разрешать шрифт и переопределять правило шрифта по умолчанию. Если вы хотите использовать правило шрифта по умолчанию, вам следует отключить параметр FontInfo substitution rule. Обратите внимание, что FontConfig substitution rule в большинстве случаев определяет шрифт и, таким образом, переопределяет все остальные правила.