PDF Editor combines two libraries to make a static PDF editable without uploading it. pdfjs-dist (Mozilla's PDF.js) renders each page onto an HTML canvas so you have a true visual surface to draw on. pdf-lib then writes the annotations you place back into the document as native PDF objects when you export. Both libraries run entirely in your browser, so the file never leaves your device.
Four annotation types are supported: text boxes, rectangles, semi-transparent highlights, and arrows. Each annotation stores its position as normalized coordinates relative to the page's media box, which means rendering at any zoom level keeps the position accurate. On export, pdf-lib drops these into the page's content stream — they become genuine vector objects, not a separate layer, so they display correctly in Acrobat, Chrome's built-in viewer, Edge, macOS Preview, and Foxit.
The Make Fillable tab adds AcroForm widgets by scanning the PDF's text layer for patterns: runs of four or more underscores, dotted lines, labels ending in a colon followed by whitespace, and checkbox markers like [ ], □, and ○. Detected positions are converted into PDFTextField, PDFCheckBox, or PDFSignature widgets via pdf-lib. The output is a standards-compliant interactive form that works in Acrobat Reader, browser PDF viewers, and any AcroForm-aware tool.
True editing of existing text is not supported here, and that is a property of the PDF format rather than a tool limitation. PDFs store text as positioned glyph streams from embedded font subsets — there is no concept of editable paragraphs or reflow. Even Acrobat Pro's text edit feature is essentially a wrapper that re-typesets a single line and only works when the original font is available. To add or correct text, this tool lets you draw a white rectangle over the old content and place a new text annotation on top.
Scanned image-only PDFs work for annotations but break automatic field detection because there is no text layer to scan. Run the file through PDF OCR first to add a Tesseract-generated text layer, then return here for Make Fillable to do its job. Manual field placement still works on raw scans.
Browser memory is the practical ceiling. PDFs up to about 200 pages and 100 MB are comfortable; very long documents slow down because pdfjs-dist has to render every page you scroll past. Encrypted PDFs cannot be parsed by pdf-lib until they are unlocked — use the PDF Password tool to remove protection first.
Digital signatures present in the source document are invalidated by any modification, including annotation. That is a property of the PDF signing standard. If you need to sign rather than annotate, use the PDF Sign tool, which writes a fresh signature widget into the file as the last modification.