Three steps. Without uploading anything to any server.
Fdo. is a static page. When you load a PDF it isn't sent anywhere: the browser opens it, processes it locally with code running on your device, and saves the result back to your disk. This page walks through the flow step by step and what happens under the hood.
Load the PDFs
Drag the files into the browser or pick them with a click. One or hundreds. Each PDF stays in memory while you have the tab open; closing it wipes them. Nothing is stored in the browser's persistent storage unless you explicitly ask for it (your remembered signature, for instance).
- Maximum size
- Limited by the browser's memory. In practice, tens of MB per file and hundreds in total.
- Formats
- Standard PDF. Encrypted or permission-restricted PDFs are opened in read mode when possible.
- Telemetry
- None. The page does not load any third-party scripts.
Set up the signature once
You have two ways to provide the signature:
- Upload an image. A transparent PNG works best. JPG works too; signatures on a white background can be cropped without trouble.
- Draw it with mouse or trackpad. The stroke is stored as a vector and renders crisply at any size.
Then decide where it goes: the position on the page, the size, and whether it should appear only on the last sheet, on every sheet, or on specific pages. That configuration applies to the whole batch — you don't repeat it per PDF.
If the PDFs are not identical but share a recognisable signature area (for example, a "Signed:" label or a box at the end), Fdo. can anchor the signature to that text and place it correctly on every document.
Download everything signed
Processing the batch takes whatever your CPU takes: on a decent laptop, seconds per PDF. A progress bar shows how many are signed. At the end you can download:
- A ZIP with every signed PDF, keeping the original filenames.
- Each PDF separately if you prefer.
The original PDFs are not modified: what you download is a signed copy. If you don't download anything, no trace remains: closing the tab clears the memory.
What happens under the hood
The app is built with Astro for the static page and React for the editor UI. The PDF part uses two libraries:
- pdf.js
- From Mozilla. Used to render the PDF on screen so you can place the signature with the mouse.
- pdf-lib
- To write the signed PDF. The signature image is embedded as a PDF object, not flattened over the entire page.
Everything runs in the browser. The server only serves static HTML, CSS and JS. You can verify it from the browser's network tab: once the page is loaded, no outbound request is made when you sign.