zoukankan      html  css  js  c++  java
  • 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官网

  • 相关阅读:
    个人博客作业-软件案例分析
    个人项目
    个人博客作业
    软件工程作业一
    BUAAOO第四单元总结
    BUAAOO第三单元总结
    BUAAOO第二单元总结之电梯问题
    BUAAOO第一单元的总结
    个人总结
    第三次个人编程作业
  • 原文地址:https://www.cnblogs.com/baby123/p/10863759.html
Copyright © 2011-2022 走看看