先引入包:[lib下载地址](https://mp.csdn.net/mp_download/manage/download/UpDetailed)
Controller
public AjaxResult fileToPdf(@RequestBody VerifyCode url, HttpServletResponse response, HttpServletRequest request) throws IOException {
String fileUrl = request.getScheme() + "://" + request.getServerName() + ":" + port + fileDir + url.getFileName().split("\\.")[0]+ ".pdf";
String fileToPdfUrl = fileToPdf + url.getFileName().split("\\.")[0] + ".pdf";
File newFile = new File(fileToPdfUrl);
if(newFile.exists()){
return AjaxResult.success(fileUrl);
}
File file = new File(fileToPdf);
if(!file.exists()){
file.mkdirs();
}
String suffix = url.getUrl().substring(url.getUrl().lastIndexOf("."));
String type = FileTransForUtils.getResourceTypesDocument(suffix);
if("word".equals(type)){
return AjaxResult.success(FileTransForUtils.word3Pdf(url.getUrl(),response.getOutputStream(),fileToPdfUrl,fileUrl));
}else if("excel".equals(type)){
return AjaxResult.success(FileTransForUtils.excel3pdf(url.getUrl(), response.getOutputStream(),fileToPdfUrl,fileUrl));
}else if("ppt".equals(type)){
return AjaxResult.success(FileTransForUtils.ppt3pdf(url.getUrl(),response.getOutputStream(),fileToPdfUrl,fileUrl));
}else {
return AjaxResult.success(fileUrl);
}
}
package com.det.utils;
import com.aspose.cells.Workbook;
import com.aspose.slides.Presentation;
import com.aspose.words.Document;
import com.aspose.words.License;
import com.aspose.words.SaveFormat;
import com.det.common.utils.file.FileUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Configuration;
import java.io.*;
import java.nio.charset.StandardCharsets;
import java.rmi.ServerException;
/**
* @Author: lsx
* @createDate: 2023/11/5 10:49
* @description:
*/
public class FileTransForUtils {
private static final Logger logger = LoggerFactory.getLogger(FileTransForUtils.class);
//word转PDF
public synchronized static String word3Pdf(String wordPath, OutputStream outputStream,String fileName,String fileUrl) throws ServerException {
if (!getLicense("word")) { // 验证License 若不验证则转化出的pdf文档会有水印产生
throw new ServerException("验证License失败。");
}
try {
long old = System.currentTimeMillis();
InputStream inputStreamFromUrl = FileUtils.getInputStreamFromUrl(wordPath);
//Address是将要被转化的word文档
Document doc = new Document(inputStreamFromUrl);
//新建一个pdf文档
File file = new File(fileName);
FileOutputStream os = new FileOutputStream(file);
//全面支持DOC, DOCX, OOXML, RTF HTML, OpenDocument, PDF, EPUB,
// doc.save(outputStream, SaveFormat.PDF);
doc.save(os, SaveFormat.PDF);
// XPS, SWF 相互转换
long now = System.currentTimeMillis();
os.close();
outputStream.flush();
outputStream.close();
logger.info("word共耗时:" + ((now - old) / 1000.0) + "秒"); //转化用时
} catch (Exception e) {
logger.error(String.valueOf(e));
e.printStackTrace();
}
return fileUrl;
}
//excel转PDF
public synchronized static String excel3pdf(String excelPath, OutputStream outputStream,String fileName,String fileUrl) throws ServerException {
if (!getLicense("excel")) { // 验证License 若不验证则转化出的pdf文档会有水印产生
throw new ServerException("验证License失败。");
}
try {
long old = System.currentTimeMillis();
InputStream inputStreamFromUrl = FileUtils.getInputStreamFromUrl(excelPath);
Workbook wb = new Workbook(inputStreamFromUrl);// 原始excel路径
//新建一个pdf文档
File file = new File(fileName);
FileOutputStream os = new FileOutputStream(file);
// wb.save(outputStream,com.aspose.cells.SaveFormat.PDF);
wb.save(os,com.aspose.cells.SaveFormat.PDF);
long now = System.currentTimeMillis();
outputStream.flush();
outputStream.close();
os.close();
logger.info("excel共耗时:" + ((now - old) / 1000.0) + "秒"); //转化用时
} catch (Exception e) {
logger.error(String.valueOf(e));
e.printStackTrace();
}
return fileUrl;
}
//ppt转PDF
public synchronized static String ppt3pdf(String pptPath, OutputStream outputStream,String fileName,String fileUrl) throws ServerException {
// 验证License
if (!getLicense("ppt")) {
throw new ServerException("验证License失败。");
}
FileOutputStream os = null;
try {
long old = System.currentTimeMillis();
InputStream inputStreamFromUrl = FileUtils.getInputStreamFromUrl(pptPath);
Presentation pres = new Presentation(inputStreamFromUrl);//输入ppt路径
//IFontsManager fontsManager = pres.getFontsManager();
//新建一个pdf文档
File file = new File(fileName);
os = new FileOutputStream(file);
// pres.save(outputStream,com.aspose.slides.SaveFormat.Pdf);
pres.save(os,com.aspose.slides.SaveFormat.Pdf);
outputStream.flush();
outputStream.close();
long now = System.currentTimeMillis();
logger.info("ppt共耗时:" + ((now - old) / 1000.0) + "秒"); //转化用时
} catch (Exception e) {
logger.error(String.valueOf(e));
e.printStackTrace();
}finally {
try {
os.close();
} catch (IOException e) {
e.printStackTrace();
}
}
return fileUrl;
}
//剔除水印
private static boolean getLicense(String type) {
boolean result = false;
try {
// 凭证
String license =
"<License>\n" +
" <Data>\n" +
" <Products>\n" +
" <Product>Aspose.Total for Java</Product>\n" +
" <Product>Aspose.Words for Java</Product>\n" +
" </Products>\n" +
" <EditionType>Enterprise</EditionType>\n" +
" <SubscriptionExpiry>20991231</SubscriptionExpiry>\n" +
" <LicenseExpiry>20991231</LicenseExpiry>\n" +
" <SerialNumber>8bfe198c-7f0c-4ef8-8ff0-acc3237bf0d7</SerialNumber>\n" +
" </Data>\n" +
" <Signature>sNLLKGMUdF0r8O1kKilWAGdgfs2BvJb/2Xp8p5iuDVfZXmhppo+d0Ran1P9TKdjV4ABwAgKXxJ3jcQTqE/2IRfqwnPf8itN8aFZlV3TJPYeD3yWE7IT55Gz6EijUpC7aKeoohTb4w2fpox58wWoF3SNp6sK6jDfiAUGEHYJ9pjU=</Signature>\n" +
"</License>";
InputStream is = new ByteArrayInputStream(license.getBytes(StandardCharsets.UTF_8));
if(type.equals("word")){
License asposeLic = new License();
asposeLic.setLicense(is);
}else if (type.equals("excel")){
com.aspose.cells.License asposeLic = new com.aspose.cells.License();
asposeLic.setLicense(is);
}else if (type.equals("ppt")){
com.aspose.slides.License aposeLic = new com.aspose.slides.License();
aposeLic.setLicense(is);
}
result = true;
} catch (Exception e) {
logger.error(String.valueOf(e));
e.printStackTrace();
return false;
}
return result;
}
/**
* 判断资源类型文档类
*/
public static String getResourceTypesDocument(String suffix) {
String type = null;
switch (suffix) {
//文档类型
case ".doc":
case ".docx":
case ".txt":
type = "word";
break;
case ".xls":
case ".xlsx":
type = "excel";
break;
case ".ppt":
case ".pptx":
type = "ppt";
break;
}
return type;
}
public static void main(String[] args) throws FileNotFoundException {
String inputPath = "C:\\Users\\detong\\Desktop\\安全活动记录.docx";
// String outputPath = "C:\\Users\\detong\\Desktop\\焊工作业教育培训2023.pdf";
String suffix = inputPath.substring(inputPath.lastIndexOf("."));
String type = getResourceTypesDocument(suffix);
/*if("word".equals(type)){
word3Pdf(inputPath,new FileOutputStream(new File("C:\\Users\\detong\\Desktop\\安全活动记录.word")));
}else if("excel".equals(type)){
excel3pdf(inputPath,new FileOutputStream(new File("C:\\Users\\detong\\Desktop\\安全活动记录.excel")));
}else if("ppt".equals(type)){
ppt3pdf(inputPath,new FileOutputStream(new File("C:\\Users\\detong\\Desktop\\安全活动记录.pdf")));
}*/
}
}