欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

java实现PPT转化为PDF

程序员文章站 2023-12-20 12:20:04
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(); 
  } 
} 

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。

上一篇:

下一篇: