ORIGINAL LAB · ENGINE-DERIVED RESULTS
16 PDF extraction decisions measured against exact fixture bytes
Stable digital tables and safe exports are checked beside encryption, scans, unsupported filters, rotation, merged geometry, hidden optional content, opaque overlays and incremental revisions. Encoded PDF names and closepath fills must not bypass suppression.
Measured result
Worked synthetic benchmark; not a live customer result. Every PDF is generated from checked-in fixture code and processed at the fixed clock 2026-09-19T02:46:21.216Z. No OCR, remote upload, decryption, accounting or universal PDF support claim is made.
Engine source SHA-256:
4f791f450e9ea66db56d83f6f0270b4b70f423979bbd04b94cd8f96a0e0f303dFixture source SHA-256:
0db0abf3d1980822470e49cddeab62e3e8a75c16dd56b0a57b1bbe6adf3a1a60Scenario-by-scenario observations
| Scenario | Policy | Expected | Observed | Evidence |
|---|---|---|---|---|
| Stable digital table | Automatic, page 1 | PASS | PASS | 1 table; 3 data rows |
| Two-page document | Automatic, pages 1-2 | PASS | PASS | 2 tables; 6 data rows |
| Page 2 only | Automatic, page 2 | PASS | PASS | Only page 2 enters artifacts and policy hash |
| Irregular anchors | Manual boundaries 200,400 | PASS | PASS | 1 table; 3 data rows |
| Formula and HTML-like strings | Automatic | PASS | PASS | CSV/XLSX strings neutralized; raw values remain reviewable |
| Encrypted PDF | Automatic | BLOCK | BLOCK | encrypted_pdf_not_decrypted |
| Image-only scan | Automatic | INDETERMINATE | INDETERMINATE | No OCR; image/XObject coverage warning |
| Unsupported LZW stream | Automatic | INDETERMINATE | INDETERMINATE | Content stream decode incomplete |
| Rotated coordinate table | Automatic | INDETERMINATE | INDETERMINATE | Candidate rows exist, but rotation prevents PASS |
| Merged-like spanning text | Manual boundaries 200,400 | INDETERMINATE | INDETERMINATE | Text crosses separator and sparse structure is visible |
| Hidden optional-content table | OCG is OFF in the catalog | INDETERMINATE | INDETERMINATE | Visibility is unresolved; candidate cells are suppressed |
| Opaque rectangle over table text | Filled overlay follows text | INDETERMINATE | INDETERMINATE | Covered candidate cells are suppressed |
| Incremental page revision | Active xref requires /Prev resolution | INDETERMINATE | INDETERMINATE | Stale and active revision cells are not exported |
| Hex-escaped OCG names | /OCPropert#69es and /T#79pe | INDETERMINATE | INDETERMINATE | PDF names are decoded before the visibility gate |
| Closepath opaque overlay | re h f | INDETERMINATE | INDETERMINATE | Covered candidate cells are suppressed |
| Hex-escaped incremental key | /Pr#65v | INDETERMINATE | INDETERMINATE | Stale revision cells remain suppressed |
Method and reproducibility
- Generate valid bounded PDF byte streams from the public fixture builders.
- Run the production-candidate engine with a fixed clock, exact source identity and extraction policy.
- Compare expected and observed verdicts, table counts, selected pages and coverage reasons.
- Require hidden OCG, covered and incremental-revision candidate values to be absent from every artifact.
- Recompute exact SHA-256 for JSON, CSV, XLSX, SVG, Markdown and the receipt.
- Open representative fixture files with Poppler
pdfinfo, render pages withpdftoppm, and compare rendered layout separately from parser output. - Repeat fixed-clock runs and require byte-identical artifacts.
Reproduce from the source checkout with the configured maintainer Node, spreadsheet and browser dependencies. Serve app/ at http://127.0.0.1:8767 for the separate browser check. The additional export and browser checks are not part of the 16-scenario count.
FASTTOOL_RELEASE_CLOCK=2026-09-19T02:46:21.216Z FASTTOOL_REPORT_PATH=reports/pdf_table_benchmark_build_20260919b.json node scripts/build_pdf_table_benchmark_20260804.mjs
node scripts/pdf_table_rectangular_export_20260919.mjs
FASTTOOL_BASE_URL=http://127.0.0.1:8767 node scripts/pdf_table_independent_redteam_20260919b.mjsDownload exact benchmark evidence
Machine results
benchmark-results.jsonc7f0fe882bba5651dfb3b0e094cdb02565643c2b31833c17c7ee9b53a9fd51fa
Formula-safe ledger
benchmark-results.csv2a881f902086c107b50db0e6f3d78fbd6df753caef9403c03125004a2a88fd40
Coverage visual
benchmark-coverage.svg0fa1df095411c33aeb6cb87b517431f73b10274f07365aa7dc17b8d22e5839ae
Receipt
benchmark-receipt.json322282b92e55675941141ecfa91ec208fdf88d562ef3258ec49a058b0fa32bd3
Receipt core: ce359f0020119604fc4af7672e5c1dfa71d00866724e9347783b4c915f56427b
What the benchmark does and does not establish
Established for these bytes
- All sixteen expected decisions matched.
- Selected-page and manual-boundary policies changed the receipt.
- Rotation, merged-like, hidden, covered and stale revision candidates did not become false PASS.
- Encoded names and closepath fills did not bypass the same suppression gate.
- Hidden, covered and stale candidate cell markers were absent from every artifact.
- Every produced artifact was hashable as exact bytes.
Not established
- No universal PDF coverage, OCR or decryption.
- No accounting, legal or semantic correctness.
- No promise that a visual table maps cleanly to PDF text operators.
- No safety claim after a source, policy, engine or artifact changes.
Sources and corrections
Reviewed 4 August 2026 against PDF / ISO 32000 resources, RFC 4180, OWASP CSV Injection and ECMA-376.
Report a fixture mismatch, stale hash, unsafe export or unsupported claim to contact@fasttool.app. Reference the scenario ID and exact source hash; do not attach confidential PDFs.