废话不多说,上代码
for (String filePath : fileList) {
fileNum ++;
PdfDocument doc = new PdfDocument(); //创建PdfDocument实例
try {
doc.loadFromFile(filePath); //加载PDF文件
} catch (Exception e) {
System.out.println("异常文件:"+filePath+"--------->"+e.getMessage());
errFileNum++;
continue;
}
PdfPageBase page = doc.getPages().get(0); //获取PDF文件的第一页
String text = page.extractText(); //获取PDF中文字判断整页是否是图片
if(StringUtils.isEmpty(text)){ //整页是图片就不输出图片
System.out.println("文件:" + filePath + "--------->不输出图片");
errFileNum++;
continue;
}
String imageName = new File(filePath).getName(); //获取文件名
imageName = imageName.substring(0, imageName.lastIndexOf('.'));
StringBuilder imagePath = null;
if(imageName.contains("CN")){
imagePath = new StringBuilder(imageName);
}else{
imagePath = new StringBuilder( "CN" + imageName);
imagePath.insert(imagePath.length() - 1, '.');
}
BufferedImage[] images = page.extractImages(); //获取第一页中的图片
if(images != null){
int imageNum = images.length;
int imgH = images[0].getHeight();
int imgW = images[0].getWidth();
if(imageNum != 9){
System.out.println("当前路径--->"+filePath+"<---文件的图片数目:" + imageNum);
}
if(filePath.contains("FM")){ //针对发明pdf文件做出处理
if(imageNum == 5 || imageNum == 9){ //输出正确图片
if(imgH == 74 && imgW == 74 ){ //排除第一张是二维码的图片
printImage("E:/test/fm-correct/",imageName,images[1]);
continue;
}
printImage("E:/test/fm-correct/",imageName,images[0]);
continue;
}
if(imageNum == 10){ //对图片数目为10的,输出其第二张图
printImage("E:/test/fm-correct/",imageName,images[1]);
continue;
}
if(images[0].getWidth() == 2479 && images[0].getHeight() == 3508){
printImage("E:/test/fm-correct/",imageName,images[1]);
continue;
}
errFileNum++;
printImage("E:/test/fm-error/",imageName,images[0]); //输出其他情况的图片
}else{
if( imageNum == 10){
printImage("E:/test/syxx-correct/",imageName,images[1]);
continue;
}
if(imgH == 74 && imgW == 74 ){ //排除第一张是二维码的图片
printImage("E:/test/syxx-correct/",imageName,images[1]);
continue;
}
if(imgW == 2479 && imgH == 3508){
printImage("E:/test/syxx-correct/",imageName,images[1]);
continue;
}
printImage("E:/test/syxx-correct/",imageName,images[0]);
}
}
}
public static void printImage(String savePath, String imageName, BufferedImage image){
File output = new File(savePath);
output.mkdirs();
output = new File(savePath+imageName+".png");
try {
ImageIO.write(image, "png", output);
} catch (IOException e) {
System.out.println(e.getMessage());
}
}
当然了,从PDF中提取图片还有其他很多种方法,这里只针对spire.pdf 来说,其实我想从PDF中获取想要的图片,尝试了nn种方法,也没得实现,最后无奈之好找规律,最后发现想要的图片不是第一张图就是第二张图,试验了几万份PDF之后,找出几种正确输出图片的方法,最后算是交差了。。。。。。