Доступность и замена шрифтов

Contents
[ ]

Текст в документе может быть отформатирован различными шрифтами, такими как Arial, Times New Roman, Verdana и другими. При отображении документа Aspose.Words выполняется попытка выбрать шрифты, указанные в документе.

Однако бывают ситуации, когда невозможно найти точный шрифт, и Aspose.Words необходимо заменить его на аналогичный шрифт. Aspose.Words выбор шрифта осуществляется в соответствии со следующим процессом:

  1. Aspose.Words пытается найти шрифт с точным названием среди доступных источников шрифтов.
  2. Aspose.Words пытается найти нужный шрифт среди шрифтов, встроенных в исходный документ. Некоторые форматы документов, такие как DOCX, могут содержать встроенные шрифты.
  3. Если Aspose.Words не удается найти требуемый шрифт с точным совпадением названия и свойства AltName, определенного для этого шрифта, то Aspose.Words найдет шрифт, определенный с помощью AltName из класса FontInfo, который определяет информацию о шрифте.
  4. Если Aspose.Words не удается найти определенный шрифт, а AltName также не определен, то правила замены шрифта применяются последовательно, как описано ниже (когда соответствующая замена найдена, процесс замены шрифта останавливается и следующий шаг не выполняется).:
    1. Aspose.Words попытается применить настройки шрифта операционной системы, если они доступны, с помощью утилиты FontConfig. Эта функция, отличная от Windows, должна использоваться в операционной системе, совместимой с FontConfig. Практически в любой операционной системе на базе Unix уже есть библиотека FontConfig, предназначенная для обеспечения общесистемной настройки шрифтов, кастомизации и доступа к приложениям. В противном случае пользователь может легко установить эту библиотеку.
      Aspose.Words умеет запрашивать данные и интерпретировать результаты FontConfig в своих собственных целях. По умолчанию утилита FontConfig отключена. Вы можете включить ее следующим образом:
      С++
            fontSettings->get_SubstitutionSettings()->get_FontConfigSubstitution()->set_Enabled(true);
            
      
    2. Следующий шаг - это простой, но невероятно мощный механизм, называемый 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);
            
      
    3. Правило подстановки FontInfo будет применено, если в правиле подстановки в таблицу не удается найти шрифт. Этот механизм включен по умолчанию. Aspose.Words выполняется поиск наиболее подходящего шрифта в соответствии с информацией о шрифте, содержащейся в конкретном документе. Эта информация может быть получена из класса FontInfo, как показано ниже:
      С++
            System::SharedPtr<FontInfoCollection> fontInfos = doc->get_FontInfos();
            
      
      Пользователи не могут вмешиваться в рабочий процесс этой функции, если только они не решат отключить ее в случае неудовлетворительных результатов:
      С++
            fontSettings->get_SubstitutionSettings()->get_FontInfoSubstitution()->set_Enabled(false);
            
      
      Если FontInfo недоступно для отсутствующего шрифта, то процесс останавливается.
    4. правило подстановки 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");
            
      
  5. Если Aspose.Words не может выполнить замену шрифта, он пытается получить первый доступный шрифт из доступных источников шрифтов.
  6. Наконец, если Aspose.Words не удается найти какие-либо шрифты среди доступных источников шрифтов, документ отрисовывается с использованием бесплатного шрифта Fanwood, встроенного в сборку Aspose.Words.