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

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

(0)

相关推荐

  • Java 在PPT中添加混合图表过程详解

    本文将介绍通过Java程序在PPT幻灯片中添加混合图表的方法,即,将不同类型的图表类型放置在同一图表中,用于展示同一时期或阶段的数据在不同参数标准下的变化情况,便于对数据的综合分析. 使用工具:Free Spire.Presentation for Java(免费版) Jar文件获取及导入: 方法1:通过官网下载jar文件包.下载后,解压文件,并将lib文件夹下的Spire.Presentation.jar导入java程序.参考如下导入效果: 方法2:通过maven仓库安装导入.可参考导入方法.

  • Java 添加文本框到PPT幻灯片过程解析

    本文将介绍图和通过Java程序添加文本框到PPT幻灯片的方法.包括设置文本框边框样式.填充效果.阴影效果.文本框旋转.文字样式等. 使用工具:Free Spire.Presentation for Java (免费版) Jar文件获取及导入: 方法1:通过E-iceblue官网下载jar文件包.下载后,解压文件,并将lib文件夹下的Spire.Presentation.jar文件导入到java程序.参考如下导入效果: 方法2:可通过maven仓库安装导入.可参考导入方法. Java代码示例(供参

  • 如何使用Java读取PPT文本和图片

    前言 本篇文章将介绍通过Java程序来读取PPT幻灯片中的文本及图片的方法.读取图片时,可读取文档中的所有图片,也可以读取指定幻灯片当中的图片. 工具: Free Spire.Presentation for Java(免费版) IntelliJ IDEA Jar文件获取及导入: 方法1:官网下载jar文件包.下载后,解压文件,并在java程序中导入lib文件夹下的Spire.Presentation.jar文件. 方法2:可通过maven仓库导入到maven项目. Java代码示例 测试文档:

  • Java使用jacob将微软office中word、excel、ppt转成pdf

    本文实例为大家分享了Java使用jacob将微软office文档转成pdf的具体代码,供大家参考,具体内容如下 在使用jacb前,我们需要去下载 jacob.jar 和 jacob-1.18-x64.dll 其次,我们需要将jacob-1.18-x64.dll放入到jdk的bin目录下才可以使用 第三,使用jacb之前,我们需要确保office能正常使用 如果你现在使用的是maven工程,那么不好意思,现在还没有发布正式的jacb资源文件,我们需要自定的maven依赖,如下: <dependen

  • 浅谈Java设置PPT幻灯片背景——纯色、渐变、图片背景

    PPT幻灯片生成时,系统默认是无色背景填充,幻灯片设计需要手动设置背景效果,可设置颜色填充或者图片背景填充.本文将对此介绍具体实现方法. Jar文件导入方法(参考): 步骤1:在Java程序中可新建一个文件夹命名为Lib,并将下载包中的jar文件复制到新建的文件夹下. 步骤2:复制文件后,添加到引用类库:选中这个jar文件,点击鼠标右键,选择"Build Path" – "Add to Build Path".完成引用. Java示例1:设置背景颜色 1.纯色背景

  • java使用poi读取ppt文件和poi读取excel、word示例

    Apache的POI项目可以用来处理MS Office文档,codeplex上还有一个它的.net版本.POI项目可创建和维护操作各种基于OOXML和OLE2文件格式的Java API.大多数MS Office都是OLE2格式的.POI通HSMF子项目来支持Outlook,通过HDGF子项目来支持Visio,通过HPBF子项目来支持Publisher. 使用POI抽取Word简单示例: 要引入poi-3.7.jat和poi-scratchpad-3.7.ajr这两个包. 复制代码 代码如下: p

  • java实现在线预览--poi实现word、excel、ppt转html的方法

    java实现在线预览 - -之poi实现word.excel.ppt转html,具体内容如下所示: ###简介 java实现在线预览功能是一个大家在工作中也许会遇到的需求,如果公司有钱,直接使用付费的第三方软件或者云在线预览服务就可以了,例如永中office.office web 365(http://www.officeweb365.com/)他们都有云在线预览服务,就是要钱0.0 如果想要免费的,可以用openoffice,还需要借助其他的工具(例如swfTools.FlexPaper等)才

  • Java如何在PPT中绘制图形

    Microsoft PowerPoint可支持在幻灯片中插入各种类型的图形并且可设置图形填充.线条颜色.图形大小.位置等.下面将通过Java编程来演示在PPT中绘制图形的方法. 工具:Free Spire.Presentation for Java Jar文件导入方法1:通过官网下载. Step1:在程序中新建一个Directory目录并命名为lib:并将控件包中的Spire.Presentation.jar(可在解压控件包下的lib文件中获取)直接复制该目录下. Step2: 选中复制后的Sp

  • 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-scr

  • java实现PPT转PDF出现中文乱码问题的解决方法

    ppt转成pdf,原理是ppt转成图片,再用图片生产pdf,过程有个问题,不管是ppt还是pptx,都遇到中文乱码,编程方框的问题,其中ppt后缀网上随便找就有解决方案,就是设置字体为统一字体,pptx如果页面是一种中文字体不会有问题,如果一个页面有微软雅黑和宋体,就会导致部分中文方框,怀疑是poi处理的时候,只读取第一种字体,所以导致多个中文字体乱码. 百度和谷歌都找了很久,有看到说apache官网有人说是bug,但他们回复说是字体问题,这个问题其实我觉得poi可能可以自己做,读取原来字体设置

  • LINUX下PHP程序实现WORD文件转化为PDF文件的方法

    本文实例讲述了LINUX下PHP程序实现WORD文件转化为PDF文件的方法.分享给大家供大家参考,具体如下: <?php set_time_limit(0); function MakePropertyValue($name,$value,$osm){ $oStruct = $osm->Bridge_GetStruct("com.sun.star.beans.PropertyValue"); $oStruct->Name = $name; $oStruct->V

  • Java中将File转化为MultipartFile的操作

    话不多说直接上代码,简单明了 import java.io.File; import java.io.FileInputStream; import org.springframework.web.multipart.MultipartFile; import org.springframework.mock.web.MockMultipartFile; import org.apache.http.entity.ContentType; File pdfFile = new File("D:/

  • Java 实现word模板转为pdf

    1. pom相关依赖 工具poi-tl (操作word文档模板) + jacob (将操作后的word模板转为pdf) <!-- poi-tl的pom依赖 --> <dependency> <groupId>com.deepoove</groupId> <artifactId>poi-tl</artifactId> <version>1.9.1</version> </dependency> <

  • java中double转化为BigDecimal精度缺失的实例

    java中double转化为BigDecimal精度缺失实例 @SuppressWarnings("static-access") public static void main(String[] args) { System.out.println(3215.10/2); BigDecimal bd = new BigDecimal(3215.10/2); System.out.println(bd); System.out.println(bd.setScale(2, bd.ROU

  • Java实现输入流转化为String

    在平时Java开发时,难免会遇见输入流转化为String类型的需求,我从事Android开发经常会遇见这样的需求,于是我将这个做成一个工具类分享给大家,希望能帮助大家,这也是我第一次写个人博客,希望大家支持.谢谢! public static String streamToString(InputStream is) { BufferedReader reader = new BufferedReader(new InputStreamReader(is)); //new一个StringBuff

  • java根据富文本生成pdf文件过程解析

    这篇文章主要介绍了java根据富文本生成pdf文件过程解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 public class PdfUtil { /* * 生成pdf工具类 * wmy 12:40 2019/8/9 * @Param [guideBook, pdfPath] * @return java.lang.Boolean **/ public static Boolean htmlToPdf(GuideBook guideBook

  • Java将图片组合成PDF文件的方法

    本文实例为大家分享了Java将图片组合成PDF文件的具体代码,供大家参考,具体内容如下 程序界面图: 代码清单: package 将图片组合成PDF文件; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.io.File; import java.io.FileFilter; import java.io.FileOutputStream; import java.io.IOE

随机推荐