我有一个 Silverlight 应用程序,我需要在其中嵌入一些不太常见的字体。这对我来说很简单,只需复制 TTF/OTF 并用我的应用程序编译它。但是,在很多情况下,实际使用的字符只有 5-10 个。在其他情况下,某些字体文件非常大(例如,Arial Unicode MS Regular 为 22.1 MB)。我的应用程序的快速下载时间非常重要,因此优化使用的字体至关重要。
所以,我在想的是,我在 Expression Blend 之类的应用程序中看到过,其中 <Glyph/>
is used to create a read-only font您也可以选择仅嵌入某些字符。在其他情况下,我看到人们使用仅包含某些字符的字体作为完整字体的子集(而不是在 Silverlight 中使用 <Glyph/>
,而只是使用子集 .TTF 作为 <FontFamily/>
.) 这就是我所追求的,除了我不使用表达式。
我不是在寻找偷偷摸摸的解决方法,比如导出到 XPS 文件并获取 .odtff 文件。
是否有一种编程方式 (.NET/GDI+) 来创建仅包含某些字符的字体子集并将其编译为 .TTF/.OTF?此外,这也需要适用于 .TTC 文件。
最佳答案
原生 API CreateFontPackage可能就是你要找的。您可以传递 TTF 和要保留的字符列表。如果您通过 TTFCFP_SUBSET
为 usSubsetFormat
,然后你会得到一个只有这些字符的有效 TTF。
Here's a thread似乎是一个工作示例的代码(不幸的是,在 C 中)。
关于.net - 如何在 .NET 中创建子集字体?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3249551/