Gestisci i caratteri tematici specifici per script in Python

Panoramica

Un tema di presentazione può selezionare diverse famiglie di caratteri per diversi sistemi di scrittura. Questo consente al testo multilingue che utilizza ancora i caratteri del tema di seguire uno schema di caratteri coordinato, utilizzando caratteri adeguati per il cirillico, l’arabo, il giapponese, il georgiano, il thaana e altri script.

Il FontScheme del tema contiene una raccolta di caratteri principali, tipicamente usata per i titoli, e una raccolta di caratteri secondari, tipicamente usata per il corpo del testo. Oltre alle loro proprietà di caratteri Latin e East Asian, entrambe le raccolte espongono mappature da tag di sistemi di scrittura a nomi di famiglie di caratteri tramite la classe Fonts.

Questo articolo mostra come ispezionare e modificare tali mappature nel tema master della presentazione e verificare che le modifiche sopravvivano a un ciclo di salvataggio e ricarica.

Comprendere i tag di script

I metodi dei caratteri script utilizzano sottotag di script BCP 47 a quattro lettere per identificare i sistemi di scrittura. I valori più comuni includono:

Tag script Sistema di scrittura
Cyrl Cirillico
Arab Arabo
Hans Cinese semplificato
Jpan Giapponese
Geor Georgiano
Thaa Thaana

Accedere e ispezionare le mappature dei caratteri script

Usa Presentation.master_theme per accedere al tema a livello di presentazione. Le proprietà FontScheme.major e FontScheme.minor restituiscono le due raccolte Fonts.

Chiama Fonts.get_script_font_map per recuperare tutte le mappature da una raccolta. Per cercare un singolo sistema di scrittura, chiama Fonts.get_script_font con il suo tag script. get_script_font restituisce None quando quella raccolta non definisce la mappatura richiesta.

Modificare le mappature e verificare la persistenza

Usa Fonts.set_script_font per creare una mappatura o sostituire la famiglia di caratteri corrente. Usa Fonts.remove_script_font per rimuovere una mappatura.

La seguente example end-to-end legge tutte le mappature principali e secondarie esistenti, cerca il carattere principale giapponese, modifica il carattere principale cirillico, rimuove la mappatura secondaria Thaana, salva la presentazione e la riapre per verificare entrambe le modifiche. Per rendere il passo di rimozione indipendente dal tema iniziale, l’esempio crea prima una mappatura Thaana solo se non è già definita.

import aspose.slides as slides


def print_script_font_map(label, fonts):
    print(label)
    for mapping in fonts.get_script_font_map():
        print(f"  {mapping.key}: {mapping.value}")


with slides.Presentation() as presentation:
    font_scheme = presentation.master_theme.font_scheme
    major_fonts = font_scheme.major
    minor_fonts = font_scheme.minor

    print_script_font_map("Existing major mappings:", major_fonts)
    print_script_font_map("Existing minor mappings:", minor_fonts)

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

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

    if minor_fonts.get_script_font("Thaa") is None:
        minor_fonts.set_script_font("Thaa", "Arial")

    minor_fonts.remove_script_font("Thaa")
    presentation.save("script-font-mappings.pptx", slides.export.SaveFormat.PPTX)

with slides.Presentation("script-font-mappings.pptx") as saved_presentation:
    saved_major_fonts = saved_presentation.master_theme.font_scheme.major
    saved_minor_fonts = saved_presentation.master_theme.font_scheme.minor
    saved_cyrillic_font = saved_major_fonts.get_script_font("Cyrl")
    saved_thaana_font = saved_minor_fonts.get_script_font("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.")

La verifica utilizza lo stesso comportamento None di una ricerca ordinaria: dopo che la rimozione è stata salvata, get_script_font("Thaa") restituisce None per la raccolta secondaria.

Distinguere le mappature del tema da altre impostazioni dei caratteri

Le mappature tematiche specifiche per script partecipano alla selezione dei caratteri, ma risolvono un problema diverso dalla formattazione diretta del testo, sostituzione e fallback:

Meccanismo Scopo Effetto del cambiare una mappatura del tema
Mappatura del carattere tematico specifica per script Seleziona un carattere tematico principale o secondario per un sistema di scrittura. Il testo che utilizza ancora il carattere tematico corrispondente può risolvere alla nuova famiglia mappata.
Carattere assegnato esplicitamente a una porzione di testo Fissa la famiglia di caratteri richiesta su quella porzione invece di basarsi sul tema. La porzione può rimanere invariata perché la sua formattazione diretta sovrascrive la scelta del tema.
Sostituzione del carattere Sostituisce un carattere richiesto quando quel carattere non è disponibile o quando si applica una regola di sostituzione. Agisce dopo che un carattere è stato richiesto; non ridefinisce la mappatura script del tema.
Fallback del carattere Fornisce glifi che il carattere selezionato non contiene, spesso per intervalli Unicode specifici. Compensa la copertura dei glifi mancanti; non modifica la mappatura del tema memorizzata.

Per ulteriori informazioni sugli ultimi due meccanismi, vedere Sostituzione dei caratteri e Caratteri di fallback.

Cambiare una mappatura in Presentation.master_theme influisce solo sul contenuto il cui formattazione efficace dipende ancora da quel tema. Il testo può invece ereditare un override del tema da un master, layout o slide, o utilizzare un carattere assegnato esplicitamente. Ispeziona questi livelli quando il risultato visibile non segue la mappatura a livello di presentazione.

Rendere disponibili i caratteri mappati e convalidare il risultato

Una mappatura script memorizza un nome di famiglia di caratteri; non installa né carica il file di carattere corrispondente. Per un rendering e un’esportazione coerenti, ogni carattere mappato deve essere installato nell’ambiente o fornito a Aspose.Slides tramite una sorgente personalizzata come FontsLoader.load_external_fonts o LoadOptions.document_level_font_sources. Consulta Caratteri personalizzati per le opzioni di caricamento disponibili.

Verificare la mappatura salvata conferma solo che la definizione del tema è stata preservata. Non dimostra che il carattere sia disponibile, contenga tutti i glifi richiesti o produca il layout previsto. Renderizza testo rappresentativo per ogni sistema di scrittura necessario in un’immagine o PDF e ispeziona l’output. Questo individua caratteri mancanti, copertura di glifi incompleta, comportamento di fallback e modifiche al layout prima della distribuzione della presentazione. Vedi Converti presentazioni PowerPoint per esempi di rendering ed esportazione.

FAQ

Cosa restituisce get_script_font quando uno script non è mappato?

Fonts.get_script_font restituisce None quando la mappatura di script richiesta non è definita in quella raccolta di caratteri principale o secondaria.

set_script_font aggiunge una seconda mappatura quando lo script esiste già?

No. Fonts.set_script_font crea la mappatura quando è assente e sostituisce la famiglia di caratteri mappata quando lo stesso tag script è già presente.

Perché la modifica di una mappatura del tema non ha cambiato alcuni testi?

Il testo potrebbe avere un carattere assegnato esplicitamente, ereditare un tema diverso tramite un override, o essere influenzato da sostituzione o fallback durante il rendering. Una mappatura script a livello di presentazione controlla solo il testo la cui formattazione efficace fa ancora riferimento a quella raccolta di caratteri del tema.

Il salvataggio e la riapertura sono sufficienti per convalidare l’output multilingue?

No. La riapertura verifica la persistenza dei dati del tema. Inoltre, renderizza testo rappresentativo da ciascun sistema di scrittura richiesto per confermare che i caratteri mappati siano disponibili e contengano i glifi necessari.