Verpacken von Schriftarten mit AnwendungenPackaging Fonts with Applications

Dieses Thema enthält eine Übersicht über das Verpacken von Schriftarten mit Windows Presentation Foundation (WPF)Windows Presentation Foundation (WPF) Ihrer Anwendung.This topic provides an overview of how to package fonts with your Windows Presentation Foundation (WPF)Windows Presentation Foundation (WPF) application.

Hinweis

Wie die meisten Arten von Software werden Schriftartdateien eher lizenziert als verkauft.As with most types of software, font files are licensed, rather than sold. Lizenzen, die die Verwendung von Schriftarten steuern, unterscheiden sich von Hersteller zu Hersteller, aber in den meisten Lizenzen, einschließlich derjenigen, die die Schriftarten von Microsoft für Anwendungen und Windows abdecken, ist es nicht zulässig, dass die Schriftarten in Anwendungen eingebettet oder anderweitig neu verteilt werden.Licenses that govern the use of fonts vary from vendor to vendor but in general most licenses, including those covering the fonts Microsoft supplies with applications and Windows, do not allow the fonts to be embedded within applications or otherwise redistributed. Deshalb liegt es in Ihrer Verantwortung als Entwickler sicherzustellen, dass Sie über die erforderlichen Lizenzrechte für alle Schriftarten verfügen, die Sie in eine Anwendung einbetten oder anderweitig verbreiten.Therefore, as a developer it is your responsibility to ensure that you have the required license rights for any font you embed within an application or otherwise redistribute.

Einführung in das Verpacken von SchriftartenIntroduction to Packaging Fonts

Sie können Schriftarten problemlos als Ressourcen in Ihren WPFWPF Anwendungen Verpacken, um den Text der Benutzeroberfläche und andere textbasierte Inhaltstypen anzuzeigen.You can easily package fonts as resources within your WPFWPF applications to display user interface text and other types of text based content. Die Schriftarten können getrennt von den Assemblydateien oder eingebettet in die Assemblydateien der Anwendung vorkommen.The fonts can be separate from or embedded within the application's assembly files. Sie können auch eine Schriftartenbibliothek nur für Ressourcen erstellen, auf die die Anwendung verweisen kann.You can also create a resource-only font library, which your application can reference.

OpenType und TrueType®TrueType® Fonts enthalten das Typflag fstype, das Schriftart Einbettungs Lizenzierungs Rechte für die Schriftart angibt.OpenType and TrueType®TrueType® fonts contain a type flag, fsType, that indicates font embedding licensing rights for the font. Dieses Typflag bezieht sich jedoch nur auf eingebettete Schriftarten, die in einem Dokument gespeichert sind, und nicht auf Schriftarten, die in eine Anwendung eingebettet sind.However, this type flag only refers to embedded fonts stored in a document–it does not refer to fonts embedded in an application. Sie können die Schriftart Einbettungs Rechte für eine Schriftart abrufen, indem GlyphTypeface Sie ein-Objekt erstellen EmbeddingRights und auf seine-Eigenschaft verweisen.You can retrieve the font embedding rights for a font by creating a GlyphTypeface object and referencing its EmbeddingRights property. Weitere Informationen zum fstype-Flag finden Sie im Abschnitt "OS/2 und Windows-Metriken" der OpenType-Spezifikation .Refer to the "OS/2 and Windows Metrics" section of the OpenType Specification for more information on the fsType flag.

Die Microsoft -Typografiewebsite enthält Kontaktinformationen, die Ihnen helfen können, einen bestimmten Schriftart Hersteller zu finden oder einen Schriftart Anbieter für benutzerdefinierte arbeiten zu finden.The Microsoft Typography Web site includes contact information that can help you locate a particular font vendor or find a font vendor for custom work.

Hinzufügen von Schriftarten als InhaltselementeAdding Fonts as Content Items

Sie können Schriftarten als Projektinhaltselemente zu Ihrer Anwendung hinzufügen, die von den Assemblydateien der Anwendung getrennt sind.You can add fonts to your application as project content items that are separate from the application's assembly files. Dies bedeutet, dass Inhaltselemente nicht als Ressourcen in eine Assembly eingebettet werden.This means that content items are not embedded as resources within an assembly. In der folgenden Beispielprojektdatei wird veranschaulicht, wie Inhaltselemente definiert werden.The following project file example shows how to define content items.

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

