我尝试使用PDFBox检测this pdf中的图像。 pdf有两个空白图像,一个在左侧(在文本下面#34;把它放在框中#34;)另一个在右侧(在文本下面"在外面贴上这个框&# 34)。这是我用来检测图像的代码:
PDPage page = (PDPage) catalog.getAllPages().get(0);
PDStream contents = page.getContents();
PDFStreamParser parser = new PDFStreamParser(contents.getStream());
parser.parse();
List<Object> tokens = parser.getTokens();
PDResources resources = page.getResources();
Map<String, PDXObjectImage> images = resources.getImages();
if(null != images){
Iterator<String> it = images.keySet().iterator();
while(it.hasNext()){
String key = it.next();
System.out.println("Key >>>>>>>>>>>>>> "+key);
}
}
我能够检测到第二张图像。但是,未检测到第一张图像。问题是什么?我确定pdf是正确的。我创建了多次,但仍然面临着同样的问题。我使用Sketch创建了pdf。
感谢。
答案 0 :(得分:1)
我能够检测到第二张图像。但是,未检测到第一张图像。有什么问题?
实际上同一图像资源用于两个页面上的图像,只是拉伸到不同的尺寸。
如果您查看网页的内容流,最后会看到这一点:
q
720 0 0 970 832 126 cm
/Im1 Do
Q
q
512 0 0 128 144 968 cm
/Im1 Do
Q
前四行在位置832处绘制图像资源 Im1 ,126延伸至720 x 970,最后4行在位置绘制相同的图像资源 Im1 144,968拉伸到512 x 128。
仅仅查看页面资源以查找页面图像的方法是不合适的,因为
PDFBox示例PrintImageLocations
中提供了一个更好的解决方案(仅针对内联图像和可能图案化的图像失败),文件的输出为
*******************************************************************
Found image [Im1]
position = 832.0, 128.0
size = 360px, 462px
size = 720.0, 970.0
size = 10.0in, 13.472222in
size = 254.0mm, 342.19446mm
*******************************************************************
Found image [Im1]
position = 144.0, 128.0
size = 360px, 462px
size = 512.0, 128.0
size = 7.111111in, 1.7777778in
size = 180.62222mm, 45.155556mm
此示例使用PDFBox PDFStreamEngine
来解析处理的内容以绘制页面。