Gestire i font del tema specifici per script in PHP

Panoramica

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

Il FontScheme del tema contiene una collezione di caratteri principali, tipicamente usata per i titoli, e una collezione di caratteri secondari, tipicamente usata per il testo del corpo. Oltre alle impostazioni di caratteri per il Latino e l’Est asiatico, entrambe le collezioni di Fonts espongono le mappature dai tag dei sistemi di scrittura ai nomi delle famiglie di caratteri.

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 riapertura.

Comprendere i tag di script

I metodi dei caratteri di script utilizzano sottotag di script BCP 47 a quattro lettere per identificare i sistemi di scrittura. I valori 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::getMasterTheme per accedere al tema a livello di presentazione. I metodi MasterTheme::getFontScheme, FontScheme::getMajor e FontScheme::getMinor forniscono l’accesso alle due collezioni di Fonts.

Chiama Fonts::getScriptFontMap per recuperare tutte le mappature da una collezione. Per cercare un singolo sistema di scrittura, chiama Fonts::getScriptFont con il relativo tag script. Fonts::getScriptFont restituisce null quando quella collezione non definisce la mappatura richiesta.

Modificare le Mappature e Verificare la Persistenza

Usa Fonts::setScriptFont per creare una mappatura o sostituire la famiglia di caratteri corrente. Usa Fonts::removeScriptFont per rimuovere una mappatura.

Il seguente esempio 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.

use aspose\slides\Presentation;
use aspose\slides\SaveFormat;

$presentation = new Presentation();
try {
    $fontScheme = $presentation->getMasterTheme()->getFontScheme();
    $majorFonts = $fontScheme->getMajor();
    $minorFonts = $fontScheme->getMinor();

    echo "Existing major mappings:" . PHP_EOL;
    $majorMappings = $majorFonts->getScriptFontMap()->iterator();
    while (java_values($majorMappings->hasNext())) {
        $mapping = $majorMappings->next();
        echo "  " . java_values($mapping->getKey()) . ": " . java_values($mapping->getValue()) . PHP_EOL;
    }

    echo "Existing minor mappings:" . PHP_EOL;
    $minorMappings = $minorFonts->getScriptFontMap()->iterator();
    while (java_values($minorMappings->hasNext())) {
        $mapping = $minorMappings->next();
        echo "  " . java_values($mapping->getKey()) . ": " . java_values($mapping->getValue()) . PHP_EOL;
    }

    $japaneseFont = $majorFonts->getScriptFont("Jpan");
    if (java_is_null($japaneseFont)) {
        echo "No major Japanese font is defined." . PHP_EOL;
    } else {
        echo "Major Japanese font: " . java_values($japaneseFont) . PHP_EOL;
    }

    $majorFonts->setScriptFont("Cyrl", "Arial");

    if (java_is_null($minorFonts->getScriptFont("Thaa"))) {
        $minorFonts->setScriptFont("Thaa", "Arial");
    }

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

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

    if (!java_is_null($savedCyrillicFont) && java_values($savedCyrillicFont) === "Arial") {
        echo "The Cyrillic mapping was preserved." . PHP_EOL;
    } else {
        echo "The Cyrillic mapping was not preserved." . PHP_EOL;
    }

    if (java_is_null($savedThaanaFont)) {
        echo "The Thaana mapping removal was preserved." . PHP_EOL;
    } else {
        echo "The Thaana mapping still exists." . PHP_EOL;
    }
} finally {
    $savedPresentation->dispose();
}

La verifica utilizza lo stesso comportamento null di una ricerca ordinaria: dopo che la rimozione è stata salvata, Fonts::getScriptFont("Thaa") restituisce null per la collezione secondaria.

Distinguere le Mappature del Tema da Altre Impostazioni di Carattere

Le mappature del tema specifiche per script partecipano alla selezione del carattere, ma risolvono un problema diverso rispetto alla formattazione diretta del testo, alla sostituzione e al fallback:

Meccanismo Scopo Effetto della modifica di una mappatura del tema
Mappatura del carattere del tema specifica per script Seleziona un carattere del tema principale o secondario per un sistema di scrittura. Il testo che continua a utilizzare il carattere del tema 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 fare affidamento 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 di glifi mancanti; non modifica la mappatura del tema memorizzata.

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

Modificare una mappatura in Presentation::getMasterTheme influisce solo sul contenuto il cui formattazione effettiva dipende ancora da quel tema. Il testo può invece ereditare una sovrascrittura del tema da un master, layout o slide, oppure 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 Validare il Risultato

Una mappatura script memorizza il nome di una famiglia di caratteri; non installa né carica il relativo file di carattere. Per un rendering e un’esportazione coerenti, ogni carattere mappato deve essere installato nell’ambiente o fornito ad Aspose.Slides tramite una fonte personalizzata come FontsLoader::loadExternalFonts o LoadOptions::getDocumentLevelFontSources. Vedi Custom Fonts 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 richiesto in un’immagine o PDF e ispeziona l’output. Questo individuerà caratteri mancanti, copertura di glifi incompleta, comportamento di fallback e modifiche di layout prima che la presentazione venga distribuita. Vedi Convert PowerPoint Presentations per esempi di rendering ed esportazione.

FAQ

Cosa restituisce Fonts::getScriptFont quando uno script non è mappato?

[Fonts::getScriptFont](https://reference.aspose.com/slides/it/php-java/aspose.slides/fonts/#getScriptFont) restituisce null quando la mappatura dello script richiesto non è definita in quella collezione di caratteri principale o secondaria.

Fonts::setScriptFont aggiunge una seconda mappatura quando lo script esiste già?

No. [Fonts::setScriptFont](https://reference.aspose.com/slides/it/php-java/aspose.slides/fonts/#setScriptFont) crea la mappatura quando è mancante 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 può avere un carattere assegnato esplicitamente, ereditare un tema diverso tramite una sovrascrittura, o essere influenzato da sostituzione o fallback durante il rendering. Una mappatura script a livello di presentazione controlla solo il testo la cui formattazione effettiva fa ancora riferimento a quella collezione 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 ogni sistema di scrittura richiesto per confermare che i caratteri mappati siano disponibili e contengano i glifi necessari.