Um sicherzustellen, dass die Anwendung die Schriftarten zur Laufzeit verwenden kann, müssen die Schriftarten im Bereitstellungsverzeichnis der Anwendung zugänglich sein.In order to ensure that the application can use the fonts at run time, the fonts must be accessible in the application's deployment directory. Mithilfe <CopyToOutputDirectory> des-Elements in der Projektdatei der Anwendung können Sie die Schriftarten während des Buildprozesses automatisch in das Anwendungs Bereitstellungs Verzeichnis kopieren.The <CopyToOutputDirectory> element in the application's project file allows you to automatically copy the fonts to the application deployment directory during the build process. In der folgenden Beispielprojektdatei wird veranschaulicht, wie Schriftarten in das Bereitstellungsverzeichnis kopiert werden.The following project file example shows how to copy fonts to the deployment directory.

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

Im folgenden Codebeispiel wird veranschaulicht, wie auf die Schriftart der Anwendung als Inhaltselement verwiesen wird. Das Inhaltselement, auf das verwiesen wird, muss sich im selben Verzeichnis wie die Assemblydateien der Anwendung befinden.The following code example shows how to reference the application's font as a content item—the referenced content item must be in the same directory as the application's assembly files.

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

Hinzufügen von Schriftarten als RessourcenelementeAdding Fonts as Resource Items

Sie können Schriftarten als Projektressourcenelemente zu Ihrer Anwendung hinzufügen, die in die Assemblydateien der Anwendung eingebettet werden.You can add fonts to your application as project resource items that are embedded within the application's assembly files. Die Verwendung eines separaten Unterverzeichnisses für Ressourcen hilft beim Organisieren der Projektdateien der Anwendung.Using a separate subdirectory for resources helps to organize the application's project files. In der folgenden Beispielprojektdatei wird veranschaulicht, wie Schriftarten als Ressourcenelemente in einem separaten Unterverzeichnis definiert werden.The following project file example shows how to define fonts as resource items in a separate subdirectory.

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

Hinweis

Wenn Sie der Anwendung Schriftarten als Ressourcen hinzufügen, stellen Sie sicher, dass <Resource> Sie das-Element und <EmbeddedResource> nicht das-Element in der Projektdatei der Anwendung festlegen.When you add fonts as resources to your application, make sure you are setting the <Resource> element, and not the <EmbeddedResource> element in your application's project file. Das <EmbeddedResource> -Element für die Buildaktion wird nicht unterstützt.The <EmbeddedResource> element for the build action is not supported.

Im folgenden Markupbeispiel wird veranschaulicht, wie auf die Schriftartenressourcen der Anwendung verwiesen wird.The following markup example shows how to reference the application's font resources.

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

Verweisen auf Schriftartenressourcenelemente aus CodeReferencing Font Resource Items from Code

Um auf Schriftart Ressourcen Elemente aus dem Code zu verweisen, müssen Sie einen zweiteiligen Schriftart Ressourcen Verweis angeben: die Basis Uniform Resource Identifier (URI)uniform resource identifier (URI)und den Speicherort Verweis für die Schriftart.In order to reference font resource items from code, you must supply a two-part font resource reference: the base Uniform Resource Identifier (URI)uniform resource identifier (URI); and the font location reference. Diese Werte werden als Parameter für die FontFamily -Methode verwendet.These values are used as the parameters for the FontFamily method. Im folgenden Codebeispiel wird gezeigt, wie auf die Schriftarten Ressourcen der Anwendung im Projekt Unterverzeichnis resourcesmit dem Namen verwiesen wird.The following code example shows how to reference the application's font resources in the project subdirectory called 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")

Die Basis Uniform Resource Identifier (URI)uniform resource identifier (URI) kann das Anwendungs Unterverzeichnis enthalten, in dem sich die Schriftart Ressource befindet.The base Uniform Resource Identifier (URI)uniform resource identifier (URI) can include the application subdirectory where the font resource resides. In diesem Fall muss die Schriftart für den Schriftart Speicherort nicht ein Verzeichnis angeben, sondern eine führende "./" enthalten, die angibt, dass sich die Schriftart Ressource in demselben Verzeichnis befindet, das von der Basis Uniform Resource Identifier (URI)uniform resource identifier (URI)angegeben wird.In this case, the font location reference would not need to specify a directory, but would have to include a leading "./", which indicates the font resource is in the same directory specified by the base Uniform Resource Identifier (URI)uniform resource identifier (URI). Im folgenden Codebeispiel wird eine alternative Möglichkeit veranschaulicht, wie auf das Schriftartenressourcenelement verwiesen werden kann. Es entspricht dem vorherigen Codebeispiel.The following code example shows an alternate way of referencing the font resource item—it is equivalent to the previous code example.

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

Verweisen auf Schriftarten aus dem gleichen AnwendungsunterverzeichnisReferencing Fonts from the Same Application Subdirectory

Sie können Anwendungsinhalt und Ressourcendateien im selben benutzerdefinierten Unterverzeichnis Ihres Anwendungsprojekts platzieren.You can place both application content and resource files within the same user-defined subdirectory of your application project. In der folgenden Beispielprojektdatei wird veranschaulicht, wie eine Inhaltsseite und Schriftartenressourcen im selben Unterverzeichnis definiert werden.The following project file example shows a content page and font resources defined in the same subdirectory.

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

Da sich Anwendungsinhalt und Schriftart im selben Unterverzeichnis befinden, ist der Schriftartenverweis relativ zum Anwendungsinhalt.Since the application content and font are in the same subdirectory, the font reference is relative to the application content. In den folgenden Beispielen wird veranschaulicht, wie auf die Schriftartenressource der Anwendung verwiesen werden kann, wenn sich die Schriftart im selben Verzeichnis wie die Anwendung befindet.The following examples show how to reference the application's font resource when the font is in the same directory as the application.

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

Auflisten von Schriftarten in einer AnwendungEnumerating Fonts in an Application

Um Schriftarten als Ressourcen Elemente in Ihrer Anwendung aufzulisten, verwenden Sie entweder GetFontFamilies die GetTypefaces -oder die-Methode.To enumerate fonts as resource items in your application, use either the GetFontFamilies or GetTypefaces method. Im folgenden Beispiel wird gezeigt, wie die GetFontFamilies -Methode verwendet wird, um FontFamily die Auflistung von-Objekten aus dem Speicherort der Anwendungs Schriftart zurückzugeben.The following example shows how to use the GetFontFamilies method to return the collection of FontFamily objects from the application font location. In diesem Fall enthält die Anwendung ein Unterverzeichnis mit dem Namen „Ressourcen“.In this case, the application contains a subdirectory named "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

Im folgenden Beispiel wird gezeigt, wie die GetTypefaces -Methode verwendet wird, um Typeface die Auflistung von-Objekten aus dem Speicherort der Anwendungs Schriftart zurückzugeben.The following example shows how to use the GetTypefaces method to return the collection of Typeface objects from the application font location. In diesem Fall enthält die Anwendung ein Unterverzeichnis mit dem Namen „Ressourcen“.In this case, the application contains a subdirectory named "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

Erstellen einer SchriftartenressourcenbibliothekCreating a Font Resource Library

Sie können eine Bibliothek nur für Ressourcen erstellen, die ausschließlich Schriftarten enthält. In dieser Art von Bibliothek ist kein Code enthalten.You can create a resource-only library that contains only fonts—no code is part of this type of library project. Das Erstellen einer Bibliothek nur für Ressourcen dient häufig dem Entkoppeln von Ressourcen vom Anwendungscode, der sie verwendet.Creating a resource-only library is a common technique for decoupling resources from the application code that uses them. Dies ermöglicht außerdem, dass die Bibliotheksassembly in mehreren Anwendungsprojekten enthalten sein kann.This also allows the library assembly to be included with multiple application projects. In der folgenden Beispielprojektdatei werden die Hauptbestandteile einer Bibliothek nur für Ressourcen gezeigt.The following project file example shows the key portions of a resource-only library project.

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

Verweisen auf eine Schriftart in einer RessourcenbibliothekReferencing a Font in a Resource Library

