Spring boot使用Aspose.Slides操作ppt转PDF、转图片
最近要将ppt转为PDF和图片,Apache poi ,jacob都试了下
Apache poi 转图片乱码,处理了,还会存在部分乱码
jacob对系统依赖比较大,必须是windows还得安装MS Office,如果同时安装了WPS,还会调用WPS处理,还出现异常
因此换成了Aspose.Slides,这个是商用的,带有水印
本文使用的是去除水印的 aspose.slides-19.3.jar( 获取资源 提取码:zhb8)
去除水印的方法 查看
1.创建spring boot项目
2.准备
(1)导入Aspose.Slides的jar包
(2)将license.xml,放到src/main/resources下
(3)修改pom.xml
<dependency> <groupId>aspose.slides</groupId> <artifactId>slides</artifactId> <version>19.3</version> <scope>system</scope> <systemPath>${basedir}/lib/aspose.slides-19.3.jar</systemPath> </dependency>
3.转PDF
目标文件data/CoreThink.pptx
pdf保存data/CoreThink.pdf
package com.slides.ppt.controller; import com.aspose.slides.License; import com.aspose.slides.Presentation; import com.aspose.slides.SaveFormat; import org.springframework.web.bind.annotation.*; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.InputStream; @RestController @RequestMapping("/api") public class TestOperation { private static InputStream license; /** * 获取license * * @return */ public static boolean getLicense() { boolean result = false; license = TestOperation.class.getClassLoader().getResourceAsStream("license.xml"); if (license != null) { License aposeLic = new License(); aposeLic.setLicense(license); result = true; } return result; } /** * 转PDF * * @return */ @PostMapping("/convertPDF") public String convertPDF() { // 验证License if (!getLicense()) { return "验证License失败"; } try { FileInputStream fileInput = new FileInputStream("data/CoreThink.pptx"); Presentation pres = new Presentation(fileInput); FileOutputStream out = new FileOutputStream(new File("data/CoreThink.pdf")); pres.save(out, SaveFormat.Pdf); out.close(); } catch (Exception e) { return e.getMessage(); } return "转换成功"; } }
4.转图片
目标文件data/CoreThink.pptx
图片保存路径为 文件名_JPG即CoreThink_JPG
package com.slides.ppt.controller; import com.aspose.slides.ISlide; import com.aspose.slides.License; import com.aspose.slides.Presentation; import org.springframework.web.bind.annotation.*; import javax.imageio.ImageIO; import java.awt.image.BufferedImage; import java.io.File; import java.io.FileInputStream; import java.io.InputStream; @RestController @RequestMapping("/api") public class TestOperation { private static InputStream license; /** * 获取license * * @return */ public static boolean getLicense() { boolean result = false; license = TestOperation.class.getClassLoader().getResourceAsStream("license.xml"); if (license != null) { License aposeLic = new License(); aposeLic.setLicense(license); result = true; } return result; } /** * 转Image * * @return */ @PostMapping("/convertImage") public String convertImage() { // 验证License if (!getLicense()) { return "验证License失败"; } String fileName = "data/CoreThink.pptx"; File file = new File(fileName); if (!file.exists()) { return "转换文件不存在"; } String filePath = file.getParent()+File.separator; String dest = filePath + getFileNameNoEx(file.getName())+"_JPG"; File destPath = new File(dest); if (!destPath.exists()) { destPath.mkdir(); } try { FileInputStream fileInput = new FileInputStream(fileName); Presentation pres = new Presentation(fileInput); int i; for (i = 0; i < pres.getSlides().size(); i++) { ISlide slide = pres.getSlides().get_Item(i); int height = (int)(pres.getSlideSize().getSize().getHeight()-150); int width = (int)(pres.getSlideSize().getSize().getWidth()-150); BufferedImage image = slide.getThumbnail(new java.awt.Dimension(width, height)); //每一页输出一张图片 File outImage = new File(dest+File.separator + (i+1) + ".JPG"); ImageIO.write(image, "JPG", outImage); } } catch (Exception e) { return e.getMessage(); } return "转换成功"; } /** * 获取文件名,去除扩展名的 * * @param filename * @return */ private String getFileNameNoEx(String filename) { if ((filename != null) && (filename.length() > 0)) { int dot = filename.lastIndexOf('.'); if ((dot > -1) && (dot < (filename.length()))) { return filename.substring(0, dot); } } return filename; } }
说明:
如果没有验证License,输出的会带水印的,因此要保证 license.xml 能读取成功,并做验证
注意:
资源文件只允许学习使用,不得用于商业用途,请购买授权正版 aspose官网
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 【杭电多校比赛记录】2025“钉耙编程”中国大学生算法设计春季联赛(1)