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")));
            }*/
        }
}
相关推荐
专注API从业者2 分钟前
Open Claw 京东商品监控选品实战:一键抓取、实时监控、高效选品
java·服务器·数据库
摇滚侠19 分钟前
DBeaver 导入数据库 导入 SQL 文件 MySQL 备份恢复
java·数据库·mysql
keep one's resolveY43 分钟前
SpringBoot实现重试机制的四种方案
java·spring boot·后端
天空属于哈夫克31 小时前
企业微信API常见的错误和解决方案
java·数据库·企业微信
摇滚侠2 小时前
VMvare 虚拟机 Oracle19c 安装步骤,远程连接 Oracle19c,百度网盘安装包
java·oracle
梁萌2 小时前
idea报错找不到XX包的解决方法
java·intellij-idea·启动报错·缺少包
Agent产品评测局2 小时前
生产排期与MES/ERP系统打通,实操方法详解 —— 2026企业级智能体自动化选型与实战指南
java·运维·人工智能·ai·chatgpt·自动化
阿丰资源3 小时前
基于Spring Boot的电影城管理系统(直接运行)
java·spring boot·后端
呱牛do it3 小时前
企业级门户网站设计与实现:基于SpringBoot + Vue3的全栈解决方案(Day 8)
java
消失的旧时光-19434 小时前
Spring Boot 工程化进阶:统一返回 + 全局异常 + AOP 通用工具包
java·spring boot·后端·aop·自定义注解