JAVA中pdf轉圖片的方法


  JAVA中實現pdf轉圖片可以通過第三方提供的架包,這里介紹幾種常用的,可以根據自身需求選擇使用。

一、icepdf。有收費版和開源版,幾種方法里最推薦的。轉換的效果比較好,能識別我手頭文件中的中文,就是轉換后可能字體的關系部分字間距有點寬。因為,字體支持是要收費的,所以轉換的圖片會帶有官方的水印。去水印的方法可以查看另一篇文章:icepdf去水印方法

1、下載icepdf的架包,並導入項目中,這里用到4個,如下:

2、附上代碼例子:

 1   String filePath = "c:/test.pdf";
 2   Document document = new Document();
 3   document.setFile(filePath);
 4   float scale = 2.5f;//縮放比例
 5   float rotation = 0f;//旋轉角度
 6         
 7   for (int i = 0; i < document.getNumberOfPages(); i++) {
 8     BufferedImage image = (BufferedImage)
 9     document.getPageImage(i, GraphicsRenderingHints.SCREEN, org.icepdf.core.pobjects.Page.BOUNDARY_CROPBOX, rotation, scale);
10     RenderedImage rendImage = image;
11     try {
12         File file = new File("c:/iecPDF_" + i + ".png");
13         ImageIO.write(rendImage, "png", file); 
14     } catch (IOException e) {
15         e.printStackTrace();
16     }
17       image.flush();
18   }
19   document.dispose();

  例子中是pdf轉png格式的,也可以將12、13行改成jpg,轉出jpg格式的,但是從轉換效果來看png的清晰度會相對較高。有個小技巧是12行改成jpg,但13行使用png,也就是轉換成jpg格式但有png清晰度的圖片。

 

二、pdfbox。轉換效果還可以,能識別我手中文件大部分內容,有部分內容無法識別。

1、下載pdfbox的架包,並導入項目,這里用到2個,如下:

2、附上代碼例子:

 1   File file = new File("c:\\test.pdf");
 2   try {
 3     PDDocument doc = PDDocument.load(file);
 4     PDFRenderer renderer = new PDFRenderer(doc);
 5     int pageCount = doc.getNumberOfPages();
 6     for(int i=0;i<pageCount;i++){
 7       BufferedImage image = renderer.renderImageWithDPI(i, 296);
 8 //          BufferedImage image = renderer.renderImage(i, 2.5f);
 9       ImageIO.write(image, "PNG", new File("C:\\pdfbox_image.png"));
10     }
11   } catch (IOException e) {
12     e.printStackTrace();
13   }

  例子中rederImageWithDPI的第二個參數為dpi分辨率單位,可根據需求調節大小,代碼第八行提供了架包里另一種轉圖片的方法,第二個參數為縮放比。

 

三、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打開方式,可以根據自己的需要選擇使用。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM