Two kinds of link, and most tools only see one
A hyperlink in a PDF is a link annotation: a rectangle on the page with an action attached. Every tool that "extracts the links" reads those. But a document also contains URLs and e-mail addresses that were simply typed into the text and never turned into annotations — a footnote citing https://example.org/docs, a contact address in a signature block. To a reader those are links. To an /Annots reader they are invisible. This tool reports both, and labels which is which.
What it reports
- External links —
httpandhttpstargets. - Internal links — jumps within the document. The destination is resolved to an actual page number, whether it is an explicit destination array or a named destination in the name tree.
- mailto and tel — shown with the scheme stripped so the address or number is readable.
- File links — targets that open something outside the document.
- JavaScript actions — a
javascript:URI that runs code when clicked. - Unlinked URLs and e-mail addresses — found in the text, flagged separately, and skipped if they already sit inside a link annotation.
Each entry carries its page, its anchor text (recovered from the page's own words inside the annotation rectangle, because a link annotation stores no text of its own), and its target.
Risk flags
javascript— clicking runs code in the viewer.mismatch— the visible text is a URL pointing at one host while the actual href points at another. That is the classic phishing shape, and a PDF reader shows only the text. Worth seeing before you click.no-target— a link annotation with neither a URL nor a resolvable destination: dead in every viewer.relative— a target with no scheme, which resolves against wherever the file happens to be opened.
Nothing is fetched
No URL in the document is ever requested. That matters: a suspicious PDF can be inspected here without touching the server on the other end, and without leaking that you opened it. The file is parsed entirely in your browser and nothing is uploaded.
Export
CSV — one row per link with page, kind, anchor, target, resolved target page and flags — or JSON with the same data plus the bounding boxes, if you want to build on it.
Tiny Online Tools







