Condividi tramite


Creazione di pacchetti di tipi di carattere con applicazioni

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

Nota

Come la maggior parte dei tipi di software, i file di caratteri sono concessi in licenza, anziché 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. Pertanto, in qualità di sviluppatore, è responsabilità dell'utente assicurarsi di avere i diritti di licenza necessari per qualsiasi tipo di carattere incorporato all'interno di un'applicazione o ridistribuire in altro modo.

Introduzione ai tipi di carattere per la creazione di pacchetti

È 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 all'interno dei file di assembly dell'applicazione. È inoltre possibile creare una libreria di soli caratteri che l'applicazione può utilizzare come riferimento.

I tipi di carattere OpenType e TrueType® contengono un flag di tipo, fsType, che indica i diritti di licenza di incorporamento dei font. Tuttavia, questo flag di tipo fa riferimento solo ai tipi di carattere incorporati archiviati in un documento, ma non fa riferimento 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 oggetto GlyphTypeface e facendo riferimento alla relativa proprietà EmbeddingRights. Per altre informazioni sul flag fsType, vedere la sezione "Metriche OS/2 e Windows" dell'Specifica OpenType.

Il sito Web Microsoft Typography include informazioni di contatto che consentono di individuare un fornitore di tipi di carattere specifico o di trovare un fornitore di tipi di carattere per il 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. Ciò significa che gli elementi di contenuto non vengono incorporati come risorse all'interno di un assembly. Nell'esempio di file di progetto seguente viene illustrato 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 garantire 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. Nell'esempio di file di progetto seguente viene illustrato 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>  

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

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

Aggiunta di tipi di carattere come elementi di risorsa

È possibile aggiungere tipi di carattere all'applicazione come elementi di risorse del progetto incorporati all'interno dei file di assembly dell'applicazione. L'uso di una sottodirectory separata per le risorse consente di organizzare i file di progetto dell'applicazione. Nell'esempio di file di progetto seguente viene illustrato come definire i tipi di carattere come elementi di 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.

Nell'esempio di markup seguente viene illustrato come fare riferimento alle risorse del tipo di carattere dell'applicazione.

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

Riferimento alle risorse di font dal codice

Per fare riferimento agli elementi delle risorse dei font dal codice, è necessario fornire un riferimento alla risorsa del font in due parti: l'URI (Uniform Resource Identifier) di base e il riferimento alla posizione del font. Questi valori vengono usati come parametri per il metodo FontFamily. Nell'esempio di codice seguente viene illustrato come fare riferimento alle risorse del tipo 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 font. 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. Nell'esempio di codice seguente viene illustrato un modo alternativo di fare riferimento all'elemento della risorsa carattere, equivalente 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 all'interno della stessa sottodirectory definita dall'utente del progetto dell'applicazione. L'esempio di file di progetto seguente mostra una pagina dei contenuti e le risorse dei caratteri 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 contenuto dell'applicazione e il tipo di carattere si trovano nella stessa sottodirectory, il riferimento al tipo di carattere è relativo al contenuto dell'applicazione. Negli esempi seguenti viene illustrato come fare riferimento alla risorsa del tipo di carattere dell'applicazione quando il tipo di carattere si trova 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 dei tipi di carattere in un'applicazione

Per enumerare i tipi di carattere come elementi di risorsa nell'applicazione, usare il metodo GetFontFamilies o GetTypefaces. Nell'esempio seguente viene illustrato come utilizzare il metodo GetFontFamilies per restituire la collezione di oggetti FontFamily dal percorso del font 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 metodo GetTypefaces per restituire la collezione di oggetti Typeface dalla cartella dei font 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 dei tipi di carattere

È possibile creare una libreria di sola risorsa che contiene solo tipi di carattere. Nessun codice fa parte di questo tipo di progetto di libreria. La creazione di una libreria di sola risorsa è una tecnica comune per separare le risorse dal codice dell'applicazione che le usa. In questo modo l'assembly di libreria può essere incluso in più progetti di applicazione. L'esempio seguente di file di progetto mostra le parti chiave di un progetto di libreria contenente solo 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 font in una libreria di risorse dalla tua applicazione, è necessario anteporre al riferimento del font il nome dell'assembly della libreria. In questo caso, l'assembly delle risorse dei font è "FontLibrary". Per separare il nome dell'assembly dal riferimento all'interno dell'assembly, utilizzare il carattere ';'. L'aggiunta della parola chiave "Component" seguita dal riferimento al nome del tipo di carattere completa il riferimento completo alla risorsa della libreria dei caratteri. Nell'esempio di codice seguente viene illustrato come fare riferimento a un tipo di carattere in un assembly della libreria 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 dedicata alle risorse. Per altre informazioni, vedere Sample OpenType Font Pack.

Limitazioni relative 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 ulteriori informazioni, vedere la sezione Introduction_to_Packing Fonts.

  • Fonti d'origine dei caratteri: Le applicazioni WPF non consentono un riferimento a un tipo di carattere a un URI (Uniform Resource Identifier) http o ftp.

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

  • Incorporamento automatico dei tipi di carattere: Durante la fase di progettazione, non è disponibile alcun supporto per la ricerca di tipi di carattere di un'applicazione e l'incorporamento automatico dei 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.

  • Nei casi in cui è presente un riferimento non corretto, l'applicazione torna all'uso di un tipo di carattere disponibile.

Vedere anche