JAVA的pdf轉圖片方法__java

來源:互聯網
上載者:User

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、附上代碼例子:

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清晰度的圖片。

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、附上代碼例子:

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的架包,並匯入項目中,如下:

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

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.