반응형
브라우져에 나타난 화면을 그대로 캡처하여 파일로 저장하는 방법입니다.
익스플로러, 크롬에서 테스트 완료하엿습니다.
* 윈도우 서버에서는 문제없이 잘 돌아갑니다. 운영서버는 Unix 서버인데 운영서버에서는 동작하지 않았습니다. 서비스 오픈 때문에 확인할 시간이 없어서 해당 소스코드는 Unix 서버에서 사용하지 않았습니다. Was 서버 설정을 변경하면 될 것 같은데 시간 관계상 포기 ㅠㅠ
javascript 파일(브라우저 화면의 좌표 값 추출 후 서버로 전송)
//출력 미리보기 function fnPrintPreview() { var top = ""; var left = ""; var height = ""; var width = ""; var agent = navigator.userAgent.toLowerCase(); if (agent.indexOf("chrome") != -1) { top = (typeof window.screenTop == "number") ? window.screenTop : window.screenY; left = (typeof window.screenLeft == "number") ? window.screenLeft : window.screenX; top = top + 160; height = window.innerHeight; height = height -110; width = window.innerWidth; }else{ top = (typeof window.screenTop == "number") ? window.screenTop : window.screenY; left = (typeof window.screenLeft == "number") ? window.screenLeft : window.screenX; //var height = window.outerHeight; //var width = window.outerWidth; top = top + 110; height = window.innerHeight; height = height -110; width = window.innerWidth; } jQuery('#top').val(top); jQuery('#left').val(left); jQuery('#height').val(height); jQuery('#width').val(width); console.log(document.printPreviewForm.top.value); console.log(document.printPreviewForm.left.value); console.log(document.printPreviewForm.height.value); console.log(document.printPreviewForm.width.value); jQuery.ajax({ url:'/nor/map/mapmain/captureScreen.do', data:jQuery("#printPreviewForm").serialize(), type: 'POST', dataType:"json", beforeSend:function(){ }, success:function(data){ try{ //운영서버 반영시 확인해야 함!! //var imageSrc = data.imageSrc.replace("C:/eGovFrameDev-3.0.0-32bit/workspace/NOR/src/main/webapp/", "/nor/"); var strUrl = window.location.protocol + "//" + window.location.host; strUrl += "/nor/map/mapmain/selectPrintSpatialAnalysisView.do?"; strUrl += "&imageSrc=" + data.imageSrc; strUrl += "&imagePrintSrc=" + data.imagePrintSrc; if (gn_winPrintPreview_spatialAnalysis == null){ gn_winPrintPreview_spatialAnalysis = window.open(strUrl, "PrintSpatialAnalysisView", "titlebar=yes, toolbar=no, scrollbars=yes, resizable=yes, top=0, left=0, width=815, height=800"); }else{ gn_winPrintPreview_spatialAnalysis.location = strUrl; } //gn_winPrintPreview_spatialAnalysis.focus(); }catch(e){ alert(e); } }, error:function(e){ if(e.responseText.indexOf("해당 기능에 대한 권한이 없습니다.") > -1){ //alert(e.responseText); alert("해당 기능에 대한 권한이 없습니다."); }else{ alert(e.responseText); } } }); }
java 파일(좌표값을 가지고 화면 캡처 후 파일 생성)
/** * 지도화면 캡처 */ @RequestMapping(value="/map/mapmain/captureScreen.do") public @ResponseBody Map<String, Object> captureScreen(@ModelAttribute("searchVO") MapMainVO mapMainVO) { log.debug("=********************* captureScreen ***************************************************"); int top = Integer.parseInt(mapMainVO.getTop()); int left = Integer.parseInt(mapMainVO.getLeft()); int height = Integer.parseInt(mapMainVO.getHeight()); int width = Integer.parseInt(mapMainVO.getWidth()); SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmss"); String fileName = sdf.format(new java.util.Date()) + System.currentTimeMillis(); String printFileName = sdf.format(new java.util.Date()) + System.currentTimeMillis(); String tmpFilePath = "파일저장경로"; try { //ChangeHeadless ch = new ChangeHeadless(); /*Field defaultHeadlessField = java.awt.GraphicsEnvironment.class.getDeclaredField("defaultHeadless"); defaultHeadlessField.setAccessible(true); defaultHeadlessField.set(null,Boolean.FALSE); Field headlessField = java.awt.GraphicsEnvironment.class.getDeclaredField("headless"); headlessField.setAccessible(true); headlessField.set(null,Boolean.FALSE); System.setProperty("java.awt.headless", "false");*/ boolean headless = GraphicsEnvironment.isHeadless(); log.debug("headless : " + headless); log.debug("System.getProperty : " + System.getProperty("java.awt.headless")); Robot robot = new Robot(); String format = "jpg"; fileName = tmpFilePath + fileName + "." + format; printFileName = tmpFilePath + printFileName + "rotate." + format; log.debug("fileName : " + fileName); log.debug("printFileName : " + printFileName); Rectangle captureRect = new Rectangle(left, top, width, height); BufferedImage screenImage = robot.createScreenCapture(captureRect); /*defaultHeadlessField.setAccessible(true); defaultHeadlessField.set(null,Boolean.TRUE); headlessField.setAccessible(true); headlessField.set(null,Boolean.TRUE); System.setProperty("java.awt.headless", "true");*/ boolean headlessa = GraphicsEnvironment.isHeadless(); log.debug("headless : " + headlessa); log.debug("System.getProperty : " + System.getProperty("java.awt.headless")); ImageIO.write(screenImage, format, new File(fileName)); //회전된 이미지 저장(프린트 때문에..) BufferedImage rotateImg = rotate90CCW(screenImage);; ImageIO.write(rotateImg, format, new File(printFileName)); } catch (AWTException e) { log.debug("AWTException : " + e); } catch (IOException e) { log.debug("IOException : " + e); } catch (Exception e) { log.debug("Exception : " + e); } //log.debug("= CONTROLLER :: selectPrintSpatialAnalysisView :: imageSrc:: " + imageSrc); Map<String,Object> result = new HashMap<String,Object>(); result.put("imageSrc", fileName); result.put("imagePrintSrc", printFileName); return result; }
반응형
'Java' 카테고리의 다른 글
java 에서 ftp 접속 파일 다운로드, 업로드, 삭제 코드 (3) | 2012.10.29 |
---|---|
파일 다운로드 한글 깨짐 (3) | 2012.10.27 |