ViewerConfig
클라이언트 뷰어 위젯 옵션
ViewerConfig (namespace Doconut)는 브라우저 뷰어의 외관과 동작을 설명합니다. 문서 렌더링 품질에는 영향을 주지 않으며, 이를 위해서는 포맷 설정을 사용하십시오. C# 클래스와 오랜 역사를 가진 JavaScript 위젯은 기본값이 다르므로 값을 명시적으로 매핑해야 합니다.
이 릴리스의 두 클라이언트‑사이드 변경 사항은 조용히 실패합니다. 핸들러 함수는 옵션으로 전달되며 — 위젯은 더 이상 컨테이너 ID에서 전역 함수 이름을 유도하지 않으며 —
ResPath는 애플리케이션 루트가 아니라 리소스 접두사 를 가리켜야 합니다. 두 경우 모두 서버는 정상적으로 작동하고 브라우저 콘솔에는 아무것도 보고되지 않습니다. 이전 라이브러리에서 페이지를 이어받는 경우, 먼저 콜백과 경로 체크리스트를 읽어 보세요.
C# 속성
| 유형 | 속성 | 기본값 | 설명 |
|---|---|---|---|
bool | ShowThumbs | true | 썸네일 패널을 표시합니다. |
bool | AutoLoad | false | 초기화 후 자동으로 로드합니다. 일반 토큰 흐름은 View(token)을 명시적으로 호출합니다. |
bool | AutoFocus | true | 초기화 중에 브라우저 포커스/스크롤을 뷰어로 이동합니다. |
bool | AutoPageFocus | true | 페이지가 바뀔 때 현재 썸네일이 보이도록 유지합니다. |
int | PageZoom | 100 | 초기 줌 비율(퍼센트)입니다. |
int | ZoomStep | 10 | 줌 명령으로 추가하거나 제거되는 퍼센트입니다. |
int | MaxZoom | 300 | 최대 줌 비율(퍼센트)입니다. |
bool | ShowToolTip | true | 스크롤 중에 페이지 위치 툴팁을 표시합니다. |
string | ToolTipPageText | "Page " | 페이지 툴팁에 사용되는 접두사입니다. |
bool | CacheEnabled | false | 브라우저 메모리에서 페이지 이미지의 이동 윈도우를 유지합니다. localStorage를 사용하지 않습니다. |
bool | LargeDoc | false | 큰 문서의 경우 페이지 요소를 시간 간격 배치로 추가합니다. |
bool | ShowHyperlinks | false | 서버 설정이 추출한 경우 하이퍼링크 오버레이를 렌더링합니다. |
bool | FixedZoom | true | 반응형 재계산 대신 고정 줌 비율을 사용합니다. |
int | FixedZoomPercent | 100 | 고정 데스크톱 줌입니다. |
int | FixedZoomPercentMobile | 75 | 고정 모바일 줌입니다. |
string | BasePath | "/" | 호스트가 UseDoconut()를 매핑하는 브랜치입니다. |
string | ResPath | "doconut-res" | 위젯이 사용하는 리소스 베이스입니다. 일반 설정에서는 <ResourcesPath>/images를 가리키도록 합니다. |
string | FitType | "width" | "width", "height" 또는 자동 맞춤이 없을 경우 빈 문자열. 현재 위젯에서는 "page"를 허용하지 않습니다. |
bool | RetryOn409 | false | 비동기/분산 페이지 생성이 202 Accepted를 반환할 때 폴링을 활성화합니다; 호환성을 위해 409도 허용됩니다. 일반 동기 뷰어에서는 필요하지 않습니다. |
var config = new ViewerConfig
{
ShowThumbs = true,
AutoLoad = false,
PageZoom = 100,
MaxZoom = 300,
FitType = "width",
BasePath = "/doconut",
ResPath = "/doconut-res/images",
ShowHyperlinks = true
};C#에서 JavaScript 매핑
직접 직렬화된 ViewerConfig를 docViewer(...)에 전달하지 마세요. 대부분의 위젯 키는 camelCase이며, 세 개의 경로/맞춤 키는 PascalCase입니다.
| C# | JavaScript |
|---|---|
ShowThumbs | showThumbs |
AutoLoad | autoLoad |
AutoFocus | autoFocus |
AutoPageFocus | autoPageFocus |
PageZoom | pageZoom |
ZoomStep | zoomStep |
MaxZoom | maxZoom |
ShowToolTip | showToolTip |
ToolTipPageText | toolTipPageText |
CacheEnabled | cacheEnabled |
LargeDoc | largeDoc |
ShowHyperlinks | showHyperlinks |
FixedZoom | fixedZoom |
FixedZoomPercent | fixedZoomPercent |
FixedZoomPercentMobile | fixedZoomPercentMobile |
BasePath | BasePath |
ResPath | ResPath |
FitType | FitType |
RetryOn409 | retryOn409 |
JavaScript 기본값
위젯은 C# 클래스와 다른 오래된 기본값을 가지고 있습니다. 아래 값들은 현재 docViewer.js 구현에서 가져온 것입니다.
| 옵션 | 기본값 | 설명 |
|---|---|---|
leftMinWidth / leftMaxWidth | 220 / 800 | 썸네일 패널 너비 범위입니다. |
showThumbs | true | 초기 썸네일 가시성입니다. |
autoFocus / autoPageFocus | true / false | autoPageFocus는 C# 기본값과 다릅니다. |
thumbWidth / thumbHeight / thumbPadding | 150 / 200 / 10 | 픽셀 단위의 썸네일 크기와 패딩입니다. |
pageZoom / zoomStep / maxZoom | 100 / 10 / 200 | JavaScript maxZoom은 C#(300)과 다릅니다. |
showToolTip / toolTipPageText | true / "Page " | 페이지 위치 툴팁입니다. |
format / doc / AccessToken | "" / 0 / "" | 내부 초기화 값; 일반적으로 View(token)에 의해 채워집니다. |
debugMode | false | 추가 클라이언트 진단 옵션입니다. |
FitType | "" | 제공되지 않는 한 자동 맞춤이 없습니다. |
BasePath | "DocImage.axd" | 호환성을 위해 유지되는 과거 클라이언트 기본값입니다. 현재 ASP.NET Core 호스트는 명시적으로 매핑된 미들웨어 브랜치를 설정해야 합니다. |
ResPath | "" | 임베디드 이미지 경로로 명시적으로 설정합니다. |
cacheEnabled / cacheCount / cacheDelay | false / 3 / 3 | 메모리 내 페이지 사전 로드 윈도우와 지연 시간입니다. |
autoLoad | false | 명시적인 토큰 흐름이 권장됩니다. |
largeDoc | true | C# 기본값과 다릅니다. |
fixedZoom | false | C# 기본값과 다릅니다. |
fixedZoomPercent / fixedZoomPercentMobile | 100 / 50 | 모바일 값은 C#(75)과 다릅니다. |
showHyperlinks | true | 오버레이를 표시하려면 서버 측에서 추출이 필요합니다. |
동작에 중요한 값들은 기본값에 의존하지 말고 명시적으로 설정하세요:
<div id="divDocViewer"><div id="div_ctlDoc"></div></div>
<script>
const objViewer = $('#div_ctlDoc').docViewer({
showThumbs: true,
autoLoad: false,
autoFocus: true,
autoPageFocus: true,
pageZoom: 100,
zoomStep: 10,
maxZoom: 300,
FitType: 'width',
cacheEnabled: false,
largeDoc: false,
showHyperlinks: true,
fixedZoom: true,
fixedZoomPercent: 100,
fixedZoomPercentMobile: 75,
BasePath: '/doconut',
ResPath: '/doconut-res/images',
onViewerReady: function () {},
onError: function (message) { console.error('DocViewer:', message); }
});
</script>콜백
| 콜백 | 인수 | 목적 |
|---|---|---|
onPageLoading | pageNum | 페이지 요청이 시작될 때 호출됩니다. |
onPageLoaded | pageNum | 페이지 이미지 로딩이 완료될 때 호출됩니다. |
onThumbnailClicked | pageNum | 사용자가 썸네일을 클릭했을 때 호출됩니다. |
onPageClicked | pageNum | 사용자가 페이지를 클릭했을 때 호출됩니다. |
onDoubleClick | none | 뷰어가 더블 클릭을 받았을 때 호출됩니다. |
onViewerBusy | none | 뷰어가 바쁜 상태에 들어갈 때 호출됩니다. |
onViewerReady | none | 초기화가 완료될 때 호출됩니다. |
onViewerError | none | 뷰어가 오류 상태에 들어갈 때 호출됩니다. |
onError | message | 작업이 오류 메시지를 반환할 때 호출됩니다. |
onCopy | data | 텍스트 복사 데이터가 제공될 때 호출됩니다. |
onAutoLoadStatus | pageNum | 자동 로드가 해당 페이지까지 진행될 때 호출됩니다. |
onThumbsShown | none | 썸네일 패널이 표시될 때 호출됩니다. |
onAnnLoaded | none | 주석 데이터가 로드될 때 호출됩니다. |
onAnnSaved | none | 주석 데이터가 저장될 때 호출됩니다. |
onAnnSaveError | none | 주석 저장이 실패했을 때 호출됩니다. |
onAnnClosed | none | 주석 UI가 닫힐 때 호출됩니다. |
콜백은 빠르게 처리하고, 텔레메트리를 비동기로 전송하며 페이지 렌더링을 차단하지 않도록 하세요.
이들 각각은 초기화 객체의 옵션입니다. 이전 뷰어는 컨테이너 ID에서 파생된 전역 함수 이름을 찾아 사용했으며, <div id="div_ctlDoc">가 있을 경우 function ctlDoc_OnViewerReady()와 같은 함수를 선언해야 했습니다. 이 조회 로직은 사라졌습니다. 함수를 명시적으로 전달하세요:
objctlDoc = $('#div_ctlDoc').docViewer({
// ... 기존 옵션 ...
onViewerBusy: ctlDoc_OnViewerBusy, // 이름으로 찾던 것이 사라짐
onViewerReady: ctlDoc_OnViewerReady, // 이름으로 찾던 것이 사라짐
onCopy: ctlDoc_Copy, // 이전에는 ctlDoc_Copy(text) 형태
onAutoLoadStatus: ctlDoc_AutoLoadStatus // 이전에는 ctlDoc_AutoLoadStatus(page) 형태
});예전 조회는 빈 catch로 감싸져 있었기 때문에 아무것도 보고되지 않았습니다. 이번 릴리스에서는 함수가 전혀 실행되지 않으며, 흔히 나타나는 증상은 onViewerReady가 숨겨야 할 스피너를 멈추지 않아 바쁜 스피너가 영원히 돌아가는 것입니다. 실제 문서는 정상적으로 렌더링됩니다.
링크 클릭 콜백은 존재하지 않습니다 — 하이퍼링크 처리는 showHyperlinks에 의해 내장되어 있습니다.
공개 메서드 그룹
| 그룹 | 공통 메서드 |
|---|---|
| 생명주기 | View(token, accessToken?), Close(server?), Token(), Init(), IsLoaded() |
| 탐색 | GotoPage(page), ShowPage(page, focus?), Next(next), CurrentPage(), TotalPages() |
| 줌 및 맞춤 | Zoom(zoomIn), CurrentZoom(), FitType(value), Refit() |
| 방향 전환 | Rotate(page, angle), Flip(page, flipType) |
| 썸네일 | HideThumbs(hide), ThumbSize(size), ReloadThumbs(width), ScrollToThumb(thumb) |
| 검색 | CanSearch(), Search(...), SearchMatchCount(), SearchSummary(...), GotoSearchMatch(...) |
| 주석 | SaveAnnotations(), GetAnnotations(), PushAnnotations(...), CloseAnnotations(...), ShowAnnotations(...) |
| 복사 | Copy(...), CopyPage(pageNumber), CopyMode(enabled) |
JavaScript 파일에는 내부 헬퍼도 포함되어 있습니다. 여기서 문서화된 메서드와 레퍼런스 UI에서 사용되는 메서드만을 안정적인 통합 지점으로 간주하십시오.
분산 페이지가 아직 렌더링 중일 때 재시도
retryOn409는 과거 이름을 그대로 유지합니다. 비동기 페이지 생성에 사용되며 현재 202 Accepted 응답과 이전 409 Conflict 신호를 모두 재시도합니다. 활성화하면 위젯은 다음 JavaScript 기본값으로 폴링합니다:
| 옵션 | 기본값 |
|---|---|
retryInitialDelayMs | 250 |
retryBackoffFactor | 1.6 |
retryMaxDelayMs | 2500 |
retryMaxAttempts | 60 |
retryMaxTotalMs | 120000 |
단일 노드 뷰어에서는 비활성화된 상태를 유지하세요. 이를 활성화해도 지원되지 않는 동기 렌더링을 비동기로 바꿀 수는 없습니다.
페이지가 FirstPagePriority와 함께 공유 스토리지에서 제공되는 경우, 이후 페이지가 202 Accepted를 반환할 때까지 재시도하도록 설정하세요. 재시도하지 않는 클라이언트는 아직 렌더링 중인 페이지에 대해 깨진 타일을 표시합니다 — 자세한 내용은 Distributed Deployments를 참고하세요.
경로 체크리스트
DoconutOptions.MiddlewarePath는 실제로 매핑하는 브랜치를 설명해야 합니다.BasePath는 해당 브랜치를 가리켜야 합니다. 레퍼런스 애플리케이션은MapWhen브랜치에서 과거DocImage.axd요청 형태를 유지하므로BasePath: '/'를 설정합니다.DoconutOptions.ResourcesPath는 임베디드 리소스 라우트입니다.ResPath는 일반적으로/images하위 폴더를 가리키며 — 기본 접두사와 함께'doconut-res/images'가 됩니다. 이전 라이브러리에서는 빈ResPath가 올바른 설정이었지만, 여기서는 올바르지 않으며 오류 없이 실패합니다.ExtractHyperlinks는showHyperlinks가 무언가를 표시하기 전에 서버 포맷 설정에서 활성화되어야 합니다.
이 페이지가 도움이 되었나요?