服务器之家

服务器之家 > 正文

java如何将pdf转换成image

时间:2021-04-25 12:04     来源/作者:yiluoak_47

本文实例为大家分享了javapdf转换image的具体代码,供大家参考,具体内容如下

首先使用了使用了apache的pdfbox组件1.8.4版本

 

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
package pdf;
 
import java.awt.image.bufferedimage;
import java.io.file;
import java.io.ioexception;
import java.util.date;
import java.util.list;
 
import javax.imageio.imageio;
 
import org.apache.pdfbox.pdmodel.pddocument;
import org.apache.pdfbox.pdmodel.pdpage;
 
public class pdfbox {
   
  @suppresswarnings("rawtypes")
  public static void main(string[] args) throws ioexception {
    string p=system.getproperty("user.dir") + "/"+"zk.pdf";  
     
    pddocument doc = pddocument.load(p);
    int pagecount = doc.getnumberofpages();
    system.out.println(pagecount);
    date start = new date();
    try {
      list pages = doc.getdocumentcatalog().getallpages();
      for(int i=0;i<pages.size();i++){
        pdpage page = (pdpage) pages.get(i);
        @suppresswarnings("unused")
        int width = new float(page.gettrimbox().getwidth()).intvalue();
        @suppresswarnings("unused")
        int height = new float(page.gettrimbox().getheight()).intvalue();
        bufferedimage image = page.converttoimage();
        imageio.write(image, "jpg", new file("img" + file.separator + (i + 1) + ".jpg"));
        system.out.println("image in the page -->"+(i+1));
      }
    } catch (exception e) {
      e.printstacktrace();
    }finally{
      if(doc != null){
        doc.close();
      }
    }
    date end = new date();
    system.out.println(end.gettime()-start.gettime());
    system.out.println("over");
  }
   
}

但是其问题在于问题:

当pdf文档为180m大小时直接报解析异常

当pdf页数为500多页时处理非常慢 

其后尝试使用了pdf-renderer 1.0.5 版本

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
package pdf;
 
import java.awt.image;
import java.awt.rectangle;
import java.awt.image.bufferedimage;
import java.io.file;
import java.io.fileoutputstream;
import java.io.ioexception;
import java.io.randomaccessfile;
import java.nio.mappedbytebuffer;
import java.nio.channels.filechannel;
 
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 pdfrenderer {
   
  public static void main(string[] args) throws ioexception{
    string pdfrealepath=system.getproperty("user.dir") + "/"+"zk.pdf";
    file file = new file(pdfrealepath);
    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);
     
    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()));
      image img = page.getimage(rect.width, rect.height, rect, null,true,true);
      bufferedimage tag = new bufferedimage(rect.width, rect.height,
          bufferedimage.type_int_rgb);
      tag.getgraphics().drawimage(img, 0, 0, rect.width, rect.height,null);
       
      fileoutputstream out = new fileoutputstream("img" + file.separator + (i + 1) + ".jpg"); // 输出到文件流
      jpegimageencoder encoder = jpegcodec.createjpegencoder(out);
      jpegencodeparam param2 = encoder.getdefaultjpegencodeparam(tag);
      param2.setquality(1f, false);// 1f是提高生成的图片质量
      encoder.setjpegencodeparam(param2);
      encoder.encode(tag); // jpeg编码
      out.close();
      system.out.println("image in the page -->"+(i+1));
    }
  }
}

但是其问题在于问题: 当pdf的版本不为1.4时,直接报错:expected 'xref' at start of table

pdfbox与pdfrenderer相比较来说,转换的效率要低得多。200页左右的pdf花费的时间是后者的6倍左右。同时,对于中文字体的支持存在些问题。

但是对于却不存在pdf版本不同无法转换的问题。

pdfrenderer 不能转换1.4以上版本,查找了解决办法但是没有找到。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持服务器之家。

原文链接:https://blog.csdn.net/yiluoak_47/article/details/25150419

标签:

相关文章

热门资讯

2020微信伤感网名听哭了 让对方看到心疼的伤感网名大全
2020微信伤感网名听哭了 让对方看到心疼的伤感网名大全 2019-12-26
yue是什么意思 网络流行语yue了是什么梗
yue是什么意思 网络流行语yue了是什么梗 2020-10-11
背刺什么意思 网络词语背刺是什么梗
背刺什么意思 网络词语背刺是什么梗 2020-05-22
苹果12mini价格表官网报价 iPhone12mini全版本价格汇总
苹果12mini价格表官网报价 iPhone12mini全版本价格汇总 2020-11-13
Intellij idea2020永久破解,亲测可用!!!
Intellij idea2020永久破解,亲测可用!!! 2020-07-29
返回顶部