>>分享Java编程技术,对《Java面向对象编程》等书籍提供技术支持 书籍支持  卫琴直播  品书摘要  在线测试  资源下载  联系我们
发表一个新主题 开启一个新投票 回复文章 您是本文章第 22288 个阅读者 刷新本主题
 * 贴子主题:  java实现PPT转化为PDF 回复文章 点赞(0)  收藏  
作者:日月光华    发表时间:2021-02-09 02:07:35     消息  查看  搜索  好友  邮件  复制  引用

java实现PPT转化为PDF

这篇文章主要为大家详细介绍了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();
  }
}

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


程序猿的技术大观园:www.javathinker.net
  Java面向对象编程-->Java语言的基本语法和规范
  JavaWeb开发-->Servlet技术详解(Ⅰ)
  JSP与Hibernate开发-->映射一对多关联关系
  Java网络编程-->Socket用法详解
  精通Spring-->Vue组件开发基础
  Vue3开发-->创建综合购物网站应用
  JDK17的新特性
  BIO和NIO区别
  Java设计模式:接口隔离原则和迪米特法则详解
  整理收集的一些常用java工具类
  Java的对象的拷贝方式集合
  购书咨询
  被迫重构代码,这次我干掉了 if-else
  java 中文繁简体转换工具 opencc4j
  Java入门实用代码:使用 Enumeration 遍历 HashTable
  Java入门实用代码:List 循环移动元素
  Java入门实用代码:压栈出栈的方法实现字符串反转
  Java入门实用代码:100以内整数求和运算
  java使用gzip实现文件解压缩示例
  初学者该学哪种编程语言
  java零基础入门-面向对象篇 抽象类
  更多...
 IPIP: 已设置保密
树形列表:   
1页 0条记录 当前第1
发表一个新主题 开启一个新投票 回复文章


中文版权所有: JavaThinker技术网站 Copyright 2016-2026 沪ICP备16029593号-2
荟萃Java程序员智慧的结晶,分享交流Java前沿技术。  联系我们
如有技术文章涉及侵权,请与本站管理员联系。