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")));
            }*/
        }
}
相关推荐
阿伟*rui2 小时前
配置管理,雪崩问题分析,sentinel的使用
java·spring boot·sentinel
XiaoLeisj4 小时前
【JavaEE初阶 — 多线程】单例模式 & 指令重排序问题
java·开发语言·java-ee
paopaokaka_luck4 小时前
【360】基于springboot的志愿服务管理系统
java·spring boot·后端·spring·毕业设计
dayouziei4 小时前
java的类加载机制的学习
java·学习
Yaml46 小时前
Spring Boot 与 Vue 共筑二手书籍交易卓越平台
java·spring boot·后端·mysql·spring·vue·二手书籍
小小小妮子~6 小时前
Spring Boot详解:从入门到精通
java·spring boot·后端
hong1616886 小时前
Spring Boot中实现多数据源连接和切换的方案
java·spring boot·后端
aloha_7896 小时前
从零记录搭建一个干净的mybatis环境
java·笔记·spring·spring cloud·maven·mybatis·springboot
hairenjing11236 小时前
使用 Mac 数据恢复从 iPhoto 图库中恢复照片
windows·stm32·嵌入式硬件·macos·word
记录成长java7 小时前
ServletContext,Cookie,HttpSession的使用
java·开发语言·servlet