Configurar sustitución de fuentes en presentaciones con Java
Descripción general
La sustitución de fuentes permite que Aspose.Slides utilice una fuente disponible en lugar de una fuente que no se puede acceder cuando una presentación se renderiza o se convierte. La sustitución afecta la salida renderizada; no cambia la fuente asignada al contenido de la presentación.
Puede definir la fuente que se debe usar cuando una fuente determinada no está disponible, y puede inspeccionar las sustituciones que Aspose.Slides realizará durante la renderización. Esto ayuda a mantener la salida coherente en entornos con diferentes fuentes instaladas.
Si una fuente está disponible pero no tiene un tipo de letra negrita dedicado, consulte Manejar fuentes sin un tipo de letra negrita dedicada. Esa sección explica cómo rasterizar el texto afectado durante la exportación a PDF y las consecuencias para la selección de texto, la búsqueda y el escalado.
Obtener sustituciones de fuentes
Utilice el método IFontsManager.getSubstitutions para determinar qué fuentes se sustituirán cuando la presentación se renderice. El método devuelve objetos FontSubstitutionInfo que identifican los nombres de fuente originales y sustituidos.
El siguiente ejemplo en Java enumera todas las sustituciones de fuentes para una presentación:
import com.aspose.slides.FontSubstitutionInfo;
import com.aspose.slides.Presentation;
Presentation presentation = new Presentation("Presentation.pptx");
try {
for (FontSubstitutionInfo substitution : presentation.getFontsManager().getSubstitutions()) {
System.out.println(substitution.getOriginalFontName() + " -> " + substitution.getSubstitutedFontName());
}
} finally {
presentation.dispose();
}
Obtener sustituciones de fuentes para diapositivas seleccionadas
Utilice la sobrecarga del método IFontsManager.getSubstitutions con un argumento int[] slides para inspeccionar solo las sustituciones necesarias para renderizar diapositivas específicas. Esto es útil cuando está renderizando o exportando parte de una presentación, revisando una presentación grande de forma incremental, localizando diapositivas que dependen de fuentes no disponibles, preparando un paquete de fuentes mínimo para un servidor o contenedor, o diagnosticando diferencias de renderizado sin procesar diapositivas no relacionadas.
El arreglo slides contiene índices de diapositivas basados en 1: 1 identifica la primera diapositiva. En contraste, el accesor de colección Presentation.getSlides utiliza indexación basada en 0, por lo que esa misma diapositiva se accede como presentation.getSlides().get_Item(0). Tenga presente esta diferencia al construir el arreglo para evitar errores de desbordamiento de índice.
Llame a la sobrecarga a través del método Presentation.getFontsManager. Devuelve solo las sustituciones determinadas mientras se renderizan las diapositivas seleccionadas. Cada resultado es un objeto FontSubstitutionInfo que contiene los nombres de fuente originales y sustituidos. El resultado refleja el entorno de fuentes actual, las reglas de reserva configuradas y las fuentes cargadas externamente. Las reglas de sustitución almacenadas en una IFontSubstRuleCollection se aplican cuando la presentación se renderiza, pero el resultado no las enumera; en su lugar, compruebe las fuentes en el archivo de salida.
La misma sustitución puede ser requerida por más de una diapositiva seleccionada. Elimine duplicados de los resultados cuando cree un inventario de fuentes o un informe de preflight. El siguiente ejemplo informa de cada sustitución devuelta y luego crea una lista ordenada de asignaciones de fuentes únicas:
import com.aspose.slides.FontSubstitutionInfo;
import com.aspose.slides.Presentation;
import java.util.ArrayList;
import java.util.List;
import java.util.Set;
import java.util.TreeSet;
Presentation presentation = new Presentation("Presentation.pptx");
try {
int[] selectedSlides = { 1, 3, 5 };
List<FontSubstitutionInfo> substitutions = new ArrayList<>();
for (FontSubstitutionInfo substitution : presentation.getFontsManager().getSubstitutions(selectedSlides)) {
substitutions.add(substitution);
}
System.out.println("Substitutions for the selected slides:");
for (FontSubstitutionInfo substitution : substitutions) {
System.out.println(substitution.getOriginalFontName() + " -> " + substitution.getSubstitutedFontName());
}
Set<String> sortedPreflightEntries = new TreeSet<>(String.CASE_INSENSITIVE_ORDER);
for (FontSubstitutionInfo substitution : substitutions) {
String entry = substitution.getOriginalFontName() + " -> " + substitution.getSubstitutedFontName();
sortedPreflightEntries.add(entry);
}
System.out.println("Deduplicated font preflight report:");
for (String entry : sortedPreflightEntries) {
System.out.println(entry);
}
} finally {
presentation.dispose();
}
La interfaz IFontsManager proporciona ambas sobrecargas. Elija una según el alcance de la operación de renderizado:
| Sobrecarga | Úselo cuando |
|---|---|
| getSubstitutions with no arguments | Necesita sustituciones para toda la presentación. |
getSubstitutions with int[] slides |
Necesita sustituciones para un rango seleccionado, una comprobación incremental o una exportación parcial. |
Establecer reglas de sustitución de fuentes
Para especificar la fuente que Aspose.Slides debe usar cuando una fuente origen no está disponible:
- Cargue la presentación.
- Cree definiciones de fuentes para la fuente origen y la fuente sustituta.
- Cree una FontSubstRule con la condición WhenInaccessible.
- Añada la regla a una FontSubstRuleCollection.
- Asigne la colección usando el método FontsManager.setFontSubstRuleList.
- Renderice o convierta la presentación.
El siguiente ejemplo en Java sustituye Arial por SomeRareFont cuando SomeRareFont no está disponible, y luego renderiza la primera diapositiva para verificar el resultado. La fuente sustituta debe estar disponible para Aspose.Slides.
import com.aspose.slides.FontData;
import com.aspose.slides.FontSubstCondition;
import com.aspose.slides.FontSubstRule;
import com.aspose.slides.FontSubstRuleCollection;
import com.aspose.slides.IFontData;
import com.aspose.slides.IFontSubstRule;
import com.aspose.slides.IFontSubstRuleCollection;
import com.aspose.slides.IImage;
import com.aspose.slides.ImageFormat;
import com.aspose.slides.Presentation;
Presentation presentation = new Presentation("Fonts.pptx");
try {
IFontData sourceFont = new FontData("SomeRareFont");
IFontData substituteFont = new FontData("Arial");
IFontSubstRule substitutionRule = new FontSubstRule(sourceFont, substituteFont, FontSubstCondition.WhenInaccessible);
IFontSubstRuleCollection substitutionRules = new FontSubstRuleCollection();
substitutionRules.add(substitutionRule);
presentation.getFontsManager().setFontSubstRuleList(substitutionRules);
IImage image = presentation.getSlides().get_Item(0).getImage(1f, 1f);
try {
image.save("slide.jpg", ImageFormat.Jpeg);
} finally {
image.dispose();
}
} finally {
presentation.dispose();
}
Nota
Para un cambio incondicional de las fuentes utilizadas en toda la presentación, consulte Reemplazo de fuentes.Limitaciones para fuentes de ecuaciones matemáticas
Las reglas de sustitución de fuentes forman parte del proceso estándar de selección de fuentes utilizado durante la renderización y conversión. Funcionan para texto normal cuando Aspose.Slides puede reemplazar una fuente inaccesible con la fuente disponible especificada por una regla.
Las ecuaciones de Office Math tienen un requisito adicional. Si una ecuación utiliza Cambria Math, Aspose.Slides puede necesitar esa fuente exacta para calcular y renderizar el diseño de la ecuación. Una regla que sustituya otra fuente matemática, como STIX Two Math, no puede reemplazar Cambria Math para este propósito, y la renderización puede seguir indicando que Cambria Math es necesaria.
Para renderizar o convertir una presentación de este tipo, haga que Cambria Math esté disponible para Aspose.Slides. Instálela en el sistema operativo o cárguela como una fuente externa.
Esta limitación se aplica al diseño de la ecuación. Las reglas de sustitución descritas arriba siguen aplicándose al texto normal de la presentación.
Preguntas frecuentes
¿Cuál es la diferencia entre el reemplazo de fuentes y la sustitución de fuentes?
Reemplazo de fuentes cambia intencionadamente una fuente por otra a lo largo de toda la presentación. La sustitución de fuentes selecciona una fuente para la salida renderizada cuando se cumple la condición configurada, como cuando la fuente original no está disponible.
¿Cuándo se aplican las reglas de sustitución?
Las reglas participan en la secuencia de selección de fuentes durante la renderización y conversión. Con WhenInaccessible, una regla se usa solo cuando Aspose.Slides no puede acceder a la fuente origen.
¿Qué ocurre cuando falta una fuente y no hay ninguna regla de sustitución configurada?
Aspose.Slides selecciona la fuente disponible más cercana según su proceso de selección de fuentes. El resultado depende de las fuentes disponibles en el entorno de ejecución.
¿Puedo cargar fuentes externas para evitar la sustitución?
Sí. Puede cargar fuentes externas para que Aspose.Slides pueda utilizarlas durante la renderización y conversión.
¿Aspose distribuye fuentes con la biblioteca?
No. Usted es responsable de proporcionar las fuentes y de cumplir con sus licencias.
¿Pueden los resultados de sustitución diferir entre Windows, Linux y macOS?
Sí. Las fuentes instaladas y las ubicaciones de búsqueda de fuentes varían según el sistema operativo, por lo que una fuente disponible en una máquina puede requerir sustitución en otra.
¿Cómo puedo hacer que la selección de fuentes sea coherente en conversiones por lotes?
Utilice los mismos archivos y versiones de fuentes en cada máquina o contenedor, cargue fuentes externas requeridas, e incruste fuentes cuando la licencia lo permita. También puede llamar a IFontsManager.getSubstitutions antes de la exportación para identificar sustituciones inesperadas.