Professional Development Plan Template

Professional Development Plan

A clear, specific goal to achieve.

What specific steps will you take?

A clear, specific goal to achieve (e.g., a "soft skill").

What specific steps will you take?

Target date for achieving these objectives (e.g., 12 months from now).

Who will support you in this plan?

How often will you review progress against this plan?

Review your complete plan below. Go back to any tab to make edits.

Click "Next" or "Previous" to refresh this preview.

Actions to Achieve:

${formatText(data.obj1Actions)}

Resources Needed:

${formatText(data.obj1Resources)}

Measure of Success:

${formatText(data.obj1Measure)}

3. Development Objective 2: ${escapeHTML(data.obj2Title)}

Actions to Achieve:

${formatText(data.obj2Actions)}

Resources Needed:

${formatText(data.obj2Resources)}

Measure of Success:

${formatText(data.obj2Measure)}

4. Timeline & Support

Overall Target Date: ${escapeHTML(data.overallDate)}

Support Network: ${escapeHTML(data.support)}

Review Schedule: ${escapeHTML(data.review)}

`; }; const getTxtContent = () => { const data = getPlanData(); let content = `Professional Development Plan: ${data.fullName}\n`; content += `Current Role: ${data.currentRole}\n`; content += "========================================\n\n"; content += "1. GOALS & SELF-ASSESSMENT\n"; content += "--------------------\n"; content += `Long-Term Career Goal: ${data.longTermGoal}\n\n`; content += `Key Strengths:\n${formatTextForTxt(data.strengths)}\n\n`; content += `Areas for Improvement:\n${formatTextForTxt(data.improvementAreas)}\n\n`; content += `2. DEVELOPMENT OBJECTIVE 1: ${data.obj1Title}\n`; content += "--------------------\n"; content += `Actions to Achieve:\n${formatTextForTxt(data.obj1Actions)}\n\n`; content += `Resources Needed:\n${formatTextForTxt(data.obj1Resources)}\n\n`; content += `Measure of Success:\n${formatTextForTxt(data.obj1Measure)}\n\n`; content += `3. DEVELOPMENT OBJECTIVE 2: ${data.obj2Title}\n`; content += "--------------------\n"; content += `Actions to Achieve:\n${formatTextForTxt(data.obj2Actions)}\n\n`; content += `Resources Needed:\n${formatTextForTxt(data.obj2Resources)}\n\n`; content += `Measure of Success:\n${formatTextForTxt(data.obj2Measure)}\n\n`; content += "4. TIMELINE & SUPPORT\n"; content += "--------------------\n"; content += `Overall Target Date: ${data.overallDate}\n\n`; content += `Support Network:\n${data.support}\n\n`; content += `Review Schedule:\n${data.review}\n`; return content; }; const downloadTxt = () => { const txtContent = getTxtContent(); const blob = new Blob([txtContent], { type: 'text/plain;charset=utf-8' }); const a = document.createElement('a'); a.href = URL.createObjectURL(blob); a.download = `pdp_${inputs.fullName.value || 'plan'}.txt`; document.body.appendChild(a); a.click(); document.body.removeChild(a); URL.revokeObjectURL(a.href); }; const downloadPDF = () => { if (typeof window.jspdf === 'undefined' || typeof window.jspdf.jsPDF === 'undefined') { alert('Error: jsPDF library not loaded.'); return; } const { jsPDF } = window.jspdf; const doc = new jsPDF('p', 'mm', 'a4'); const data = getPlanData(); const margin = 20; const pageWidth = doc.internal.pageSize.getWidth(); const usableWidth = pageWidth - (margin * 2); let yPos = 25; // Start position const addWrappedText = (title, text, isTitle, isSubTitle = false) => { if (yPos > 260) { // Check for page break doc.addPage(); yPos = 20; } if (isTitle) { doc.setFontSize(14); doc.setFont(undefined, 'bold'); doc.setTextColor(0, 123, 255); // Blue doc.text(title, margin, yPos); yPos += 8; } if (isSubTitle) { doc.setFontSize(11); doc.setFont(undefined, 'bold'); doc.setTextColor(44, 62, 80); // Dark doc.text(title, margin, yPos); yPos += 6; } doc.setFontSize(11); doc.setFont(undefined, 'normal'); doc.setTextColor(52, 73, 94); // Dark gray const splitText = doc.splitTextToSize(text, usableWidth); doc.text(splitText, margin, yPos); yPos += (splitText.length * 6) + 4; // 6mm per line + 4mm buffer }; // --- Build PDF Document --- doc.setFontSize(20); doc.setFont(undefined, 'bold'); doc.setTextColor(44, 62, 80); doc.text(`Professional Development Plan: ${data.fullName}`, pageWidth / 2, 15, { align: 'center' }); addWrappedText("1. Goals & Self-Assessment", "", true); addWrappedText("Current Role:", data.currentRole, false); addWrappedText("Long-Term Career Goal:", data.longTermGoal, false); addWrappedText("Key Strengths:", data.strengths, false, true); addWrappedText("Areas for Improvement:", data.improvementAreas, false, true); addWrappedText(`2. Development Objective 1: ${data.obj1Title}`, "", true); addWrappedText("Actions to Achieve:", data.obj1Actions, false, true); addWrappedText("Resources Needed:", data.obj1Resources, false, true); addWrappedText("Measure of Success:", data.obj1Measure, false, true); addWrappedText(`3. Development Objective 2: ${data.obj2Title}`, "", true); addWrappedText("Actions to Achieve:", data.obj2Actions, false, true); addWrappedText("Resources Needed:", data.obj2Resources, false, true); addWrappedText("Measure of Success:", data.obj2Measure, false, true); addWrappedText("4. Timeline & Support", "", true); addWrappedText("Overall Target Date:", data.overallDate, false); addWrappedText("Support Network:", data.support, false, true); addWrappedText("Review Schedule:", data.review, false, true); doc.save(`pdp_${data.fullName.replace(/ /g, '_') || 'plan'}.pdf`); }; // --- Event Listeners --- // Tab Buttons tabButtons.forEach((btn, index) => { btn.addEventListener('click', () => showTab(index + 1)); }); // Next/Prev Navigation nextBtn.addEventListener('click', () => showTab(currentTab + 1)); prevBtn.addEventListener('click', () => showTab(currentTab - 1)); // Tab 5 Actions downloadPdfBtn.addEventListener('click', downloadPDF); downloadTxtBtn.addEventListener('click', downloadTxt); // --- Initialization --- showTab(1); // Set initial state });
Scroll to Top