Java POI实现ppt&pptx转换为pdf文件

  • 背景
  • 区别
  • 参考博客
  • 代码
    • 依赖
    • 工具类

背景

需求使用ppt&pptx 上传文件转换为PDF文件,方便前端展示

区别

PPT PPTX
MS Office PowerPoint2003之前版本 MS Office PowerPoint2007之后的版本生成
基于二进制的文件 pptx是基于xml文件
POI 中HSLFSlideShow处理 POI 中XMLSlideShow处理

参考博客

java 实现 ppt或pptx文件转换PDF文件 – poi

代码

依赖

     <!--  poi --><dependency><groupId>org.apache.poi</groupId><artifactId>poi</artifactId><version>3.15</version></dependency><dependency><groupId>org.apache.poi</groupId><artifactId>poi-ooxml</artifactId><version>3.15</version></dependency><dependency><groupId>org.apache.poi</groupId><artifactId>poi-scratchpad</artifactId><version>3.15</version></dependency><!-- itextpdf --><dependency><groupId>com.itextpdf</groupId><artifactId>itextpdf</artifactId><version>5.4.3</version></dependency><dependency><groupId>com.itextpdf</groupId><artifactId>itext-asian</artifactId><version>5.2.0</version></dependency>

工具类

与参考博客差不多。做了一些细小处理

