Извлечение лицензионных ограничений шрифтов TrueType и OpenType с помощью Java

При работе с цифровыми шрифтами в программных приложениях, системах генерации документов или веб-платформах крайне важно соблюдать лицензионные ограничения шрифтов. Поставщики шрифтов встраивают правила лицензирования и использования непосредственно в файлы шрифтов, чтобы определить, каким образом шрифты можно встраивать, устанавливать или изменять. С помощью Aspose.Font for Java разработчики могут проверять метрики встроенной таблицы OS/2 и программно извлекать лицензионные ограничения из файлов шрифтов TrueType (.ttf) и OpenType (.otf).

 

Понимание режимов лицензирования шрифтов

Спецификации шрифтов TrueType и OpenType хранят разрешения на встраивание во флаге fsType таблицы OS/2 шрифта. Aspose.Font for Java классифицирует эти встроенные лицензионные ограничения на отдельные режимы с помощью класса LicenseFlags:

  • Встраивание с возможностью установки: Шрифт можно встраивать и устанавливать на постоянной основе в удаленных системах или для использования другими пользователями.
  • Встраивание с возможностью редактирования: Шрифт можно встраивать и временно загружать в другие системы. Редактирование разрешено, включая форматирование нового текста с использованием встроенного шрифта, а изменения можно сохранять.
  • Встраивание для предварительного просмотра и печати: Шрифт можно встраивать и временно загружать в другие системы исключительно для просмотра или печати документа.
  • Встраивание с ограниченной лицензией: Шрифт нельзя изменять, встраивать или передавать каким-либо образом без предварительного получения явного разрешения от законного владельца.

Извлечение лицензионных ограничений TTF в Java

Чтобы прочитать лицензионные разрешения с помощью Aspose.Font for Java:

  • Загрузите файл шрифта с помощью FontFileDefinition и FontDefinition, указав FontType.TTF.
  • Получите таблицу OS/2 из коллекции таблиц шрифта (getTtfTables().getOs2Table()).
  • Получите флаги лицензии с помощью getLicenseFlags().
  • Оцените права на встраивание с помощью вспомогательных методов, таких как isEditableEmbedding(), isInstallableEmbedding(), isPreviewAndPrintEmbedding() или 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()));
    }
}

Установка и настройка

Добавьте Aspose.Font for Java в свой проект с помощью 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. Поддерживают ли шрифты Type1 извлечение лицензионных ограничений с помощью LicenseFlags?

Нет. Стандартные форматы шрифтов Type1 (.pfb/.pfa) не содержат таблицу OS/2. Флаг fsType и структура таблицы OS/2 характерны для форматов шрифтов TrueType (.ttf) и OpenType (.otf).

2. Что означает, если licenseFlags.isFSTypeAbsent() возвращает true?

Если isFSTypeAbsent() возвращает true (или если licenseFlags имеет значение null), это означает, что в таблице OS/2 файла шрифта отсутствуют встроенные флаги лицензионных ограничений.

3. Как проверить, разрешает ли шрифт редактирование содержимого документа?

Вы можете проверить licenseFlags.isEditableEmbedding(). Если значение равно true, шрифт разрешает временную загрузку и редактирование, позволяя пользователям форматировать новый текст с помощью встроенного шрифта и сохранять изменения.