java实现PPT转化为PDF

 更新时间:2018年06月07日 14:18:48   作者:opzoonzhuzhengke  
这篇文章主要为大家详细介绍了java实现PPT转化为PDF的方法,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

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(); 
  } 
} 

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

相关文章

  • 探索Java中的IP属地获取技术

    探索Java中的IP属地获取技术

    这篇文章主要为大家介绍了Java中的IP属地获取的技术探索,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-10-10
  • Java Web项目中Spring框架处理JSON格式数据的方法

    Java Web项目中Spring框架处理JSON格式数据的方法

    Spring MVC是个灵活的框架,返回JSON数据的也有很多五花八门的方式,这里我们来整理一个最简单的Java Web项目中Spring框架处理JSON格式数据的方法:
    2016-05-05
  • Java使用非覆盖的方法实现替换PDF中的文本

    Java使用非覆盖的方法实现替换PDF中的文本

    这篇文章主要为大家详细介绍了Java如何使用非覆盖的方法实现替换PDF中的文本,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下
    2024-02-02
  • Java正则表达式Pattern和Matcher原理详解

    Java正则表达式Pattern和Matcher原理详解

    这篇文章主要介绍了Java正则表达式Pattern和Matcher原理详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-02-02
  • SpringBoot四大神器之Actuator的使用小结

    SpringBoot四大神器之Actuator的使用小结

    这篇文章主要介绍了SpringBoot四大神器之Actuator的使用小结,详细的介绍了Actuator的使用和端点的使用,有兴趣的可以了解一下
    2017-11-11
  • SpringBoot指定激活配置文件的方法

    SpringBoot指定激活配置文件的方法

    Spring Boot 对多环境整合已经有了很好的支持,能够在运行间、打包时自由切换环境,这篇文章主要介绍了SpringBoot指定激活配置文件,需要的朋友可以参考下
    2023-11-11
  • springboot开启Bean数据校验功能

    springboot开启Bean数据校验功能

    这篇文章主要介绍了springboot开启Bean数据校验功能,通过启用Bean属性校验导入JSR303与Hibernate校验框架坐标,使用@Validated注解启用校验功能,需要的朋友可以参考下
    2023-10-10
  • Spring中的@ModelAttribute模型属性绑定详解

    Spring中的@ModelAttribute模型属性绑定详解

    这篇文章主要介绍了Spring中的@ModelAttribute模型属性绑定详解,@ModelAttribute用于将方法参数或返回值绑定到Model属性上,并公开给Web视图,支持使用@RequestMapping注释的Controller类,需要的朋友可以参考下
    2024-02-02
  • SpringCloud注册中心之consul详细讲解使用方法

    SpringCloud注册中心之consul详细讲解使用方法

    Consul是一款由HashiCorp公司开源的,用于服务治理的软件,Spring Cloud Consul对其进行了封装,这篇文章主要介绍了springcloud组件consul服务治理,需要的朋友可以参考下
    2022-11-11
  • springboot使用@Slf4j进行日志的记录步骤详解

    springboot使用@Slf4j进行日志的记录步骤详解

    这篇文章主要介绍了springboot使用@Slf4j进行日志的记录,使用@Slf4j的注解进行日志记录非常方便,本文给大家分享操作步骤,需要的朋友可以参考下
    2023-08-08

最新评论