package com.fang.industry.service.common.utils;
import java.awt.*;
import java.awt.image.BufferedImage;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.List;import org.apache.commons.lang3.StringUtils;
import org.apache.poi.xslf.usermodel.*;
import org.apache.poi.xssf.usermodel.*;
import org.apache.poi.hslf.usermodel.*;
import com.itextpdf.text.Document;
import com.itextpdf.text.pdf.*;
import com.itextpdf.text.Image;
/*** @author: guochao.bj@fang.com* @createDate: 2021/11/30 13:52*/
public class PdfConverUtil {public static boolean pptxToPdf(String pptPath, String pdfDir) {if (StringUtils.isEmpty(pptPath)) {throw new RuntimeException("word文档路径不能为空");}if (StringUtils.isEmpty(pdfDir)) {throw new RuntimeException("pdf目录不能为空");}String pdfPath = pdfDir + "te." + "pdf";Document document = null;XMLSlideShow slideShow = null;FileOutputStream fileOutputStream = null;PdfWriter pdfWriter = null;try {//使用输入流pptx文件slideShow = new XMLSlideShow(new FileInputStream(pptPath));//获取幻灯片的尺寸Dimension dimension = slideShow.getPageSize();//新增pdf输出流,准备讲ppt写出fileOutputStream = new FileOutputStream(pdfPath);//创建一个写内容的容器document = new Document();//使用输出流写入pdfWriter = PdfWriter.getInstance(document, fileOutputStream);//使用之前必须打开<You have to open the document before you can write content.>document.open();PdfPTable pdfPTable = new PdfPTable(1);//获取幻灯片List<XSLFSlide> slideList = slideShow.getSlides();for (int i = 0, row = slideList.size(); i < row; i++) {//获取每一页幻灯片XSLFSlide slide = slideList.get(i);for (XSLFShape shape : slide.getShapes()) {//判断是否是文本if(shape instanceof XSLFTextShape){// 设置字体, 解决中文乱码XSLFTextShape textShape = (XSLFTextShape) shape;for (XSLFTextParagraph textParagraph : textShape.getTextParagraphs()) {for (XSLFTextRun textRun : textParagraph.getTextRuns()) {textRun.setFontFamily("宋体");}}}}//根据幻灯片尺寸创建图形对象BufferedImage bufferedImage = new BufferedImage((int)dimension.getWidth(), (int)dimension.getHeight(), BufferedImage.TYPE_INT_RGB);Graphics2D graphics2d = bufferedImage.createGraphics();graphics2d.setPaint(Color.white);graphics2d.setFont(new java.awt.Font("宋体", java.awt.Font.PLAIN, 12));//把内容写入图形对象slide.draw(graphics2d);graphics2d.dispose();//封装到Image对象中Image image = Image.getInstance(bufferedImage, null);image.scalePercent(50f);// 写入单元格pdfPTable.addCell(new PdfPCell(image, true));document.add(image);}} catch (Exception e) {e.printStackTrace();return false;} finally {try {if (document != null) {document.close();}if (fileOutputStream != null) {fileOutputStream.close();}if (pdfWriter != null) {pdfWriter.close();}} catch (IOException e) {e.printStackTrace();}}return true;}public static boolean pptToPdf(String pptPath, String pdfDir) {if (StringUtils.isEmpty(pptPath)) {throw new RuntimeException("word文档路径不能为空");}if (StringUtils.isEmpty(pdfDir)) {throw new RuntimeException("pdf目录不能为空");}String pdfPath = pdfDir + "te." + "pdf";Document document = null;HSLFSlideShow hslfSlideShow = null;FileOutputStream fileOutputStream = null;PdfWriter pdfWriter = null;try {//使用输入流ppt文件hslfSlideShow = new HSLFSlideShow(new FileInputStream(pptPath));// 获取ppt文件页面Dimension dimension = hslfSlideShow.getPageSize();fileOutputStream = new FileOutputStream(pdfPath);document = new Document();// pdfWriter实例pdfWriter = PdfWriter.getInstance(document, fileOutputStream);document.open();PdfPTable pdfPTable = new PdfPTable(1);List<HSLFSlide> hslfSlideList = hslfSlideShow.getSlides();for (int i=0; i < hslfSlideList.size(); i++) {HSLFSlide hslfSlide = hslfSlideList.get(i);for (HSLFShape shape : hslfSlide.getShapes()) {if (shape instanceof HSLFTextShape){// 设置字体, 解决中文乱码HSLFTextShape textShape = (HSLFTextShape) shape;for (HSLFTextParagraph textParagraph : textShape.getTextParagraphs()) {for (HSLFTextRun textRun : textParagraph.getTextRuns()) {textRun.setFontFamily("宋体");}}}}BufferedImage bufferedImage = new BufferedImage((int)dimension.getWidth(), (int)dimension.getHeight(), BufferedImage.TYPE_INT_RGB);Graphics2D graphics2d = bufferedImage.createGraphics();graphics2d.setPaint(Color.white);graphics2d.setFont(new java.awt.Font("宋体", java.awt.Font.PLAIN, 12));hslfSlide.draw(graphics2d);graphics2d.dispose();Image image = Image.getInstance(bufferedImage, null);image.scalePercent(50f);// 写入单元格pdfPTable.addCell(new PdfPCell(image, true));document.add(image);}} catch (Exception e) {e.printStackTrace();return false;} finally {try {if (document != null) {document.close();}if (fileOutputStream != null) {fileOutputStream.close();}if (pdfWriter != null) {pdfWriter.close();}} catch (IOException e) {e.printStackTrace();}}return true;}public static void main(String[] args) {boolean successful = false;// ppt to pdfsuccessful = pptxToPdf("D:\\test1.pptx", "D:\\");// pptx to pdf//  successful = PdfConvertUtil.pptxToPdf("D:\\360_js\\测321pt.pptx", "D:\\360_js");System.out.println("转换" + (successful ? "成功" : "失败"));}}

Java POI实现pptpptx转换为pdf文件相关推荐

  1. java将HTML文件转化为pdf文件,如何使用Java将HTML网页转换为PDF文件

    我一直在互联网上搜索如何使用Java将HTML页面转换为PDF文件.我发现了很多指针,简而言之,它们不起作用或难以实现.我也下载了一个商业产品,pdf4ml;该API是我很乐意与之合作的,除了当我在维 ...

  2. 使用java程序将ceb文件转换为pdf文件

    要使用 Java 程序将 CEB 文件转换为 PDF 文件,你可以使用 Apache POI 库来读取 CEB 文件并解析其内容. Apache POI 是一个开源的 Java 库,可以用于读取和写入 ...

  3. Java 将 Excel 转换为 PDF 文件

