Configura la sostituzione dei caratteri nelle presentazioni usando Python via Java

Panoramica

La sostituzione dei caratteri consente ad Aspose.Slides di utilizzare un carattere disponibile al posto di un carattere che non può essere accesso quando una presentazione viene renderizzata o convertita. La sostituzione influisce sull’output renderizzato; non modifica il carattere assegnato al contenuto della presentazione.

È possibile definire il carattere da utilizzare quando un determinato carattere non è disponibile e si possono ispezionare le sostituzioni che Aspose.Slides effettuerà durante il rendering. Ciò aiuta a mantenere l’output coerente tra ambienti con caratteri installati differenti.

Ottieni sostituzioni di carattere

Usa il metodo FontsManager.getSubstitutions per determinare quali caratteri verranno sostituiti quando la presentazione è renderizzata. Il metodo restituisce oggetti FontSubstitutionInfo che identificano i nomi del carattere originale e di quello sostituito.

Il seguente esempio Python elenca tutte le sostituzioni di carattere per una presentazione:

import jpype
import asposeslides

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

from asposeslides.api import Presentation

presentation = Presentation("Presentation.pptx")
try:
    for substitution in presentation.getFontsManager().getSubstitutions():
        print(f"{substitution.getOriginalFontName()} -> {substitution.getSubstitutedFontName()}")
finally:
    presentation.dispose()

Ottieni sostituzioni di carattere per le diapositive selezionate

Usa il sovraccarico FontsManager.getSubstitutions con un argomento array di interi Java per ispezionare solo le sostituzioni necessarie a renderizzare diapositive specifiche. Questo è utile quando si sta renderizzando o esportando una parte di una presentazione, controllando incrementalmene una presentazione di grandi dimensioni, individuando diapositive che dipendono da caratteri non disponibili, preparando un pacchetto di caratteri minimo per un server o contenitore, o diagnosticando differenze di rendering senza elaborare diapositive non pertinenti.

L’array slides contiene indici diapositive basati su 1: 1 identifica la prima diapositiva. Al contrario, l’accessore della collezione Presentation.getSlides utilizza l’indicizzazione a zero, quindi la stessa diapositiva è accessibile come presentation.getSlides().get_Item(0). Tieni presente questa differenza quando costruisci l’array per evitare errori di scarto di uno.

Chiama il sovraccarico tramite il metodo Presentation.getFontsManager. Restituisce solo le sostituzioni determinate durante il rendering delle diapositive selezionate. Ogni risultato è un oggetto FontSubstitutionInfo che contiene i nomi del carattere originale e di quello sostituito. Il risultato riflette l’ambiente attuale dei caratteri, le regole di fallback configurate, le regole di sostituzione memorizzate in una FontSubstRuleCollection, e i caratteri caricati esternamente.

La stessa sostituzione può essere richiesta da più di una diapositiva selezionata. De‑duplica i risultati quando crei un inventario dei caratteri o un rapporto di preflight. Il seguente esempio riporta ogni sostituzione restituita e poi crea un elenco ordinato di mappature di caratteri uniche:

import jpype
import asposeslides

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

from asposeslides.api import Presentation

presentation = Presentation("Presentation.pptx")
try:
    selected_slides = jpype.JArray(jpype.JInt)([1, 3, 5])
    substitutions = list(presentation.getFontsManager().getSubstitutions(selected_slides))

    print("Substitutions for the selected slides:")
    for substitution in substitutions:
        print(f"{substitution.getOriginalFontName()} -> {substitution.getSubstitutedFontName()}")

    unique_entries = {}
    for substitution in substitutions:
        entry = f"{substitution.getOriginalFontName()} -> {substitution.getSubstitutedFontName()}"
        unique_entries.setdefault(entry.casefold(), entry)

    print("Deduplicated font preflight report:")
    for key in sorted(unique_entries):
        print(unique_entries[key])
finally:
    presentation.dispose()

La classe FontsManager fornisce entrambi i sovraccarichi. Scegli quello più adatto all’ambito dell’operazione di rendering:

Sovraccarico Usalo quando
getSubstitutions senza argomenti Hai bisogno delle sostituzioni per l’intera presentazione.
getSubstitutions con un array di interi Java Hai bisogno delle sostituzioni per un intervallo selezionato, un controllo incrementale o un’esportazione parziale.

Imposta regole di sostituzione dei caratteri

