CFF(紧凑字体格式)库与撤消子程序化?

Posted

技术标签:

【中文标题】CFF(紧凑字体格式)库与撤消子程序化?【英文标题】:CFF(Compact Font Format) Library with undoing subroutinization? 【发布时间】:2017-07-19 01:08:51 【问题描述】:

出于 PDF 字体嵌入的目的,我的任务是从 CFF OpenType 文件中删除未使用字形的字形轮廓数据以减小其大小。

问题在于,与 TTF 不同,CFF 将其字形轮廓数据“压缩”到子例程中,并在字形之间创建依赖关系,我不能只从 cmap 和轮廓数据中删除字形及其匹配的字符。

由于有几个开源 CFF 库(如 otfcc)可以子程序化 CFF 文件,我想知道是否有库可以执行相反的操作并撤消子程序化。

更新: 我正在使用的库是 otfcc 和 sfntly。 Sfntly 没有 CFF 解析器,所以我正在扩展一个,otfcc 确实有一个,但似乎没有子集选项,但源看起来更有希望。我还查看了 freetype,虽然它确实有 CFF 加载器,但似乎没有子集。

我目前已将 pdfbox 的 fontbox 从 Apache 移植到 sfntly 完成了一半。解析器工作,但子集仍然不完整。

【问题讨论】:

请删除c++标签。 这是一件奇怪的事情:你的工具链应该已经能够做到这一点,所以为了不遇到XY Problem:你能提供更多关于你如何使用哪些工具的细节吗? '已经用于从“源”到“最终pdf”?因为根据该链中使用的工具,几乎可以肯定已经有一个实用程序甚至只是运行时标志可以为您实现这一目标。 @Mike'Pomax'Kamermans 我们的应用程序还没有 CFF 支持,它只有一个 TTF 子集,似乎是在 fontbox Apache 作为参考的内部开发的。 ie) 根本不支持 CFF,它对 CFF OTF 唯一能做的就是将它嵌入到 pdf 中,而不是对其进行子集化。 听起来你在重新发明***,因为字体锻造、字体工具和 adobe FDK 等东西已经免费......只需将它们用于您的子集。哎呀,通过带有字符字符串展开的 TTX 运行字体,修剪不需要的字形,通过 TTX 运行它以将其打包,然后如果需要进一步优化,则使用 adobe 自己的子程序优化器。完成,不费吹灰之力。有些真的是 TTF,TTX -> 删除字形 -> TTX 就完成了,开发你的工具的人实际上是在浪费时间 =/ @Mike'Pomax'Kamermans 是的,但要求是我需要在我们的应用程序中包含该功能而不添加到分布式文件中,所以我需要将它移植到 C++ 并集成到项目。 FontTools 实际上支持 CFF 子集选项,因此您可以获得子集的 OTF 而无需将其转换为 TTX 格式,但无论如何我需要移植它。 【参考方案1】:

最后我最终使用了 AFDKO,我没有意识到它是开源的! 它拥有从子集 CFF 到使用它制作 otf 字体的所有内容。

【讨论】:

以上是关于CFF(紧凑字体格式)库与撤消子程序化?的主要内容,如果未能解决你的问题,请参考以下文章

以编程方式将CFF字体转换为OpenType字体

条码 128 大小限制。最紧凑的条码字体?

Microsoft Windows OpenType Compact字体格式远程代码执行漏洞(MS11-007)

在哪里可以找到 OTF 字体中的所有 CFF 字体变体集

如何以编程方式确定字体是不是为 CFF?

如何使用 CFF2 表在 OpenType 中定义没有任何变体的字体