热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Java使用apache的poi将PPT转PDF文件,支持并兼容PPT和PPTX文件

Java使用apache的poi将PPT转PDF文件,支持并兼容PPT和PPTX文件前言:使用apache的poi,免费废话不多说,贴代码:packagecom.junit;imp


Java使用apache的poi将PPT转PDF文件,支持并兼容PPT和PPTX文件


前言:使用apache的poi,免费


废话不多说,贴代码:

package com.junit;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Graphics2D;
import java.awt.geom.AffineTransform;
import java.awt.geom.Rectangle2D;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.List;
import org.apache.poi.hslf.usermodel.HSLFSlide;
import org.apache.poi.hslf.usermodel.HSLFSlideShow;
import org.apache.poi.xslf.usermodel.XMLSlideShow;
import org.apache.poi.xslf.usermodel.XSLFSlide;
import com.itextpdf.text.Document;
import com.itextpdf.text.Image;
import com.itextpdf.text.Rectangle;
import com.itextpdf.text.pdf.PdfPCell;
import com.itextpdf.text.pdf.PdfPTable;
import com.itextpdf.text.pdf.PdfWriter;
public class PPTtoPDF {
private static final String path = "D:\\_my_del\\ppt\\";
public static void main(String[] args) throws Exception {
File file2 = new File(path + "ResultG/");
if (!file2.exists())
file2.mkdirs();
File file = new File(path);
for (File f : file.listFiles()) {
if (!f.isFile())
continue;
file2 = new File(path + "ResultG/" + file.getName() + ".pdf");
if (!file2.exists())
file2.createNewFile();
new PPTtoPDF().convertPPTToPDF(f, file2);
}
}
public boolean convertPPTToPDF(File file, File toFile) {
try {
Document pdfDocument = new Document();
PdfWriter pdfWriter = PdfWriter.getInstance(pdfDocument, new FileOutputStream(toFile));
FileInputStream is = new FileInputStream(file);
HSLFSlideShow hslfSlideShow = convertPPTToPDFByPPT(is);
double zoom = 2;
if (hslfSlideShow == null) {
is = new FileInputStream(file);
XMLSlideShow ppt = convertPPTToPDFByPPTX(is);
if (ppt == null) {
throw new NullPointerException("This PPTX get data is error....");
}
Dimension pgsize = ppt.getPageSize();
List<XSLFSlide> slide = ppt.getSlides();
AffineTransform at = new AffineTransform();
at.setToScale(zoom, zoom);
pdfDocument.setPageSize(new Rectangle((float) pgsize.getWidth(), (float) pgsize.getHeight()));
pdfWriter.open();
pdfDocument.open();
PdfPTable table = new PdfPTable(1);
for (XSLFSlide xslfSlide : slide) {
BufferedImage img = new BufferedImage((int) Math.ceil(pgsize.width * zoom), (int) Math.ceil(pgsize.height * zoom), BufferedImage.TYPE_INT_RGB);
Graphics2D graphics = img.createGraphics();
graphics.setTransform(at);
graphics.setPaint(Color.white);
graphics.fill(new Rectangle2D.Float(0, 0, pgsize.width, pgsize.height));
xslfSlide.draw(graphics);
graphics.getPaint();
Image slideImage = Image.getInstance(img, null);
table.addCell(new PdfPCell(slideImage, true));
}
ppt.close();
pdfDocument.add(table);
pdfDocument.close();
pdfWriter.close();
System.out.println(file.getAbsolutePath() + "Powerpoint file converted to PDF successfully");
return true;
}
Dimension pgsize = hslfSlideShow.getPageSize();
List<HSLFSlide> slides = hslfSlideShow.getSlides();
pdfDocument.setPageSize(new Rectangle((float) pgsize.getWidth(), (float) pgsize.getHeight()));
pdfWriter.open();
pdfDocument.open();
AffineTransform at = new AffineTransform();
PdfPTable table = new PdfPTable(1);
for (HSLFSlide hslfSlide : slides) {
BufferedImage img = new BufferedImage((int) Math.ceil(pgsize.width * zoom), (int) Math.ceil(pgsize.height * zoom), BufferedImage.TYPE_INT_RGB);
Graphics2D graphics = img.createGraphics();
graphics.setTransform(at);
graphics.setPaint(Color.white);
graphics.fill(new Rectangle2D.Float(0, 0, pgsize.width, pgsize.height));
hslfSlide.draw(graphics);
graphics.getPaint();
Image slideImage = Image.getInstance(img, null);
table.addCell(new PdfPCell(slideImage, true));
}
hslfSlideShow.close();
pdfDocument.add(table);
pdfDocument.close();
pdfWriter.close();
System.out.println(file.getAbsolutePath() + "Powerpoint file converted to PDF successfully");
return true;
} catch (Exception e) {
System.out.println(file.getAbsolutePath() + "--->" + e.getMessage());
return false;
}
}
private XMLSlideShow convertPPTToPDFByPPTX(FileInputStream is) {
try {
return new XMLSlideShow(is);
} catch (IOException e) {
return null;
}
}
private HSLFSlideShow convertPPTToPDFByPPT(FileInputStream is) {
try {
return new HSLFSlideShow(is);
} catch (Exception e) {
return null;
}
}
}

HSLFSlideShow 用于ppt文件,XMLSlideShow 用于pptx文件。


该代码需要jar包支持,为方便下载,已上传至本资源库,链接:

