Загрузка и сохранение шрифтов CFF в Java

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

 

Compact Font Format (CFF) — это компактное представление контуров шрифтов PostScript Type 1, широко используемое в документах PDF, шрифтах OpenType CFF (.otf) и рабочих процессах цифровой публикации. С помощью Aspose.Font для 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 для 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, чтобы записать двоичные данные шрифта непосредственно в сетевые потоки или потоки в памяти.