JavaでCFFフォントを読み込み、保存する

Aspose.Font for Javaを使用して、PostScriptベースのCompact Font Format (.cff) ファイルをプログラムで処理します。ローカルファイルパスまたはメモリ内のバイト配列からCFFフォントバイナリを開き、CffFont クラスを使用してフォント構造を検査し、変更したフォントデータを外部依存関係なしでディスクまたはストリームに保存します。

 

Compact Font Format (CFF) は、PostScript Type 1フォントのアウトラインをコンパクトに表現したもので、PDFドキュメント、OpenType CFF (.otf) フォント、デジタルパブリッシングのワークフローで広く使用されています。Aspose.Font for Javaを使用すると、開発者は次のことができます。

  • メモリ内でのフォント処理: 一時ファイルをディスクに書き込むことなく、データベースのBLOB、PDFストリーム、またはクラウドストレージからCFFフォントのバイトを直接読み込みます。
  • コンパクトなストレージ管理: ドキュメントへの最適化された埋め込みのために、容量の小さいPostScriptアウトラインフォント構造を操作します。
  • 柔軟なファイル操作: FileSystemStreamSource または ByteContentStreamSource を使用してCFFフォントファイルを読み込み、CffFont.save() を介してエクスポートします。

CFFフォント処理のワークフロー

ディスクからCFFを読み込む - (ファイルパス (.cff))および FontDefinition + FileSystemStreamSource を使用

メモリからCFFを読み込む - バイナリバイト配列 (byte[]) および FontDefinition + ByteContentStreamSource を使用

CFFデータを検査/編集する - CffFont オブジェクトと CffFont.getFontName()、CffFont.getNumGlyphs() などを使用

CFFをディスクに保存する - CffFont オブジェクトと CffFont.getFontName()、CffFont.getNumGlyphs() などを使用

Javaでディスク上のフォントからCFFを読み込む方法

FontType.CFF および FileSystemStreamSource を指定した FontDefinition を定義して、.cff フォントファイルを読み込みます。

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

バイト配列 (`byte[]`) からCFFフォントを読み込む方法

フォントをメモリに読み込み、データの抽出または変更を行った後、フォントをローカルディスクストレージに保存するか、出力バイトストリームに書き込むことができます。

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

インストールとセットアップ

Mavenを使用してAspose.Font for Javaをプロジェクトに追加します。

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>

よくあるご質問

1. OpenType CFF (.otf) とスタンドアロン CFF (.cff) の違いは何ですか?

スタンドアロンの .cff ファイルには、OpenType テーブルラッパーなしで、PostScript フォントプログラムの生データが含まれています。CFF アウトラインを含む .otf ファイルでは、.cff ストリームが標準の OpenType テーブル構造 (CFF、cmap、head など) 内にラップされています。Aspose.Font for Java は、スタンドアロン CFF と OpenType CFF の両方の形式をサポートしています。

2. Java で CFF フォントを TTF や WOFF などの他のフォント形式に変換できますか?

はい。CffFont インスタンスに読み込むと、Aspose.Font for Java はレンダリングおよびエンコーディング機能を提供し、フォントデータを TTF、WOFF、WOFF2 などの他のターゲット形式に変換できます。

3. 変更した CffFont を OutputStream に直接保存できますか?

はい。font.save(fileName) にファイルパス文字列を渡すだけでなく、java.io.OutputStream を渡して、バイナリフォントデータをネットワークまたはメモリストリームに直接書き込むこともできます。