.net - 如何在 .NET 中创建子集字体?

标签 .net fonts gdi+ system.drawing truetype

我有一个 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_SUBSETusSubsetFormat ,然后你会得到一个只有这些字符的有效 TTF。

Here's a thread似乎是一个工作示例的代码(不幸的是,在 C 中)。

关于.net - 如何在 .NET 中创建子集字体?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3249551/

相关文章:

html - 制作.png文件的.ttf文件

css - 字体未加载

c++ - Gdiplus DrawString 在远程桌面上绘制透明文本

c++ - GDI - 如何创建和填充位图?

c# - 循环优化或 lambda 闭合有问题?

.net - Visual Studio CPU 高使用率

c# - 为什么 DataAdapter 不是一次性的

具有泛型的 C# 语法

html - 如何在不更改字体大小的情况下更改字形高度?

c++ - HBITMAP 内存泄漏