public class FontInfoSubstitutionRule
Example:
@Test
public void enableFontSubstitution() throws Exception {
// Open a document that contains text formatted with a font that does not exist in any of our font sources.
Document doc = new Document(getMyDir() + "Missing font.docx");
// Assign a callback for handling font substitution warnings.
HandleDocumentSubstitutionWarnings substitutionWarningHandler = new HandleDocumentSubstitutionWarnings();
doc.setWarningCallback(substitutionWarningHandler);
// Set a default font name and enable font substitution.
FontSettings fontSettings = new FontSettings();
fontSettings.getSubstitutionSettings().getDefaultFontSubstitution().setDefaultFontName("Arial");
fontSettings.getSubstitutionSettings().getFontInfoSubstitution().setEnabled(true);
// We will get a font substitution warning if we save a document with a missing font.
doc.setFontSettings(fontSettings);
doc.save(getArtifactsDir() + "FontSettings.EnableFontSubstitution.pdf");
Iterator<WarningInfo> warnings = substitutionWarningHandler.FontWarnings.iterator();
while (warnings.hasNext())
System.out.println(warnings.next().getDescription());
// We can also verify warnings in the collection and clear them.
Assert.assertEquals(WarningSource.LAYOUT, substitutionWarningHandler.FontWarnings.get(0).getSource());
Assert.assertEquals("Font '28 Days Later' has not been found. Using 'Calibri' font instead. Reason: alternative name from document.",
substitutionWarningHandler.FontWarnings.get(0).getDescription());
substitutionWarningHandler.FontWarnings.clear();
Assert.assertTrue(substitutionWarningHandler.FontWarnings.getCount() == 0);
}
public static class HandleDocumentSubstitutionWarnings implements IWarningCallback {
/// <summary>
/// Called every time a warning occurs during loading/saving.
/// </summary>
public void warning(WarningInfo info) {
if (info.getWarningType() == WarningType.FONT_SUBSTITUTION)
FontWarnings.warning(info);
}
public WarningInfoCollection FontWarnings = new WarningInfoCollection();
}
Property Getters/Setters Summary | ||
---|---|---|
boolean | getEnabled() | |
void | setEnabled(booleanvalue) | |
Specifies whether the rule is enabled or not. |
public boolean getEnabled() / public void setEnabled(boolean value)
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")));