java 如何确定PDImageXObject包含特定图像

s3fp2yjn  于 2023-02-07  发布在  Java
关注(0)|答案(1)|浏览(155)

我有五张照片

sun.png
moon.png
sea.png
earth.png
sky.png

**我通过pdf框将这些图像放入pdf,**我能够识别PDIMageXObject的示例

PDXObject pdxObject = getResources().getXObject(objectName);
if (pdxObject instanceof PDImageXObject) {
 //I want earth.png 
 PDImageXObject image = (PDImageXObject)xobject;
 BufferedImage bImage = image.getImage();
 String fileName='earth.png'; // How can I get same file name as it was at the time of placing on pdf
 ImageIO.write(bImage,"PNG",new File(fileName));
 System.out.println("earth saved.");

}

但我如何确定这个PDImageXObject是earth.png对象?以及
我怎样才能得到相同的文件名,因为它是在放置在pdf的时候

x6h2sr28

x6h2sr281#

如果不考虑图像的含义,就没有明确的方法来决定PDF中的图像数量。
这不是简单的计算可见内容,也不使用提取列表。这里有5张图片在页面上,但页面被认为只有一张图片,即使我可以拖动和缩放较小的副本。然而,没有一个名称说太阳月亮地球和海洋。他们做了太阳,月亮,earth & sea.png,但在PDF中它们被赋予不同的名称,所有5个都被放置在文件中作为/Im0,但分配了不同的对象编号和不同的ID实体描述,它们链接到多少个位置并不重要,也不是总的副本数,它们将简单地通过位置来了解,所以作者通常会将其简短地称为/Im 0/Im 1/Im 2等。因此,我有点惊讶地看到这里只有/Im 0。但我想这就是你在覆盖时如何算作“页面画布媒体”。
每个图像都有自己的“固定页面”,但我们不把图像算作页面,这里它们被称为“表单”。

<</BBox[0 0 430 430]/Type/XObject/Length 39/Resources<</XObject<</Im0 16 0 R>>>>/Subtype/Form>>
stream
q
430 0 0 430 0 0 cm
/Im0 Do
Q
q
Q
q
Q

endstream
endobj

13 0 obj
<</BBox[0 0 430 430]/Type/XObject/Length 39/Resources<</XObject<</Im0 17 0 R>>>>/Subtype/Form>>
stream
q
430 0 0 430 0 0 cm
/Im0 Do
Q
q
Q
q
Q

endstream
endobj

14 0 obj
<</BBox[0 0 430 430]/Type/XObject/Length 39/Resources<</XObject<</Im0 18 0 R>>>>/Subtype/Form>>
stream
q
430 0 0 430 0 0 cm
/Im0 Do

相关问题