本文实例为大家分享了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