Hantera skript‑specifika temateckensnitt i JavaScript

Översikt

Ett presentations­tema kan välja olika teckensnittsfamiljer för olika skriftsystem. Detta gör att flerspråkig text som fortfarande använder temats teckensnitt kan följa ett samordnat teckensnittsschema samtidigt som lämpliga teckensnitt används för kyrilliska, arabiska, japanska, georgiska, thaa‑skriftsystem och andra skript.

Temats FontScheme innehåller en huvud‑(major) teckensnittssamling, som vanligtvis används för rubriker, och en mindre (minor) teckensnittssamling, som vanligtvis används för brödtext. Förutom deras latin‑ och östasiatiska teckensnittsinställningar, exponerar båda samlingarna mappar från skriftsystem‑taggar till teckensnittsfamiljenamn via klassen Fonts.

Denna artikel visar hur man granskar och ändrar dessa mappar i presentationens master‑tema samt verifierar att ändringarna överlever en spara‑och‑läs‑om‑cykel.

Förstå skripttaggar

Skriftsnittsmetoderna använder fyrabokstavsbeteckningar enligt BCP 47‑skript‑subtaggar för att identifiera skriftsystem. Vanliga värden inkluderar:

Script tag Writing system
Cyrl Cyrillic
Arab Arabic
Hans Simplified Chinese
Jpan Japanese
Geor Georgian
Thaa Thaana

Dessa mappar tillhör temats teckensnittsschema, inte enskilda textdelar. En presentation kan definiera olika mappar för huvud‑ och mindre samlingar, och den kan utelämna mappar för vissa skript.

Åtkomst och inspektion av skriptfontsmappningar

Använd Presentation.getMasterTheme för att komma åt presentationens tema på hög nivå. Metoderna FontScheme.getMajor och FontScheme.getMinor returnerar respektive Fonts‑samlingar.

Anropa Fonts.getScriptFontMap för att hämta alla mappar i en samling. För att slå upp ett enskilt skriftsystem, anropa Fonts.getScriptFont med dess skripttagg. getScriptFont returnerar null när den samlingen inte definierar den efterfrågade mappen.

Modifiera mappningar och verifiera beständighet

Använd Fonts.setScriptFont för att skapa en ny mappning eller ersätta den befintliga teckensnittsfamiljen. Använd Fonts.removeScriptFont för att ta bort en mappning.

Följande end‑to‑end‑exempel läser alla befintliga huvud‑ och mindre mappar, söker upp det japanska huvud‑teckensnittet, ändrar det kyrilliska huvud‑teckensnittet, tar bort den mindre Thaa‑mappningen, sparar presentationen och öppnar den igen för att verifiera båda ändringarna. För att göra borttagningssteget oberoende av det ursprungliga temat, skapar exemplet en Thaa‑mappning endast om ingen redan är definierad.

var aspose = aspose || {};
aspose.slides = require("aspose.slides.via.java");

var presentation = new aspose.slides.Presentation();
try {
    var fontScheme = presentation.getMasterTheme().getFontScheme();
    var majorFonts = fontScheme.getMajor();
    var minorFonts = fontScheme.getMinor();

    console.log("Existing major mappings:");
    var majorMappings = majorFonts.getScriptFontMap().iterator();
    while (majorMappings.hasNext()) {
        var mapping = majorMappings.next();
        console.log("  " + mapping.getKey() + ": " + mapping.getValue());
    }

    console.log("Existing minor mappings:");
    var minorMappings = minorFonts.getScriptFontMap().iterator();
    while (minorMappings.hasNext()) {
        var mapping = minorMappings.next();
        console.log("  " + mapping.getKey() + ": " + mapping.getValue());
    }

    var japaneseFont = majorFonts.getScriptFont("Jpan");
    if (japaneseFont == null) {
        console.log("No major Japanese font is defined.");
    } else {
        console.log("Major Japanese font: " + japaneseFont);
    }

    majorFonts.setScriptFont("Cyrl", "Arial");

    if (minorFonts.getScriptFont("Thaa") == null) {
        minorFonts.setScriptFont("Thaa", "Arial");
    }

    minorFonts.removeScriptFont("Thaa");
    presentation.save("script-font-mappings.pptx", aspose.slides.SaveFormat.Pptx);
} finally {
    presentation.dispose();
}

