@embedpdf/engines
Pluggable rendering engines for EmbedPDF. Ships with PdfiumNative (low-level executor) and PdfEngine (high-level orchestrator) – a promise‑first API built on top of @embedpdf/pdfium.
Documentation
For complete guides, examples, and full API reference, visit:
Official Documentation
Why @embedpdf/engines?
- High‑level abstraction – handles tasks, DPR scaling, annotation colour resolution, range/linearised loading.
- Universal runtimes – works in browsers, Node, and serverless environments.
- Typed & composable – 100 % TypeScript with generics for custom image pipelines.
Features
- Open PDFs from
ArrayBuffer or URL
- Render full pages, arbitrary rectangles, thumbnails – all DPI‑aware
- Text extraction, glyph geometry, word‑break‑aware search with context windows
- Read / create / transform / delete annotations and form fields
- Page ops: merge, extract, flatten, partial import
- Attachments & digital‑signature introspection
Installation
npm install @embedpdf/engines @embedpdf/pdfium
Basic Usage
import { init } from '@embedpdf/pdfium';
import { PdfiumNative, PdfEngine } from '@embedpdf/engines/pdfium';
import { browserImageDataToBlobConverter } from '@embedpdf/engines/converters';
const pdfiumWasm =
'https://cdn.jsdelivr.net/npm/@embedpdf/pdfium/dist/pdfium.wasm';
(async () => {
const response = await fetch(pdfiumWasm);
const wasmBinary = await response.arrayBuffer();
const pdfiumModule = await init({ wasmBinary });
const native = new PdfiumNative(pdfiumModule);
const engine = new PdfEngine(native, {
imageConverter: browserImageDataToBlobConverter,
});
const doc = await engine
.openDocumentUrl({ id: 'demo', url: '/demo.pdf' })
.toPromise();
const page0 = doc.pages[0];
const blob = await engine.renderPage(doc, page0).toPromise();
})();
Learn More
Head over to our docs for:
- Getting Started – initialise, render, destroy
- Engine Interface – implement your own back‑end
- Advanced Topics – workers, Node pipelines, Sharp image adapters
License
MIT – see the LICENSE file.