Design Your Sci-Fi Companion

Specifications

Type:

Primary Function:

Appearance Style:

Key Traits:

Appearance

Personality & Behavior

Potential Skills & Abilities

    Unique Quirk

    ${quirk}

    `; // --- Populate PDF content elements --- pdfName.textContent = companionName; pdfType.textContent = type; pdfFunction.textContent = func; pdfAppearance.textContent = appearance; pdfTraits.textContent = traits.join(', ') || 'None specified'; pdfAppearanceDesc.textContent = appearanceDesc; pdfPersonalityDesc.textContent = personalityDesc; pdfSkillsList.innerHTML = selectedSkills.map(s => `
  • ${s}
  • `).join('') || '
  • None listed
  • '; pdfQuirkDesc.textContent = quirk; // Set quirk text directly pdfQuirkDesc.className = 'pdf-quirk'; // Ensure class for styling console.log("PDF content elements populated."); // Show results outputArea.style.display = 'block'; downloadButton.disabled = false; generateButton.disabled = false; console.log("Companion profile generated and displayed."); }); // --- PDF Download --- downloadButton.addEventListener('click', () => { if (outputArea.style.display === 'none' || !nameDisplay.textContent) { console.error("Cannot download PDF: No profile generated yet."); alert("Please generate a companion profile first!"); return; } console.log("Download PDF button clicked."); const element = document.getElementById('profile-pdf-content'); if (!element) { console.error("PDF content container element not found!"); return; } // **Crucial Check:** Verify content before capture console.log('Verifying PDF content before generation. Name:', pdfName.textContent); console.log('PDF content innerHTML snippet:', element.innerHTML.substring(0, 500) + "..."); if (!pdfName.textContent || !pdfAppearanceDesc.textContent) { // Check if critical fields populated console.error("PDF content appears empty or incomplete. Aborting PDF generation."); alert("Error: PDF content is missing or incomplete. Please try generating again."); return; } const companionNameSafe = (nameDisplay.textContent || 'Companion').replace(/[^a-z0-9]/gi, '_').replace(/_{2,}/g, '_'); const filename = `SciFi_Companion_${companionNameSafe}.pdf`; const opt = { margin: [18, 15, 18, 15], // mm T, L, B, R filename: filename, image: { type: 'jpeg', quality: 0.98 }, html2canvas: { scale: 2, logging: false, useCORS: true }, jsPDF: { unit: 'mm', format: 'a4', orientation: 'portrait' } }; // Refined Visibility Toggle const originalVisibility = element.style.visibility; const originalPosition = element.style.position; const originalLeft = element.style.left; const originalTop = element.style.top; element.style.visibility = 'visible'; element.style.position = 'absolute'; element.style.left = '0px'; element.style.top = '0px'; element.style.zIndex = '-1'; // Keep it behind console.log("Starting PDF generation for element:", element); html2pdf().set(opt).from(element).save().then(() => { console.log("PDF Generated:", filename); }).catch(err => { console.error("PDF generation failed:", err); alert("Sorry, there was an error creating the PDF. Please check the console (F12) for details."); }).finally(() => { // Always restore original styles console.log("Restoring original styles for PDF content element."); element.style.visibility = originalVisibility; element.style.position = originalPosition; element.style.left = originalLeft; element.style.top = originalTop; element.style.zIndex = ''; }); }); } // End initializeCreator })(); // IIFE
    Scroll to Top