上传.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);
            }
        }
    }

}
相关推荐
学到头秃的suhian4 小时前
Maven
java·maven
QX_hao4 小时前
【Go】--反射(reflect)的使用
开发语言·后端·golang
小坏讲微服务4 小时前
Docker-compose 搭建Maven私服部署
java·spring boot·后端·docker·微服务·容器·maven
chxii4 小时前
Maven 详解(下)
java·maven
inferno4 小时前
Maven基础(二)
java·开发语言·maven
杨武博4 小时前
关于maven中pom依赖冲突问题记录
java·maven
我是李武涯4 小时前
从`std::mutex`到`std::lock_guard`与`std::unique_lock`的演进之路
开发语言·c++
史不了6 小时前
静态交叉编译rust程序
开发语言·后端·rust
陈果然DeepVersion6 小时前
Java大厂面试真题:Spring Boot+Kafka+AI智能客服场景全流程解析(十)
java·spring boot·ai·kafka·面试题·向量数据库·rag
读研的武6 小时前
DashGo零基础入门 纯Python的管理系统搭建
开发语言·python