react-pdf & pdf.js
Renders each page of your PDF onto an HTML canvas so you can see it and drop a signature on top. pdf.js is maintained by Mozilla and ships inside Firefox.
How it works
pdf2sign runs entirely in your browser. Your PDF never touches a server — not ours, not anyone's. Here is exactly what happens when you sign a document with the tool.
When you drop a PDF onto the editor or pick it with the file
picker, your browser uses the File API to hand the raw bytes
directly to the page's JavaScript. No fetch() call
runs, no upload happens. You can confirm this in your browser's
network tab — it will be empty while you sign.
Once the file is in memory, the page renders each page of the PDF with react-pdf, which uses Mozilla's pdf.js under the hood. Large files may take a moment to render the first time; after that, scrolling is instant because everything is already cached locally.
pdf2sign offers three ways to make a signature, and you can mix them freely — draw one for the signature line, type your printed name elsewhere, upload an existing signature image on a third page.
When you click download, pdf2sign runs pdf-lib — a pure-JavaScript PDF library — to embed your signature PNG at the exact coordinates you positioned it. The resulting bytes are handed to your browser's download mechanism as a Blob, which saves them to your Downloads folder.
The same PDF format rules apply as with Adobe Reader, Preview, or any other desktop signer: pdf2sign writes a standard signed PDF that opens and prints anywhere.
Renders each page of your PDF onto an HTML canvas so you can see it and drop a signature on top. pdf.js is maintained by Mozilla and ships inside Firefox.
A pure-JavaScript library that can read and write PDF files. We use it to embed your signature PNG and save a new file. It runs in the browser — no server component.
Captures your strokes with the Pointer Events API, supporting mouse, touch, and stylus. The canvas is exported as a trimmed PNG at your device's full pixel density.
Ships the lightest possible HTML and only hydrates the editor when you visit /sign. Marketing pages are static — they load instantly and work with JavaScript disabled.