📄 File and Document Free Forever

PDF to Excel Converter

Extract tables from a PDF straight into a real .xlsx spreadsheet, with an optional CSV export too. Reads exact text position on each page to rebuild rows and columns, supports password protected PDFs, entirely in your browser. This PDF to excel converter is free and needs no signup.

1 · Upload PDF
📈

Click or drop a PDF with tables

Text-based PDFs · processed on your device, never uploaded

2 · Options

Column detection is automatic, based on text alignment. Ruled tables and cleanly aligned columns extract best; heavily merged cells may need cleanup in Excel.

About This Tool

How this PDF to Excel converter reconstructs tables from a format that has no concept of a table

A PDF page does not store rows and columns. Under ISO 32000, the format that defines PDF, a page is a stream of positioned text showing operators, each one saying draw this string at this exact x and y coordinate in this font. There is no cell, no row, no grid, nothing that tells a parser two pieces of text belong in the same table. This PDF to excel converter has to look at where hundreds of text fragments land on the page and infer the grid a human eye would see instantly.

Parsing happens with pdf.js, the PDF renderer Mozilla built for Firefox, running entirely in your browser. The spreadsheet is then built with SheetJS (the xlsx library). No file is ever uploaded. The whole conversion, from opening the PDF to writing the final .xlsx or .csv, happens in JavaScript on your machine.

The row and column reconstruction algorithm

Every page goes through the same three stage geometric clustering before a single cell is written.

Step 1 Row clustering pdf.js's getTextContent() returns every text fragment with a transform matrix, and the fifth value in that matrix is the fragment's baseline Y position. Fragments whose Y values sit within roughly a third of the text height of each other get grouped into the same row.
Step 2 Column bin detection The full width of every text fragment in rows with two or more cells is projected onto the page. Vertical strips of white space that no row crosses become column boundaries, so right aligned numbers of different widths stay in one column. The Column Sensitivity slider sets how wide a gap has to be before it splits a column.
Step 3 Cell assignment Rows with one cell per column are filled in order, which keeps a left aligned header above right aligned numbers. Other fragments go into the column they overlap most. Fragments landing in the same column get joined with a space, which is how multi-word cell contents are recovered.
Step 4 Empty column pruning and number detection Column bins that never received any text on the whole page get dropped from the final grid. If the numeric detection option is on, each remaining cell is checked against a pattern that strips currency symbols, commas and percent signs, and converts what is left into a real spreadsheet number rather than text.
// row grouping by baseline Y, simplified from the tool source items.forEach(function (it) { var y = it.transform[5], h = it.height || 10; var row = rows.find(function (r) { return Math.abs(r.y - y) < Math.max(2.5, h * 0.35); }); if (!row) rows.push(row = { y: y, items: [] }); row.items.push(it); }); // column bins from x-start clustering var gapMin = Math.max(8, avgFontHeight * 1.1); if (xs[i] - cols[cols.length - 1] > gapMin) cols.push(xs[i]);

Because the row and column boundaries are derived from geometry rather than a real table object, borderless tables and tables set with inconsistent spacing can still confuse the grid. Well aligned tables from spreadsheet exports or invoices tend to reconstruct almost perfectly, since their columns share exact X coordinates across every row.

Multi-page handling and output formats

You can restrict extraction to a page range using the same comma and hyphen syntax as a print dialog, for example 1-3, 7. Every selected page runs through the grid reconstruction independently, on its own promise chain, so a 40-page PDF does not block the browser tab while it works.

Output layoutWhat SheetJS builds
One sheet per pageEach page becomes its own worksheet, named "Page 1", "Page 2" and so on, inside a single .xlsx workbook
Combined into one sheetAll page grids are concatenated with a blank spacer row between them
CSV exportEach sheet is converted with XLSX.utils.sheet_to_csv and joined with a blank line between pages
Skip pages without tablesPages with no row of two or more cells, like cover pages or plain text, are left out of the workbook
Scanned PDFs will not extract. If a page is a photographed or scanned image with no embedded text layer, getTextContent() returns nothing to cluster, and the tool flags a low-character warning. This is a text extraction tool, not OCR. A scanned invoice needs an OCR pass before any geometry-based table reconstruction can work on it.

