Tải và lưu phông chữ CFF trong Java

Xử lý các tệp Compact Font Format (.cff) dựa trên PostScript theo chương trình bằng Aspose.Font for Java. Mở dữ liệu nhị phân của phông chữ CFF từ đường dẫn tệp cục bộ hoặc mảng byte trong bộ nhớ, kiểm tra cấu trúc phông chữ bằng lớp CffFont và lưu dữ liệu phông chữ đã sửa đổi trở lại ổ đĩa hoặc luồng mà không cần các phần phụ thuộc bên ngoài.

 

Compact Font Format (CFF) là một dạng biểu diễn nhỏ gọn của các đường viền phông chữ PostScript Type 1, được sử dụng rộng rãi trong tài liệu PDF, phông chữ OpenType CFF (.otf) và quy trình xuất bản kỹ thuật số. Với Aspose.Font for Java, các nhà phát triển có thể:

  • Xử lý phông chữ trong bộ nhớ: Tải trực tiếp các byte của phông chữ CFF từ BLOB cơ sở dữ liệu, luồng PDF hoặc bộ nhớ đám mây mà không cần ghi các tệp tạm thời vào ổ đĩa.
  • Quản lý lưu trữ nhỏ gọn: Thao tác với các cấu trúc phông chữ đường viền PostScript có kích thước nhỏ để nhúng tài liệu được tối ưu hóa.
  • Các thao tác tệp linh hoạt: Đọc các tệp phông chữ CFF bằng FileSystemStreamSource hoặc ByteContentStreamSource và xuất chúng thông qua CffFont.save().

Quy trình xử lý phông chữ CFF

Tải CFF từ ổ đĩa - sử dụng (đường dẫn tệp (.cff)) và FontDefinition + FileSystemStreamSource

Tải CFF từ bộ nhớ - sử dụng mảng byte nhị phân (byte[]) và FontDefinition + ByteContentStreamSource

Kiểm tra/chỉnh sửa dữ liệu CFF - sử dụng đối tượng CffFont và CffFont.getFontName(), CffFont.getNumGlyphs(), v.v.

Lưu CFF vào ổ đĩa - sử dụng đối tượng CffFont và CffFont.getFontName(), CffFont.getNumGlyphs(), v.v.

Làm thế nào để tải CFF từ phông chữ trên ổ đĩa trong Java?

Tải tệp phông chữ .cff bằng cách định nghĩa một FontDefinition với FontType.CFF và 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.");
    }
}

Làm thế nào để tải phông chữ CFF từ một mảng byte (`byte[]`)?

Sau khi tải phông chữ vào bộ nhớ và thực hiện trích xuất hoặc sửa đổi dữ liệu, bạn có thể lưu phông chữ trở lại bộ nhớ lưu trữ trên ổ đĩa cục bộ hoặc ghi phông chữ vào luồng byte đầu ra.

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

Làm thế nào để sửa đổi và lưu phông chữ CFF vào ổ đĩa?

Sau khi tải và làm việc với một phiên bản CffFont, hãy ghi tệp phông chữ vào một vị trí mới bằng phương thức 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);
    }
}

Cài đặt và thiết lập

Thêm Aspose.Font for Java vào dự án của bạn thông qua 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. Sự khác biệt giữa OpenType CFF (.otf) và CFF độc lập (.cff) là gì?

Một tệp .cff độc lập chứa dữ liệu chương trình phông chữ PostScript thô mà không có các wrapper bảng OpenType. Một tệp .otf có outline CFF bao bọc luồng .cff bên trong các cấu trúc bảng OpenType tiêu chuẩn (CFF, cmap, head, v.v.). Aspose.Font for Java hỗ trợ xử lý cả định dạng CFF độc lập và OpenType CFF.

2. Tôi có thể chuyển đổi phông chữ CFF sang các định dạng phông chữ khác như TTF hoặc WOFF trong Java không?

Có. Sau khi được tải vào một instance CffFont, Aspose.Font for Java cung cấp các tính năng render và mã hóa cho phép chuyển đổi dữ liệu phông chữ sang các định dạng đích khác như TTF, WOFF hoặc WOFF2.

3. Tôi có thể lưu trực tiếp một CffFont đã sửa đổi vào OutputStream không?

Có. Ngoài việc truyền chuỗi đường dẫn tệp vào font.save(fileName), bạn có thể truyền một java.io.OutputStream để ghi trực tiếp dữ liệu phông chữ nhị phân vào các network stream hoặc memory stream.