Перейти к основному содержимому
claw
am
tools
Инструменты
Документы
Daoark
EN
Главная
Главная
/
Документы
›
20 * 1024 * 1024) { errorMsg.textContent = '文件超过 20MB 限制,建议拆分后转换'; return; } errorMsg.textContent = ''; btnMain.disabled = true; btnMain.textContent = '加载中...'; resultArea.classList.add('show'); resultContent.innerHTML = ''; imgsGrid.innerHTML = ''; progressWrap.style.display = 'block'; progressBar.style.width = '0%'; try { const arrayBuffer = await file.arrayBuffer(); const pdf = await pdfjsLib.getDocument({ data: arrayBuffer }).promise; if (pdf.numPages > 50) { errorMsg.textContent = '页数超过 50 页(当前 ' + pdf.numPages + ' 页),建议拆分后处理'; return; } const format = formatSel.value; const mime = format === 'png' ? 'image/png' : 'image/jpeg'; const ext = format === 'png' ? 'png' : 'jpg'; const scale = parseFloat(scaleSel.value); resultMeta.textContent = '共 ' + pdf.numPages + ' 页,开始转换...'; // 流式渲染:逐页 + 立即释放 canvas for (let i = 1; i <= pdf.numPages; i++) { btnMain.textContent = '转换中 (' + i + '/' + pdf.numPages + ')...'; const page = await pdf.getPage(i); const viewport = page.getViewport({ scale: scale }); const canvas = document.createElement('canvas'); canvas.width = viewport.width; canvas.height = viewport.height; const ctx = canvas.getContext('2d'); await page.render({ canvasContext: ctx, viewport }).promise; const blob = await new Promise(function(r) { canvas.toBlob(r, mime, 0.9); }); const url = URL.createObjectURL(blob); // 加到结果 grid const item = document.createElement('div'); item.className = 'item'; item.innerHTML = '
' + '
page-' + i + '.' + ext + '
' + '(' + fmtSize(blob.size) + ')'; imgsGrid.appendChild(item); // 释放 canvas.width = canvas.height = 0; page.cleanup(); progressBar.style.width = (i / pdf.numPages * 100) + '%'; } resultMeta.textContent = '转换完成:' + pdf.numPages + ' 页 ' + format.toUpperCase() + ' (scale=' + scale + ')'; btnMain.textContent = '开始转换'; } catch (err) { errorMsg.textContent = '转换失败: ' + err.message; } finally { btnMain.disabled = false; } }); })();