Skip to main content
PPDF123

PDF table extraction accuracy

Measured results for the table extractor behind Extract Tables from PDF, on test files we publish. They are synthetic, so read them as a floor for clean files, not a promise for yours.

On this page

Summary

6 of 6 text-PDF fixtures were extracted with every measured item right.

The 2 scanned fixtures scored between 97.1 and 98.5 percent; the misses were single characters.

Every test file is synthetic. They were generated for this project’s test suite, and the scans were made by rasterizing them with blur, noise and a slight skew. Real bank statements, invoices and scans vary far more, so check a result before you rely on it. Measured 2026-10-18.

Results

Extraction accuracy by test file
Test fileSourceLayoutRightScore
bank-statementText PDFStatement, 13 rows by 5 columns, empty debit and credit cells65 / 65100%
invoiceText PDFInvoice with line items and a subtotal, tax and total block36 / 36100%
report-borderlessText PDFBorderless report, 7 rows by 5 columns35 / 35100%
report-borderedText PDFThe same report with cell borders35 / 35100%
long-statementText PDFThree-page statement, 90 transactions, header repeated on each page, descriptions wrapping onto up to three lines90 / 90100%
complex-salesText PDFBordered table with a two-level header, a subtotal row and a wrapped label4 / 4100%
scan-bank-statementScan (OCR)The statement scanned at 200 dpi with blur, noise and a 0.4 degree skew64 / 6598.5%
scan-reportScan (OCR)The report scanned at 200 dpi with blur, noise and a 0.4 degree skew34 / 3597.1%

What is counted

  • cells: Share of ground-truth cells that appear in the same row and column of the largest table found, empty cells included.
  • transactions: Share of transactions whose date, debit, credit and balance are found together in the right columns of one row (descriptions are ignored).
  • figures: Share of data rows whose four figures are all found in the right columns of one row (labels are ignored).

What it still gets wrong

  • Headings that span several columns are not merged: the heading sits over the first column it covers.
  • A cell whose text wraps onto several lines becomes extra rows, which the preview lets you merge.
  • Columns that touch or overlap cannot be told apart.
  • OCR reads single characters wrong now and then, for example a 1 read as an i. Check amounts, dates and signs.
  • Handwriting is not recognized: OCR here is built for printed text.

Reproduce it

The files and their ground truth are in backend/crates/pdf-core/tests/fixtures/tables, generated by generate.py. The Rust test table_accuracy.rs fails below a floor for each file, and web/scripts/measure-table-accuracy.ts writes the numbers on this page. Download the data as JSON. To try your own file, use Extract Tables from PDF.