Lettertype-substitutie configureren in presentaties met Java

Overzicht

Lettertype‑substitutie stelt Aspose.Slides in staat om een beschikbaar lettertype te gebruiken in plaats van een lettertype dat niet kan worden benaderd wanneer een presentatie wordt gerenderd of geconverteerd. De substitutie beïnvloedt de gerenderde output; het wijzigt het aan de presentatie‑inhoud toegewezen lettertype niet.

U kunt het te gebruiken lettertype definiëren wanneer een specifiek lettertype niet beschikbaar is, en u kunt de substituties inspecteren die Aspose.Slides tijdens het renderen zal uitvoeren. Dit helpt de output consistent te houden tussen omgevingen met verschillende geïnstalleerde lettertypen.

Als een lettertype beschikbaar is maar geen eigen vet type heeft, zie Lettertypen zonder een eigen vet type behandelen. Die sectie legt uit hoe de betreffende tekst tijdens PDF‑export gerasterd kan worden en wat de gevolgen zijn voor tekstselectie, zoeken en schalen.

Lettertype‑substituties ophalen

Gebruik de IFontsManager.getSubstitutions methode om te bepalen welke lettertypen worden vervangen wanneer de presentatie wordt gerenderd. De methode retourneert FontSubstitutionInfo objecten die de oorspronkelijke en vervangende lettertype‑namen identificeren.

Het volgende Java‑voorbeeld geeft alle lettertype‑substituties voor een presentatie weer:

import com.aspose.slides.FontSubstitutionInfo;
import com.aspose.slides.Presentation;

Presentation presentation = new Presentation("Presentation.pptx");
try {
    for (FontSubstitutionInfo substitution : presentation.getFontsManager().getSubstitutions()) {
        System.out.println(substitution.getOriginalFontName() + " -> " + substitution.getSubstitutedFontName());
    }
} finally {
    presentation.dispose();
}

Lettertype‑substituties ophalen voor geselecteerde dia’s

Gebruik de IFontsManager.getSubstitutions overload met een int[] slides argument om alleen de substituties te inspecteren die nodig zijn om specifieke dia’s te renderen. Dit is nuttig wanneer u een deel van een presentatie rendert of exporteert, een grote presentatie incrementeel controleert, dia’s zoekt die afhankelijk zijn van niet‑beschikbare lettertypen, een minimaal lettertype‑pakket voorbereidt voor een server of container, of weergave‑verschillen diagnosticeert zonder irrelevante dia’s te verwerken.

De slides‑array bevat één‑gebaseerde dia‑indexen: 1 identificeert de eerste dia. Ter vergelijking gebruikt de Presentation.getSlides collectie‑accessor nul‑gebaseerde indexering, zodat dezelfde dia wordt benaderd als presentation.getSlides().get_Item(0). Houd dit verschil in gedachten bij het opbouwen van de array om off‑by‑one‑fouten te voorkomen.

Roep de overload aan via de Presentation.getFontsManager methode. Deze retourneert alleen de substituties die zijn bepaald tijdens het renderen van de geselecteerde dia’s. Elk resultaat is een FontSubstitutionInfo object dat de oorspronkelijke en vervangende lettertype‑namen bevat. Het resultaat weerspiegelt de huidige lettertype‑omgeving, geconfigureerde fallback‑regels, en extern geladen lettertypen. Substitutieregels die zijn opgeslagen in een IFontSubstRuleCollection worden toegepast wanneer de presentatie wordt gerenderd, maar het resultaat geeft ze niet weer; controleer in plaats daarvan de lettertypen in het uitvoerbestand.

Dezelfde substitutie kan door meer dan één geselecteerde dia vereist zijn. Dedupliceer de resultaten wanneer u een lettertype‑inventaris of preflight‑rapport maakt. Het volgende voorbeeld meldt elke geretourneerde substitutie en maakt vervolgens een gesorteerde lijst van unieke lettertype‑koppelingen:

import com.aspose.slides.FontSubstitutionInfo;
import com.aspose.slides.Presentation;
import java.util.ArrayList;
import java.util.List;
import java.util.Set;
import java.util.TreeSet;

Presentation presentation = new Presentation("Presentation.pptx");
try {
    int[] selectedSlides = { 1, 3, 5 };
    List<FontSubstitutionInfo> substitutions = new ArrayList<>();
    for (FontSubstitutionInfo substitution : presentation.getFontsManager().getSubstitutions(selectedSlides)) {
        substitutions.add(substitution);
    }

    System.out.println("Substitutions for the selected slides:");
    for (FontSubstitutionInfo substitution : substitutions) {
        System.out.println(substitution.getOriginalFontName() + " -> " + substitution.getSubstitutedFontName());
    }

    Set<String> sortedPreflightEntries = new TreeSet<>(String.CASE_INSENSITIVE_ORDER);
    for (FontSubstitutionInfo substitution : substitutions) {
        String entry = substitution.getOriginalFontName() + " -> " + substitution.getSubstitutedFontName();
        sortedPreflightEntries.add(entry);
    }

    System.out.println("Deduplicated font preflight report:");
    for (String entry : sortedPreflightEntries) {
        System.out.println(entry);
    }
} finally {
    presentation.dispose();
}

De IFontsManager interface biedt beide overloads. Kies er één op basis van de reikwijdte van de render‑operatie:

