pdf转成图片

http://blog.csdn.net/wydhao123/article/details/51596028

jar commons-logging.jar、 pdfbox-2.0.1.jar、fontbox-2.0.1.jar

import java.awt.image.BufferedImage;  
import java.io.ByteArrayOutputStream;  
import java.io.File;  
import java.io.FileOutputStream;  
import java.util.ArrayList;  
import java.util.List;  
  
  
import javax.imageio.ImageIO;  
  
  
import org.apache.pdfbox.pdmodel.PDDocument;  
import org.apache.pdfbox.rendering.ImageType;  
import org.apache.pdfbox.rendering.PDFRenderer;  
  
  
public class PDFBOXCreate {  
  
  
    public static void main(String[] args)throws Exception {  
        long start = System.currentTimeMillis();  
        String filepath = "D:/Users/ex-wangyide001/workspace/testsrc/1.pdf";  
        PDDocument document = new PDDocument();  
        File pdfFile = new File(filepath);  
        document = PDDocument.load(pdfFile, (String)null);  
        int size = document.getNumberOfPages();  
        List<BufferedImage> piclist = new ArrayList();   
        for(int i=0 ; i < size; i++){  
            BufferedImage  image = new PDFRenderer(document).renderImageWithDPI(i,130,ImageType.RGB);  
            piclist.add(image);  
        }  
        document.close();  
        yPic(piclist,"D:/Users/ex-wangyide001/workspace/testsrc/PDFBox1.jpg");  
       /* FileOutputStream out = new FileOutputStream("D:/Users/ex-wangyide001/workspace/testsrc/yanglaoxian/PDFBox-"+i+".jpg"); 
        ImageIO.write(image, "jpg", out); 
        out.close();*/  
        long end = System.currentTimeMillis();  
        System.out.println(end-start);  
    }  
      
      
    /** 
     * 将宽度相同的图片,竖向追加在一起 ##注意:宽度必须相同 
     *  
     * @param piclist 
     *            文件流数组 
     * @param outPath 
     *            输出路径 
     */  
    public static void yPic(List<BufferedImage> piclist, String outPath) {// 纵向处理图片  
        if (piclist == null || piclist.size() <= 0) {  
            System.out.println("图片数组为空!");  
            return;  
        }  
        try {  
            int height = 0, // 总高度  
            width = 0, // 总宽度  
            _height = 0, // 临时的高度 , 或保存偏移高度  
            __height = 0, // 临时的高度,主要保存每个高度  
            picNum = piclist.size();// 图片的数量  
            File fileImg = null; // 保存读取出的图片  
            int[] heightArray = new int[picNum]; // 保存每个文件的高度  
            BufferedImage buffer = null; // 保存图片流  
            List<int[]> imgRGB = new ArrayList<int[]>(); // 保存所有的图片的RGB  
            int[] _imgRGB; // 保存一张图片中的RGB数据  
            for (int i = 0; i < picNum; i++) {  
                buffer = piclist.get(i);  
                heightArray[i] = _height = buffer.getHeight();// 图片高度  
                if (i == 0) {  
                    width = buffer.getWidth();// 图片宽度  
                }  
                height += _height; // 获取总高度  
                _imgRGB = new int[width * _height];// 从图片中读取RGB  
                _imgRGB = buffer  
                        .getRGB(0, 0, width, _height, _imgRGB, 0, width);  
                imgRGB.add(_imgRGB);  
            }  
            _height = 0; // 设置偏移高度为0  
            // 生成新图片  
            BufferedImage imageResult = new BufferedImage(width, height,  
                    BufferedImage.TYPE_INT_BGR);  
            for (int i = 0; i < picNum; i++) {  
                __height = heightArray[i];  
                if (i != 0)  
                    _height += __height; // 计算偏移高度  
                imageResult.setRGB(0, _height, width, __height, imgRGB.get(i),  
                        0, width); // 写入流中  
            }  
            File outFile = new File(outPath);  
            ByteArrayOutputStream out = new ByteArrayOutputStream();  
            ImageIO.write(imageResult, "jpg", out);// 写图片  
            byte[] b = out.toByteArray();  
            FileOutputStream output = new FileOutputStream(outFile);  
            output.write(b);  
            out.close();  
            output.close();  
        } catch (Exception e) {  
            e.printStackTrace();  
        }  
    }  
}

 

posted on 2016-10-11 13:40  weiguoyuan  阅读(349)  评论(0编辑  收藏  举报

导航