Zum Hauptinhalt springen
claw
am
tools
Werkzeuge
Dokumente
Daoark
EN
Startseite
Startseite
/
Dokumente
›
20 * 1024 * 1024) { errorMsg.textContent = '文件超过 20MB'; return; } errorMsg.textContent = ''; btnMain.disabled = true; btnMain.textContent = '处理中...'; resultArea.classList.add('show'); resultContent.innerHTML = ''; try { var bytes = await file.arrayBuffer(); var doc = await PDFLib.PDFDocument.load(bytes, { ignoreEncryption: true }); // 注册 fontkit (实例方法,非静态方法) doc.registerFontkit(fontkit); var total = doc.getPageCount(); if (total > 50) { errorMsg.textContent = '页数超过 50 页'; return; } var pos = document.getElementById('position').value; var fmt = formatSelect.value; var size = parseInt(document.getElementById('size').value); var customTpl = customTemplateInput.value || '第 {current} 页 / 共 {total} 页'; // 预渲染模板, 决定是否需要中文字体 var sampleText; if (fmt === 'simple') sampleText = '1'; else if (fmt === 'of') sampleText = '1 / ' + total; else if (fmt === 'cn') sampleText = '第 1 页'; else if (fmt === 'cnof') sampleText = '第 1 页 共 ' + total + ' 页'; else if (fmt === 'custom') sampleText = customTpl.replace('{current}', '1').replace('{total}', String(total)); var useChineseFont = hasChinese(sampleText); var font; if (useChineseFont) { btnMain.textContent = '加载中文字体...'; var fontBytes = await loadChineseFont(); font = await doc.embedFont(fontBytes, { subset: true }); } else { font = await doc.embedFont(PDFLib.StandardFonts.Helvetica); } function formatText(n) { if (fmt === 'simple') return String(n); if (fmt === 'of') return n + ' / ' + total; if (fmt === 'cn') return '第 ' + n + ' 页'; if (fmt === 'cnof') return '第 ' + n + ' 页 共 ' + total + ' 页'; if (fmt === 'custom') return customTpl.replace(/\{current\}/g, String(n)).replace(/\{total\}/g, String(total)); return String(n); } btnMain.textContent = '绘制中...'; for (var i = 0; i < total; i++) { var page = doc.getPage(i); var pw = page.getWidth(), ph = page.getHeight(); var text = formatText(i + 1); var tw = font.widthOfTextAtSize(text, size); var x, y; if (pos === 'bottom-center') { x = (pw - tw) / 2; y = 30; } else if (pos === 'bottom-right') { x = pw - tw - 30; y = 30; } else if (pos === 'bottom-left') { x = 30; y = 30; } else if (pos === 'top-center') { x = (pw - tw) / 2; y = ph - size - 20; } page.drawText(text, { x: x, y: y, size: size, font: font, color: PDFLib.rgb(0.3, 0.3, 0.3) }); } var out = await doc.save(); var blob = new Blob([out], { type: 'application/pdf' }); var url = URL.createObjectURL(blob); var fontLabel = useChineseFont ? '中文字体 (思源黑体)' : 'ASCII (Helvetica)'; resultMeta.textContent = '已为 ' + total + ' 页添加页码 · 字体: ' + fontLabel; resultContent.innerHTML = '
下载 pagenum.pdf (' + fmtSize(blob.size) + ')
'; } catch (err) { errorMsg.textContent = '添加失败: ' + err.message; console.error(err); } finally { btnMain.disabled = false; btnMain.textContent = '添加页码'; } }); })();