XLSX to PDF converter

Convert an .xlsx file to PDF in a few seconds. The workbook is read in your browser, each sheet becomes a clean table scaled to fit the page, and Chromium prints it into a PDF with selectable text. Free, no signup.

or drop an .xlsx, .xls, .ods or .csv here

   

Open a spreadsheet to start.

Preview

How the PDF is laid out

In your spreadsheetIn the PDF
Cell values as displayed (dates, currency, percentages, decimals)Kept, as real selectable text
Formulas print their last calculated value.
Merged cells, column widths, hidden rows and columnsKept (hidden ones are left out)
Wide sheetsScaled to fit the page width
Auto orientation switches to landscape when a sheet is wider than it is tall.
Long sheetsFlow over as many pages as needed, with the header row repeated
Cell colors, fonts, borders, charts, imagesNot kept
You get a clean, readable table instead.

Each sheet starts on a new page with its name as a title. Empty rows and columns at the edges of a sheet are trimmed, so a stray value in cell ZZ900 doesn't shrink everything else (check the preview). Numbers are right-aligned, text is left-aligned, and long text wraps inside its column.

This works best for data: price lists, invoices exported as tables, reports, timesheets, inventories, contact lists. For a sheet whose look matters (colored dashboards, charts), use File → Export → PDF in Excel or LibreOffice, which keep the formatting.

Convert spreadsheets to PDF from code

Need to turn generated .xlsx or .csv files into PDFs on a server, without installing LibreOffice? Turn each sheet into an HTML table with SheetJS (npm i xlsx) and send it to the Shotmint PDF API. Save this as xlsx2pdf.mjs and run SHOTMINT_KEY=... node xlsx2pdf.mjs report.xlsx (CSV files work too):

// xlsx2pdf.mjs: node xlsx2pdf.mjs report.xlsx  ->  report.pdf
import XLSX from 'xlsx';
import { writeFile } from 'node:fs/promises';

const input = process.argv[2] ?? 'report.xlsx';
const wb = XLSX.readFile(input);
const sheets = wb.SheetNames.map(name =>
  `<h2>${name}</h2>` + XLSX.utils.sheet_to_html(wb.Sheets[name], { header: '', footer: '' }));
const html = `<!doctype html><meta charset="utf-8">
<style>
  body { font: 9pt Arial, sans-serif }
  h2 { font-size: 12pt } h2:not(:first-child) { break-before: page }
  table { border-collapse: collapse } td { border: 1px solid #bbb; padding: 2pt 4pt }
  tr { break-inside: avoid }
</style>${sheets.join('')}`;

const res = await fetch('https://shotmint.creasework.com/v1/pdf', {
  method: 'POST',
  headers: { 'X-API-Key': process.env.SHOTMINT_KEY, 'Content-Type': 'application/json' },
  body: JSON.stringify({ html, format: 'A4', landscape: true, margin: '10mm', page_numbers: true }),
});
if (!res.ok) throw new Error(`${res.status} ${await res.text()}`);
await writeFile(input.replace(/\.(xlsx|xls|ods|csv)$/i, '') + '.pdf', Buffer.from(await res.arrayBuffer()));
console.log('Saved, credits left:', res.headers.get('x-credits-remaining'));

sheet_to_html prints the formatted values and keeps merged cells. Options: format (A4, Letter, Legal, A3, A5, Tabloid), landscape, margin, scale (0.1 to 2, to fit wide sheets), page_numbers, header_template and footer_template. Each PDF is 1 credit, and the HTML can be up to 2 MB.

Get 25 free renders a month API docs

FAQ

Is my file uploaded? The spreadsheet is read in your browser and never uploaded. Only the finished table (HTML) is sent once to render the PDF, and it is not stored.

Which formats work? .xlsx, .xlsm, .xls (Excel 97 and later), .ods (LibreOffice / OpenOffice), .csv and .tab-separated .tsv. Password-protected workbooks can't be opened: remove the password in Excel first.

My columns are tiny in the PDF. A very wide sheet has to be shrunk a lot to fit one page width. Try landscape, a larger page (A3), pick one sheet at a time, or set Fit to "Actual size" to let the extra columns spill onto more pages.

CSV accents or symbols look wrong. CSV files are read as UTF-8. If yours was saved by an old Excel as "CSV (Windows)", save it again as "CSV UTF-8".

Is there a limit? 5 PDFs a day per visitor without a key. Get a free API key for 25 more a month, or buy credits for bulk conversions.

Related: Excel to PDF, CSV to PDF, Word to PDF, HTML to PDF, TXT to PDF, merge PDF, compress PDF, PDF to text.

Related tools

Extract images from PDF · Compare PDFs (text diff) · PDF to Excel · PDF to HTML · PDF to Word · PDF to Markdown · PDF to text · OCR PDF · Unlock PDF · Protect PDF · Flatten PDF · Fill PDF form · Sign PDF · Add text to PDF · Watermark PDF · Add page numbers to PDF · Redact PDF · Grayscale PDF · all free tools