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.
Click or drop a PDF with tables
Text-based PDFs · processed on your device, never uploaded
Column detection is automatic, based on text alignment. Ruled tables and cleanly aligned columns extract best; heavily merged cells may need cleanup in Excel.
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 tool 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.
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.
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 layout | What SheetJS builds |
|---|---|
| One sheet per page | Each page becomes its own worksheet, named “Page 1”, “Page 2” and so on, inside a single .xlsx workbook |
| Combined into one sheet | All page grids are concatenated with a blank spacer row between them |
| CSV export | Each sheet is converted with XLSX.utils.sheet_to_csv and joined with a blank line between pages |
| Skip empty pages | Pages where every extracted cell is blank are dropped from the output entirely |
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, and a cell reading 45% becomes 0.45, 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 tool truncates any page label to fit before calling book_append_sheet, so long source filenames never cause a silent write failure.
Extraction libraries and standards
- ISO 32000-2, the official PDF specification defining the text-showing operators this tool reads positions from.
- pdf.js documentation, including the
getTextContent()API this tool relies on for every fragment’s position and font metrics. - SheetJS documentation, covering the
aoa_to_sheetandsheet_to_csvutilities 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.
FAQ: PDF to Excel Converter
Upload your PDF, set the page range you want converted, and click Convert to Excel. The tool 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 tool 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, when your sheet layout is set to combined, a second “Also Download CSV” button appears next to the Excel download after conversion. The CSV option is not available in one sheet per page mode, since a CSV file can only represent a single flat table.
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.