뷰어

주 문서 뷰어 클래스

Viewer (namespace Doconut)은 Razor 페이지, MVC 컨트롤러, Blazor 컴포넌트 또는 최소 API에서 문서를 여는 공개 진입점입니다. 이는 sealed이며, AddDoconut()에 의해 transient 서비스로 등록되고 생성자 주입을 통해 해결됩니다 — 직접 인스턴스를 생성하지 마십시오.

Viewer는 요청당 상태를 보유하지 않으며 의도적으로 not IDisposable를 구현하지 않습니다: 문서 세션은 세션 캐시에서 독립적으로 존재하므로 서비스를 폐기해도 열린 문서를 해제할 수 없습니다 (Core Concepts → How the Viewer Works 참조).

OpenDocumentAsync (문서 열기)

문서를 열고 클라이언트 위젯이 이후 모든 요청에 사용하는 세션 토큰을 반환합니다.

오버로드사용 시
Task<string> OpenDocumentAsync(string filePath, DocOptions? options = null, CancellationToken ct = default)디스크에서 자동 형식 감지 및 해당 형식의 기본 구성으로 열기
Task<string> OpenDocumentAsync(string filePath, BaseConfig? config, DocOptions? options = null, CancellationToken ct = default)형식별 렌더링 옵션(PdfConfig, WordConfig, …)이 필요한 경우
Task<string> OpenDocumentAsync(Stream stream, FileInfo fileInfo, BaseConfig? config = null, DocOptions? options = null, CancellationToken ct = default)문서가 디스크에 파일이 아닙니다(업로드, 데이터베이스, 블롭). fileInfo는 올바른 확장자를 포함해야 하며 — 형식 감지를 주도합니다
csharp
// 간단히 열기
string token = await viewer.OpenDocumentAsync(path);

// 포맷별 구성 및 옵션과 함께
token = await viewer.OpenDocumentAsync(
    path,
    new PdfConfig { AllowSearch = true, AllowCopy = true },
    new DocOptions { TimeOut = 30 });

// 업로드에서
await using var ms = new MemoryStream();
await file.CopyToAsync(ms);
ms.Position = 0;
token = await viewer.OpenDocumentAsync(ms, new FileInfo(file.FileName));

처리해야 할 예외:

  • LicenseException — 발견된 라이선스가 거부됩니다(메시지에 거부 사유가 포함됨) 또는 형식에 더 이상 부여되지 않은 플러그인 기능이 필요합니다. 거부 메시지 없이 캘린더가 만료되면 예외를 발생시키는 대신 워터마크가 적용된 렌더링으로 대체됩니다.
  • FormatNotSupportedException — Document format '<extension>' is not supported.
  • InvalidDataException — 파일 내용이 손상되었거나 확장자와 일치하지 않습니다.

CloseDocument (문서 닫기)

text
void CloseDocument(string token)

세션을 캐시에서 제거하고(문서 엔진을 즉시 폐기), 보안 마커를 삭제하며 접근 권한을 회수합니다. 선택 사항 — 슬라이딩 만료가 동일한 정리를 수행하지만, 대용량 문서에 권장됩니다.

GetPageCount (페이지 수 가져오기)

text
int GetPageCount(string token)

열린 세션의 총 페이지 수입니다. 토큰이 알 수 없거나 만료된 경우 예외를 발생시킵니다.

DocOptions (문서 옵션)

열기당, 형식에 독립적인 옵션 (namespace Doconut):

형식속성기본값설명
stringPassword""보호된 문서의 비밀번호(자동으로 형식 구성에 복사됨).
intImageResolution0구식. 호환성을 위해서만 유지 — 대신 형식 구성에서 ImageResolution를 설정하십시오.
stringWatermark""렌더링된 페이지에 그려지는 사용자 정의 워터마크 텍스트. 형식 문자열: "^Text~Color~FontSize~FontName~Opacity~Angle", 예: "^Sample Copy~Red~24~Verdana~80~-45".
intTimeOut60세션 슬라이딩 만료 시간(분).
boolIsSecuredtrue현재 적용되지 않음 — 예약됨. 토큰 바인딩은 DoconutOptions.UnsafeMode에 의해 전역적으로 제어됩니다 (Core Concepts → Sessions & Security 참조).

클래스는 또한 일반 단일 호스트 뷰잉 흐름 외부에 의도적으로 위치한 특수 속성을 노출합니다:

형식속성기본값설명
boolIsWebFarmfalse열기 작업을 웹 팜 시나리오로 표시합니다. 해당 공유 스토리지/세션 아키텍처와 함께 사용할 때만 사용하십시오.
stringWebFarmPath""특수 웹 팜 워크플로우에서 사용되는 공유 경로. 일반 단일 호스트 뷰어에서는 비어 있습니다.
boolEditModefalse별도로 배포되는 Editor 워크플로우를 위해 예약됨; 표준 뷰어를 위해 false를 남겨두십시오.

맞춤 워터마크

DocOptions.Watermark 은 여섯 개의 물결표(~) 로 구분된 필드를 사용합니다. 선택적인 선행 ^ 은 모든 모서리 레이아웃을 요청합니다:

text
^Text~Color~FontSize~FontName~Opacity~Angle
csharp
string token = await viewer.OpenDocumentAsync(
    path,
    new PdfConfig(),
    new DocOptions
    {
        Watermark = "^Confidential~Red~24~Verdana~80~-45",
        TimeOut = 30
    });
