¿Cómo cargar fuentes? | Solución API para .NET

Descripción general

Para responder a la pregunta de cómo cargar fuentes, primero debemos saber que cualquier fuente es físicamente una matriz de bytes en la que los datos se representan en algún formato.

Por lo tanto, para cargar correctamente la fuente es necesario conocer dos parámetros clave:

Objetos y parámetros necesarios para la carga de fuentes.

Aspose.Font para .NET proporciona el objeto FontDefiniton para notificar dos parámetros clave exigidos para la carga de fuentes.

Después de crear e iniciar el objeto FontDefiniton solo necesita llamar al método estático Aspose.Font.Font.Open() y pasar el objeto recién inicializado FontDefiniton como un parámetro para cargar la fuente deseada y obtener una referencia sobre ella.

Describámoslo con el pseudocódigo:

1 
2using Aspose.Font;
3    ...
4
5    // Initialize object FontDefinition with appropriate properties
6    FontDefinition fontDef = new FontDefinition(); 
7    Font desiredFont = Font.Open(fontDef);

El resultado final de la carga de la fuente es obtener un objeto de tipo Aspose.Font.Font. La clase Aspose.Font.Font es una clase de fuente base de Aspose.Font para la biblioteca .NET. Representa la funcionalidad principal de trabajar con fuentes.

Al cargar una fuente en un objeto de tipo Aspose.Font.Font, podrá representar texto con esta fuente, obtener datos de codificación y métricas de fuente. También podrás modificar o guardar esta fuente y muchas más.

Para iniciar el objeto FontDefiniton necesitamos, como se mencionó anteriormente, darle 2 parámetros de fuente: el tipo de formato y el objeto que describe el almacenamiento de los datos binarios de la fuente. El primer parámetro se notifica con la enumeración FontType.

Para simplificar el trabajo con el segundo parámetro, Aspose.Font ofrece una serie de objetos que brindan acceso universal a los datos binarios de la fuente independientemente de dónde se coloque la fuente.

Este acceso universal está vinculado a algo así como un flujo de bytes. Entonces, independientemente de dónde se coloque la fuente (en un archivo en un disco, dentro de otro archivo, en una matriz de bytes en la memoria), en cualquier caso, los objetos especiales Aspose.Font proporcionarán acceso al flujo de bytes. , relacionado con la fuente deseada.

Describamos estos objetos:

  1. clase StreamSource. Esta clase base abstracta define las propiedades y métodos que dan acceso al flujo de bytes de fuente.

    • FileSystemStreamSource - diseñado para proporcionar acceso a la secuencia, según el sistema de archivos. La propiedad FileName devuelve el nombre del archivo de fuente. El método GetFontStream() devuelve un flujo de bytes relacionado con este archivo.
    • ByteContentStreamSource: proporciona acceso a la secuencia, según la matriz de bytes.

El método GetFontStream() de esta clase devuelve una secuencia, relacionada con datos de fuentes binarias. La propiedad Offset apunta a la posición en este flujo, desde donde debemos comenzar a leer los datos. 2. Dos de las clases más utilizadas heredadas de la base StreamSource:

¿Cómo iniciar clases?

A continuación se muestran ejemplos de la iniciación de estas clases.1. Supongamos que la fuente está en el archivo llamado Lora.ttf. En este caso, para obtener acceso al flujo de bytes de esta fuente necesitamos crear el objeto de tipo FileSystemStreamSource usando este único constructor:

1 
2    FileSystemStreamSource fontSource = new FileSystemStreamSource("Lora.ttf");
  1. Si los datos binarios de la fuente se encuentran en una matriz binaria definida por la variable byte [] fontArray, entonces un objeto de tipo ByteContentStreamSource proporcionará acceso al flujo de datos de la fuente, según la variable fontArray. . Para obtener acceso al flujo de bytes de fuente, tenemos que crear un objeto de tipo ByteContentStreamSource para obtener acceso al flujo, relacionado con la matriz de bytes de fuente usando un código como este:
1 
2    ByteContentStreamSource fontSource = new ByteContentStreamSource(fontArray);

Por lo tanto, para proporcionar acceso a datos binarios de fuentes, utilice objetos heredados de la clase base StreamSource. Además, llamaremos a dichos objetos fuentes de flujo de fuentes.

Objeto FontFileDefinition

La mayoría de las fuentes se encuentran en archivos normales, pero al mismo tiempo, algunas fuentes pueden tener diferentes fuentes de datos. Para unir en un solo objeto los términos archivo y flujo binario de fuente, la biblioteca Aspose.Font proporciona un objeto especial FontFileDefinition.

Este objeto tiene tales propiedades:

