Includere i tipi di carattere nel pacchetto delle applicazioni

Questo argomento offre una panoramica di come creare pacchetti di tipi di carattere con l'applicazione Windows Presentation Foundation (WPF).

Nota

Come con la maggior parte delle applicazioni software, i file dei tipi di carattere vengono concessi in licenza e non venduti. Le licenze che regolano l'uso dei tipi di carattere variano da fornitore a fornitore, ma in generale la maggior parte delle licenze, incluse quelle relative ai tipi di carattere forniti da Microsoft con applicazioni e Windows, non consentono l'incorporamento dei tipi di carattere all'interno delle applicazioni o la ridistribuzione in altro modo. Per questo motivo, gli sviluppatori sono tenuti ad assicurarsi che l'utente abbia i diritti di licenza separati per qualsiasi tipo di carattere incorporato in un'applicazione o ridistribuito in altro modo.

Introduzione all'inclusione dei tipi di carattere nel pacchetto

È possibile creare facilmente pacchetti di tipi di carattere come risorse all'interno delle applicazioni WPF per visualizzare il testo dell'interfaccia utente e altri tipi di contenuto basato su testo. I tipi di carattere possono essere separati o incorporati nei file di assembly dell'applicazione. È anche possibile creare una libreria di tipi di carattere di sole risorse, a cui l'applicazione può fare riferimento.

I tipi di carattere OpenType e TrueType® contengono un flag di tipo fsType, che indica i diritti di licenza di incorporamento dei tipi di carattere per il tipo di carattere. Questo flag di tipo, tuttavia, fa riferimento solo ai tipi di carattere incorporati archiviati in un documento e non ai tipi di carattere incorporati in un'applicazione. È possibile recuperare i diritti di incorporamento del tipo di carattere per un tipo di carattere creando un GlyphTypeface oggetto e facendo riferimento alla relativa EmbeddingRights proprietà. Per altre informazioni sul flag fsType, vedere la sezione "OS/2 and Windows Metrics" (Metriche di OS/2 e Windows) della specifica su OpenType.

Il sito web di Microsoft Typography include informazioni di contatto per individuare il fornitore di un particolare tipo di carattere o trovare un fornitore di tipi di carattere per un lavoro personalizzato.

Aggiunta di tipi di carattere come elementi di contenuto

È possibile aggiungere tipi di carattere all'applicazione come elementi di contenuto del progetto separati dai file di assembly dell'applicazione. Gli elementi di contenuto non vengono quindi incorporati come risorse in un assembly. L'esempio di file di progetto seguente illustra come definire gli elementi di contenuto.

<Project DefaultTargets="Build"  
                xmlns="http://schemas.microsoft.com/developer/msbuild/2003">  
  <!-- Other project build settings ... -->  
  
  <ItemGroup>  
    <Content Include="Peric.ttf" />  
    <Content Include="Pericl.ttf" />  
  </ItemGroup>  
</Project>  

Per assicurarsi che l'applicazione possa usare i tipi di carattere in fase di esecuzione, i tipi di carattere devono essere accessibili nella directory di distribuzione dell'applicazione. L'elemento <CopyToOutputDirectory> nel file di progetto dell'applicazione consente di copiare automaticamente i tipi di carattere nella directory di distribuzione dell'applicazione durante il processo di compilazione. L'esempio di file di progetto seguente illustra come copiare i tipi di carattere nella directory di distribuzione.

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

L'esempio di codice seguente illustra come fare riferimento al tipo di carattere dell'applicazione come elemento di contenuto. L'elemento di contenuto a cui si fa riferimento deve essere nella stessa directory dei file di assembly dell'applicazione.

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

Aggiunta di tipi di carattere come elementi risorsa

È possibile aggiungere tipi di carattere all'applicazione come elementi risorsa del progetto incorporati nei file di assembly dell'applicazione. L'uso di una sottodirectory separata per le risorse consente di organizzare i file di progetto dell'applicazione. L'esempio di file di progetto seguente illustra come definire i tipi di carattere come elementi risorsa in una sottodirectory separata.

<Project DefaultTargets="Build"  
                xmlns="http://schemas.microsoft.com/developer/msbuild/2003">  
  <!-- Other project build settings ... -->  
  
  <ItemGroup>  
    <Resource Include="resources\Peric.ttf" />  
    <Resource Include="resources\Pericl.ttf" />  
  </ItemGroup>  
</Project>  

Nota

Quando si aggiungono tipi di carattere come risorse all'applicazione, assicurarsi di impostare l'elemento <Resource> e non l'elemento <EmbeddedResource> nel file di progetto dell'applicazione. L'elemento <EmbeddedResource> per l'azione di compilazione non è supportato.

L'esempio di markup seguente illustra come fare riferimento alle risorse dei tipi di carattere dell'applicazione.

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

Riferimento agli elementi risorsa dei tipi di carattere dal codice

Per fare riferimento agli elementi delle risorse del tipo di carattere dal codice, è necessario fornire un riferimento alla risorsa carattere in due parti: l'URI (Uniform Resource Identifier) di base; e il riferimento alla posizione del carattere. Questi valori vengono usati come parametri per il FontFamily metodo . L'esempio di codice seguente visualizza come fare riferimento alle risorse dei tipi di carattere dell'applicazione nella sottodirectory del progetto denominata 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");
' 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")

