Hantera skript-specifika tematypsnitt i Python via Java

Översikt

Ett presentations tema kan välja olika typsnittsfamiljer för olika skriftsystem. Detta gör det möjligt för flerspråkig text som fortfarande använder temats typsnitt att följa ett enhetligt typsnittsschema samtidigt som lämpliga typsnitt används för kyrilliska, arabiska, japanska, georgiska, thaana och andra skript.

Temats FontScheme innehåller en huvudtypsnittssamling, som vanligtvis används för rubriker, och en sekundärtypsnittssamling, som vanligtvis används för brödtext. Förutom deras latinska och östasiatiska typsnittsinställningar exponerar båda samlingarna mappningar från skriftsystemtaggar till typsnittsfamiljenamn via klassen Fonts.

Denna artikel visar hur man inspekterar och ändrar dessa mappningar i presentationens mastertema och verifierar att ändringarna överlever en spara‑och‑läs‑om‑cykel.

Förstå skripttaggar

Metoderna för skript‑typsnitt använder fyrbokstavs‑BCP‑47‑skript‑subtaggar för att identifiera skriftsystem. Vanliga värden inkluderar:

Skript‑tagg Skriftsystem
Cyrl Kyrilliska
Arab Arabiska
Hans Förenklad kinesiska
Jpan Japanska
Geor Georgiska
Thaa Thaana

Dessa mappningar tillhör temats typsnittsschema, inte enskilda textdelar. En presentation kan definiera olika mappningar för huvud‑ och sekundärsamlingarna, och den kan utelämna mappningar för vissa skript.

Åtkomst och inspektion av skript‑typsnittsmappningar

Använd Presentation.getMasterTheme för att komma åt presentationens tema på övergripande nivå. Metoderna FontScheme.getMajor och FontScheme.getMinor returnerar de två Fonts‑samlingarna.

Anropa Fonts.getScriptFontMap för att hämta alla mappningar från en samling. För att slå upp ett skriftsystem, anropa Fonts.getScriptFont med dess skript‑tagg. getScriptFont returnerar None när den samlingen inte definierar den begärda mappningen.

Modifiera mappningar och verifiera beständighet

Använd Fonts.setScriptFont för att skapa en mappning eller ersätta dess nuvarande typsnittsfamilj. Använd Fonts.removeScriptFont för att ta bort en mappning.

Det följande end‑to‑end‑exemplet läser alla befintliga huvud‑ och sekundärmappningar, slår upp det japanska huvudtypsnittet, ändrar det kyrilliska huvudtypsnittet, tar bort den sekundära Thaana‑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 först en Thaana‑mappning endast när ingen redan är definierad.

import jpype
import asposeslides

if not jpype.isJVMStarted():
    jpype.startJVM()

from asposeslides.api import Presentation, SaveFormat

presentation = Presentation()
try:
    font_scheme = presentation.getMasterTheme().getFontScheme()
    major_fonts = font_scheme.getMajor()
    minor_fonts = font_scheme.getMinor()

    print("Existing major mappings:")
    major_mappings = major_fonts.getScriptFontMap().iterator()
    while major_mappings.hasNext():
        mapping = major_mappings.next()
        print(f"  {mapping.getKey()}: {mapping.getValue()}")

    print("Existing minor mappings:")
    minor_mappings = minor_fonts.getScriptFontMap().iterator()
    while minor_mappings.hasNext():
        mapping = minor_mappings.next()
        print(f"  {mapping.getKey()}: {mapping.getValue()}")

    japanese_font = major_fonts.getScriptFont("Jpan")
    if japanese_font is None:
        print("No major Japanese font is defined.")
    else:
        print(f"Major Japanese font: {japanese_font}")

    major_fonts.setScriptFont("Cyrl", "Arial")

    if minor_fonts.getScriptFont("Thaa") is None:
        minor_fonts.setScriptFont("Thaa", "Arial")

    minor_fonts.removeScriptFont("Thaa")
    presentation.save("script-font-mappings.pptx", SaveFormat.Pptx)
