最近要将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官网

Spring boot使用Aspose.Slides操作ppt转PDF、转图片的更多相关文章

  1. Spring Boot(二):数据库操作

    本文主要讲解如何通过spring boot来访问数据库,本文会演示三种方式来访问数据库,第一种是JdbcTemplate,第二种是JPA,第三种是Mybatis.之前已经提到过,本系列会以一个博客系统 ...

  2. Aspose.Words操作word生成PDF文档

    Aspose.Words操作word生成PDF文档 using Aspose.Words; using System; using System.Collections.Generic; using ...

  3. spring boot编程思想(核心篇) pdf 下载 it教程

    资料简介:本书是<Spring Boot 编程思想>的核心篇,开篇总览Spring Boot核心特性,接着讨论自动装配(Auto-Configuration)与SpringApplicat ...

  4. Spring Boot实战之数据库操作

    上篇文章中已经通过一个简单的HelloWorld程序讲解了Spring boot的基本原理和使用.本文主要讲解如何通过spring boot来访问数据库,本文会演示三种方式来访问数据库,第一种是Jdb ...

  5. spring boot ----> jpa连接和操作mysql数据库

    环境: centos6.8,jdk1.8.0_172,maven3.5.4,vim,spring boot 1.5.13,mysql-5.7.23 1.引入jpa起步依赖和mysql驱动jar包 &l ...

  6. spring boot通过Jedis来操作redis

    idea中新建spring boot项目,引入jedis依赖 <!-- https://mvnrepository.com/artifact/redis.clients/jedis --> ...

  7. 使用spring boot中的JPA操作数据库

    前言 Spring boot中的JPA 使用的同学都会感觉到他的强大,简直就是神器一般,通俗的说,根本不需要你写sql,这就帮你节省了很多时间,那么下面我们来一起来体验下这款神器吧. 一.在pom中添 ...

  8. Spring Boot 使用 Dom4j XStream 操作 Xml

    Xml 现在仍然占据着比较重要的地位,比如微信接口中使用了 Xml 进行消息的定义.本章重点讨论 Xml 的新建.编辑.查找.转化,可以这么理解,本章是使用了 dom4j.xstream 也是在开发者 ...

  9. 阿里云服务器 配置 tomcat 发布spring boot项目 的具体操作 【使用公网ip】

    1.前言 spring boot 转成war包 后用tomcat发布的具体操作在我另一篇随笔有详细记载,不论是window系统还是Linux系统,tomcat的发布配置都是一样的,所以这里不具体讲这个 ...

随机推荐

  1. 51nod 2500 后面第一个大于

    小b有一个长度为n的序列t,现在她对于每个i,求最小的正数j满足i+j≤ni+j≤n且ti+j>titi+j>ti,输出j,如果不存在这样的j,则输出0. 样例解释: 对于i=1,t2&g ...

  2. C# 验证控件的使用RequiredFieldValidator&CompareValidator

    使用验证控件可以向服务器提交表单数据时验证表单内容,下面以RequiredFieldValidator和CompareValidator为例说明验证控件的用法 RequiredFieldValidat ...

  3. Jupyter Notebook(持续更新)

    1.引用Pandas import pandas as pd 2.创建DataFrame bb=pd.DataFrame(enron_data) 3.查看列 & 行 dataFrame.sha ...

  4. 使用vue-cli3搭建项目过程

    一.搭建前准备 node.js版本为8.9+: 安装模块:npm install -g n // 安装模块 这个模块是专门用来管理node.js版本的: 若原先已经安装,则更细模块:n stable ...

  5. know thself

  6. 2-STM32+W5500+GPRS(2G)基础篇-(W5500-学习说明)

    https://www.cnblogs.com/yangfengwu/p/11220042.html 定版: 这一节先直接说明怎么把官方的源码应用在我做的这块开发板上 https://www.w550 ...

  7. CF1172E Nauuo and ODT

    CF1172E Nauuo and ODT 神仙题orz 要算所有路径的不同颜色之和,多次修改,每次修改后询问. 对每种颜色\(c\)计算多少条路径包含了这个颜色,不好算所以算多少条路径不包含这个颜色 ...

  8. gulp/webpack运行sass报错解决方法

    帮同事安装gulp和webpack运行环境,使用cnpm install安装node-sass之后,运行项目总是报错,提示vendor目录不存在,几番百度之后,找到处理方法,这里记录一笔,防止以后遇到 ...

  9. 安卓入门教程(十三)-Activity

    已经发表个人公众号 什么是Activity? Android是由Activity,Service,Content,Provider等组件组成,其中要讲的就是Activity组件,这是最基本,且常用的组 ...

  10. Linux:读取文件,每行拆分,并比较拆分数组长度

    读取文件,每行拆分,并比较拆分数组长度 #!/bin/bash FILENAME=./.txt function While_read_LINE(){ cat $FILENAME | while re ...