Excel to PDF Converter
Turn an .xlsx, .xls, or .csv file into a clean, paginated PDF. Choose which sheets to include, each starts on its own page, with adjustable font size and page orientation. Runs entirely in your browser.
Click or drop an Excel file
XLSX, XLS, XLSM, CSV, ODS · processed on your device, never uploaded
Note: PDF output uses a standard Latin font. Complex scripts (Hindi, Arabic, CJK) may not render correctly.
How this tool turns spreadsheet rows into a paginated PDF table
Converting a spreadsheet to PDF is not a screenshot of Excel. This tool reads your workbook’s actual cell data with SheetJS, then rebuilds it as a genuine vector PDF table using jsPDF and its autoTable plugin, deciding page breaks, column widths and header repetition on its own. Everything runs in your browser. The workbook is parsed locally and the PDF is generated locally, with no upload step anywhere in the code.
From workbook to paginated document
file.arrayBuffer() and handed to XLSX.read(), producing a workbook object with one entry per sheet. Each sheet’s row count is computed by decoding its !ref range string.
sheet_to_json(ws, { header: 1 }), then any fully empty trailing rows are popped off before rendering.
didDrawPage callback.
Notice the header fill color is the literal RGB triple [219, 39, 119], a rose pink, hardcoded into the autoTable call. It is applied whenever “Show sheet titles” styling is on, and the same value colors the sheet name text drawn above each table.
Layout options and what each one changes
| Option | Effect |
|---|---|
| Page size | Passed straight to jsPDF’s format, accepts A4, Letter and similar named sizes |
| Orientation | Portrait, landscape, or automatic based on the widest row’s column count |
| Font size | Sets autoTable’s styles.fontSize, affecting how much text fits per cell before wrapping |
| Theme | Grid draws full borders, striped alternates row shading, plain removes border lines entirely |
| Header row | When on, treats the sheet’s first row as a repeating table header instead of a normal data row |
| Sheet titles | Draws the sheet name as a heading above its table using doc.text() |
overflow: 'linebreak' setting means a cell with more text than its column width can hold wraps onto additional lines within that row rather than shrinking the font or truncating. A spreadsheet with one very long text cell in an otherwise compact table can end up with unexpectedly tall rows on the PDF page.What carries over and what does not
Multi-sheet handling
Each checked sheet becomes its own PDF page, or its own run of pages if the content overflows one page. Unchecked sheets are skipped entirely, not merged or summarized.
What does not carry over
Cell background colors, conditional formatting, charts, images and formulas are not rendered. Only the computed text values reach the PDF table.
Layout and PDF references
- SheetJS documentation covers the
XLSX.readandsheet_to_jsoncalls used to extract cell data. - jsPDF-AutoTable documentation details the table rendering options this tool exposes as UI controls.
- ISO 32000-2 is the PDF 2.0 specification defining the document format jsPDF writes.
- ECMA-376 defines the Office Open XML .xlsx format being parsed.
When a spreadsheet needs to be a document
Turning a finance report into a fixed, unchangeable PDF before sending it externally, printing a product inventory sheet in a paginated, readable layout, archiving a snapshot of a live spreadsheet at a point in time, or sharing a data table with someone who does not have Excel installed but has a PDF reader.
FAQ: Excel to PDF Converter
Wide spreadsheets need either more page width or smaller text. Try landscape orientation first, which is the default, then lower the Table Font Size slider until all your columns fit within the page.
No, only the cell text and values carry over into a plain, bordered grid. Cell background colors, conditional formatting, and charts are not part of what this tool extracts.
Yes. After uploading, every sheet in the workbook appears as a checkbox above the preview. Check only the sheets you want in the PDF, each included sheet starts on its own page.
Yes. .csv files are treated as a single sheet workbook, since a CSV has no concept of multiple sheets, and convert the same way as an .xlsx or .xls file.
No. Both the spreadsheet parsing, SheetJS, and the PDF rendering happen entirely in your browser. Your file never leaves your device.
From the blog
Format guides and gotchas
What each format stores, and what quietly disappears in conversion.