제공되는 서버모듈 jsp(
Down2Excel.jsp,LoadExcel.jsp등)의 로직을 스프링 컨트롤러(서블릿)로 옮긴 전체 예제입니다.
필요한 메서드를 복사해 쓰고,사용자 환경 설정 #N주석 옵션은 필요한 것만 주석 해제해 사용합니다.
이 방식을 언제 쓰는지(JSP를 쓸 수 없는 환경, 멀티파트 본문 선소비 등)와 짧은 설명은 엑셀 서버 모듈 트러블슈팅을 참고하세요.
package com.example.excel;
import java.io.IOException;
import java.io.OutputStream;
import java.io.File;
import java.util.UUID;
import javax.servlet.ServletContext;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.multipart.MultipartFile;
import com.ibleaders.ibsheet8.IBSheetDown;
import com.ibleaders.ibsheet8.converter.Print2Pdf;
import com.ibleaders.ibsheet8.exception.IBSheetException;
import com.ibleaders.ibsheet8Loader.IBSheetLoad;
@Controller
@RequestMapping("/ibsheet/")
public class ibsheetFileImportExportController {
@Autowired
private ServletContext servletContext;
@RequestMapping(value = "directDown2Excel.do", method = RequestMethod.POST)
public void directDown2Excel(HttpServletRequest request, HttpServletResponse response) throws Exception {
response.setContentType("application/octet-stream");
response.setCharacterEncoding("UTF-8");
response.setHeader("Content-Disposition", "");
IBSheetDown down = null;
try {
down = new IBSheetDown();
//====================================================================================================
// [ 사용자 환경 설정 #0 ]
//====================================================================================================
// Html 페이지의 인코딩이 UTF-8 로 구성되어 있으면 "down.setEncoding("UTF-8");" 로 설정하십시오.
// LoadExcel.jsp 도 동일한 값으로 바꿔 주십시오.
// setService 전에 설정해야 합니다.
//====================================================================================================
down.setEncoding("UTF-8");
//====================================================================================================
// [ 사용자 환경 설정 #1 ]
//====================================================================================================
// 엑셀 전문의 MarkupTag Delimiter 사용자 정의 시 설정하세요.
// 설정 값은 IBSheet8 환경설정(ibsheet.cfg)의 MarkupTagDelimiter 설정 값과 동일해야 합니다.
//====================================================================================================
//down.setMarkupTagDelimiter("┼","╫","╬","╪");
//====================================================================================================
// [ 사용자 환경 설정 #2 ]
//====================================================================================================
// 시트에 포함될 문자열 중 STX(\u0002), ETX(\u0003) 이 포함된 경우에만 설정해주세요.
// 설정을 원하지 않는 경우 주석처리해주세요.
// 0 : 시트 구분자로 STX, ETX 문자를 사용합니다. (기본값)
// 1 : 시트 구분자로 변형된 문자열을 사용합니다. (시트에 설정이 되어 있어야 합니다.)
//====================================================================================================
//down.setDelimMode(1);
//====================================================================================================
// [ 사용자 환경 설정 #3 ]
//====================================================================================================
// HttpServletRequest, HttpServletResponse를 IBSheet 서버모듈에 등록합니다.
//====================================================================================================
/****************************************************************************************************
* 화면에서 보낸 시트 데이터를 다시 셋팅한다.
*
****************************************************************************************************/
String Data = request.getParameter("Data");
/*
System.out.println(Data);
화면에서 전송하는 data는 xml 형식으로 되어 있다.(<0_IBCC></0_IBCC><0_IBCT></0_IBCT>)
데이터가 XSS Filter을 통과하게 되면 <,> 등이 다른 문자로 변환이 되므로 아래 2가지중 하나를 적용한다.
1. request로 받은 Data 값을 <0_IBCC></0_IBCC><0_IBCT></0_IBCT> 되도록 치환하여 한다.
2. (Cfg) MarkupTagDelimiter를 설정하고 [ 사용자 환경 설정 #1 ] : setMarkupTagDelimiter를 설정한다.
*/
down.setData(Data);
/****************************************************************************************************
* 화면에서 보낸 시트 데이터를 다시 셋팅한다.
*
****************************************************************************************************/
down.setService(request, response);
//====================================================================================================
// [ 사용자 환경 설정 #4 ]
//====================================================================================================
// 다운로드 받을 문서의 타입을 설정하십시오.
// xls : xls 형식으로 다운로드
// xlsx : xlsx 형식으로 다운로드
// excel : 시트에 FileName에 설정값으로 다운로드, 확장자가 없는 경우 기본 xls 형식으로 다운로드
//====================================================================================================
down.setFileType("excel");
//====================================================================================================
// [ 사용자 환경 설정 #5 ]
//====================================================================================================
// 엑셀 문서에 사용될 폰트를 설정하십시오.
// 헤더 폰트이름도 함께 설정 됩니다.
//====================================================================================================
//down.setFontName("맑은고딕");
//====================================================================================================
// [ 사용자 환경 설정 #6 ]
//====================================================================================================
// 엑셀 문서에 사용될 폰트크기를 설정하십시오.
// 헤더 폰트크기도 함께 설정 됩니다.
//====================================================================================================
//down.setFontSize(20);
//====================================================================================================
// [ 사용자 환경 설정 #7 ]
//====================================================================================================
// 엑셀 다운로드 시 헤더행의 배경색을 적용하고 싶은 경우에 설정하세요.
// #3366FF 형태의 웹 컬러로 설정해주세요.
// 설정을 원하지 않는 경우 주석처리해주세요.
//====================================================================================================
//down.setHeaderBackColor("#FF2233");
//====================================================================================================
// [ 사용자 환경 설정 #8 ]
//====================================================================================================
// 엑셀 다운로드 시 헤더행의 폰트 Bold 스타일을 적용하고 싶은 경우에 설정하세요.
// 설정을 원하지 않는 경우 주석처리해주세요.
//====================================================================================================
//down.setHeaderFontBold(false);
//====================================================================================================
// [ 사용자 환경 설정 #9 ]
//====================================================================================================
// 엑셀 다운로드 시 헤더행의 글자색을 적용하고 싶은 경우에 설정하세요.
// #3366FF 형태의 웹 컬러로 설정해주세요.
// 설정을 원하지 않는 경우 주석처리해주세요.
//====================================================================================================
//down.setHeaderFontColor("#FF2233");
//====================================================================================================
// [ 사용자 환경 설정 #10 ]
//====================================================================================================
// 엑셀 다운로드 시 헤더행의 폰트를 적용하고 싶은 경우에 설정하세요.
// 설정을 원하지 않는 경우 주석처리해주세요.
//====================================================================================================
//down.setHeaderFontName("궁서");
//====================================================================================================
// [ 사용자 환경 설정 #11 ]
//====================================================================================================
// 엑셀 다운로드 시 헤더행의 폰트 크기를 적용하고 싶은 경우에 설정하세요.
// 설정을 원하지 않는 경우 주석처리해주세요.
//====================================================================================================
//down.setHeaderFontSize(20);
//====================================================================================================
// [ 사용자 환경 설정 #12 ]
//====================================================================================================
// 줄바꿈 설정을 다음에서 설정한 값으로 강제적으로 적용합니다.
// 사용하지 않으시려면 주석처리 하세요.
//====================================================================================================
//down.setWordWrap(false);
//====================================================================================================
// [ 사용자 환경 설정 #13 ]
//====================================================================================================
// 엑셀 다운로드 시 서버에 위치한 디자인 파일을 사용하는 경우 디자인 파일이 있는 폴더 위치를 설정하세요.
// 디자인 파일을 사용하지 않는 경우 주석처리하세요.
//====================================================================================================
//down.setTempRoot("D:/SVN/src/IBSheet7.TestPage");
//====================================================================================================
// [ 사용자 환경 설정 #14 ]
//====================================================================================================
// 트리 컬럼에서 레벨별로 … 를 덧붙여서 레벨별로 보기 좋게 만듭니다.
// 만약 … 대신 다른 문자를 사용하기를 원하시면 아래 유니코드 \u2026 (16진수형태) 대신 다른 문자를 입력하십시오.
// 트리 컬럼이 없으면 설정하지 마세요.
//====================================================================================================
//down.setTreeChar("\u2026");
//====================================================================================================
// [ 사용자 환경 설정 #15 ]
//====================================================================================================
// 엑셀에 포함될 이미지의 URL 이 같은 도메인에 있지만 "/image/imgDown.jsp?idx=365" 등과 같은
// 이미지 로딩 방식을 사용한다면 웹서버 도메인을 설정하세요.
//====================================================================================================
//down.setWebServerDomain("http://www.ibleaders.co.kr");
//====================================================================================================
// [ 사용자 환경 설정 #16 ]
//====================================================================================================
// 엑셀에 포함될 숫자 형식 데이터를 [통화] 나 [사용자정의] 가 아닌 [숫자] 서식으로 다운로드 합니다.
// 시트에서 Down2Excel 옵션으로 설정한 NumberExMode를 무시하고 적용됩니다.
//====================================================================================================
//down.setNumberExMode(true);
//====================================================================================================
// [ 사용자 환경 설정 #17 ]
//====================================================================================================
// 엑셀 다운로드 시 포함된 이미지의 비율을 맞추고 싶을때 설정하세요..
// 설정을 원하지 않는 경우 주석처리해주세요.
// 0 : 셀의 가로/세로에 꽉 차게 이미지를 처리합니다. (기본값)
// 1 : 셀의 중앙에 이미지를 원본 크기로 표시합니다.
// 2 : 이미지의 원본 가로/세로 비율을 유지하면서 셀에 맞춥니다.
//====================================================================================================
//down.setImageProcessType(0);
//====================================================================================================
// [ 사용자 환경 설정 #18 ]
//====================================================================================================
// 엑셀 파일의 인쇄 항목을 설정하고 싶은 경우에 설정하세요.
// 설정을 원하지 않는 경우 주석처리해주세요.
//====================================================================================================
/**
ExcelPrintSetup printSetup = new ExcelPrintSetup();
//컬러 인쇄 여부를 설정합니다. 기본값은 true입니다. false로 설정하면 흑백인쇄 모드가 됩니다.
printSetup.setColorPrint(true);
//용지 사이즈를 설정합니다. 설정 가능한 용지는 Letter, Legal, A3, A4, A5, B4, B5 입니다.
printSetup.setPageSize("A4");
//용지 방향을 설정합니다. true는 가로, false는 세로 방향입니다.
printSetup.setLandscape(true);
//페이지를 나눌때 셀이 잘리지 않도록 설정합니다.
printSetup.setAutoBreak(true);
//용지 내에 페이지를 맞춰서 인쇄할 때 사용합니다.
printSetup.setFitToPage(true);
// 페이지 내에 열맞춤을 설정합니다. 이 옵션을 사용하려면 setFitToPage(true); 와 setFitHeight(false); 를 함께 설정해야 합니다.
printSetup.setFitWidth(true);
// 페이지 내에 행맞춤을 설정합니다. 이 옵션을 사용하려면 setFitToPage(true); 와 setFitWidth(false); 를 함께 설정해야 합니다.
printSetup.setFitHeight(false);
//머리글 부분의 여백을 Cm 단위로 설정합니다.
printSetup.setHeaderMargin(0d);
//꼬리글 부분의 여백을 Cm 단위로 설정합니다.
printSetup.setFooterMargin(0d);
//위쪽 여백을 Cm 단위로 설정합니다.
printSetup.setTopMargin(0.5);
//아래쪽 여백을 Cm 단위로 설정합니다.
printSetup.setBottomMargin(0.5);
//왼쪽 여백을 Cm 단위로 설정합니다.
printSetup.setLeftMargin(0.5);
//오른쪽 여백을 Cm 단위로 설정합니다.
printSetup.setRightMargin(0.5);
//엑셀 파일의 인쇄 설정을 파일에 적용합니다.
down.setPrintSetup(printSetup);
**/
//====================================================================================================
// [ 사용자 환경 설정 #19 ]
//====================================================================================================
// 엑셀 문서의 행 높이를 설정하고 싶은 경우에 설정하세요.
// 설정을 원하지 않는 경우 주석처리해주세요.
//====================================================================================================
//down.setExcelRowHeight(30);
//====================================================================================================
// [ 사용자 환경 설정 #20 ]
//====================================================================================================
// 엑셀 문서의 헤더행 높이를 설정하고 싶은 경우에 설정하세요.
// 설정을 원하지 않는 경우 주석처리해주세요.
//====================================================================================================
//down.setExcelHeaderRowHeight(30);
// 다운로드 1. Request에 SHEETDATA로 저장된 데이터를 시트에 포함
down.setDirectRequestData();
// 다운로드 2. 데이터를 직접 insert 하는 방법(appendDataList, appendDataMap 등의 API를 이용)
// TODO
/*
// (예제 1. appendDataMap)
for (int i = 0; i < 100; i++) {
Map<String, String> map = new HashMap<String, String>();
// SaveName이 sName인 컬럼에 ib 데이터를 set하여 엑셀 파일로 다운로드
map.put("sName", "ib");
down.appendDataMap(map);
}*/
/*
// (예제 2. appendDataArr)
for (int i = 0; i < 100; i++) {
String[] x = {"data1", "data2", "data3"};
down.appendDataArr(x);
}*/
// 생성된 문서를 브라우저를 통해 다운로드
down.downToBrowser();
} catch (Exception e) {
response.setContentType("text/html;charset=utf-8");
response.setCharacterEncoding("utf-8");
response.setHeader("Content-Disposition", "");
//e.printStackTrace();
OutputStream out2 = response.getOutputStream();
out2.write(down.getDownError("An error has occurred while downloading the file."));
out2.flush();
} catch (Error e) {
response.setContentType("text/html;charset=utf-8");
response.setCharacterEncoding("utf-8");
response.setHeader("Content-Disposition", "");
//e.printStackTrace();
OutputStream out2 = response.getOutputStream();
out2.write(down.getDownError("An error has occurred while downloading the file."));
out2.flush();
} finally {
if (down != null) {
try {
down.close();
} catch (Exception ex) {}
}
down = null;
}
// 파일 정상 다운로드시 아래 구문을 실행하지 않으면 서버 Servlet에서 java.lang.IllegalStateException 이 발생한다.
// 파일 최 하단에서 호출하도록 하면 다운로드 에러로 인한 Exception 메시지가 출력되지 않으므로 정상 다운시에만 처리하도록 한다.
// out.flush();
// out = pageContext.pushBody();
}
@RequestMapping(value = "down2Excel.do",method= RequestMethod.POST)
public void Down2Excel(HttpServletRequest request,HttpServletResponse response) throws Exception {
response.setContentType("application/octet-stream");
response.setCharacterEncoding("UTF-8");
response.setHeader("Content-Disposition", "");
IBSheetDown down = null;
try {
down = new IBSheetDown();
//====================================================================================================
// [ 사용자 환경 설정 #0 ]
//====================================================================================================
// Html 페이지의 인코딩이 UTF-8 로 구성되어 있으면 "down.setEncoding("UTF-8");" 로 설정하십시오.
// LoadExcel.jsp 도 동일한 값으로 바꿔 주십시오.
// setService 전에 설정해야 합니다.
//====================================================================================================
down.setEncoding("UTF-8");
//====================================================================================================
// [ 사용자 환경 설정 #1 ]
//====================================================================================================
// 엑셀 전문의 MarkupTag Delimiter 사용자 정의 시 설정하세요.
// 설정 값은 IBSheet7 환경설정(ibsheet.cfg)의 MarkupTagDelimiter 설정 값과 동일해야 합니다.
//====================================================================================================
//down.setMarkupTagDelimiter("[s1]","[s2]","[s3]","[s4]");
//====================================================================================================
// [ 사용자 환경 설정 #2 ]
//====================================================================================================
// 시트에 포함될 문자열 중 STX(\u0002), ETX(\u0003) 이 포함된 경우에만 설정해주세요.
// 설정을 원하지 않는 경우 주석처리해주세요.
// 0 : 시트 구분자로 STX, ETX 문자를 사용합니다. (기본값)
// 1 : 시트 구분자로 변형된 문자열을 사용합니다. (시트에 설정이 되어 있어야 합니다.)
//====================================================================================================
//down.setDelimMode(1);
//====================================================================================================
// [ 사용자 환경 설정 #3 ]
//====================================================================================================
// HttpServletRequest, HttpServletResponse를 IBSheet 서버모듈에 등록합니다.
//====================================================================================================
/****************************************************************************************************
* 화면에서 보낸 시트 데이터를 다시 셋팅한다.
*
****************************************************************************************************/
String Data = request.getParameter("Data");
/* System.out.println(Data);
화면에서 전송하는 data는 xml 형식으로 되어 있다.(<0_IBCC></0_IBCC><0_IBCT></0_IBCT>)
데이터가 XSS Filter을 통과하게 되면 <,> 등이 다른 문자로 변환이 되므로 아래 2가지중 하나를 적용한다.
1. request로 받은 Data 값을 <0_IBCC></0_IBCC><0_IBCT></0_IBCT> 되도록 치환하여 한다.
2. (Cfg) MarkupTagDelimiter를 설정하고 [ 사용자 환경 설정 #1 ] : setMarkupTagDelimiter를 설정한다.
*/
down.setData(Data);
/****************************************************************************************************
* 화면에서 보낸 시트 데이터를 다시 셋팅한다.
*
****************************************************************************************************/
down.setService(request, response);
//====================================================================================================
// [ 사용자 환경 설정 #4 ]
//====================================================================================================
// 다운로드 받을 문서의 타입을 설정하십시오.
// xls : xls 형식으로 다운로드
// xlsx : xlsx 형식으로 다운로드
// excel : FileName에 설정한 값으로 다운로드, 확장자가 없는 경우 기본 xls 형식으로 다운로드
//
// 두번째 인자를 통해 화면에서 부여한 파일명의 확장자를 제거하고 xls나 xlsx를 붙일지 여부를 설정(default는 false)
//====================================================================================================
down.setFileType("excel",false);
//====================================================================================================
// [ 사용자 환경 설정 #5 ]
//====================================================================================================
// 엑셀 문서에 사용될 폰트를 설정하십시오.
// 헤더 폰트이름도 함께 설정 됩니다.
//====================================================================================================
//down.setFontName("맑은고딕");
//====================================================================================================
// [ 사용자 환경 설정 #6 ]
//====================================================================================================
// 엑셀 문서에 사용될 폰트크기를 설정하십시오.
// 헤더 폰트크기도 함께 설정 됩니다.
//====================================================================================================
//down.setFontSize(20);
//====================================================================================================
// [ 사용자 환경 설정 #7 ]
//====================================================================================================
// 엑셀 다운로드 시 헤더행의 배경색을 적용하고 싶은 경우에 설정하세요.
// #3366FF 형태의 웹 컬러로 설정해주세요.
// 설정을 원하지 않는 경우 주석처리해주세요.
//====================================================================================================
//down.setHeaderBackColor("#FF2233");
//====================================================================================================
// [ 사용자 환경 설정 #8 ]
//====================================================================================================
// 엑셀 다운로드 시 헤더행의 폰트 Bold 스타일을 적용하고 싶은 경우에 설정하세요.
// 설정을 원하지 않는 경우 주석처리해주세요.
//====================================================================================================
//down.setHeaderFontBold(false);
//====================================================================================================
// [ 사용자 환경 설정 #9 ]
//====================================================================================================
// 엑셀 다운로드 시 헤더행의 글자색을 적용하고 싶은 경우에 설정하세요.
// #3366FF 형태의 웹 컬러로 설정해주세요.
// 설정을 원하지 않는 경우 주석처리해주세요.
//====================================================================================================
down.setHeaderFontColor("#FFFFFF");
//====================================================================================================
// [ 사용자 환경 설정 #10 ]
//====================================================================================================
// 엑셀 다운로드 시 헤더행의 폰트를 적용하고 싶은 경우에 설정하세요.
// 설정을 원하지 않는 경우 주석처리해주세요.
//====================================================================================================
//down.setHeaderFontName("궁서");
//====================================================================================================
// [ 사용자 환경 설정 #11 ]
//====================================================================================================
// 엑셀 다운로드 시 헤더행의 폰트 크기를 적용하고 싶은 경우에 설정하세요.
// 설정을 원하지 않는 경우 주석처리해주세요.
//====================================================================================================
//down.setHeaderFontSize(20);
//====================================================================================================
// [ 사용자 환경 설정 #12 ]
//====================================================================================================
// 줄바꿈 설정을 다음에서 설정한 값으로 강제적으로 적용합니다.
// 사용하지 않으시려면 주석처리 하세요.
//====================================================================================================
//down.setWordWrap(false);
//====================================================================================================
// [ 사용자 환경 설정 #13 ]
//====================================================================================================
// 엑셀 다운로드 시 서버에 위치한 디자인 파일을 사용하는 경우 디자인 파일이 있는 폴더 위치를 설정하세요.
// 디자인 파일을 사용하지 않는 경우 주석처리하세요.
//====================================================================================================
//down.setTempRoot("D:/SVN/src/IBSheet7.TestPage");
//====================================================================================================
// [ 사용자 환경 설정 #14 ]
//====================================================================================================
// 트리 컬럼에서 레벨별로 … 를 덧붙여서 레벨별로 보기 좋게 만듭니다.
// 만약 … 대신 다른 문자를 사용하기를 원하시면 아래 유니코드 \u2026 (16진수형태) 대신 다른 문자를 입력하십시오.
// 트리 컬럼이 없으면 설정하지 마세요.
//====================================================================================================
//down.setTreeChar("\u2026");
//====================================================================================================
// [ 사용자 환경 설정 #15 ]
//====================================================================================================
// 엑셀에 포함될 이미지의 URL 이 같은 도메인에 있지만 "/image/imgDown.jsp?idx=365" 등과 같은
// 이미지 로딩 방식을 사용한다면 웹서버 도메인을 설정하세요.
//====================================================================================================
//down.setWebServerDomain("http://www.ibleaders.co.kr");
//====================================================================================================
// [ 사용자 환경 설정 #16 ]
//====================================================================================================
// 엑셀에 포함될 숫자 형식 데이터를 [통화] 나 [사용자정의] 가 아닌 [숫자] 서식으로 다운로드 합니다.
// 시트에서 Down2Excel 옵션으로 설정한 NumberExMode를 무시하고 적용됩니다.
//====================================================================================================
//down.setNumberExMode(true);
//====================================================================================================
// [ 사용자 환경 설정 #17 ]
//====================================================================================================
// POI 라이브러리를 사용중이고 XLSX 형식의 파일을 다운로드 할 때 임시폴더를 사용하지 않고 메모리에서 직접
// 다운로드 받도록 설정합니다.
// 메모리 사용량이 늘어나게 되므로 임시폴더를 사용할 수 없는 환경에서만 설정해 주세요.
//====================================================================================================
//down.setXlsxTempFolderMode(true);
//====================================================================================================
// [ 사용자 환경 설정 #18 ]
//====================================================================================================
// 엑셀 다운로드 시 포함된 이미지의 비율을 맞추고 싶을때 설정하세요..
// 설정을 원하지 않는 경우 주석처리해주세요.
// 0 : 셀의 가로/세로에 꽉 차게 이미지를 처리합니다. (기본값)
// 1 : 셀의 중앙에 이미지를 원본 크기로 표시합니다.
// 2 : 이미지의 원본 가로/세로 비율을 유지하면서 셀에 맞춥니다.
//====================================================================================================
down.setImageProcessType(2);
//====================================================================================================
// [ 사용자 환경 설정 #19 ]
//====================================================================================================
// 엑셀 파일의 인쇄 항목을 설정하고 싶은 경우에 설정하세요.
// 설정을 원하지 않는 경우 주석처리해주세요.
//====================================================================================================
/**
ExcelPrintSetup printSetup = new ExcelPrintSetup();
//컬러 인쇄 여부를 설정합니다. 기본값은 true입니다. false로 설정하면 흑백인쇄 모드가 됩니다.
printSetup.setColorPrint(true);
//용지 사이즈를 설정합니다. 설정 가능한 용지는 Letter, Legal, A3, A4, A5, B4, B5 입니다.
printSetup.setPageSize("A4");
//용지 방향을 설정합니다. true는 가로, false는 세로 방향입니다.
printSetup.setLandscape(true);
//페이지를 나눌때 셀이 잘리지 않도록 설정합니다.
printSetup.setAutoBreak(true);
//용지 내에 페이지를 맞춰서 인쇄할 때 사용합니다.
printSetup.setFitToPage(true);
// 페이지 내에 열맞춤을 설정합니다. 이 옵션을 사용하려면 setFitToPage(true); 와 setFitHeight(false); 를 함께 설정해야 합니다.
printSetup.setFitWidth(true);
// 페이지 내에 행맞춤을 설정합니다. 이 옵션을 사용하려면 setFitToPage(true); 와 setFitWidth(false); 를 함께 설정해야 합니다.
printSetup.setFitHeight(false);
//머리글 부분의 여백을 Cm 단위로 설정합니다.
printSetup.setHeaderMargin(0d);
//꼬리글 부분의 여백을 Cm 단위로 설정합니다.
printSetup.setFooterMargin(0d);
//위쪽 여백을 Cm 단위로 설정합니다.
printSetup.setTopMargin(0.5);
//아래쪽 여백을 Cm 단위로 설정합니다.
printSetup.setBottomMargin(0.5);
//왼쪽 여백을 Cm 단위로 설정합니다.
printSetup.setLeftMargin(0.5);
//오른쪽 여백을 Cm 단위로 설정합니다.
printSetup.setRightMargin(0.5);
//엑셀 파일의 인쇄 설정을 파일에 적용합니다.
down.setPrintSetup(printSetup);
**/
//====================================================================================================
// [ 사용자 환경 설정 #20 ]
//====================================================================================================
// 트리 사용 시트에서 트리구조를 엑셀 파일에 반영할지 여부(엑셀의 그룹기능 사용)
// Default가 true로 사용하지 않고자 하는 경우 false로 설정
//====================================================================================================
//down.setUseGroupTree(false);
// 다운로드 1. 생성된 문서를 브라우저를 통해 다운로드
down.downToBrowser();
// 다운로드 2. 생성된 엑셀 문서를 서버에 저장
/*
String fileName = down.getFileName();
// Password를 사용하려면 이 부분에서 IBSheet에서 전달된 패스워드를 취득해야 합니다.
String passWord = down.getWorkbookPassword();
down.saveToFile("d:/");
// 생성된 엑셀 문서를 다운로드 처리(이 부분에서 엑셀문서를 DRM 처리함)
File file = new File("d:/" + fileName);
// 패스워드 설정은 XLSX 형식의 파일이 대상이고 POI 라이브러리를 사용할 때만 가능합니다.
if (fileName.toLowerCase().endsWith(".xlsx") && !"".equals(passWord)) {
File pFile = new File("d:/encrypt.xlsx");
FileOutputStream fout = new FileOutputStream(pFile);
//서버 내에 암호화된 엑셀파일을 생성합니다.
com.ibleaders.ibsheet.excel.ProtectXLSX.encryptXLSX("d:/", passWord, file, fout);
//원본 파일을 지웁니다.
file.delete();
//다운로드할 대상을 암호화된 엑셀파일로 설정합니다.
file = pFile;
}
//서버 내에 저장된 파일을 다운로드.
try {
if (file.isFile()) {
int fileLength = (int)file.length();
// 사용자의 브라우저에 다운로드할 파일의 정보를 전달합니다.
down.setFileHeader();
response.setContentLength(fileLength);
FileInputStream fileIn = new FileInputStream(file);
ServletOutputStream out3 = response.getOutputStream();
byte[] outputByte = new byte[fileLength];
while (fileIn.read(outputByte, 0, fileLength) != -1) {
out3.write(outputByte, 0, fileLength);
}
fileIn.close();
out3.flush();;
out3.close();
}
} finally {
file.delete();
}
*/
} catch (Exception e) {
response.setContentType("text/html;charset=utf-8");
response.setCharacterEncoding("utf-8");
response.setHeader("Content-Disposition", "");
e.printStackTrace();
OutputStream out2 = response.getOutputStream();
out2.write(down.getDownError("An error has occurred while downloading the file."));
out2.flush();
} catch (Error e) {
response.setContentType("text/html;charset=utf-8");
response.setCharacterEncoding("utf-8");
response.setHeader("Content-Disposition", "");
e.printStackTrace();
OutputStream out2 = response.getOutputStream();
out2.write(down.getDownError("An error has occurred while downloading the file."));
out2.flush();
} finally {
if (down != null) {
try {
down.close();
} catch (Exception ex) {}
}
down = null;
}
// 파일 정상 다운로드시 아래 구문을 실행하지 않으면 서버 Servlet에서 java.lang.IllegalStateException 이 발생한다.
// 파일 최 하단에서 호출하도록 하면 다운로드 에러로 인한 Exception 메시지가 출력되지 않으므로 정상 다운시에만 처리하도록 한다.
// out.flush();
// out = pageContext.pushBody();
}
@RequestMapping(value = "loadExcel.do", method = RequestMethod.POST)
public void loadExcel(HttpServletRequest request, HttpServletResponse response, @RequestParam("file") MultipartFile excelFile) {
response.setContentType("text/html;charset=utf-8");
response.setCharacterEncoding("utf-8");
response.setHeader("Content-Disposition", "");
IBSheetLoad load = null;
File tempfile = null;
try {
load = new IBSheetLoad();
//====================================================================================================
// [ 사용자 환경 설정 #0 ]
//====================================================================================================
// Html 페이지의 인코딩이 UTF-8 로 구성되어 있으면 "load.setEncoding("UTF-8");" 로 설정하십시오.
// 한글 헤더가 있는 그리드에서 엑셀 로딩이 동작하지 않으면 이 값을 바꿔 보십시오.
// Down2Excel.jsp 에서의 설정값과 동일하게 바꿔주십시오.
// setService 전에 설정해야 합니다.
//====================================================================================================
load.setEncoding("UTF-8");
//====================================================================================================
// [ 사용자 환경 설정 #1 ]
//====================================================================================================
// 엑셀 전문의 MarkupTag Delimiter 사용자 정의 시 설정하세요.
// 설정 값은 IBSheet8 환경설정(ibsheet.cfg)의 MarkupTagDelimiter 설정 값과 동일해야 합니다.
//====================================================================================================
//load.setMarkupTagDelimiter("┼","╫","╬","╪");
//====================================================================================================
// [ 사용자 환경 설정 #2 ]
//====================================================================================================
// 시트에 포함될 문자열 중 STX(\u0002), ETX(\u0003) 이 포함된 경우에만 설정해주세요.
// 설정을 원하지 않는 경우 주석처리해주세요.
// 0 : 시트 구분자로 STX, ETX 문자를 사용합니다. (기본값)
// 1 : 시트 구분자로 변형된 문자열을 사용합니다. (시트에 설정이 되어 있어야 합니다.)
//====================================================================================================
//load.setDelimMode(1);
//====================================================================================================
// [ 사용자 환경 설정 #3 ]
//====================================================================================================
// 엑셀의 머지된 셀의 처리를 설정합니다.
// true인 경우 머지된 셀의 첫번째 셀 기준으로 데이터를 로드하고(기본값), false인 경우에는 로드하지 않습니다.
//====================================================================================================
//load.setMergeProcess(false);
//====================================================================================================
// [ 사용자 환경 설정 #4 ]
//====================================================================================================
// HeaderMatch 사용 시 시트에 있는 헤더가 엑셀에 하나라도 존재하지 않는 경우 오류메시지를 출력하고 데이터를 로딩하지 않을지 여부.
//====================================================================================================
//load.setStrictHeaderMatch(true);
//====================================================================================================
// [ 사용자 환경 설정 #5 ]
//====================================================================================================
// LoadExcel 처리를 허용할 최대 행 수를 설정한다.
// 엑셀 데이터가 지정한 행 수보다 많은 경우 메시지를 출력하고 처리가 종료된다.
//====================================================================================================
//load.setMaxRows(100);
//====================================================================================================
// [ 사용자 환경 설정 #6 ]
//====================================================================================================
// LoadExcel 처리를 허용할 최대 열 수를 설정한다.
// 엑셀 데이터가 지정한 열 수보다 많은 경우 메시지를 출력하고 처리가 종료된다.
//====================================================================================================
//load.setMaxColumns(20);
//====================================================================================================
// [ 사용자 환경 설정 #7 ]
//====================================================================================================
// 엑셀의 비어있는 행도 로드하도록 설정한다.
// false로 설정하는 경우 비어있는 행을 로드하고, true인 경우에는 비어있는 행을 건너뛴다.
// 시트의 LoadExcel({ SkipEmptyRow : false }); 옵션과 동일하게 작동한다.
// LoadExcel에서 StartRow를 설정한 경우, 해당 행은 검사하지 않는다.
//====================================================================================================
//load.setSkipEmptyRow(false);
//====================================================================================================
// [ 사용자 환경 설정 #8 ]
//====================================================================================================
// 업로드 가능한 최대 파일 사이즈를 설정한다.
// kb 단위로 1024 * 5 로 설정시 5MB를 의미한다.
//====================================================================================================
//load.setMaxFileSize(1024 * 5);
//====================================================================================================
// HttpServletRequest, HttpServletResponse를 IBSheet 서버모듈에 등록합니다.
//====================================================================================================
/****************************************************************************************************
* 화면에서 보낸 시트 데이터를 다시 셋팅한다.
*
****************************************************************************************************/
//임시로 파일을 써야 할 java 임시 저장소
String tempPath = System.getProperty("java.io.tmpdir");
//임시 파일명 + 확장자
String tempFileName = UUID.randomUUID().toString().replaceAll("-", "") + excelFile.getOriginalFilename().substring(excelFile.getOriginalFilename().lastIndexOf("."));
//임시파일
tempfile = new File(tempPath+tempFileName);
//화면에서 받은 파일을 임시파일에 저장
excelFile.transferTo(tempfile);
String Data = request.getParameter("columnTag");
/*
System.out.println(Data);
화면에서 전송하는 data는 xml 형식으로 되어 있다.(<0_IBCC></0_IBCC><0_IBCT></0_IBCT>)
데이터가 XSS Filter을 통과하게 되면 <,> 등이 다른 문자로 변환이 되므로 아래 2가지중 하나를 적용한다.
1. request로 받은 Data 값을 <0_IBCC></0_IBCC><0_IBCT></0_IBCT> 되도록 치환하여 한다.
2. (Cfg) MarkupTagDelimiter를 설정하고 [ 사용자 환경 설정 #1 ] : setMarkupTagDelimiter를 설정한다.
*/
//데이터와 파일을 전달한다.
load.setData(Data,tempfile.getAbsolutePath());
/****************************************************************************************************
* 화면에서 보낸 시트 데이터를 다시 셋팅한다.
*
****************************************************************************************************/
load.setService(request, response);
/** 서버로 전송된 파일을 가공해서 사용해야 할 경우. (예, DRM 복호화 등)
// 서버에 저장된 파일 객체
File uploadFile = load.getUploadFile();
String uploadFileName = uploadFile.getName();
String uploadFilePath = uploadFile.getAbsolutePath();
// TODO
// 업로드된 엑셀 파일을 가공함 (예, 엑셀문서를 DRM 처리함)
// 가공된 파일을 ibSheet에서 읽을 수 있도록 처리.
load.loadFile(uploadFile);
**/
//브라우저에 데이터를 전달하여 시트에 로드
load.writeToBrowser();
} catch (IBSheetException e) {
try {
OutputStream out2 = response.getOutputStream();
out2.write(load.getLoadError(e.getErrorCode(), e.getErrorMessage()));
out2.flush();
} catch (IOException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
//e.printStackTrace();
} catch (Exception e) {
try {
OutputStream out2 = response.getOutputStream();
out2.write(load.getLoadError());
out2.flush();
} catch (IOException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
//e.printStackTrace();
} catch (Error e) {
try {
OutputStream out2 = response.getOutputStream();
out2.write(load.getLoadError());
out2.flush();
} catch (IOException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
} finally {
if (load != null) {
load.close();
}
load = null;
}
}
@RequestMapping(value = "directLoadExcel.do", method = RequestMethod.POST)
public void DirectLoadExcel(HttpServletRequest request,HttpServletResponse response, @RequestParam("file") MultipartFile excelFile) throws Exception {
response.setContentType("text/html;charset=utf-8");
response.setCharacterEncoding("utf-8");
response.setHeader("Content-Disposition", "");
IBSheetLoad load = null;
File tempfile = null;
try {
load = new IBSheetLoad();
//====================================================================================================
// [ 사용자 환경 설정 #0 ]
//====================================================================================================
// Html 페이지의 인코딩이 UTF-8 로 구성되어 있으면 "load.setEncoding("UTF-8");" 로 설정하십시오.
// setService 전에 설정해야 합니다.
//====================================================================================================
load.setEncoding("UTF-8");
//====================================================================================================
// [ 사용자 환경 설정 #1 ]
//====================================================================================================
// 엑셀 전문의 MarkupTag Delimiter 사용자 정의 시 설정하세요.
// 설정 값은 IBSheet7 환경설정(ibsheet.cfg)의 MarkupTagDelimiter 설정 값과 동일해야 합니다.
//====================================================================================================
//load.setMarkupTagDelimiter("┼","╫","╬","╪");
//====================================================================================================
// [ 사용자 환경 설정 #2 ]
//====================================================================================================
// 시트에 포함될 문자열 중 STX(\u0002), ETX(\u0003) 이 포함된 경우에만 설정해주세요.
// 설정을 원하지 않는 경우 주석처리해주세요.
// 0 : 시트 구분자로 STX, ETX 문자를 사용합니다. (기본값)
// 1 : 시트 구분자로 변형된 문자열을 사용합니다. (시트에 설정이 되어 있어야 합니다.)
//====================================================================================================
//load.setDelimMode(1);
//====================================================================================================
// [ 사용자 환경 설정 #3 ]
//====================================================================================================
// 엑셀의 머지된 셀의 처리를 설정합니다.
// true인 경우 머지된 셀의 첫번째 셀 기준으로 데이터를 로드하고(기본값), false인 경우에는 로드하지 않습니다.
//====================================================================================================
//load.setMergeProcess(false);
//====================================================================================================
// [ 사용자 환경 설정 #4 ]
//====================================================================================================
// 엑셀의 비어있는 행도 로드하도록 설정한다.
// false로 설정하는 경우 비어있는 행을 로드하고, true인 경우에는 비어있는 행을 건너뛴다.
// 시트의 DirectLoadExcel({ SkipEmptyRow : false }); 옵션과 동일하게 작동한다.
// DirectLoadExcel에서 StartRow를 설정한 경우, 해당 행은 검사하지 않는다.
//====================================================================================================
//load.setSkipEmptyRow(false);
//====================================================================================================
// HttpServletRequest, HttpServletResponse를 IBSheet 서버모듈에 등록합니다.
//====================================================================================================
/****************************************************************************************************
* 화면에서 보낸 시트 데이터를 다시 셋팅한다.
*
****************************************************************************************************/
//임시로 파일을 써야 할 java 임시 저장소
String tempPath = System.getProperty("java.io.tmpdir");
//임시 파일명 + 확장자
String tempFileName = UUID.randomUUID().toString().replaceAll("-", "") + excelFile.getOriginalFilename().substring(excelFile.getOriginalFilename().lastIndexOf("."));
//임시파일
tempfile = new File(tempPath+tempFileName);
//화면에서 받은 파일을 임시파일에 저장
excelFile.transferTo(tempfile);
String Data = request.getParameter("columnTag");
/*
System.out.println(Data);
화면에서 전송하는 data는 xml 형식으로 되어 있다.(<0_IBCC></0_IBCC><0_IBCT></0_IBCT>)
데이터가 XSS Filter을 통과하게 되면 <,> 등이 다른 문자로 변환이 되므로 아래 2가지중 하나를 적용한다.
1. request로 받은 Data 값을 <0_IBCC></0_IBCC><0_IBCT></0_IBCT> 되도록 치환하여 한다.
2. (Cfg) MarkupTagDelimiter를 설정하고 [ 사용자 환경 설정 #1 ] : setMarkupTagDelimiter를 설정한다.
*/
//데이터와 파일을 전달한다.
load.setData(Data,tempfile.getAbsolutePath());
/****************************************************************************************************
* 화면에서 보낸 시트 데이터를 다시 셋팅한다.
*
****************************************************************************************************/
load.setService(request, response);
// 시트에서 보낸 ExtendParam 받기 (IBSheetLoad 선언 이후 ExtendParam 사용 가능)
//String exParam = load.getExtendParam("TestParam");
//System.out.println("exParam [" + exParam + "]");
// 로드 1. 시트에 설정한 FP 페이지로 포워딩
load.sendDirectToFP();
// 로드 2. 엑셀파일의 내용을 읽어온 데이터를 List로 받아서 처리(List<Map<String, String>> 형태)
//List list = load.directLoadExcel();
//System.out.println("list:"+list);
//브라우저에 데이터를 전달하여 시트에 로드
//load.writeToBrowser();
//시트에 데이터 없이 로드 완료 전달 시 (onImportFinish 호출)
//OutputStream out2 = response.getOutputStream();
//out2.write(load.getLoadFinish("EXCEL", 1, "완료"));
//out2.flush();
} catch (IBSheetException e) {
//e.printStackTrace();
OutputStream out2 = response.getOutputStream();
out2.write(load.getLoadError(e.getErrorCode(), e.getErrorMessage()));
out2.flush();
} catch (Exception e) {
//e.printStackTrace();
OutputStream out2 = response.getOutputStream();
out2.write(load.getLoadError());
out2.flush();
} catch (Error e) {
OutputStream out2 = response.getOutputStream();
out2.write(load.getLoadError());
out2.flush();
//e.printStackTrace();
} finally {
if (load != null) {
load.close();
}
load = null;
}
}
@RequestMapping(value = "down2Pdf.do", method = RequestMethod.POST)
public void Down2Pdf(HttpServletRequest request,HttpServletResponse response) throws Exception {
response.setContentType("application/octet-stream");
response.setCharacterEncoding("UTF-8");
response.setHeader("Content-Disposition", "");
Print2Pdf ibPdf = new Print2Pdf(request, response);
/****************************************************************************************************
* 화면에서 보낸 시트 데이터를 다시 셋팅한다.
*
****************************************************************************************************/
String Data = request.getParameter("Data");
/*System.out.println(Data);
화면에서 전송하는 data는 xml 형식으로 되어 있다.(<0_IBCC></0_IBCC><0_IBCT></0_IBCT>)
데이터가 XSS Filter을 통과하게 되면 <,> 등이 다른 문자로 변환이 되므로 아래 2가지중 하나를 적용한다.
1. request로 받은 Data 값을 <0_IBCC></0_IBCC><0_IBCT></0_IBCT> 되도록 치환하여 한다.
2. (Cfg) MarkupTagDelimiter를 설정하고 [ 사용자 환경 설정 #1 ] : setMarkupTagDelimiter를 설정한다.
*/
/****************************************************************************************************
* 화면에서 보낸 시트 데이터를 다시 셋팅한다.
*
****************************************************************************************************/
ibPdf.setData(Data);
//====================================================================================================
// [ 사용자 환경 설정 #1 ]
//====================================================================================================
// Html 페이지의 엔코딩이 UTF-8 로 구성되어 있으면 "ibPdf.setPageEncoding("UTF-8");" 로 설정하십시오.
//====================================================================================================
ibPdf.setPageEncoding("UTF-8");
//====================================================================================================
// [ 사용자 환경 설정 #2 ]
//====================================================================================================
// ttf 파일이 위치한 폴더를 설정하십시오.
//====================================================================================================
String ttfFilePath = getClass().getClassLoader().getResource("static/font/").getPath();
ibPdf.setFontFolder(ttfFilePath);
//====================================================================================================
// [ 사용자 환경 설정 #3 ]
//====================================================================================================
// PDF 문서의 해상도를 설정하십시오.
// 기본 값은 2000 이며 50 ~ 32800 사이에 값을 설정하십시오.
//====================================================================================================
//ibPdf.setDPI(2000);
try {
response.reset();
// 생성된 문서를 브라우저를 통해 다운로드
ibPdf.print();
// 생성된 문서를 서버 특정 폴더에 저장합니다.
//ibPdf.saveTo("d:/down");
//ibPdf.setDownFinish();
// out.clear();
// out = pageContext.pushBody();
} catch (Exception e) {
response.setContentType("text/html;charset=utf-8");
response.setCharacterEncoding("utf-8");
response.setHeader("Content-Disposition", "");
ibPdf.setDownFinish();
OutputStream out2 = response.getOutputStream();
out2.write(ibPdf.getDownError("An error has occurred while downloading the file."));
out2.flush();
} catch (Error e) {
response.setContentType("text/html;charset=utf-8");
response.setCharacterEncoding("utf-8");
response.setHeader("Content-Disposition", "");
ibPdf.setDownFinish();
OutputStream out2 = response.getOutputStream();
out2.write(ibPdf.getDownError("An error has occurred while downloading the file."));
out2.flush();
}
// 파일 정상 다운로드시 아래 구문을 실행하지 않으면 서버 Servlet에서 java.lang.IllegalStateException 이 발생한다.
// 파일 최 하단에서 호출하도록 하면 다운로드 에러로 인한 Exception 메시지가 출력되지 않으므로 정상 다운시에만 처리하도록 한다.
// out.flush();
// out = pageContext.pushBody();
}
@RequestMapping(value = "down2Text.do", method = RequestMethod.POST)
public void Down2Text(HttpServletRequest request,HttpServletResponse response) throws Exception {
response.setContentType("application/octet-stream");
response.setCharacterEncoding("UTF-8");
response.setHeader("Content-Disposition", "");
IBSheetDown down = null;
try {
down = new IBSheetDown();
//====================================================================================================
// [ 사용자 환경 설정 #0 ]
//====================================================================================================
// Html 페이지의 인코딩이 UTF-8 로 구성되어 있으면 "down.setEncoding("UTF-8");" 로 설정하십시오.
// LoadText.jsp 도 동일한 값으로 바꿔 주십시오.
// setService 전에 설정해야 합니다.
//====================================================================================================
down.setEncoding("UTF-8");
//====================================================================================================
// [ 사용자 환경 설정 #1 ]
//====================================================================================================
// HttpServletRequest, HttpServletResponse를 IBSheet 서버모듈에 등록합니다.
//====================================================================================================
/****************************************************************************************************
* 화면에서 보낸 시트 데이터를 다시 셋팅한다.
*
****************************************************************************************************/
String Data = request.getParameter("Data");
System.out.println(Data);
/* 화면에서 전송하는 data는 xml 형식으로 되어 있다.(<0_IBCC></0_IBCC><0_IBCT></0_IBCT>)
데이터가 XSS Filter을 통과하게 되면 <,> 등이 다른 문자로 변환이 되므로 아래 2가지중 하나를 적용한다.
1. request로 받은 Data 값을 <0_IBCC></0_IBCC><0_IBCT></0_IBCT> 되도록 치환하여 한다.
2. (Cfg) MarkupTagDelimiter를 설정하고 [ 사용자 환경 설정 #1 ] : setMarkupTagDelimiter를 설정한다.
*/
down.setData(Data);
/****************************************************************************************************
* 화면에서 보낸 시트 데이터를 다시 셋팅한다.
*
****************************************************************************************************/
down.setService(request, response);
//====================================================================================================
// [ 사용자 환경 설정 #2 ]
//====================================================================================================
// 다운로드 받을 문서의 타입을 설정하십시오.
// txt : txt 형식으로 다운로드
//====================================================================================================
down.setFileType("txt");
//====================================================================================================
// [ 사용자 환경 설정 #3 ]
//====================================================================================================
// 엑셀 전문의 MarkupTag Delimiter 사용자 정의 시 설정하세요.
// 설정 값은 IBSheet7 환경설정(ibsheet.cfg)의 MarkupTagDelimiter 설정 값과 동일해야 합니다.
//====================================================================================================
//down.setMarkupTagDelimiter("[s1]","[s2]","[s3]","[s4]");
//====================================================================================================
// [ 사용자 환경 설정 #4 ]
//====================================================================================================
// 텍스트 파일의 행 구분자를 설정하십시오. (시트의 RowDelim 설정이 우선 적용)
//====================================================================================================
//down.setTextLine("\n");
//====================================================================================================
// [ 사용자 환경 설정 #5 ]
//====================================================================================================
// 텍스트 파일의 열 구분자를 설정하십시오. (시트의 ColDelim 설정이 우선 적용)
//====================================================================================================
//down.setTextSpliter("\t");
// 생성된 문서를 브라우저를 통해 다운로드
down.downToBrowser();
} catch (Exception e) {
response.setContentType("text/html;charset=utf-8");
response.setCharacterEncoding("utf-8");
response.setHeader("Content-Disposition", "");
e.printStackTrace();
OutputStream out2 = response.getOutputStream();
out2.write(down.getDownError("An error has occurred while downloading the file."));
out2.flush();
} catch (Error e) {
response.setContentType("text/html;charset=utf-8");
response.setCharacterEncoding("utf-8");
response.setHeader("Content-Disposition", "");
e.printStackTrace();
OutputStream out2 = response.getOutputStream();
out2.write(down.getDownError("An error has occurred while downloading the file."));
out2.flush();
} finally {
if (down != null) {
try {
down.close();
} catch (Exception ex) {}
}
down = null;
}
// 파일 정상 다운로드시 아래 구문을 실행하지 않으면 서버 Servlet에서 java.lang.IllegalStateException 이 발생한다.
// 파일 최 하단에서 호출하도록 하면 다운로드 에러로 인한 Exception 메시지가 출력되지 않으므로 정상 다운시에만 처리하도록 한다.
// out.flush();
// out = pageContext.pushBody();
}
@RequestMapping(value = "loadText.do", method = RequestMethod.POST)
public void LoadText(HttpServletRequest request,HttpServletResponse response, @RequestParam("file") MultipartFile textFile) throws Exception {
response.setContentType("text/html;charset=utf-8");
response.setCharacterEncoding("utf-8");
response.setHeader("Content-Disposition", "");
IBSheetLoad load = null;
File tempfile = null;
try {
load = new IBSheetLoad();
//====================================================================================================
// [ 사용자 환경 설정 #0 ]
//====================================================================================================
// Html 페이지의 엔코딩이 UTF-8 로 구성되어 있으면 "load.setEncoding("UTF-8")" 로 설정하십시오.
// 한글 헤더가 있는 그리드에서 엑셀 로딩이 동작하지 않으면 이 값을 바꿔 보십시오.
// LoadText.jsp 에서의 설정값과 동일하게 바꿔주십시오.
// setService 전에 설정해야 합니다.
//====================================================================================================
load.setEncoding("UTF-8");
//====================================================================================================
// [ 사용자 환경 설정 #1 ]
//====================================================================================================
// HttpServletRequest, HttpServletResponse를 IBSheet 서버모듈에 등록합니다.
//====================================================================================================
/****************************************************************************************************
* 화면에서 보낸 시트 데이터를 다시 셋팅한다.
*
****************************************************************************************************/
//임시로 파일을 써야 할 java 임시 저장소
String tempPath = System.getProperty("java.io.tmpdir");
//임시 파일명 + 확장자
String tempFileName = UUID.randomUUID().toString().replaceAll("-", "") + textFile.getOriginalFilename().substring(textFile.getOriginalFilename().lastIndexOf("."));
//임시파일
tempfile = new File(tempPath+tempFileName);
//화면에서 받은 파일을 임시파일에 저장
textFile.transferTo(tempfile);
String Data = request.getParameter("columnTag");
/*
System.out.println(Data);
화면에서 전송하는 data는 xml 형식으로 되어 있다.(<0_IBCC></0_IBCC><0_IBCT></0_IBCT>)
데이터가 XSS Filter을 통과하게 되면 <,> 등이 다른 문자로 변환이 되므로 아래 2가지중 하나를 적용한다.
1. request로 받은 Data 값을 <0_IBCC></0_IBCC><0_IBCT></0_IBCT> 되도록 치환하여 한다.
2. (Cfg) MarkupTagDelimiter를 설정하고 [ 사용자 환경 설정 #1 ] : setMarkupTagDelimiter를 설정한다.
*/
//데이터와 파일을 전달한다.
load.setData(Data,tempfile.getAbsolutePath());
/****************************************************************************************************
* 화면에서 보낸 시트 데이터를 다시 셋팅한다.
*
****************************************************************************************************/
load.setService(request, response);
//====================================================================================================
// [ 사용자 환경 설정 #2 ]
//====================================================================================================
// 엑셀 전문의 MarkupTag Delimiter 사용자 정의 시 설정하세요.
// 설정 값은 IBSheet7 환경설정(ibsheet.cfg)의 MarkupTagDelimiter 설정 값과 동일해야 합니다.
//====================================================================================================
//load.setMarkupTagDelimiter("┼","╫","╬","╪");
//브라우저에 데이터를 전달하여 시트에 로드
load.writeToBrowser();
} catch (Exception e) {
//e.printStackTrace();
OutputStream out2 = response.getOutputStream();
out2.write(load.getLoadError());
out2.flush();
} catch (Error e) {
OutputStream out2 = response.getOutputStream();
out2.write(load.getLoadError());
out2.flush();
//e.printStackTrace();
} finally {
if (load != null) {
load.close();
}
load = null;
}
}
}