import domtoimage from "dom-to-image-more"; import { PDFDocument } from "pdf-lib"; /** ฟังก์ชันสำหรับแสดง loading spinner */ export function showLoadingSpinner() { const loading = document.createElement("div"); loading.id = "loading-spinner"; loading.style.position = "fixed"; loading.style.top = "0"; loading.style.left = "0"; loading.style.width = "100vw"; loading.style.height = "100vh"; loading.style.background = "rgba(0,0,0,0.2)"; loading.style.display = "flex"; loading.style.alignItems = "center"; loading.style.justifyContent = "center"; loading.style.zIndex = "9999"; loading.innerHTML = `
`; document.body.appendChild(loading); } /** ฟังก์ชันสำหรับซ่อน loading spinner */ function hideLoadingSpinner() { const loading = document.getElementById("loading-spinner"); if (loading) loading.remove(); } /** * ฟังก์ชันสำหรับ export โครงสร้างองค์กรเป็น PNG * @param node HTMLElement ที่ต้องการ export เป็น PNG */ export async function exportChartToPNG(node: HTMLElement): Promise { if (node) { try { // สร้าง PNG จาก DOM ขนาดเต็ม const imageData = await domtoimage.toPng(node, { bgcolor: "#fff", quality: 1, width: node.scrollWidth, height: node.scrollHeight, }); const link = document.createElement("a"); link.download = "orgchart.png"; link.href = imageData; link.click(); } catch (error: any) { alert("Export ไม่สำเร็จ: " + error.message); } finally { hideLoadingSpinner(); } } } /** * ฟังก์ชันสำหรับ export โครงสร้างองค์กรเป็น PNG * @param node HTMLElement ที่ต้องการ export เป็น PNG */ export async function exportChartToPDF(node: HTMLElement): Promise { // ใช้ scrollWidth/scrollHeight เพื่อขนาดเต็ม const width = node.scrollWidth; const height = node.scrollHeight; try { // สร้าง PNG จาก DOM ขนาดเต็ม const imageData = await domtoimage.toPng(node, { width, height, bgcolor: "#fff", }); // สร้าง PDF ด้วย pdf-lib const pdfDoc = await PDFDocument.create(); const page = pdfDoc.addPage([width, height]); const pngImage = await pdfDoc.embedPng(imageData); page.drawImage(pngImage, { x: 0, y: 0, width, height, }); const pdfBytes = await pdfDoc.save(); // ดาวน์โหลด PDF const blob = new Blob([pdfBytes], { type: "application/pdf" }); const url = URL.createObjectURL(blob); const a = document.createElement("a"); a.href = url; a.download = "orgchart.pdf"; a.click(); URL.revokeObjectURL(url); } catch (err: any) { alert("Export ไม่สำเร็จ: " + err.message); console.error(err); } finally { hideLoadingSpinner(); } }