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:
- Formato da fonte: As fontes podem ter formatos diferentes, como
TrueType,Type1, etc. - Armazenamento: O local onde os dados binários que representam a fonte estão mantidos. Cada fonte é representada como dados binários, mas a maneira como esses dados são armazenados pode variar. Na maioria dos casos, a fonte é armazenada como um arquivo em um disco rígido. No entanto, às vezes, os dados binários da fonte podem estar contidos em um arquivo diferente que não é a própria fonte. Por exemplo, arquivos criados pelo Microsoft Word (.docx) ou Adobe Acrobat (.pdf) podem incluir diferentes fontes incorporadas.
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:
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.
Duas das classes mais usadas herdadas da base StreamSource:
- FileSystemStreamSource: Projetada para fornecer acesso ao fluxo com base no sistema de arquivos. A propriedade FileName retorna o nome do arquivo da fonte. O método GetFontStream() retorna um fluxo de bytes relacionado a esse arquivo.
- ByteContentStreamSource: Fornece acesso ao fluxo com base em uma matriz de bytes.
Como inicializar as classes?
Aqui estão exemplos da inicialização dessas classes:
- 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");- 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ávelfontArray:
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:
- FileName: Nome do arquivo da fonte.
- FileExtension: Extensão do arquivo da fonte.
- StreamSource: Fonte de fluxo da fonte.
- Offset: Deslocamento dentro do fluxo de bytes da fonte.
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 fonte | Extensão do arquivo (FileExtension) |
|---|---|
TrueType (fonte única) | ttf |
TrueType (coleção de fontes) | ttc |
Web Open Font Format | woff |
Web Open Font Format versão 2.0 | woff2 |
Embedded OpenType | eot |
Adobe Type 1 font | pfa, pfb, afm, pfm |
Compact Font Format | cff (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:
- fontName
- fileExtension
- Objeto do tipo StreamSource
- Objeto do tipo FontFileDefinition
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:
- Construa o caminho para o arquivo.
- Inicialize o objeto [FontDefinition] passando
TTFcomo valor de [FontType]. - Obtenha o valor de [FileExtension] calculado automaticamente.
- 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:
- Construa o caminho para o arquivo.
- Inicialize o objeto [FontDefinition].
- Defina [FileExtension] como
ttf. - 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:
- Construa o caminho para o arquivo.
- Inicialize o objeto [FontDefinition] passando
TTFcomo [FontType],ttfcomo [FileExtension] e o objetoFileSystemStreamSource. O parâmetroFileExtensionaqui é fundamental para a detecção correta do formato. - 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:
- Carregue os dados binários da fonte em uma matriz de bytes.
- Inicialize o objeto [FontDefinition] passando
TTFcomo [FontType],ttfcomo [FileExtension] e o objetoByteContentStreamSourcebaseado na matrizfontBytes. - 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ê.