Gestionar fuentes de tema específicas de script en Python
Visión general
Un tema de presentación puede seleccionar diferentes familias tipográficas para distintos sistemas de escritura. Esto permite que el texto multilingüe que sigue usando fuentes del tema mantenga un esquema tipográfico coordinado mientras emplea fuentes adecuadas para cirílico, árabe, japonés, georgiano, thaana y otros alfabetos.
El FontScheme del tema contiene una colección de fuentes principal, normalmente usada para encabezados, y una colección secundaria, normalmente usada para el cuerpo del texto. Además de sus propiedades de fuentes latinas y de Asia Oriental, ambas colecciones exponen asignaciones de etiquetas de sistema de escritura a nombres de familia tipográfica mediante la clase Fonts.
Este artículo muestra cómo inspeccionar y modificar esas asignaciones en el tema maestro de la presentación y verificar que los cambios sobrevivan a un ciclo de guardado y recarga.
Comprender las etiquetas de script
Los métodos de fuente de script usan subtags de script BCP 47 de cuatro letras para identificar sistemas de escritura. Los valores más habituales son:
| Etiqueta de script | Sistema de escritura |
|---|---|
Cyrl |
Cirílico |
Arab |
Árabe |
Hans |
Chino simplificado |
Jpan |
Japonés |
Geor |
Georgiano |
Thaa |
Thaana |
Estas asignaciones pertenecen al esquema tipográfico del tema, no a fragmentos de texto individuales. Una presentación puede definir asignaciones distintas para las colecciones principal y secundaria, y puede omitir asignaciones para algunos scripts.
Acceder e inspeccionar las asignaciones de fuentes de script
Utilice Presentation.master_theme para acceder al tema a nivel de presentación. Las propiedades FontScheme.major y FontScheme.minor devuelven las dos colecciones Fonts.
Llame a Fonts.get_script_font_map para obtener todas las asignaciones de una colección. Para buscar un único sistema de escritura, llame a Fonts.get_script_font con su etiqueta de script. get_script_font devuelve None cuando esa colección no define la asignación solicitada.
Modificar las asignaciones y verificar la persistencia
Utilice Fonts.set_script_font para crear una asignación o sustituir la familia tipográfica actual. Utilice Fonts.remove_script_font para eliminar una asignación.
El siguiente ejemplo de extremo a extremo lee todas las asignaciones principales y secundarias existentes, busca la fuente principal japonesa, cambia la fuente principal cirílica, elimina la asignación secundaria de Thaana, guarda la presentación y la vuelve a abrir para verificar ambos cambios. Para que el paso de eliminación sea independiente del tema inicial, el ejemplo crea primero una asignación de Thaana solo cuando no hay ninguna ya definida.
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 verificación utiliza el mismo comportamiento de None que una consulta ordinaria: tras guardar la eliminación, get_script_font("Thaa") devuelve None para la colección secundaria.
Distinguir las asignaciones del tema de otras configuraciones de fuentes
Las asignaciones de tema específicas de script participan en la selección de fuentes, pero resuelven un problema diferente al formato directo del texto, la sustitución y la reserva de fuentes:
| Mecanismo | Propósito | Efecto de cambiar una asignación del tema |
|---|---|---|
| Asignación de fuente del tema específica de script | Selecciona una fuente principal o secundaria del tema para un sistema de escritura. | El texto que sigue usando la fuente del tema correspondiente puede resolverse a la nueva familia asignada. |
| Fuente asignada explícitamente a un fragmento de texto | Fija la familia tipográfica solicitada en ese fragmento en lugar de depender del tema. | El fragmento puede permanecer sin cambios porque su formato directo sobrescribe la elección del tema. |
| Sustitución de fuentes | Reemplaza una fuente solicitada cuando esa fuente no está disponible o cuando se aplica una regla de sustitución. | Actúa después de que se haya solicitado una fuente; no redefine la asignación de script del tema. |
| Reserva de fuentes | Proporciona glifos que la fuente seleccionada no contiene, a menudo para rangos Unicode específicos. | Completa la cobertura de glifos faltantes; no modifica la asignación almacenada en el tema. |
Para obtener más información sobre los dos últimos mecanismos, consulte Font Substitution y Fallback Fonts.
Cambiar una asignación en Presentation.master_theme afecta solo al contenido cuyo formato efectivo sigue dependiendo de ese tema. El texto puede, en su lugar, heredar una sustitución de tema de una diapositiva maestra, un diseño o una diapositiva concreta, o usar una fuente asignada explícitamente. Inspeccione esos niveles cuando el resultado visible no siga la asignación a nivel de presentación.
Hacer que las fuentes asignadas estén disponibles y validar el resultado
Una asignación de script almacena un nombre de familia tipográfica; no instala ni carga el archivo de fuente correspondiente. Para una representación y exportación coherentes, cada fuente asignada debe estar instalada en el entorno o suministrada a Aspose.Slides mediante una fuente personalizada como FontsLoader.load_external_fonts o LoadOptions.document_level_font_sources. Consulte Custom Fonts para conocer las opciones de carga disponibles.
Verificar la asignación guardada confirma solo que la definición del tema se conservó. No prueba que la fuente esté disponible, que contenga todos los glifos requeridos o que produzca el diseño previsto. Renderice texto representativo para cada sistema de escritura requerido en una imagen o PDF y examine la salida. Esto detecta fuentes faltantes, cobertura de glifos incompleta, comportamiento de reserva y cambios de diseño antes de distribuir la presentación. Véase Convert PowerPoint Presentations para ejemplos de renderizado y exportación.
Preguntas frecuentes
¿Qué devuelve get_script_font cuando un script no está asignado?
Fonts.get_script_font devuelve None cuando la asignación de script solicitada no está definida en esa colección de fuentes principal o secundaria.
¿set_script_font añade una segunda asignación cuando el script ya existe?
No. Fonts.set_script_font crea la asignación cuando falta y reemplaza la familia tipográfica asignada cuando la misma etiqueta de script ya está presente.
¿Por qué al cambiar una asignación del tema no se modificó algún texto?
El texto puede tener una fuente asignada explícitamente, heredar un tema diferente mediante una sustitución, o verse afectado por sustitución o reserva durante el renderizado. Una asignación de script a nivel de presentación controla solo el texto cuyo formato efectivo aún hace referencia a esa colección de fuentes del tema.
¿Es suficiente guardar y volver a abrir para validar la salida multilingüe?
No. Volver a abrir verifica la persistencia de los datos del tema. Además, renderice texto representativo de cada sistema de escritura requerido para confirmar que las fuentes asignadas están disponibles y contienen los glifos necesarios.