List every annotation a PDF carries, including the highlights, links and stamps that have no note attached, with the author, colour, page position and reply of each.
Initializing in your browser…
Stamp a mark where the page really is, anchored or tiled
Draw, type or upload a signature and place it on the page a reader sees, at a width you can state in inches, on one page or every page. Transparent, so it does not hide the line you are signing on.
Join PDFs into one document, with a bookmark for each file
A reviewer returned a PDF full of comments, highlights and drawings and you want all of them listed, not hunted page by page.
Input
reviewed.pdf, 3 pages
Result
13 annotations of 10 kinds: 7 with a note, 6 without, 1 reply, 1 hidden, 1 form field
A note is an optional entry on an annotation, so a highlight drawn without typing anything, every link, every ink drawing and every form field carry none: on this document that is 6 of the 13, and a list that keeps only the ones with a note would show 7 and say nothing about the rest. Each one is listed with its type named from the clause that defines it, its author, its date in the document's own offset, a colour swatch from /C, and where it sits on the page. A reply is shown under the annotation it answers, a hidden annotation is marked hidden, and a form field is reported by its field name rather than as an author, although the file uses the same key for both.
A reviewed PDF holds its comments, highlights, drawings, links and form fields in an annotation layer that lives beside the page rather than in it, and which viewers show differently or not at all. This lists all of them: what each one is, who made it, when, what colour, where on the page, and what it replies to.
Read every comment a reviewer left in one list, in page order, instead of scrolling and hoping none was missed.
The count says how many annotations there are and how many carry a note, so a list of six comments on a document with nineteen annotations is visibly incomplete.
Export as CSV or Markdown and paste it into an issue tracker or a document, with the page number and author attached to each line.
Form field widgets are annotations too, and their names and values are listed alongside the comments.
A hidden annotation is in the document and invisible in a viewer. It is listed here and marked hidden.
An annotation lives in a page's /Annots array and nowhere in the content stream (ISO 32000-1 clause 12.5), which is why a document can look empty to a text extractor and be full of work. Reading them is easy; reading them without losing most of them turns on one thing.
**A note is optional.** Clause 12.5.2 lists /Contents as an optional entry, and for most kinds it is simply absent. A reader who drags a highlighter across a sentence without typing anything produces a /Highlight with no note at all, and so does every /Link, every /Ink drawing, most /Stamp annotations and every form field /Widget. A list that keeps only the annotations carrying a note therefore drops most of a reviewed document in silence. This tool lists every one and reports the split: how many carry a note and how many do not, with a line saying that both are normal and which kinds usually carry one.
**What each annotation is, in its own words.** Every type is named from the clause that defines it, so a /Squiggly is a wavy underline and a /Caret is an insertion mark rather than an unexplained code. The colour comes from /C and is shown as a real swatch, but only for markup annotations, because on a /Link the same entry is the border colour and a PDF reader library will happily invent black for an annotation whose file records no colour at all.
**Three things a flat list cannot show, and this one does.** A REPLY is marked with /IRT (clause 12.5.6.2), so "Agreed, removing it" is shown under the strikeout it answers rather than beside it as a peer. A HIDDEN annotation carries bit 2 of its /F flags (table 165), so it is in the file and not on the page, and it is marked rather than presented as ordinary. And a form field's /T is the FIELD NAME, not a person, although it is the same key a markup annotation uses for its author: a field called `fullname` is reported as a field called fullname, never as an author called fullname.
Every annotation carries where it sits on the page, as a percentage across and down what the page actually shows, and its date in the document's own UTC offset rather than converted into the reader's. A highlight also carries the text it covers, where the file records it. Filter by type, by author or by page, search across notes, authors, highlighted text and link destinations, sort by page position, author, date or type, and export the lot as TXT, Markdown, CSV or JSON: every format writes every annotation, including the ones with no note.
Because it has none. A note is an optional entry on an annotation, and a highlighter dragged across a sentence produces a highlight with no text of its own. That is normal, and the tool says which kinds usually carry a note and which do not.
The most common reason is that they were flattened into the page content, which is what "print to PDF" does: the comment becomes part of the picture of the page and is no longer an annotation. The tool says how many pages it read, so you can tell that apart from a file it failed to open.
No. This reads them and exports them; it never changes the document.
A link destination is checked before it is made clickable: only http, https, mailto, tel and ftp are turned into links, and everything else is left as text. A PDF link can carry a javascript: destination exactly as a web page can.
An annotation can point at another one to say it answers it. Those are shown indented under what they answer, so a conversation reads as a conversation rather than as two unrelated comments that happen to be near each other.
A PDF date carries its own UTC offset, so it already says when the comment was made where its author was. Converting it into the reader's zone would move it, so it is shown as the document records it.
PDF parsing and editing happen in your browser. Documents, and everything inside them, are never uploaded or stored remotely.