CSV to PDF converter

Open a CSV file (or paste CSV text) and download it as a clean PDF table: the first row becomes a header that repeats on every page, and the columns are scaled to fit the page. Free, no signup, no watermark.

or drop a .csv here

Or paste CSV text

   

Open a .csv file 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, XLSX to PDF, Word to PDF, HTML to PDF, TXT to PDF, merge PDF, compress PDF, PDF to text.

Related tools

PDF to CSV Converter · Excel to CSV · CSV to Excel · JSON to CSV · CSV to JSON · CSV to Markdown table · Markdown Table to CSV Converter · 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 · all free tools