qwiksi
Stamp a handwritten-style signature onto a PDF from the command line
TLDR
SYNOPSIS
qwiksiqwiksi sign input.pdf {--signature image | --text name} --field field [--output file]qwiksi sign input.pdf {--signature image | --text name} --page n --x x --y y [--width w] [--height h] [--output file]qwiksi addsig --text name [--font id] [--size pt] [--color hex] [--out file]qwiksi fields input.pdfqwiksi preview input.pdf [--page n] [--grid pt] [--out file]qwiksi help
DESCRIPTION
qwiksi stamps a signature picture onto a PDF without a GUI. It is a visual overlay, not a cryptographic PDF digital signature (no certificate, no PKCS#7 / PAdES). Placement is either an existing AcroForm widget or absolute coordinates on a flat or scanned page.The stamp is implemented as a pdfcpu image watermark with rotation disabled, so it sits upright at an absolute bottom-left offset. In field mode the matching widget annotation is deleted afterward; otherwise the widget's own appearance would draw on top of the stamp.addsig and sign --text draw the name with two Google Fonts embedded in the binary (Sacramento and Great Vibes, SIL Open Font License 1.1). sign --text uses a temporary PNG and does not keep it.Prebuilt static binaries are published for Linux, macOS, and Windows (amd64 and arm64). Building from source needs Go 1.25 or newer: go build -o qwiksi .
PARAMETERS
With no arguments, qwiksi runs an interactive prompt: pick a PDF, choose an AcroForm field (and optional page), type a name, and write _input__signed.pdf. Flat PDFs (no fields) print the preview + sign --page --x --y flow instead of prompting for coordinates.sign input.pdf
Stamp a signature onto the PDF. Requires exactly one of --signature or --text, and exactly one of --field or the manual --page/--x/--y set. Default output is _input__signed.pdf.--signature file
Existing PNG or JPEG signature image. Transparent PNG works best.--text name
Render name in a bundled cursive font and stamp that image (no intermediate PNG required). Combine with --font, --size, and --color.--font id
Cursive face for --text / addsig: 1 Sacramento (default, casual), 2 Great Vibes (formal).--size pt
Font size in points for --text / addsig (default 100). Rendering uses 72 DPI so 1 pt equals 1 px.--color hex
Ink color as a 6-digit RGB hex, optional leading # (default 000000).--field name
AcroForm field to stamp into. The image is scaled to fit and centered in the field rectangle. The field's widget annotation is then removed so its appearance stream does not cover the stamp. The non-interactive sign command always uses the first widget for that name; interactive mode can pick a page when a field appears more than once.--page n
1-based page number. Required in manual sign mode. For preview, default is 1.--x x, --y y
Manual placement, PDF points from the bottom-left of the page (same origin as preview).--width w, --height h
Manual stamp size in PDF points. Default width is 150; height follows the image aspect ratio. If only --height is set, width follows the aspect ratio.--output file
Output PDF for sign (default _input__signed.pdf).addsig
Write a transparent-background PNG of --text. Default output signature.png.--out file
Output path for addsig (default signature.png) or preview (default _input__preview.pdf).fields input.pdf
Print a table of AcroForm fields: name, type, page, and rectangle (llx lly urx ury). Reports when the PDF has no form.preview input.pdf
Stamp a labeled coordinate grid onto one page. --grid is the line spacing in PDF points (default 50). Open the result in a viewer and read numbers for sign --x --y.help, -h, --help
Print usage. qwiksi command -h prints that command's flags.
CAVEATS
This does not produce a legally binding digital signature; it only draws a graphic. Recipients can still edit the PDF. Encrypted, signed, or unusual PDFs may fail depending on pdfcpu. Keep the unsigned original.sign refuses mixing --field with --page/--x/--y, and refuses both --signature and --text. Interactive mode always uses font 1, size 100, and black ink; it cannot load an existing PNG.Coordinates and sizes are PDF points (1/72 inch). pdfcpu treats each image pixel as one point before scalefactor, which is why --width/--height are specified in points rather than pixels.
HISTORY
Written in Go by krisraven (repository created 2026-08-11). It wraps pdfcpu for form inspection, watermarking, and annotation removal. No SPDX license is declared on the repository.