var savedPresentation = new aspose.slides.Presentation("script-font-mappings.pptx");
try {
    var savedMajorFonts = savedPresentation.getMasterTheme().getFontScheme().getMajor();
    var savedMinorFonts = savedPresentation.getMasterTheme().getFontScheme().getMinor();
    var savedCyrillicFont = savedMajorFonts.getScriptFont("Cyrl");
    var savedThaanaFont = savedMinorFonts.getScriptFont("Thaa");

    if (savedCyrillicFont === "Arial") {
        console.log("The Cyrillic mapping was preserved.");
    } else {
        console.log("The Cyrillic mapping was not preserved.");
    }

    if (savedThaanaFont == null) {
        console.log("The Thaana mapping removal was preserved.");
    } else {
        console.log("The Thaana mapping still exists.");
    }
} finally {
    savedPresentation.dispose();
}

Verifieringen använder samma null‑beteende som en vanlig uppslagning: efter att borttagningen har sparats, returnerar getScriptFont("Thaa") null för den mindre samlingen.

Skilj på temamappningar från andra teckensnittsinställningar

Skript‑specifika temamappningar deltar i teckensnittsurval, men de löser ett annat problem än direkt textformatering, substitution och fallback:

Mechanism Purpose Effect of changing a theme mapping
Script-specific theme font mapping Selects a major or minor theme font for a writing system. Text that still uses the corresponding theme font can resolve to the new mapped family.
Font assigned explicitly to a text portion Fixes the requested font family on that portion instead of relying on the theme. The portion may remain unchanged because its direct formatting overrides the theme choice.
Font substitution Replaces a requested font when that font is unavailable or when a substitution rule applies. It acts after a font has been requested; it does not redefine the theme’s script mapping.
Font fallback Supplies glyphs that the selected font does not contain, often for specific Unicode ranges. It fills missing glyph coverage; it does not change the stored theme mapping.

För mer information om de två sista mekanismerna, se Font Substitution och Fallback Fonts.

Att ändra en mappning i Presentation.getMasterTheme påverkar endast innehåll vars effektiva formatering fortfarande beror på det temat. Text kan istället ärva ett temaarv från en master, layout eller bild, eller använda ett explicit tilldelat teckensnitt. Granska dessa nivåer när det synliga resultatet inte följer presentationens temamappning.

Gör mappade teckensnitt tillgängliga och validera resultatet

En skriptmappning lagrar bara ett teckensnittsfamiljenamn; den installerar eller laddar inte själva teckensnittet. För konsekvent rendering och export måste varje mappat teckensnitt vara installerat i miljön eller tillhandahållas till Aspose.Slides via en anpassad källa, exempelvis FontsLoader.loadExternalFonts eller LoadOptions.getDocumentLevelFontSources. Se Custom Fonts för de tillgängliga laddningsalternativen.

Att verifiera den sparade mappningen bekräftar bara att temadefinitionen bevarades. Det bevisar inte att teckensnittet är tillgängligt, innehåller alla nödvändiga glyfer eller skapar den avsedda layouten. Rendera representativ text för varje obligatoriskt skriftsystem till en bild eller PDF och granska resultatet. Detta fångar saknade teckensnitt, ofullständig glyfkostnad, fallback‑beteende och layoutförändringar innan presentationen distribueras. Se Convert PowerPoint Presentations för exempel på rendering och export.

Vanliga frågor

Vad returnerar getScriptFont när ett skript inte är mappat?

Fonts.getScriptFont returnerar null när den efterfrågade skript‑mappningen inte är definierad i den huvud‑ eller mindre teckensnittssamlingen.

Lägger setScriptFont till en andra mappning när skriptet redan finns?

Nej. Fonts.setScriptFont skapar mappningen när den saknas och ersätter den mappade teckensnittsfamiljen när samma skripttagg redan finns.

Varför ändrade en temamappning inte viss text?

Texten kan ha ett explicit tilldelat teckensnitt, ärva ett annat tema genom en överskuggning, eller påverkas av substitution eller fallback under rendering. En presentation‑nivå skript‑mappning styr endast text vars effektiva formatering fortfarande refererar till den tematiska teckensnittssamlingen.

Räcker det att spara och öppna igen för att validera flerspråkigt resultat?

Nej. Att öppna igen verifierar bara att temadatan är beständig. Man bör också rendera representativ text från varje obligatoriskt skriftsystem för att bekräfta att de mappade teckensnitten är tillgängliga och innehåller de nödvändiga glyferna.