Загрузка и сохранение шрифтов 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, чтобы записать двоичные данные шрифта непосредственно в сетевые потоки или потоки в памяти.