Доступность и замена шрифтов
Contents
[
Hide
]
Текст в документе может быть отформатирован различными шрифтами, такими как 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-кодOriginalFont - шрифт, который необходимо заменить, SubstituteFonts - список вариантов замены, разделенных запятой. Для замены используется первый доступный шрифт.<TableSubstitutionSettings xmlns="Aspose.Words"> <SubstitutesTable> <Item OriginalFont="Arabic Transparent" SubstituteFonts="Arial" /> … </SubstitutesTable> </TableSubstitutionSettings>
Главной особенностью этого правила является возможность загрузки ваших собственных таблиц подстановки, как это показано в следующем примере:
С++Вы можете взять за основу существующую таблицу из jar или сохранить ее программно следующим образом:fontSettings->get_SubstitutionSettings()->get_TableSubstitution()->Load(u"Table.xml");
С++Несмотря на гибкость этого механизма, в некоторых случаях его лучше отключить, как показано ниже: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();
С++Если FontInfo недоступно для отсутствующего шрифта, то процесс останавливается.fontSettings->get_SubstitutionSettings()->get_FontInfoSubstitution()->set_Enabled(false);
- правило подстановки 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 не может выполнить замену шрифта, он пытается получить первый доступный шрифт из доступных источников шрифтов.
- Наконец, если Aspose.Words не удается найти какие-либо шрифты среди доступных источников шрифтов, документ отрисовывается с использованием бесплатного шрифта Fanwood, встроенного в сборку Aspose.Words.
Если доступно значение FontInfo, параметр FontInfo substitution rule всегда будет разрешать шрифт и переопределять правило шрифта по умолчанию. Если вы хотите использовать правило шрифта по умолчанию, вам следует отключить параметр FontInfo substitution rule. Обратите внимание, что FontConfig substitution rule в большинстве случаев определяет шрифт и, таким образом, переопределяет все остальные правила.