페이지별 이미지
각 페이지는 서버 측에서 래스터화되어 필요 시 제공됩니다. 대용량 문서는 전체 파일이 다운로드된 후가 아니라 첫 페이지에서 열립니다.
문제
파일을 제공하고 브라우저가 렌더링하도록 합니다: 가장 간단하며, 사용자에게 원본 바이트, 메타데이터, 포함된 첨부 파일 및 한 번의 클릭으로 모두 전달할 수 있는 기능을 제공합니다.
JavaScript PDF 엔진을 포함합니다: 파일을 브라우저에 유지하고, 번들에 의미 있는 다운로드를 추가하며, 툴바, 썸네일 레일 및 검색 상자를 직접 구현해야 합니다.
서버 측에서 렌더링하고 이미지를 전송합니다: 사용자는 페이지를 보지만 파일은 인프라를 떠나지 않으며, 동일한 메커니즘이 Word, Excel, CAD 및 이메일에도 적용됩니다 — 이는 보통 두 스프린트 뒤에 요구되는 사항입니다.
기능
각 페이지는 서버 측에서 래스터화되어 필요 시 제공됩니다. 대용량 문서는 전체 파일이 다운로드된 후가 아니라 첫 페이지에서 열립니다.
AdvancedSearch 플러그인을 사용하면 전체 텍스트 검색이 PDF의 텍스트 레이어를 대상으로 수행되어, 검색 결과가 올바른 페이지와 하이라이트에 표시됩니다.
위젯에는 썸네일 레일, 페이지 점프, 확대/축소 및 폭에 맞춤 기능이 포함됩니다. showThumbs와 FitType을 설정하고 진행하세요.
Annotation 플러그인을 사용하면 하이라이트, 댓글, 스탬프 및 서명이 애플리케이션에 저장·내보내기 되며, 원본 파일에 다시 삽입되지 않습니다.
암호화된 PDF는 코드가 제공하는 비밀번호로 서버 측에서 열립니다. 비밀번호는 브라우저에 전달되지 않습니다.
인쇄는 뷰어 기능으로, 노출하거나 제한할 수 있습니다. 이는 사용자가 원본을 다운로드할 수 있는지 여부와는 별개의 결정입니다.
통합
클라이언트는 토큰만 받습니다. 파일명, 저장 위치, 혹은 문서가 카탈로그의 다른 항목이 아닌 PDF라는 사실을 알 수 없습니다.
지원되는 확장자
// Server-side: returns an opaque token, never a path or a URL
app.MapPost("/api/open", async (Viewer viewer) =>
{
string token = await viewer.OpenDocumentAsync("wwwroot/files/Contract.pdf");
return Results.Ok(new { token });
});
// For an encrypted PDF, supply the password server-side —
// it is used to decrypt in your process and goes no further.세부 정보
직접 구현한 경우에만 가능합니다. 뷰어는 불투명 토큰으로 지정된 페이지 이미지를 제공하므로, 원본 파일을 공개하는 것은 누군가가 읽게 하는 부수 효과가 아니라 여러분 코드 내에서 명시적인 결정으로 남습니다.
이미지로는 정상적으로 렌더링되지만 검색할 내용이 없습니다. OCR은 AdvancedSearch 플러그인을 통해서만 제공되며 일반적으로 사용 가능하지 않습니다 — 엔진이 재구축 중이므로 현재는 이를 기반으로 계획하지 마세요.
페이지는 필요에 따라 렌더링·전달되므로 전체를 한 번에 처리하지 않아도 됩니다. 따라서 문서 길이는 메모리 사용에 페이지 복잡도보다 적은 영향을 미칩니다. 실제 비용을 좌우하는 것은 페이지 수가 아니라 매우 무거운 벡터 페이지입니다.