<dependency> <groupId>org.apache.pdfbox</groupId> <artifactId>pdfbox</artifactId> <version>1.8.6</version> </dependency>
先转换成多张图片,然后合并成一张。
package org.apache.pdf; import java.awt.image.BufferedImage; import java.io.File; import java.io.FileOutputStream; import java.io.IOException; import java.util.Iterator; import java.util.List; import javax.imageio.IIOImage; import javax.imageio.ImageIO; import javax.imageio.ImageWriter; import javax.imageio.stream.ImageOutputStream; import org.apache.pdfbox.pdmodel.PDDocument; import org.apache.pdfbox.pdmodel.PDPage; public class PDF2Image { public static void main(String[] args) { File pdf = new File("20140809200001.pdf"); String imgType = "jpg"; int pageCount = covertPdf2Image(pdf, imgType); mergeImg(pdf.getName(),imgType,pageCount); } @SuppressWarnings({ "rawtypes", "unchecked" }) public static int covertPdf2Image(File pdf, String imgType) { try { PDDocument doc = PDDocument.load(pdf); int pageCount = doc.getNumberOfPages(); System.out.println(pageCount); List<PDPage> pages = doc.getDocumentCatalog().getAllPages(); String imgPrefix = pdf.getName().split("\\.")[0]; for (int index = 0; index < pages.size(); index++) { BufferedImage image = pages.get(index).convertToImage(); Iterator iter = ImageIO.getImageWritersBySuffix(imgType); ImageWriter writer = (ImageWriter) iter.next(); File outFile = new File(imgPrefix + "_" + (index+1) + "." + imgType); FileOutputStream out = new FileOutputStream(outFile); ImageOutputStream outImage = ImageIO .createImageOutputStream(out); writer.setOutput(outImage); writer.write(new IIOImage(image, null, null)); } return pages.size(); } catch (IOException e) { e.printStackTrace(); } return -1; } public static void mergeImg(String imgPrefix, String imgType, int pages) { try { File tmpImg = new File(imgPrefix.split("\\.")[0]+"_1."+imgType); BufferedImage bufTemp = ImageIO.read(tmpImg); BufferedImage imageResult = new BufferedImage(bufTemp.getWidth(), bufTemp.getHeight() * 8, BufferedImage.TYPE_INT_RGB); for (int i = 1; i <= pages; i++) { File img = new File(imgPrefix.split("\\.")[0]+"_"+i+"."+imgType); BufferedImage bufImg = ImageIO.read(img); int width = bufImg.getWidth(); int height = bufImg.getHeight(); int[] imageArray = new int[width * height]; imageArray = bufImg.getRGB(0, 0, width, height, imageArray, 0,width); imageResult.setRGB(0, (i - 1) * height, width, height, imageArray, 0, width); img.delete(); } File outFile = new File("out.jpg"); ImageIO.write(imageResult, "jpg", outFile); } catch (Exception e) { e.printStackTrace(); } } }