Incrustar fuentes en presentaciones usando PHP
Fuentes incrustadas en PowerPoint son útiles cuando deseas que tu presentación se vea correctamente al abrirse en cualquier sistema o dispositivo. Si utilizaste una fuente de terceros o no estándar porque fuiste creativo con tu trabajo, entonces tienes aún más razones para incrustar tu fuente. De lo contrario (sin fuentes incrustadas), los textos o números en tus diapositivas, el diseño, el estilo, etc., pueden cambiar o convertirse en rectángulos confusos.
La clase FontsManager, la clase FontData y la clase Compress contienen la mayoría de los métodos que necesitas para trabajar con fuentes incrustadas en presentaciones de PowerPoint.
Obtener y eliminar fuentes incrustadas
Aspose.Slides proporciona el método getEmbeddedFonts (expuesto por la clase FontsManager) para permitirte obtener (o averiguar) las fuentes incrustadas en una presentación. Para eliminar fuentes, se utiliza el método removeEmbeddedFont (expuesto por la misma clase).
Este código PHP te muestra cómo obtener y eliminar fuentes incrustadas de una presentación:
# Instancia un objeto Presentation que representa un archivo de presentación
$pres = new Presentation("EmbeddedFonts.pptx");
try {
# Renderiza una diapositiva que contiene un marco de texto que usa la fuente incrustada "FunSized"
$slideImage = $pres->getSlides()->get_Item(0)->getImage(new Java("java.awt.Dimension", 960, 720));
# Guarda la imagen en disco en formato JPEG
try {
$slideImage->save("picture1_out.jpg", ImageFormat::Jpeg);
} finally {
if (!java_is_null($slideImage)) {
$slideImage->dispose();
}
}
$fontsManager = $pres->getFontsManager();
# Obtiene todas las fuentes incrustadas
$embeddedFonts = $fontsManager->getEmbeddedFonts();
# Busca la fuente "Calibri"
$calibriEmbeddedFont = null;
$Array = new java_class("java.lang.reflect.Array");
for($i = 0; $i < java_values($Array->getLength($embeddedFonts)) ; $i++) {
echo("" . $embeddedFonts[$i]->getFontName());
if ("Calibri"->equals($embeddedFonts[$i]->getFontName())) {
$calibriEmbeddedFont = $embeddedFonts[$i];
break;
}
}
# Elimina la fuente "Calibri"
$fontsManager->removeEmbeddedFont($calibriEmbeddedFont);
# Renderiza la presentación; la fuente "Calibri" se reemplaza por una existente
$slideImage = $pres->getSlides()->get_Item(0)->getImage(new Java("java.awt.Dimension", 960, 720));
# Guarda la imagen en disco en formato JPEG
try {
$slideImage->save("picture2_out.jpg", ImageFormat::Jpeg);
} finally {
if (!java_is_null($slideImage)) {
$slideImage->dispose();
}
}
# Guarda la presentación sin la fuente "Calibri" incrustada en disco
$pres->save("WithoutManageEmbeddedFonts_out.ppt", SaveFormat::Ppt);
} finally {
if (!java_is_null($pres)) {
$pres->dispose();
}
}
Añadir fuentes incrustadas
Utilizando la clase EmbedFontCharacters y dos sobrecargas del método addEmbeddedFont, puedes seleccionar la regla de incrustado que prefieras para incrustar las fuentes en una presentación. Este código PHP te muestra cómo incrustar y añadir fuentes a una presentación:
# Carga la presentación
$pres = new Presentation("Fonts.pptx");
try {
$allFonts = $pres->getFontsManager()->getFonts();
$embeddedFonts = $pres->getFontsManager()->getEmbeddedFonts();
$Array = new java_class("java.lang.reflect.Array");
foreach($allFonts as $font) {
$embeddedFontsContainsFont = false;
for($i = 0; $i < java_values($Array->getLength($embeddedFonts)) ; $i++) {
if ($embeddedFonts[$i]->equals($font)) {
$embeddedFontsContainsFont = true;
break;
}
}
if (!$embeddedFontsContainsFont) {
$pres->getFontsManager()->addEmbeddedFont($font, EmbedFontCharacters->All);
$embeddedFonts = $pres->getFontsManager()->getEmbeddedFonts();
}
}
# Guarda la presentación en disco
$pres->save("AddEmbeddedFont_out.pptx", SaveFormat::Pptx);
} finally {
if (!java_is_null($pres)) {
$pres->dispose();
}
}
Comprimir fuentes incrustadas
Para que puedas comprimir las fuentes incrustadas en una presentación y reducir su tamaño de archivo, Aspose.Slides proporciona el método compressEmbeddedFonts (expuesto por la clase Compress).
Este código PHP te muestra cómo comprimir fuentes incrustadas de PowerPoint:
$pres = new Presentation("pres.pptx");
try {
Compress->compressEmbeddedFonts($pres);
$pres->save("pres-out.pptx", SaveFormat::Pptx);
} finally {
if (!java_is_null($pres)) {
$pres->dispose();
}
}
Preguntas frecuentes
¿Cómo puedo saber si una fuente específica en la presentación seguirá siendo sustituida durante el renderizado a pesar de estar incrustada?
Consulta la información de sustitución en el administrador de fuentes y las reglas de reserva/sustitución: si la fuente no está disponible o está restringida, se utilizará una fuente de reserva.
¿Vale la pena incrustar fuentes “del sistema” como Arial/Calibri?
Normalmente no, ya que casi siempre están disponibles. Pero para lograr una portabilidad total en entornos “delgados” (Docker, un servidor Linux sin fuentes preinstaladas), incrustar fuentes del sistema puede eliminar el riesgo de sustituciones inesperadas.