使用Java将PDF文件转成图片

使用Java将PDF文件转成图片

 

import java.awt.Image;
import java.awt.Rectangle;
import java.awt.image.BufferedImage;

import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.RandomAccessFile;
import java.nio.ByteBuffer;
import java.nio.channels.FileChannel;
import javax.swing.SwingUtilities;
import com.sun.image.codec.jpeg.JPEGCodec;
import com.sun.image.codec.jpeg.JPEGImageEncoder;
import com.sun.pdfview.PDFFile;
import com.sun.pdfview.PDFPage;

/**
 * Created by David on 2016/11/15.
 */
public class Pdf2Pic {

    public static void setup() throws IOException {
        // load a pdf from a byte buffer
        File file = new File("/Users/David/Downloads/testoss.pdf");
        RandomAccessFile raf = new RandomAccessFile(file, "r");
        FileChannel channel = raf.getChannel();
        ByteBuffer buf = channel.map(FileChannel.MapMode.READ_ONLY, 0, channel
                .size());
        PDFFile pdffile = new PDFFile(buf);

        System.out.println("页数: " + pdffile.getNumPages());

        String getPdfFilePath = System.getProperty("user.dir")+File.separator+"pdfPicFile";

        //目录不存在,则创建目录
        File p=new File(getPdfFilePath);
        if(!p.exists()){
            p.mkdir();
        }

        System.out.println("getPdfFilePath is  :"+getPdfFilePath);

        for (int i = 1; i <= pdffile.getNumPages(); i++) {
            // draw the first page to an image
            PDFPage page = pdffile.getPage(i);

            // get the width and height for the doc at the default zoom
            Rectangle rect = new Rectangle(0, 0, (int) page.getBBox()
                    .getWidth(), (int) page.getBBox().getHeight());

            // generate the image
            Image img = page.getImage(rect.width, rect.height, // width &
                    // height
                    rect, // clip rect
                    null, // null for the ImageObserver
                    true, // fill background with white
                    true // block until drawing is done
            );

            BufferedImage tag = new BufferedImage(rect.width, rect.height,
                    BufferedImage.TYPE_INT_RGB);
            tag.getGraphics().drawImage(img, 0, 0, rect.width, rect.height,
                    null);



            FileOutputStream out = new FileOutputStream( getPdfFilePath+File.separator + i + ".jpg"); // 输出到文件流
                    System.out.println("成功保存图片到 :  " +getPdfFilePath+File.separator + i + ".jpg");

            JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(out);
            encoder.encode(tag); // JPEG编码

            out.close();
        }

        // show the image in a frame
        // JFrame frame = new JFrame("PDF Test");
        // frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        // frame.add(new JLabel(new ImageIcon(img)));
        // frame.pack();
        // frame.setVisible(true);
    }

    public static void main(final String[] args) {
        SwingUtilities.invokeLater(new Runnable() {
            public void run() {
                try {
                    Pdf2Pic.setup();
                } catch (IOException ex) {
                    ex.printStackTrace();
                }
            }
        });
    }

}

 

 

pom.xml依赖配置(将附件中的该jar包上传到nexus内部仓库):

<dependency>
	<groupId>com.sun.pdfview</groupId>
	<artifactId>pdfrenderer</artifactId>
	<version>0.9.0</version>
</dependency>

 



    本文附件下载:
  • PDFRenderer-0.9.0.jar (2 MB)


已有 0 人发表留言,猛击->> 这里<<-参与讨论


ITeye推荐
  • —软件人才免语言低担保 赴美带薪读研!—



你可能感兴趣的:(java,文件,pdf)