Extrair restrições de licença de fontes TrueType e OpenType com Java

Ao trabalhar com fontes digitais em aplicativos de software, mecanismos de geração de documentos ou plataformas web, é fundamental respeitar as restrições de licença das fontes. Os fornecedores de fontes incorporam regras de licenciamento e uso diretamente nos arquivos de fontes para definir como as fontes podem ser incorporadas, instaladas ou modificadas. Com o Aspose.Font for Java, os desenvolvedores podem inspecionar as métricas incorporadas da tabela OS/2 e extrair programaticamente as restrições de licença de arquivos de fontes TrueType (.ttf) e OpenType (.otf).

 

Compreender os modos de licenciamento de fontes

As especificações de fontes TrueType e OpenType armazenam as permissões de incorporação no sinalizador fsType dentro da tabela OS/2 da fonte. O Aspose.Font for Java categoriza essas restrições de licença incorporadas em diferentes modos por meio da classe LicenseFlags:

  • Incorporação instalável: A fonte pode ser incorporada e instalada permanentemente em sistemas remotos ou para uso por outros usuários.
  • Incorporação editável: A fonte pode ser incorporada e carregada temporariamente em outros sistemas. A edição é permitida, incluindo a formatação de novo texto usando a fonte incorporada, e as alterações podem ser salvas.
  • Incorporação para visualização e impressão: A fonte pode ser incorporada e carregada temporariamente em outros sistemas estritamente para visualização ou impressão do documento.
  • Incorporação com licença restrita: A fonte não deve ser modificada, incorporada ou trocada de qualquer forma sem obter primeiro a permissão explícita do proprietário legal.

Extrair restrições de licença TTF em Java

Para ler as permissões de licença usando o Aspose.Font for Java:

  • Carregue o arquivo de fonte usando FontFileDefinition e FontDefinition, especificando FontType.TTF.
  • Recupere a tabela OS/2 da coleção de tabelas da fonte (getTtfTables().getOs2Table()).
  • Obtenha os sinalizadores de licença usando getLicenseFlags().
  • Avalie os direitos de incorporação usando métodos auxiliares, como isEditableEmbedding(), isInstallableEmbedding(), isPreviewAndPrintEmbedding() ou 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()));
    }
}

Instalação e configuração

Inclua o Aspose.Font for Java em seu projeto por meio do 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. As fontes Type1 oferecem suporte à extração de restrições de licença usando LicenseFlags?

Não. Os formatos de fonte Type1 padrão (.pfb/.pfa) não contêm uma tabela OS/2. O sinalizador fsType e a estrutura da tabela OS/2 são específicos dos formatos de fonte TrueType (.ttf) e OpenType (.otf).

2. O que significa se licenseFlags.isFSTypeAbsent() retornar true?

Se isFSTypeAbsent() retornar true (ou se licenseFlags for null), isso indica que não há sinalizadores de restrição de licença incorporados na tabela OS/2 do arquivo de fonte.

3. Como verifico se uma fonte permite a edição do conteúdo de um documento?

Você pode verificar licenseFlags.isEditableEmbedding(). Se o valor for true, a fonte permite o carregamento e a edição temporários, permitindo que os usuários formatem novos textos usando a fonte incorporada e salvem as alterações.