finally:
    presentation.dispose()

saved_presentation = Presentation("script-font-mappings.pptx")
try:
    saved_major_fonts = saved_presentation.getMasterTheme().getFontScheme().getMajor()
    saved_minor_fonts = saved_presentation.getMasterTheme().getFontScheme().getMinor()
    saved_cyrillic_font = saved_major_fonts.getScriptFont("Cyrl")
    saved_thaana_font = saved_minor_fonts.getScriptFont("Thaa")

    if saved_cyrillic_font == "Arial":
        print("The Cyrillic mapping was preserved.")
    else:
        print("The Cyrillic mapping was not preserved.")

    if saved_thaana_font is None:
        print("The Thaana mapping removal was preserved.")
    else:
        print("The Thaana mapping still exists.")
finally:
    saved_presentation.dispose()

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

Skilj på temamappningar från andra typsnittsinställningar

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

Mekanism Syfte Effekt av att ändra en temamappning
Skript‑specifik tematypsnittsmappning Väljer ett huvud‑ eller sekundärt tematypsnitt för ett skriftsystem. Text som fortfarande använder motsvarande tematypsnitt kan lösa till den nya mappade familjen.
Typsnitt tilldelat explicit till en textdel Fixerar den begärda typsnittsfamiljen på den delen istället för att förlita sig på temat. Textdelen kan förbli oförändrad eftersom dess direkta formatering åsidosätter temavalet.
Typsnittssubstitution Ersätter ett begärt typsnitt när det typsnittet inte är tillgängligt eller när en substitutionsregel gäller. Det sker efter att ett typsnitt har begärts; det omdefinierar inte temats skript‑mappning.
Typsnittsreserv Tillhandahåller tecken som det valda typsnittet inte innehåller, ofta för specifika Unicode‑intervall. Det fyller i saknade tecken; det ändrar inte den lagrade temamappningen.

För mer information om de två sista mekanismerna, se Typsnittssubstitution och Reservtypsnitt.

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 typsnitt. Inspektera dessa nivåer när det synliga resultatet inte följer presentationens temamappning.

Gör mappade typsnitt tillgängliga och validera resultatet

En skript‑mappning lagrar ett typsnittsfamiljenamn; den installerar eller laddar inte den motsvarande typsnittsfilen. För konsekvent rendering och export måste varje mappat typsnitt vara installerat i miljön eller tillhandahållas till Aspose.Slides via en anpassad källa såsom FontsLoader.loadExternalFonts eller LoadOptions.getDocumentLevelFontSources. Se Custom Fonts för tillgängliga laddningsalternativ.

Att verifiera den sparade mappningen bekräftar bara att temadefinitionen bevarades. Det bevisar inte att typsnittet är tillgängligt, innehåller alla nödvändiga tecken eller producerar den avsedda layouten. Rendera representativ text för varje obligatoriskt skriftsystem till en bild eller PDF och inspektera resultatet. Detta fångar saknade typsnitt, ofullständig teckentäckning, reservbeteende och layoutändringar innan presentationen distribueras. Se Convert PowerPoint Presentations för exempel på rendering och export.

FAQ

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

Fonts.getScriptFont returnerar None när den begärda skript‑mappningen inte är definierad i den huvud‑ eller sekundära typsnittssamlingen.

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 typsnittsfamiljen när samma skript‑tagg redan finns.

Varför ändrade en förändring av en temamappning inte viss text?

Texten kan ha ett explicit tilldelat typsnitt, ärva ett annat tema via en överskrivning, eller påverkas av substitution eller reservtypsnitt under rendering. En skript‑mappning på presentationsnivå styr endast text vars effektiva formatering fortfarande hänvisar till den tematypsnittssamlingen.

Är det tillräckligt att spara och öppna igen för att validera flerspråkigt resultat?

Nej. Att öppna igen verifierar beständighet av temadata. Rendera också representativ text från varje obligatoriskt skriftsystem för att bekräfta att de mappade typsnitten är tillgängliga och innehåller de nödvändiga tecknen.