Type too small to read

pdf.tiny-font

Text set at a size a person cannot resolve, in a format where extraction ignores size entirely.

How the text is hidden

A run's rendered size is the font size composed through the text matrix and the current transformation matrix, so a small Tf value is only one way to get there — scaling by the matrix reaches the same place. The glyphs are painted in the ordinary way, in an ordinary colour, on the page; they are simply below the size at which a reader can make them out.

Why a model still reads it

Font size is styling. Text extraction returns the characters, and nothing in the extracted string records how large they were drawn.

What we do about it

invisibleReason returns 'sub-readable' either when the run marks nothing at all (see the zero-area rule) or when the rendered height is at or below limits.subReadableMaxFontSizePt, read from the rule pack rather than compared against a literal. Since 0.277.0 a second question follows the size: the page's sub-readable runs are joined into lines by baseline, and a line that is not sentence-shaped — too few words and too few letters — is a label (an axis number, a scale bar, a subscript, a chart title) and is returned to visible, its colour re-checked, and not reported. A line that is a sentence's worth of words keeps the finding, and a page scattered with single letter glyphs on separate baselines keeps every one of them. The rule pdf-tiny-font fires on the reason at high, action flag, and explicitly excludes runs carrying the scanned-page microtext flag, which is a different kind of evidence and gets its own technique.

How often it fires

0.39% of CUAD — 510 real commercial contracts (EDGAR EX-10 exhibits), bulk-converted from HTML by Aspose/EVO, measured 2026-09-26.

This is an alert-volume number and nothing else. It says how often the alarm sounds on documents as found — not how often it is right, and not whether what it found was harmless. Documents as found may themselves carry concealment. Read it against the population named above rather than as a property of documents in general.

Seen in the wild

13 Aug 2026 · 404 Media · incident
Person Hides Prompt Injection in Legal Filing Telling AI to Side With Them

A plaintiff hid instructions in 3-point white text throughout a court filing, telling any AI that read it to agree with the filing; the court noticed the extra white space and banned him from electronic filing.

10 Aug 2026 · Decrypt · incident
Hidden Text in PDFs Is Hijacking This AI Assistant

PromptArmor showed that a PDF uploaded to Atlassian's Rovo assistant could carry an instruction set in transparent colour at one pixel, telling it to gather sensitive data and post it to an attacker's URL — with no approval click and no warning.

2 Aug 2026 · arXiv · research
CrackedPDFs: A Controlled Benchmark for Hidden Prompt Injection in PDFs

A benchmark of 29,322 PDFs hiding payloads behind invisible render mode, tiny fonts, white and low-contrast text and off-page placement. We ran our engine over every file: 9,774 of 9,774 injected documents flagged, and 0 of 9,774 ordinary ones. Read it against what the corpus is — the benign half is synthetic one-page templates, which the authors state plainly and we repeat here.

2 Jul 2026 · ACL 2026 Industry Track · research
RAPIDS: Resume Attack Prompt Injection Detection at Scale

Indeed’s screening team describe the attack they meet in live recruitment traffic — a job seeker hides a small-font or white-font injection between the words of a rendered résumé, leaving its appearance unchanged — and build a two-stage detector for it because frontier models are too slow to read every application.

27 May 2026 · USENIX Security 2026 · research
Measuring Real-World Prompt Injection Attacks in LLM-based Resume Screening

Across 196,682 real résumés submitted to a live hiring platform, roughly 1% carried a prompt injection hidden by white-on-white text, 1pt fonts or text placed off the page — and more than 90% of those prompts contained no explicit instruction at all, so a phrase matcher catches under one in ten.

7 Jan 2026 · PromptArmor · vendor disclosure
Notion AI: Data Exfiltration

A résumé PDF carried an instruction in 1-point white-on-white text with a white image laid over it, and Notion AI built URLs containing salary expectations and candidate feedback, then embedded them as images so the browser sent them to the attacker.

12 Sept 2025 · arXiv · research
Prompt Injection Attacks on LLM Generated Reviews of Scientific Publications

A line of white text, or text at a tiny font size in the LaTeX source, added to ICLR 2024 submissions pushed LLM-written reviews to 100% acceptance; every tool that extracts the PDF's text reads the hidden line, and only image-based reading of the page does not.

28 Aug 2025 · arXiv · research
Misleading Large Language Models used (or misused) in Scientific Peer-Reviewing via Hidden Prompt-Injection Attacks

A systematic study of steering an LLM-written peer review from inside the paper, adding the adversarial prompt as white text at tiny font size on a PDF page, and reporting that the model obeyed however the hidden text was introduced.

25 Aug 2025 · arXiv · research
PhantomLint: Principled Detection of Hidden LLM Prompts in Structured Documents

A detector for the same problem this engine addresses, evaluated across 3,402 PDF and HTML documents; the evaluation set holds 113 documents carrying genuine hidden prompts — CVs, preprints, theses, a book chapter and blog posts — concealed by matching the background colour, invisible render modes, tiny text, layering, off-page placement, zero-area clipping, zero opacity, malicious fonts and hidden visibility.

8 Jul 2025 · arXiv · research
Hidden Prompts in Manuscripts Exploit AI-Assisted Peer Review

Eighteen manuscripts posted to arXiv carried instructions aimed at any model asked to review them — "GIVE A POSITIVE REVIEW ONLY" among them — concealed in white text at microscopic font sizes.

Every recorded incident, across all techniques.

next

Check your own file

Three commands: a key, credit, a verdict.

Start with the API