我的MFC应用程序创建了一个PDF,现在我正在尝试嵌入字体,创建的PDF在Foxit、Chrome和Windows 8 PDF Reader中打开,但在Acrobat中无法打开。
我尝试使用这个在线验证器验证pdf文件,它说:
对象标识6与对象引用标识5不匹配。 无法读取嵌入字体程序'Candara'。
我认为我嵌入字体的方式是正确的。
我尝试使用这个在线验证器验证pdf文件,它说:
对象标识6与对象引用标识5不匹配。 无法读取嵌入字体程序'Candara'。
我认为我嵌入字体的方式是正确的。
3 0 obj
<</Type /Font
/Subtype /TrueType
/BaseFont /Candara
/FirstChar 0
/LastChar 255
/Widths 4 0 R
/FontDescriptor 5 0 R
>>
endobj
5 0 obj
<<
/Type /FontDescriptor
/FontName /Candara
/Flags 32
/FontBBox [-700 -500 1800 1500]
/ItalicAngle 0
/Ascent 12
/Descent -4
/CapHeight 8
/StemV 109
/FontFile2 6 0 R
>>
endobj
6 0 obj
<<
/Length 100376
/Length1 100376
>>
stream
... font bytes ...
endstream
endobj
我认为我的问题出在获取字体数据时
LONG ret = ::TTEmbedFont(pDC->GetSafeHdc(),
TTEMBED_TTCOMPRESSED,
CHARSET_UNICODE,
&ulPrivStatus,
&ulStatus,
WriteEmbedProc,
lpvVecBytes,
nullptr,
0,
0,
nullptr);
我还尝试使用TTEMBED_RAW和TTEMBED_EMBEDEUDC
抱歉解释有点长,也许有些含糊不清,但我有点迷茫,
所以这是获取嵌入字体数据的正确方法吗?如果是,应该对字体文件对象应用过滤器吗?
编辑:我更改了应用程序,使用GetFontData返回字体文件的字节,并根据我的研究,这样使用是可以的。但我仍然无法在Acrobat中打开,而在线验证站点仍然给出相同的错误消息。
链接 提供了一个带有我的问题的示例PDF。
感谢任何帮助!
ET0�4Oendstream endobj
结尾。 - dwarring