Free Invoice Generator โ€” Create & Download PDF Invoices | TechFeedNow
๐Ÿงพ Free Invoice Generator

Create Professional Invoices
Download as PDF โ€” Free

Build invoices with GST breakdown, multiple line items, and your branding. No account needed, no watermarks, download instantly.

๐Ÿข Your Business Details
Business / Your Name
Email
Phone
GST Number (optional)
Address
Business Logo (optional)
Logo
๐Ÿ–ผ๏ธ
Click to upload your logo ยท PNG, JPG, SVG
๐Ÿ‘ค Client Details
Client Name / Company
Client Email
Client Address
๐Ÿ“‹ Invoice Details
Invoice Number
Invoice Date
Due Date
Currency
GST Rate
๐Ÿ“ฆ Line Items
DescriptionQtyRate (โ‚น)Amount
Subtotalโ‚น0.00
Totalโ‚น0.00
Discount (โ‚น)
Discount Label
๐ŸŽจ Invoice Colour
Accent Colour
Custom:
๐Ÿ’พ Save & Load
Saved drafts are stored in your browser. Load them anytime on this device.
๐Ÿ“ Notes & Payment Info
Notes / Terms / Bank Details
๐Ÿ”’ Your invoice data never leaves your device. Everything is processed in your browser โ€” 100% private and free.
Invoice Preview
Live Preview

INVOICE

INV-001
From
Your Business
Bill To
Client Name
Date: โ€”
Due: โ€”
DescriptionQtyRateAmount
Add line items to see them here
`); w.document.close(); }// Init updatePreview();// โ”€โ”€ LOGO UPLOAD โ”€โ”€ let logoDataUrl = ''; function uploadLogo(input){ const file = input.files[0]; if(!file) return; const reader = new FileReader(); reader.onload = e => { logoDataUrl = e.target.result; document.getElementById('logoPreview').src = logoDataUrl; document.getElementById('logoPreview').style.display = 'block'; document.getElementById('logoRemoveBtn').style.display = 'block'; document.getElementById('logoUploadArea').style.display = 'none'; // Show in preview const pl = document.getElementById('prev-logo'); pl.src = logoDataUrl; pl.style.display = 'block'; }; reader.readAsDataURL(file); } function removeLogo(){ logoDataUrl = ''; document.getElementById('logoPreview').style.display = 'none'; document.getElementById('logoPreview').src = ''; document.getElementById('logoRemoveBtn').style.display = 'none'; document.getElementById('logoUploadArea').style.display = 'block'; const pl = document.getElementById('prev-logo'); pl.src = ''; pl.style.display = 'none'; }// โ”€โ”€ COLOUR PICKER โ”€โ”€ let invoiceColour = '#6c63ff'; function setColour(colour, swatchEl){ invoiceColour = colour; document.querySelectorAll('.colour-swatch').forEach(s=>s.classList.remove('selected')); if(swatchEl) swatchEl.classList.add('selected'); document.getElementById('customColour').value = colour; // Apply to preview const preview = document.getElementById('invoicePreview'); preview.querySelectorAll('.inv-title h2').forEach(el=>el.style.color=colour); preview.querySelectorAll('.inv-sec-title, .cl-sec-title').forEach(el=>el.style.color=colour); preview.querySelectorAll('.inv-party-label').forEach(el=>el.style.color=colour); // Update via inline style on preview container preview.style.setProperty('--inv-accent', colour); // Re-run preview to propagate colour updatePreviewColour(); } function updatePreviewColour(){ document.querySelectorAll('#invoicePreview .inv-title h2').forEach(el=>el.style.color=invoiceColour); }// โ”€โ”€ SAVE / LOAD โ”€โ”€ function getFormData(){ const fields = ['fromName','fromEmail','fromPhone','fromGST','fromAddress','toName','toEmail','toAddress','invNum','invDate','dueDate','currency','gstRate','discount','discLabel','notes']; const data = {}; fields.forEach(id=>{ const el=document.getElementById(id); if(el) data[id]=el.value; }); data.items = items; data.invoiceColour = invoiceColour; return data; }function saveInvoice(){ const data = getFormData(); localStorage.setItem('tfn-invoice-draft', JSON.stringify(data)); showToast('โœ“ Draft saved!'); }function loadInvoice(){ const raw = localStorage.getItem('tfn-invoice-draft'); if(!raw){ showToast('No saved draft found', true); return; } const data = JSON.parse(raw); const fields = ['fromName','fromEmail','fromPhone','fromGST','fromAddress','toName','toEmail','toAddress','invNum','invDate','dueDate','currency','gstRate','discount','discLabel','notes']; fields.forEach(id=>{ const el=document.getElementById(id); if(el&&data[id]!==undefined) el.value=data[id]; }); if(data.items) items = data.items; if(data.invoiceColour){ setColour(data.invoiceColour, null); } updatePreview(); showToast('โœ“ Draft loaded!'); }function clearAll(){ if(!confirm('Clear all invoice data?')) return; const fields = ['fromName','fromEmail','fromPhone','fromGST','fromAddress','toName','toEmail','toAddress','invNum','invDate','dueDate','discount','discLabel','notes']; fields.forEach(id=>{ const el=document.getElementById(id); if(el) el.value=''; }); document.getElementById('invNum').value = 'INV-001'; items = [{desc:'',qty:1,rate:0}]; removeLogo(); updatePreview(); showToast('โœ“ Cleared'); }// โ”€โ”€ TOAST โ”€โ”€ function showToast(msg, isError=false){ let t = document.getElementById('tfn-toast'); if(!t){ t=document.createElement('div'); t.id='tfn-toast'; t.className='toast'; document.body.appendChild(t); } t.textContent = msg; t.style.borderColor = isError ? 'rgba(255,95,95,.3)' : 'rgba(45,216,130,.3)'; t.style.color = isError ? 'var(--red)' : 'var(--green)'; t.classList.add('show'); setTimeout(()=>t.classList.remove('show'), 2500); }

Scroll to Top