react-pdf-engine
v1.0.0
Published
Offline Chromium PDF rendering engine for React and Tauri applications.
Maintainers
Readme
react-pdf-engine
Offline Chromium PDF rendering for React and Tauri applications.
react-pdf-engine is only an HTML to PDF engine. It does not build documents,
inject dynamic fields, process forms, or provide a designer. Compose the HTML in
your app, then pass the final HTML string to this package.
Install
npm install react-pdf-engineThe package uses puppeteer-core, so it does not download Chromium during npm
install. It resolves browsers in this order:
executablePathpassed torenderPdf- Google Chrome on Windows
- Microsoft Edge on Windows
- bundled Chromium paths, including
REACT_PDF_ENGINE_CHROMIUM_PATH
Runtime
This package is a Node-side library. In a Tauri app, run it from a local sidecar or service layer and call that layer from the React WebView.
Usage
import { closePdfEngine, renderPdf } from "react-pdf-engine";
const pdf = await renderPdf({
html: "<html><body><h1>Certificate</h1></body></html>",
size: {
width: "210mm",
height: "297mm"
},
output: "buffer"
});
await renderPdf({
html: "<html><body><h1>Marksheet</h1></body></html>",
size: {
width: "210mm",
height: "297mm"
},
output: "file",
outputPath: "C:/documents/marksheet.pdf"
});
await closePdfEngine();Options
type RenderPdfOptions = {
html: string;
size: {
width: string;
height: string;
};
margins?: {
top?: string;
right?: string;
bottom?: string;
left?: string;
};
landscape?: boolean;
output?: "buffer" | "file";
outputPath?: string;
scale?: number;
timeout?: number;
executablePath?: string;
};output defaults to "buffer". When output is "file", outputPath is
required and the parent directory must already exist.
Rendering Guarantees
The engine uses Chromium's native print pipeline through page.pdf() with:
printBackground: truepreferCSSPageSize: true- explicit viewport with
deviceScaleFactor: 2 - print CSS injection for zero body/page margins and exact color printing
It does not use html2canvas, screenshots, canvas rasterization, or remote
rendering APIs.
Assets And Fonts
Supported inputs include base64 images, file URLs, HTTPS images, SVG, PNG, JPEG,
WebP, and CSS @font-face declarations. The renderer waits for network idle,
document.fonts.ready, and image load/decode before generating the PDF.
If an asset fails to load, renderPdf throws PdfEngineError with code
ASSET_LOAD_FAILED and details about the failed asset URLs.
Smoke Test
npm run smokeThe smoke script builds the package and renders examples/output/smoke.pdf
using the locally detected Chrome, Edge, or bundled Chromium path.
