bl双性强迫侵犯h_国产在线观看人成激情视频_蜜芽188_被诱拐的少孩全彩啪啪漫画

java使用renderer將pdf按頁轉換為圖片

項目中遇到了需要把用戶上傳的word,execl,ppt每頁截圖保存。需要先用到jacob把資源轉換為pdf,在通過pdf-renderer把每頁截圖下來。

在大冶等地區,都構建了全面的區域性戰略布局,加強發展的系統性、市場前瞻性、產品創新能力,以專注、極致的服務理念,為客戶提供成都網站設計、成都網站制作、外貿網站建設 網站設計制作定制開發,公司網站建設,企業網站建設,品牌網站制作,網絡營銷推廣,外貿網站制作,大冶網站建設費用合理。

首先下載相關jar包:下載地址

import java.awt.Image; 
import java.awt.Rectangle; 
import java.awt.image.BufferedImage; 
import java.io.File; 
import java.io.FileNotFoundException; 
import java.io.FileOutputStream; 
import java.io.IOException; 
import java.io.RandomAccessFile; 
import java.lang.reflect.Method; 
import java.nio.MappedByteBuffer; 
import java.nio.channels.FileChannel; 
import java.security.AccessController; 
import java.security.PrivilegedAction; 
//如果com.sun.image找不到,就是Eclipse默認把這些受訪問限制的API設成了ERROR。只要把Windows-Preferences-Java-Complicer-Errors/Warnings里面的Deprecated and restricted API中的Forbidden references(access rules)選為Warning就可以編譯通過
import com.sun.image.codec.jpeg.JPEGCodec; 
import com.sun.image.codec.jpeg.JPEGEncodeParam; 
import com.sun.image.codec.jpeg.JPEGImageEncoder; 
import com.sun.pdfview.PDFFile; 
import com.sun.pdfview.PDFPage; 
public class pdfToImage {
  
 public static void main(String[] args) {
 String instructiopath="E:/臨時文件1.pdf";
 String picturepath = "E:/臨時文件1/";
 changePdfToImg(instructiopath,picturepath);
 }
 
 
  public static int changePdfToImg(String instructiopath,String picturepath) { 
    int countpage =0; 
    try { 
      //instructiopath ="D:/instructio/2015-05-16/Android 4編程入門經典.pdf" 
      //picturepath = "D:/instructio/picture/2015-05-16/"; 
       
      File file = new File(instructiopath); 
      RandomAccessFile raf = new RandomAccessFile(file, "r"); 
      FileChannel channel = raf.getChannel(); 
      MappedByteBuffer buf = channel.map(FileChannel.MapMode.READ_ONLY, 
          0, channel.size()); 
      PDFFile pdffile = new PDFFile(buf); 
      //創建圖片文件夾 
      File dirfile = new File(picturepath); 
        if(!dirfile.exists()){ 
           dirfile.mkdirs(); 
        } 
      //獲得圖片頁數 
      countpage = pdffile.getNumPages(); 
      for (int i = 1; i <= pdffile.getNumPages(); i++) { 
        PDFPage page = pdffile.getPage(i); 
        Rectangle rect = new Rectangle(0, 0, ((int) page.getBBox() 
            .getWidth()), ((int) page.getBBox().getHeight())); 
        int n = 2; 
        /** 圖片清晰度(n>0且n<7)【pdf放大參數】 */ 
        Image img = page.getImage(rect.width * n, rect.height * n, 
            rect, /** 放大pdf到n倍,創建圖片。 */ 
            null, /** null for the ImageObserver */ 
            true, /** fill background with white */ 
            true /** block until drawing is done */ 
        ); 
        BufferedImage tag = new BufferedImage(rect.width * n, 
            rect.height * n, BufferedImage.TYPE_INT_RGB); 
        tag.getGraphics().drawImage(img, 0, 0, rect.width * n, 
            rect.height * n, null); 
        /** 
         * File imgfile = new File("D:\\work\\mybook\\FilesNew\\img\\" + 
         * i + ".jpg"); if(imgfile.exists()){ 
         * if(imgfile.createNewFile()) { System.out.println("創建圖片:"+ 
         * "D:\\work\\mybook\\FilesNew\\img\\" + i + ".jpg"); } else { 
         * System.out.println("創建圖片失敗!"); } } 
         */ 
        FileOutputStream out = new FileOutputStream(picturepath+"/" + i 
            + ".png"); 
        /** 輸出到文件流 */ 
        JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(out); 
        JPEGEncodeParam param2 = encoder.getDefaultJPEGEncodeParam(tag); 
        param2.setQuality(1f, true); 
        /** 1f~0.01f是提高生成的圖片質量 */ 
        encoder.setJPEGEncodeParam(param2); 
        encoder.encode(tag); 
        /** JPEG編碼 */ 
        out.close(); 
      } 
      channel.close(); 
      raf.close(); 
      /*unmap(buf);*/  //pdf轉化成圖片后,釋放MappedByteBuffer資源。調用unmap(buf);無效。
      /** 如果要在轉圖片之后刪除pdf,就必須要這個關閉流和清空緩沖的方法 */ 
    } catch (FileNotFoundException e) { 
      e.printStackTrace(); 
    } catch (IOException e) { 
      e.printStackTrace(); 
    } 
    return countpage; 
     
  } 
 
  @SuppressWarnings("unchecked") 
  public static void unmap(final Object buffer) { 
    AccessController.doPrivileged(new PrivilegedAction() { 
      public Object run() { 
        try { 
          Method getCleanerMethod = buffer.getClass().getMethod( 
              "cleaner", new Class[0]); 
          getCleanerMethod.setAccessible(true); 
          sun.misc.Cleaner cleaner = (sun.misc.Cleaner) getCleanerMethod 
              .invoke(buffer, new Object[0]); 
          cleaner.clean(); 
        } catch (Exception e) { 
          e.printStackTrace(); 
        } 
        return null; 
      } 
    }); 
  } 
}

成功釋放MappedByteBuffer資源

Method m = FileChannelImpl.class.getDeclaredMethod("unmap",
    MappedByteBuffer.class);
   m.setAccessible(true);
   m.invoke(FileChannelImpl.class, buf);

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持創新互聯。

新聞標題:java使用renderer將pdf按頁轉換為圖片
網站網址:http://vcdvsql.cn/article46/gjcdhg.html

成都網站建設公司_創新互聯,為您提供全網營銷推廣小程序開發網頁設計公司自適應網站網站建設靜態網站

廣告

聲明:本網站發布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創新互聯

外貿網站制作