Personalizar fuentes de PowerPoint en PHP

Cargar fuentes personalizadas

Aspose.Slides permite cargar fuentes utilizadas en una presentación sin instalarlas en el sistema. Esto afecta la salida de exportación —como PDF, imágenes y otros formatos compatibles—, de modo que los documentos resultantes se vean consistentes en diferentes entornos. Las fuentes se cargan desde directorios personalizados.

  1. Especifique una o más carpetas que contengan los archivos de fuentes.
  2. Llame al método estático FontsLoader::loadExternalFonts para cargar las fuentes desde esas carpetas.
  3. Cargue y renderice/exporte la presentación.
  4. Llame a FontsLoader::clearCache para vaciar la caché de fuentes.

The following code example demonstrates the font loading process:

// Definir carpetas que contienen archivos de fuentes personalizados.
$fontFolders = array($externalFontFolder1, $externalFontFolder2);

// Cargar fuentes personalizadas desde las carpetas especificadas.
FontsLoader::loadExternalFonts($fontFolders);

$presentation = null;
try {
    $presentation = new Presentation("sample.pptx");
    
    // Renderizar/exportar la presentación (p.ej., a PDF, imágenes u otros formatos) usando las fuentes cargadas.
    $presentation->save("output.pdf", SaveFormat::Pdf);
} finally {
    if ($presentation != null) $presentation->dispose();

    // Vaciar la caché de fuentes después de que el trabajo haya terminado.
    FontsLoader::clearCache();
}

Obtener carpetas de fuentes personalizadas

Aspose.Slides proporciona el método getFontFolders que le permite encontrar carpetas de fuentes. Este método devuelve las carpetas añadidas mediante el método LoadExternalFonts y las carpetas de fuentes del sistema.

This PHP code shows you how to use getFontFolders:

  # Esta línea muestra las carpetas donde se buscan los archivos de fuentes.
  # Estas son carpetas añadidas mediante el método LoadExternalFonts y carpetas de fuentes del sistema.
  $fontFolders = FontsLoader->getFontFolders();

Especificar fuentes personalizadas usadas con una presentación

Aspose.Slides proporciona el método setDocumentLevelFontSources que le permite especificar fuentes externas que se utilizarán con la presentación.

This PHP code shows you how to use the setDocumentLevelFontSources method:

  $Array = new JavaClass("java.lang.reflect.Array");
  $Byte = new JavaClass("java.lang.Byte");
  $file1 = new Java("java.io.File", "customfonts/CustomFont1.ttf");
  $memoryFont1 = $Array->newInstance($Byte, $Array->getLength($file1));
  try {
      $dis1 = new Java("java.io.DataInputStream", new Java("java.io.FileInputStream", $file1));
      $dis1->readFully($memoryFont1);
  } finally {
      if (!java_is_null($dis1)) $dis1->close();
  }
  $file2 = new Java("java.io.File", "customfonts/CustomFont2.ttf");
  $memoryFont2 = $Array->newInstance($Byte, $Array->getLength($file2));
  try {
        $dis2 = new Java("java.io.DataInputStream", new Java("java.io.FileInputStream", $file2));
        $dis2->readFully($memoryFont2);
  } finally {
        if (!java_is_null($dis2)) $dis2->close();
  }
  $loadOptions = new LoadOptions();
  $loadOptions->getDocumentLevelFontSources()->setFontFolders(array("assets/fonts", "global/fonts" ));
  $loadOptions->getDocumentLevelFontSources()->setMemoryFonts(array($memoryFont1, $memoryFont2 ));
  $pres = new Presentation("MyPresentation.pptx", $loadOptions);
  try {
    # Trabajar con la presentación
    # CustomFont1, CustomFont2 y las fuentes de las carpetas assets\fonts y global\fonts y sus subcarpetas están disponibles para la presentación
  } finally {
    if (!java_is_null($pres)) {
      $pres->dispose();
    }
  }

Gestionar fuentes externamente

Aspose.Slides proporciona el método loadExternalFont(byte[] data) que le permite cargar fuentes externas a partir de datos binarios.

This PHP code demonstrates the byte array font loading process:

$Array = new JavaClass("java.lang.reflect.Array");
$Byte = (new JavaClass("java.lang.Byte"))->TYPE;
try {
    $dis = new Java("java.io.DataInputStream", new Java("java.io.FileInputStream", "ARIALN.TTF"));
    $bytes = $Array->newInstance($Byte, $dis->available());
    $dis->readFully($bytes);
} finally {
    if (!java_is_null($dis)) $dis->close();
}
  FontsLoader->loadExternalFont($bytes);

try {
    $dis = new Java("java.io.DataInputStream", new Java("java.io.FileInputStream", "ARIALNBI.TTF"));
    $bytes = $Array->newInstance($Byte, $dis->available());
    $dis->readFully($bytes);
} finally {
    if (!java_is_null($dis)) $dis->close();
}
  FontsLoader->loadExternalFont($bytes);

try {
    $dis = new Java("java.io.DataInputStream", new Java("java.io.FileInputStream", "ARIALNI.TTF"));
    $bytes = $Array->newInstance($Byte, $dis->available());
    $dis->readFully($bytes);
} finally {
    if (!java_is_null($dis)) $dis->close();
}
  FontsLoader->loadExternalFont($bytes);

  try {
    $pres = new Presentation("");
    try {
      # fuente externa cargada durante la vida útil de la presentación
    } finally {
    }
  } finally {
    FontsLoader->clearCache();
  }

Preguntas frecuentes

¿Las fuentes personalizadas afectan la exportación a todos los formatos (PDF, PNG, SVG, HTML)?

Sí. Las fuentes conectadas son utilizadas por el renderizador en todos los formatos de exportación.

¿Las fuentes personalizadas se incrustan automáticamente en el PPTX resultante?

No. Registrar una fuente para el renderizado no es lo mismo que incrustarla en un PPTX. Si necesita que la fuente se incluya dentro del archivo de la presentación, debe utilizar las funciones de incrustación.

¿Puedo controlar el comportamiento de sustitución cuando una fuente personalizada carece de ciertos glifos?

Sí. Configure la sustitución de fuentes, las reglas de reemplazo y los conjuntos de fuentes de reserva para definir exactamente qué fuente se utiliza cuando el glifo solicitado no está disponible.

¿Puedo usar fuentes en contenedores Linux/Docker sin instalarlas a nivel del sistema?

Sí. Apunte a sus propias carpetas de fuentes o cargue fuentes a partir de arrays de bytes. Esto elimina cualquier dependencia de los directorios de fuentes del sistema en la imagen del contenedor.

¿Qué pasa con la licencia —puedo incrustar cualquier fuente personalizada sin restricciones?

Usted es responsable del cumplimiento de la licencia de la fuente. Los términos varían; algunas licencias prohíben la incrustación o el uso comercial. Siempre revise el EULA de la fuente antes de distribuir los resultados.