JAVA中實現pdf轉圖片可以通過第三方提供的架包,這里介紹幾種常用的,可以根據自身需求選擇使用。
一、icepdf。有收費版和開源版,幾種方法里最推薦的。轉換的效果比較好,能識別我手頭文件中的中文,就是轉換后可能字體的關系部分字間距有點寬。因為,字體支持是要收費的,所以轉換的圖片會帶有官方的水印。去水印的方法可以查看另一篇文章:icepdf去水印方法
1、下載icepdf的架包,并導入項目中,這里用到4個,如下:
2、附上代碼例子:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
|
String filePath = "c:/test.pdf" ; Document document = new Document(); document.setFile(filePath); float scale = 2 .5f; //縮放比例 float rotation = 0f; //旋轉角度 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( "c:/iecPDF_" + i + ".png" ); ImageIO.write(rendImage, "png" , file); 14 } catch (IOException e) { e.printStackTrace(); } image.flush(); } document.dispose(); |
例子中是pdf轉png格式的,也可以將12、13行改成jpg,轉出jpg格式的,但是從轉換效果來看png的清晰度會相對較高。有個小技巧是12行改成jpg,但13行使用png,也就是轉換成jpg格式但有png清晰度的圖片。
二、pdfbox。轉換效果還可以,能識別我手中文件大部分內容,有部分內容無法識別。
1、下載pdfbox的架包,并導入項目,這里用到2個,如下:
2、附上代碼例子:
1
2
3
4
5
6
7
8
9
10
11
12
13
|
File file = new File( "c:\\test.pdf" ); try { PDDocument doc = PDDocument.load(file); PDFRenderer renderer = new PDFRenderer(doc); 5 int pageCount = doc.getNumberOfPages(); for ( int i= 0 ;i<pageCount;i++){ BufferedImage image = renderer.renderImageWithDPI(i, 296 ); // BufferedImage image = renderer.renderImage(i, 2.5f); ImageIO.write(image, "PNG" , new File( "C:\\pdfbox_image.png" )); } } catch (IOException e) { e.printStackTrace(); } |
例子中rederImageWithDPI的第二個參數為dpi分辨率單位,可根據需求調節大小,代碼第八行提供了架包里另一種轉圖片的方法,第二個參數為縮放比。
三、jpedal。效果不太理想,貌似對中文支持不太好,下面的lgpl版本是開源版。
1、下載jpedal的架包,并導入項目中,如下:
2、附上代碼例子:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
|
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(); } |
例子的3-7行還提供了幾種不同的pdf打開方式,可以根據自己的需要選擇使用。
以上這篇java中pdf轉圖片的實現方法就是小編分享給大家的全部內容了,希望能給大家一個參考,也希望大家多多支持服務器之家。