com.aspose.words
Class DefaultFontSubstitutionRule

java.lang.Object
  extended by FontSubstitutionRule
      extended by com.aspose.words.DefaultFontSubstitutionRule

public class DefaultFontSubstitutionRule 
extends FontSubstitutionRule

Default font substitution rule. This rule defines single default font name to be used for substitution if the original font is not available.

Example:

Shows how to set the default font substitution rule.
Document doc = new Document();
FontSettings fontSettings = new FontSettings();
doc.setFontSettings(fontSettings);

// Get the default substitution rule within FontSettings.
// This rule will substitute all missing fonts with "Times New Roman".
DefaultFontSubstitutionRule defaultFontSubstitutionRule = fontSettings.getSubstitutionSettings().getDefaultFontSubstitution();
Assert.assertTrue(defaultFontSubstitutionRule.getEnabled());
Assert.assertEquals("Times New Roman", defaultFontSubstitutionRule.getDefaultFontName());

// Set the default font substitute to "Courier New".
defaultFontSubstitutionRule.setDefaultFontName("Courier New");

// Using a document builder, add some text in a font that we do not have to see the substitution take place,
// and then render the result in a PDF.
DocumentBuilder builder = new DocumentBuilder(doc);

builder.getFont().setName("Missing Font");
builder.writeln("Line written in a missing font, which will be substituted with Courier New.");

doc.save(getArtifactsDir() + "FontSettings.DefaultFontSubstitutionRule.pdf");

Property Getters/Setters Summary
java.lang.StringgetDefaultFontName()
voidsetDefaultFontName(java.lang.String value)
           Gets or sets the default font name.
booleangetEnabled()→ inherited from FontSubstitutionRule
voidsetEnabled(boolean value)
           Specifies whether the rule is enabled or not.
 

Property Getters/Setters Detail

getDefaultFontName/setDefaultFontName

public java.lang.String getDefaultFontName() / public void setDefaultFontName(java.lang.String value)
Gets or sets the default font name.

The default value is 'Times New Roman'.

Example:

Shows how to set the default font substitution rule.
Document doc = new Document();
FontSettings fontSettings = new FontSettings();
doc.setFontSettings(fontSettings);

// Get the default substitution rule within FontSettings.
// This rule will substitute all missing fonts with "Times New Roman".
DefaultFontSubstitutionRule defaultFontSubstitutionRule = fontSettings.getSubstitutionSettings().getDefaultFontSubstitution();
Assert.assertTrue(defaultFontSubstitutionRule.getEnabled());
Assert.assertEquals("Times New Roman", defaultFontSubstitutionRule.getDefaultFontName());

// Set the default font substitute to "Courier New".
defaultFontSubstitutionRule.setDefaultFontName("Courier New");

// Using a document builder, add some text in a font that we do not have to see the substitution take place,
// and then render the result in a PDF.
DocumentBuilder builder = new DocumentBuilder(doc);

builder.getFont().setName("Missing Font");
builder.writeln("Line written in a missing font, which will be substituted with Courier New.");

doc.save(getArtifactsDir() + "FontSettings.DefaultFontSubstitutionRule.pdf");

Example:

Shows how to specify a default font.
Document doc = new Document();
DocumentBuilder builder = new DocumentBuilder(doc);

builder.getFont().setName("Arial");
builder.writeln("Hello world!");
builder.getFont().setName("Arvo");
builder.writeln("The quick brown fox jumps over the lazy dog.");

FontSourceBase[] fontSources = FontSettings.getDefaultInstance().getFontsSources();

// The font sources that the document uses contain the font "Arial", but not "Arvo".
Assert.assertEquals(1, fontSources.length);
Assert.assertTrue(IterableUtils.matchesAny(fontSources[0].getAvailableFonts(), f -> f.getFullFontName().contains("Arial")));
Assert.assertFalse(IterableUtils.matchesAny(fontSources[0].getAvailableFonts(), f -> f.getFullFontName().contains("Arvo")));

// Set the "DefaultFontName" property to "Courier New" to,
// while rendering the document, apply that font in all cases when another font is not available. 
FontSettings.getDefaultInstance().getSubstitutionSettings().getDefaultFontSubstitution().setDefaultFontName("Courier New");

