>>分享Java编程技术,对《Java面向对象编程》等书籍提供技术支持 书籍支持  卫琴直播  品书摘要  在线测试  资源下载  联系我们
发表一个新主题 开启一个新投票 回复文章 您是本文章第 22939 个阅读者 刷新本主题
 * 贴子主题:  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开发-->使用Session(Ⅰ)
  JSP与Hibernate开发-->立即检索和延迟检索策略
  Java网络编程-->非阻塞通信
  精通Spring-->CSS过渡和动画
  Vue3开发-->Vue简介
  求素数
  从实战角度解读JVM:类加载机制+JVM调优实战+代码优化!
  Java如何遍历Enumeration
  Redis安装、Redis基本数据类型、Jedis、Redis集群搭建
  [讨论]书中多线程章节的语言表述有误?
  请求大佬们的帮助
  java.util.logging.Logger使用详解
  Java中的受查异常与非受查异常区别
  java中的Static、final、Static final各种用法
  Java读取大文件的高效率实现_java大文件
  Eclipse使用指南:常用视图(View) 的用法
  java 支持分词的高性能拼音转换工具,速度是 pinyin4j 的两倍
  Java入门实用代码:格式化时间(SimpleDateFormat)
  Java入门实用代码:字符串优化测试
  Java中用动态代理实现标准的DataSource数据源连接池
  更多...
 IPIP: 已设置保密
楼主      
1页 0条记录 当前第1
发表一个新主题 开启一个新投票 回复文章


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