Como carregar fontes? | Solução da API para Java

Visão geral

Para responder à pergunta, como carregar fontes, primeiro precisamos aprender que qualquer fonte é fisicamente uma matriz de bytes nos quais os dados são representados em algum formato. Portanto, para o carregamento correto da fonte, você precisa conhecer dois parâmetros principais:

Objetos e parâmetros necessários para o carregamento da fonte

Aspose.font para Java fornece objeto fontdefiniton para notificar dois parâmetros principais exigidos para carregamento de fontes.

Depois de criar e iniciar o objetofontDefiniton, você só precisa chamar o método estático com.aspose.font.Font.open() e passar apenas um objeto inicializadofontdefinitoncomo um parâmetro para carregar a fonte desejada e obter uma referência.

Vamos descrevê -lo com o pseudocódigo:

1 
2    pacote com.aspose.font;
3
4    import com.aspose.font.FontDefinition;
5    ...
6
7    // Initialize object FontDefinition with appropriate properties
8    FontDefinition fontDef = new FontDefinition(); 
9    Font desiredFont = Font.open(fontDef);

O resultado final do carregamento da fonte está obtendo um objeto de com.aspose.font.font tipo. Class com.aspose.font.font é uma classe de fonte base do pacote com.aspose.font para a biblioteca Java. Representa a principal funcionalidade de trabalhar com fontes.

Ficando carregado uma fonte em com.aspose.font.font Tipo Objeto Você poderá renderizar texto com esta fonte, obter dados de codificação e métricas de font. Você também poderá modificar ou salvar essa fonte e muito mais.

Para iniciar o objeto fontDefiniton que precisamos, como foi mencionado anteriormente, para fornecer 2 parâmetros de fonte, - o tipo de formato e o objeto que descreve o armazenamento para dados binários da fonte. O primeiro parâmetro é notificado com a enumeração FontType.

Para simplificar o trabalho com o segundo parâmetro, com.aspose.font oferece uma série de objetos que fornecem acesso universal aos dados binários da fonte independentemente de onde a fonte é colocada.

Esse acesso universal está vinculado a algo como um fluxo de bytes. Portanto, independentemente de onde a fonte é colocada - em um arquivo em um disco, dentro de outro arquivo, matriz de bytes na memória - em qualquer caso, os objetos especiais com.aspose.font fornecerão um acesso ao fluxo de bytes, relacionado à fonte desejada.

Vamos descrever esses objetos:

  1. Streamsource Classe. Esta classe base abstrata define as propriedades e métodos que dão acesso ao fluxo de bytes de fonte. getFontStream() Método desta classe retorna um fluxo, relacionado aos dados da fonte binária. Propriedade Offset pontos na posição neste fluxo, de onde devemos começar a ler os dados.

  2. Duas classes mais usadas herdadas da base StreamSource:

Como iniciar classes?

Aqui estão exemplos do início dessas classes. 1.Vamos supor que a fonte esteja no arquivo chamado lora.ttf. Nesse caso, para obter acesso ao fluxo de bytes desta fonte, precisamos criar o objeto do tipo filesystemStreamSource usando este único construtor:

1 
2    Filesystemstreamsource fontsource = new FileSystemStreamSource ("lora.ttf");
  1. Se os dados binários da fonte estiverem localizados em uma matriz binária definida pela variável BYTE [] FONTARRAY, um objeto do tipo byteContentStreamSource fornecerá um acesso ao fluxo de dados da fonte, com base na variável FONTARRAY.

Para obter acesso ao fluxo de bytes de fonte, precisamos criar um objeto do tipo byteContentStreamSource para obter acesso ao fluxo, relacionado à matriz de bytes de font usando código como este:

1 
2    ByteContentStreamSource fontSource = new ByteContentStreamSource (FontArray);

Portanto, para fornecer acesso aos dados binários da fonte, use objetos herdados da classe Base streamSource. Além disso, chamaremos esses objetos fontes de fluxo de fontes.

Objeto FontfiledEfinition

A maioria das frentes está localizada em arquivos regulares, mas, ao mesmo tempo, parte das fontes pode ter diferentes fontes de dados. Para ingressar em um objeto Termos Arquivo e Freio binário da fonte, com.aspose.font A biblioteca fornece objeto especial fontfiledefinition.

Este objeto tem tais propriedades:

O mais simples e um dos construtores mais utilizados deste objeto é o construtor com a seguinte assinatura: FontfiledEfinition (arquivo FontFile), use esse construtor para casos quando a fonte desejada estiver em um arquivo no disco rígido.

Aqui está um exemplo de iniciar esse objeto para font Montserrat, localizado no arquivo C:\Windows\Fonts\Montserrat.ttf:

1 
2    FontFileDefinition fileDef = new FontFileDefinition(new File("C:\\Windows\\Fonts\\Montserrat.ttf"));

