【发布时间】:2018-12-11 02:39:32
【问题描述】:
我正在添加在我的应用程序生成的 PDF 中嵌入 Truetype 字体的可能性,但字体 “Sitka Text”(以及它的变体“Sitka Banner”、“Sitka small”等) ) 和 "Meiryo" 不嵌入。
我相信这是因为我使用了来自 LOGFONT 对象的名称,而对于这些字体,我应该使用 PostScript 名称。
如何获取 Postscript 名称?
我使用GetFontData 获得了'name' table,但结果没有返回任何我可以使用的名称。
WINAPI 上有什么方法可以给我这个名字吗?
编辑:我只向我的用户显示我使用方法获得的嵌入权限“可编辑”和“可安装”的字体EnumFontFamiliesEx 是 CALLBACK 函数。
我还检查了NEWTEXTMETRICntmFlags,它显示我所有的字体都是 NTM_TT_OPENTYPE。
Edit2:不嵌入是指 PDF 阅读器不会将我的字体显示为嵌入的(并且 Acrobat 不会显示任何文本)
错误的example。
已解决
首先,我要感谢 Michael Mckeough 和 mkl,你们太棒了,帮了我很多,我检查了我的原始字体,它没有损坏,也没有更改字体字节,但后来我终于注意到如果您将 GetFontData 调用到 (.ttc) 文件,它将裁剪 ttcf 部分,并且没有 PDF 阅读器能够理解它是什么字体。
【问题讨论】:
-
“字体......不要嵌入。” - 这是什么意思?应用程序是否拒绝字体?在这种情况下,您应该找出原因,毕竟这是您的应用程序。查看者是否拒绝您的应用程序创建的 PDF?在这种情况下,您应该分享一个其他人可以重现该问题的 PDF 示例。
-
示例 PDF 中嵌入的字体出现损坏。 Font Forge 和 Font Validator 都被它扼住了。你确定你的原始字体没有损坏吗?还是您的嵌入代码以某种方式操纵字体?
标签: pdf winapi fonts pdf-generation