Загрузка шрифтов из файлов, потоков и массивов байтов в Java

Программно загружайте и инициализируйте шрифты TrueType (TTF), OpenType (OTF), WOFF/WOFF2, Embedded OpenType (EOT), Type1 и Compact Font Format (CFF) с помощью Aspose.Font для Java. Легко загружайте шрифты из путей на диске, системных файлов, потоков байтов или массивов в памяти без использования нативного Java AWT или установки шрифтов, зависящей от операционной системы.

 

Чтобы открыть любой шрифт и работать с ним в Aspose.Font для Java, требуются два ключевых параметра:

  • Формат шрифта (FontType): Определяет общую категорию (например, FontType.TTF, FontType.Type1, FontType.CFF).
  • Двоичный источник шрифта (StreamSource/FontFileDefinition): Инкапсулирует базовый двоичный поток независимо от того, находится ли он на диске, в базе данных или внутри потоков документов (например, PDF/DOCX).
  • Центральный класс FontDefinition связывает эти параметры, позволяя Font.open(fontDefinition) возвращать унифицированный объект com.aspose.font.Font.

Как загрузить шрифт с помощью java.io.File?

Самый простой способ загрузить шрифты, хранящиеся на локальных дисках, — использовать 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());
    }
}

Как загрузить шрифт с помощью FileSystemStreamSource?

Обеспечивает явную обработку расширений файлов для точного определения формата при загрузке шрифтов из путей на диске.

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());
    }
}

Как загрузить шрифт из прямого источника потока (без FontFileDefinition)?

Передайте FileSystemStreamSource непосредственно в FontDefinition для упрощения загрузки.

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());
    }
}

Как загрузить шрифт из массива байтов в памяти (byte[])?

Идеально подходит для загрузки шрифтов, полученных из баз данных, сетевых запросов, облачного хранилища или встроенных ресурсов PDF/DOCX с помощью 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());
    }
}

Установка и настройка

Добавьте Aspose.Font для Java в свой проект через 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>

FAQ

1. Почему при загрузке шрифтов необходимо передавать и FontType, и fileExtension?

FontType представляет общее семейство форматов (например, FontType.TTF), однако к этому семейству относятся несколько различных форматов файлов (таких как .ttf, .eot и .ttc). Указание fileExtension гарантирует, что библиотека использует правильный парсер для конкретного формата контейнера.

2. Можно ли загружать шрифты непосредственно из полей BLOB базы данных?

Да. Получите данные BLOB в виде массива byte[] и используйте ByteContentStreamSource для инициализации FontDefinition без записи данных на диск.

3. Как загрузить шрифт, если двоичные данные начинаются с определённого смещения внутри файла?

Используйте FontFileDefinition(String fileExtension, StreamSource streamSource, long offset) constructor, передав смещение в байтах, с которого начинаются данные шрифта.