Sections
The PDF Viewer is the core page-based document surface. It should support dense documents, scanned documents, selectable text, and page-level navigation.
Page 1 of -
"use client";
import { PDFViewer } from "@/components/ui/pdf-viewer";
export function PdfViewerExample() {
return (
<PDFViewer
file="/path/to/document.pdf"
className="h-[640px]"
defaultThumbnailSidebarOpen={false}Installation
pnpm dlx shadcn@latest add http://localhost:4000/r/pdf-viewer.json
Useful behaviors
- Zoom, fit width, fit page, rotate, and print/download actions.
- Virtualized page rendering for long PDFs.
- Optional OCR block overlays, e-signature fields, search highlights, and annotation layer.
- Text layer support for selection, copy, search, and accessibility.
API Reference
PDFViewer
The PDFViewer component renders a scrollable PDF surface with toolbar controls, lazy page rendering, uploads, and page-level extension hooks.
| Prop | Type | Default | Required |
|---|---|---|---|
file | string | - | No |
className | string | - | No |
defaultThumbnailSidebarOpen | boolean | true | No |
defaultZoom | number | 0.75 | No |
pageWidth | number | 612 | No |
pageHeight | number | 792 | No |
pageNumbers | number[] | - | No |
pageRenderBuffer | number | 2 | No |
showRotateControls | boolean | true | No |
showUpload | boolean | true | No |
toolbarActions | React.ReactNode | - | No |
pageClassName | (pageNumber: number) => string | undefined | - | No |
renderPageOverlay | (props: PDFViewerPageOverlayProps) => React.ReactNode | - | No |
onActivePageChange | (pageNumber: number) => void | - | No |
onDocumentLoadSuccess | (numPages: number) => void | - | No |
onPdfUpload | (file: File) => void | - | No |
onPagePointerDown | (event: React.PointerEvent<HTMLDivElement>, pageNumber: number) => void | - | No |
onPagePointerMove | (event: React.PointerEvent<HTMLDivElement>, pageNumber: number) => void | - | No |
onPagePointerUp | (event: React.PointerEvent<HTMLDivElement>, pageNumber: number) => void | - | No |
onPagePointerCancel | (event: React.PointerEvent<HTMLDivElement>, pageNumber: number) => void | - | No |
Deploy your document processing on Extend
Trusted by Brex, Flatiron, Square, and more.
Extend provides production ready tools to handle your toughest documents.
Deploy on Extend