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")));
            }*/
        }
}
相关推荐
桦说编程3 小时前
Java 中如何创建不可变类型
java·后端·函数式编程
lifallen3 小时前
Java Stream sort算子实现:SortedOps
java·开发语言
IT毕设实战小研3 小时前
基于Spring Boot 4s店车辆管理系统 租车管理系统 停车位管理系统 智慧车辆管理系统
java·开发语言·spring boot·后端·spring·毕业设计·课程设计
没有bug.的程序员4 小时前
JVM 总览与运行原理:深入Java虚拟机的核心引擎
java·jvm·python·虚拟机
甄超锋4 小时前
Java ArrayList的介绍及用法
java·windows·spring boot·python·spring·spring cloud·tomcat
阿华的代码王国5 小时前
【Android】RecyclerView复用CheckBox的异常状态
android·xml·java·前端·后端
Zyy~5 小时前
《设计模式》装饰模式
java·设计模式
A尘埃5 小时前
企业级Java项目和大模型结合场景(智能客服系统:电商、金融、政务、企业)
java·金融·政务·智能客服系统
青云交5 小时前
Java 大视界 -- 基于 Java 的大数据可视化在城市交通拥堵治理与出行效率提升中的应用(398)
java·大数据·flink·大数据可视化·拥堵预测·城市交通治理·实时热力图
CHEN5_026 小时前
【Java基础面试题】Java基础概念
java·开发语言