java如何将pdf转换成image

时间:2021-05-02

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

声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。

相关文章