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