Завантаження шрифтів із файлів, потоків і масивів байтів у Java

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

 

Щоб відкрити та працювати з будь-яким шрифтом в Aspose.Font for 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 for 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, передавши зміщення в байтах, з якого починаються дані шрифту.