博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
java用pdfbox切图并重绘宽高
阅读量:5966 次
发布时间:2019-06-19

本文共 2850 字,大约阅读时间需要 9 分钟。

  hot3.png

引入pdfbox使用的jar

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

org.apache.pdfbox
pdfbox
2.0.8

切图:按页切图并生成对应的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

你可能感兴趣的文章
FreeMarker基本操作(二)
查看>>
数据结构与算法之KMP算法中Next数组代码原理分析
查看>>
WP Condition:wordpress的性能监测
查看>>
Creating Options Pages
查看>>
Eclipse中jsp、js文件编辑时,卡死现象解决汇总
查看>>
对于DOM的attribute和property的一些思考
查看>>
解决mysql“Access denied for user 'root'@'localhost'”
查看>>
elasticsearch-analysis-ik-1.10.0中文分词插件安装
查看>>
JDBC--调用函数与存储过程
查看>>
【Android笔记】WebView的使用
查看>>
window下的Django环境搭建
查看>>
DelphiMVC连接池配置
查看>>
mysql简单的命令centos版
查看>>
maven spring 使用memcached方法
查看>>
线程安全总结
查看>>
【非常有用=小白也可以简单操作】越狱系统中可以让多个Kindle应用程序同时使用的办法--自己......
查看>>
Emacs-24.2 中很重要的几个函数--实现自定义语法高亮的关键
查看>>
JEECMS站群管理系统-- 标签的配置流程
查看>>
一致性哈希算法及其在分布式系统中的应用
查看>>
Kubernetes PV/PVC/StroageClass 持久化存储简介
查看>>