JAVA的pdf转图片方法

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
  1. import java.awt.image.BufferedImage;  
  2. import java.awt.image.RenderedImage;  
  3. import java.io.File;  
  4. import java.io.IOException;  
  5.   
  6. import javax.imageio.ImageIO;  
  7.   
  8. import org.icepdf.core.exceptions.PDFException;  
  9. import org.icepdf.core.exceptions.PDFSecurityException;  
  10. import org.icepdf.core.pobjects.Document;  
  11. import org.icepdf.core.util.GraphicsRenderingHints;  
  12.   
  13. /** 
  14.  * pdf文件转图片(icepdf技术) 
  15.  * @author songjinzhou 
  16.  * @day 2016-11-03 
  17.  */  
  18. public class PDF2IMGTest {  
  19.     public static void main(String[] args) {  
  20.         String filePath = "D:/fileUpload/ftpDownload/xxx.pdf";  
  21.         Document document = new Document();  
  22.   
  23.         try {  
  24.             document.setFile(filePath);  
  25.             float scale = 1.1f;// 缩放比例(大图)  
  26.             // float scale = 0.2f;// 缩放比例(小图)  
  27.             float rotation = 90f;// 旋转角度  
  28.             for (int i = 0; i < document.getNumberOfPages(); i++) {  
  29.                 BufferedImage image = (BufferedImage) document.getPageImage(i,  
  30.                         GraphicsRenderingHints.SCREEN,  
  31.                         org.icepdf.core.pobjects.Page.BOUNDARY_CROPBOX,  
  32.                         rotation, scale);  
  33.                 RenderedImage rendImage = image;  
  34.                 try {  
  35.                     File file = new File("D:/fileUpload/ftpDownload/icepdf_a" + i + ".jpg");  
  36.                     // 这里png作用是:格式是jpg但有png清晰度  
  37.                     ImageIO.write(rendImage, "png", file);  
  38.                 } catch (IOException e) {  
  39.                     e.printStackTrace();  
  40.                 }  
  41.                 image.flush();  
  42.             }  
  43.             document.dispose();  
  44.         } catch (PDFException e1) {  
  45.             e1.printStackTrace();  
  46.         } catch (PDFSecurityException e1) {  
  47.             e1.printStackTrace();  
  48.         } catch (IOException e1) {  
  49.             e1.printStackTrace();  
  50.         }  
  51.         System.out.println("======================完成============================");  
  52.     }  
  53. }  

  从转换效果来看png的清晰度会比jpg相对较高。有个小技巧请看如下两行代码,也就是转换成jpg格式但有png清晰度的图片。

[java]  view plain  copy
  1. File file = new File("D:/fileUpload/ftpDownload/icepdf_a" + i + ".jpg");  
  2. 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
  1. import java.awt.image.BufferedImage;  
  2. import java.io.File;  
  3. import java.io.IOException;  
  4.   
  5. import javax.imageio.ImageIO;  
  6.   
  7. import org.apache.pdfbox.pdmodel.PDDocument;  
  8. import org.apache.pdfbox.rendering.PDFRenderer;  
  9.   
  10. public class PDF2IMGTest {  
  11.   
  12.     public static void main(String[] args) {  
  13.         File file = new File("c:\\test.pdf");  
  14.         try {  
  15.             PDDocument doc = PDDocument.load(file);  
  16.             PDFRenderer renderer = new PDFRenderer(doc);  
  17.             int pageCount = doc.getNumberOfPages();  
  18.             for (int i = 0; i < pageCount; i++) {  
  19.                 // 方式1,第二个参数是设置缩放比(即像素)  
  20.                 BufferedImage image = renderer.renderImageWithDPI(i, 296);  
  21.                 // 方式2,第二个参数是设置缩放比(即像素)  
  22.                 // BufferedImage image = renderer.renderImage(i, 2.5f);  
  23.                 ImageIO.write(image, "PNG"new File("C:\\pdfbox_image.png"));  
  24.             }  
  25.         } catch (IOException e) {  
  26.             e.printStackTrace();  
  27.         }  
  28.     }  
  29. }  
 

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

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

2、附上代码例子:

复制代码
 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   }
复制代码

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

转载地址:http://www.cnblogs.com/pcheng/p/5704470.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值