El constructor más simple y uno de los más utilizados de este objeto es el constructor con la siguiente firma: FontFileDefinition (FileInfo fontFile), use este constructor para los casos en que la fuente deseada esté en un archivo en el disco duro. .

A continuación se muestra un ejemplo de cómo iniciar un objeto de este tipo para la fuente Montserrat que se encuentra en el archivo C:\Windows\Fonts\Montserrat.ttf:

1 
2    FontFileDefinition fileDef = new FontFileDefinition(new FileInfo(@"C:\Windows\Fonts\Montserrat.ttf"));

Además, FontFileDefinition puede hacer referencia a la fuente Montserrat usando los siguientes constructores:

1 
2    FontFileDefinition fileDef = new FontFileDefinition(new FileSystemStreamSource(@"C:\Windows\Fonts\Montserrat.ttf"));
3
4    FontFileDefinition fileDef = new FontFileDefinition("ttf", new FileSystemStreamSource(@"C:\Windows\Fonts\Montserrat.ttf"));

El parámetro fileExtension debe coincidir con la extensión estándar para el formato de fuente. Por ejemplo, si el formato de fuente es “TrueType”, entonces el valor del parámetro fileExtension puede ser “ttf” o “ttc” (si el archivo de fuente es una colección de fuentes “TrueType”).

Si el formato de fuente es “Tipo abierto integrado”, entonces el valor del parámetro fileExtension debe ser “eot”.

La siguiente tabla muestra los formatos de archivos de fuentes más utilizados en Aspose.Font para .NET. Ahí están con los valores coincidentes que debe tomar el parámetro fileExtension.

Formato de archivo de fuenteExtensión de archivo
TrueType, fuente únicattf
Colección de fuentes TrueTypettc
Web Open Font Formatwoff
Web Open Font Format versión 2.0woff2
Embedded OpenTypeeot
Fuente Adobe Type 1pfa, pfb, afm, pfm
Compact Font Formatcff, puede ser nulo

Si los datos de fuente no comienzan desde la posición 0 del flujo de bytes, utilice el siguiente constructor con el parámetro offset:

1 
2    FontFileDefinition(string fileExtension, StreamSource streamSource, long offset).

¿Cómo iniciar el objeto FontDefinition?

Ahora, cuando tenga una idea de los objetos heredados de la clase StreamSource y que proporcionan acceso al flujo de bytes de fuente, y del objeto FontFileDefinition, le explicaremos le mostrará cómo iniciar el objeto FontDefiniton con estos objetos correctamente para diferentes situaciones.

El objeto FontDefiniton le proporciona muchos constructores sobrecargados. La característica común de todos los constructores existentes es el parámetro FontType. Describe el tipo de formato de fuente. Como se mencionó anteriormente, aparte del valor FontType, el objeto FontDefiniton debe inicializarse con referencia a los datos binarios de la fuente.

Quizás tengas una pregunta. ¿Por qué pasaríamos el parámetro fileExtension al objeto FontDefiniton o FontFileDefinition, cuando siempre pasamos el parámetro FontType? que parece coincidir por su valor con fileExtension?

El problema es que FontType no siempre coincide con el valor de fileExtension. FontType define el formato de fuente común pero no el formato de fuente de un archivo específico. Algunas fuentes de un formato pueden tener diferentes formatos de archivo.

Por ejemplo, el valor FontType.TTF define el formato “TrueType”. Pero al mismo tiempo, TrueType incluye algunos formatos de fuente y hay archivos de fuente con extensiones ttf, eot, ttc, etc. Y si, por ejemplo, para la fuente del formato EOT pasamos a FontDefiniton solo el valor FontType.TTF, entonces ¿cómo entenderá este objeto que la fuente pertenece al formato EOT y no al ¿TTF? Del mismo modo, el valor de FontType.Type1 es la definición común para fuentes de este formato. Al mismo tiempo, los archivos de fuentes en formato Type1 tienen extensiones .pfa, .pfb, .afm, .pfm. Por lo tanto, no puede definir correctamente el formato del archivo de fuente basándose únicamente en el valor FonType.Type1. Por lo tanto, para definir el formato de fuente correctamente necesitamos especificar el parámetro FontType con el valor del parámetro fileExtension.

A continuación puede conocer ejemplos de FontDefiniton inicialización de objetos y la siguiente carga de fuentes para diferentes casos.

En todos los casos, el resultado final de la carga de la fuente se coloca en la variable de tipo Aspose.Font.Font. Este tipo es la clase de fuente básica de la biblioteca Aspose.Font y los objetos de este tipo proporcionan una funcionalidad básica común para trabajar con fuentes. Al cargar la fuente en este objeto, podrá representar texto con esta fuente, obtener información de codificación, métricas de fuente, etc.

Ejemplos de cómo cargar fuentes

Tomemos como ejemplo cargar la fuente Montserrat desde el archivo C:\Windows\Fonts\Montserrat.ttf