Um aus Ihrer Anwendung auf eine Schriftart in einer Ressourcenbibliothek zu verweisen, müssen Sie dem Verweis auf die Schriftart den Namen der Bibliotheksassembly voranstellen.To reference a font in a resource library from your application, you must prefix the font reference with the name of the library assembly. In diesem Fall ist die Schriftartenressourcenassembly „FontLibrary“.In this case, the font resource assembly is "FontLibrary". Verwenden Sie ein Semikolon (;), um den Assemblynamen vom Verweis innerhalb der Assembly zu trennen.To separate the assembly name from the reference within the assembly, use a ';' character. Durch Hinzufügen des Schlüsselworts „Component“ gefolgt vom Verweis auf den Namen der Schriftart wird der Verweis auf die Ressource der Schriftartenbibliothek vervollständigt.Adding the "Component" keyword followed by the reference to the font name completes the full reference to the font library's resource. Im folgenden Codebeispiel wird veranschaulicht, wie auf eine Schriftart in einer Ressourcenbibliotheksassembly verwiesen wird.The following code example shows how to reference a font in a resource library assembly.

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

Hinweis

Dieses SDK enthält eine Reihe von OpenType-Beispiel Schriftarten, die Sie WPFWPF mit-Anwendungen verwenden können.This SDK contains a set of sample OpenType fonts that you can use with WPFWPF applications. Die Schriftarten werden in einer Bibliothek nur für Ressourcen definiert.The fonts are defined in a resource-only library. Weitere Informationen finden Sie unter OpenType-Beispielschriftartenpaket.For more information, see Sample OpenType Font Pack.

Einschränkungen der Verwendung von SchriftartenLimitations on Font Usage

In der folgenden Liste werden verschiedene Einschränkungen beim Verpacken und Verwenden von Schriftarten WPFWPF in Anwendungen beschrieben:The following list describes several limitations on the packaging and use of fonts in WPFWPF applications:

  • Berechtigungsbits für die Schriftarteneinbettung: Von WPFWPF-Anwendungen werden keine Berechtigungsbits für die Schriftarteneinbettung überprüft oder durchgesetzt.Font embedding permission bits: WPFWPF applications do not check or enforce any font embedding permission bits. Weitere Informationen finden Sie im Abschnitt Introduction_to_Packing Fonts .See the Introduction_to_Packing Fonts section for more information.

  • Ursprungs Schriftarten der Ursprungsseite: Anwendungen lassen einen Schriftart Verweis auf http oder FTP Uniform Resource Identifier (URI)uniform resource identifier (URI)nicht zu. WPFWPFSite of origin fonts: WPFWPF applications do not allow a font reference to an http or ftp Uniform Resource Identifier (URI)uniform resource identifier (URI).

  • Absoluter URI mit dem Paket: Notation: mithilfe von Anwendungen können Sie ein FontFamily -Objekt nicht Programm gesteuert mithilfe von "Pack:" als Teil des absoluten Uniform Resource Identifier (URI)uniform resource identifier (URI) Verweises auf eine Schriftart erstellen. WPFWPFAbsolute URI using the pack: notation: WPFWPF applications do not allow you to create a FontFamily object programmatically using "pack:" as part of the absolute Uniform Resource Identifier (URI)uniform resource identifier (URI) reference to a font. Beispielsweise "pack://application:,,,/resources/#Pericles Light" ist ein ungültiger Schriftart Verweis.For example, "pack://application:,,,/resources/#Pericles Light" is an invalid font reference.

  • Automatische Schriftart Einbettung: Während der Entwurfszeit wird das Durchsuchen der Verwendung von Schriftarten in einer Anwendung und die automatische Einbettung der Schriftarten in die Ressourcen der Anwendung nicht unterstützt.Automatic font embedding: During design time, there is no support for searching an application's use of fonts and automatically embedding the fonts in the application's resources.

  • Schriftartteilmengen: WPFWPF-Anwendungen unterstützen keine Erstellung von Schriftartteilmengen für Dokumente ohne festes Format.Font subsets: WPFWPF applications do not support the creation of font subsets for non-fixed documents.

  • Bei einem falschen Verweis greift die Anwendung auf eine verfügbare Schriftart zurück.In cases where there is an incorrect reference, the application falls back to using an available font.

Siehe auchSee also