L'URI (Uniform Resource Identifier) di base può includere la sottodirectory dell'applicazione in cui risiede la risorsa del tipo di carattere. In questo caso, il riferimento alla posizione del carattere non deve specificare una directory, ma deve includere un "./" iniziale, che indica che la risorsa del tipo di carattere si trova nella stessa directory specificata dall'URI (Uniform Resource Identifier) di base. L'esempio di codice seguente illustra un modo alternativo per fare riferimento all'elemento risorsa dei tipi di carattere, che equivale all'esempio di codice precedente.

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

Riferimento ai tipi di carattere dalla stessa sottodirectory dell'applicazione

È possibile inserire sia il contenuto dell'applicazione che i file di risorse nella stessa sottodirectory definita dall'utente del progetto dell'applicazione. L'esempio di file di progetto seguente illustra una pagina contenuto e le risorse dei tipi di carattere definite nella stessa sottodirectory.

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

Poiché il tipo di carattere e il contenuto dell'applicazione sono nella stessa sottodirectory, il riferimento al tipo di carattere è relativo al contenuto dell'applicazione. Gli esempi seguenti illustrano come fare riferimento alla risorsa del tipo di carattere dell'applicazione quando il tipo di carattere è nella stessa directory dell'applicazione.

<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");
' 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")

Enumerazione di tipi di carattere in un'applicazione

Per enumerare i tipi di carattere come elementi di risorsa nell'applicazione, usare il GetFontFamilies metodo o GetTypefaces . Nell'esempio seguente viene illustrato come utilizzare il GetFontFamilies metodo per restituire la raccolta di oggetti dal percorso del tipo di FontFamily carattere dell'applicazione. In questo caso, l'applicazione contiene una sottodirectory denominata "resources".

foreach (FontFamily fontFamily in Fonts.GetFontFamilies(new Uri("pack://application:,,,/"), "./resources/"))
{
    // Perform action.
}
For Each fontFamily As FontFamily In Fonts.GetFontFamilies(New Uri("pack://application:,,,/"), "./resources/")
    ' Perform action.
Next fontFamily

Nell'esempio seguente viene illustrato come utilizzare il GetTypefaces metodo per restituire la raccolta di oggetti dal percorso del tipo di Typeface carattere dell'applicazione. In questo caso, l'applicazione contiene una sottodirectory denominata "resources".

foreach (Typeface typeface in Fonts.GetTypefaces(new Uri("pack://application:,,,/"), "./resources/"))
{
    // Perform action.
}
For Each typeface As Typeface In Fonts.GetTypefaces(New Uri("pack://application:,,,/"), "./resources/")
    ' Perform action.
Next typeface

Creazione di una libreria di risorse tipo di carattere

È possibile creare una libreria di sole risorse contenente solo tipi di carattere. Nessun codice fa parte di questo tipo di progetto libreria. La creazione di una libreria di sole risorse è una tecnica comune per disaccoppiare le risorse dal codice dell'applicazione che le usa e consente anche di includere l'assembly di librerie in più progetti di applicazione. L'esempio di file di progetto seguente illustra le parti chiave di un progetto di libreria di sole risorse.

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

Riferimento a un tipo di carattere in una libreria di risorse

Per fare riferimento a un tipo di carattere in una libreria di risorse dall'applicazione, è necessario far precedere il riferimento al tipo di carattere dal nome dell'assembly di librerie. In questo caso, l'assembly di risorse del tipo di carattere è "FontLibrary". Per separare il nome dell'assembly dal riferimento nell'assembly, usare un carattere ";". Aggiungendo la parola chiave "Component" seguita dal riferimento al nome del tipo di carattere, si completa l'intero riferimento alla risorsa della libreria di tipi di carattere. L'esempio di codice seguente illustra come fare riferimento a un tipo di carattere in un assembly di librerie di risorse.

<Run FontFamily="/FontLibrary;Component/#Kootenay" FontSize="36">
  ABCDEFGHIJKLMNOPQRSTUVWXYZ
</Run>

Nota

Questo SDK contiene un set di tipi di carattere OpenType di esempio che è possibile usare con le applicazioni WPF. I tipi di carattere sono definiti in una libreria di sole risorse. Per altre informazioni, vedere Esempio di pacchetto di tipi di carattere OpenType.

Limitazioni all'utilizzo dei tipi di carattere

L'elenco seguente descrive diverse limitazioni relative alla creazione di pacchetti e all'uso dei tipi di carattere nelle applicazioni WPF:

  • Bit di autorizzazione di incorporamento dei tipi di carattere: le applicazioni WPF non controllano o applicano i bit di autorizzazione di incorporamento dei tipi di carattere. Per altre informazioni, vedere la sezione Introduzione all'inclusione dei tipi di carattere nel pacchetto.

  • Tipi di carattere del sito di origine: le applicazioni WPF non consentono un riferimento al tipo di carattere a un URI (Uniform Resource Identifier) http o ftp.

  • URI assoluto con il pacchetto: notazione: le applicazioni WPF non consentono di creare un FontFamily oggetto a livello di codice usando "pack:" come parte del riferimento URI (Uniform Resource Identifier) assoluto a un tipo di carattere. Ad esempio, "pack://application:,,,/resources/#Pericles Light" è un riferimento al tipo di carattere non valido.

  • Incorporamento tipi di carattere automatico: durante la fase di progettazione, non è disponibile il supporto per cercare l'uso dei tipi di carattere di un'applicazione e incorporare automaticamente i tipi di carattere nelle risorse dell'applicazione.

  • Subset di tipi di carattere: le applicazioni WPF non supportano la creazione di subset di tipi di carattere per documenti non fissi.

  • Se è presente un riferimento non corretto, l'applicazione torna a usare un tipo di carattere disponibile.

Vedi anche