2017-12-13 17:39:58
JAVA中实现pdf转图片可以通过第三方提供的架包,这里介绍几种常用的,可以根据自身需求选择使用。
一、icepdf。有收费版和开源版,几种方法里最推荐的。转换的效果比较好,能识别我手头文件中的中文,就是转换后可能字体的关系部分字间距有点宽。因为,字体支持是要收费的,所以转换的图片会带有官方的水印。去水印的方法可以查看另一篇文章:icepdf去水印方法
1、下载icepdf的架包,并导入项目中,这里用到4个,如下:
icepdf-core.jar、icepdf-viewer.jar、icepdf-pro.jar(貌似是去水印)、icepdf-pro-intl.jar(貌似是去水印)
icepdf-core.jar、icepdf-viewer.jar下载地址:http://download.csdn.net/detail/romantic_pk/9672082
2、附上代码例子:
[java] view plain copy
- 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("======================完成============================");
- }
- }
从转换效果来看png的清晰度会比jpg相对较高。有个小技巧请看如下两行代码,也就是转换成jpg格式但有png清晰度的图片。
[java] view plain copy
- File file = new File("D:/fileUpload/ftpDownload/icepdf_a" + i + ".jpg");
- ImageIO.write(rendImage, "png", file);
二、pdfbox。转换效果还可以,能识别我手中文件大部分内容,有部分内容无法识别。
1、下载pdfbox的架包,并导入项目,这里用到1个jar包,如下:
pdfbox-app-2.0.2.jar jar包免费下载地址:http://download.csdn.net/detail/romantic_pk/9679121
2、附上代码例子:
[java] view plain copy
- 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的架包,并导入项目中,如下:
PdfDecoder decode_pdf = new PdfDecoder(true); try { decode_pdf.openPdfFile("c:\\test.pdf"); //file // decode_pdf.openPdfFile("C:/jpedalPDF.pdf", "password"); //encrypted file // decode_pdf.openPdfArray(bytes); //bytes is byte[] array with PDF // decode_pdf.openPdfFileFromURL("http://www.mysite.com/jpedalPDF.pdf",false); // decode_pdf.openPdfFileFromInputStream(in, false); int start = 1, end = decode_pdf.getPageCount(); for(int i = start; i < end+1; i++){ BufferedImage img=decode_pdf.getPageAsImage(i); try { ImageIO.write(img, "png", new File("C:\\jpedal_image.png")); } catch (IOException e) { e.printStackTrace(); } } decode_pdf.closePdfFile(); } catch (PdfException e) { e.printStackTrace(); }
更多精彩内容:各种AI课程、技能课程、黑科技软件、网站小程序源码、副业小项目、PPT模板等精品素材、电商课程、推广引流课程等,尽在 天边资源网 。