We're sorry Aspose doesn't work properply without JavaScript enabled.

Free Support Forum - aspose.com

Handle Unfound/Uninstalled Fonts when Loading a Presentation

Hi all,

I am attempting to create a warning when a presentation is loaded which uses (non-embedded) fonts that were found on the system or in any directories supplied to FontsLoader.LoadExternalFonts().

I have found that this is possible in other Aspose products but for Aspose Slides I was only able to find a way of getting a list of all fonts in a presentation (presentation.FontsManager.GetFonts/GetEmbeddedFonts).

Can please you either:

  1. Point me in the right direction to solve this issue
  2. File a feature request for this if it is not currently supported.

Thanks in advance!
-Zac

FYI, folks can get around this with the following (C#) code. I do think that this should be a Slide.Net feature FWIW

    private IEnumerable<string> GetUnknownFontsInPresentation(
        IEnumerable<string> customFontDirectories,
        Presentation presentation)
    {
        IEnumerable<IFontData> fonts = presentation.FontsManager.GetFonts();
        IEnumerable<IFontData> embeddedFonts = presentation.FontsManager.GetEmbeddedFonts();

        InstalledFontCollection installedFontCollection = new InstalledFontCollection();
        PrivateFontCollection privateFontCollection = new PrivateFontCollection();
        
        // Build our list of custom fonts from the font files (of supported formats) in our custom font dirs
        foreach (string customFontDir in customFontDirectories)
        {
            foreach (string file in Directory.EnumerateFiles(customFontDir, "*", SearchOption.AllDirectories)
                .Where(f => SupportedFontFileFormats.Contains(Path.GetExtension(f))))
            {
                privateFontCollection.AddFontFile(file);                   
            }
        }
        
        // Grab a list of all known font types from our three sources:
        // - The system font dirs (installedFontCollection)
        // - The custom font dirs (privateFontCollection)
        // - Embedded fonts (embeddedFonts)
        HashSet<string> knownFonts = new HashSet<string>(installedFontCollection.Families
            .Select(ff => ff.Name)
            .Concat(privateFontCollection.Families.Select(ff => ff.Name))
            .Concat(embeddedFonts.Select(font => font.FontName)));

        return fonts
            .Where(f => !knownFonts.Contains(f.FontName))
            .Select(f => f.FontName);
    }

Given I have a workaround, there is no criticality to this ticket.

@zrumford,
Thank you for contacting support.

Aspose.Slides library has also similar features you mentioned in the first post. Please take a look at the following article: Getting Warning Callbacks for Fonts Substitution in Aspose.Slides. There is only one nuance, you have to analize IWarningInfo.Description property to detect font substitution.

I’ve added a ticket with ID SLIDESNET-43296 to our issue tracking system. Our development team will consider implementing such a feature. You will be notified when the issue is resolved.