Compartilhar via


Empacotando Fontes com Aplicações

Este tópico fornece uma revisão de como empacotar fontes com sua aplicação Windows Presentation Foundation (WPF).

ObservaçãoObservação:

Assim como a maioria dos tipos de software, fontes são licenciadas, ao invés de vendidas. Licenças que regem o uso de fontes variam de fornecedor para fornecedor mas em geral mais licenças, incluindo aqueles que abrangem as fontes Microsoft fontes com aplicativos e Windows, não permitir que as fontes seja incorporada em aplicativos ou caso contrário, redistribuído. Portanto, como um desenvolvedor, é sua responsabilidade garantir que você tem os direitos de licença requeridos para qualquer fonte que você embuta em sua aplicação ou redistribua.

Este tópico contém as seguintes seções.

  • Introdução a Empacotamento de Fontes
  • Adicionando Fontes como Item de Conteúdo
  • Adicionando Fontes como Itens de Recurso
  • Criando uma Biblioteca de Recursos de Fonte
  • Limitações em Uso de Fontes
  • Tópicos relacionados

Introdução a Empacotamento de Fontes

Você pode facilmente empacotar fontes como recursos dentro de sua aplicação WPF para exibir ao usuário interface de texto e outros tipos de conteúdo baseado em texto. As fontes podem ser separadas ou embutidas dentro dos arquivos de montagem da aplicação. Você também pode criar uma biblioteca de fontes somente recursos, a qual sua aplicação pode referenciar.

Fontes OpenType e TrueType® contém um sinalizador de tipo, fsType, que indica os direitos de licença embutida para a fonte. Entretanto, este tipo de sinalizador referencia fontes embutidas armazenadas em um documento. Não se refere a fontes embutidas em uma aplicação. Você pode obter os direitos de fonte embutida para uma fonte criando um objeto GlyphTypeface e referenciando sua propriedade EmbeddingRights. Consulte a seção "métricas Windows OS/2 e" daEspecificação de OpenType para obter mais informações sobre o sinalizar fsType.

The Microsoft Typography Site da Web inclui informações de contato que podem ajudá-lo a localizar um fornecedor de fonte específico ou localizar um fornecedor da fonte de trabalho personalizada.

Adicionando Fontes como Item de Conteúdo

Você pode adicionar fontes na sua aplicação como itens de conteúdo de projeto que são separados dos arquivos de montagem da aplicação. Isto significa que itens de conteúdo não são embutidos como recursos durante uma montagem. O seguinte exemplo de arquivo de projeto mostra como definir itens de conteúdo.

<Project DefaultTargets="Build" xmlns="https://schemas.microsoft.com/developer/msbuild/2003">
  <!-- Other project build settings ... -->

  <ItemGroup>
    <Content Include="Peric.ttf" />
    <Content Include="Pericl.ttf" />
  </ItemGroup>
</Project>

Para garantir que a aplicação pode usar as fontes em tempo de execução, as fontes devem ser acessíveis no diretório de implantação da aplicação. O elemento <CopyToOutputDirectory> no arquivo de projeto da aplicação permite você copiar as fontes para o diretório de implantação da aplicação durante o processo de montagem. O seguinte exemplo de arquivo de projeto mostra como copiar fontes para o diretório de implantação.

<ItemGroup>
  <Content Include="Peric.ttf">
    <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
  </Content>
  <Content Include="Pericl.ttf">
    <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
  </Content>
</ItemGroup>

O seguinte exemplo de código mostra como referenciar para a fonte da aplicação como item de conteúdo. O item de conteúdo referenciado deve estar no mesmo diretório que os arquivos de montagem da aplicação.

<TextBlock FontFamily="./#Pericles Light">
  Aegean Sea
</TextBlock>

Adicionando Fontes como Itens de Recurso

