Skip to main content

Virtual Renderer

For large documents, VirtualRenderer only renders pages visible in the viewport — like a virtualized list for PDFs.

import { VirtualRenderer } from "pdfnova/lite";

Setup

const renderer = new VirtualRenderer({
container: document.getElementById("viewer")!,
scale: 1.5,
overscan: 2, // pre-render 2 pages above/below viewport
cacheSize: 10, // LRU cache keeps 10 rendered pages in memory
gap: 8, // 8px gap between pages
});

await renderer.setDocument(doc);
// Jump to a specific page
renderer.scrollToPage(5);

// Get current visible page
const currentPage = renderer.getCurrentPage();

Options

OptionTypeDefaultDescription
containerHTMLElementrequiredScrollable container element
scalenumber1Render scale
overscannumber1Pages to render outside viewport
cacheSizenumber5LRU cache size for rendered canvases
gapnumber0Gap between pages in pixels

How It Works

  1. Listens to the container's scroll events
  2. Calculates which pages are visible (plus overscan)
  3. Renders only those pages, reusing cached canvases
  4. Removes off-screen pages from the DOM (but keeps them in the LRU cache)

This keeps memory usage constant regardless of document size — a 1,000-page PDF uses the same memory as a 10-page one.