Как создать шрифты подмножества в.NET?

У меня есть приложение Silverlight, в которое я должен встроить некоторые меньше общие шрифты. Достаточно просто для меня просто скопировать по TTF/OTF и компиляции это с моим приложением. Однако во многих случаях, только как 5-10 из символов на самом деле используются. В других случаях некоторые файлы шрифтов являются невероятно большими (Регулярный Arial Unicode MS составляет 22,1 МБ как пример). Быстро загрузите времена моего приложения, действительно важно, так оптимизирует, используемые шрифты являются главными.

Так, что я думал, то, что я видел в приложениях как Смешение Выражения где a используется для создания шрифта только для чтения, и можно также просто выбрать, встраивают только определенные символы. При других обстоятельствах я видел, что люди используют шрифты, которые только содержали определенные символы как подмножество полного шрифта (и не используют a в Silverlight, а скорее просто используют подмножество.TTF как .) Это отчасти, что я после, кроме я не использую Выражения.

Я не ищу подлые обходные решения, как экспорт в файл XPS и захват .odtff файла.

Существует ли программный путь (.NET/GDI +), чтобы создать подмножество шрифта только с определенными символами и скомпилировать ее в.TTF/.OTF? Кроме того, это должно было бы работать на.TTC файлы также.

8
задан Todd Main 26 July 2010 в 03:34
поделиться

3 ответа

Собственный API CreateFontPackage может быть тем, что вам нужно. Вы можете передать TTF и список символов для сохранения. Если вы передадите TTFCFP_SUBSET для usSubsetFormat , вы получите обратно рабочий TTF только с этими символами.

Вот ветка , которая выглядит как код рабочего примера (к сожалению, на C).

5
ответ дан 5 December 2019 в 11:22
поделиться

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

UPD

Попробуйте добавить следующий код в файл .csproj. Здесь мы включаем шрифт Tahoma. Свойство AutoFill, установленное в true, говорит о том, что мы будем встраивать в сборку только используемые символы наших элементов управления. Набор символов в теге fill указывает на включение этих символов в сборку. Все остальные теги установлены в false, потому что они нам не нужны.

<ItemGroup>
    <BlendEmbeddedFont Include="Fonts\tahoma.ttf">
      <IsSystemFont>True</IsSystemFont>
      <All>False</All>
      <AutoFill>True</AutoFill>
      <Characters>dasf</Characters>
      <Uppercase>False</Uppercase>
      <Lowercase>False</Lowercase>
      <Numbers>False</Numbers>
      <Punctuation>False</Punctuation>
    </BlendEmbeddedFont>
    <BlendEmbeddedFont Include="Fonts\tahomabd.ttf">
      <IsSystemFont>True</IsSystemFont>
      <All>False</All>
      <AutoFill>True</AutoFill>
      <Characters>dasf</Characters>
      <Uppercase>False</Uppercase>
      <Lowercase>False</Lowercase>
      <Numbers>False</Numbers>
      <Punctuation>False</Punctuation>
    </BlendEmbeddedFont>
  </ItemGroup>
  <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />

  <Import Project="$(MSBuildExtensionsPath)\Microsoft\Expression\Blend\3.0\WPF\Microsoft.Expression.Blend.WPF.targets" />
5
ответ дан 5 December 2019 в 11:22
поделиться

FontForge ( http://fontforge.sourceforge.net/ ) - это редактор шрифтов с открытым исходным кодом, который позволяет автоматизировать преобразование формата. Похоже, это только Python, но, возможно, стоит проверить.

0
ответ дан 5 December 2019 в 11:22
поделиться
Другие вопросы по тегам:

Похожие вопросы: