Como carregar fontes? | Aspose.Font para .NET

Visão geral

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

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

O Aspose.Font para .NET fornece o objeto FontDefinition para especificar os dois parâmetros principais exigidos para o carregamento de fontes. Após criar e inicializar o objeto FontDefinition, basta chamar o método estático Aspose.Font.Font.Open() e passar o objeto FontDefinition inicializado como parâmetro para carregar a fonte desejada e obter sua referência.

Vamos descrever o processo com um pseudocódigo:

1 
2using Aspose.Font;
3    ...
4
5    // Inicializa o objeto FontDefinition com as propriedades apropriadas
6    FontDefinition fontDef = new FontDefinition(); 
7    Font desiredFont = Font.Open(fontDef);

O resultado final do carregamento da fonte é a obtenção de um objeto do tipo Aspose.Font.Font. A classe Aspose.Font.Font é a classe base de fontes da biblioteca Aspose.Font para .NET. Ela representa a funcionalidade principal para trabalhar com fontes.

Ao carregar uma fonte em um objeto do tipo Aspose.Font.Font, você poderá renderizar texto com essa fonte, obter dados de codificação e métricas de fonte. Você também poderá modificar ou salvar essa fonte, entre outras operações.

Como mencionado anteriormente, para inicializar o objeto FontDefinition, precisamos fornecer 2 parâmetros: o tipo do formato e o objeto que descreve o armazenamento dos dados binários da fonte. O primeiro parâmetro é informado por meio da enumeração FontType.

Para simplificar o trabalho com o segundo parâmetro, o Aspose.Font oferece uma série de objetos que fornecem acesso universal aos dados binários da fonte, independentemente de onde ela esteja localizada.

Esse acesso universal está vinculado ao conceito de fluxo de bytes (byte stream). Assim, independentemente de onde a fonte esteja localizada — em um arquivo no disco, dentro de outro arquivo ou em uma matriz de bytes na memória — os objetos especiais do Aspose.Font fornecerão acesso ao fluxo de bytes relacionado à fonte desejada.

Vamos descrever esses objetos:

  1. Classe StreamSource: Esta classe base abstrata define as propriedades e métodos que dão acesso ao fluxo de bytes da fonte. O método GetFontStream() desta classe retorna um fluxo relacionado aos dados binários da fonte. A propriedade Offset aponta para a posição neste fluxo a partir da qual devemos começar a ler os dados.

  2. Duas das classes mais usadas herdadas da base StreamSource:

Como inicializar as classes?

Aqui estão exemplos da inicialização dessas classes:

  1. Vamos supor que a fonte esteja no arquivo chamado Lora.ttf. Nesse caso, para obter acesso ao fluxo de bytes dessa fonte, precisamos criar um objeto do tipo FileSystemStreamSource usando seu construtor:
1 
2    FileSystemStreamSource fontSource = new FileSystemStreamSource("Lora.ttf");
  1. Se os dados binários da fonte estiverem em uma matriz binária definida pela variável byte[] fontArray, um objeto do tipo ByteContentStreamSource fornecerá acesso ao fluxo de dados da fonte com base na variável fontArray:
1 
2    ByteContentStreamSource fontSource = new ByteContentStreamSource(fontArray);

Portanto, para fornecer acesso aos dados binários da fonte, use objetos herdados da classe base StreamSource. Chamamos esses objetos de fontes de fluxo de fonte (font stream sources).

Objeto FontFileDefinition

A maioria das fontes está localizada em arquivos comuns, mas algumas podem ter diferentes fontes de dados. Para unir os conceitos de “arquivo” e “fluxo binário de fonte” em um único objeto, a biblioteca Aspose.Font fornece o objeto especial FontFileDefinition.

Este objeto possui as seguintes propriedades:

Um dos construtores mais simples e utilizados deste objeto é o construtor com a assinatura FontFileDefinition(FileInfo fontFile). Use este construtor para casos em que a fonte desejada esteja em um arquivo no disco rígido.

Aqui está um exemplo de inicialização desse objeto para a fonte Montserrat, localizada no arquivo C:\Windows\Fonts\Montserrat.ttf:

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

Além disso, o FontFileDefinition pode referenciar a fonte Montserrat 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 à extensão padrão do formato da fonte. Por exemplo, se o formato da fonte for TrueType, o valor poderá ser ttf ou ttc (se o arquivo for uma coleção de fontes TrueType). Se o formato for “Embedded Open Type”, o valor deverá ser eot.

A tabela abaixo mostra os formatos de arquivo de fonte mais usados no Aspose.Font para .NET e seus respectivos valores para o parâmetro FileExtension.

Formato do arquivo de fonteExtensão do arquivo (FileExtension)
TrueType (fonte única)ttf
TrueType (coleção de fontes)ttc
Web Open Font Formatwoff
Web Open Font Format versão 2.0woff2
Embedded OpenTypeeot
Adobe Type 1 fontpfa, pfb, afm, pfm
Compact Font Formatcff (pode ser nulo)

Se os dados da fonte não começarem na posição 0 do fluxo de bytes, use o construtor com o parâmetro Offset:

1 
2    FontFileDefinition(string fileExtension, StreamSource streamSource, long offset);

Como inicializar o objeto FontDefinition?

Agora que você conhece os objetos herdados da classe StreamSource e o objeto FontFileDefinition, explicaremos como inicializar corretamente o objeto FontDefinition para diferentes situações.

O objeto FontDefinition fornece vários construtores sobrecarregados. A característica comum de todos é o parâmetro FontType, que descreve o tipo do formato da fonte. Como mencionado, além do valor [FontType], o objeto deve ser inicializado com uma referência aos dados binários da fonte.

