文档内链:通过Java对word/xls/image/ppt转pdf文件并添加水印信息

java后台端代码

@Log(title = "预览上传文件", businessType = BusinessType.OTHER)
@RequestMapping("/queryPdfFile")
public void queryPdfFile(
@RequestParam(value = "fileUrl",required = true)String fileUrl,
HttpServletResponse response
)throws Exception{

//上传文件目录
String defaultBaseDir = RuoYiConfig.getProfile();
//文件真实位置
String filePath = defaultBaseDir+fileUrl.substring(fileUrl.indexOf("/upload"));
logger.info("文件FileUrl地址:{}",filePath);

String fileStr = fileUrl.substring(fileUrl.lastIndexOf("/"));
//文件名称
String fileName = fileStr.substring(1);
//文件类型
String fileType = fileName.substring(fileName.lastIndexOf(".")+1);


//获取原文件流数据对象
FileInputStream inputStream = new FileInputStream(filePath);
//生成临时文件
File tempPdfFile = File.createTempFile(fileName+"_convertpdf_"+System.currentTimeMillis()+"",".pdf");
FileOutputStream outputStream = new FileOutputStream(tempPdfFile);

//根据文件类型选择不同转换pdf方法类
if( "jpg".equals(fileType) || "png".equals(fileType) || "jpeg".equals(fileType) ){
PdfConverUtil.imgToPdf(inputStream, outputStream);
}else if( "doc".equals(fileType) || "docx".equals(fileType) ){
PdfConverUtil.wordTopdfByAspose(inputStream, outputStream);
}else if( "xls".equals(fileType) || "xlsx".equals(fileType) ){
PdfConverUtil.excelToPdf(inputStream, outputStream);
}else{
logger.error("文件类型异常!fileType:{}",fileType);
return ;
}

logger.info("文件fileName:{}转pdf完成~",fileName);

/*pdf文件加水印信息*/
File tempWaterMarkPdfFile = File.createTempFile(fileName+"_watermark_"+System.currentTimeMillis()+"",".pdf");
// 要输出的pdf文件
FileOutputStream outputStreamMarkPdf = new FileOutputStream(tempWaterMarkPdfFile);
BufferedOutputStream bos = new BufferedOutputStream(outputStreamMarkPdf);
// 将pdf文件先加水印然后输出
setWatermarkText(bos, new FileInputStream(tempPdfFile) ,fileName+(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date())));

logger.info("文件fileName:{}添加水印watermark完成~",fileName);

FileInputStream fileInputStream = new FileInputStream(tempWaterMarkPdfFile);
InputStream fis = new BufferedInputStream(fileInputStream);
byte[] buffer = new byte[fis.available()];
fis.read(buffer);
fis.close();

//设置响应头以指示浏览器下载文件
response.setContentType("application/pdf");
response.setHeader("Content-Disposition", "inline; filename=" + URLEncoder.encode(fileName,"UTF-8"));

OutputStream os = new BufferedOutputStream(response.getOutputStream());
os.write(buffer);
os.flush();

}