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")));
            }*/
        }
}
相关推荐
程序定小飞33 分钟前
基于springboot的学院班级回忆录的设计与实现
java·vue.js·spring boot·后端·spring
攀小黑44 分钟前
基于若依-内容管理动态修改,通过路由字典配置动态管理
java·vue.js·spring boot·前端框架·ruoyi
青云交1 小时前
Java 大视界 -- 基于 Java 的大数据可视化在城市空气质量监测与污染溯源中的应用
java·spark·lstm·可视化·java 大数据·空气质量监测·污染溯源
开开心心就好1 小时前
微软官方出品:免费数据恢复工具推荐
网络·笔记·microsoft·pdf·word·音视频·symfony
森语林溪2 小时前
大数据环境搭建从零开始(十七):JDK 17 安装与配置完整指南
java·大数据·开发语言·centos·vmware·软件需求·虚拟机
郝开2 小时前
Spring Boot 2.7.18(最终 2.x 系列版本)1 - 技术选型:连接池技术选型对比;接口文档技术选型对比
java·spring boot·spring
小猪咪piggy3 小时前
【项目】小型支付商城 MVC/DDD
java·jvm·数据库
知兀3 小时前
【Spring/SpringBoot】SSM(Spring+Spring MVC+Mybatis)方案、各部分职责、与Springboot关系
java·spring boot·spring
向葭奔赴♡3 小时前
Spring IOC/DI 与 MVC 从入门到实战
java·开发语言
早退的程序员3 小时前
记一次 Maven 3.8.3 无法下载 HTTP 仓库依赖的排查历程
java·http·maven