
I had a PDF that needed a name on a line. The editor I already paid for still wanted another package for that one button. A person on a software forum wrote the same thing in plain dollars: another two hundred a year, just to put a mark on a page.
I did not buy that package. I built a tab that draws the name, puts it where you point, and writes a PDF you can open. No account. No watermark. The file never leaves this browser after the page has loaded.
The new page is Sign a PDF. You draw, you type, or you drop a scan. You move the box. You can add a date. You download. Open that file before you send it. The mark is a picture. It is not a certificate.
The button sat behind another plan
People buy a PDF editor because they already have a lease, a timesheet, or a one-page form. They expect a line, a name, a date. Then the signature tool sits on a second plan.
I am not going to invent a market size for that complaint. I am going to treat it as a product bug. If the job is "put my name on page two," the product should do that without a second checkout.
This tab is that job. You drop the PDF. You pick the page. You put ink on it. You take the file back. Mixpanel still loads with Softery.io, so I will not claim the whole site never talks to a server. Mixpanel sees that someone opened the tool, which knobs moved, and whether a download happened. It does not get the PDF. It does not get the drawing.
I paid for the editor. Then a signature wanted another two hundred a year.
That is the sentence I wrote the page against. If your bank wants a named signer, a lock, and a log, this tab is the wrong tool. Say that out loud before you send the file.
A picture, not a certificate
A cryptographic signature is a certificate, a hash, and a trail of who opened what. Courts and banks have rules for that. This tab does none of it.
What it does: it embeds a PNG on a page. An optional date in Helvetica sits under the mark. Anyone with the download can see the picture. Anyone with another copy of this tab can put a similar picture on another file. That is the honest limit.
I grepped the bytes in this sitting. The output has no /Type /Sig. It has no PKCS7 blob. A watermark string for Softery is not in the file. If a later change adds any of those, the test fails.
| What you need | This tab |
|---|---|
| A name on a line, today | Yes. PNG plus optional date. |
| A certificate, a named signer, a log | No. Use the product your counterparty named. |
| The file to stay in this tab | Yes, after the page and the worker have loaded. |
If you are signing a lease for a landlord who asked for "a signed PDF," a picture is often what they meant. If you are closing a loan, read their packet. I will not pretend this download is both.
Draw it, or type it
The pad is a canvas. A finger works. A mouse works. Black ink is #111827. Blue ink is #1d4ed8. Both are CSS I picked in this sitting so the PNG is dark enough on a white page.
Type if you do not want to draw. The name is rasterized in italic Times on a transparent PNG, in this tab, with UTF-8. A latin-1 font in the PDF would eat a name with an ß. I did not add fontkit. The letters become pixels first, then those pixels go on the page.
You can also drop a scan. PNG and JPEG land as-is. WebP and GIF go through a canvas and come out as PNG. A signature file stops at 8,000,000 bytes. I counted that cap in SI, in this sitting.
Clear the pad if the first pass looks like a toddler. The typed name is an input. The upload is a file picker. None of those three writes to a server.
Use the sample if you do not want to drop a real packet yet. It builds a one-page form here, 612 by 792 points, with a line that says Sign here. It is not a lease. It is so you can see the mark land.
The page you are looking at
Pick the page with Previous and Next. The preview is PDF.js 5.4.530. The worker is 1,072,841 bytes, served from this site, not from a CDN. I copied that file into the public folder in this sitting so a blocked third-party host cannot kill the preview.
Drag the box. Resize the corner. Arrow keys nudge it by 4 visual points. The smallest box I will write is 8 points on a side. Smaller than that and the PNG becomes a speck you cannot audit.
The coordinates you see are top-left, y down. PDF wants bottom-left, y up. The stamp function flips that. I wrote a test that expects the image matrix to start at x 20, y 70 on a 100 by 100 page when the box is 40 by 20 in the lower-left of the preview. If that mapping drifts, the name lands on the wrong line.
A file over about 1,000,000 bytes stamps in a worker. You get a progress number and a Cancel. Cancel is checked before the write and after it. A check only at the start would miss a click mid-write. A huge scan can still freeze the tab for a few seconds while pdf-lib writes. That freeze is this browser doing math. It is not an upload.
Sideways pages get flattened
Phone scans land at 90 degrees more often than people notice. The preview shows the page the right way up. If I drew the PNG in stored coordinates, the name would sit on its side when you opened the file in Preview.
So a page stored at 90, 180, or 270 is flattened first. The old page is drawn onto a new upright page, then the mark goes on in visual coordinates. Empty pages in pdf-lib have no Contents stream. Embed fails on those. I draw a 0.01 opacity rectangle first so Contents exists. That rectangle is not a watermark. You will not see it.
Open the download. Look at the page you meant. If the mark is on the wrong leaf, come back, change the page, download again. A locked PDF has to be unlocked first. This tab will not guess a password.
The date is ink
The date switch is on by default. ISO looks like 2026-09-18. Long looks like September 18, 2026. Both use this machine's timezone through Intl. I am not running a timestamp server.
The date sits under the mark, gap 8 points, height 14 points, Helvetica. In the content stream the ISO string showed up as hex <323032362D30392D3138> in this sitting. That is still the characters 2026-09-18. A hex wrap is how pdf-lib wrote it. It is not encryption.
Turn the date off if the form already printed one. The setting lives in this browser under softery.sign-pdf.settings. Clear settings puts the knobs back. The PDF and the drawing are not stored.
Caps I counted
I do not want a 200 MB scan to take the tab down. The PDF stops at 40,000,000 bytes. The signature image stops at 8,000,000 bytes. Both are SI. A worker starts at 1,000,000 bytes.
| Limit | Value | Source |
|---|---|---|
| 40,000,000 bytes | FILE_BYTE_CAP in this sitting | |
| Signature image | 8,000,000 bytes | SIGNATURE_BYTE_CAP |
| Worker floor | 1,000,000 bytes | WORKER_BYTE_FLOOR |
| PDF.js worker | 1,072,841 bytes, version 5.4.530 | copied from pdfjs-dist |
Those numbers will get a regression test if someone "cleans them up" later. A comment is not a cap.
Typed names are pixels
A typed name feels like text in the PDF. It is not. The letters are painted on a canvas, then that PNG is stamped. I did it that way because pdf-lib's built-in Helvetica is latin-1. A name with ß or a Cyrillic letter would vanish or throw.
I rasterize in this tab. UTF-8 goes into the canvas. Pixels come out. The PDF never has to know the alphabet. The downside is you cannot select the letters later. The upside is the download matches what you typed.
Draw if you want your own hand. Type if you want something readable at 12 points. You can also drop a scan if you already signed a blank card and photographed it. Each input writes the same kind of PNG. The stamp path does not care which one you used.
Fontkit would have let me embed a TTF. I skipped it. An extra font file is another asset to fetch, license, and cache. Pixels were enough for a picture on a line.
What the download is
The filename is the original plus -signed.pdf. lease.pdf becomes lease-signed.pdf. Rename it once you have it. A client name in a default filename is how a packet leaks in a screenshot.
There is no Softery string drawn on the page. There is no trial banner. There is no account gate in front of Download.
Open the file in the viewer you actually send from. Preview on a Mac is enough. If the mark covers a clause, move the box. If page 2 was the signature page and you stamped page 1, that is on you, and the tab will let you fix it.
Copy link shares knobs: date on or off, ISO or long, black or blue. It does not put the PDF in the URL. A share preview is on the page so you can see what travels. Private packets do not belong on a public card.
Packets that are still Word
If the pages are still separate files, join them first on Merge PDF. If the contract is still a .docx, convert it on Word to PDF Converter, then bring that PDF here. Both stay in the tab.
I am not going to stitch Word layout into this signer. mammoth already told you which headers it will drop. Sign the PDF you can see, not the .docx you hoped would look the same.
A scanned packet that is really a photo inside a PDF will still take a PNG. The letters underneath will not become selectable. That was true before you opened this tab.
What I left out on purpose
I did not add an audit trail. I did not add a signer email. I did not add a second factor. Those belong to a product that is selling compliance.
I did not add a certificate. A picture that looks official is how people get hurt. The FAQ on the tool page says this is not a legal electronic signature. The tests fail if /Type /Sig shows up.
I did not put the search phrase from the research card into the keywords. Stopwords would have collapsed it onto sign pdf and the catalog test would have treated a held-out query as a cheat.
Mixpanel is on. Google Analytics is on. After the 1,072,841 byte worker is cached, you can unplug the cable and still draw a name and download. I measured that path as "the compute stays here." I did not measure "the whole Softery.io origin never loads a script."
Open the file, then send it
- Open Sign a PDF.
- Use the sample, or drop the real PDF.
- Draw, type, or drop a scan. Place the box. Add a date if you want one.
- Download. Open the file. Check the page, the rotation, and the size of the mark.
- If the packet is still Word or still split, use Word to PDF Converter or Merge PDF first.
If the counterparty asked for a certificate, stop here and use the product they named. If they asked for a signed page, this tab will give you one, in this browser, without a second plan.
Last updated: September 18, 2026 | Reading time: 10 minutes
Written by Softery.io, a tab that will stamp a name and will not pretend the stamp is a certificate.