Além disso, FontfiledEfinition pode fazer referência a Montserrat Font usando os seguintes construtores:

1 
2    FontFileDefinition fileDef = new FontFileDefinition(new FileSystemStreamSource("C:\\Windows\\Fonts\\Montserrat.ttf"));
3
4    FontFileDefinition fileDef = new FontFileDefinition("ttf", new FileSystemStreamSource("C:\\Windows\\Fonts\\Montserrat.ttf"));

O parâmetro fileExtension deve corresponder ao padrão, para o formato da fonte, extensão. Por exemplo, se o formato da fonte for TrueType, o valor do parâmetro FileExtension poderá ser ttf ou ttc (se o arquivo de font for uma coleção de fontes truetype). Se o formato da fonte for Tipo aberto incorporado, o valor do parâmetro FileExtension deve ser eot.

A tabela abaixo mostra os formatos de arquivo de font mais usados ​​no Aspose.font. Lá estão eles com os valores correspondentes que o parâmetro FileExtension deve assumir.

Formato de ficheiro fonteExtensão de ficheiro
TrueType, tipo de letra únicottf
Colecção de tipos de letraTrueType`ttc
Formato de Fonte Aberta da Webwoff
Formato de Fonte Aberta da Web versão 2.0woff2
OpenType Incorporadoeot
Fonte Adobe Tipo 1pfa, pfb, afm, pfm
Formato de Fonte Compactocff, pode ser nulo

Se os dados da fonte não iniciarem a posição 0 do fluxo de bytes, use o seguinte construtor com o parâmetro offset:

1 
2    FontfiledEfinition (String FileExtension, StreamSource StreamSource, Long Offset).

Como iniciar o objeto FontDefinition?

Agora, quando você tem uma idéia dos objetos herdados da aula streamsource e fornecendo acesso ao fluxo de bytes de fonte e do objeto fontfiledefinition, explicaremos adequadamente as diferentes situações.

FontDefiniton Objeto fornece muitos construtores sobrecarregados. O recurso comum de todos os construtores existentes é o parâmetro fontType. Ele descreve o tipo de formato de fonte. Como foi mencionado anteriormente, além do valor FontType, objeto fontDefiniton deve ser inicializado com referência aos dados binários da fonte.

Próximos parâmetros de construtores fontDefiniton podem ser usados ​​neste caso:

Você pode ter uma pergunta. Por que passaríamos no parâmetro FileExtensionpara o fontDefinitonou o objeto *fontfiledEfinition *, quando sempre passamos o parâmetro FontType, que parece coincidir com seu valor com FileExtension? O problema é que FontTypenem sempre coincide com o valor de *arquivoextension *. FontType define o formato comum da fonte, mas não o formato de fonte de um arquivo específico. Algumas fontes de um formato podem ter formatos de arquivo diferentes. Por exemplo, o valor FontType.ttf define o formato TrueType. Mas, ao mesmo tempo, o TrueType inclui alguns formatos de fonte e existem arquivos de fonte com extensões ttf, eot, ttc etc. E se, por exemplo, para a fonte do formato eot, passamos para FontDefiniton apenas Fonttype.ttf Valor, como esse objeto entenderá que a fonte pertence ao formato eot e não a ttf?

Da mesma forma, o valor do Fonttype.Type1 é a definição comum para fontes desse formato. Ao mesmo tempo, os arquivos de fonte do formato type1 têm extensões .pfa, .pfb, .afm, .pfm. Portanto, você não pode definir o formato de arquivo de fontes dependendo adequadamente apenas no valor do fontype.type1. Portanto, para definir o formato da font corretamente, precisamos especificar o parâmetro FontType com o valor do parâmetro FileExtension.

Abaixo, você pode aprender exemplos de inicialização FontDefiniton do objeto e após o carregamento da fonte para diferentes casos.

Em todos os casos, o resultado final de carregamento da fonte é colocado na variável de com.aspose.font.font tipo. Este tipo é a classe de fonte básica de com.aspose.font e os objetos desse tipo fornecem funcionalidade base comum para trabalhar com fontes.

Carregando a fonte nesse objeto, você poderá renderizar texto com esta fonte, obter informações de codificação, métricas de fonte, etc.

Exemplos de como carregar fontes

Vamos ter como exemplo, carregando a fonte Montserrat no arquivo Montserrat-Regular.ttf.

Use as próximas declarações:

 1    pacote com.aspose.font;
 2
 3    import java.io.File;
 4    import java.io.IOException;
 5    import java.nio.file.Files;
 6    import java.nio.file.Paths;
 7
 8    import com.aspose.font.ByteContentStreamSource;
 9    import com.aspose.font.FileSystemStreamSource;
10    import com.aspose.font.Font;
11    import com.aspose.font.FontDefinition;
12    import com.aspose.font.FontFileDefinition;
13    import com.aspose.font.FontType;

Você pode carregar essa fonte usando os objetos fontDefiniton e fontfiledefinition de algumas maneiras diferentes:

Carregando com a ajuda do objeto java.io.file

Para cumprir o carregamento, faça o próximo:

  1. Construa o caminho para o arquivo.
  2. Iniciar FontDefiniton Objeto Passando TTF AS FontType Valor.
  3. Obtenha valor calculado automaticamente fileExtension.
  4. Carregue a fonte.
 1    // Construct path to the file
 2    String fontPath = Paths.get(getDataDir(), "Montserrat-Regular.ttf").toString();
 3
 4    // Initialize FontDefinition object passing TTF as FontType value and using FontFileDefinition
 5    FontFileDefinition fileDef = new FontFileDefinition(new File(fontPath));
 6
 7    // Based on FileInfo object, fileExtension value is calculated automatically from FileInfo fields.
 8    FontDefinition fontDef = new FontDefinition(FontType.TTF, fileDef);
 9
10    // Load the font 
11    Font font = Font.open(fontDef);

Carregando com a ajuda do objeto Tipo de Sistema de FileStemStreamSource

Dê os próximos passos para cumprir a operação:

  1. Construa o caminho para o arquivo.
  2. Inicie o objeto fontDefiniton.
  3. Definir FileExtension para ttf.
  4. Carregue a fonte.
 1    // Construa o caminho para o arquivo
 2    String fontpath = Paths.get (getDatadir (), "Montserrat-Regular.ttf"). ToString ();
 3
 4    // Initialize FontDefinition object passing TTF as FontType value and using FontFileDefinition
 5    FontFileDefinition fileDef = new FontFileDefinition("ttf", new FileSystemStreamSource(fontPath));
 6
 7    // Based on FileSystemStreamSource object, set fileExtension to "ttf"
 8    FontDefinition fontDef = new FontDefinition(FontType.TTF, fileDef);
 9
10    // Load the font
11    Font font = Font.open(fontDef);

Carregamento de fontes sem objeto FontfiledEfinition, com a passagem de arquivos STEMSTREAMSource diretamente para a FontDefinition

As próximas ações devem ser tomadas para carregar a fonte desta maneira:

  1. Construa o caminho para o arquivo.
  2. Iniciar FontDefiniton Objeto Passando TTF como FontType Valor, TTF AS FileExtension valor e FileSystemStreamSource Objeto. Parâmetro FileExtension Aqui não é um valor duplicado para o parâmetro FontType.
  3. Carregue a fonte.
 1    // Construa o caminho para o arquivo
 2    String fontpath = Paths.get (getDatadir (), "Montserrat-Regular.ttf"). ToString ();
 3
 4    // Initialize FontDefinition object passing TTF as FontType value, "ttf" as fileExtension value, 
 5    // and FileSystemStreamSource object. Parameter 'fileExtension' here is not duplicate value 
 6    // for parameter 'FontType' and it's needed for correct font format detection
 7    FontDefinition fontDef = new FontDefinition(FontType.TTF, "ttf", new FileSystemStreamSource(fontPath));
 8
 9    // Load the font
10    Font font = Font.open(fontDef);

Carregando de fonte com a variável de tipo [] de byte e com o uso do objeto ByteContentStreamSource

Para carregar uma fonte da matriz de bytes, você precisa:

  1. Construa o caminho para o arquivo.
  2. Carregue dados binários da fonte na matriz de bytes3.Inicialize FontDefiniton Objeto Passando TTF como FontType Valor,TTF AS FileExtension Valor e ByteContentSTreamSource Objeto com base na matriz Fontbytes.
  3. Carregue a fonte.
 1    // Construa o caminho para o arquivo
 2    String fontpath = Paths.get (getDatadir (), "Montserrat-Regular.ttf"). ToString ();
 3
 4    // Load font binary data into byte array
 5    byte[] fontBytes = Files.readAllBytes(Paths.get(fontPath));
 6
 7    // Initialize FontDefinition object  passing TTF as FontType value, "ttf" as fileExtension value, 
 8    // and ByteContentStreamSource object based on fontBytes array
 9    FontDefinition fontDef = new FontDefinition(FontType.TTF, "ttf", new ByteContentStreamSource(fontBytes));
10
11    // Load the font
12    Font font = Font.open(fontDef);

Para obter mais exemplos de uso do Aspose.font, acesse aspose.font.examples.sln Solution, no java-examples da documentação aspose.font

Se você tiver algum problema ou dúvida, poderá publicá -los na seção Aspose.Font.Product Family do fórum de suporte gratuito e em poucas horas nossa equipe de suporte limpará tudo para você.

Have any questions about Aspose.Font?



Subscribe to Aspose Product Updates

Get monthly newsletters & offers directly delivered to your mailbox.