PDF to Excel Converter
Extracts PDF tables into Excel sheets from accessibility tags, ruled lines, text alignment or OCR, turning sideways and upside-down pages upright first. Checks flag split dates, doubled text and characters missing from the PDF text layer without editing a cell, and a structure check compares column count and header text with the last run of the same document family.
Everything you enter is processed on your device. This tool loads a code library from cdnjs.cloudflare.com, which sees your IP address but never what you type.
Documentation
A PDF to Excel converter has to rebuild a table that the PDF never stored as one. A PDF page holds runs of text placed at coordinates and lines drawn as paths; nothing records which value belongs to which row or column. This converter reads that layout in the browser and tries four routes in order, keeping the first that finds a table: accessibility tags, ruled lines, text alignment, and OCR.
- Tags: PDFs exported from Word, Excel or a browser with accessibility tagging carry table, row and cell tags. Rows come straight from the tags, and a short row has its cells placed under the columns their text overlaps.
- Ruled lines: horizontal and vertical lines that touch form a grid, and a missing line between two grid cells marks a merged cell. When rules exist only in the header, a row whose text falls into separate columns is split back into cells, and a band with no rules between its text lines is split at the lines that carry numbers.
- Text alignment: with no lines, columns are the vertical gutters that stay free of text across the rows of a block. A gap wider than 0.9 times the font height breaks a line into segments, and a gutter must be at least half a font height wide (0.9 in a block of fewer than four rows).
- OCR: a page with fewer than 8 characters of text and an image covering at least 5 percent of the page is rendered at about 216 dpi, cleared of rule lines, and read by Tesseract word by word. Otsu's threshold separates ink from paper to find the rules, and each rule is painted out together with its faint anti-aliased edge, which would otherwise read as a stray |. A vertical line counts as a rule only when it reaches from one horizontal rule or filled band to another, so the stem of a large "l" or "1" is never mistaken for one and erased. Word-by-word reading can skip a cell holding a single short mark such as one digit, so each ruled cell that has ink but returned no word is read again on its own, as a single line or, when the ink is one character wide, as a single character. A cell whose words all scored under 60 percent confidence is read again the same way, and the new reading replaces the old only when it is at least 15 points more confident. The page itself stays gray rather than being flattened to black and white, because the gray edges of the letters keep a pair such as 11 apart; a black-and-white copy read 0.11 as 0.1. A filled header band with light lettering is left in place and read with the rest of the page. A page whose OCR words average below 50 percent confidence is refused as unreadable instead of being turned into a grid of noise: it holds a picture, or text in a language other than the chosen OCR language (a Chinese scan read with the English model averages 34 to 44 percent, clean scans 87 to 96).
Rotation comes from the text itself. Every text run carries a direction, and the direction that holds the most characters decides how far the page is turned so that it reads left to right; a page stored upside down would otherwise read backwards, "ecirP tinU" for "Unit Price". A scan has no text direction, so when mean OCR confidence falls under 60 percent the page is read again at 180, 90 and 270 degrees, and a turn replaces the first reading only when its mean confidence is at least 10 points higher. A rotation chosen for one page overrides the document-wide one.
Two columns of prose align like a table. A block with three or fewer columns, 5.5 or more words per cell on average and under 15 percent numbers is refused as paragraphs rather than exported as a table.
Checks only add warnings; none of them can edit a cell. Every table is frozen before the checks run, and a fingerprint of all cells is compared before and after, because a checker that could change what it checks could pass itself. The checks look for doubled text from overprinting, characters the font cannot map, a date or number split across two columns, two numbers in one cell, text in a number column, rows out of line with their columns, sideways text, low OCR confidence, and a text accounting in which every character of the PDF text inside the table area must land in exactly one cell. OCR pages have no second source, so OCR numbers stay unverified even when no warning fires.
Per-file checks go silent when a supplier changes a template, since every cell still looks consistent. Each document family therefore keeps a baseline of column counts and header text, saved when a workbook is downloaded. A later file whose structure differs holds the download until the change is acknowledged, and the baseline is replaced only by explicit choice. A reset of the tool clears the baselines with every other stored setting, after which the next file of a family reads as a first run, never as a match.
Number cells become numbers only when they match a strict pattern: leading zeros, values longer than 15 digits and dates stay text, and the decimal separator is detected per table. "Converted, no warnings" is not proof that every cell is right. Settings holds the detection route, OCR language and confidence threshold, number handling and sheet layout, and the workbook adds a Checks sheet with each finding's cell and page region plus a Summary sheet with the fingerprint and the structure result.
A September price list has six columns: SKU, Description, Qty, Unit Price, Amount, Ship Date. Its download saves that header as the baseline for the family "price list". The November file inserts a Discount column after the price and renames Unit Price to Price (USD), so it has seven columns. The comparison reports the column count changing from 6 to 7, then column D changing from "Unit Price" to "Price (USD)", column E from "Amount" to "Discount", column F from "Ship Date" to "Amount", and column G from empty to "Ship Date": five differences. Every November cell still passes the per-file checks, which is the reason the comparison exists. A Qty of "1,000" in either file is stored as the number 1000, and the SKU "D-0007" stays text.
PDF tables turn up wherever a system prints instead of exporting: supplier price lists, statements, statistical reports and scanned paperwork. The common thread is a table that has to be reused as data, together with a need to know which parts of the conversion deserve a second look.
- Purchasing: a supplier sends a 12-page price list each month with SKU, description, unit price and pack size. The structure check compares each month with the last one downloaded, so an inserted Discount column or a renamed Unit Price header holds the download instead of shifting every price one column over.
- Accounts payable: invoices and statements printed from accounting software arrive as ruled tables. Amounts such as 1,250.00 land as numbers ready for a SUM formula, while invoice numbers like 000417 keep their leading zeros as text.
- Research: government statistical reports set tables between paragraphs, often with rules only under the header. Text alignment rebuilds the columns, and a wrapped label that lands on a row of its own comes back flagged for review rather than silently merged into the row above.
- Operations: a scanned delivery note or a faxed order sheet goes through OCR. Each cell carries the lowest word confidence it was read at, and cells under the threshold are listed with their page region for comparison against the paper copy.
- Archive work: landscape tables printed sideways in portrait reports, and pages scanned upside down, are turned upright before any text is read, and the summary states which pages were turned and by how much.
- Quality control: when a converted value is wrong, the failure report records the page, cell, route, region, the value as converted and as printed, whether a warning fired, and how hard the error was to spot, without attaching the confidential PDF.
Inputs, outputs, and what the PDF to Excel Converter computes
What the PDF to Excel Converter asks for and what it returns, as a plain list. Defaults, units, and ranges are the ones the form loads with.
Inputs
- Password (password input)
- Pages (text input)
- Rotation · default: Auto-detect per page
- Document family (text input)
- Table detection · default: Auto: tags, then ruled lines, then text alignment
- Scanned pages · default: OCR pages with no text layer
- OCR language · default: English
- Flag OCR words below (text input) · default: 80
- Number cells · default: Store plain numbers as numbers
- Decimal separator · default: Detect per table
- Sheets · default: One sheet per table
- Drop overprinted duplicate text (fake bold) · default: on
- Add Checks and Summary sheets to the workbook · default: on
- Export pages refused as paragraphs as one-column text sheets · default: off
- I have checked the changed columns and headers against the PDF · default: off
- Save this structure as the new baseline when downloading · default: off
- Table
- Cell (text input)
- Converted value (text input)
- Value in the PDF (text input)
- Obvious at a glance / Needed the PDF open / Needed the PDF open, and it is a number · default: Obvious at a glance
- Include the column header and neighboring cell text · default: off
- Notes
- Report
Controls
Convert · Reset · Download Excel (.xlsx) · Download CSV (shown table) · Copy shown table · Build report · Copy report · Download report (.json)
Example
The comparison reports the column count changing from 6 to 7, then column D changing from "Unit Price" to "Price (USD)", column E from "Amount" to "Discount", column F from "Ship Date" to "Amount", and column G from empty to "Ship Date": five differences.