Zum Hauptinhalt springen
clawam tools
Werkzeuge Dokumente Daoark EN Startseite Startseite / Dokumente › Startseite manifest.json "']/g, function(c) { return {'&':'&','<':'<','>':'>','"':'"',"'":'''}[c]; }); } function unpdfStr(s) { return s.replace(/\\([nrtbf()\\])/g, function(m, c) { switch (c) { case 'n': return '\n'; case 'r': return '\r'; case 't': return '\t'; case 'b': return '\b'; case 'f': return '\f'; case '(': return '('; case ')': return ')'; case '\\': return '\\'; default: return m; } }); } function extractText(bytes) { var s = ''; var len = Math.min(bytes.length, 20 * 1024 * 1024); for (var i = 0; i < len; i++) s += String.fromCharCode(bytes[i]); var lines = []; var re1 = /\((?:\\.|[^\\()])*\)\s*Tj/g; var m; while ((m = re1.exec(s)) !== null) { var inner = m[0].match(/^\(([\s\S]*)\)\s*Tj$/); if (inner) lines.push(unpdfStr(inner[1])); } var re2 = /\[((?:\([\s\S]*?\)\s*)+)\]\s*TJ/g; while ((m = re2.exec(s)) !== null) { var arr = m[1]; var parts = arr.match(/\([\s\S]*?\)/g) || []; var combined = ''; for (var k = 0; k < parts.length; k++) combined += unpdfStr(parts[k].replace(/^\(|\)$/g, '')); if (combined) lines.push(combined); } return lines; } function toHtml(lines, style) { var css = ''; if (style === 'minimal') css = ''; else if (style === 'article') css = 'body{font-family:Georgia,serif;max-width:720px;margin:40px auto;padding:0 20px;line-height:1.7;color:#222;background:#fefefe}h1,h2,h3{color:#111;border-bottom:1px solid #eee;padding-bottom:8px}p{margin:1em 0}'; else if (style === 'report') css = 'body{font-family:Helvetica,Arial,sans-serif;max-width:800px;margin:0 auto;padding:40px;background:white;color:#222}header{border-bottom:2px solid #333;padding-bottom:10px;margin-bottom:30px}footer{border-top:1px solid #ccc;margin-top:30px;padding-top:10px;color:#666;font-size:12px}'; else if (style === 'code') css = 'body{font-family:Menlo,Consolas,monospace;background:#1e1e1e;color:#d4d4d4;padding:20px;line-height:1.5}pre{white-space:pre-wrap;word-wrap:break-word}'; var body = ''; if (style === 'report') { body += '

PDF 转换文档

' + new Date().toLocaleString() + '

'; } var inPara = false; for (var i = 0; i < lines.length; i++) { var line = lines[i].trim(); if (!line) { if (inPara) { body += (style === 'code' ? '' : '

'); inPara = false; } body += '\n'; continue; } if (style === 'code') { if (!inPara) { body += '
'; inPara = true; }
        body += escapeHtml(line) + '\n';
      } else {
        if (!inPara) { body += '

'; inPara = true; } body += escapeHtml(line) + ' '; } } if (inPara) body += style === 'code' ? '

' : '

'; if (style === 'report') body += '
由 clawam.com · PDF 转 HTML 工具生成
'; return 'PDF 转 HTML' + body + ' '; } var lastHtml = ''; $('btn-convert').addEventListener('click', function() { var f = $('file').files[0]; if (!f) { showError('请先选 PDF'); return; } if (f.size > 20 * 1024 * 1024) { showError('超 20MB,简化版不支持'); return; } var r = new FileReader(); r.onload = function(e) { try { var bytes = new Uint8Array(e.target.result); var lines = extractText(bytes); if (lines.length === 0) { showError('未提取到文本,可能需 OCR 或 PDF 加密'); return; } var style = $('style').value; lastHtml = toHtml(lines, style); showResult('=== HTML 已生成 ===\n长度: ' + lastHtml.length + ' 字符\n文本行: ' + lines.length + '\n样式: ' + style + '\n\n点击"预览"查看 / "下载"保存', '已生成', false); } catch (e) { showError('转换失败: ' + (e.message || e)); } }; r.readAsArrayBuffer(f); }); $('btn-preview').addEventListener('click', function() { if (!lastHtml) { showError('请先生成'); return; } var win = window.open('', '_blank'); if (win) { win.document.write(lastHtml); win.document.close(); } else { var iframe = ''; showResult(iframe, '预览(新窗口被拦截,已嵌入 iframe)', true); } }); $('btn-copy').addEventListener('click', function() { if (!lastHtml) return; if (navigator.clipboard) navigator.clipboard.writeText(lastHtml); }); $('btn-download').addEventListener('click', function() { if (!lastHtml) return; var blob = new Blob([lastHtml], { type: 'text/html;charset=utf-8' }); var url = URL.createObjectURL(blob); var a = document.createElement('a'); a.href = url; a.download = 'pdf-to-html.html'; a.click(); URL.revokeObjectURL(url); }); $('btn-clear').addEventListener('click', function() { $('file').value = ''; lastHtml = ''; var ra = $('result-area'); ra.hidden = true; ra.style.display = 'none'; var em = $('error-msg'); em.hidden = true; em.style.display = 'none'; $('btn-copy').style.display = 'none'; $('btn-download').style.display = 'none'; }); })();