栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

java使用renderer将pdf按页转换为图片

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

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; 
  
 Image img = page.getImage(rect.width * n, rect.height * n, 
     rect,  
     null,  
     true,  
     true  
 ); 
 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); 
  
 FileOutputStream out = new FileOutputStream(picturepath+"/" + i 
     + ".png"); 
  
 JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(out); 
 JPEGEncodeParam param2 = encoder.getDefaultJPEGEncodeParam(tag); 
 param2.setQuality(1f, true); 
  
 encoder.setJPEGEncodeParam(param2); 
 encoder.encode(tag); 
  
 out.close(); 
      } 
      channel.close(); 
      raf.close(); 
        //pdf转化成图片后,释放MappedByteBuffer资源。调用unmap(buf);无效。
       
    } 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);

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持考高分网。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/139407.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号