前提:

由于ppt和pptx文件格式不同,ppt是基于二进制的文件,而pptx是基于xml文件, 也是就pptx是2007年后出现的新的ppt版本,对这两种文件处理方式转换PDF其实都差不多,只是要注意接收文件ppt或pptx以及获取两种文件内容 需要的类处理,即使用POI 里面的XMLSlide 和 HSLFSlide 进行分别处理。

maven依赖都使用poi 4.1.2版本:

     <!--  poi --><dependency><groupId>org.apache.poi</groupId><artifactId>poi</artifactId><version>4.1.2</version></dependency><dependency><groupId>org.apache.poi</groupId><artifactId>poi-ooxml</artifactId><version>4.1.2</version></dependency><dependency><groupId>org.apache.poi</groupId><artifactId>poi-scratchpad</artifactId><version>4.1.2</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><dependency><groupId>cn.hutool</groupId><artifactId>hutool-all</artifactId><version>5.6.0</version></dependency>

ppt/pptx转换pdf:

import cn.hutool.core.util.StrUtil;import java.awt.*;
import java.awt.image.BufferedImage;import org.apache.poi.xslf.usermodel.*;
import org.apache.poi.hslf.usermodel.*;
import com.itextpdf.text.Document;
import com.itextpdf.text.pdf.*;
import com.itextpdf.text.Image;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.List;/*** 类名称:PdfConvertUtil* 类描述:转为为PDF工具类
*/
public final class PdfConverUtil {/*** pptToPdf* @param pptPath PPT文件路径* @param pdfDir 生成的PDF文件路径* @return*/public static boolean pptToPdf(String pptPath, String pdfDir) {if (StrUtil.isEmpty(pptPath)) {throw new RuntimeException("word文档路径不能为空");}if (StrUtil.isEmpty(pdfDir)) {throw new RuntimeException("pdf目录不能为空");}String pdfPath = pdfDir + StrUtil.sub(pptPath, pptPath.lastIndexOf(StrUtil.BACKSLASH), pptPath.lastIndexOf(StrUtil.DOT)) + StrUtil.DOT + "pdf";Document document = null;HSLFSlideShow hslfSlideShow = null;FileOutputStream fileOutputStream = null;PdfWriter pdfWriter = null;try {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()) {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;}/**** @Title: pptxToPdf* @param pptPath PPT文件路径* @param pdfDir 生成的PDF文件路径*/public static boolean pptxToPdf(String pptPath, String pdfDir) {if (StrUtil.isEmpty(pptPath)) {throw new RuntimeException("word文档路径不能为空");}if (StrUtil.isEmpty(pdfDir)) {throw new RuntimeException("pdf目录不能为空");}String pdfPath = pdfDir + StrUtil.sub(pptPath, pptPath.lastIndexOf(StrUtil.BACKSLASH), pptPath.lastIndexOf(StrUtil.DOT)) + StrUtil.DOT + "pdf";Document document = null;XMLSlideShow slideShow = null;FileOutputStream fileOutputStream = null;PdfWriter pdfWriter = null;try {slideShow = new XMLSlideShow(new FileInputStream(pptPath));Dimension dimension = slideShow.getPageSize();fileOutputStream = new FileOutputStream(pdfPath);document = new Document();pdfWriter = PdfWriter.getInstance(document, fileOutputStream);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()) {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.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 = PdfConvertUtil.pptToPdf("D:\\360_js\\abc1.ppt", "D:\\360_js")// pptx to pdf//  successful = PdfConvertUtil.pptxToPdf("D:\\360_js\\测321pt.pptx", "D:\\360_js");System.out.println("转换" + (successful ? "成功" : "失败"));}

java 实现 ppt或pptx文件转换PDF文件 -- poi相关推荐

  1. docx4j实现word文件转换pdf文件

    目录 前言 PDF文件导出 word文件转换pdf文件 前言 前段时间在项目中遇到了导出pdf的问题,之前在项目中遇到导出文件莫不是excle或者word文件的导出,所以在遇到需要导出pdf文件时,我 ...

