서버모듈(loadExcel)과 클라이언트모듈(importData)은 동작 방식이 다르므로 DRM 해제 방법도 다릅니다.
아울러 엑셀 다운로드(down2Excel) 시 DRM 적용 방법도 함께 안내합니다.
1. (Method) loadExcel 호출 시 DRM 해제 (업로드)
함수 호출 시 DRM이 걸린 파일이 서버로 전송되므로, 서버에서 DRM을 해제할 수 있는 로직을 삽입해야 합니다.
당사에서 제공하는 LoadExcel.jsp 페이지에 아래와 같은 내용이 있습니다. /** ~ **/ 부분을 주석 해제 후 DRM 로직을 삽입하고, loadFile 함수로 DRM이 해제된 엑셀 파일을 읽도록 설정합니다.
/** 서버로 전송된 파일을 가공해서 사용해야 할 경우. (예, DRM 복호화 등)
// 서버에 저장된 파일 객체
File uploadFile = load.getUploadFile();
String uploadFileName = uploadFile.getName();
String uploadFilePath = uploadFile.getAbsolutePath();
// TODO
// 업로드된 엑셀 파일을 가공함 (예, 엑셀문서를 DRM 처리함)
// 가공된 파일을 ibSheet에서 읽을 수 있도록 처리. 2번째 인자를 true로 설정하면 파일을 읽은 후 파일 삭제
load.loadFile(uploadFile, true);
**/
// 브라우저에 데이터를 전달하여 시트에 로드
load.writeToBrowser();DRM 해제 로직은 DRM 업체에 문의하여 소스 코드를 받아 적용합니다.
2. (Method) importData 호출 시 DRM 해제 (업로드)
프론트엔드에서 DRM이 해제된 Excel 파일의 Blob 데이터를 확보한 경우, importData 함수의 file 인자에 이 Blob 객체를 전달하여 시트에 데이터를 로드할 수 있습니다.
// DRM이 해제된 Blob(File) 객체를 확보한 뒤 호출
sheet.importData({
file: blob // DRM 해제된 엑셀 파일의 Blob 객체
});
3. (Method) down2Excel 호출 시 DRM 적용 (다운로드)
다운로드 시 생성된 엑셀 문서를 DRM 처리하려면, Down2Excel.jsp의 기본 방식인 "다운로드 1"(down.downToBrowser())을 주석 처리하고, "다운로드 2"(서버에 저장 후 전송) 방식으로 변경합니다. down.saveToFile()로 저장된 파일을 DRM 처리한 뒤 스트림으로 전송합니다.
// 다운로드 1. 생성된 문서를 브라우저를 통해 다운로드
//down.downToBrowser(); // ← DRM 적용 시 주석 처리
// 다운로드 2. 생성된 엑셀 문서를 서버에 저장
String fileName = down.getFileName();
down.setFileHeader();
down.saveToFile("d:/");
// 저장된 엑셀 문서를 DRM 처리 (이 위치에서 DRM 적용)
File file = new File("d:/" + fileName);
// 서버에 저장된(DRM 처리된) 파일을 스트림으로 전송하여 다운로드
FileInputStream fileIn = null;
ServletOutputStream out3 = null;
try {
if (file.isFile()) {
response.setContentLength((int) file.length());
fileIn = new FileInputStream(file);
out3 = response.getOutputStream();
byte[] buffer = new byte[8192];
int bytesRead;
while ((bytesRead = fileIn.read(buffer)) != -1) {
out3.write(buffer, 0, bytesRead);
}
out3.flush();
}
} finally {
if (fileIn != null) { try { fileIn.close(); } catch (Exception e) {} }
if (out3 != null) { try { out3.close(); } catch (Exception e) {} }
if (file != null && file.exists()) { file.delete(); }
}DRM 적용 로직은 DRM 업체에 문의하여 소스 코드를 받아 적용합니다.