java实现PPT转化为PDF
程序员文章站
2023-12-17 21:42:22
jacob的方法,足可以解决这个问题,但是我既然以前曾经做过报表,就想尝试不同的方法。
jacob是一座连接java和微软的桥,所有的解析由微软解析。poi是没有微软解析...
jacob的方法,足可以解决这个问题,但是我既然以前曾经做过报表,就想尝试不同的方法。
jacob是一座连接java和微软的桥,所有的解析由微软解析。poi是没有微软解析的那么原汁原味的,所以如果要求高的话,还是使用jacob。
大致思路很简单,将ppt先转化为图片,然后将图片写入pdf。转化图片是用poi,操作pdf使用itex。不过这个方法的bug就是转化图片的poi效果不是很好。
导入的包分别是:itextpdf-5.1.3.jar,poi-3.8-20120326.jar,poi-scratchpad-3.8-20120326.jar。
然后贴代码了:
代码没有进行参数统一,写两个方法:
package com.zzk.cn; import java.awt.dimension; import java.io.file; import java.io.fileinputstream; import java.io.filenotfoundexception; import java.io.fileoutputstream; import java.io.ioexception; import java.awt.color; import java.awt.dimension; import java.awt.graphics2d; import java.awt.geom.rectangle2d; import java.awt.image.bufferedimage; import org.apache.poi.hslf.model.textrun; import org.apache.poi.hslf.record.slide; import org.apache.poi.hslf.usermodel.richtextrun; import org.apache.poi.hslf.usermodel.slideshow; public class ppttoimage { public static void main(string[] args) { // 读入ppt文件 file file = new file("d:/书本jvm总结7-9.ppt"); doppttoimage(file); } public static boolean doppttoimage(file file) { boolean isppt = checkfile(file); if (!isppt) { system.out.println("你指定的文件不是ppt文档!"); return false; } try { fileinputstream is = new fileinputstream(file); slideshow ppt = new slideshow(is); is.close(); dimension pgsize = ppt.getpagesize(); org.apache.poi.hslf.model.slide[] slide = ppt.getslides(); for (int i = 0; i < slide.length; i++) { system.out.print("第" + i + "页。"); if (slide[i].getnotessheet() != null && slide[i].getnotessheet().gettextruns() != null) { // 获取第一个备注 system.out.println("备注:" + slide[i].getnotessheet().gettextruns()[0] .gettext()); } textrun[] truns = slide[i].gettextruns(); for (int k = 0; k < truns.length; k++) { richtextrun[] rtruns = truns[k].getrichtextruns(); for (int l = 0; l < rtruns.length; l++) { rtruns[l].setfontindex(1); rtruns[l].setfontname("宋体"); // 获取文本列表 system.out.println(rtruns[l].gettext()); } } bufferedimage img = new bufferedimage(pgsize.width, pgsize.height, bufferedimage.type_int_rgb); graphics2d graphics = img.creategraphics(); graphics.setpaint(color.white); graphics.fill(new rectangle2d.float(0, 0, pgsize.width, pgsize.height)); slide[i].draw(graphics); // 这里设置图片的存放路径和图片的格式(jpeg,png,bmp等等),注意生成文件路径 fileoutputstream out = new fileoutputstream("d:/testimage/pict_" + (i + 1) + ".jpeg"); javax.imageio.imageio.write(img, "jpeg", out); out.close(); } system.out.println("ok"); return true; } catch (filenotfoundexception e) { system.out.println(e); } catch (ioexception e) { e.printstacktrace(); } return false; } // function 检查文件是否为ppt public static boolean checkfile(file file) { boolean isppt = false; string filename = file.getname(); string suffixname = null; if (filename != null && filename.indexof(".") != -1) { suffixname = filename.substring(filename.indexof(".")); if (suffixname.equals(".ppt")) { isppt = true; } return isppt; } else { return isppt; } } }
第二段代码:
package com.zzk.cn; import java.io.fileoutputstream; import java.io.ioexception; import com.itextpdf.text.document; import com.itextpdf.text.documentexception; import com.itextpdf.text.image; import com.itextpdf.text.pdf.pdfwriter; public class imagetopdf { public static void main(string[] args) { system.out.println("chapter 6 example 3: using a relative path for html"); // step 1: creation of a document-object document document = new document(); try { // step 2: // we create a writer that listens to the document // and directs a pdf-stream to a file pdfwriter.getinstance(document, new fileoutputstream("d:/测试图片.pdf")); // htmlwriter writer = htmlwriter.getinstance(document, new fileoutputstream("chap0603.html")); // writer.setimagepath("../../images/kerstmis/"); // step 3: we open the document document.open(); for(int i=1;i<=7;i++) { // step 4: we add content image jpg = image.getinstance("d:/testimage/pict_"+i+".jpeg"); jpg.scalepercent(50); document.add(jpg); } } catch(documentexception de) { system.err.println(de.getmessage()); } catch(ioexception ioe) { system.err.println(ioe.getmessage()); } // step 5: we close the document document.close(); } }
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。