Show / Hide Table of Contents

Упаковка шрифтов с приложениями

Этот раздел содержит общие сведения об упаковке шрифтов с вашей Windows Presentation Foundation (WPF) приложения.

Note

Как и с большинством типов программного обеспечения, файлы шрифтов предоставляются по лицензии, а не продаются. Лицензии, регулирующие использование шрифтов, отличаются в зависимости от производителя, но в целом большинство лицензий, в том числе охватывающие шрифты, Майкрософт с приложениями и Windows, не допускают шрифтов, внедренных в приложениях или в противном случае распространение. Ответственность разработчика состоит в том, чтобы гарантировать наличие требуемых лицензионных прав на любой шрифт, встраиваемый в приложение или распространяемый иными путями.

Общие сведения об упаковке шрифтов

Можно легко упаковать шрифты в качестве ресурсов в вашей WPF приложения для отображения текста пользовательского интерфейса и других типов текста на основе содержимого. Шрифты могут быть отдельными от файлов сборки приложения или включенными в них. Можно также создать библиотеку шрифтов только для ресурсов, на которую может ссылаться приложение.

OpenType и TrueType® шрифты содержат флаг типа fsType, указывающее, права лицензирования на встраивание шрифта для шрифта. Однако этот флаг типа относится только к внедренным шрифтам, хранящимся в документе; он не относится к шрифтам, внедренным в приложении. Вы можете получить права для шрифта на внедрение путем создания GlyphTypeface и ссылки на его EmbeddingRights свойство. См. в разделе «OS/2 и Windows метрики» спецификация OpenType Дополнительные сведения о флаге fstype см.

Microsoft Typography веб-узел содержит контактную информацию, которая может помочь вам найти поставщика определенного шрифта или поставщика шрифтов для пользовательских рабочих.

Добавление шрифтов как элементов содержимого

Вы можете добавить шрифты в приложение в виде элементов содержимого проекта, которые отделены от файлов сборки приложения. Это означает, что элементы содержимого не внедряются в сборку в качестве ресурсов. В следующем примере файла проекта показано, как определить элементы содержимого.

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

Чтобы приложение могло использовать шрифты во время выполнения, эти шрифты должны быть доступны в каталоге развертывания приложения. <CopyToOutputDirectory> Элемент в файле проекта приложения позволяет автоматически копировать шрифты в каталог развертывания приложения в процессе сборки. В следующем примере файла проекта показано, как скопировать шрифты в каталог развертывания.

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

В следующем примере кода показано, как ссылаться на шрифт приложения как на элемент содержимого: ссылочный элемент содержимого должен быть в том же каталоге, что и файлы сборки приложения.

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

Добавление шрифтов как элементов ресурсов

Вы можете добавить шрифты в приложение в виде элементов ресурсов проекта, которые внедряются в файлы сборки приложения. Использование отдельного подкаталога для ресурсов помогает упорядочить файлы проекта приложения. В следующем примере файла проекта показано, как определить шрифты в виде элементов ресурсов в отдельном подкаталоге.

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

При добавлении шрифтов как ресурсов в приложение, убедитесь, что при установке <Resource> элемент, а не <EmbeddedResource> элемент в файле проекта приложения. <EmbeddedResource> Элемент для действия сборки не поддерживается.

В следующем примере разметки показано, как ссылаться на ресурсы шрифтов приложения.

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

Ссылка на элементы ресурсов шрифтов из кода

Чтобы ссылаться на элементы ресурсов шрифтов из кода, необходимо указать ссылку на ресурс шрифта двух частей: базовый URI; и ссылку на расположение шрифта. Эти значения используются в качестве параметров для FontFamily метод. В следующем примере кода показано, как ссылаться на ресурсы шрифтов приложения в подкаталоге проекта с именем 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");

Базовый URI может включать подкаталог приложения, где находится ресурс шрифта. В этом случае ссылка на расположение шрифта не нужно указать каталог, но пришлось бы включить в начале префикс "./«, указывает, что ресурс шрифта находится в том же каталоге, который указан с помощью базового URI. В следующем примере кода показан другой способ ссылки на элемент ресурса шрифта — он эквивалентен предыдущему примеру кода.

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

Ссылка на шрифты из одного подкаталога приложения

