서버모듈(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 업체에 문의하여 소스 코드를 받아 적용합니다.