Zum Hauptinhalt springen
claw
am
tools
Werkzeuge
Dokumente
Daoark
EN
Startseite
Startseite
/
Dokumente
›
Startseite
manifest.json
= 0) result.hasLinearization = true; if (text.indexOf('/ObjStm') >= 0) result.hasObjectStreams = true; if (text.indexOf('/Encrypt') >= 0) result.isProbablyEncrypted = true; result.uncompressed = Math.max(0, result.streams - result.compressed); return result; } $('btn-analyze').addEventListener('click', function() { var text = $('text-a').value; var file = $('file').files[0]; if (!text && file) { // 读前 100KB var blob = file.slice(0, Math.min(file.size, 100 * 1024)); var r = new FileReader(); r.onload = function(e) { var bytes = new Uint8Array(e.target.result); // 转字符串(ASCII 区域,前几 KB 主要是 header) var s = ''; for (var i = 0; i < bytes.length; i++) s += String.fromCharCode(bytes[i]); doAnalyze(s, file); }; r.readAsArrayBuffer(blob); } else if (text) { doAnalyze(text, file); } else { showError('请上传 PDF 或粘贴头部内容'); } }); function doAnalyze(text, file) { try { var r = analyzePdfText(text); var ratio = r.streams > 0 ? (r.compressed / r.streams * 100) : 0; var advice = []; if (!r.compressed && r.streams > 0) advice.push('所有流都未压缩,理论上可大幅缩小(30%-70%)'); else if (ratio < 50) advice.push('部分流未压缩,使用 Ghostscript / qpdf 可缩小 10%-30%'); else if (ratio > 90) advice.push('已高度压缩,继续压缩空间有限(可能 < 5%)'); if (r.images > 10) advice.push('图片占大头(' + r.images + ' 张),降低 JPEG 质量可显著缩小'); if (r.fonts > 5) advice.push('字体数量多(' + r.fonts + ' 个),检查是否有重复字体'); if (r.hasLinearization) advice.push('已线性化(Web 优化),重新压缩可能损失此特性'); if (r.isProbablyEncrypted) advice.push('检测到加密标记,某些压缩工具无法处理'); if (advice.length === 0) advice.push('无明显优化点,文件已较紧凑'); var sizeKB = file ? (file.size / 1024).toFixed(1) : '?'; var out = '=== PDF 基础信息 ===\n' + '版本: ' + r.version + '\n' + '文件大小: ' + sizeKB + ' KB\n' + '页数: ' + r.pages + '\n' + '对象数: ' + r.objects + '\n' + '流数: ' + r.streams + '\n' + ' 已压缩(Flate/ASCII85/LZW/DCT): ' + r.compressed + ' (' + ratio.toFixed(1) + '%)\n' + ' 未压缩: ' + r.uncompressed + '\n' + '图片: ' + r.images + ' 张(含 JPEG DCT: ' + r.jpegs + ')\n' + '字体: ' + r.fonts + ' 个\n' + '线性化: ' + (r.hasLinearization ? '是(Web 优化)' : '否') + '\n' + '对象流: ' + (r.hasObjectStreams ? '是' : '否') + '\n' + '加密: ' + (r.isProbablyEncrypted ? '可能加密' : '未检测到') + '\n\n' + '=== 优化建议 ===\n' + advice.map(function(a) { return '• ' + a; }).join('\n') + '\n\n' + '=== 推荐工具(非本工具) ===\n' + '命令行: gs -sDEVICE=pdfwrite -dCompatibilityLevel=1.4 -dPDFSETTINGS=/ebook -dNOPAUSE -dQUIET -dBATCH -sOutputFile=out.pdf in.pdf\n' + ' /screen:72dpi, /ebook:150dpi, /printer:300dpi, /prepress:高质量\n' + 'GUI: Adobe Acrobat / PDFsam / Smallpdf\n'; showResult(out, r.version + ', ' + r.pages + ' 页, ' + r.streams + ' 流, 压缩率 ' + ratio.toFixed(0) + '%'); } catch (e) { showError('分析失败: ' + (e.message || e)); } } $('btn-clear').addEventListener('click', function() { $('file').value = ''; $('text-a').value = ''; var ra = $('result-area'); ra.hidden = true; ra.style.display = 'none'; var em = $('error-msg'); em.hidden = true; em.style.display = 'none'; }); })();