Trích xuất các hạn chế cấp phép phông chữ TrueType và OpenType bằng Java

Khi làm việc với phông chữ kỹ thuật số trong các ứng dụng phần mềm, công cụ tạo tài liệu hoặc nền tảng web, việc tuân thủ các hạn chế cấp phép phông chữ là rất quan trọng. Các nhà cung cấp phông chữ nhúng trực tiếp các quy tắc cấp phép và sử dụng vào tệp phông chữ để xác định cách phông chữ có thể được nhúng, cài đặt hoặc sửa đổi. Với Aspose.Font for Java, các nhà phát triển có thể kiểm tra các chỉ số của bảng OS/2 được nhúng và trích xuất theo chương trình các hạn chế cấp phép từ các tệp phông chữ TrueType (.ttf) và OpenType (.otf).

 

Tìm hiểu các chế độ cấp phép phông chữ

Thông số kỹ thuật của phông chữ TrueType và OpenType lưu trữ quyền nhúng trong cờ fsType thuộc bảng OS/2 của phông chữ. Aspose.Font for Java phân loại các hạn chế cấp phép được nhúng này thành các chế độ riêng biệt thông qua lớp LicenseFlags:

  • Nhúng có thể cài đặt: Phông chữ có thể được nhúng và cài đặt vĩnh viễn trên các hệ thống từ xa hoặc để người dùng khác sử dụng.
  • Nhúng có thể chỉnh sửa: Phông chữ có thể được nhúng và tải tạm thời trên các hệ thống khác. Cho phép chỉnh sửa, bao gồm định dạng văn bản mới bằng phông chữ được nhúng và có thể lưu các thay đổi.
  • Nhúng để xem trước và in: Phông chữ có thể được nhúng và tải tạm thời trên các hệ thống khác chỉ để xem hoặc in tài liệu.
  • Nhúng với giấy phép hạn chế: Không được sửa đổi, nhúng hoặc trao đổi phông chữ dưới bất kỳ hình thức nào nếu chưa nhận được sự cho phép rõ ràng trước từ chủ sở hữu hợp pháp.

Trích xuất các hạn chế cấp phép TTF trong Java

Để đọc các quyền cấp phép bằng Aspose.Font for Java:

  • Tải tệp phông chữ bằng FontFileDefinitionFontDefinition, chỉ định FontType.TTF.
  • Lấy bảng OS/2 từ tập hợp bảng của phông chữ (getTtfTables().getOs2Table()).
  • Lấy các cờ cấp phép bằng getLicenseFlags().
  • Đánh giá quyền nhúng bằng các phương thức trợ giúp như isEditableEmbedding(), isInstallableEmbedding(), isPreviewAndPrintEmbedding() hoặc isRestrictedLicenseEmbedding().

String fileName = Utils.getDataDir() + "Montserrat-Regular.ttf"; // Font file name with full path

FontDefinition fd = new FontDefinition(FontType.TTF, new FontFileDefinition("ttf", new FileSystemStreamSource(fileName)));
TtfFont font = (TtfFont) Font.open(fd);

LicenseFlags licenseFlags = null;
if (font.getTtfTables().getOs2Table() != null)
{
    licenseFlags = font.getTtfTables().getOs2Table().getLicenseFlags();
}

if (licenseFlags == null || licenseFlags.isFSTypeAbsent())
{
    System.out.println(MessageFormat.format("Font {0} has no embedded license restrictions", font.getFontName()));
}
else
{
    if (licenseFlags.isEditableEmbedding())
    {
        System.out.println(MessageFormat.format("Font {0} may be embedded, and may be temporarily loaded on other systems."
            + " In addition, editing is permitted, including ability to format new text"
            + " using the embedded font, and changes may be saved.", font.getFontName()));
    }
    else if (licenseFlags.isInstallableEmbedding())
    {
        System.out.println(MessageFormat.format("Font {0} may be embedded, and may be permanently installed"
            + " for use on a remote systems, or for use by other users.", font.getFontName()));
    }
    else if (licenseFlags.isPreviewAndPrintEmbedding())
    {
        System.out.println(MessageFormat.format("Font {0} may be embedded, and may be temporarily loaded"
            + " on other systems for purposes of viewing or printing the document.", font.getFontName()));
    }
    else if (licenseFlags.isRestrictedLicenseEmbedding())
    {
        System.out.println(MessageFormat.format("Font {0} must not be modified, embedded or exchanged in any manner"
            + " without first obtaining explicit permission of the legal owner.", font.getFontName()));
    }
}

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>

Câu hỏi thường gặp

1. Phông chữ Type1 có hỗ trợ trích xuất các hạn chế cấp phép bằng cách sử dụng LicenseFlags không?

Không. Các định dạng phông chữ Type1 tiêu chuẩn (.pfb/.pfa) không chứa bảng OS/2. Cờ fsType và cấu trúc bảng OS/2 chỉ dành riêng cho các định dạng phông chữ TrueType (.ttf) và OpenType (.otf).

2. Điều đó có nghĩa là gì nếu licenseFlags.isFSTypeAbsent() trả về true?

Nếu isFSTypeAbsent() trả về true (hoặc nếu licenseFlagsnull), điều đó cho biết không có cờ hạn chế cấp phép được nhúng trong bảng OS/2 của tệp phông chữ.

3. Làm thế nào để kiểm tra xem phông chữ có cho phép chỉnh sửa nội dung tài liệu hay không?

Bạn có thể kiểm tra licenseFlags.isEditableEmbedding(). Nếu giá trị là true, phông chữ cho phép tải và chỉnh sửa tạm thời, cho phép người dùng định dạng văn bản mới bằng phông chữ được nhúng và lưu các thay đổi.