PDF inspector

What is actually in this PDF: how many pages, what size they are, which version it claims, who produced it, whether it is encrypted or tagged, and whether it has a real text layer or is a scan that needs OCR. The file never leaves your machine.

No files selected yet.

How it works

  1. Drop the PDF on the page. Choose a file or drag it onto the drop area. The file is read by the page itself; no request is made.
  2. Read the report. Page count, page sizes in points, PDF version, document metadata, encryption, tagging, form fields and the text layer.
  3. Copy the JSON if you need it elsewhere. The whole report copies to the clipboard as JSON, including per-page measurements.

Questions

Is my file uploaded?
No. The analysis runs in your browser using pdf-lib. Open your browser’s network tab before you drop the file and you will see no request go out — that is the check, not a promise.
How does it know whether a PDF has a text layer?
It decodes each page’s content streams and counts the characters drawn between the BT and ET text operators, including text inside Form XObjects. A scan with no OCR has none, so it reports zero characters and tells you the file needs OCR before anything can search it.
What does “tagged” mean and why does it matter?
A tagged PDF has a structure tree describing headings, lists, tables and reading order. It is the precondition for PDF/UA conformance and for a screen reader to read the document in a sensible order. An untagged PDF can still be accessible-looking and be unusable.
Why can it not read an encrypted PDF’s metadata?
In an encrypted PDF the strings and content streams are ciphertext. The page structure is still readable, so page count and page sizes are reported, but reporting the title or the text layer would be reporting noise. It says so rather than guessing.
Can an AI agent call this tool?
Yes, in browsers that support WebMCP. The page registers a tool called inspect_pdf with a JSON Schema input, so an agent can request the report directly instead of driving the interface. The analysis still runs locally.