Você pode adicionar fontes para sua aplicação como itens de recurso de projetos que são embutidos nos arquivos de montagem da aplicação. Usar um subdiretório separado para recursos ajuda a organizar os arquivos do projeto da aplicação. O seguinte exemplo de arquivo de projeto mostra como definir fontes como itens de recursos em um subdiretório separado.

<Project DefaultTargets="Build" xmlns="https://schemas.microsoft.com/developer/msbuild/2003">
  <!-- Other project build settings ... -->

  <ItemGroup>
    <Resource Include="resources\Peric.ttf" />
    <Resource Include="resources\Pericl.ttf" />
  </ItemGroup>
</Project>
ObservaçãoObservação:

Quando você adiciona fontes sistema autônomo recursos para seu aplicativo, certifique-se de estar configuração o <Resource> elemento e não o <EmbeddedResource> elemento no arquivo de projeto do aplicativo. O elemento <EmbeddedResource> para a ação construir não é suportador.

O seguinte exemplo de marcação mostra como referenciar os recursos de fonte da aplicação.

<TextBlock FontFamily="./resources/#Pericles Light">
  Aegean Sea
</TextBlock>

Referenciando Itens de Recurso de Fonte a partir do Código

Para fazer referência a itens de recurso de fonte do código, você deve fornecer uma referência de recurso de fonte de duas partes: a base uniform resource identifier (URI); e a referência de local da fonte. Esses valores são usados como parâmetros para o método FontFamily. O seguinte exemplo de código mostra como referenciar os recursos de fonte da aplicação no subdiretório do projeto chamado resources.

// The font resource reference includes the base URI reference (application directory level),
// and a relative URI reference.
myTextBlock.FontFamily = new FontFamily(new Uri("pack://application:,,,/"), "./resources/#Pericles Light");

A base uniform resource identifier (URI) pode incluir o subdiretório da aplicação onde o recurso de fonte está. Neste caso, a referência da localização da fonte não precisaria especificar um diretório, mas teria que incluir um ./ na frente; que indica que o recurso de fonte está no mesmo diretório especificado pela base uniform resource identifier (URI). O seguinte exemplo de código mostra uma maneira alternativa de referenciar o item de recurso de fonte. É equivalente ao exemplo de código anterior.

// The base URI reference can include an application subdirectory.
myTextBlock.FontFamily = new FontFamily(new Uri("pack://application:,,,/resources/"), "./#Pericles Light");

Referenciando Fontes do Mesmo Subdiretório da Aplicação

Você pode colocar ambos conteúdos de aplicação e arquivos de recursos dentro do mesmo subdiretório definido pelo usuário de seu projeto da aplicação. O seguinte exemplo de arquivo de projeto mostra uma página de conteúdo e um recurso de fonte definido no mesmo subdiretório.

<ItemGroup>
  <Page Include="pages\HomePage.xaml" />
</ItemGroup>
<ItemGroup>
  <Resource Include="pages\Peric.ttf" />
  <Resource Include="pages\Pericl.ttf" />
</ItemGroup>

Como o conteúdo da aplicação e a fonte estão no mesmo subdiretórios, a referência da fonte é relativa ao conteúdo da aplicação. Os seguintes exemplos mostram como referenciar o recurso de fonte da aplicação quando a fonte está no mesmo diretório que a aplicação.

<TextBlock FontFamily="./#Pericles Light">
  Aegean Sea
</TextBlock>
// The font resource reference includes the base Uri (application directory level),
// and the file resource location, which is relative to the base Uri.
myTextBlock.FontFamily = new FontFamily(new Uri("pack://application:,,,/"), "/pages/#Pericles Light");

Enumerando Fontes em uma Aplicação

Para enumerar fontes como itens de recursos em sua aplicação, use tanto o método GetFontFamilies quanto o GetTypefaces. O seguinte exemplo mostra como usar o método GetFontFamilies para retornar a coleção de FontFamily da localização de fontes da aplicação. Neste caso a aplicação contém um subdiretório chamado "resources".