Per specificare il carattere che Aspose.Slides deve utilizzare quando un carattere di origine non è disponibile:

  1. Carica la presentazione.
  2. Crea le definizioni dei caratteri per i caratteri di origine e di sostituzione.
  3. Crea un FontSubstRule con la condizione WhenInaccessible.
  4. Aggiungi la regola a una FontSubstRuleCollection.
  5. Assegna la collezione usando il metodo FontsManager.setFontSubstRuleList.
  6. Esegui il rendering o la conversione della presentazione.

Il seguente esempio Python sostituisce Arial con SomeRareFont quando SomeRareFont non è disponibile, e poi rende la prima diapositiva per verificare il risultato. Il carattere sostitutivo deve essere disponibile per Aspose.Slides.

import jpype
import asposeslides

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

from asposeslides.api import FontData, FontSubstCondition, FontSubstRule, FontSubstRuleCollection, ImageFormat, Presentation

presentation = Presentation("Fonts.pptx")
try:
    source_font = FontData("SomeRareFont")
    substitute_font = FontData("Arial")
    substitution_rule = FontSubstRule(source_font, substitute_font, FontSubstCondition.WhenInaccessible)

    substitution_rules = FontSubstRuleCollection()
    substitution_rules.add(substitution_rule)
    presentation.getFontsManager().setFontSubstRuleList(substitution_rules)

    image = presentation.getSlides().get_Item(0).getImage(1.0, 1.0)
    try:
        image.save("slide.jpg", ImageFormat.Jpeg)
    finally:
        image.dispose()
finally:
    presentation.dispose()

Limitazioni per i caratteri delle equazioni matematiche

Le regole di sostituzione dei caratteri fanno parte del processo standard di selezione dei caratteri usato durante il rendering e la conversione. Funzionano per il testo normale quando Aspose.Slides può sostituire un carattere inaccessibile con quello disponibile specificato da una regola.

Le equazioni Office Math hanno un requisito aggiuntivo. Se un’equazione utilizza Cambria Math, Aspose.Slides potrebbe aver bisogno di quel carattere esatto per calcolare e renderizzare il layout dell’equazione. Una regola che sostituisce un altro carattere matematico, come STIX Two Math, non può sostituire Cambria Math a questo scopo, e il rendering potrebbe comunque segnalare che Cambria Math è necessario.

Per renderizzare o convertire una presentazione di questo tipo, rendi disponibile Cambria Math per Aspose.Slides. Installalo nel sistema operativo o caricalo come carattere esterno.

Questa limitazione si applica al layout delle equazioni. Le regole di sostituzione descritte sopra continuano a valere per il testo normale della presentazione.

FAQ

Qual è la differenza tra la sostituzione dei caratteri e la sostituzione di carattere?

Font replacement cambia intenzionalmente un carattere in un altro lungo tutta la presentazione. La sostituzione dei caratteri seleziona un carattere per l’output renderizzato quando la condizione configurata è soddisfatta, ad esempio quando il carattere originale non è disponibile.

Quando vengono applicate le regole di sostituzione?

Le regole partecipano alla sequenza di selezione dei caratteri durante il rendering e la conversione. Con WhenInaccessible, una regola viene usata solo quando Aspose.Slides non può accedere al carattere di origine.

Cosa accade quando un carattere manca e non è configurata alcuna regola di sostituzione?

Aspose.Slides seleziona il carattere disponibile più vicino secondo il suo processo di selezione dei caratteri. Il risultato dipende dai caratteri disponibili nell’ambiente di runtime.

Posso caricare caratteri esterni per evitare la sostituzione?

Sì. Puoi caricare caratteri esterni affinché Aspose.Slides li utilizzi durante il rendering e la conversione.

Aspose distribuisce i caratteri con la libreria?

No. Sei responsabile di fornire i caratteri e di rispettare le loro licenze.

I risultati della sostituzione possono differire tra Windows, Linux e macOS?

Sì. I caratteri installati e le posizioni di ricerca dei caratteri differiscono a seconda del sistema operativo, quindi un carattere disponibile su una macchina può richiedere sostituzione su un’altra.

Come posso rendere la selezione dei caratteri coerente nelle conversioni batch?

Usa gli stessi file di caratteri e le stesse versioni su ogni macchina o contenitore, carica i caratteri esterni richiesti, e incorpora i caratteri quando le licenze lo consentono. Puoi anche chiamare FontsManager.getSubstitutions prima dell’esportazione per identificare sostituzioni inattese.