https://download.csdn.net/download/qq_26599807/12670074



  • 扩展:

    POI官方网站及下载:http://poi.apache.org/download.html

    POI下载地址2:https://downloads.apache.org/poi/

本文地址:https://blog.csdn.net/qq_26599807/article/details/107657890



推荐阅读
  • 欢乐的票圈重构之旅——RecyclerView的头尾布局增加
    项目重构的Git地址:https:github.comrazerdpFriendCircletreemain-dev项目同步更新的文集:http:www.jianshu.comno ... [详细]
  • 本文介绍了九度OnlineJudge中的1002题目“Grading”的解决方法。该题目要求设计一个公平的评分过程,将每个考题分配给3个独立的专家,如果他们的评分不一致,则需要请一位裁判做出最终决定。文章详细描述了评分规则,并给出了解决该问题的程序。 ... [详细]
  • Java太阳系小游戏分析和源码详解
    本文介绍了一个基于Java的太阳系小游戏的分析和源码详解。通过对面向对象的知识的学习和实践,作者实现了太阳系各行星绕太阳转的效果。文章详细介绍了游戏的设计思路和源码结构,包括工具类、常量、图片加载、面板等。通过这个小游戏的制作,读者可以巩固和应用所学的知识,如类的继承、方法的重载与重写、多态和封装等。 ... [详细]
  • JavaSE笔试题-接口、抽象类、多态等问题解答
    本文解答了JavaSE笔试题中关于接口、抽象类、多态等问题。包括Math类的取整数方法、接口是否可继承、抽象类是否可实现接口、抽象类是否可继承具体类、抽象类中是否可以有静态main方法等问题。同时介绍了面向对象的特征,以及Java中实现多态的机制。 ... [详细]
  • XML介绍与使用的概述及标签规则
    本文介绍了XML的基本概念和用途,包括XML的可扩展性和标签的自定义特性。同时还详细解释了XML标签的规则,包括标签的尖括号和合法标识符的组成,标签必须成对出现的原则以及特殊标签的使用方法。通过本文的阅读,读者可以对XML的基本知识有一个全面的了解。 ... [详细]
  • 关键词:Golang, Cookie, 跟踪位置, net/http/cookiejar, package main, golang.org/x/net/publicsuffix, io/ioutil, log, net/http, net/http/cookiejar ... [详细]
  • 本文详细介绍了Java中vector的使用方法和相关知识,包括vector类的功能、构造方法和使用注意事项。通过使用vector类,可以方便地实现动态数组的功能,并且可以随意插入不同类型的对象,进行查找、插入和删除操作。这篇文章对于需要频繁进行查找、插入和删除操作的情况下,使用vector类是一个很好的选择。 ... [详细]
  • 闭包一直是Java社区中争论不断的话题,很多语言都支持闭包这个语言特性,闭包定义了一个依赖于外部环境的自由变量的函数,这个函数能够访问外部环境的变量。本文以JavaScript的一个闭包为例,介绍了闭包的定义和特性。 ... [详细]
  • Java学习笔记之面向对象编程(OOP)
    本文介绍了Java学习笔记中的面向对象编程(OOP)内容,包括OOP的三大特性(封装、继承、多态)和五大原则(单一职责原则、开放封闭原则、里式替换原则、依赖倒置原则)。通过学习OOP,可以提高代码复用性、拓展性和安全性。 ... [详细]
  • 先看官方文档TheJavaTutorialshavebeenwrittenforJDK8.Examplesandpracticesdescribedinthispagedontta ... [详细]
  • 本文介绍了Swing组件的用法,重点讲解了图标接口的定义和创建方法。图标接口用来将图标与各种组件相关联,可以是简单的绘画或使用磁盘上的GIF格式图像。文章详细介绍了图标接口的属性和绘制方法,并给出了一个菱形图标的实现示例。该示例可以配置图标的尺寸、颜色和填充状态。 ... [详细]
  • Android系统源码分析Zygote和SystemServer启动过程详解
    本文详细解析了Android系统源码中Zygote和SystemServer的启动过程。首先介绍了系统framework层启动的内容,帮助理解四大组件的启动和管理过程。接着介绍了AMS、PMS等系统服务的作用和调用方式。然后详细分析了Zygote的启动过程,解释了Zygote在Android启动过程中的决定作用。最后通过时序图展示了整个过程。 ... [详细]
  • 本文介绍了Java中Hashtable的clear()方法,该方法用于清除和移除指定Hashtable中的所有键。通过示例程序演示了clear()方法的使用。 ... [详细]
  • 重入锁(ReentrantLock)学习及实现原理
    本文介绍了重入锁(ReentrantLock)的学习及实现原理。在学习synchronized的基础上,重入锁提供了更多的灵活性和功能。文章详细介绍了重入锁的特性、使用方法和实现原理,并提供了类图和测试代码供读者参考。重入锁支持重入和公平与非公平两种实现方式,通过对比和分析,读者可以更好地理解和应用重入锁。 ... [详细]
  • Java 11相对于Java 8,OptaPlanner性能提升有多大?
    本文通过基准测试比较了Java 11和Java 8对OptaPlanner的性能提升。测试结果表明,在相同的硬件环境下,Java 11相对于Java 8在垃圾回收方面表现更好,从而提升了OptaPlanner的性能。 ... [详细]
author-avatar
小伟3NrJ
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有