POI依赖

maven

<!-- poi --><dependency><groupId>org.apache.poi</groupId><artifactId>poi</artifactId><version>4.0.1</version></dependency><dependency><groupId>org.apache.poi</groupId><artifactId>poi-ooxml</artifactId><version>4.0.1</version></dependency><dependency><groupId>org.apache.poi</groupId><artifactId>poi-scratchpad</artifactId><version>4.0.1</version></dependency>

转换[ppt和pptx要分开处理]

  • ppt通过 org.apache.poi.hslf包来处理
  • pptx通过 org.apache.poi.xslf包来处理
  • 直接上代码↓↓↓

import org.apache.poi.hslf.usermodel.*;
import org.apache.poi.xslf.usermodel.*;
import org.junit.jupiter.api.Test;import java.awt.*;
import java.awt.geom.Rectangle2D;
import java.awt.image.BufferedImage;
import java.io.*;
import java.util.List;/*** @author RedRush* @date 2022/6/29 17:10* @description: ppt转化工具类*/
public class PPTUtil {/*** @Author: RedRush* @Date:   2022/6/29 22:32* @description: ppt/pptx 转换为图片*/@Testpublic void transPPTXToPic(){String root = "D:\\work\\Download\\";
//        String fileName = "Test.pptx";String fileName = "Test.ppt";try {if(fileName.toUpperCase().endsWith(".PPTX")){transPPTXToPic(root, fileName);}else if(fileName.toUpperCase().endsWith(".PPT")){transPPTToPic(root, fileName);}} catch (Exception e) {e.printStackTrace();}}// PPT输出为图片 hslf解析private void transPPTToPic(String filePath, String fileName){// 生成输出String outRoot = filePath + fileName.substring(0, fileName.indexOf('.')) + File.separator;System.err.printf("图片输出路径为:%s\n", outRoot);// 不存在则创建文件夹mkdir(outRoot);// ppt读取路径String pptName = filePath + fileName;System.err.printf("PPT读取路径为:%s\n", pptName);FileInputStream fis = null;try{// 获取系统可用字体GraphicsEnvironment e = GraphicsEnvironment.getLocalGraphicsEnvironment();String[] fontNames  = e.getAvailableFontFamilyNames();// 读取pptfis = new FileInputStream(new File(pptName));HSLFSlideShow ppt = new HSLFSlideShow(fis);/** 解析PPT基本内容* */Dimension sheet = ppt.getPageSize();int width = sheet.width, height = sheet.height;List<HSLFSlide> pages = ppt.getSlides();System.err.printf("ppt基本信息: 共%s页,尺寸: %s , %s", pages.size(), width, height);BufferedImage img      = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);Graphics2D    graphics = img.createGraphics();int i = 1;// 逐页遍历for(HSLFSlide slide : pages){// 清空画板graphics.setPaint(Color.white);graphics.fill(new Rectangle2D.Float(0, 0, width, height));slide.draw(graphics);// 输出为图片File f = new File(outRoot + i++ + ".png");System.out.printf("输出图片:%s\n", f.getAbsolutePath());FileOutputStream fos = new FileOutputStream(f);javax.imageio.ImageIO.write(img, "PNG", fos);fos.close();}}catch (Exception e){e.printStackTrace();}finally {if (fis != null){try {fis.close();} catch (IOException e) {e.printStackTrace();}}}}// PPTX输出为图片 xmls包解析private void transPPTXToPic(String filePath, String fileName){// 生成输出String outRoot = filePath + fileName.substring(0, fileName.indexOf('.')) + File.separator;System.err.printf("图片输出路径为:%s\n", outRoot);// 不存在则创建文件夹mkdir(outRoot);// ppt读取路径String pptName = filePath + fileName;System.err.printf("PPT读取路径为:%s\n", pptName);FileInputStream fis = null;try{// 获取系统可用字体GraphicsEnvironment e = GraphicsEnvironment.getLocalGraphicsEnvironment();String[] fontNames  = e.getAvailableFontFamilyNames();// 读取pptfis = new FileInputStream(new File(pptName));XMLSlideShow ppt = new XMLSlideShow(fis);/** 解析PPT基本内容* */Dimension sheet = ppt.getPageSize();int width = sheet.width, height = sheet.height;int count = ppt.getSlides().size();System.err.printf("ppt基本信息: 共%s页,尺寸: %s , %s", count, width, height);BufferedImage img      = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);Graphics2D    graphics = img.createGraphics();int i = 1;// 逐页遍历for(XSLFSlide shape : ppt.getSlides()){// 清空画板graphics.setPaint(Color.white);graphics.fill(new Rectangle2D.Float(0, 0, width, height));shape.draw(graphics);// 输出为图片File f = new File(outRoot + i++ + ".png");System.out.printf("输出图片:%s\n", f.getAbsolutePath());FileOutputStream fos = new FileOutputStream(f);javax.imageio.ImageIO.write(img, "PNG", fos);fos.close();}}catch (Exception e){System.err.println("======ppt转换异常");e.printStackTrace();}finally {if (fis != null){try {fis.close();} catch (IOException e) {e.printStackTrace();}}}}// 生成文件夹private void mkdir(String path){File f = new File(path);if(!f.exists()){f.mkdirs();}}
}

小节