foreach (FontFamily fontFamily in Fonts.GetFontFamilies(new Uri("pack://application:,,,/"), "./resources/"))
{
    // Perform action.
}

O seguinte exemplo mostra como usar o método GetTypefaces para retornar a coleção de Typeface da localização de fontes da aplicação. Neste caso a aplicação contém um subdiretório chamado "resources".

foreach (Typeface typeface in Fonts.GetTypefaces(new Uri("pack://application:,,,/"), "./resources/"))
{
    // Perform action.
}

Criando uma Biblioteca de Recursos de Fonte

Você pode criar uma biblioteca somente recursos que contém somente fontes. Nenhum código é parte deste tipo de projeto de biblioteca. Criar uma biblioteca somente recursos é uma técnica comum para desacoplar recursos do código da aplicação que as usa. Isso também permite que a montagem da biblioteca seja incluída em projetos de aplicação múltiplos. O seguinte exemplo de arquivo de projeto mostra como a porção de chaves de um projeto de biblioteca somente recursos.

<PropertyGroup>
  <AssemblyName>FontLibrary</AssemblyName>
  <OutputType>library</OutputType>
  ...
</PropertyGroup>
...
<ItemGroup>
  <Resource Include="Kooten.ttf" />
  <Resource Include="Pesca.ttf" />
</ItemGroup

Referenciando uma Fonte em uma Biblioteca de Recursos

Para referenciar uma fonte em uma biblioteca de recursos a partir de sua aplicação, você deve prefixar a referência da fonte com o nome da montagem da biblioteca. Neste caso, a montagem do recurso de fonte é "FontLibrary". Para separar o nome da montagem da referência dentro da montagem, use um caractere ';'. Adicionando a palavra-chave "Component" seguida da referência para o nome da fonte completa a referência completa para o recurso da biblioteca de fontes. O seguinte exemplo de código mostra como referenciar uma fonte em uma montagem de biblioteca de recursos.

<Run FontFamily="/FontLibrary;Component/#Kootenay" FontSize="36">
  ABCDEFGHIJKLMNOPQRSTUVWXYZ
</Run>
ObservaçãoObservação:

Esse SDK contém um conjunto de amostra OpenType fontes que você pode usar com WPF aplicativos. As fontes são definidas em uma biblioteca somente recursos. Para obter mais informações, consulte Pacote Exemplo de fontes OpenType.

Limitações em Uso de Fontes

A seguinte lista descreve várias limitações no empacotamento e uso de fontes em aplicações WPF:

  • Bits de permissão de incorporação de fonte: WPF aplicativos não verificar ou aplicar qualquer fonte incorporação de bits de permissão. Consulte a seção Introdução a empacotamento de Fontes para mais informações.

  • Site de origem fontes: WPF aplicativos não permitem que uma referência de fonte para um http ou ftp uniform resource identifier (URI).

  • Um URI absoluto usando o empacotar: notação: WPF aplicativos não permitem que você criar um FontFamilyobjeto através de programação "empacotar:" sistema autônomo parte do absoluta uniform resource identifier (URI) referência a uma fonte. Por exemplo, "pack://application:,,,/resources/#Pericles Light" é uma referência de fonte inválida.

  • A incorporação de fonte automático: Durante o time de design, não existe suporte para uso do aplicativo de fontes de pesquisa e incorporando automaticamente as fontes em recursos do aplicativo.

  • fonte subconjuntos: WPF aplicativos não oferecem suporte a criação de subconjuntos de fontes para documentos não-fixo.

  • Em casos onde há uma referência incorreta, a aplicação volta atrás para usar uma fonte disponível.

Consulte também

Conceitos

Recursos de fontes OpenType

Pacote Exemplo de fontes OpenType

Referência

Typography

FontFamily

Outros recursos

Microsoft Typography: Links, notícias e contatos

Especificação OpenType