필드예시의미
Leading ^^선택적인 모든 모서리 레이아웃. 이것이 없으면 일반 워터마크 배치가 사용됩니다.
텍스트Confidential각 페이지에 렌더링되는 텍스트입니다. 비어 있어서는 안 됩니다.
색상Red그리기 레이어가 이해하는 명명된 색상입니다.
폰트 크기24폰트 크기; 잘못된 숫자 입력은 렌더러 기본값으로 대체됩니다.
폰트 이름Verdana요청된 폰트 패밀리입니다. 배포 환경에 설치되어 있는지 확인하십시오.
불투명도800부터 255까지의 바이트 값입니다. 성공적으로 파싱되어야 합니다.
각도-45도 단위의 회전 각도; 잘못된 숫자 입력은 기본값으로 대체됩니다.

파서는 선택적인 ^ 뒤에 정확히 여섯 개의 필드를 기대합니다. 잘못된 정의는 조용히 사라지는 대신 SDK의 가시적인 Invalid Watermark 대체값으로 교체됩니다.

라이선스 결정

라이선스 상태제공된 사용자 정의 값렌더링 결과
유효한 유료 뷰어 라이선스아니오깨끗한 페이지
유효한 유료 뷰어 라이선스예맞춤 워터마크
활성 임시/데모 기본 뷰어아니오깨끗한 기본 뷰어 페이지
활성 임시/데모 기본 뷰어예깨끗한 기본 뷰어 경로가 적용될 때 맞춤 워터마크
누락, 거부, 만료, 버전 불일치, 또는 도메인 오류 라이선스둘 다강제/평가 워터마크; 사용자 정의 값이 이를 대체하지 않습니다
평가 규칙에 따른 플러그인 렌더링둘 다평가 워터마크

같은 결정이 제공된 페이지 이미지와 주석 내보내기에 적용됩니다. 애니메이션 GIF 출력은 프레임마다 스탬프가 찍힙니다. 따라서 맞춤 워터마크는 평가 워터마크를 교체하거나 억제하는 방법이 아니라 라이선스가 부여된 애플리케이션 기능입니다.

주석 API

서버 측 주석 로드 및 내보내기. 전체 안내서는 가이드 → 주석에 있습니다; 개요는 다음과 같습니다:

멤버목적
AnnotationManager GetAnnotationManager(string token)열린 세션의 페이지 차원에 바인딩된 매니저
AnnotationManager GetAnnotationManager(string token, int pageWidth, int pageHeight)명시적인 페이지 차원을 가진 매니저
AnnotationManager GetAnnotationManager(int pageWidth, int pageHeight)세션 독립 매니저
void LoadAnnotationData(string token, AnnotationManager manager)C# 로 구축된 주석을 세션에 로드합니다
void LoadAnnotationData(string token, string annotationData)AnnotationManager.GetAnnotationData() 가 반환한 인코딩된 페이지/Base64 봉투에서 주석을 로드합니다
void LoadAnnotationXML(string token, XmlDocument annotationXml)XML에서 주석을 로드합니다
XmlDocument GetAnnotationXML(string token)세션의 주석을 XML로 내보냅니다
Task<byte[]> ExportAnnotationsToPdfAsync(string token, int zoom = 100, CancellationToken ct = default)주석이 포함된 PDF
Task<int> ExportAnnotationsToPngAsync(…)주석이 포함된 PNG 파일
Task<byte[]> ExportAnnotationsToPngZipAsync(string token, int zoom = 100, CancellationToken ct = default)주석이 포함된 페이지별 PNG의 ZIP

DICOM 메타데이터

text
Task<DicomMetadata?> GetDicomMetadataAsync(string token, CancellationToken ct = default)

DICOM 플러그인을 통해 열린 세션에 대한 DICOM 태그 메타데이터를 반환합니다; 비-DICOM 문서의 경우 null.

리소스 도우미 — ReferenceCss / ReferenceScripts

임베디드 리소스를 제공하는 UseDoconutResources() 에 대해 올바른 종속 순서로 <link>/<script> 태그를 내보냅니다. 검색 및 주석과 같은 라이선스 제한 기능을 위한 번들은 라이선스가 이를 활성화할 때만 내보내어 클라이언트 UI가 서버 동작과 일치하도록 유지합니다.

text
string ReferenceCss(CssConfig? config = null)      // null → Bootstrap + 뷰어 + 검색 + 주석
string ReferenceScripts(ScriptConfig? config = null)

CssConfig 플래그: IncludeBootstrapCss, IncludeViewerCss, IncludeSearchCss (검색 제한), IncludeAnnotationCss (주석 제한).

ScriptConfig 플래그: IncludeJQuery (모두에게 필요), IncludeBootstrap, IncludeViewerScripts (핵심: docViewer.js + splitter + links), IncludeSearchScripts 및 IncludeSearchBar (검색 제한), IncludeAnnotationScripts 및 IncludeAnnotationBar (주석 제한).

html
@inject Doconut.Viewer Viewer

@Html.Raw(Viewer.ReferenceCss(new CssConfig { IncludeBootstrapCss = true, IncludeViewerCss = true }))
@Html.Raw(Viewer.ReferenceScripts(new ScriptConfig { IncludeJQuery = true, IncludeViewerScripts = true }))

GetWorksheetNames

text
IReadOnlyList<string> GetWorksheetNames(string token)

열려 있는 스프레드시트의 워크시트 이름을 워크북 순서대로 반환하며, 열려 있는 문서가 스프레드시트가 아닌 경우 빈 목록을 반환합니다.

26.9.0에 추가되었습니다.

이 페이지가 도움이 되었나요?