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

本文介绍了一个Java程序,利用AsposePDF的破解版jar包(aspose-pdf-22.4.cracked.jar)实现PDF文件包含图片和样式的转换为DOCX格式,同时处理文件操作和异常处理。
摘要由CSDN通过智能技术生成

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

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值