Method. Redacted PDFs were produced through RedactProof's real export pipeline (browser automation drives the actual application: upload, automatic detection, approval of every detection, export), capturing the exact redacted strings as recovery targets. Each exported file was then attacked with recovery engines that share no code with RedactProof's export pipeline or its inspection tooling:
| Recovery engine | Origin | What it attempts |
|---|---|---|
| pdftotext (xpdf 4.06) | Glyph & Cog, C++ | Text-layer extraction |
| pypdf 6.14.2 | Independent pure-Python parser | Text-layer extraction |
| PDFium (pypdfium2) | Chromium's PDF engine | Text-layer extraction and page rendering |
| Raw byte search | No PDF parser at all | Searches the raw file bytes and every decompressed stream for UTF-8, UTF-16LE and hex-string encodings of the redacted text (catches stale or orphaned objects) |
| Structural inspection | pypdf object walk | Confirms no form fields (AcroForm) survive, and that no annotation or document-metadata value (DocInfo/XMP) contains redacted content |
| OCR reconstruction | PDFium render at 300 dpi + Tesseract OCR | Attempts to read text back out of the burned pixels |
Controls. To prove absence is meaningful (i.e. the export is not simply blank), extraction engines must recover the visible text layer where one is expected, and OCR must recover legible page text on every file. Both controls held on all fixtures.
| Recovery engine | Result | Detail |
|---|---|---|
| pdftotext (xpdf) | PASS | 1,270 chars extracted; 0 redacted strings recovered |
| pypdf | PASS | 1,270 chars extracted; 0 redacted strings recovered |
| PDFium | PASS | 1,270 chars extracted; 0 redacted strings recovered |
| Raw byte search | PASS | 0 redacted strings recovered |
| Structural inspection | PASS | No form fields; single link annotation (certificate URL); no redacted content in metadata |
| OCR reconstruction | PASS | 1,302 chars OCRed; 0 redacted strings recovered |
| Recovery engine | Result | Detail |
|---|---|---|
| pdftotext (xpdf) | PASS | 31 chars extracted; 0 redacted strings recovered |
| pypdf | PASS | 31 chars extracted; 0 redacted strings recovered |
| PDFium | PASS | 31 chars extracted; 0 redacted strings recovered |
| Raw byte search | PASS | 0 redacted strings recovered |
| Structural inspection | PASS | No form fields; single link annotation (certificate URL); no redacted content in metadata |
| OCR reconstruction | PASS | 581 chars OCRed; 0 redacted strings recovered |
This run covered the free-tier export path and the paid-tier export path with OCR-restored text layer, exporting from a text-layer PDF source. Reveal-mode and filled-form export paths are scheduled for future runs. Testing verifies that confirmed redactions are permanently applied to exported files; it does not certify that automated detection identifies every sensitive item (human review remains required) or that redaction decisions were legally correct.