Published fixture check · Version 1.0

A small test you can inspect and repeat.

A page total should have evidence behind it. We made seven synthetic PDF inputs, ran the inventory’s local page counter, and recorded the result for every file. The files, hashes and a separate verification script are public.

Observed results

Five URL entries could be counted. The annual report copy has exactly the same bytes as the first report, leaving four unique counted documents and 37 confirmed unique pages. Counting the copy again gives 61 pages across counted URLs.

The password-protected and malformed inputs remain unknown. Their page counts are empty in the CSV, and they contribute no confirmed pages. That does not mean they have zero pages.

Local counter results for fixture set 1.0
InputObserved countPurpose
annual-report.pdf24 pagesAuthored text pages with a known page total
annual-report-copy.pdf24 pagesByte-identical copy of the annual report
policy.pdf8 pagesAuthored text pages with a known page total
application-form.pdf2 pagesTwo authored interactive text fields
scanned-briefing.pdf3 pagesImage-only pages; no OCR required for counting
password-required.pdfUnknownNo password supplied to the counter
malformed-source.pdfUnknownDeliberately invalid input; no page tree
Explore these results in the report interface

How we checked

  1. Author the text, interactive-form and image-only files with known page totals. Make an exact byte copy of the annual report.
  2. Run the same count_pdf_file function used by the inventory on these trusted local fixtures. Do not supply the encrypted file’s password.
  3. Record each status, confirmed page count, size and SHA-256 hash. Group the counted inputs by identical hashes, retaining both URL entries.
  4. Compare the result to the authored expectations. Inspect the form fields and rendered example pages. Keep the two unknown counts out of confirmed totals.

This invokes the local counter directly. It does not exercise the hosted download or security pipeline. The manifest records the tested counter revision 2070132, a hash of its source, and the local environment: Python 3.13.13, pikepdf 10.5.1 and ReportLab 4.4.10.

PDF page objects are counted rather than printed page labels. Roman numerals, appendix labels and a printed “page 1” can differ from a file’s physical page position. See pikepdf’s page documentation (opens in a new tab) and our inventory counting methodology.

Check the files yourself

The ZIP includes all seven inputs, the CSV ledger, JSON manifest, license, instructions and an independent verifier. The fixture files are self-authored and released under CC0 1.0 (opens in a new tab).

Download the fixture test kit · Download the recorded manifest

To independently check the fixture files, install pikepdf in your own Python environment, extract the ZIP and run python verify-fixtures.py. This checks the source hashes, strict page counts and identical copy locally. It does not call DocAccessible or reproduce the entire hosted scan.

The public test-only password for the encrypted example is sample-only. Its report count remains unknown because the counter ran without that password. The malformed input is intentionally invalid and cannot open as a normal PDF.

What this does not establish

Seven synthetic inputs are a small behavior check. They cannot establish a real-world accuracy rate, discoverability, throughput, a security guarantee or an advantage over another product.

We did not assess tags, accessible form labels, reading order, handwriting, OCR quality, complex tables or assistive-technology behavior. Successful page counting is not successful remediation. This set also does not cover structurally recoverable PDFs; that path requires a separate test with independent count agreement.

For a real inventory, inspect unknown counts and the actual website coverage before planning work. Understanding an incomplete inventory explains how to use partial results without treating missing evidence as success.