Sdílet prostřednictvím


Balení písem s aplikacemi

Toto téma obsahuje přehled o tom, jak zabalit písma pomocí aplikace WPF (Windows Presentation Foundation).

Poznámka:

Stejně jako u většiny typů softwaru jsou soubory písem licencované, nikoli prodávat. Licence, které řídí použití písem, se liší od dodavatele po dodavatele, ale obecně většina licencí, včetně těch, které pokrývají písma, která Microsoft dodává s aplikacemi a Windows, neumožňují, aby byla písma vložena do aplikací nebo jinak redistribuovaná. Proto jako vývojář je vaší zodpovědností zajistit, abyste měli požadovaná licenční práva pro jakékoli písmo, které vkládáte do aplikace, nebo jinak distribuovat.

Úvod do balení písem

Písma můžete snadno zabalit jako prostředky v aplikacích WPF, abyste zobrazili text uživatelského rozhraní a další typy obsahu založeného na textu. Písma mohou být oddělená nebo vložená v souborech sestavení aplikace. Můžete také vytvořit knihovnu písem jen pro prostředky, na kterou může vaše aplikace odkazovat.

Písma OpenType a TrueType® obsahují příznak typu fsType, který označuje licenční práva pro vkládání písma pro písmo. Tento příznak typu ale odkazuje pouze na vložená písma uložená v dokumentu – neodkazuje na písma vložená v aplikaci. Práva pro vkládání písma pro písmo můžete načíst vytvořením objektu GlyphTypeface a odkazováním na jeho EmbeddingRights vlastnost. Další informace o příznaku fsType najdete v části Metriky operačního systému a Windows specifikace OpenType.

Web Typografie společnosti Microsoft obsahuje kontaktní informace, které vám můžou pomoct najít konkrétního dodavatele písem nebo najít dodavatele písma pro vlastní práci.

Přidání písem jako položek obsahu

Písma můžete do aplikace přidat jako položky obsahu projektu, které jsou oddělené od souborů sestavení aplikace. To znamená, že položky obsahu nejsou vloženy jako prostředky v rámci sestavení. Následující příklad souboru projektu ukazuje, jak definovat položky obsahu.

<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>  

Aby bylo možné zajistit, aby aplikace mohla používat písma za běhu, musí být písma přístupná v adresáři nasazení aplikace. Element <CopyToOutputDirectory> v souboru projektu aplikace umožňuje automaticky kopírovat písma do adresáře nasazení aplikace během procesu sestavení. Následující příklad souboru projektu ukazuje, jak zkopírovat písma do adresáře nasazení.

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

Následující příklad kódu ukazuje, jak odkazovat na písmo aplikace jako položku obsahu – odkazovaná položka obsahu musí být ve stejném adresáři jako soubory sestavení aplikace.

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

Přidání písem jako položek prostředků

Písma můžete do aplikace přidat jako položky prostředků projektu, které jsou vložené v souborech sestavení aplikace. Použití samostatného podadresáře pro prostředky pomáhá uspořádat soubory projektu aplikace. Následující příklad souboru projektu ukazuje, jak definovat písma jako položky zdroje v samostatném podadresáři.

<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>  

Poznámka:

Když do aplikace přidáte písma jako prostředky, ujistěte se, že nastavujete <Resource> prvek, a ne <EmbeddedResource> element v souboru projektu vaší aplikace. Prvek <EmbeddedResource> pro akci sestavení není podporován.

Následující příklad revize ukazuje, jak odkazovat na prostředky písma aplikace.

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

Odkazování na položky zdroje písma z kódu

Pokud chcete odkazovat na položky zdroje písma z kódu, musíte zadat odkaz na prostředek písma se dvěma částmi: základní identifikátor URI (Uniform Resource Identifier); a odkaz na umístění písma. Tyto hodnoty se používají jako parametry metody FontFamily . Následující příklad kódu ukazuje, jak odkazovat na zdroje písma aplikace v podadresáři projektu volaného 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")

