Excel to PDF converter

Open an Excel spreadsheet, choose the sheets, and download a PDF where every column fits the page width. The text stays selectable, the header row repeats on every page. Free, no signup, no watermark.

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: XLSX to PDF, CSV to PDF, Word to PDF, HTML to PDF, TXT to PDF, merge PDF, compress PDF, PDF to text.

Related tools

PDF to Excel · Excel to CSV · CSV to Excel · Excel to JSON Converter · Excel to Markdown Table · JSON to Excel Converter · Word to PDF · Markdown to PDF · HTML to PDF · Merge URLs to PDF · TXT to PDF · Entire website to PDF · Image to PDF · Bulk URL to PDF · URL to PDF · SVG to PDF · PDF to image · Merge PDF · all free tools