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.

To learn more, visit the https://docs.aspose.com/words/net/working-with-fonts/Working with Fonts documentation article.

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.