Завантаження та збереження шрифтів CFF у Java

Програмно обробляйте файли Compact Font Format (.cff) на основі PostScript за допомогою Aspose.Font for Java. Відкривайте двійкові дані шрифтів CFF із локальних шляхів до файлів або масивів байтів у пам’яті, перевіряйте структуру шрифтів за допомогою класу CffFont і зберігайте змінені дані шрифтів назад на диск або в потоки без зовнішніх залежностей.

 

Compact Font Format (CFF) — це компактне представлення контурів шрифтів PostScript Type 1, яке широко використовується в документах PDF, шрифтах OpenType CFF (.otf) і робочих процесах цифрової публікації. За допомогою Aspose.Font for Java розробники можуть:

  • Обробка шрифтів у пам’яті: Завантажувати байти шрифтів CFF безпосередньо з BLOB-об’єктів бази даних, потоків PDF або хмарного сховища без запису тимчасових файлів на диск.
  • Компактне керування сховищем: Обробляти структури контурних шрифтів PostScript, які займають мало місця, для оптимізованого вбудовування в документи.
  • Гнучкі операції з файлами: Читати файли шрифтів CFF за допомогою FileSystemStreamSource або ByteContentStreamSource та експортувати їх через CffFont.save().

Робочий процес обробки шрифтів CFF

Завантаження CFF із диска - використовує (шлях до файлу (.cff)) і FontDefinition + FileSystemStreamSource

Завантаження CFF із пам’яті - використовує двійковий масив байтів (byte[]) і FontDefinition + ByteContentStreamSource

Перевірка/редагування даних CFF - використовує об’єкт CffFont і CffFont.getFontName(), CffFont.getNumGlyphs() тощо.

Збереження CFF на диск - використовує об’єкт CffFont і CffFont.getFontName(), CffFont.getNumGlyphs() тощо.

Як завантажити CFF зі шрифту на диску в Java?

Завантажте файл шрифту .cff, визначивши FontDefinition із FontType.CFF і FileSystemStreamSource.

import com.aspose.font.*;

public class LoadCffFontFromDisk {
    public static void main(String[] args) {
        // Step 1: Specify path to the .cff font file
        String fileName = "path/to/OpenSans-Regular.cff";

        // Step 2: Initialize FontDefinition with CFF format and FileSystemStreamSource
        FontDefinition fd = new FontDefinition(
            FontType.CFF, 
            new FontFileDefinition("cff", new FileSystemStreamSource(fileName))
        );

        // Step 3: Open the CFF font
        CffFont font = (CffFont) Font.open(fd);

        // Step 4: Verify font properties
        System.out.println("Font Name: " + font.getFontName());
        System.out.println("Glyph Count: " + font.getNumGlyphs());
        System.out.println("CFF Font successfully loaded from disk.");
    }
}

Як завантажити шрифт CFF із масиву байтів (`byte[]`)?

Після завантаження шрифту в пам’ять і виконання вилучення або змінення даних можна зберегти шрифт назад у локальне дискове сховище або записати його у вихідний потік байтів.

import com.aspose.font.*;
import java.nio.file.Files;
import java.nio.file.Paths;

public class LoadCffFontFromByteArray {
    public static void main(String[] args) throws Exception {
        String fileName = "path/to/OpenSans-Regular.cff";

        // Step 1: Read font file bytes into memory
        byte[] fontMemoryData = Files.readAllBytes(Paths.get(fileName));

        // Step 2: Create FontDefinition using ByteContentStreamSource
        FontDefinition fd = new FontDefinition(
            FontType.CFF, 
            new FontFileDefinition("cff", new ByteContentStreamSource(fontMemoryData))
        );

        // Step 3: Open font instance from byte array
        CffFont font = (CffFont) Font.open(fd);

        System.out.println("Loaded CFF Font Name from memory: " + font.getFontName());
    }
}

Як змінити та зберегти шрифти CFF на диск?

Після завантаження та роботи з екземпляром CffFont запишіть файл шрифту в нове розташування за допомогою методу save().

import com.aspose.font.*;
import java.nio.file.Files;
import java.nio.file.Paths;

public class SaveCffFontToDisk {
    public static void main(String[] args) throws Exception {
        String inputPath = "path/to/OpenSans-Regular.cff";
        String outputPath = "path/to/OpenSans-Regular_out.cff";

        // Step 1: Load font from byte array
        byte[] fontMemoryData = Files.readAllBytes(Paths.get(inputPath));
        FontDefinition fd = new FontDefinition(
            FontType.CFF, 
            new FontFileDefinition("cff", new ByteContentStreamSource(fontMemoryData))
        );
        CffFont font = (CffFont) Font.open(fd);

        System.out.println("Loaded CFF Font: " + font.getFontName());

        // Step 2: Work with font data (inspect metrics, glyphs, or update properties)

        // Step 3: Save CFF font back to disk
        font.save(outputPath);

        System.out.println("CFF Font successfully saved to: " + outputPath);
    }
}

Встановлення та налаштування

Додайте 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. У чому різниця між OpenType CFF (.otf) і автономним CFF (.cff)?

Автономний файл .cff містить необроблені дані програми шрифту PostScript без оболонок таблиць OpenType. Файл .otf із контурами CFF містить потік .cff, обгорнутий у стандартні структури таблиць OpenType (CFF, cmap, head тощо). Aspose.Font for Java підтримує роботу як з автономним CFF, так і з форматами OpenType CFF.

2. Чи можу я конвертувати шрифти CFF в інші формати шрифтів, такі як TTF або WOFF, у Java?

Так. Після завантаження в екземпляр CffFont Aspose.Font for Java надає функції рендерингу та кодування, які дають змогу перетворювати дані шрифту в інші цільові формати, такі як TTF, WOFF або WOFF2.

3. Чи можу я зберегти змінений CffFont безпосередньо в OutputStream?

Так. Окрім передавання рядка з шляхом до файлу в font.save(fileName), можна передати java.io.OutputStream, щоб записати двійкові дані шрифту безпосередньо в мережеві потоки або потоки в пам’яті.