Java使用Spire.pdf提取PDF中想要的图片

废话不多说,上代码

					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之后,找出几种正确输出图片的方法,最后算是交差了。。。。。。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值