  2. Java 使用wps将word文件转换pdf文件

    public class WordFileToPdf {private static final int wdFormatPDF = 17;private static final int xlTyp ...

  3. dxf转nc代码软件_cad怎么转pdf?cad文件转换pdf文件的方法步骤

    在日常办公中,我们会时不时遇到一些文档格式转换的问题,例如pdf转word,pdf转excel,pdf转图片,pdf转txt等,这些都是比较常见的.如果是做设计师的话,转换的格式又会有所不同,cad文 ...

  4. java : word,excel,img,ppt各种文档转换pdf格式以流方式

    前提: 面对各种文件转换pdf格式,我下面写的都是一些方法,其中每个方法都以流的方式进行参数的传递. 通过猿友的帮忙,修改了部分jar包,解决excel转换pdf导致的水印问题~ 源码链接:https ...

  5. java图片转换pdf_Java实现图片转换PDF文件的示例代码

    最近因为一些事情,需要将一张简单的图片转换为PDF的文件格式,在网上找了一些工具,但是这些工具不是需要注册账号,就是需要下载软件. 而对于只是转换一张图片的情况下,这些操作显然是非常繁琐的,所以作者就 ...

  6. PPT文件转换PDF怎么转

    在工作中,我们经常会接触PPT和PDF的文件.PDF适合整理一些文档数据传输保存,PPT文件更多是用来做汇报工作的时候所使用.很多时候做的PPT文稿不免会需要转换成PDF格式的文件节省占用内存而储存, ...

  7. Java实现图片转换PDF文件

    文章目录 引入依赖 前端页面 控制层接口 PDF工具类 页面效果 最近因为一些事情,需要将一张简单的图片转换为PDF的文件格式,在网上找了一些工具,但是这些工具不是需要注册账号,就是需要下载软件. 而 ...

  8. java使用swfTools将pdf文件转换swf文件

    转载请表明出处 https://blog.csdn.net/Amor_Leo/article/details/89388851 谢谢 java使用swfTools将pdf文件转换swf文件 swfTo ...

  9. aspose office系列转换pdf文件

    ASPOSE office系列转换PDF文件的正确姿势 1.jar 2.pom依赖 3.代码 相关jar和license.xml下载地址 1.jar 序号 jar名称 对应文件 1 aspose.sl ...

最新文章

  1. rgb颜色分量的旋转_RGB分量之偏色与彩色图片转黑白
  2. 牛客 contest893 G-Truthman or Fakeman
  3. maven编译报错 错误: -source 1.5 中不支持 lambda 表达式
  4. centos7 删除zabbix_Zabbix服务器端运行中显示为“不”的解决方式
  5. c++中static的全部用法
  6. JavaScript模块化编程之AMD
  7. Atitit learn by need 需要的时候学与预先学习知识图谱路线图
  8. Java 框架、库和软件的精选列表(Awesome Java)
  9. cmd命令行中文显示乱码
  10. SpringBoot邮箱注册验证
  11. 【分享】精通并发与Netty教程
  12. 计算机网络技术实训 实训总结,计算机网络技术实训报告总结.docx
  13. c# 第32节 类的继承
  14. 学习人工智能需要哪些必备的数学基础?
  15. SecureCRT8.5的下载、安装和注册(详细图解)
  16. 基于STM32控制直流电机加减速正反转设计
  17. 经典英伦分毕业论文答辩PPT模板
  18. 遨博机器人AUBO C语言的SDK接口说明(2)
  19. Obsidian_日程管理工具
  20. AR+Nike天猫欢聚日:阿里新零售的驱动力是创新与想象力

热门文章

  1. hello,这里是cathy的技术blog~
  2. 前端40+精选VSCode插件
  3. ANN(人工神经网络)基础知识
  4. Nexus的安装和使用
  5. anaconda使用和入门
  6. 微交易平台搭建开发-盘内实时K线对接
  7. NXP(Freescale) QorIQ T2080 PCIe使用
  8. python 豆瓣源_使用douban源下载python包
  9. jQuery 选择器 选取第一个 p 元素
  10. 为什么要进行数据标准化?