字体可用性和替代性

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将从FontInfo类中查找用AltName定义的字体,该类指定字体信息。
  4. 如果Aspose.Words无法定位定义的字体,并且AltName也没有定义,则逐个应用字体替换规则,如下所述(当找到适当的替换时,字体替换过程停止,不执行下一步):
    1. Aspose.Words将尝试使用FontConfig实用程序应用OS字体设置(如果它们可用)。 此非Windows功能必须与FontConfig兼容的OS一起使用。 几乎任何基于Unix的OS已经有一个FontConfig库,旨在提供系统范围的字体配置,自定义和访问应用程序。 否则,用户可以轻松安装此库。
      Aspose.Words知道如何查询数据并为自己的目的解释FontConfig结果。 默认情况下,FontConfig实用程序处于禁用状态。 您可以按如下方式启用它:
      C++
            fontSettings->get_SubstitutionSettings()->get_FontConfigSubstitution()->set_Enabled(true);
            
      
    2. 下一步是一个简单但非常强大的机制,称为TableSubstitutionRule。 默认情况下,此功能是活动的,可用于任何OS。 Aspose.Words使用XML表定义不同OS的基本替换规则。 根据表替换规则,将使用替换字体名称列表。
      XML
            <TableSubstitutionSettings xmlns="Aspose.Words"> 
      	<SubstitutesTable> 
      		<Item OriginalFont="Arabic Transparent" SubstituteFonts="Arial" /></SubstitutesTable> 
            </TableSubstitutionSettings>
            
      OriginalFont-要替换的字体,SubstituteFonts-替换变体列表,用逗号分隔。 第一个可用字体用于替换。
      此规则的主要功能是能够加载您自己的替换表,如下例所示:
      C++
            fontSettings->get_SubstitutionSettings()->get_TableSubstitution()->Load(u"Table.xml");
            
      
      您可以将jar中的现有表作为基础,也可以通过以下方式以编程方式保存:
      C++
            fontSettings->get_SubstitutionSettings()->get_TableSubstitution()->Save(u"MyTable.xml");
            
      
      尽管此机制具有灵活性,但在某些情况下,禁用它会更好,如下所示:
      C++
            fontSettings->get_SubstitutionSettings()->get_TableSubstitution()->set_Enabled(false);
            
      
    3. 如果表替换规则找不到字体,则将应用FontInfo替换规则。 默认情况下启用此机制。 Aspose.Words根据特定文档中包含的字体信息找到最合适的字体。 此信息可以从FontInfo类中获取,如下所示:
      C++
            System::SharedPtr<FontInfoCollection> fontInfos = doc->get_FontInfos();
            
      
      用户不能干预此功能的工作流程,除非他们决定在结果不满意的情况下禁用它:
      C++
            fontSettings->get_SubstitutionSettings()->get_FontInfoSubstitution()->set_Enabled(false);
            
      
      如果FontInfo对于缺失的字体不可用,则该过程停止。
    4. FontInfo替换也失败时,将应用DefaultFont替换规则。 默认情况下也启用此规则。 根据此规则,Aspose.Words将尝试使用DefaultFontName属性中指定的默认字体。 如果用户没有选择自己的默认字体,那么"Times New Roman"将被用作默认字体。 可以禁用此规则,如下所示:
      C++
            fontSettings->get_SubstitutionSettings()->get_DefaultFontSubstitution()->set_Enabled(false);
            
      
      要检查当前的默认字体,请使用:
      C++
            fontSettings->get_SubstitutionSettings()->get_DefaultFontSubstitution()->get_DefaultFontName();
            
      
      要设置自己的替换选项,请应用:
      C++
            fontSettings->get_SubstitutionSettings()->get_DefaultFontSubstitution()->set_DefaultFontName(u"Arial");
            
      
  5. 如果Aspose.Words无法执行字体替换,它会尝试从可用字体源获取第一个可用字体。
  6. 最后,如果Aspose.Words在可用字体源中找不到任何字体,它将使用嵌入到Aspose.Words程序集中的免费Fanwood字体呈现文档。