핵심 가이드

다중 사용자 레이어

loadUserCanvasOverlay()는 여러 사용자(또는 여러 버전)의 canvasData를 뷰어에 레이어로 주입합니다. 뷰어 이력 패널에 항목 목록이 나타나고, 사용자는 각 레이어를 켜고 끄며 원하는 조합으로 겹쳐 볼 수 있습니다.

  • 계약 검토 — 법무·재무·현업 검토자의 표시를 한 화면에서 비교
  • 도면 회람 — 공정별 담당자의 마킹을 선택적으로 표시
  • 버전 비교 — 같은 문서의 v1 ↔ v3 차이를 시각적으로 확인

기본 사용 — 사용자별 레이어

문서 렌더가 끝난 뒤(onPdfLoaded)에 항목 배열을 전달합니다. 배열을 다시 전달하면 패널 전체가 새 목록으로 교체됩니다.

검토자 작업 겹쳐 보기 js
var viewer = Inko.mount('#pdf-container', {
  src: '/pdfv/index.html',
  pdfUrl: '/files/blueprint.pdf',

  onPdfLoaded: function () {
    // 문서 렌더 완료 후 — 검토자들의 작업을 레이어로 주입
    fetch('/api/annotations?docId=123')
      .then(function (res) { return res.json(); })
      .then(function (rows) {
        viewer.loadUserCanvasOverlay(rows.map(function (r) {
          return {
            canvasId:   String(r.id),       // 항목 고유 ID (필수)
            userName:   r.userName,         // 패널에 표시할 이름
            canvasData: r.canvasData,       // 해당 사용자의 저장본
            enabled:    false,              // 초기 표시 여부 (기본 꺼짐)
            regDt:      r.createdAt         // 표시용 등록 시각
          };
        }));
      });
  }
});

항목 필드

필드타입설명
canvasIdstring필수항목 고유 식별자. 토글·이어서 편집의 대상 키입니다.
userNamestring선택이력 패널에 표시할 이름.
canvasDatastring필수해당 사용자·버전의 저장본(onSave로 받은 값 그대로).
enabledboolean선택초기 표시 여부. 기본 false(꺼짐) — 사용자가 패널에서 켭니다.
regDtstring선택패널에 표시할 등록 시각 문자열.
versionnumber선택버전 번호 — 버전 이력 용도로 쓸 때 표기용.
isCurrentboolean선택현재 편집 캔버스에 올라간 버전 표시 — 아래 버전 이력 모드 참고.

버전 이력 모드 — isCurrent

항목 중 하나에 isCurrent: true를 지정하면 뷰어가 버전 이력 모드로 동작합니다. 해당 항목은 패널에서 "편집 중"으로 표시되고(토글 불가), 오버레이로 중복 렌더되지 않습니다. 편집 캔버스에 이미 올라가 있는 버전이기 때문입니다.

버전 이력 패널 구성 js
// 같은 문서의 "내 버전 이력"을 패널에 올리는 패턴
// 최신 버전(목록 첫 항목)에 isCurrent: true를 표시하면
// 뷰어가 버전 이력 모드로 동작합니다.
var entries = versions.map(function (v, i) {
  return {
    canvasId:   'v' + v.version,
    userName:   v.userName + ' (v' + v.version + ')',
    canvasData: v.canvasData,
    regDt:      v.createdAt,
    version:    v.version,
    isCurrent:  i === 0    // 편집 캔버스에 올라간 현재 버전 표시
  };
});

viewer.loadUserCanvasOverlay(entries);
과거 버전에서 '이어서 편집'

버전 이력 모드에서 사용자는 패널의 과거 버전 항목을 편집 캔버스로 불러와 그 시점부터 다시 작업할 수 있습니다. 저장하면 새 버전으로 쌓이므로 기존 이력은 그대로 보존됩니다 — 저장과 버전 관리 참고.

저장 직후 패널 갱신

저장이 성공하면 서버에서 최신 목록을 다시 받아 loadUserCanvasOverlay()를 한 번 더 호출하는 것이 일반적인 패턴입니다.

onSave에서 패널 갱신 js
onSave: function (canvasData, ok) {
  if (!ok) return;
  saveToServer(canvasData).then(function () {   // saveToServer = 고객사 저장 API 호출(자리표시자)
    return fetch('/api/annotations?docId=123').then(function (r) { return r.json(); });
  }).then(function (rows) {
    viewer.loadUserCanvasOverlay(toEntries(rows));  // 패널 즉시 갱신
  });
}

initialCanvasData와의 차이

initialCanvasDataloadUserCanvasOverlay()
용도내 직전 작업 복원 — 이어서 편집다른 사용자·다른 버전 참고 — 겹쳐 보기
편집 가능 여부편집 캔버스에 올라감 — 수정 가능읽기 레이어 — 토글만 가능
전달 시점마운트 옵션 / loadPdf* 인자마운트 후 메서드 호출 (주로 onPdfLoaded)
저장 시 포함포함됨 (내 작업의 일부)포함되지 않음 (참고용 표시)