Artist Biography Sheet Generator

Artist Biography Sheet Generator

BioCanvas

Artist Biography Builder
Personal & Contact Info
Artistic Statement / Narrative
Education & Training
Selected Exhibitions (Solo/Group)
Awards & Residencies

${data.medium} | ${data.web}

`; // 2. Biography html += `
${data.bio}
`; // Helper to render lists const renderList = (title, items, formatter) => { if (items.length === 0) return ''; let listHtml = `
${title.toUpperCase()}
`; listHtml += `
    `; items.forEach(item => { listHtml += `
  • ${formatter(item)}
  • `; }); listHtml += `
`; return listHtml; }; // Formatters const formatEducation = (e) => `${e.year} | ${e.degree} - ${e.institution}`; const formatExhibition = (e) => `${e.year} | ${e.title} (${e.type} Exhibition)`; const formatAward = (e) => `${e.year} | ${e.award} (${e.org})`; // 3. Sections html += renderList("Education", data.education, formatEducation); html += renderList("Selected Exhibitions", data.exhibition, formatExhibition); html += renderList("Awards & Residencies", data.award, formatAward); container.innerHTML = html; } function absSwitchTab(tabId) { document.querySelectorAll('.abs-tab-btn').forEach(b => b.classList.remove('active')); document.querySelectorAll('.abs-content').forEach(c => c.classList.remove('active')); const idx = tabId === 'builder' ? 0 : 1; document.querySelectorAll('.abs-tab-btn')[idx].classList.add('active'); document.getElementById('abs-' + tabId).classList.add('active'); if (tabId === 'preview') { absRenderSheet(); } } function absLoadExample() { if(!confirm("Overwrite current data with example artist data?")) return; document.getElementById('inp-name').value = "Elara J. Veda"; document.getElementById('inp-birth').value = "1992, New York, USA"; document.getElementById('inp-web').value = "vedastudio.com"; document.getElementById('inp-medium').value = "Sculpture (Mixed Media) / Installation"; document.getElementById('inp-bio').value = "Veda is a New York-based sculptor whose work investigates industrial decay and manufactured scarcity. Her pieces frequently incorporate found metal objects, concrete, and recycled plastics, creating visceral dialogues between material waste and permanence. She has been featured in several prominent contemporary art journals and focuses currently on large-scale public installations."; // Clear and fill rows document.getElementById('abs-education-rows').innerHTML = ''; document.getElementById('abs-exhibition-rows').innerHTML = ''; document.getElementById('abs-award-rows').innerHTML = ''; absAddRow('education', "BFA, Sculpture", "Pratt Institute", "2014"); absAddRow('exhibition', "Solo", "Relics of the Future (MOMA PS1)", "2025"); absAddRow('exhibition', "Group", "New Voices in Metalwork (The Foundry)", "2024"); absAddRow('award', "Emerging Artist Grant", "Guggenheim Foundation", "2023"); absAddRow('award', "Artist in Residence", "Chinati Foundation, Marfa", "2022"); absRenderSheet(); absSwitchTab('preview'); } /* --- PDF Generation --- */ async function absGeneratePDF() { absRenderSheet(); // Final render check const data = { name: document.getElementById('inp-name').value || "ARTIST NAME", birth: document.getElementById('inp-birth').value || "N/A", web: document.getElementById('inp-web').value || "N/A", medium: document.getElementById('inp-medium').value || "N/A", bio: document.getElementById('inp-bio').value || "Short biography pending.", education: absGetSectionData('education'), exhibition: absGetSectionData('exhibition'), award: absGetSectionData('award') }; const { jsPDF } = window.jspdf; const doc = new jsPDF('p', 'mm', 'a4'); const gold = [243, 156, 18]; const black = [0, 0, 0]; let y = 20; // 1. Header (Name, Contact) doc.setFont("times", "bold"); doc.setFontSize(22); doc.setTextColor(...black); doc.text(data.name.toUpperCase(), 14, y); y += 8; doc.setFontSize(10); doc.setFont("times", "normal"); doc.text(`[ ${data.medium} ]`, 14, y); doc.text(`Website: ${data.web}`, 105, y); doc.text(`Born: ${data.birth}`, 105, y + 5); y += 10; doc.setDrawColor(200); doc.line(14, y, 196, y); y += 8; // 2. Biography doc.setFont("times", "normal"); doc.setFontSize(10); const splitBio = doc.splitTextToSize(data.bio, 182); doc.text(splitBio, 14, y); y += (splitBio.length * 5) + 8; // Helper function to render bulleted CV sections const renderCVSection = (title, items, startY, formatter) => { if (items.length === 0) return startY; if (startY > 260) { doc.addPage(); startY = 20; } doc.setFont("times", "bold"); doc.setTextColor(...black); doc.setFontSize(12); doc.text(title.toUpperCase(), 14, startY); startY += 5; doc.line(14, startY, 70, startY); startY += 5; items.forEach(item => { const content = formatter(item); doc.setFont("times", "normal"); doc.setTextColor(50, 50, 50); doc.setFontSize(10); const splitItem = doc.splitTextToSize(content, 170); doc.text("•", 14, startY); doc.text(splitItem, 18, startY); startY += (splitItem.length * 5) + 3; }); return startY + 5; }; // Formatters for PDF const formatEducation = (e) => `${e.year}, ${e.degree}, ${e.institution}`; const formatExhibition = (e) => `${e.year} - ${e.title} (${e.type} Exhibition)`; const formatAward = (e) => `${e.year}, ${e.award} (${e.org})`; // 3. CV Sections y = renderCVSection("Education", data.education, y, formatEducation); y = renderCVSection("Selected Exhibitions", data.exhibition, y, formatExhibition); y = renderCVSection("Awards & Residencies", data.award, y, formatAward); doc.save(`ArtistBio_${data.name.replace(/\s/g, '_')}.pdf`); }
Scroll to Top