Lettertypen insluiten in presentaties met Java

Inleiding

Ingesloten lettertypen in PowerPoint zijn handig wanneer je wilt dat je presentatie er correct uitziet op elk systeem of apparaat. Als je een lettertype van een derde partij of een niet‑standaard lettertype hebt gebruikt omdat je creatief was met je werk, heb je nog meer redenen om je lettertype in te sluiten. Anders (zonder ingesloten lettertypen) kunnen de teksten of cijfers op je dia’s, de lay‑out, de opmaak, enz. wijzigen of veranderen in verwarrende rechthoeken.

De FontsManager‑klasse, de FontData‑klasse, de Compress‑klasse en hun interfaces bevatten het grootste deel van de eigenschappen en methoden die je nodig hebt om met ingesloten lettertypen in PowerPoint‑presentaties te werken.

Ingesloten lettertypen ophalen en verwijderen

Aspose.Slides biedt de getEmbeddedFonts‑methode (beschikbaar via de FontsManager‑klasse) zodat je de in een presentatie ingesloten lettertypen kunt ophalen (of achterhalen). Om lettertypen te verwijderen, wordt de removeEmbeddedFont‑methode (beschikbaar via dezelfde klasse) gebruikt.

Deze Java‑code laat zien hoe je ingesloten lettertypen uit een presentatie kunt ophalen en verwijderen:

// Instantieert een Presentation-object dat een presentatiebestand vertegenwoordigt
Presentation pres = new Presentation("EmbeddedFonts.pptx");
try {
    // Renderen van een dia die een tekstframe bevat dat het ingesloten "FunSized" gebruikt
    IImage slideImage = pres.getSlides().get_Item(0).getImage(new Dimension(960, 720));

    //Sla de afbeelding op schijf in JPEG-formaat
    try {
        slideImage.save("picture1_out.jpg", ImageFormat.Jpeg);
    } finally {
        if (slideImage != null) slideImage.dispose();
    }

    IFontsManager fontsManager = pres.getFontsManager();

    // Haalt alle ingesloten lettertypen op
    IFontData[] embeddedFonts = fontsManager.getEmbeddedFonts();

    // Zoekt het "Calibri"-lettertype
    IFontData calibriEmbeddedFont = null;
    for (int i = 0; i < embeddedFonts.length; i++) {
        System.out.println(""+ embeddedFonts[i].getFontName());
        if ("Calibri".equals(embeddedFonts[i].getFontName())) {
            calibriEmbeddedFont = embeddedFonts[i];
            break;
        }
    }

    // Verwijdert het "Calibri"-lettertype
    fontsManager.removeEmbeddedFont(calibriEmbeddedFont);

    // Renderen van de presentatie; het "Calibri"-lettertype wordt vervangen door een bestaand lettertype
     slideImage = pres.getSlides().get_Item(0).getImage(new Dimension(960, 720));

     //Sla de afbeelding op schijf in JPEG-formaat
     try {
         slideImage.save("picture2_out.jpg", ImageFormat.Jpeg);
     } finally {
         if (slideImage != null) slideImage.dispose();
     }

    // Slaat de presentatie zonder ingesloten "Calibri"-lettertype op schijf
    pres.save("WithoutManageEmbeddedFonts_out.ppt", SaveFormat.Ppt);
} finally {
    if (pres != null) pres.dispose();
}

Ingesloten lettertypen toevoegen

Door gebruik te maken van de EmbedFontCharacters‑enum en twee overloads van de addEmbeddedFont‑methode, kun je de door jou gewenste (insluit‑)regel kiezen om de lettertypen in een presentatie in te sluiten. Deze Java‑code laat zien hoe je lettertypen kunt insluiten en toevoegen aan een presentatie:

// Laadt de presentatie
Presentation pres = new Presentation("Fonts.pptx");
try {
    IFontData[] allFonts = pres.getFontsManager().getFonts();
    IFontData[] embeddedFonts = pres.getFontsManager().getEmbeddedFonts();

    for (IFontData font : allFonts)
    {
        boolean embeddedFontsContainsFont = false;
        for (int i = 0; i < embeddedFonts.length; i++)
        {
            if (embeddedFonts[i].equals(font))
            {
                embeddedFontsContainsFont = true;
                break;
            }
        }
        if (!embeddedFontsContainsFont)
        {
            pres.getFontsManager().addEmbeddedFont(font, EmbedFontCharacters.All);

            embeddedFonts = pres.getFontsManager().getEmbeddedFonts();
        }
    }

    // Slaat de presentatie op schijf
    pres.save("AddEmbeddedFont_out.pptx", SaveFormat.Pptx);
} finally {
    if (pres != null) pres.dispose();
}

Ingesloten lettertypen comprimeren

Om je in staat te stellen de in een presentatie ingesloten lettertypen te comprimeren en de bestandsgrootte te verkleinen, biedt Aspose.Slides de compressEmbeddedFonts‑methode (beschikbaar via de Compress‑klasse).

Deze Java‑code laat zien hoe je ingesloten PowerPoint‑lettertypen kunt comprimeren:

Presentation pres = new Presentation("pres.pptx");
try {
    Compress.compressEmbeddedFonts(pres);
    pres.save("pres-out.pptx", SaveFormat.Pptx);
} finally {
    if (pres != null) pres.dispose();
}

FAQ

Hoe kan ik zien dat een specifiek lettertype in de presentatie nog steeds wordt vervangen tijdens het renderen ondanks insluiten?

Controleer de substitution information in de font‑manager en de fallback/substitution rules: als het lettertype niet beschikbaar of beperkt is, wordt er een fallback gebruikt.

Is het de moeite waard om systeemlettertypen zoals Arial/Calibri in te sluiten?

Meestal nee – ze zijn bijna altijd beschikbaar. Maar voor volledige draagbaarheid in ‘dunne’ omgevingen (Docker, een Linux‑server zonder vooraf geïnstalleerde lettertypen), kan het insluiten van systeemlettertypen het risico op onverwachte substituties wegnemen.