Вы можете разместить файл содержимого и файл ресурсов приложения в одном пользовательском подкаталоге проекта приложения. В следующем примере файла проекта показаны страница содержимого и ресурсы шрифтов, определенные в одном подкаталоге.

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

Поскольку содержимое приложения и шрифт находятся в одном подкаталоге, ссылка на шрифт указывается относительно содержимого приложения. В следующих примерах показывается, как ссылаться на ресурс шрифтов приложения, когда шрифт находится в том же каталоге, что и приложение.

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

Перечисление шрифтов в приложении

Для перечисления шрифтов как элементов ресурса в приложении, используйте GetFontFamilies или GetTypefaces метод. В следующем примере показано, как использовать GetFontFamilies метод, чтобы вернуть коллекцию FontFamily объектов из расположения шрифтов приложения. В данном случае приложение содержит подкаталог с именем resources.

foreach (FontFamily fontFamily in Fonts.GetFontFamilies(new Uri("pack://application:,,,/"), "./resources/"))
{
    // Perform action.
}

В следующем примере показано, как использовать GetTypefaces метод, чтобы вернуть коллекцию Typeface объектов из расположения шрифтов приложения. В данном случае приложение содержит подкаталог с именем resources.

foreach (Typeface typeface in Fonts.GetTypefaces(new Uri("pack://application:,,,/"), "./resources/"))
{
    // Perform action.
}

Создание библиотеки ресурсов шрифтов

Вы можете создать библиотеку только для ресурсов, которая содержит только шрифты; в проекте библиотеки этого типа никакой код не включается. Создание библиотеки ресурсов является общим приемом для разделения ресурсов и использующего их кода приложения. Это также позволяет включать сборку библиотеки в несколько проектов приложений. В следующем примере файла проекта показаны основные части проекта библиотеки ресурсов.

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

Ссылка на шрифт в библиотеке ресурсов

Чтобы сослаться на шрифт в библиотеке ресурсов из приложения, необходимо добавить в ссылку на шрифт префикс с именем сборки библиотеки. В данном случае сборкой ресурсов шрифтов является FontLibrary. Для отделения имени сборки от ссылки в сборке используйте символ «;». Добавив ключевое слово Component и ссылку на имя шрифта, вы получите полную ссылку на ресурс библиотеки шрифтов. В следующем примере кода показано, как сослаться на шрифт в сборке библиотеки ресурсов.

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

Этот пакет SDK содержит набор образцов OpenType шрифты, которые можно использовать с WPF приложений. Эти шрифты определяются в библиотеке ресурсов. Дополнительные сведения см. в разделе Пакет образцов шрифтов OpenType.

Ограничения в использовании шрифтов

Ниже приведены некоторые ограничения по упаковке и использованию шрифтов в WPF приложений:

  • Биты разрешений на внедрение шрифтов: WPF приложения не проверяют и не применяют принудительно никакие биты разрешений на внедрение шрифтов. См. в разделе ntroduction_to_packing Fonts Дополнительные сведения.

  • Сайт исходных шрифтов: WPF приложения не разрешают ссылка на шрифт для http или ftp URI.

  • Абсолютный URI, с помощью пакета: нотации: WPF приложения не разрешают создавать FontFamily программным способом с помощью «pack:» как часть абсолютное URI ссылки на шрифт. Например "pack://application:,,,/resources/#Pericles Light" является недопустимой ссылкой на шрифт.

  • Автоматическое внедрение шрифтов. Во время разработки не поддерживается поиск шрифтов, используемых приложением, и автоматическое внедрение шрифтов в ресурсы приложения.

  • Подмножества шрифтов: WPF приложения не поддерживают создание подмножеств шрифтов для нефиксированных документов.

  • Если обнаруживается неправильная ссылка, приложение прибегает к использованию доступного шрифта.

См. также

  • Typography
  • FontFamily
  • Microsoft Typography: Ссылки, новости и контакты
  • Спецификация OpenType
  • Возможности шрифта OpenType
  • Образец пакета шрифтов OpenType
Back to top Неофициальная документация по .NET на русском языке. Лицензия: CC-BY 4.0. Основано на документации по .NET с Microsoft Docs
Generated by DocFX