Charger et enregistrer des polices CFF en Java

Traitez par programmation les fichiers Compact Font Format (.cff) basés sur PostScript avec Aspose.Font for Java. Ouvrez des fichiers binaires de polices CFF à partir de chemins de fichiers locaux ou de tableaux d’octets en mémoire, inspectez les structures des polices à l’aide de la classe CffFont et enregistrez les données de police modifiées sur le disque ou dans des flux, sans dépendances externes.

 

Le Compact Font Format (CFF) est une représentation compacte des contours de polices PostScript Type 1, largement utilisée dans les documents PDF, les polices OpenType CFF (.otf) et les flux de publication numérique. Avec Aspose.Font for Java, les développeurs peuvent :

  • Traitement des polices en mémoire : Charger directement les octets des polices CFF depuis des BLOB de bases de données, des flux PDF ou un stockage cloud sans écrire de fichiers temporaires sur le disque.
  • Gestion d’un stockage compact : Manipuler des structures de contours de polices PostScript peu volumineuses afin d’optimiser leur intégration dans les documents.
  • Opérations de fichiers flexibles : Lire des fichiers de polices CFF à l’aide de FileSystemStreamSource ou ByteContentStreamSource et les exporter via CffFont.save().

Flux de traitement des polices CFF

Charger un CFF depuis le disque - utilise (chemin du fichier (.cff)) et FontDefinition + FileSystemStreamSource

Charger un CFF depuis la mémoire - utilise un tableau d’octets binaires (byte[]) et FontDefinition + ByteContentStreamSource

Inspecter/modifier les données CFF - utilise l’objet CffFont et CffFont.getFontName(), CffFont.getNumGlyphs(), etc.

Enregistrer un CFF sur le disque - utilise l’objet CffFont et CffFont.getFontName(), CffFont.getNumGlyphs(), etc.

Comment charger une police CFF depuis un fichier de police sur le disque en Java ?

Chargez un fichier de police .cff en définissant un FontDefinition avec FontType.CFF et un 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.");
    }
}

Comment charger une police CFF depuis un tableau d’octets (`byte[]`) ?

Après avoir chargé une police en mémoire et effectué l’extraction ou la modification des données, vous pouvez enregistrer la police dans le stockage local ou l’écrire dans un flux d’octets de sortie.

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

Comment modifier et enregistrer des polices CFF sur le disque ?

Après avoir chargé et manipulé une instance de CffFont, écrivez le fichier de police dans un nouvel emplacement à l’aide de la méthode 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);
    }
}

Installation et configuration

Incluez Aspose.Font for Java dans votre projet via 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>

Foire aux questions

1. Quelle est la différence entre OpenType CFF (.otf) et CFF autonome (.cff) ?

Un fichier .cff autonome contient les données brutes du programme de police PostScript sans enveloppes de tables OpenType. Un fichier .otf avec des contours CFF encapsule le flux .cff dans des structures de tables OpenType standard (CFF, cmap, head, etc.). Aspose.Font for Java prend en charge les formats CFF autonomes et OpenType CFF.

2. Puis-je convertir des polices CFF vers d’autres formats de police tels que TTF ou WOFF en Java ?

Oui. Une fois chargée dans une instance CffFont, Aspose.Font for Java fournit des fonctionnalités de rendu et d’encodage permettant de convertir les données de police vers d’autres formats cibles tels que TTF, WOFF ou WOFF2.

3. Puis-je enregistrer directement un CffFont modifié dans un OutputStream ?

Oui. En plus de transmettre une chaîne contenant le chemin du fichier à font.save(fileName), vous pouvez transmettre un java.io.OutputStream pour écrire directement les données binaires de la police dans des flux réseau ou mémoire.