Java实现pdf转化为png图片

https://java.net/projects/pdf-renderer下载最新的PDFRenderer-0.9.1.jar

Java实现代码为:

package com.hq.png;
 
import java.awt.Color;
import java.awt.Graphics2D;
import java.awt.Rectangle;
import java.awt.RenderingHints;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.RandomAccessFile;
import java.nio.ByteBuffer;
import java.nio.channels.FileChannel;
 
import javax.imageio.ImageIO;
 
import com.sun.pdfview.PDFFile;
import com.sun.pdfview.PDFPage;
import com.sun.pdfview.PDFRenderer;
 
public class TestViewPdf {
	public static void main(String[] args) {
 
 
		new TestViewPdf().Pdf_Png(1);  
    }  
 
    public void Pdf_Png(int pageNumber) {  
        int pagen = pageNumber;  
        //File file = new File("/home/develop/xq/P9.pdf");  
        File file = new File("d:/GT_24.pdf");  
        PDFFile pdffile = null;  
        // set up the PDF reading  
        try {  
            RandomAccessFile raf = new RandomAccessFile(file, "r");  
            FileChannel channel = raf.getChannel();  
            ByteBuffer buf = channel.map(FileChannel.MapMode.READ_ONLY, 0,  
                    channel.size());  
            pdffile = new PDFFile(buf);  
        } catch (Exception e) {  
            e.printStackTrace();  
        }  
 
        if (pagen < pdffile.getNumPages()) {  
            return;  
        }  
 
        // print 出该 pdf 文档的页数  
        System.out.println(pdffile.getNumPages());  
 
        // 设置将第 pagen 页生成 png 图片  
        PDFPage page = pdffile.getPage(pagen);  
 
        // create and configure a graphics object  
        int width = (int) page.getBBox().getWidth();  
        int height = (int) page.getBBox().getHeight();  
        BufferedImage img = new BufferedImage(width, height, BufferedImage.TYPE_INT_ARGB);  
        Graphics2D g2 = img.createGraphics();  
        //g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);  
 
        // do the actual drawing  
        PDFRenderer renderer = new PDFRenderer(page, g2, new Rectangle(0, 0, width, height), null, Color.WHITE);  
        try {  
            page.waitForFinish();  
        } catch (Exception e) {  
            e.printStackTrace();  
        }  
        renderer.run();  
        g2.dispose();  
 
        try {  
            //ImageIO.write(img, "png", new File("/home/develop/xq/123.png"));  
        	ImageIO.write(img, "png", new File("d:/123.png"));  
        } catch (Exception e) {  
            e.printStackTrace();  
        }  
    }  
}
该程序在windows下运行正常,在linux下报空指针。

java.lang.NullPointerException
        at com.sun.pdfview.font.TTFFont.getOutline(TTFFont.java:198)
        at com.sun.pdfview.font.CIDFontType2.getOutline(CIDFontType2.java:270)
        at com.sun.pdfview.font.OutlineFont.getGlyph(OutlineFont.java:130)
        at com.sun.pdfview.font.PDFFont.getCachedGlyph(PDFFont.java:437)
        at com.sun.pdfview.font.PDFFontEncoding.getGlyphFromCMap(PDFFontEncoding.java:155)
        at com.sun.pdfview.font.PDFFontEncoding.getGlyphs(PDFFontEncoding.java:115)
        at com.sun.pdfview.font.PDFFont.getGlyphs(PDFFont.java:403)
        at com.sun.pdfview.PDFTextFormat.doText(PDFTextFormat.java:269)
        at com.sun.pdfview.PDFTextFormat.doText(PDFTextFormat.java:301)
        at com.sun.pdfview.PDFParser.iterate(PDFParser.java:761)
        at com.sun.pdfview.BaseWatchable.run(BaseWatchable.java:101)
        at java.lang.Thread.run(Thread.java:662)

追踪源码,看会调用微软的一些绘图特性,具体不明白,放弃。

选用JPedal实现pdf转化为png图片。在http://sourceforge.net/projects/jpedal/下载jpedal_lgpl.jar

java实现代码:

package com.hq.png;
 
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
 
import javax.imageio.ImageIO;
 
import org.jpedal.PdfDecoder;
import org.jpedal.exception.PdfException;
import org.jpedal.fonts.FontMappings;
 
public class JPedal {
 
	public static void main(String[] args) throws IOException, PdfException,
			InterruptedException {
		/**instance of PdfDecoder to convert PDF into image*/
		PdfDecoder decode_pdf = new PdfDecoder(true);
 
		/**set mappings for non-embedded fonts to use*/
		FontMappings.setFontReplacements();
 
		/**open the PDF file - can also be a URL or a byte array*/
		try {
		decode_pdf.openPdfFile("/home/user/develop/xq/P9.pdf"); //file
		//decode_pdf.openPdfFile("C:/myPDF.pdf", "password"); //encrypted file
		//decode_pdf.openPdfArray(bytes); //bytes is byte[] array with PDF
		//decode_pdf.openPdfFileFromURL("http://www.mysite.com/myPDF.pdf",false);
 
		/**get page 1 as an image*/
		//page range if you want to extract all pages with a loop
		int start = 1, end = decode_pdf.getPageCount();
		for(int i=start;i<end+1;i++){
		BufferedImage img=decode_pdf.getPageAsImage(i);
		ImageIO.write(img, "png", new File("/home/user/develop/xq/123.png"));  
		}
		/**close the pdf file*/
		decode_pdf.closePdfFile();
 
		} catch (PdfException e) {
		e.printStackTrace();
		}
	}
 
 
}



  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值