最近要将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
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官网
参考阅读
发表评论