  • poi输出为图片,部分地方输出存在bug,比如图表无法导出(柱形图,饼图之类的),文本框的背景色无法渲染,有些文本在powerpoint里显示正常,但通过poi导出成PNG图片后,可能会超出画布边界,比如某些文本多页面,最后一行导出以后就看不到了。
  • 不过好处在于,poi不需要引入很多第三方的包。凑合凑合用还行。
  • 说句废话,还是用做ppt的电脑直接另存为png/pdf效果最好,字体啊,布局啊也不会乱变。有时候同一个ppt文档,用office做,用wps打开都会有些差异,何况这些代码去处理呢。

java通过poi转换ppt/pptx内容,输出为PNG图片。相关推荐

  1. java 使用poi将PPT转为图片,在线预览PPT

    在线预览PPT,我的思路为java 使用poi将PPT转为图片,图片存储到指定的文件夹下面,然后返回生成的图片名称集合,将图片路径遍历到前台的html标签上,用HTML前台模仿画一个PPT框架,操作图 ...

  2. Java使用poi操作ppt

    Java使用poi操作ppt https://editor.csdn.net/md/?articleId=117926694 上一篇中写了操作文本框和插入图片 这一篇主要是如何在有模板的情况下如替换文 ...

  3. Java基于POI对PPT的基本操作

    Java基于POI对PPT的基本操作 在Java中对PPT文件进行操作的话,我使用的是Apache的开源项目POI.该项目的功能主要是使用Java开发或生成微软办公文件,比如:Word.Excel.P ...

  4. java通过poi操作ppt

    Java POI导出ppt简单实现 Java使用poi组件导出ppt报表幻灯片,poi导出pptx表格可以合并单元格,输出老版本的ppt不支持合并单元格, 下面介绍poi导出pptx的一些常用功能, ...

  5. java使用poi操作ppt(导入,导出,读取,添加,拼接,替换文本,页面排序)

    POI操作PPT文档(导入,导出,读取,添加,拼接,替换文本,页面排序) 注意:直接读取.pptx文件时不能使用${user}这样的作为替换标识,在读取.pptx文件时会解析成三段文本"${ ...

  6. java 流量单位转换_将内容转换为持续流量的五种最佳方法

    java 流量单位转换 Websites that have focused on content marketing have done really well for themselves. We ...

  7. Java 利用POI操作PPT

    一, 解析PPT文件中的图片 import java.io.File; import java.io.FileOutputStream; import org.apache.poi.hslf.HSLF ...

  8. Java使用poi导出ppt文件

    导入poi相关依赖 <!--导入依赖--><dependencies><dependency><groupId>org.apache.poi</g ...

  9. java使用poi导出ppt图表——环形图/空心饼图

    目录 前言 使用java poi导出图表,就是找不到环形图/空心饼图怎么做的(或者是我没找到),找到的都是饼图,柱图,线图等. 所以就简单说一下怎么导出的. 一.导入poi相关jar包 二.先创建ex ...

  10. java 使用 poi 实现ppt预览功能(ppt转图片存储,返回给前端)

    1.新增控制器 @NotFilter@ApiOperation("根据课件转化PPT再返回图片数组")@PostMapping("/reviewPPt/{fileId}& ...

最新文章

  1. python绘制散点图-matplotlib在python上绘制3D散点图实例详解
  2. asp.net mvc5 设置Area下的为启动页
  3. 【客户下单】后台提供webservice服务接收数据
  4. gRPC真要取代WebApi了,你还学得过来吗?
  5. linux下rman自动备份,linux 下rman 自动备份
  6. java错误:需要《标识符》
  7. 软件测试实例:登录功能怎么设计测试用例
  8. opencv 学习之 液晶数字识别
  9. TF卡,Micro SD卡,Micro SDHC卡
  10. 模拟慢网速的一些测试工具介绍(Fiddler|NetLimiter|Network Delay Simulator)
  11. 早间简评:黄金亚盘快速下跌   1300关口岌岌可危?
  12. 40岁后吃不胖的秘诀 济阳高穗饮食理论
  13. oracle存储过程语法累加,Oracle 存储过程语法总结及练习
  14. echarts地图自定义icon图标并在图标内自定义文字
  15. 单片机串口连接电脑,USB转TTL线的使用
  16. C#连接MySQL数据库详细步骤
  17. 小功率直流电机上并电容的作用
  18. 前端网络——get和post的区别
  19. 百度地图基本使用及画线路轨迹播放问题
  20. linux进程间通信有kindle版的,计算机网络6寸pdf适合kindle-1.pdf

热门文章

  1. 【寻址方式】基地址与偏移地址的详细解释
  2. 泰坦尼克号沉没之谜,用数据还原真相——Titanic获救率分析(用pyecharts)
  3. mysql查询语句中使用星号真的慢的要死?
  4. Revisiting Domain Generalized Stereo Matching Networks from a FeatureConsistency Perspective
  5. 【mysql数据类型】uint和int的区别
  6. 数据库实体、关系(一对一实现方式、一对多实现方式、多对多实现方式)
  7. 英伟达史上最便宜AI硬件发布:可运行所有AI模型,算力472 GFLOPS,功耗5瓦
  8. ICP算法学习笔记(原理加公式理解)
  9. html5 手机剪切板,H5页面在手机端如何实现复制粘贴板功能
  10. 李乐为担任BCF理事