Cargar fuentes desde archivos, flujos y matrices de bytes en Java
Cargue e inicialice fuentes TrueType (TTF), OpenType (OTF), WOFF/WOFF2, Embedded OpenType (EOT), Type1 y Compact Font Format (CFF) mediante programación con Aspose.Font para Java. Cargue fuentes sin problemas desde rutas de disco, archivos del sistema, flujos de bytes o matrices en memoria sin depender de Java AWT nativo ni de la instalación de fuentes específica del sistema operativo.
Para abrir y trabajar con cualquier fuente en Aspose.Font para Java, se requieren dos parámetros clave:
- Formato de fuente (FontType): Identifica la categoría general (por ejemplo, FontType.TTF, FontType.Type1, FontType.CFF).
- Origen binario de la fuente (StreamSource/FontFileDefinition): Encapsula el flujo binario subyacente independientemente de si se encuentra en el disco, en una base de datos o dentro de flujos de documentos (por ejemplo, PDF/DOCX).
- La clase central
FontDefinitionvincula estos parámetros, lo que permite queFont.open(fontDefinition) devuelva un objeto unificadocom.aspose.font.Font.
¿Cómo cargar una fuente mediante java.io.File?
La forma más sencilla de cargar fuentes almacenadas en unidades de disco locales mediante FontFileDefinition(File file).
import com.aspose.font.*;
import java.io.File;
import java.nio.file.Paths;
public class LoadFontFromFile {
public static void main(String[] args) {
// Step 1: Define path to font file
String fontPath = Paths.get("data", "Montserrat-Regular.ttf").toString();
// Step 2: Create FontFileDefinition from java.io.File
FontFileDefinition fileDef = new FontFileDefinition(new File(fontPath));
// Step 3: Create FontDefinition (extension is auto-detected from FontFileDefinition)
FontDefinition fontDef = new FontDefinition(FontType.TTF, fileDef);
// Step 4: Open and load font instance
Font font = Font.open(fontDef);
System.out.println("Successfully loaded font: " + font.getFontName());
}
}¿Cómo cargar una fuente mediante FileSystemStreamSource?
Proporciona un manejo explícito de las extensiones de archivo para una detección precisa del formato al cargar fuentes desde rutas de disco.
import com.aspose.font.*;
import java.nio.file.Paths;
public class LoadFontFromStreamSource {
public static void main(String[] args) {
String fontPath = Paths.get("data", "Montserrat-Regular.ttf").toString();
// Pass 'ttf' explicitly to ensure proper format mapping
FontFileDefinition fileDef = new FontFileDefinition("ttf", new FileSystemStreamSource(fontPath));
FontDefinition fontDef = new FontDefinition(FontType.TTF, fileDef);
Font font = Font.open(fontDef);
System.out.println("Loaded Font Name: " + font.getFontName());
}
}¿Cómo cargar una fuente desde un origen de flujo directo (sin FontFileDefinition)?
Pase FileSystemStreamSource directamente a FontDefinition para simplificar la carga.
import com.aspose.font.*;
import java.nio.file.Paths;
public class LoadFontDirectStream {
public static void main(String[] args) {
String fontPath = Paths.get("data", "Montserrat-Regular.ttf").toString();
// Provide FontType, file extension, and StreamSource directly
FontDefinition fontDef = new FontDefinition(FontType.TTF, "ttf", new FileSystemStreamSource(fontPath));
Font font = Font.open(fontDef);
System.out.println("Loaded Font Name: " + font.getFontName());
}
}¿Cómo cargar una fuente desde una matriz de bytes en memoria (byte[])?
Ideal para cargar fuentes obtenidas de bases de datos, solicitudes de red, almacenamiento en la nube o recursos PDF/DOCX incrustados mediante ByteContentStreamSource.
import com.aspose.font.*;
import java.nio.file.Files;
import java.nio.file.Paths;
public class LoadFontFromByteArray {
public static void main(String[] args) throws Exception {
String fontPath = Paths.get("data", "Montserrat-Regular.ttf").toString();
// Read font binary data into byte array
byte[] fontBytes = Files.readAllBytes(Paths.get(fontPath));
// Initialize FontDefinition with ByteContentStreamSource
FontDefinition fontDef = new FontDefinition(FontType.TTF, "ttf", new ByteContentStreamSource(fontBytes));
// Open font from memory
Font font = Font.open(fontDef);
System.out.println("Loaded Font from Memory: " + font.getFontName());
}
}Instalación y configuración
Incluya Aspose.Font para Java en su proyecto mediante Maven.
Package Manager Console Command
<repository>
<id>AsposeJavaAPI</id>
<name>Aspose Java API</name>
<url>https://repository.aspose.com/repo/</url>
</repository>
<dependency>
<groupId>com.aspose</groupId>
<artifactId>aspose-font</artifactId>
<version>Latest</version>
</dependency>
Preguntas frecuentes
1. ¿Por qué debo pasar tanto FontType como fileExtension al cargar fuentes?
FontType representa la familia de formatos general (por ejemplo, FontType.TTF), pero varios formatos de archivo distintos pertenecen a esa familia (como .ttf, .eot y .ttc). Especificar fileExtension garantiza que la biblioteca utilice el analizador correcto para ese formato de contenedor específico.
2. ¿Puedo cargar fuentes directamente desde campos BLOB de una base de datos?
Sí. Recupere los datos BLOB como una matriz byte[] y utilice ByteContentStreamSource para inicializar FontDefinition sin escribir los datos en el disco.
3. ¿Cómo cargo una fuente cuando los datos binarios comienzan en un desplazamiento específico dentro de un archivo?
Utilice el constructor FontFileDefinition(String fileExtension, StreamSource streamSource, long offset), pasando el desplazamiento de bytes donde comienzan los datos de la fuente.