Fundraising Letter Template

Fundraising Letter Template

1. Organization & Recipient

2. Goal & Impact Story

$

3. Call to Action (CTA) & Sign-off

Configure details in the Data Configuration tab and click "Generate Letter" to see your formatted appeal here.

With heartfelt gratitude,

${sigName}
${sigTitle}
${formatSimpleText(data.orgAddress)}
`; letterContentDiv.innerHTML = letterHtml; }; generateBtn.addEventListener("click", function() { generateLetter(); showTab(1); // Switch to Dashboard }); // --- Utility: Format Date --- var formatDate = function(dateString) { if (!dateString) return "[Date N/A]"; try { return new Date(dateString).toLocaleDateString('en-US', { year: 'numeric', month: 'long', day: 'numeric' }); } catch (e) { return dateString; } }; // --- PDF Download --- pdfBtn.addEventListener("click", function() { var jsPDF = window.jspdf.jsPDF; var orgSlug = orgNameInput.value.replace(/[^a-zA-Z0-9\s]/g, '').replace(/\s/g, '_') || 'Fundraising'; var fileName = `${orgSlug}_Appeal_Letter.pdf`; html2canvas(exportArea, { scale: 2, useCORS: true, backgroundColor: '#ffffff' }).then(function(canvas) { var imgData = canvas.toDataURL('image/png'); var doc = new jsPDF({ orientation: 'p', unit: 'pt', format: 'letter' }); var pdfWidth = doc.internal.pageSize.getWidth(); var pdfHeight = doc.internal.pageSize.getHeight(); var imgProps = doc.getImageProperties(imgData); var imgWidth = imgProps.width; var imgHeight = imgProps.height; var margin = 40; var usableWidth = pdfWidth - (2 * margin); var ratio = usableWidth / imgWidth; var scaledHeight = imgHeight * ratio; var usablePageHeight = pdfHeight - (2 * margin); var heightLeft = scaledHeight; var position = 0; while (heightLeft > 0) { doc.addImage(imgData, 'PNG', margin, position + margin, usableWidth, scaledHeight); heightLeft -= usablePageHeight; position -= usablePageHeight; if (heightLeft > 0) { doc.addPage(); } } doc.save(fileName); }).catch(function(err) { console.error("FLG PDF Error:", err); // alert("An error occurred while generating the PDF."); // Per spec }); }); // --- Initial Load --- var today = new Date().toISOString().split('T')[0]; if (dateInput) { dateInput.value = today; } generateLetter(); // Generate initial view with sample data showTab(0); // Start on Config tab });
Scroll to Top