    持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第11天,点击查看活动详情 今天这是篇粗糙的文章,文字也较少,整理了个Java将Excel 转换为 PDF 文件的工具类.(还比较 ...

  4. office文件转换为pdf文件

    office文件转换为pdf文件 首先安装openoffice,自行百度 导入jar包,自行百度 引入坐标: <!-- 转pdf配置 --><dependency><gr ...

  5. Office系列---将Office文件(Word、PPT、Excel)转换为PDF文件,提取Office文件(Word、PPT)中的所有图片

    将Office文件转换为PDF文件,提取Office文件中的所有图片 1.Office系列---将Office文件(Word.PPT.Excel)转换为PDF文件 1.1 基于Office实现的解决方 ...

  6. 将HTML文件转换为PDF文件(Thymeleaf模板转换,简单解决中文问题, 解决HTML带图片转换PDF文件问题)

    将HTML文件转换为PDF文件 一.导入依赖 <!-- itext生成Pdf --> <dependency><groupId>com.itextpdf</g ...

  7. 使用Jacob实现将Word文件转换为Pdf文件

    在某些业务场景下,可能需要将Word文件转换为Pdf文件的需求,Word文件编辑方便,而Pdf文件查看更方便,并且格式基本不会变化,同时可以避免被误编辑. 如果使用的是Java语言,那么可以借助于Ja ...

  8. java网页保存pdf_JavaScript+Java实现HTML页面转为PDF文件保存的方法

    JavaScript+Java实现HTML页面转为PDF文件保存的方法 发布于 2017-02-27 09:58:50 | 160 次阅读 | 评论: 0 | 来源: 网友投递 JavaScript客 ...

  9. java 网页保存为pdf文件怎么打开方式_js相关:JavaScript+Java实现HTML页面转为PDF文件保存的方法...

    js相关:JavaScript+Java实现HTML页面转为PDF文件保存的方法 发布于 2020-8-12| 复制链接 借助iText这个Java库,我们可以将HTML文件保存为图片文件进而转换成P ...

  10. python批量pdf转word,python批量实现Word文件转换为PDF文件

    本文为大家分享了python批量转换Word文件为PDF文件的具体方法,供大家参考,具体内容如下 1.目的 通过万能的Python把一个目录下的所有Word文件转换为PDF文件. 2.遍历目录 作者总 ...

最新文章

  1. 解决IndexClosedException: closed
  2. rman实验——测试备份压缩
  3. linux 管道使用方法,Linux 管道命令
  4. leetcode1011
  5. python 画图_用python解九宫格以及画图
  6. 经典论文复现 | 基于深度学习的图像超分辨率重建
  7. 如何在MATLAB下把模糊推理系统转化为查询表(转载)
  8. 【渝粤教育】电大中专Office办公软件_1作业 题库
  9. MongoDB最简单的入门教程之二 使用nodejs访问MongoDB 1
  10. 《Crazy sand》感人的沙画艺术
  11. 如何保存浮点型数值的图像? (Python的/ PIL)
  12. 关于在联想电脑管家更新网卡驱动后无法显示可用网络wifi的问题!
  13. 联想小新520怎么样?对比当贝D3X哪款更值得买?
  14. linux连接苹果鼠标,Linux 5.13添加对苹果Magic Mouse 2和微软SAM的支持
  15. 编译原理用C语言编写递归下降分析程序,编译原理递归下降分析器(C语言).pdf
  16. 哲学家就餐问题python_哲学家就餐问题的一种Python解决方案
  17. 百度开发者大会高层讲稿
  18. html视频如何转换成mp4视频格式,将MP4、MPEG、MOV等格式的视频转换成WEBM格式的方法...
  19. 程序员必修课-颈椎问题的预防
  20. 【LiteOS】华为LiteOS开发初体验

热门文章

  1. 常用的dede标签小总结
  2. VBA 读写文本文件
  3. (二十九)树莓派3B+ 获取BH1750FVI光强度传感器数据
  4. 怎么把ppt弄成链接的形式_怎么把ppt改成pptx_把pptx转换成ppt的方法
  5. python中%是什么意思_在python中%是什么意思
  6. 软件开发七宗罪(转)
  7. 基于PTB数据集实现RNN-LSTM循环神经网络(智能填词)
  8. 开源:安卓手机app控制arduino,通过esp8266-01
  9. 【计算机史】早期人类的重要计算工具科普
  10. idea.log如何精确查看错误信息