只是为了进一步解释一下。 我有一个内部结构定义如下的 Pdf:(请参考图片)
Catalog
Page
Kids
0000
Resources
XObject
Form1 7 [2 0 R]
Resources
XObject
Image1 3 [4 0 R]
Image2 5 [6 0 R]
Image3 7 [2 0 R]
Form1(父)和 Image3(子)引用相同的间接引用 7 [2 0 R]
当我们从XObject读取pdf结构到Resource,然后通过间接引用Id在该Resources中定义XObject时。这会导致循环引用,从而导致无限循环。 它是有效的 PDF 吗?在 Adobe Acrobat Pro/Dc 或任何其他应用程序中打开 pdf 不是问题。
如何解决?
据我所知,这种构造并没有被明确禁止。因此,PDF 处理器有望防止无休止的递归。
例如:
尝试收集所有 XObject 时,会导致无限循环。怎么解决?
在收集 XObject 的用例中,您可以简单地检查是否已经收集了当前访问的 XObject。如果有,则不需要添加它,也不需要再次递归到其资源。
一般来说,人们可以选择跟踪访问的对象(例如通过收集它们或标记它们)或仅递归到固定的最大深度。后一个选项可能会错过某些细节,但更容易实现,不需要在某处保留可能大量的已访问对象;前者更准确,但也需要更多资源。
这不仅是允许的,而且是预期的,即
Root
指向 Kids
,并将 Root
引用为它们的 Parent
。