第一步:准备所需要的jar包
aspose-cells-8.5.2.jar和aspose-words-15.8.0-jdk16.jar 百度搜索自行下载即可
第二步:准备转换word和excel所需的签字密钥
license.xml
密文:
第三部转换工具类
ExcelWordTransitionController.java
import com.aspose.words.*;
import java.io.*;
public class ExcelWordTransitionController {
private static boolean getLicense() {
boolean result = false;
try {
InputStream is = ExcelWordTransitionController.class.getClassLoader().getResourceAsStream("license.xml"); // license.xml应放在..\WebRoot\WEB-INF\classes路径下
License aposeLic = new License();
aposeLic.setLicense(is);
result = true;
} catch (Exception e) {
e.printStackTrace();
}
return result;
}
/**
* @param wordPath 需要被转换的word全路径带文件名
* @param pdfPath 转换之后pdf的全路径带文件名
*/
public static void doc2pdf(String wordPath, String pdfPath) {
if (!getLicense()) { // 验证License 若不验证则转化出的pdf文档会有水印产生
return;
}
try {
long old = System.currentTimeMillis();
File file = new File(pdfPath); //新建一个pdf文档
FileOutputStream os = new FileOutputStream(file);
Document doc = new Document(wordPath); //Address是将要被转化的word文档
doc.save(os, com.aspose.words.SaveFormat.PDF);//全面支持DOC, DOCX, OOXML, RTF HTML, OpenDocument, PDF, EPUB, XPS, SWF 相互转换
long now = System.currentTimeMillis();
os.close();
System.out.println("共耗时:" + ((now - old) / 1000.0) + "秒"); //转化用时
} catch (Exception e) {
e.printStackTrace();
}
}
/**
* @param excelPath 需要被转换的excel全路径带文件名
* @param pdfPath 转换之后pdf的全路径带文件名
*/
public static void excel2pdf(String excelPath, String pdfPath) {
if (!getLicense()) { // 验证License 若不验证则转化出的pdf文档会有水印产生
return;
}
try {
long old = System.currentTimeMillis();
com.aspose.cells.Workbook wb = new com.aspose.cells.Workbook(excelPath);// 原始excel路径
FileOutputStream fileOS = new FileOutputStream(new File(pdfPath));
wb.save(fileOS, com.aspose.cells.SaveFormat.PDF);
fileOS.close();
long now = System.currentTimeMillis();
System.out.println("共耗时:" + ((now - old) / 1000.0) + "秒"); //转化用时
} catch (Exception e) {
e.printStackTrace();
}
}
//filePath 需要转换的文件位置
//fileName 转换后的文件名
//pdfPath 转换后的文件路径
//filePostfix 转换的文件后缀
public static void excelWordTransition(String filePath,String fileName,String pdfPath,String filePostfix) {
if("xlsx".equals(filePostfix) || "xls".equals(filePostfix)){
excel2pdf(filePath,pdfPath);
}else if("doc".equals(filePostfix) || "docx".equals(filePostfix)){
doc2pdf(filePath, pdfPath);//filePaths需要转换的文件位置 pdfPath为存储位置
}
}
}
第四步:action层
/*** 在线预览Excel、word、pdf ***/
@RequestMapping(value = "onPreview", method = RequestMethod.GET)
public String onPreview(Model model,HttpServletRequest request, HttpServletResponse response) {
String projectUrl=request.getSession().getServletContext().getRealPath("/");
String filePath=projectUrl+map1.get("filepath"); //文件位置 filepath需要改成你自己需要预览的文件路径
String fileName="ExcelWordTransition"; //文件名称.写死为了每次只会存在一个避免占用内存
String pdfPath=projectUrl+"upload/transition/"+fileName+".pdf"; //生成pdf文件的路径,需自己定义
ExcelWordTransitionController.excelWordTransition(filePath,fileName,pdfPath,map1.get("filetext")); //map1.get("filetext") 是文件的类型是word文件还是excel文件
model.addAttribute("filepath","/upload/transition/"+fileName+".pdf");
return "onPreview";
}
第五步:onPreview.jsp页面。转pdf后我们需要借助pdf.js实现pdf文件的在线预览,这里自行百度搜索pdf.js下载即可
注:${staticPath}是我项目获取静态文件的前缀
${ctx}是获取我项目的附件路径
${filepath}是action所存的生成pdf文件的路径
注:因为这个转换只适用于word转换,excel转换出来会有水印。