据我所知,也没有要求把任何信息到其有关的事实,3D元素可以包含在文档中的元数据。
不过,某些U3D编写软件可能会在XML元数据中添加一些提示。
您必须至少部分解析PDF页面树才能找出答案。
从技术上讲,3D元素被实现为注释。要发现任何注释,您必须遵循以下解析路径:
阅读预告片。它告诉您/Root文档间接对象的对象编号。
阅读交叉参考表。它告诉您文档中每个间接对象的字节偏移量。
转到/Root间接对象。阅读其/Pages密钥。这告诉您哪个间接对象代表文档页面树的根。
转到代表的间接对象/Pages。阅读其/Kids密钥。这告诉您哪些其他间接对象代表文档页面。
转到代表文档页面的每个间接对象。查找任何(可选)/Annots键。如果存在,它将指向表示(可能是各种)注释的其他间接对象。
现在,您已经了解了PDF是否包含注释。如果不是,请在此处停止。如果是,请继续确定注释类型:
转到最后一步中找到的所有间接对象。他们是/Type /Annot。看看它们是否还属于/Subtype /3D。如果是,您已经找到3D注释。(注意,这可能仍然不是U3D!)
在最后找到的间接对象(带有/Subtype /3D键的对象)中,寻找的附加键/3DD。它指向包含实际3D流的此间接对象。
转到包含3D流的间接对象。其对象字典应再次包含key:value对/Type /3D。看它的/Subtype钥匙。如果它说/U3D您找到了想要的东西...
您可能会很幸运,可以使用grep像这样的优质陈年来收获一些低挂的水果:
$> grep -a U3D cc-7-july09.pdf
/Subtype /U3D
/MS /U3D
/U3DPath [ <135BB3D42FBD85F7C2E178> <056D9A891FB5FDCE8E> ]
/MS /U3D
/U3DPath [ <5FFAF35CE3CBD34FAE5360> <4DDFD6048FC6DA05> ]
/MS /U3D
/U3DPath [ <2E4E4FD7FEC771038BC5EA> <2A6579CC91BE0B> ]
/MS /U3D
/U3DPath [ <6F303AF9850721D5D1FC6C> <7D1B08BEAE4A5A9BEDBB> ]
/MS /U3D
/U3DPath [ <F270A04603F0DE08B8AA29> <EE5180016FFBD542> ]
/MS /U3D
/U3DPath [ <A1D5848F6841ADA9A3583C> <A3F8A5D45849D392EF> ]
/MS /U3D
/U3DPath [ <34B8650D178BBDFF61DC03> <2D8F4C7D3CD980F976> ]
/MS /U3D
/U3DPath [ <843CD0339FD1852CCA235B> <9719FB65A990897F> ]
Run Code Online (Sandbox Code Playgroud)
但是,这不适用于所有3D PDF文档,尤其是当3D元素是对象流的一部分时。