Neatbo.

PDF clickable link target inventory

Read real PDF Link annotations, declared actions and named destinations into complete local JSON and CSV.

Browser-local processingInputLocal PDFOutputComplete link-target JSON and CSVUp to 30 MiB per file · File limit: 1
  1. 1Add input
  2. 2Review and run
  3. 3Get your result

Tool input and files are processed in this browser without being uploaded.

Your input

Inputs are kept temporarily in this tab when switching tools. Refreshing or closing clears them; large results may need to be regenerated.

⌘ / Ctrl + Enter to run

or drag and drop it here

Files stay on this device. Your originals stay unchanged.

.pdf

Up to 30 MiB per file · File limit: 1

    Preparing the tool…

    Before you start

    Inspect actual clickable annotations, including missing, dangling and explicitly unsupported targets. URI, JavaScript and launch declarations remain inert text; nothing is opened, executed, requested or repaired. Rectangles use raw PDF points, not rotated screen coordinates.

    How to use this tool

    1. Choose a local PDF.
    2. Review target states and raw page rectangles.
    3. Download complete JSON/CSV before investigating a declared target elsewhere.

    Supported inputs and limits

    One unsigned, unencrypted PDF up to 30MiB and 500 pages; 200,000 parsed objects, depth 64, 10,000 annotations and destinations, 1,000 NameTree nodes, 16MiB extracted strings and 4,096 bytes per PDF name. Full JSON/CSV combined 20MiB. Object/XRef streams total 80MiB decoded; plain/Flate/LZW/ASCII85/ASCIIHex/RunLength, up to four filters, Predictor=1 only (LZW EarlyChange=0/1). Both cases of legal #hex names are parsed without dropping records.

    Resolve direct targets, legacy Dests and full Names/Dests trees using original byte ordering and limits. First release declares URI, GoTo, GoToR, Launch, Named and Next; other actions retain original type/declaration as unsupported. Cycles, conflicting page ownership, duplicate names, malformed trees and invalid URI types fail the whole inventory.

    Preview only the first 200 rows and 2,000 UTF16 characters per cell. Complete downloads retain targets. A written URI is not evidence of network reachability or safety; text URLs outside Link annotations are not counted.

    Worked example

    Example input

    Three-page PDF with 11 real Links: URI, named/legacy/direct page targets, missing target, Launch, Named, JavaScript and Next.
    Example options
    {}

    Example output

    11 links, two named destinations; internal targets resolve to pages 1–3, missing/dangling and unsupported actions remain explicit.

    When something does not work

    Correct contradictory annotation/page references or destination trees in a full PDF editor, then select the corrected file. Failure or cancellation discards the inventory; no partial success report is offered.

    Frequently asked questions

    Why does a target exist when clicking did nothing?

    The file may declare a missing named destination, a remote file, an unsupported viewer action or a URI. This tool reads the declaration and local page resolution without opening or fixing it.

    Documentation & further reading

    Related tools