Overload Wanneer te gebruiken
getSubstitutions zonder argumenten U hebt substituties nodig voor de volledige presentatie.
getSubstitutions met int[] slides U hebt substituties nodig voor een geselecteerd bereik, incrementele controle of gedeeltelijke export.

Lettertype‑substitutieregels instellen

Om het lettertype op te geven dat Aspose.Slides moet gebruiken wanneer een bronlettertype niet beschikbaar is:

  1. Laad de presentatie.
  2. Maak lettertype‑definities aan voor het bron- en vervangende lettertype.
  3. Maak een FontSubstRule met de WhenInaccessible conditie.
  4. Voeg de regel toe aan een FontSubstRuleCollection.
  5. Wijs de collectie toe met de FontsManager.setFontSubstRuleList methode.
  6. Render of converteer de presentatie.

Het volgende Java‑voorbeeld vervangt Arial voor SomeRareFont wanneer SomeRareFont niet beschikbaar is, en rendert vervolgens de eerste dia om het resultaat te verifiëren. Het vervangende lettertype moet beschikbaar zijn voor Aspose.Slides.

import com.aspose.slides.FontData;
import com.aspose.slides.FontSubstCondition;
import com.aspose.slides.FontSubstRule;
import com.aspose.slides.FontSubstRuleCollection;
import com.aspose.slides.IFontData;
import com.aspose.slides.IFontSubstRule;
import com.aspose.slides.IFontSubstRuleCollection;
import com.aspose.slides.IImage;
import com.aspose.slides.ImageFormat;
import com.aspose.slides.Presentation;

Presentation presentation = new Presentation("Fonts.pptx");
try {
    IFontData sourceFont = new FontData("SomeRareFont");
    IFontData substituteFont = new FontData("Arial");
    IFontSubstRule substitutionRule = new FontSubstRule(sourceFont, substituteFont, FontSubstCondition.WhenInaccessible);

    IFontSubstRuleCollection substitutionRules = new FontSubstRuleCollection();
    substitutionRules.add(substitutionRule);
    presentation.getFontsManager().setFontSubstRuleList(substitutionRules);

    IImage image = presentation.getSlides().get_Item(0).getImage(1f, 1f);
    try {
        image.save("slide.jpg", ImageFormat.Jpeg);
    } finally {
        image.dispose();
    }
} finally {
    presentation.dispose();
}

Beperkingen voor wiskundige vergelijkingslettertypen

Lettertype‑substitutieregels maken deel uit van het standaardlettertype‑selectieproces dat tijdens renderen en converteren wordt gebruikt. Ze werken voor gewone tekst wanneer Aspose.Slides een ontoegankelijk lettertype kan vervangen door het beschikbare lettertype dat door een regel is gespecificeerd.

Office‑Math‑vergelijkingen hebben een extra vereiste. Als een vergelijking Cambria Math gebruikt, kan Aspose.Slides dat exacte lettertype nodig hebben om de lay‑out van de vergelijking te berekenen en te renderen. Een regel die een ander wiskundig lettertype vervangt, zoals STIX Two Math, kan Cambria Math hiervoor niet vervangen, en de weergave kan nog steeds melden dat Cambria Math vereist is.

Om een dergelijke presentatie te renderen of converteren, maak Cambria Math beschikbaar voor Aspose.Slides. Installeer het in het besturingssysteem of laad het als een extern lettertype.

Deze beperking geldt voor de vergelijking‑lay‑out. De hierboven beschreven substitutieregels blijven van toepassing op gewone presentatietekst.

FAQ

Wat is het verschil tussen lettertype‑vervanging en lettertype‑substitutie?

Lettertype‑vervanging verandert opzettelijk één lettertype in een ander door de gehele presentatie. Lettertype‑substitutie kiest een lettertype voor de gerenderde output wanneer aan de geconfigureerde voorwaarde wordt voldaan, bijvoorbeeld wanneer het oorspronkelijke lettertype niet beschikbaar is.

Wanneer worden substitutieregels toegepast?

De regels nemen deel aan de font selection sequence tijdens renderen en converteren. Met WhenInaccessible wordt een regel alleen gebruikt wanneer Aspose.Slides geen toegang heeft tot het bronlettertype.

Wat gebeurt er wanneer een lettertype ontbreekt en er geen substitutieregel is geconfigureerd?

Aspose.Slides selecteert het dichtstbijzijnde beschikbare lettertype volgens zijn lettertype‑selectieproces. Het resultaat hangt af van de lettertypen die beschikbaar zijn in de runtime‑omgeving.

Kan ik externe lettertypen laden om substitutie te vermijden?

Ja. U kunt externe lettertypen laden zodat Aspose.Slides ze kan gebruiken tijdens renderen en converteren.

Distribueert Aspose lettertypen met de bibliotheek?

Nee. U bent verantwoordelijk voor het leveren van lettertypen en het naleven van hun licenties.

Kunnen substitutieresultaten verschillen tussen Windows, Linux en macOS?

Ja. Geïnstalleerde lettertypen en zoeklocaties voor lettertypen verschillen per besturingssysteem, zodat een lettertype dat op één machine beschikbaar is, op een andere substitutie kan vereisen.

Hoe kan ik lettertype‑selectie consistent maken bij batch‑conversies?

Gebruik dezelfde lettertype‑bestanden en -versies op elke machine of container, externe lettertypen laden, en lettertypen insluiten wanneer de licentie dat toestaat. U kunt ook IFontsManager.getSubstitutions aanroepen vóór export om onverwachte substituties te identificeren.