const exportToPDF = () => {const element = document.getElementById('chart-container');if (!element) return;const originalScrollHeight = element.scrollHeight;// 臨時解除滾動條限制,確保所有內容都可見element.style.height = `${originalScrollHeight}px`;// 使用html2canvas將元素轉換為Canvashtml2canvas(element).then(canvas => {// 恢復元素的原始樣式element.style.overflow = 'auto';element.style.height = '';// 創建一個新的jsPDF實例const pdf = new jsPDF('p', 'mm', 'a4');// 將Canvas內容添加到PDFconst imgData = canvas.toDataURL('image/png', 1.0);const pdfWidth = pdf.internal.pageSize.getWidth();const pdfHeight = pdf.internal.pageSize.getHeight();const imgProps = pdf.getImageProperties(imgData);const scale = Math.min(pdfWidth / imgProps.width, pdfHeight / imgProps.height);const width = imgProps.width * scale;const height = imgProps.height * scale;// 添加圖片到PDF,可能需要調整位置和尺寸以適應頁面pdf.addImage(imgData, 'PNG', 0, 0, width, height);// 保存PDFpdf.save('exported.pdf');});};
總兒言之:
導出的時候需要將元素的高度改成頁面完全渲染出的高度,確保所有內容是可見的;導出后再將高度修改成原來的樣子;
但是這塊有個高度變化的過程效果不是很好,嘗試了其它方案,最終無功而返;
已知:
給元素設置visibility: ‘hidden’、position: ‘absolute’、opacity: 0;會導致導出的pdf是空白的;可能是插件不支持這些樣式設置。
如有更好的方式及插件,歡迎分享(前端實現)。