Loan Amortization Calculator

Loan Amortization Calculator

Plan your loan payments with precision.

Loan Details

Loan Amortization Report

Generated on:

Balance Over Time

Balance Chart

Amortization Schedule

#DatePrincipalInterestTotalBalance

${document.getElementById('total-principal').textContent}

Total Interest

${document.getElementById('total-interest').textContent}

Total Paid

${document.getElementById('total-paid').textContent}

`; document.getElementById('pdf-chart-img').src = balanceChart ? balanceChart.toBase64Image() : ''; document.querySelector('#pdf-schedule-table tbody').innerHTML = scheduleData.map(row => ` ${row.paymentNumber}${row.date}${formatCurrency(row.principal)} ${formatCurrency(row.interest)}${document.getElementById('monthly-payment').textContent}${formatCurrency(row.endingBalance)} `).join(''); const contentToPrint = document.getElementById('pdf-output'); contentToPrint.style.display = 'block'; try { const canvas = await html2canvas(contentToPrint, { scale: 2 }); const { jsPDF } = window.jspdf; const imgData = canvas.toDataURL('image/png'); const pdf = new jsPDF({ orientation: 'landscape', unit: 'pt', format: 'a4' }); const pdfWidth = pdf.internal.pageSize.getWidth(); const pdfHeight = (canvas.height * pdfWidth) / canvas.width; pdf.addImage(imgData, 'PNG', 0, 0, pdfWidth, pdfHeight); pdf.save('Loan-Amortization-Report.pdf'); } catch (err) { console.error("Error generating PDF:", err); alert("Could not generate PDF."); } finally { contentToPrint.style.display = 'none'; } } // --- EVENT LISTENERS --- calculateBtn.addEventListener('click', calculateAndDisplay); downloadPdfBtn.addEventListener('click', handlePdfDownload); // --- INITIALIZATION --- // Set default date to today const today = new Date(); const yyyy = today.getFullYear(); const mm = String(today.getMonth() + 1).padStart(2, '0'); const dd = String(today.getDate()).padStart(2, '0'); startDateInput.value = `${yyyy}-${mm}-${dd}`; lucide.createIcons(); });
Scroll to Top