java excel、word、PPT转换成pdf预览

复制代码
先引入包:[lib下载地址](https://mp.csdn.net/mp_download/manage/download/UpDetailed)


复制代码
Controller
    public AjaxResult fileToPdf(@RequestBody VerifyCode url, HttpServletResponse response, HttpServletRequest request) throws IOException {
        String fileUrl = request.getScheme() + "://" + request.getServerName() + ":" + port + fileDir + url.getFileName().split("\\.")[0]+ ".pdf";
        String fileToPdfUrl = fileToPdf + url.getFileName().split("\\.")[0] + ".pdf";
        File newFile = new File(fileToPdfUrl);
        if(newFile.exists()){
            return AjaxResult.success(fileUrl);
        }
        File file = new File(fileToPdf);
        if(!file.exists()){
            file.mkdirs();
        }
        String suffix = url.getUrl().substring(url.getUrl().lastIndexOf("."));
        String type = FileTransForUtils.getResourceTypesDocument(suffix);
        if("word".equals(type)){
            return AjaxResult.success(FileTransForUtils.word3Pdf(url.getUrl(),response.getOutputStream(),fileToPdfUrl,fileUrl));
        }else if("excel".equals(type)){
            return AjaxResult.success(FileTransForUtils.excel3pdf(url.getUrl(), response.getOutputStream(),fileToPdfUrl,fileUrl));
        }else if("ppt".equals(type)){
            return AjaxResult.success(FileTransForUtils.ppt3pdf(url.getUrl(),response.getOutputStream(),fileToPdfUrl,fileUrl));
        }else {
            return AjaxResult.success(fileUrl);
        }
    }
java 复制代码
package com.det.utils;

import com.aspose.cells.Workbook;
import com.aspose.slides.Presentation;
import com.aspose.words.Document;
import com.aspose.words.License;
import com.aspose.words.SaveFormat;
import com.det.common.utils.file.FileUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Configuration;

import java.io.*;
import java.nio.charset.StandardCharsets;
import java.rmi.ServerException;

/**
 * @Author: lsx
 * @createDate: 2023/11/5 10:49
 * @description:
 */
public class FileTransForUtils {

        private static final Logger logger = LoggerFactory.getLogger(FileTransForUtils.class);
        //word转PDF
        public synchronized static String word3Pdf(String wordPath, OutputStream outputStream,String fileName,String fileUrl) throws ServerException {
            if (!getLicense("word")) {          // 验证License 若不验证则转化出的pdf文档会有水印产生
                throw new ServerException("验证License失败。");
            }
            try {
                long old = System.currentTimeMillis();
                InputStream inputStreamFromUrl = FileUtils.getInputStreamFromUrl(wordPath);
                //Address是将要被转化的word文档
                Document doc = new Document(inputStreamFromUrl);
                //新建一个pdf文档
                File file = new File(fileName);
                FileOutputStream os = new FileOutputStream(file);
                //全面支持DOC, DOCX, OOXML, RTF HTML, OpenDocument, PDF, EPUB,
//                doc.save(outputStream, SaveFormat.PDF);
                doc.save(os, SaveFormat.PDF);
                // XPS, SWF 相互转换
                long now = System.currentTimeMillis();
                os.close();
                outputStream.flush();
                outputStream.close();
                logger.info("word共耗时:" + ((now - old) / 1000.0) + "秒");  //转化用时
            } catch (Exception e) {
                logger.error(String.valueOf(e));
                e.printStackTrace();
            }
            return fileUrl;
        }
        //excel转PDF
        public synchronized static String excel3pdf(String excelPath, OutputStream outputStream,String fileName,String fileUrl) throws ServerException {
            if (!getLicense("excel")) { // 验证License 若不验证则转化出的pdf文档会有水印产生
                throw new ServerException("验证License失败。");
            }
            try {
                long old = System.currentTimeMillis();
                InputStream inputStreamFromUrl = FileUtils.getInputStreamFromUrl(excelPath);
                Workbook wb = new Workbook(inputStreamFromUrl);// 原始excel路径
                //新建一个pdf文档
                File file = new File(fileName);
                FileOutputStream os = new FileOutputStream(file);
//                wb.save(outputStream,com.aspose.cells.SaveFormat.PDF);
                wb.save(os,com.aspose.cells.SaveFormat.PDF);
                long now = System.currentTimeMillis();
                outputStream.flush();
                outputStream.close();
                os.close();
                logger.info("excel共耗时:" + ((now - old) / 1000.0) + "秒");  //转化用时
            } catch (Exception e) {
                logger.error(String.valueOf(e));
                e.printStackTrace();
            }
            return fileUrl;
        }
        //ppt转PDF
        public synchronized static String ppt3pdf(String pptPath, OutputStream outputStream,String fileName,String fileUrl) throws ServerException {
            // 验证License
            if (!getLicense("ppt")) {
                throw new ServerException("验证License失败。");
            }
            FileOutputStream os = null;
            try {
                long old = System.currentTimeMillis();
                InputStream inputStreamFromUrl = FileUtils.getInputStreamFromUrl(pptPath);
                Presentation pres = new Presentation(inputStreamFromUrl);//输入ppt路径
                //IFontsManager fontsManager = pres.getFontsManager();
                //新建一个pdf文档
                File file = new File(fileName);
                os = new FileOutputStream(file);
//                pres.save(outputStream,com.aspose.slides.SaveFormat.Pdf);
                pres.save(os,com.aspose.slides.SaveFormat.Pdf);
                outputStream.flush();
                outputStream.close();
                long now = System.currentTimeMillis();
                logger.info("ppt共耗时:" + ((now - old) / 1000.0) + "秒");  //转化用时
            } catch (Exception e) {
                logger.error(String.valueOf(e));
                e.printStackTrace();
            }finally {
                try {
                    os.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
            return fileUrl;
        }
        //剔除水印
        private static boolean getLicense(String type) {
            boolean result = false;
            try {
                // 凭证
                String license =
                        "<License>\n" +
                                "  <Data>\n" +
                                "    <Products>\n" +
                                "      <Product>Aspose.Total for Java</Product>\n" +
                                "      <Product>Aspose.Words for Java</Product>\n" +
                                "    </Products>\n" +
                                "    <EditionType>Enterprise</EditionType>\n" +
                                "    <SubscriptionExpiry>20991231</SubscriptionExpiry>\n" +
                                "    <LicenseExpiry>20991231</LicenseExpiry>\n" +
                                "    <SerialNumber>8bfe198c-7f0c-4ef8-8ff0-acc3237bf0d7</SerialNumber>\n" +
                                "  </Data>\n" +
                                "  <Signature>sNLLKGMUdF0r8O1kKilWAGdgfs2BvJb/2Xp8p5iuDVfZXmhppo+d0Ran1P9TKdjV4ABwAgKXxJ3jcQTqE/2IRfqwnPf8itN8aFZlV3TJPYeD3yWE7IT55Gz6EijUpC7aKeoohTb4w2fpox58wWoF3SNp6sK6jDfiAUGEHYJ9pjU=</Signature>\n" +
                                "</License>";
                InputStream is = new ByteArrayInputStream(license.getBytes(StandardCharsets.UTF_8));
                if(type.equals("word")){
                    License asposeLic = new License();
                    asposeLic.setLicense(is);
                }else if (type.equals("excel")){
                    com.aspose.cells.License asposeLic = new com.aspose.cells.License();
                    asposeLic.setLicense(is);
                }else if (type.equals("ppt")){
                    com.aspose.slides.License aposeLic = new com.aspose.slides.License();
                    aposeLic.setLicense(is);
                }
                result = true;
            } catch (Exception e) {
                logger.error(String.valueOf(e));
                e.printStackTrace();
                return false;
            }
            return result;
        }
        /**
         * 判断资源类型文档类
         */
        public static String getResourceTypesDocument(String suffix) {
            String type = null;
            switch (suffix) {
                //文档类型
                case ".doc":
                case ".docx":
                case ".txt":
                    type = "word";
                    break;
                case ".xls":
                case ".xlsx":
                    type = "excel";
                    break;
                case ".ppt":
                case ".pptx":
                    type = "ppt";
                    break;
            }
            return type;
        }

        public static void main(String[] args) throws FileNotFoundException {
            String inputPath = "C:\\Users\\detong\\Desktop\\安全活动记录.docx";
//            String outputPath = "C:\\Users\\detong\\Desktop\\焊工作业教育培训2023.pdf";
            String suffix = inputPath.substring(inputPath.lastIndexOf("."));
            String type = getResourceTypesDocument(suffix);
            /*if("word".equals(type)){
                word3Pdf(inputPath,new FileOutputStream(new File("C:\\Users\\detong\\Desktop\\安全活动记录.word")));
            }else if("excel".equals(type)){
                excel3pdf(inputPath,new FileOutputStream(new File("C:\\Users\\detong\\Desktop\\安全活动记录.excel")));
            }else if("ppt".equals(type)){
                ppt3pdf(inputPath,new FileOutputStream(new File("C:\\Users\\detong\\Desktop\\安全活动记录.pdf")));
            }*/
        }
}
相关推荐
纪莫4 分钟前
技术面:Spring (bean的生命周期、创建方式、注入方式、作用域)
java·spring·java面试⑧股
We....12 分钟前
Java多线程分块下载文件
java·开发语言
不秃的开发媛13 分钟前
Java连接池详解:从Oracle到TiDB的随缘之旅
java·oracle·tidb
Pluchon36 分钟前
硅基计划3.0 Map类&Set类
java·开发语言·数据结构·算法·哈希算法·散列表
Angelyb1 小时前
微服务保护和分布式事务
java·微服务·架构
七夜zippoe1 小时前
缓存三大劫攻防战:穿透、击穿、雪崩的Java实战防御体系(一)
java·开发语言·缓存
帧栈2 小时前
开发避坑指南(46):Java Stream 对List的BigDecimal字段进行求和
java
重生之我是Java开发战士2 小时前
【数据结构】Java集合框架:List与ArrayList
java·数据结构·list
爱干饭的boy2 小时前
手写Spring底层机制的实现【初始化IOC容器+依赖注入+BeanPostProcesson机制+AOP】
java·数据结构·后端·算法·spring
影子24012 小时前
java jdbc连接sqlserver2008R2版本数据库报错,驱动程序无法通过使用安全套接字层(SSL)加密与 SQL Server 建立安全连接
java·数据库·ssl