文档内链:通过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();
}
|