>>分享Java编程技术,对《Java面向对象编程》等书籍提供技术支持 书籍支持  卫琴直播  品书摘要  在线测试  资源下载  联系我们
发表一个新主题 开启一个新投票 回复文章 您是本文章第 22244 个阅读者 刷新本主题
 * 贴子主题:  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面向对象编程-->图形用户界面(下)
  JavaWeb开发-->使用Session(Ⅱ)
  JSP与Hibernate开发-->域对象在持久化层的四种状态
  Java网络编程-->用Axis发布Web服务
  精通Spring-->Vue指令
  Vue3开发-->绑定表单
  快速理解 函数式编程,响应式编程,链式编程
  序列化与反序列化知识点汇总
  TCP、UDP及Socket代码示例
  ThreadLocal的内存泄露的原因分析以及如何避免
  Redis安装、Redis基本数据类型、Jedis、Redis集群搭建
  分布式锁的原理和实现
  Java中的受查异常与非受查异常区别
  Eclipse使用指南:Debug 配置
  正则表达式范例
  java比c++强大之处JVM垃圾收集算法
  Java入门实用代码:获取链表(LinkedList)的第一个和最后一...
  Java 入门实用代码:汉诺塔算法
  中国有多少程序员?现在还值得学java吗?
  java使用gzip实现文件解压缩示例
  jdbc连接各种数据库代码
  更多...
 IPIP: 已设置保密
树形列表:   
1页 0条记录 当前第1
发表一个新主题 开启一个新投票 回复文章


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