Assert.assertTrue(IterableUtils.matchesAny(fontSources[0].getAvailableFonts(), f -> f.getFullFontName().contains("Courier New")));

// Aspose.Words will now use the default font in place of any missing fonts during any rendering calls.
doc.save(getArtifactsDir() + "FontSettings.DefaultFontName.pdf");

getEnabled/setEnabled

→ inherited from FontSubstitutionRule
public boolean getEnabled() / public void setEnabled(boolean value)
Specifies whether the rule is enabled or not.

Example:

Shows operating system-dependent font config substitution.
FontSettings fontSettings = new FontSettings();
FontConfigSubstitutionRule fontConfigSubstitution = fontSettings.getSubstitutionSettings().getFontConfigSubstitution();

// The FontConfigSubstitutionRule object works differently on Windows/non-Windows platforms.
// On Windows, it is unavailable.
if (SystemUtils.IS_OS_WINDOWS) {
    Assert.assertFalse(fontConfigSubstitution.getEnabled());
    Assert.assertFalse(fontConfigSubstitution.isFontConfigAvailable());
}

// On Linux/Mac, we will have access to it, and will be able to perform operations.
if (SystemUtils.IS_OS_LINUX) {
    Assert.assertTrue(fontConfigSubstitution.getEnabled());
    Assert.assertTrue(fontConfigSubstitution.isFontConfigAvailable());

    fontConfigSubstitution.resetCache();
}

Example:

Shows how to access a document's system font source and set font substitutes.
Document doc = new Document();
doc.setFontSettings(new FontSettings());

// By default, a blank document always contains a system font source.
Assert.assertEquals(1, doc.getFontSettings().getFontsSources().length);

SystemFontSource systemFontSource = (SystemFontSource) doc.getFontSettings().getFontsSources()[0];
Assert.assertEquals(FontSourceType.SYSTEM_FONTS, systemFontSource.getType());
Assert.assertEquals(0, systemFontSource.getPriority());

if (SystemUtils.IS_OS_WINDOWS) {
    final String FONTS_PATH = "C:\\WINDOWS\\Fonts";
    Assert.assertEquals(FONTS_PATH.toLowerCase(), SystemFontSource.getSystemFontFolders()[0].toLowerCase());
}

for (String systemFontFolder : SystemFontSource.getSystemFontFolders()) {
    System.out.println(systemFontFolder);
}

// Set a font that exists in the Windows Fonts directory as a substitute for one that does not.
doc.getFontSettings().getSubstitutionSettings().getFontInfoSubstitution().setEnabled(true);
doc.getFontSettings().getSubstitutionSettings().getTableSubstitution().addSubstitutes("Kreon-Regular", "Calibri");

Assert.assertEquals(1, IterableUtils.size(doc.getFontSettings().getSubstitutionSettings().getTableSubstitution().getSubstitutes("Kreon-Regular")));
Assert.assertTrue(IterableUtils.toString(doc.getFontSettings().getSubstitutionSettings().getTableSubstitution().getSubstitutes("Kreon-Regular")).contains("Calibri"));

// Alternatively, we could add a folder font source in which the corresponding folder contains the font.
FolderFontSource folderFontSource = new FolderFontSource(getFontsDir(), false);
doc.getFontSettings().setFontsSources(new FontSourceBase[]{systemFontSource, folderFontSource});
Assert.assertEquals(2, doc.getFontSettings().getFontsSources().length);

// Resetting the font sources still leaves us with the system font source as well as our substitutes.
doc.getFontSettings().resetFontSources();

Assert.assertEquals(1, doc.getFontSettings().getFontsSources().length);
Assert.assertEquals(FontSourceType.SYSTEM_FONTS, doc.getFontSettings().getFontsSources()[0].getType());
Assert.assertEquals(1, IterableUtils.size(doc.getFontSettings().getSubstitutionSettings().getTableSubstitution().getSubstitutes("Kreon-Regular")));

See Also:
          Aspose.Words Documentation - the home page for the Aspose.Words Product Documentation.
          Aspose.Words Support Forum - our preferred method of support.