Identifikátor URI (Base Uniform Resource Identifier) může obsahovat podadresář aplikace, ve kterém se nachází prostředek písma. V tomto případě by odkaz na umístění písma nemusel zadávat adresář, ale musel by obsahovat úvodní "./", což označuje, že prostředek písma je ve stejném adresáři určeném identifikátorem URI (Base Uniform Resource Identifier). Následující příklad kódu ukazuje alternativní způsob odkazování na položku prostředku písma – odpovídá předchozímu příkladu kódu.

// 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")

Odkazování na písma ze stejného podadresáře aplikace

Obsah aplikace i soubory prostředků můžete umístit do stejného uživatelem definovaného podadresáře projektu aplikace. Následující příklad souboru projektu ukazuje stránku obsahu a zdroje písma definované ve stejném podadresáři.

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

Vzhledem k tomu, že obsah a písmo aplikace jsou ve stejném podadresáři, je odkaz na písmo relativní k obsahu aplikace. Následující příklady ukazují, jak odkazovat na prostředek písma aplikace, pokud je písmo ve stejném adresáři jako aplikace.

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

Výčet písem v aplikaci

K vytvoření výčtu písem jako položek prostředků v aplikaci použijte metodu nebo GetTypefaces metoduGetFontFamilies. Následující příklad ukazuje, jak použít metodu GetFontFamilies k vrácení kolekce FontFamily objektů z umístění písma aplikace. V tomto případě aplikace obsahuje podadresář s názvem "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

Následující příklad ukazuje, jak použít metodu GetTypefaces k vrácení kolekce Typeface objektů z umístění písma aplikace. V tomto případě aplikace obsahuje podadresář s názvem "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

Vytvoření knihovny zdrojů písem

Můžete vytvořit knihovnu jen pro prostředky, která obsahuje pouze písma – žádný kód není součástí tohoto typu projektu knihovny. Vytvoření knihovny jen pro prostředky je běžnou technikou oddělení prostředků od kódu aplikace, který je používá. To také umožňuje, aby sestavení knihovny bylo součástí více projektů aplikací. Následující příklad souboru projektu ukazuje klíčové části projektu knihovny jen pro zdroje.

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

Odkazování na písmo v knihovně prostředků

Pokud chcete odkazovat na písmo v knihovně prostředků z vaší aplikace, musíte předponu odkazu na písmo použít název sestavení knihovny. V tomto případě je sestavení prostředků písma FontLibrary. Chcete-li oddělit název sestavení od odkazu v rámci sestavení, použijte znak ;. Přidání klíčového slova "Komponenta" následované odkazem na název písma dokončí úplný odkaz na prostředek knihovny písem. Následující příklad kódu ukazuje, jak odkazovat na písmo v sestavení knihovny prostředků.

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

Poznámka:

Tato sada SDK obsahuje sadu ukázkových písem OpenType, která můžete použít s aplikacemi WPF. Písma jsou definována v knihovně jen pro prostředky. Další informace naleznete v tématu Sample OpenType Font Pack.

Omezení používání písem

Následující seznam popisuje několik omezení balení a použití písem v aplikacích WPF:

  • Bity oprávnění pro vkládání písem: Aplikace WPF nekontrolují ani nevynucují bity oprávnění pro vkládání písem. Další informace najdete v části Introduction_to_Packing Písma .

  • Web písem původu: Aplikace WPF neumožňují odkazování na písmo na identifikátor URI (HTTP nebo FTP Uniform Resource Identifier).

  • Absolutní identifikátor URI pomocí balíčku: zápis: Aplikace WPF neumožňují vytvořit FontFamily objekt programově pomocí "pack:" jako součást absolutního odkazu na identifikátor URI (Uniform Resource Identifier) na písmo. Jedná se například "pack://application:,,,/resources/#Pericles Light" o neplatný odkaz na písmo.

  • Automatické vkládání písem: V době návrhu není podporováno vyhledávání písem aplikace a automatické vkládání písem do prostředků aplikace.

  • Podmnožina písem: Aplikace WPF nepodporují vytváření podmnožina písem pro nepevného dokumentu.

  • Vpřípadechch

Viz také