Two details worth knowing

Currency and percent coercion

With number detection on, a cell reading $1,234.56 becomes the number 1234.56, (1,200.00) becomes -1200, and a cell reading 45% becomes 0.45 with a percent format, matching how Excel itself stores percentages internally as a fraction with a display format on top.

Sheet name length limit

Excel's OOXML format caps worksheet names at 31 characters. The PDF to excel converter truncates any page label to fit before calling book_append_sheet, so long source filenames never cause a silent write failure.

pdf.js text layer parsing Geometric row and column clustering SheetJS .xlsx and .csv output

Extraction libraries and standards

  • ISO 32000-2, the official PDF specification defining the text-showing operators this PDF to excel converter reads positions from.
  • pdf.js documentation, including the getTextContent() API this PDF to excel converter relies on for every fragment's position and font metrics.
  • SheetJS documentation, covering the aoa_to_sheet and sheet_to_csv utilities used to build the output file.
  • Microsoft Open Specifications for XLSX, the OOXML-based format the exported workbook conforms to.

Table extraction in practice

Pulling a pricing table out of a supplier's PDF quote, converting a bank or brokerage statement into a spreadsheet for reconciliation, lifting a schedule or roster out of a printed PDF handout, and rescuing tabular data from an old report that only exists as a flattened PDF export. Anywhere a table was baked into a PDF and you need it back as real, sortable spreadsheet rows, this is the shortcut around retyping it by hand.

How to get accurate tables out of a PDF

A PDF does not store tables. It stores pieces of text at exact positions on a page, and a PDF to Excel converter has to work out which pieces belong in the same row and column. That works well for tables exported from spreadsheets, accounting software and reporting tools, because their columns line up precisely.

Scanned documents are different. A scan is a picture of text, so there is nothing to extract until the page has been through OCR. If the PDF to excel converter returns empty sheets, run the file through an OCR tool first and convert the result.

Merged header cells, rotated text and tables that continue across pages are the usual sources of small errors. After converting, check the first and last rows of each sheet and compare totals against the PDF before using the numbers.

Choose CSV when the data is going into a database or a script, and XLSX when people will open it in Excel or Google Sheets. Everything runs in your browser, so financial statements and invoices stay on your device.

For password protected files, enter the password when asked. It is only used locally to decrypt the file and is never sent anywhere.

Common Questions

FAQ: PDF to Excel Converter

Upload your PDF, set the page range you want converted, and click Extract Tables. The PDF to excel converter reads the exact position of every piece of text on the page, groups it into rows and columns, and writes the result into a downloadable .xlsx file, with a CSV option alongside it.

Table extraction from PDFs is a best effort process based on text position, since PDFs do not store table structure explicitly the way a spreadsheet does. If columns merge together, raise the column sensitivity slider, if a single column splits into two, lower it. Complex nested tables or unusual layouts may need manual cleanup afterward.

Not directly. A scanned PDF is just an image with no underlying text layer, so there is nothing for this PDF to excel converter to read positions from. Run the page through an OCR tool first to add a text layer or extract the text, then convert that text based output.

Yes. After extraction, Download CSV sits next to the Excel button in both layouts. With one sheet per page, every page goes into the same CSV, separated by a blank line. Copy Table copies the page you are previewing so you can paste it straight into Excel or Google Sheets.

No. Both the PDF reading, pdf.js, and the spreadsheet writing, SheetJS, run entirely in your browser. Your document is never transmitted anywhere.

Yes. If the PDF needs a password to open, a password field appears automatically after you upload it. Enter the password and click Unlock, then continue as normal. The password is used locally to open the file and is never sent anywhere.