Programming/Java

[Excel POI] Jqplot으로 그린 Chart - Excel 출력

콩이볼 2019. 3. 29. 14:23

//jsp에서 그려진 Jqplot Chart의 주소를 추출한다.

// 추출한 url을 Excel 요청 시 함께 보낸다.

  html2canvas($("#chart"), {
	onrendered: function(canvas) {
	 url = canvas.toDataURL();
    }
 });
 

 

//Excel 추출 부분

//받은 URL을 image로 변환하여 Excel에 삽입한다.

 

public void printImage(String url, Workbook workbook, XSSFSheet sheet, int col, int row
                                           , double size, double size2) throws IOException {    
		
		XSSFRow xrow = null;
		XSSFCell xcell = null;
		int cellIdx = col;
		
		if (col == 0) {
			xrow = sheet.createRow(row-1);
		} else {
			xrow = sheet.getRow(row-1);
		}
		
		String data = url.split(",")[1];
		byte[] imageBytes = DatatypeConverter.parseBase64Binary(data);
		ByteArrayOutputStream byteArrayOut = new ByteArrayOutputStream(); 
		
		try {
			BufferedImage bufImg = ImageIO.read(new ByteArrayInputStream(imageBytes));
			ImageIO.write(bufImg, "png", byteArrayOut); 
		} catch (IOException e) {
			e.printStackTrace();
		}
	
		
		try {
	        // 이미지 파일 로드
	        int indx = workbook.addPicture(byteArrayOut.toByteArray(), HSSFWorkbook.PICTURE_TYPE_PNG);
	        
	        XSSFCreationHelper helper = (XSSFCreationHelper) workbook.getCreationHelper();
	        XSSFDrawing drawing = sheet.createDrawingPatriarch();
	        XSSFClientAnchor anchor = helper.createClientAnchor();
	        
	        // 이미지를 출력할 CELL 위치 선정
	        anchor.setCol1(col);
	        anchor.setRow1(row);
	        // 이미지 그리기
	        XSSFPicture pict = drawing.createPicture(anchor, indx);
	        
	        // 이미지 사이즈 비율 설정
	        pict.resize(size, size2);
	    } catch (Exception e) {
	    }
		
	}