上传.PDF文件转为.DOCX文件

上传.PDF文件转为.DOCX文件,pdf中文件包含了图片和样式,转换为docx后的格式不错乱。

依赖了破解版的jar包:aspose-pdf-22.4.cracked.jar。该jar包可以在我的资源里下载。

代码如下:

复制代码
package io.cxwm.commons.tools.utils;
import com.aspose.pdf.Document;
import com.aspose.pdf.SaveFormat;
import org.springframework.mock.web.MockMultipartFile;
import org.springframework.util.FileCopyUtils;
import org.springframework.web.multipart.MultipartFile;

import java.io.*;

public class PdfUtil {

    public static void main(String[] args) {
        String pdf = "C:\\Users\\Wxian\\Desktop\\商务文件.pdf";
        pdf2docx(pdf);
    }

    /**
     * pdf转doc
     * @param pdfPath pdf文件路径
     */
    public static String pdf2docx(String pdfPath) {
        long old = System.currentTimeMillis();
        String wordPath = "";
        try {
            //新建一个word文档
            wordPath = pdfPath.substring(0,pdfPath.lastIndexOf("."))+".docx";
            FileOutputStream os = new FileOutputStream(wordPath);
            //doc是将要被转化的word文档
            Document doc = new Document(pdfPath);
            //全面支持DOC, DOCX, OOXML, RTF HTML, OpenDocument, PDF, EPUB, XPS, SWF 相互转换
            doc.save(os, SaveFormat.DocX);
            os.close();
            //转化用时
            long now = System.currentTimeMillis();
            System.out.println("Pdf 转 Word 共耗时:" + ((now - old) / 1000.0) + "秒");
        } catch (Exception e) {
            System.out.println("Pdf 转 Word 失败...");
            e.printStackTrace();
        }
        return wordPath;
    }

    /**
     * 删除本地文件
     * @param filePath 本地文件路径
     */
    public static void delete(String filePath) {
        File file = new File(filePath);
        if (file.exists()) {
            if (file.canWrite()) {
                boolean deleted = file.delete();
                if (deleted) {
                    System.out.println("文件删除成功");
                } else {
                    System.out.println("文件删除失败");
                }
            } else {
                System.out.println("文件不可写,无法删除");
            }
        } else {
            System.out.println("文件不存在,无法删除");
        }
    }

    /**
     * pdf文件转doc文件
     * @param file pdf文件
     * @return
     * @throws IOException
     */
    public static MultipartFile pdfCoverDocx(MultipartFile file) throws IOException {
        String projectPath = System.getProperty("user.dir");
        String pdfPath = projectPath + File.separator + file.getOriginalFilename();
        saveMultipartFileToLocal(file,pdfPath);
        String wordPath = PdfUtil.pdf2docx(pdfPath);
        File targetFile = new File(wordPath);
        file = convertFileToMultipartFile(targetFile);
        PdfUtil.delete(pdfPath);
        PdfUtil.delete(wordPath);
        return file;
    }

    /**
     * multipartFile转File
     * @param multipartFile
     * @return
     * @throws IOException
     */
    public static File convertMultipartFileToFile(MultipartFile multipartFile) throws IOException {
        File file = new File(multipartFile.getOriginalFilename());
        file.createNewFile();
        FileCopyUtils.copy(multipartFile.getInputStream(), new FileOutputStream(file));
        return file;
    }

    /**
     * File转multipartFile
     * @param file
     * @return
     * @throws IOException
     */
    public static MultipartFile convertFileToMultipartFile(File file) throws IOException {
        FileInputStream input = new FileInputStream(file);
        MultipartFile multipartFile = new MockMultipartFile("file",
                file.getName(), "application/octet-stream", input);
        return multipartFile;
    }

    /**
     * 保存文件到本地
     * @param multipartFile 文件
     * @param targetPath 本地路径
     * @throws IOException
     */
    public static void saveMultipartFileToLocal(MultipartFile multipartFile, String targetPath) throws IOException {
        File targetFile = new File(targetPath);
        try (InputStream inputStream = multipartFile.getInputStream();
             OutputStream outputStream = new FileOutputStream(targetFile)) {
            byte[] buffer = new byte[1024];
            int bytesRead;
            while ((bytesRead = inputStream.read(buffer)) != -1) {
                outputStream.write(buffer, 0, bytesRead);
            }
        }
    }

}
相关推荐
未来之窗软件服务18 分钟前
计算机二级[英文]-C 字符串移动—东方仙盟
c语言·开发语言·仙盟创梦ide·东方仙盟
Wang's Blog20 分钟前
Java框架快速入门: Spring Security+OAuth2之过滤器与过滤器链
java·开发语言·spring
谢尔登40 分钟前
01_Java基础速通
java·开发语言
前端炒粉41 分钟前
DOM 常用 API 速查表
开发语言·javascript·ecmascript
lemon_sjdk1 小时前
javafx-Image图像(2)
java·javafx
小七在进步2 小时前
C++入门(2)
java·jvm·c++
To0R2 小时前
Agent 上线前必须过的五道门(附 Spring Boot 实现)
java
vipxieliang2 小时前
固定电话验证详解:区号、号码、分机号的完整验证
java·spring boot
步行cgn2 小时前
Spring Boot 主入口类上的 @Enable 和 @Scan 注解详解
java·spring boot·后端
lhldsg2 小时前
全民健身解决方案软件开发实战:从架构设计到部署指南
java·前端·数据库·小程序