JAVA中实现pdf转图片可以通过第三方提供的架包,这里介绍几种常用的,可以根据自身需求选择使用。

icepdf去水印方法

1、下载icepdf的架包,并导入项目中,这里用到4个,如下:

icepdf-viewer.jar、icepdf-pro.jar(貌似是去水印)、icepdf-pro-intl.jar(貌似是去水印)

icepdf-core.jar、icepdf-viewer.jar下载地址


java pdf图片转文字 pdf转图片java最快_jar

2、附上代码例子:

import java.awt.image.BufferedImage;
import java.awt.image.RenderedImage;
import java.io.File;
import java.io.IOException;

import javax.imageio.ImageIO;

import org.icepdf.core.exceptions.PDFException;
import org.icepdf.core.exceptions.PDFSecurityException;
import org.icepdf.core.pobjects.Document;
import org.icepdf.core.util.GraphicsRenderingHints;

/**
 * pdf文件转图片(icepdf技术)
 * @author songjinzhou
 * @day 2016-11-03
 */
public class PDF2IMGTest {
	public static void main(String[] args) {
		String filePath = "D:/fileUpload/ftpDownload/xxx.pdf";
		Document document = new Document();

		try {
			document.setFile(filePath);
			float scale = 1.1f;// 缩放比例(大图)
			// float scale = 0.2f;// 缩放比例(小图)
			float rotation = 90f;// 旋转角度
			for (int i = 0; i < document.getNumberOfPages(); i++) {
				BufferedImage image = (BufferedImage) document.getPageImage(i,
						GraphicsRenderingHints.SCREEN,
						org.icepdf.core.pobjects.Page.BOUNDARY_CROPBOX,
						rotation, scale);
				RenderedImage rendImage = image;
				try {
					File file = new File("D:/fileUpload/ftpDownload/icepdf_a" + i + ".jpg");
					// 这里png作用是:格式是jpg但有png清晰度
					ImageIO.write(rendImage, "png", file);
				} catch (IOException e) {
					e.printStackTrace();
				}
				image.flush();
			}
			document.dispose();
		} catch (PDFException e1) {
			e1.printStackTrace();
		} catch (PDFSecurityException e1) {
			e1.printStackTrace();
		} catch (IOException e1) {
			e1.printStackTrace();
		}
		System.out.println("======================完成============================");
	}
}

也就是转换成jpg格式但有png清晰度的图片。


File file = new File("D:/fileUpload/ftpDownload/icepdf_a" + i + ".jpg");
ImageIO.write(rendImage, "png", file);

 

二、pdfbox。转换效果还可以,能识别我手中文件大部分内容,有部分内容无法识别。

1、下载pdfbox的架包,并导入项目,这里用到1个jar包,如下:


2、附上代码例子:

import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;

import javax.imageio.ImageIO;

import org.apache.pdfbox.pdmodel.PDDocument;
import org.apache.pdfbox.rendering.PDFRenderer;

public class PDF2IMGTest {

	public static void main(String[] args) {
		File file = new File("c:\\test.pdf");
		try {
			PDDocument doc = PDDocument.load(file);
			PDFRenderer renderer = new PDFRenderer(doc);
			int pageCount = doc.getNumberOfPages();
			for (int i = 0; i < pageCount; i++) {
				// 方式1,第二个参数是设置缩放比(即像素)
				BufferedImage image = renderer.renderImageWithDPI(i, 296);
				// 方式2,第二个参数是设置缩放比(即像素)
				// BufferedImage image = renderer.renderImage(i, 2.5f);
				ImageIO.write(image, "PNG", new File("C:\\pdfbox_image.png"));
			}
		} catch (IOException e) {
			e.printStackTrace();
		}
	}
}


 

三、jpedal。效果不太理想,貌似对中文支持不太好,下面的lgpl版本是开源版。

 1、下载jpedal的架包,并导入项目中,如下:


java pdf图片转文字 pdf转图片java最快_Image_02

2、附上代码例子:


java pdf图片转文字 pdf转图片java最快_jar_03



1   PdfDecoder decode_pdf = new PdfDecoder(true);
 2   try {
 3     decode_pdf.openPdfFile("c:\\test.pdf"); //file
 4 //   decode_pdf.openPdfFile("C:/jpedalPDF.pdf", "password"); //encrypted file
 5 //      decode_pdf.openPdfArray(bytes); //bytes is byte[] array with PDF
 6 //      decode_pdf.openPdfFileFromURL("http://www.mysite.com/jpedalPDF.pdf",false);
 7 //      decode_pdf.openPdfFileFromInputStream(in, false); 
 8 
 9     int start = 1, end = decode_pdf.getPageCount();
10     for(int i = start; i < end+1; i++){
11       BufferedImage img=decode_pdf.getPageAsImage(i);
12       try {
13         ImageIO.write(img, "png", new File("C:\\jpedal_image.png"));
14       } catch (IOException e) {
15         e.printStackTrace();
16       } 
17     }
18     decode_pdf.closePdfFile();
19   } catch (PdfException e) {
20     e.printStackTrace();
21   }



java pdf图片转文字 pdf转图片java最快_jar_03


  例子的3-7行还提供了几种不同的pdf打开方式,可以根据自己的需要选择使用。