Pen*_*hia 2 pdf winapi fonts pdf-generation
我增加了将Truetype字体嵌入由我的应用程序生成的PDF中的可能性,但是字体“ Sitka Text”(及其变体“ Sitka Banner”,“ Sitka small”等)和“ Meiryo”没有被嵌入。
我相信这是因为我使用的是LOGFONT对象中的名称,对于这些字体,我应该使用PostScript名称。
如何获得Postscript名称?
我使用GetFontData获得了“名称”表,但结果未返回我可以使用的任何名称。
WINAPI上有没有给我这个名字的方法?
编辑:我只向我的用户显示具有嵌入权限“ Editable”和“ Installable”的字体,这些字体是通过EnumFontFamiliesEx方法及其CALLBACK函数获得的。
我还检查了NEWTEXTMETRIC ntmFlags,它显示我所有的字体都是NTM_TT_OPENTYPE。
Edit2:“不嵌入”的意思是PDF阅读器不会将我的字体显示为嵌入式(而Acrobat不会显示任何文本)
错误的例子。
首先解决了,我要感谢Michael Mckeough和mkl,你们真棒,为我提供了很多帮助,我检查了我的原始字体,它没有损坏,并且我没有更改字体字节,但是后来我终于注意到了如果您将GetFontData调用到(.ttc)文件,它将裁剪ttcf部分,并且PDF阅读器将无法理解它是什么字体。
小智 5
理想情况下,您可以在字体的“名称”表中找到它。格式为对您的平台有用的nameId 0x0006。名称表的格式是TrueType和OpenType规范的一部分。(您可以在此处找到Microsoft Typography OpenType spec name的副本)。表中可能有很多条目,或者可能很少。特别是,Postscript名称可能以或不以任何给定字体出现。您将需要在表中查找nameID为0x0006以及可以使用的格式(语言,平台,编码)。对于脚本名称,对于任何平台,您很可能希望它们使用英语,ASCII编码。
但是,由于这个原因,字体不太可能没有嵌入!一个更常见的原因是嵌入此字体是不合法的。在Microsoft Typography OpenType Spec OS / 2中,您将看到一个名为fsType的字段。该字段包含一些标志,这些标志指示在什么情况下该字体被许可嵌入。没有信誉良好的工具将嵌入此字体或将其设置为子集,因为这些标志表明未授权将其嵌入。
我看到“ Sitka Text”是MS Windows 10字体,由Windows自由分发。它似乎不太可能不会获得嵌入许可。有趣的是,我通常用于快速“查看”字体的工具(字体验证程序,该字体以前可以从Microsoft Typography获得,但现在似乎不再可用)告诉我OS / 2记录无效。它指定类型为5,规格说明类型4为最新类型。对嵌入请求的正确响应将要求访问fsType字段,并且如果记录格式未知,则该记录格式应为“ fail safe”,并且拒绝嵌入字体。
因此,这是最有可能不会为您嵌入字体的原因。
| 归档时间: | 
 | 
| 查看次数: | 1664 次 | 
| 最近记录: |