
File name
Commit message
Commit date
File name
Commit message
Commit date
File name
Commit message
Commit date
File name
Commit message
Commit date
File name
Commit message
Commit date
File name
Commit message
Commit date
package froala.editor.web;
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Paths;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.pdfbox.pdmodel.PDDocument;
import org.apache.pdfbox.rendering.PDFRenderer;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.ui.ModelMap;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import egovframework.com.cmm.service.EgovProperties;
import egovframework.rte.fdl.cmmn.exception.EgovBizException;
import froala.editor.EditorFileVO;
import froala.editor.File;
import froala.editor.service.EditorService;
import froala.editor.service.ParallelExcutorService;
import froala.editor.utils.CommonUtil;
import froala.editor.utils.FileUtil;
import froala.editor.utils.view.DownloadView;
import froala.editor.utils.view.ImageView;
import froala.editor.utils.view.VideoView;
/**
* 각종 뷰 컨트롤러
*/
@Controller
public class ViewController {
private static final Logger logger = LoggerFactory.getLogger(ViewController.class);
private static final String tempFileRoute = EgovProperties.getProperty("editor.fileTempRoute");
/** EgovSampleService */
@Resource(name = "editorService")
private EditorService editorService;
/**
* 이미지를 호출한다.
*
* @param request
* @param path
* @param model
* @return
*/
@RequestMapping(value = "/imageview.do", method = RequestMethod.GET)
public ImageView imageView(HttpServletRequest request, @RequestParam String fileId, Model model) throws EgovBizException {
String deStr = CommonUtil.decryptAES256(fileId);
EditorFileVO fileVO = editorService.selectEditorFile(deStr);
model.addAttribute("path", fileVO.getFullPath());
model.addAttribute("origin_file_nm", fileVO.getOriginFileNm());
return new ImageView();
}
/**
* 파일을 다운로드 한다.
*
* @param request
* @param path
* @param origin_file_nm
* @param model
* @return
*/
@RequestMapping(value = "/download.do", method = RequestMethod.GET)
public DownloadView fileDownload(HttpServletRequest request, @RequestParam String fileId, Model model) throws EgovBizException {
// CommonUtil.viewRequestParams(request);
String deStr = CommonUtil.decryptAES256(fileId);
EditorFileVO fileVO = editorService.selectEditorFile(deStr);
model.addAttribute("path", fileVO.getFullPath());
model.addAttribute("origin_file_nm", fileVO.getOriginFileNm());
return new DownloadView();
}
/**
* 멀티 파일을 zip으로 압축 후 다운로드 한다.
*
* @Author : 임종호
* @Date : 2020. 8. 18.
* @Method Name : multiDownload
* @return : void
*/
@RequestMapping(value = "/multiDownload.do", method = RequestMethod.GET)
public void multiDownload(@RequestParam String fileId, HttpServletRequest request, HttpServletResponse response) throws EgovBizException {
List<EditorFileVO> list = new ArrayList<>();
if (fileId != null && fileId != "") {
for (String tmp : fileId.split(",")) {
EditorFileVO fileVO = editorService.selectEditorFile(tmp);
if (fileVO != null) {
list.add(fileVO);
}
}
;
}
// 압축파일 생성 후 다운로드
// fileTempRoute - 임시파일 경로
File.zipDown(request, response, list, tempFileRoute);
}
/**
* pdf, tiff, tif에 대한 이미지를 렌더링 하여 호출한다.
*
* @param request
* @param fileId
* @param pageSn
* @param model
* @return
* @throws EgovBizException
*/
@RequestMapping(value = "/multiImageview.do", method = RequestMethod.GET)
public ImageView tmpImageView(HttpServletRequest request, @RequestParam String fileId, @RequestParam Integer pageSn, @RequestParam(required = false) Boolean print, Model model) throws EgovBizException {
EditorFileVO fileVO = editorService.selectEditorFile(fileId);
String fileExtSn = fileVO.getFileExtsn();
if ("pdf".indexOf(fileExtSn) > -1) {
if (fileExtSn.equals("pdf")) {
try {
String returnFileRoute = tempFileRoute + fileVO.getSysFileNm();
String returnFilePath = returnFileRoute + "/" + fileVO.getSysFileNm() + '_' + pageSn + ".png";
// 기존파일생성 확인
java.io.File existCheck = new java.io.File(returnFilePath);
// 기존파일이 없을 시 PDF를 PNG로 변환한다.
if (!existCheck.exists()) {
Files.createDirectories(Paths.get(returnFileRoute)); // PDF 2 Img에서는 경로가 없는 경우 이미지 파일이 생성이 안되기 때문에 디렉토리를 만들어준다.
java.io.File file = new java.io.File(fileVO.getFullPath());
PDDocument pdfDoc = PDDocument.load(file); // Document 생성
int pageCount = pdfDoc.getNumberOfPages();
PDFRenderer pdfRenderer = new PDFRenderer(pdfDoc);
// 첫페이지 생성, 이미지 리사이즈 이후 저장
FileUtil.pdfImageWrite(pdfRenderer, pageSn - 1, returnFilePath);
// 쓰레드 각 service마다 3개씩 처리
ParallelExcutorService service = new ParallelExcutorService();
service.pdfSubmit("job1", pageSn, 3, pageCount, pdfRenderer, returnFileRoute + "/" + fileVO.getSysFileNm());
service.pdfSubmit("job2", pageSn + 1, 3, pageCount, pdfRenderer, returnFileRoute + "/" + fileVO.getSysFileNm());
service.pdfSubmit("job3", pageSn + 2, 3, pageCount, pdfRenderer, returnFileRoute + "/" + fileVO.getSysFileNm());
service.close();
// pdfDoc.close(); // 모두 사용한 PDF 문서는 닫는다.
}
model.addAttribute("path", returnFilePath);
} catch (IOException e) {
logger.error("fail to process PDF Render {}", e);
}
}
} else {
String imgFileName = fileVO.getFullPath();
// BufferedImage image = ImageIO.read(new java.io.File(fileVO.getFullPath()));
// int width = image.getWidth();
// int height = image.getHeight();
// if (print != null && print && width > height) {
// // 프린트용 이미지 크기가 세로보다 가로가 클 경우 회전
// imgFileName = FileUtil.transRotate(90, image, imgFileName);
// }
model.addAttribute("path", imgFileName);
}
return new ImageView();
}
/**
* 임시파일을 다운로드 한다.
*
* @param request
* @param fileId
* @param model
* @return
* @throws EgovBizException
*/
@RequestMapping(value = "/tempDownload.do", method = RequestMethod.GET)
public DownloadView tempFileDownload(HttpServletRequest request, @RequestParam String fileId, Model model) throws EgovBizException {
// CommonUtil.viewRequestParams(request);
String deStr = CommonUtil.decryptAES256(fileId);
EditorFileVO fileVO = editorService.selectTmpFile(deStr);
model.addAttribute("path", fileVO.getFullPath());
model.addAttribute("origin_file_nm", fileVO.getOriginFileNm());
model.addAttribute("mime", "application/octet-stream");
return new DownloadView();
}
/**
* 동영상 스트리밍
*
* @param fileId
* @param model
* @return
* @throws EgovBizException
*/
@RequestMapping(value = "/streaming.do", method = RequestMethod.GET)
public VideoView streaming(@RequestParam("fileId") String fileId, Model model, HttpServletRequest request, HttpServletResponse response) throws EgovBizException {
String deStr = CommonUtil.decryptAES256(fileId);
EditorFileVO fileVO = editorService.selectEditorFile(deStr);
request.setAttribute("path", fileVO.getFullPath());
request.setAttribute("originFileNm", fileVO.getOriginFileNm());
return new VideoView();
}
/**
* 이미지파일 인쇄
*
* @Author : 임종호
* @Date : 2020. 6. 15.
* @Method Name : print
* @return : String
* @throws IOException
*/
@RequestMapping(value = "/imagePrint/{paperSize}.do")
public String imagePrint(ModelMap model, @PathVariable("paperSize") String paperSize, @RequestParam(value = "fileId", required = false) String fileId, @ModelAttribute EditorFileVO editorFileVO) throws EgovBizException, IOException {
// 리턴 메시지
String resultMsg = "";
// 파일 데이터 세팅
List<EditorFileVO> list = new ArrayList<EditorFileVO>();
for (EditorFileVO tmp : editorFileVO.getFileList()) {
EditorFileVO resultVO = editorService.selectEditorFile(tmp.getFileId());
String fileExtSn = resultVO.getFileExtsn().toLowerCase();
if ("pdf,png,jpg,jpeg".indexOf(fileExtSn) > -1) {
// 페이지수(pdf,tif,tiff)
if (fileExtSn.equals("pdf")) {
java.io.File file = new java.io.File(resultVO.getFullPath());
PDDocument pdfDoc = PDDocument.load(file); // Document 생성
resultVO.setPageCnt(pdfDoc.getPages().getCount());
} else {
resultVO.setPageCnt(1);
}
list.add(resultVO);
} else {
resultMsg += resultVO.getOriginFileNm() + " ";
}
}
;
if (!resultMsg.equals("")) {
resultMsg += "파일은 인쇄 할 수 없습니다.";
}
model.addAttribute("resultMsg", resultMsg);
model.addAttribute("resultList", list);
Map<String, Object> SizeVO = new HashMap<>();
SizeVO.put("paperSize", paperSize);
// 용지 크기 세팅
model.addAttribute("SizeVO", SizeVO);
return "egovframework/custom/com/print";
}
}