CFF-Schriftarten in Java laden und speichern

Verarbeiten Sie PostScript-basierte Compact Font Format-Dateien (.cff) programmgesteuert mit Aspose.Font for Java. Öffnen Sie binäre CFF-Schriftdateien über lokale Dateipfade oder Byte-Arrays im Arbeitsspeicher, untersuchen Sie Schriftstrukturen mit der Klasse CffFont und speichern Sie geänderte Schriftdaten ohne externe Abhängigkeiten wieder auf der Festplatte oder in Streams.

 

Das Compact Font Format (CFF) ist eine kompakte Darstellung von PostScript Type 1-Schriftkonturen und wird häufig in PDF-Dokumenten, OpenType CFF (.otf)-Schriftarten und digitalen Publishing-Workflows verwendet. Mit Aspose.Font for Java können Entwickler:

  • Schriftartenverarbeitung im Arbeitsspeicher: Laden Sie CFF-Schriftartdaten direkt aus Datenbank-BLOBs, PDF-Streams oder Cloud-Speichern, ohne temporäre Dateien auf der Festplatte zu erstellen.
  • Verwaltung kompakter Speicherstrukturen: Bearbeiten Sie platzsparende PostScript-Schriftkonturen für eine optimierte Einbettung in Dokumente.
  • Flexible Dateivorgänge: Lesen Sie CFF-Schriftdateien mit FileSystemStreamSource oder ByteContentStreamSource und exportieren Sie sie über CffFont.save().

Workflow zur Verarbeitung von CFF-Schriftarten

CFF von der Festplatte laden - verwendet (Dateipfad (.cff)) und FontDefinition + FileSystemStreamSource

CFF aus dem Arbeitsspeicher laden - verwendet binäres Byte-Array (byte[]) und FontDefinition + ByteContentStreamSource

CFF-Daten untersuchen/bearbeiten - verwendet das CffFont-Objekt und CffFont.getFontName(), CffFont.getNumGlyphs() usw.

CFF auf der Festplatte speichern - verwendet das CffFont-Objekt und CffFont.getFontName(), CffFont.getNumGlyphs() usw.

Wie lädt man eine CFF-Schriftart aus einer Datei in Java?

Laden Sie eine .cff-Schriftdatei, indem Sie eine FontDefinition mit FontType.CFF und einer FileSystemStreamSource definieren.

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.");
    }
}

Wie lädt man eine CFF-Schriftart aus einem Byte-Array (`byte[]`)?

Nachdem Sie eine Schriftart in den Arbeitsspeicher geladen und Daten extrahiert oder Änderungen vorgenommen haben, können Sie die Schriftart wieder im lokalen Speicher speichern oder in einen Ausgabe-Byte-Stream schreiben.

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

Wie ändert man CFF-Schriftarten und speichert sie auf der Festplatte?

Nachdem Sie eine CffFont-Instanz geladen und bearbeitet haben, schreiben Sie die Schriftdatei mithilfe der Methode save() an einen neuen Speicherort.

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

Installation und Einrichtung

Fügen Sie Aspose.Font for Java über Maven zu Ihrem Projekt hinzu.

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>

Häufig gestellte Fragen

1. Was ist der Unterschied zwischen OpenType CFF (.otf) und eigenständigem CFF (.cff)?

Eine eigenständige .cff-Datei enthält rohe PostScript-Schriftartprogrammdaten ohne OpenType-Tabellen-Wrapper. Eine .otf-Datei mit CFF-Konturen kapselt den .cff-Datenstrom in standardmäßige OpenType-Tabellenstrukturen (CFF, cmap, head usw.). Aspose.Font for Java unterstützt sowohl eigenständige CFF- als auch OpenType-CFF-Formate.

2. Kann ich CFF-Schriftarten in Java in andere Schriftartformate wie TTF oder WOFF konvertieren?

Ja. Sobald die Schriftart in eine CffFont-Instanz geladen wurde, bietet Aspose.Font for Java Rendering- und Codierungsfunktionen, mit denen Schriftartdaten in andere Zielformate wie TTF, WOFF oder WOFF2 konvertiert werden können.

3. Kann ich ein geändertes CffFont direkt in einen OutputStream speichern?

Ja. Zusätzlich zur Übergabe einer Dateipfadzeichenfolge an font.save(fileName) können Sie einen java.io.OutputStream übergeben, um binäre Schriftartdaten direkt in Netzwerk- oder Speicherstreams zu schreiben.