Newsletter Content Generator

Newsletter Content Generator

Craft engaging newsletters by outlining your key topics and audience.

Newsletter Details

Generated Newsletter

Your newsletter content will appear here...

${cta}

${signOff}

`, textForPdf: `Subject: ${subject}\n\n${intro}\n\n${points.map(p => `--- ${p.toUpperCase()} ---\nWhen it comes to ${p}, it's essential for ${audience} to consider the long-term implications...`).join('\n\n')}\n\n${cta}\n\n${signOff}` }; lastNewsletter = newsletter; renderNewsletter(newsletter); }; const renderNewsletter = (newsletter) => { newsletterOutput.innerHTML = newsletter.html; pdfButtonContainer.classList.remove('hidden'); }; const handlePdfDownload = () => { if (!lastNewsletter) return; const { jsPDF } = window.jspdf; const pdf = new jsPDF({ orientation: 'p', unit: 'pt', format: 'a4' }); const margin = 60; const pageWidth = pdf.internal.pageSize.getWidth(); pdf.setFontSize(24); pdf.setFont('Helvetica', 'bold'); pdf.text(titleEl.value, pageWidth / 2, margin, { align: 'center' }); pdf.setFontSize(11); pdf.setFont('Helvetica', 'normal'); const textLines = pdf.splitTextToSize(lastNewsletter.textForPdf, pageWidth - margin * 2); pdf.text(textLines, margin, margin + 40); const today = new Date().toLocaleDateString('en-US'); const pageCount = pdf.internal.getNumberOfPages(); for (let i = 1; i <= pageCount; i++) { pdf.setPage(i); const pageHeight = pdf.internal.pageSize.getHeight(); pdf.setFontSize(9); pdf.setTextColor(150); pdf.text(`Generated on ${today}`, margin, pageHeight - 30); pdf.text(`Page ${i} of ${pageCount}`, pageWidth - margin, pageHeight - 30, { align: 'right' }); } pdf.save('newsletter.pdf'); }; generateBtn.addEventListener('click', generateNewsletter); downloadPdfBtn.addEventListener('click', handlePdfDownload); // Initial generation on load generateNewsletter(); });
Scroll to Top