本文实例为大家分享了java将pdf转换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