直接梭代码,关键位置有注释
@RequestMapping("/pdf")
public void pdf2Image(HttpServletResponse response) throws IOException {
PDDocument doc = PDDocument.load(new File("C:\\Users\\F\\Desktop\\foxmail.pdf"));
BufferedImage imageNew = null;
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 = height > bim.getHeight() ? height : bim.getHeight();//图片高度
}
int count = doc.getPages().getCount();
//多张图片垂直排列 , 所以长度要叠加
imageNew = new BufferedImage(width, height * count, BufferedImage.TYPE_INT_RGB);
pageCounter = 0;
for (PDPage page : doc.getPages()) {
BufferedImage bim = pdfRenderer.renderImageWithDPI(pageCounter++, 72, RGB);
int w = bim.getWidth();//图片宽度
int h = bim.getHeight();//图片高度
int[] imageArrayOne = new int[width * height];
imageArrayOne = bim.getRGB(0, 0, w, h, imageArrayOne, 0, w);
/*
* 第三,第四参数,不是终点位置,而是要填充内容的 宽 高
* */
imageNew.setRGB(0,
height * (pageCounter - 1),
w,
h,
imageArrayOne, 0, w);
// Graphics graphics = bim.getGraphics();
// graphics.drawImage();
}
ImageIOUtil.writeImage(imageNew, "jpg", response.getOutputStream(), 72);
//如果纯文字 可以使用这个方法 text/html 表格样式没有了
/*PDFText2HTML pdfText2HTML = new PDFText2HTML();
pdfText2HTML.writeText(doc,response.getWriter());*/
doc.close();
// JPEGCodec.createJPEGEncoder(response.getOutputStream()).encode();
}
用到了pdfbox开源框架,pom需要添加
<dependency>
<groupId>org.apache.pdfbox</groupId>
<artifactId>pdfbox</artifactId>
<version>2.0.11</version>
</dependency>
<dependency>
<groupId>org.apache.pdfbox</groupId>
<artifactId>pdfbox-tools</artifactId>
<version>2.0.11</version>
</dependency>
另一种合成图片的方法: