gpt4 book ai didi

c++ - 如何获取字体数据以嵌入到 PDF 中?

转载 作者:搜寻专家 更新时间:2023-10-31 02:06:01 24 4
gpt4 key购买 nike

我的 MFC 应用程序创建了一个 PDF,现在我尝试嵌入字体,创建的 PDF 可以在 Foxit、Chrome 和 Windows 8 PDF 阅读器中打开,但不能在 Acrobat 中打开。

我尝试使用 this online validator 验证 pdf 文件它说

The object's identity 6 doesn't match with the object's reference identity 5.

The embedded font program 'Candara' cannot be read.


我认为我嵌入它的方式是正确的

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_RAWTTEMBED_EMBEDEUDC



抱歉,解释冗长且可能含糊不清,但我有点迷路了,

那么这是获取要嵌入的字体数据的正确方法吗?如果是,我是否应该对字体文件对象应用过滤器?

编辑: 我更改了我的应用程序以使用 GetFontData它返回字体文件的字节,根据我的研究,可以这样使用,但我仍然无法在 Acrobat 中打开,在线验证站点仍然给我同样的错误消息。

link到我的问题的示例 PDF。

谢谢,我们将不胜感激!

最佳答案

字体嵌入本身看起来不错。在获取字体对象时实际上存在一个较低级别的错误。

尝试使用 Xpdf 查看 PDF 时会出现交叉引用表错误:xref num 5 not found but needed, try to reconstruct<0a> .

查看 PDF 末尾的交叉引用表:


xref
0 10
0000000000 65535 f
0000242485 00000 n
0000242426 00000 n
0000000016 00000 n
0000000155 00000 n
0000001081 00000 n % Wrong should be 0000241738
0000001081 00000 n<br/>
0000241929 00000 n
0000242056 00000 n
0000242353 00000 n

实际错误在交叉引用表的第 6 行,其中包含对象 6 0 R 的字节偏移量, 而不是 5 0 R .

来自在线验证器的消息The object's identity 6 doesn't match with the object's reference identity 5.是由在线验证器试图获取对象 5 0 R 引起的通过索引,但实际上得到对象 6 0 R .

此 PDF 的交叉引用表需要修复。

关于c++ - 如何获取字体数据以嵌入到 PDF 中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50955639/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com