直接上代码,关键位置有注释,有错误,不懂的地方请留言。
@RequestMapping("/pdf")
public void pdf2Image(HttpServletResponse response) throws IOException {
PDDocument doc = PDDocument.load(new File("C:\\Users\\F\\Desktop\\foxmail.pdf"));
PDFRenderer pdfRenderer = new PDFRenderer(doc);
int pageCounter = 0;
int width = 0;
int height = 0;
for (PDPage page : doc.getPages()) {
//dpi为缩放参数,越小图片越模糊
BufferedImage bim = pdfRenderer.renderImageWithDPI(pageCounter++, 72, RGB);
width = width > bim.getWidth() ? width : bim.getWidth();//图片宽度
height += bim.getHeight();//图片高度 多张图片垂直排列 , 所以长度要叠加
}
BufferedImage imageNew = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);
Graphics graphics = imageNew.getGraphics();
//记录当前绘制页面高度
int totalHeight = 0;
pageCounter = 0;
for (PDPage page : doc.getPages()) {
BufferedImage bim = pdfRenderer.renderImageWithDPI(pageCounter++, 72, RGB);
//
graphics.drawImage(bim, 0, totalHeight, bim.getWidth(), bim.getHeight(), null);
totalHeight += bim.getHeight();
}
// 两种把图片解析成流都可以 ,第二种 需要额外导包,PDFbox的tool包
JPEGCodec.createJPEGEncoder(response.getOutputStream()).encode(imageNew);
// ImageIOUtil.writeImage(imageNew, "jpg", response.getOutputStream(), 72);
doc.close();
}
另外一种合成图片的方法: 点击打开链接