Balení písem pomocí aplikací
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 licencovány, nikoli prodávány. 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 balíčkování 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 rámci souborů sestavení aplikace. Můžete také vytvořit knihovnu fontů pouze pro prostředky, kterou může vaše aplikace používat.
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 vlastnost EmbeddingRights. Další informace o příznaku fsType najdete v části "OS/2 a Windows metriky" specifikace OpenType, .
Web typografie společnosti Microsoft obsahuje kontaktní informace, které vám můžou pomoct najít konkrétního dodavatele písma nebo najít dodavatele pro zakázkovou 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 v rámci sestavení vloženy jako prostředky. 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 prvek <Resource>
, a ne element <EmbeddedResource>
v souboru projektu vaší aplikace. Prvek <EmbeddedResource>
pro akci sestavení není podporován.
Následující příklad zápisu ukazuje, jak odkázat na aplikační zdroje písem.
<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 pro metodu FontFamily. Následující příklad kódu ukazuje, jak odkazovat na zdroje písma aplikace v podadresáři projektu s názvem 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í "./
", který označuje, že prostředek písma je ve stejném adresáři určeném identifikátorem URI základního jednotného prostředku. 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 fontový prostředek aplikace, když se písmo nachází 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 vyjmenování písem jako položek prostředků v aplikaci použijte metodu GetFontFamilies nebo GetTypefaces. Následující příklad ukazuje, jak použít metodu GetFontFamilies k vrácení kolekce objektů FontFamily 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 objektů Typeface 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 pouze 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í knihovny písem "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ě pouze pro prostředky. Další informace naleznete v 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 Úvod do balení písem.
Písma z původního místa: aplikace WPF neumožňují odkaz na písmo pomocí identifikátoru URI typu HTTP nebo FTP.
Absolutní URI s použitím pack: notace: aplikace WPF neumožňují programově vytvořit objekt FontFamily použitím „pack:“ jako součásti absolutního URI odkazu na písmo. Například
"pack://application:,,,/resources/#Pericles Light"
je neplatným odkazem na písmo.automatické vkládání písma: V době návrhu není podporováno vyhledávání použití písem v aplikaci a automatické vkládání těchto písem do prostředků aplikace.
podmnožiny písem: aplikace WPF nepodporují vytváření podmnožin písem pro nezafixované dokumenty.
V případech, kdy je uveden nesprávný odkaz, aplikace použije dostupné písmo.
Viz také
.NET Desktop feedback