Fallback fonts in PowerPoint to Image conversion
10 Sep 202413 minutes to read
During PowerPoint to Image conversions, if a glyph of the input text is unavailable in the specified font, the text will not be rendered properly. To address this, the Syncfusion PowerPoint (Presentation) library allows users to specify fallback fonts. When a glyph is missing, the library will use one of the fallback fonts to render the text correctly in the output image.
Users can configure fallback fonts in the following ways:
- Initialize default fallback fonts.
- Set custom fonts as fallback fonts for specific script types, including Arabic, Hebrew, Chinese, Japanese, and more.
- Set custom fonts as fallback fonts for a particular range of Unicode text.
NOTE
Presentation internally uses user-initialized or specified fallback fonts for Unicode characters during PowerPoint to Image conversion. Therefore, the specified fallback fonts must be installed in the production environment. Otherwise, it will not render the text properly using the fallback fonts.
Initialize default fallback fonts
The following code example demonstrates how to initialize a default fallback font while converting a PowerPoint presentation to an Image. The InitializeDefault API sets the default fallback fonts for specific script types like Arabic, Hebrew, Chinese, Japanese etc.
//Load the PowerPoint presentation into stream.
using (FileStream fileStreamInput = new FileStream("Template.pptx", FileMode.Open, FileAccess.Read))
{
//Open the existing PowerPoint presentation with loaded stream.
using (IPresentation pptxDoc = Presentation.Open(fileStreamInput))
{
//Initialize the PresentationRenderer to perform image conversion.
pptxDoc.PresentationRenderer = new PresentationRenderer();
//Use a sets of default FallbackFont collection to IPresentation.
pptxDoc.FontSettings.FallbackFonts.InitializeDefault();
//Convert PowerPoint slide to image as stream.
using (Stream stream = pptxDoc.Slides[0].ConvertToImage(ExportImageFormat.Jpeg))
{
//Reset the stream position.
stream.Position = 0;
//Create the output image file stream.
using (FileStream fileStreamOutput = File.Create("Output.jpg"))
{
//Copy the converted image stream into created output stream.
stream.CopyTo(fileStreamOutput);
}
}
}
}
You can download a complete working sample from GitHub.
Fallback fonts based on script type
The following code example demonstrates how a user can add fallback fonts based on the script types, which Presentation considers internally when converting a PowerPoint presentation to an Image.
//Load the PowerPoint presentation into stream.
using (FileStream fileStreamInput = new FileStream("Template.pptx", FileMode.Open, FileAccess.Read))
{
//Open the existing PowerPoint presentation with loaded stream.
using (IPresentation pptxDoc = Presentation.Open(fileStreamInput))
{
//Adds fallback font for "Arabic" script type.
pptxDoc.FontSettings.FallbackFonts.Add(ScriptType.Arabic, "Arial, Times New Roman");
//Adds fallback font for "Hebrew" script type.
pptxDoc.FontSettings.FallbackFonts.Add(ScriptType.Hebrew, "Arial, Courier New");
//Adds fallback font for "Hindi" script type.
pptxDoc.FontSettings.FallbackFonts.Add(ScriptType.Hindi, "Mangal, Nirmala UI");
//Adds fallback font for "Chinese" script type.
pptxDoc.FontSettings.FallbackFonts.Add(ScriptType.Chinese, "DengXian, MingLiU");
//Adds fallback font for "Japanese" script type.
pptxDoc.FontSettings.FallbackFonts.Add(ScriptType.Japanese, "Yu Mincho, MS Mincho");
//Adds fallback font for "Thai" script type.
pptxDoc.FontSettings.FallbackFonts.Add(ScriptType.Thai, "Tahoma, Microsoft Sans Serif");
//Adds fallback font for "Korean" script type.
pptxDoc.FontSettings.FallbackFonts.Add(ScriptType.Korean, "Malgun Gothic, Batang");
//Initialize the PresentationRenderer to perform image conversion.
pptxDoc.PresentationRenderer = new PresentationRenderer();
//Convert PowerPoint slide to image as stream.
using (Stream stream = pptxDoc.Slides[0].ConvertToImage(ExportImageFormat.Jpeg))
{
//Reset the stream position.
stream.Position = 0;
//Create the output image file stream.
using (FileStream fileStreamOutput = File.Create("Output.jpg"))
{
//Copy the converted image stream into created output stream.
stream.CopyTo(fileStreamOutput);
}
}
}
}
You can download a complete working sample from GitHub.
Fallback fonts for range of Unicode text
Users can set fallback fonts for specific Unicode range of text to be used in Presentation to Image conversion.
The following code example demonstrates how users can add fallback fonts by using a specific Unicode range of text that Presentation considers internally while converting a PowerPoint presentation to an Image.
//Load the PowerPoint presentation into stream.
using (FileStream fileStreamInput = new FileStream(@"Template.pptx", FileMode.Open, FileAccess.Read))
{
//Open the existing PowerPoint presentation with loaded stream.
using (IPresentation pptxDoc = Presentation.Open(fileStreamInput))
{
//Adds fallback font for specific unicode range.
// Arabic.
pptxDoc.FontSettings.FallbackFonts.Add(new FallbackFont(0x0600, 0x06ff, "Arial"));
// Hebrew.
pptxDoc.FontSettings.FallbackFonts.Add(new FallbackFont(0x0590, 0x05ff, "Arial"));
// Hindi.
pptxDoc.FontSettings.FallbackFonts.Add(new FallbackFont(0x0900, 0x097F, "Mangal"));
// Chinese.
pptxDoc.FontSettings.FallbackFonts.Add(new FallbackFont(0x4E00, 0x9FFF, "DengXian"));
// Japanese.
pptxDoc.FontSettings.FallbackFonts.Add(new FallbackFont(0x3040, 0x309F, "MS Mincho"));
// Korean.
pptxDoc.FontSettings.FallbackFonts.Add(new FallbackFont(0xAC00, 0xD7A3, "Malgun Gothic"));
//Initialize the PresentationRenderer to perform image conversion.
pptxDoc.PresentationRenderer = new PresentationRenderer();
//Convert PowerPoint slide to image as stream.
using (Stream stream = pptxDoc.Slides[0].ConvertToImage(ExportImageFormat.Jpeg))
{
//Reset the stream position.
stream.Position = 0;
//Create the output image file stream.
using (FileStream fileStreamOutput = File.Create("Output.jpg"))
{
//Copy the converted image stream into created output stream.
stream.CopyTo(fileStreamOutput);
}
}
}
}
You can download a complete working sample from GitHub.
Modify the exiting fallback fonts
The following code example demonstrates how user can modify or customize the existing fallback fonts using FontNames API while converting a PowerPoint presentation to an Image.
//Load the PowerPoint presentation into stream.
using (FileStream fileStreamInput = new FileStream(@"Template.pptx", FileMode.Open, FileAccess.Read))
{
//Open the existing PowerPoint presentation with loaded stream.
using (IPresentation pptxDoc = Presentation.Open(fileStreamInput))
{
//Initialize the PresentationRenderer to perform image conversion.
pptxDoc.PresentationRenderer = new PresentationRenderer();
//Use a sets of default FallbackFont collection to IPresentation.
pptxDoc.FontSettings.FallbackFonts.InitializeDefault();
// Customize a default fallback font name.
FallbackFonts fallbackFonts = pptxDoc.FontSettings.FallbackFonts;
foreach (FallbackFont fallbackFont in fallbackFonts)
{
//Customize a default fallback font name as "David" for the Hebrew script.
if (fallbackFont.ScriptType == ScriptType.Hebrew)
fallbackFont.FontNames = "David";
}
//Convert PowerPoint slide to image as stream.
using (Stream stream = pptxDoc.Slides[0].ConvertToImage(ExportImageFormat.Jpeg))
{
//Reset the stream position.
stream.Position = 0;
//Create the output image file stream.
using (FileStream fileStreamOutput = File.Create("Output.jpg"))
{
//Copy the converted image stream into created output stream.
stream.CopyTo(fileStreamOutput);
}
}
}
}
You can download a complete working sample from GitHub.
Supported script types
The following table illustrates the supported script types by the .NET PowerPoint library (Presentation) in Presentation to Image conversion.
Script types | Ranges | Default fallback fonts considered in InitializeDefault() API |
---|---|---|
Arabic |
0x0600 - 0x06ff 0x0750 - 0x077f 0x08a0 - 0x08ff 0xfb50 - 0xfdff 0xfe70 - 0xfeff |
Arial, Times New Roman, Microsoft Uighur |
Hebrew |
0x0590 - 0x05ff 0xfb1d - 0xfb4f |
Arial, Times New Roman, David |
Hindi |
0x0900 - 0x097F 0xa8e0 - 0xa8ff 0x1cd0 - 0x1cff |
Mangal, Utsaah |
Chinese |
0x4E00 - 0x9FFF 0x3400 - 0x4DBF 0xd840 - 0xd869 0xdc00 - 0xdedf 0xA960 - 0xA97F 0xFF00 - 0xFFEF 0x3000 - 0x303F |
DengXian, MingLiU, MS Gothic |
Japanese |
0x30A0 - 0x30FF 0x3040 - 0x309F |
Yu Mincho, MS Mincho |
Thai | 0x0E00 - 0x0E7F | Tahoma, Microsoft Sans Serif |
Korean |
0xAC00 - 0xD7A3 0x1100 - 0x11FF 0x3130 - 0x318F 0xA960 - 0xA97F 0xD7B0 - 0xD7FF 0xAC00 - 0xD7AF |
Malgun Gothic, Batang |
NOTE
The .NET PowerPoint Library (Presentation) uses System.Drawing functionalities for PowerPoint to image conversion conversion in .NET Framework applications. And System.Drawing itself uses a fallback font to preserve the Unicode text while drawing the text in the image. So, these Fallback fonts APIs are not supported in .NET Framework.