java用pdfbox切图并重绘宽高

引入pdfbox使用的jar

pdfbox-2.0.8.jar,maven依赖如图:

<dependency>
    <groupId>org.apache.pdfbox</groupId>
    <artifactId>pdfbox</artifactId>
    <version>2.0.8</version>
</dependency

切图:按页切图并生成对应的png格式的图片,输出至相应的目录下

/**
    * pdf切割成图片
    * @param url1 //源文件路径
    * @param url2 //切割后图片存储路径
    * @param contractId	//合同模板id
    * @throws IOException 
*/
public static void cutting(String url1, String url2, String contractId) throws IOException{
		//将pdf按页生成图片
		File file = new File(url1);
		Rectangle tempReader = null;
		PdfReader pdfReader = null;
		PDDocument doc = null;
		try {
			String urls = url2+contractId+"/";
			File files = new File(urls);
			if(!files.exists()){
				files.mkdirs();
			}
			// 读入PDF
            pdfReader = new PdfReader(url1);
            // 计算PDF页码数
            int pageCount = pdfReader.getNumberOfPages();
            System.out.println(pageCount);
            doc = PDDocument.load(file);
            PDFRenderer renderer = new PDFRenderer(doc);
            // 循环每个页码
            for (int i = 1; i <= pdfReader.getNumberOfPages(); i++)
            {
            	tempReader = pdfReader.getPageSize(i);
            	int height = (int)tempReader.getHeight();
            	int width = (int)tempReader.getWidth();
            	System.out.println(height+"..."+width);
            	BufferedImage image = renderer.renderImageWithDPI(i-1, 96); // Windows native DPI
				BufferedImage tempImage = resize(image,width,height);
				ImageIO.write(tempImage, "PNG", new File(urls+contractId+"_"+i+".png"));
            }
		} catch (IOException e) {
			e.printStackTrace();
		}finally{
			if(null!=doc){
				doc.close();
			}
			if(null!=pdfReader){
				pdfReader.close();
			}
		}
	}

调用重绘图片方法resize(image,width,height)

//限制pdf转换成图片时的大小
private static BufferedImage resize(BufferedImage source, int targetW,  int targetH) {  
       int type=source.getType();  
       BufferedImage target=null;  
       double sx=(double)targetW/source.getWidth();  
       double sy=(double)targetH/source.getHeight();  
       if(sx>sy){  
           sx=sy;  
           targetW=(int)(sx*source.getWidth());  
       }else{  
           sy=sx;  
           targetH=(int)(sy*source.getHeight());  
       }  
       if(type==BufferedImage.TYPE_CUSTOM){  
           ColorModel cm=source.getColorModel();  
                WritableRaster raster=cm.createCompatibleWritableRaster(targetW, targetH);  
                boolean alphaPremultiplied=cm.isAlphaPremultiplied();  
                target=new BufferedImage(cm,raster,alphaPremultiplied,null);  
       }else{  
           target=new BufferedImage(targetW, targetH,type);  
       }  
       Graphics2D g=target.createGraphics();  
       g.setRenderingHint(RenderingHints.KEY_RENDERING, RenderingHints.VALUE_RENDER_QUALITY);  
       g.drawRenderedImage(source, AffineTransform.getScaleInstance(sx, sy));  
       g.dispose();  
       return target;  
}  

 

转载于:https://my.oschina.net/miwang/blog/1589269

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值