Letterhead Generator - Free Business Letterhead Maker - Small Study Tools
100% Free · No Signup · Browser-Based

Letterhead Generator

Design a professional letterhead — logo, contact details, QR code and social icons, framing blank space for your actual letter. Pro Mode adds a digital signature, watermark, custom fonts, tables, multiple logos and 300 DPI export.

Pro Version is Free for now
✓ Signature · Watermark · Custom fonts · Tables ·
Multiple logos/QR codes · 300 DPI · SVG export unlocked
100% Private — everything stays in your browser
↩️ Edit History
🎨 Template
🏢 Company
📞 Contact Details
🖼️ Logo
🏢
🖼️ Second Logo (footer)
🔗 QR Code
Include QR code
🔗 Second QR Code
Include second QR code
📱 Social Media
✍️ Digital Signature
Include signature block
💧 Watermark
Show watermark
🖼️ Background Image
📊 Body Table
Include table
🖌️ Design

Falls back to a standard font in the PDF if the file can't be embedded.

📄 Page
👁️ Preview
`); w.document.close(); setTimeout(() => { w.print(); }, 300); }// ── EXPORT: PDF ─────────────────────────────────────────────── function hexToRgb(hex) { const c = hex.replace('#',''); return PDFLib.rgb(parseInt(c.slice(0,2),16)/255, parseInt(c.slice(2,4),16)/255, parseInt(c.slice(4,6),16)/255); } async function embedImgIfAny(pdfDoc, dataUrl) { if (!dataUrl) return null; try { const bytes = await (await fetch(dataUrl)).arrayBuffer(); if (dataUrl.includes('image/png')) return await pdfDoc.embedPng(bytes); return await pdfDoc.embedJpg(bytes); } catch (e) { return null; } } async function getTitleFont(pdfDoc, fallback) { if (!customFontBytes) return fallback; try { if (typeof fontkit !== 'undefined') pdfDoc.registerFontkit(fontkit); const bytes = await (await fetch(customFontBytes)).arrayBuffer(); return await pdfDoc.embedFont(bytes); } catch (e) { return fallback; } } async function downloadPDF() { const theme = getActiveTheme(); const L = computeLetterheadLayout(currentPageSize, theme.layout); const f = getFields(); const pdfDoc = await PDFDocument.create(); const bodyFont = await pdfDoc.embedFont(StandardFonts.Helvetica); const boldFallback = await pdfDoc.embedFont(StandardFonts.HelveticaBold); const titleFont = isPro ? await getTitleFont(pdfDoc, boldFallback) : boldFallback; const page = pdfDoc.addPage([L.page.w, L.page.h]); const flip = y => L.page.h - y; const textColor = hexToRgb(theme.text), accentColor = hexToRgb(theme.accent);const logoImg = await embedImgIfAny(pdfDoc, logoDataUrl); if (logoImg) { let lx = L.logo.x; if (logoPosition === 'top-center' && theme.layout !== 'centered') lx = L.page.w/2 - L.logo.w/2; else if (logoPosition === 'top-right' && theme.layout !== 'centered') lx = L.page.w - L.margin - L.logo.w; page.drawImage(logoImg, { x: lx, y: L.logo.y, width: L.logo.w, height: L.logo.h }); }const drawAligned = (text, x, y, size, font_, color, centered) => { if (centered) { const w = font_.widthOfTextAtSize(text, size); page.drawText(text, { x: x - w/2, y: flip(y), size, font: font_, color }); } else page.drawText(text, { x, y: flip(y), size, font: font_, color }); }; drawAligned(truncate(f.company,40), L.companyName.x, L.companyName.y, 18, titleFont, textColor, L.companyName.centered); if (f.tagline) drawAligned(truncate(f.tagline,60), L.tagline.x, L.tagline.y, 9, bodyFont, accentColor, L.tagline.centered);if (dividerStyle !== 'none') { page.drawLine({ start:{x:L.contentX,y:flip(L.headerY)}, end:{x:L.contentX+L.contentW,y:flip(L.headerY)}, thickness:1.2, color: accentColor }); page.drawLine({ start:{x:L.contentX,y:flip(L.footerY+L.footerH)}, end:{x:L.contentX+L.contentW,y:flip(L.footerY+L.footerH)}, thickness:1.2, color: accentColor }); }if (isPro && watermarkEnabled) { const cx = L.page.w/2, cy = L.page.h/2; const wmText = f.watermark; const w = titleFont.widthOfTextAtSize(wmText, 48); page.drawText(wmText, { x: cx - w/2, y: flip(cy), size: 48, font: titleFont, color: textColor, opacity: 0.08, rotate: PDFLib.degrees(45) }); }if (isPro && sigEnabled) { const sigY = L.bodyBottom + 50; const sigImg = sigMode === 'upload' ? await embedImgIfAny(pdfDoc, sigImageDataUrl) : null; if (sigImg) page.drawImage(sigImg, { x: L.contentX, y: flip(sigY+36)-34, width: 130, height: 34 }); else if (sigMode === 'typed' && f.sigName) page.drawText(f.sigName.split(',')[0]||f.sigName, { x: L.contentX, y: flip(sigY+8), size: 20, font: bodyFont, color: textColor }); page.drawLine({ start:{x:L.contentX,y:flip(sigY)}, end:{x:L.contentX+160,y:flip(sigY)}, thickness:1, color: textColor }); if (f.sigName) page.drawText(f.sigName, { x: L.contentX, y: flip(sigY-14), size: 9, font: bodyFont, color: rgb(0.58,0.64,0.72) }); }if (isPro && tableEnabled && f.tableData) { const rows = parseTableData(f.tableData); if (rows.length) { const cols = Math.max(...rows.map(r => r.length)); const t = computeTableLayout(L.bodyTop, L.bodyBottom, L.contentX, L.contentW, rows.length, cols); if (t.fits) { rows.forEach((row, ri) => { const rowY = t.tableTop - ri*t.rowH; page.drawLine({ start:{x:L.contentX,y:flip(rowY)}, end:{x:L.contentX+L.contentW,y:flip(rowY)}, thickness:0.7, color: rgb(0.89,0.91,0.94) }); row.forEach((cell, ci) => { page.drawText(truncate(cell,24), { x: L.contentX+ci*t.colW+6, y: flip(rowY-t.rowH+15), size: 9.5, font: ri===0?boldFallback:bodyFont, color: textColor }); }); }); page.drawLine({ start:{x:L.contentX,y:flip(t.tableBottom)}, end:{x:L.contentX+L.contentW,y:flip(t.tableBottom)}, thickness:0.7, color: rgb(0.89,0.91,0.94) }); } } }page.drawText(truncate(f.address,80), { x: L.contentX, y: flip(L.addressY), size: 9, font: bodyFont, color: textColor, opacity: 0.8 }); const contactParts = [f.phone, f.email, f.website].filter(Boolean).join(' | '); page.drawText(truncate(contactParts,90), { x: L.contentX, y: flip(L.footerRowY), size: 9, font: bodyFont, color: textColor });const socialsForPdf = [['f',f.facebook],['@',f.instagram],['in',f.linkedin],['X',f.twitter]].filter(([,v]) => v); socialsForPdf.forEach(([label], i) => { const sx = L.contentX + 9 + i*24; page.drawCircle({ x: sx, y: flip(L.socialRowY), size: 9, color: accentColor }); const lw = bodyFont.widthOfTextAtSize(label, 7); page.drawText(label, { x: sx - lw/2, y: flip(L.socialRowY) - 2.5, size: 7, font: bodyFont, color: rgb(1,1,1) }); });if (logo2DataUrl && isPro) { const logo2Img = await embedImgIfAny(pdfDoc, logo2DataUrl); if (logo2Img) page.drawImage(logo2Img, { x: L.qr2X, y: L.qr2Y, width: L.qrSize, height: L.qrSize }); } else if (isPro && qr2Enabled) { drawQrPdf(page, f.qr2Data || f.website, L.qr2X, flip(L.qr2Y+L.qrSize), L.qrSize, textColor); } if (qrEnabled) drawQrPdf(page, f.qrData || f.website, L.qrX, flip(L.qrY+L.qrSize), L.qrSize, textColor);const bytes = await pdfDoc.save(); triggerDownload(new Blob([bytes], { type:'application/pdf' }), 'letterhead.pdf'); toast('PDF downloaded!'); } function drawQrPdf(page, text, x, y, size, color) { const { count, modules } = buildQrMatrix(text || 'https://example.com'); const cell = size / count; page.drawRectangle({ x, y, width: size, height: size, color: rgb(1,1,1) }); modules.forEach(([r,c]) => { page.drawRectangle({ x: x+c*cell, y: y+size-(r+1)*cell, width: cell+0.3, height: cell+0.3, color }); }); }// ── MODE ────────────────────────────────────────────────────── function setMode(mode) { isPro = mode === 'pro'; document.getElementById('btnSimple').classList.toggle('active', !isPro); document.getElementById('btnPro').classList.toggle('active', isPro); document.body.classList.toggle('pro-mode', isPro); const pb = document.getElementById('proBar'); if (pb) pb.style.display = isPro ? 'flex' : 'none'; if (!isPro) { if (TEMPLATES[currentTemplate].pro) currentTemplate = 'navy-classic-left'; qr2Enabled = false; sigEnabled = false; watermarkEnabled = false; tableEnabled = false; document.getElementById('qr2Toggle').checked = false; document.getElementById('sigToggle').checked = false; document.getElementById('watermarkToggle').checked = false; document.getElementById('tableToggle').checked = false; } renderAllUI(); }// ── UTILS ───────────────────────────────────────────────────── function toast(msg) { const t = document.getElementById('toast'); t.textContent = msg; t.classList.add('show'); setTimeout(() => t.classList.remove('show'), 3200); }// ── INIT ────────────────────────────────────────────────────── renderLogoPositionRow(); renderAllUI(); pushHistory();

Free Letterhead Generator — Professional Templates in Minutes

A letterhead generator only saves real time if the result actually looks like something a print shop or client would take seriously — logo, contact details and branding framing a blank space, not a cluttered template that fights with whatever gets typed in later. This one is built around that blank middle: a header and footer with your logo, contact info and social links, leaving the rest of the page free for the actual letter.

What this tool actually does: a live-editable letterhead with logo, contact details, QR code and social icons, downloadable as a real vector PDF or PNG. Pro Mode adds 16 templates, a digital signature, watermark, custom fonts, tables, multiple logos and QR codes, and 300 DPI export.

How to Create a Letterhead Online

1
Add your company detailsName, tagline, phone, email, website and address — all editable, all reflected instantly in the preview.
2
Upload your logoChoose top-left, top-center or top-right placement to match your brand's usual layout.
3
Pick a template and colorsStart from a template, then override colors, fonts and divider style independently.
4
Download or printExport as PDF or PNG, print directly, or save the design in your browser to reload and edit later.

A Letterhead Template That Prints Correctly

Both A4 and US Letter paper sizes are supported, with the header, footer and content area proportioned automatically for whichever one is selected — not a single fixed layout stretched to fit. The PDF export is built from real vector text and shapes rather than a flattened image, so it stays sharp at any zoom or print size.

🏢
Business Correspondence
📜
Official Letters
🧾
Quotes & Proposals
✍️
Signed Documents

16 Templates, or Build Your Own Look

Pro Mode's templates combine four layout styles — Classic Left, Centered, Split Bar and Minimal Line — with four color families, so there's real visual range rather than one design recolored. Every element stays independently overridable: accent color, text color, company name font, and divider line style (solid, dashed, dotted, or none) can all be changed regardless of which template is the starting point.

Pro Mode also adds a digital signature block, a watermark, a background image, custom font upload, and a structured table — useful for a letterhead that doubles as a quote sheet or simple invoice cover.

⚡ Quick Answers
Is it free?

Yes, fully free — PDF and PNG export, no signup or watermark forced on the free version.

Does it support A4 and Letter size?

Yes — the layout adjusts automatically for either paper size.

Can I add a QR code?

Yes — one free, a second one in Pro Mode, generated locally in your browser.

Can I add a digital signature?

Yes, in Pro Mode — typed in a script font or uploaded as an image.


Frequently Asked Questions

Common questions about the letterhead generator

Yes, fully free, including one template, logo upload, contact details, QR code, social icons and PDF/PNG download. Pro Mode — also free — adds 16 templates, a digital signature, watermark, custom fonts, tables, multiple logos/QR codes, and 300 DPI export.

Yes. Built from real vector text and shapes rather than an image, so it stays sharp at any size and prints cleanly. PNG, and in Pro Mode SVG, are also available.

Yes. Upload a logo with top-left, top-center or top-right placement, and fill in company name, tagline, phone, email, website and address — all reflected instantly in the preview.

Yes. Download the PDF and print it as-is, or open it in a PDF editor and type your letter into the blank space between the header and footer — it's built around that space specifically.

Yes, both are available, and the header, footer and content area stay correctly proportioned automatically on whichever size you pick.

Yes. A QR code (a second one in Pro Mode) can sit in the footer, alongside icons for Facebook, Instagram, LinkedIn and X/Twitter with your handles.

Yes. Everything is generated locally in your browser — nothing you type or upload is sent to a server.

Lilly
Here to help you find a tool
Search tools Search blogs
Try me to find a tool! 👋