java如何将pdf转换成image
程序员文章站
2024-04-03 08:03:46
本文实例为大家分享了java将pdf转换image的具体代码,供大家参考,具体内容如下
首先使用了使用了apache的pdfbox组件1.8.4版本
pac...
本文实例为大家分享了java将pdf转换image的具体代码,供大家参考,具体内容如下
首先使用了使用了apache的pdfbox组件1.8.4版本
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 版本
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以上版本,查找了解决办法但是没有找到。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。