Incorporare i font nelle presentazioni in .NET

Introduzione

Incorporare i font in PowerPoint garantisce che la tua presentazione mantenga l’aspetto previsto su sistemi diversi. Che tu utilizzi font unici per la creatività o standard, l’incorporamento dei font evita interruzioni di testo e layout.

Se hai utilizzato un font di terze parti o non standard perché sei stato creativo con il tuo lavoro, hai ancora più motivi per incorporare il font. Altrimenti (senza font incorporati), i testi o i numeri nelle tue diapositive, il layout, lo stile, ecc. potrebbero cambiare o trasformarsi in rettangoli incomprensibili.

Utilizza le classi FontsManager, FontData e Compress per gestire i font incorporati.

Recupera e rimuovi i font incorporati

Recupera o rimuovi i font incorporati da una presentazione senza sforzo con i metodi GetEmbeddedFonts e RemoveEmbeddedFont.

Questo codice C# mostra come recuperare e rimuovere i font incorporati da una presentazione:

using (Presentation presentation = new Presentation("EmbeddedFonts.pptx"))
{
    ISlide slide = presentation.Slides[0];

    // Esegue il rendering di una diapositiva contenente un frame di testo che utilizza il font incorporato "FunSized"
    using (IImage image = slide.GetImage(new Size(960, 720)))
    {
        image.Save("picture1_out.png", ImageFormat.Png);
    }

    IFontsManager fontsManager = presentation.FontsManager;

    IFontData[] embeddedFonts = fontsManager.GetEmbeddedFonts();

    // Trova il font "Calibri"
    IFontData funSizedEmbeddedFont = Array.Find(embeddedFonts, delegate (IFontData data)
    {
        return data.FontName == "Calibri";
    });

    // Rimuove il font "Calibri"
    fontsManager.RemoveEmbeddedFont(funSizedEmbeddedFont);

    // Esegue il rendering della presentazione; il font "Calibri" viene sostituito con uno esistente
    using (IImage image = slide.GetImage(new Size(960, 720)))
    {
        image.Save("picture2_out.png", ImageFormat.Png);
    }

    // Salva la presentazione senza il font "Calibri" incorporato su disco
    presentation.Save("WithoutManageEmbeddedFonts_out.ppt", SaveFormat.Ppt);
}

Aggiungi font incorporati

Utilizzando l’enumerazione EmbedFontCharacters e le due sovraccariche del metodo AddEmbeddedFont, puoi selezionare la regola di (incorporamento) preferita per incorporare i font in una presentazione. Questo codice C# mostra come incorporare e aggiungere font a una presentazione:

// Carica la presentazione
Presentation presentation = new Presentation("Fonts.pptx");

IFontData[] allFonts = presentation.FontsManager.GetFonts();
IFontData[] embeddedFonts = presentation.FontsManager.GetEmbeddedFonts();
foreach (IFontData font in allFonts)
{
    if (!embeddedFonts.Contains(font))
    {
        presentation.FontsManager.AddEmbeddedFont(font, EmbedFontCharacters.All);
    }
}

// Salva la presentazione su disco
presentation.Save("AddEmbeddedFont_out.pptx", SaveFormat.Pptx);

Comprimi font incorporati

Ottimizza le dimensioni del file comprimendo i font incorporati usando CompressEmbeddedFonts.

Codice di esempio per la compressione:

using (Presentation pres = new Presentation("pres.pptx"))
{
    Aspose.Slides.LowCode.Compress.CompressEmbeddedFonts(pres);
    pres.Save("pres-out.pptx", SaveFormat.Pptx);
}

FAQ

Come posso capire se un font specifico nella presentazione verrà comunque sostituito durante il rendering nonostante l’incorporamento?

Controlla le informazioni sulla sostituzione nel gestore dei font e le regole di fallback/sostituzione: se il font non è disponibile o è limitato, verrà utilizzato un fallback.

Vale la pena incorporare i font “di sistema” come Arial/Calibri?

Di solito no—sono quasi sempre disponibili. Tuttavia, per una piena portabilità in ambienti “leggeri” (Docker, un server Linux senza font preinstallati), incorporare i font di sistema può eliminare il rischio di sostituzioni inaspettate.