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