poka.sh

Docs

PDF

Generated by scripts/gen-format-pages.py from docs/data/format-metadata/, FILE_FORMATS.csv and docs/formats-master.csv. Do not edit by hand: change the source, then run the script.

PDF Preview.

At a glance

Original creator Adobe Systems
Purpose Represents formatted, page-oriented documents with text, images, graphics, annotations, metadata and links.
Extensions .pdf
Poka parser poka-pdf
Viewer poka-pdf-viewer
Depth tier Parser with a shared viewer (see Depth tiers)
Breadth tier B2 Broad (see Breadth tiers)

Preview a sample

These are sample files, not yours. Poka opens a sample in your browser: the file is read and parsed on your device and nothing is uploaded.

  • Spreadsheet with checkboxes artcraft-gridcraft-pdf-12.pdf · 2.6 KB · licence: shared by its owner, ModelTok · made for Poka's test corpus
  • Prototype flow artcraft-figcraft-pdf-15.pdf · 13.4 KB · licence: shared by its owner, ModelTok · made for Poka's test corpus
  • Live text artcraft-vectorcraft-pdf-07.pdf · 54.8 KB · licence: shared by its owner, ModelTok · made for Poka's test corpus

How much Poka reads

B2 Broad. The common content of the current and the common older versions is decoded. Some named features or versions are not, and are listed.

Confidence: low (a judgement from the documentation). Basis: Reviewed 2026-10-16, updated 2026-10-21: poka-pdf's default answer returns the bytes unchanged and reads the page tree for the page count (src/page_tree.rs; that count matches pypdf 6.21.1 on all 129 corpus PDFs pypdf can open). A request that names a page renders it through hayro 0.8.0 (src/lib.rs): tests/samples.rs renders page 1 of all 129 unencrypted corpus PDFs and checks the page count and page size against pypdf 6.21.1, every page of the 40-page file, the text of three pages against pypdf's extract_text (every word matched), and that the two encrypted files ask for a password, refuse a wrong one and render with the right one. No pixel was compared with a reference renderer. The tier is a provisional judgement about the delegated renderer, not about anything Poka reads, and it is unchanged because neither host yet sends a page, scale or password: what users see is still pdf.js on desktop and the browser's viewer on the web (web/src/app.js renderPdf). pdf.js and the browser viewers were not run. No per-version claims exist.

What Poka does not read

  • Poka reads only the page count on the default answer, from the page tree: no /Info or XMP metadata
  • No page count for a page tree inside an encrypted object stream: Poka never decrypts
  • Neither host shows the page count yet: the desktop app previews a .pdf without the module, and neither host reads PdfPreview.facts
  • The hosts do not yet send a page, scale or password, so the wasm rendering is not what users see yet
  • No outline (bookmarks), links, attachments, form fields or XMP metadata; the rendering answer reads only the /Info dictionary
  • One page at a time with page buttons; no continuous scroll or thumbnails
  • The text layer has no rotated or vertical text boxes: a run's box is its axis-aligned bounds
  • Pages are capped at 5 megapixels and 4096 pixels a side; a larger request is rendered smaller with a note
  • hayro's own limits, as its crate documentation lists them: blending and isolation, knockout groups and colour-key masking are not supported; pixels were not compared with a reference renderer
  • The 128 MiB read cap: the rendering answer refuses a larger file with an error; the default answer returns the first 128 MiB with no page count and no truncation flag
  • Desktop: no text selection or search, no clickable links, no interactive form fields, no bookmarks, thumbnails or attachments, no document properties
  • No password prompt in the desktop app or on the web: an encrypted PDF shows a failed-to-load message
  • Desktop renders all pages up front, which is heavy for long PDFs (judgement)
  • On the web, whatever the host browser's viewer offers; Poka controls none of it

Background

The Library of Congress dates PDF 1.7 to November 2006 and its publication as ISO 32000-1 to July 2008. Poka does not draw PDF itself: the module returns the bytes unchanged and the host draws the pages (pdf.js in the desktop app, the browser's own PDF viewer on the web). The module reads one fact for the file-information panel: the root page tree node's /Count, given only when the leaves of the tree agree with it. A request that names a page (the keys 'page', 'scale' or 'password') gets a different answer: poka-pdf renders that one page per call in wasm with hayro (pure Rust) and gives poka-pdf-viewer the page as RGBA pixels, its text as runs with boxes for a selectable overlay, the page count and the document information dictionary; a password-protected file asks for its open password. The hosts do not send those keys yet, so they still draw the pages themselves.

Libraries

Libraries Poka uses or has assessed for this format, with the status, licence and language the registry records.

Sources