Agregue los siguientes espacios de nombres al principio del archivo:

1using System;
2using Aspose.Font;
3using Aspose.Font.Sources;
4using System.IO;

Puedes cargar esta fuente usando objetos FontDefiniton y FontFileDefinition de diferentes maneras:

Cargando con la ayuda del objeto System.IO.FileInfo

Para completar la carga haga lo siguiente:

  1. Construya la ruta al archivo.
  2. Inicie el objeto FontDefiniton pasando TTF como valor FontType.
  3. Obtenga el valor calculado automáticamente fileExtension.
  4. Cargue la fuente.
 1    // Construct path to the file
 2    string fontPath = @"C:\Windows\Fonts\Montserrat.ttf";
 3
 4    // Initialize FontDefinition object passing TTF as FontType value and using FontFileDefinition
 5    FontFileDefinition fileDef = new FontFileDefinition(new FileInfo(fontPath));
 6
 7    // Based on FileInfo object, fileExtension value is calculated automatically from FileInfo fields.
 8    FontDefinition fontDef = new FontDefinition(FontType.TTF, fileDef);
 9	
10    // Load font
11    Font font = Font.Open(fontDef);

Cargando con la ayuda del objeto de tipo FileSystemStreamSource

Realice los siguientes pasos para cumplir con la operación:

  1. Construya la ruta al archivo.
  2. Inicie el objeto FontDefiniton.
  3. Establezca fileExtension en ttf.
  4. Cargue la fuente.
 1    // Construct path to the file
 2    string fontPath = @"C:\Windows\Fonts\Montserrat.ttf";
 3
 4    // Initialize FontDefinition object passing TTF as FontType value and using FontFileDefinition
 5    FontFileDefinition fileDef = new FontFileDefinition("ttf", new FileSystemStreamSource(fontPath));
 6
 7    // Based on FileSystemStreamSource object, set fileExtension to "ttf"
 8    FontDefinition fontDef = new FontDefinition(FontType.TTF, fileDef);
 9		
10    // Load font   
11    Font font = Font.Open(fontDef);

Carga de fuentes sin objeto FontFileDefinition, pasando FileSystemStreamSource directamente a FontDefinition

Se deben realizar las siguientes acciones para cargar la fuente de esta manera:

  1. Construya la ruta al archivo.
  2. Inicie el objeto FontDefiniton pasando TTF como valor FontType, ttf como valor fileExtension y objeto FileSystemStreamSource . El parámetro fileExtension aquí no es un valor duplicado para el parámetro FontType.
  3. Cargue la fuente.
 1    // Construct path to the file
 2    string fontPath = @"C:\Windows\Fonts\Montserrat.ttf";
 3
 4    // Initialize FontDefinition object passing TTF as FontType value, "ttf" as fileExtension value, 
 5    // and FileSystemStreamSource object. Parameter 'fileExtension' here is not duplicate value 
 6    // for parameter 'FontType' and it's needed for correct font format detection
 7    FontDefinition fontDef = new FontDefinition(FontType.TTF, "ttf", new FileSystemStreamSource(fontPath));
 8
 9    // Load font	
10    Font font = Font.Open(fontDef);

Carga de fuentes con la variable de tipo byte[] y con el uso del objeto de tipo ByteContentStreamSource

Para cargar una fuente desde la matriz de bytes, necesita:

  1. Construya la ruta al archivo.
  2. Cargue datos binarios de fuente en la matriz de bytes.
  3. Inicialice el objeto FontDefiniton pasando TTF como valor FontType, ttf como valor fileExtension y ByteContentStreamSource objeto basado en la matriz fontBytes.
  4. Cargue la fuente.
 1    // Construct path to the file
 2    string fontPath = @"C:\Windows\Fonts\Montserrat.ttf";
 3
 4    // Load font binary data into byte array
 5    byte[] fontBytes;
 6
 7    // Initialize FontDefinition object  passing TTF as FontType value, "ttf" as fileExtension value, 
 8    // and ByteContentStreamSource object based on fontBytes array
 9    FontDefinition fontDef = new FontDefinition(FontType.TTF, "ttf", new ByteContentStreamSource(fontBytes));
10	
11    // Load font	
12    Font font = Font.Open(fontDef);

Para obtener más ejemplos de uso de Aspose.Font, vaya a la solución Aspose.Font.Examples.sln, en los net-examples de la Documentación de Aspose.Font

Si le quedan problemas o preguntas, puede publicarlas en la sección Aspose.Font.Product Family del Foro de soporte gratuito y dentro de unas horas nuestro equipo de soporte le aclarar todo para usted.

Subscribe to Aspose Product Updates

Get monthly newsletters & offers directly delivered to your mailbox.