/** * Advanced PDF Export for Comics * Converts edited comic to PDF using jsPDF or html2canvas */ // Option 1: Using browser's print-to-PDF (already implemented) // This is the most reliable method // Option 2: Client-side PDF generation (requires libraries) function exportToPDFAdvanced() { // This would require including jsPDF and html2canvas libraries // Example implementation: /* // Include these libraries in your HTML: // // const { jsPDF } = window.jspdf; const pdf = new jsPDF('p', 'mm', 'a4'); // Hide controls document.querySelector('.edit-controls').style.display = 'none'; // Get all comic pages const pages = document.querySelectorAll('.comic-page'); let currentPage = 0; function processPage() { if (currentPage >= pages.length) { // Save PDF pdf.save('comic-edited.pdf'); document.querySelector('.edit-controls').style.display = 'block'; return; } html2canvas(pages[currentPage], { scale: 2, useCORS: true, logging: false }).then(canvas => { const imgData = canvas.toDataURL('image/png'); if (currentPage > 0) { pdf.addPage(); } // Calculate dimensions to fit A4 const pdfWidth = 210; const pdfHeight = 297; const imgWidth = canvas.width; const imgHeight = canvas.height; const ratio = Math.min(pdfWidth / imgWidth, pdfHeight / imgHeight); const finalWidth = imgWidth * ratio; const finalHeight = imgHeight * ratio; const x = (pdfWidth - finalWidth) / 2; const y = (pdfHeight - finalHeight) / 2; pdf.addImage(imgData, 'PNG', x, y, finalWidth, finalHeight); currentPage++; processPage(); }); } processPage(); */ } // Option 3: Server-side PDF generation function requestServerPDF() { // Collect all edited data const editedData = { bubbles: [] }; document.querySelectorAll('.speech-bubble').forEach((bubble, index) => { editedData.bubbles.push({ index: index, text: bubble.innerText, left: bubble.style.left, top: bubble.style.top, width: bubble.offsetWidth, height: bubble.offsetHeight }); }); // Send to server for PDF generation fetch('/generate-pdf', { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify(editedData) }) .then(response => response.blob()) .then(blob => { // Download the PDF const url = window.URL.createObjectURL(blob); const a = document.createElement('a'); a.href = url; a.download = 'comic-edited.pdf'; a.click(); window.URL.revokeObjectURL(url); }) .catch(error => { console.error('PDF generation failed:', error); alert('PDF generation failed. Please use the Print option instead.'); }); }