Nesse caso, os seguintes parâmetros dos construtores de FontDefinition podem ser usados:

Você pode se perguntar por que passar o parâmetro [FileExtension] se já passamos o [FontType]? O problema é que o [FontType] nem sempre coincide com o valor de [FileExtension]. O [FontType] define o formato comum, mas não o formato de um arquivo específico. Por exemplo, FontType.TTF define o formato TrueType, que pode ter extensões como ttf, eot, ttc, etc. Se passarmos apenas FontType.TTF, o objeto pode não distinguir entre um arquivo EOT e um TTF. Da mesma forma, FontType.Type1 abrange extensões .pfa, .pfb, .afm, .pfm. Portanto, para definir o formato corretamente, precisamos especificar tanto o [FontType] quanto o [FileExtension].

Abaixo, veja exemplos de inicialização do objeto FontDefinition e o subsequente carregamento da fonte para diferentes casos.

Em todos os casos, o resultado final é colocado em uma variável do tipo Aspose.Font.Font. Ao carregar a fonte nesse objeto, você poderá renderizar texto, obter informações de codificação, métricas, etc.

Exemplos de como carregar fontes

Vamos usar como exemplo o carregamento da fonte Montserrat do arquivo C:\Windows\Fonts\Montserrat.ttf.

Adicione os seguintes namespaces no início do arquivo:

1    using System;
2    using Aspose.Font;
3    using Aspose.Font.Sources;
4    using System.IO;

Você pode carregar esta fonte usando objetos [FontDefinition] e [FontFileDefinition] de algumas maneiras diferentes:

Carregando com a ajuda do objeto System.IO.FileInfo

Para realizar o carregamento, faça o seguinte:

  1. Construa o caminho para o arquivo.
  2. Inicialize o objeto [FontDefinition] passando TTF como valor de [FontType].
  3. Obtenha o valor de [FileExtension] calculado automaticamente.
  4. Carregue a fonte.
 1    // Construa o caminho para o arquivo
 2    string fontPath = @"C:\Windows\Fonts\Montserrat.ttf";
 3
 4    // Inicializa o objeto FontFileDefinition usando FileInfo
 5    FontFileDefinition fileDef = new FontFileDefinition(new FileInfo(fontPath));
 6
 7    // O valor fileExtension é calculado automaticamente com base no objeto FileInfo
 8    FontDefinition fontDef = new FontDefinition(FontType.TTF, fileDef);
 9	
10    // Carrega a fonte
11    Font font = Font.Open(fontDef);

Carregando com a ajuda de um objeto FileSystemStreamSource

Siga estes passos:

  1. Construa o caminho para o arquivo.
  2. Inicialize o objeto [FontDefinition].
  3. Defina [FileExtension] como ttf.
  4. Carregue a fonte.
 1    // Construa o caminho para o arquivo
 2    string fontPath = @"C:\Windows\Fonts\Montserrat.ttf";
 3
 4    // Inicializa o objeto FontFileDefinition passando TTF como FontType e usando FileSystemStreamSource
 5    FontFileDefinition fileDef = new FontFileDefinition("ttf", new FileSystemStreamSource(fontPath));
 6
 7    // Inicializa o objeto FontDefinition com base no fileDef
 8    FontDefinition fontDef = new FontDefinition(FontType.TTF, fileDef);
 9		
10    // Carrega a fonte   
11    Font font = Font.Open(fontDef);

Carregamento sem objeto FontFileDefinition, passando FileSystemStreamSource diretamente para FontDefinition

As seguintes ações devem ser tomadas:

  1. Construa o caminho para o arquivo.
  2. Inicialize o objeto [FontDefinition] passando TTF como [FontType], ttf como [FileExtension] e o objeto FileSystemStreamSource. O parâmetro FileExtension aqui é fundamental para a detecção correta do formato.
  3. Carregue a fonte.
1    // Construa o caminho para o arquivo
2    string fontPath = @"C:\Windows\Fonts\Montserrat.ttf";
3
4    // Inicializa o objeto FontDefinition
5    // O parâmetro 'fileExtension' é necessário para a detecção correta do formato da fonte
6    FontDefinition fontDef = new FontDefinition(FontType.TTF, "ttf", new FileSystemStreamSource(fontPath));
7
8    // Carrega a fonte	
9    Font font = Font.Open(fontDef);

Carregamento com uma variável byte[] e usando um objeto ByteContentStreamSource

Para carregar uma fonte a partir de uma matriz de bytes:

  1. Carregue os dados binários da fonte em uma matriz de bytes.
  2. Inicialize o objeto [FontDefinition] passando TTF como [FontType], ttf como [FileExtension] e o objeto ByteContentStreamSource baseado na matriz fontBytes.
  3. Carregue a fonte.
1    // Supõe-se que fontBytes já contenha os dados binários da fonte
2    byte[] fontBytes = File.ReadAllBytes(@"C:\Windows\Fonts\Montserrat.ttf");
3
4    // Inicializa o objeto FontDefinition
5    FontDefinition fontDef = new FontDefinition(FontType.TTF, "ttf", new ByteContentStreamSource(fontBytes));
6	
7    // Carrega a fonte	
8    Font font = Font.Open(fontDef);

Para obter mais exemplos de uso do Aspose.Font, consulte a solução Aspose.Font.Examples.sln, nos net-examples da documentação do Aspose.Font.

Se você tiver problemas ou dúvidas, pode publicá-los na seção Aspose.Font.Product Family do nosso fórum de suporte gratuito e, em poucas horas, nossa equipe de suporte esclarecerá tudo para você.

Have any questions about Aspose.Font?



Subscribe to Aspose Product Updates

Get monthly newsletters & offers directly delivered to your mailbox.