| | |
| | | <meta charset="UTF-8"> |
| | | <meta name="viewport" content="width=device-width, initial-scale=1.0"> |
| | | <title>䏿¬RCS弿¾å¹³å°</title> |
| | | <script src="https://cdn.jsdelivr.net/npm/jszip@3.10.1/dist/jszip.min.js"></script> |
| | | <style> |
| | | * { |
| | | margin: 0; |
| | |
| | | border: none; |
| | | display: block; |
| | | } |
| | | |
| | | |
| | | |
| | | /* åºé¨ */ |
| | |
| | | <div class="fixed-nav"> |
| | | <div>â<br>åä½</div> |
| | | <div>ð§<br>å¨è¯¢</div> |
| | | <div onclick="exportToWord()">ð<br>导åºWord</div> |
| | | <div onclick="exportToMarkdown()">ð<br>导åºMD</div> |
| | | <div onclick="scrollToTop()">â</div> |
| | | </div> |
| | | |
| | |
| | | }); |
| | | } |
| | | |
| | | // 导åºä¸ºWord (docxæ ¼å¼) |
| | | function exportToWord() { |
| | | const contentFrame = document.getElementById('content-frame'); |
| | | if (contentFrame && contentFrame.contentWindow) { |
| | | try { |
| | | console.log('å¼å§å¯¼åºWord'); |
| | | |
| | | const contentDoc = contentFrame.contentDocument; |
| | | const content = contentDoc.body.innerHTML; |
| | | console.log('è·åå°å
容ï¼é¿åº¦:', content.length); |
| | | |
| | | // æåæ¥å£æ ¸å¿å
容ï¼è¿æ»¤ææææ é¢åå
ä¿¡æ¯ |
| | | let coreContent = content; |
| | | |
| | | // ç§»é¤æ é¢åå
ä¿¡æ¯ |
| | | coreContent = coreContent.replace(/RCSæ¥å£ææ¡£[\s\S]*?æ´æ°æ¶é´ï¼[\s\S]*?\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}/g, ''); |
| | | coreContent = coreContent.replace(/<h1[^>]*>.*?<\/h1>/g, ''); |
| | | coreContent = coreContent.replace(/<h2[^>]*>.*?<\/h2>/g, ''); |
| | | coreContent = coreContent.replace(/<h3[^>]*>.*?<\/h3>/g, ''); |
| | | coreContent = coreContent.replace(/<h4[^>]*>.*?<\/h4>/g, ''); |
| | | coreContent = coreContent.replace(/<h5[^>]*>.*?<\/h5>/g, ''); |
| | | coreContent = coreContent.replace(/<h6[^>]*>.*?<\/h6>/g, ''); |
| | | coreContent = coreContent.replace(/æ´æ°æ¶é´ï¼.*?<\/p>/g, ''); |
| | | |
| | | // å建HTMLæ ¼å¼çWordææ¡£ |
| | | const htmlContent = ` |
| | | <!DOCTYPE html> |
| | | <html> |
| | | <head> |
| | | <meta charset="UTF-8"> |
| | | <title>æ¥å£ææ¡£</title> |
| | | <style> |
| | | body { |
| | | font-family: 'Microsoft YaHei', Arial, sans-serif; |
| | | margin: 40px; |
| | | line-height: 1.6; |
| | | } |
| | | p { |
| | | margin-bottom: 15px; |
| | | text-align: justify; |
| | | } |
| | | pre { |
| | | background-color: #f8f9fa; |
| | | padding: 15px; |
| | | border-radius: 4px; |
| | | border: 1px solid #e9ecef; |
| | | margin: 20px 0; |
| | | font-family: 'Consolas', 'Monaco', monospace; |
| | | white-space: pre-wrap; |
| | | } |
| | | table { |
| | | border-collapse: collapse; |
| | | width: 100%; |
| | | margin: 20px 0; |
| | | box-shadow: 0 2px 4px rgba(0,0,0,0.1); |
| | | } |
| | | th { |
| | | background-color: #3498db; |
| | | color: white; |
| | | font-weight: bold; |
| | | padding: 12px 15px; |
| | | text-align: left; |
| | | } |
| | | td { |
| | | border: 1px solid #ddd; |
| | | padding: 10px 15px; |
| | | text-align: left; |
| | | } |
| | | tr:nth-child(even) { |
| | | background-color: #f8f9fa; |
| | | } |
| | | ul, ol { |
| | | margin: 15px 0; |
| | | padding-left: 30px; |
| | | } |
| | | li { |
| | | margin-bottom: 8px; |
| | | } |
| | | </style> |
| | | </head> |
| | | <body> |
| | | ${coreContent} |
| | | </body> |
| | | </html> |
| | | `; |
| | | |
| | | // å建Blob对象 |
| | | const blob = new Blob([htmlContent], { type: 'application/msword' }); |
| | | const url = URL.createObjectURL(blob); |
| | | |
| | | // å建ä¸è½½é¾æ¥ |
| | | const link = document.createElement('a'); |
| | | link.href = url; |
| | | link.download = 'æ¥å£ææ¡£.doc'; |
| | | link.click(); |
| | | |
| | | // éæ¾URL对象 |
| | | setTimeout(() => URL.revokeObjectURL(url), 100); |
| | | console.log('ä¸è½½å®æ'); |
| | | } catch (e) { |
| | | console.error('导åºWord失败:', e); |
| | | alert('导åºWord失败ï¼è¯·éè¯ï¼' + e.message); |
| | | } |
| | | } else { |
| | | console.error('æ æ³è·åå
å®¹æ¡æ¶'); |
| | | alert('导åºWordå¤±è´¥ï¼æ æ³è·åå
å®¹æ¡æ¶'); |
| | | } |
| | | } |
| | | |
| | | // 导åºä¸ºMarkdown |
| | | function exportToMarkdown() { |
| | | const contentFrame = document.getElementById('content-frame'); |
| | | if (contentFrame && contentFrame.contentWindow) { |
| | | try { |
| | | const contentDoc = contentFrame.contentDocument; |
| | | const content = contentDoc.body; |
| | | |
| | | // 转æ¢HTML为Markdown |
| | | let markdown = ''; |
| | | |
| | | // æææ¡£é¡ºåºå¤çææå
ç´ |
| | | const processElement = (element) => { |
| | | // è¿æ»¤æä¸éè¦çå
ç´ |
| | | if (element.textContent.includes('RCSæ¥å£ææ¡£') || |
| | | element.textContent.includes('æ¥å£è¯¦æ
') || |
| | | element.textContent.includes('æ´æ°æ¶é´ï¼') || |
| | | element.textContent.match(/\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}/)) { |
| | | return; |
| | | } |
| | | |
| | | const tagName = element.tagName; |
| | | |
| | | if (['H1', 'H2', 'H3', 'H4', 'H5', 'H6'].includes(tagName)) { |
| | | // å¤çæ é¢ |
| | | const level = parseInt(tagName.substring(1)); |
| | | const hashes = '#'.repeat(level); |
| | | markdown += `${hashes} ${element.textContent}\n\n`; |
| | | } else if (tagName === 'P') { |
| | | // å¤çæ®µè½ |
| | | markdown += `${element.textContent}\n\n`; |
| | | } else if (tagName === 'PRE') { |
| | | // å¤ç代ç å |
| | | markdown += '```\n'; |
| | | markdown += element.textContent; |
| | | markdown += '\n```\n\n'; |
| | | } else if (tagName === 'UL' || tagName === 'OL') { |
| | | // å¤çå表 |
| | | const items = element.querySelectorAll('li'); |
| | | items.forEach(item => { |
| | | const prefix = tagName === 'UL' ? '- ' : '1. '; |
| | | markdown += `${prefix}${item.textContent}\n`; |
| | | }); |
| | | markdown += '\n'; |
| | | } else if (tagName === 'TABLE') { |
| | | // å¤çè¡¨æ ¼ |
| | | const headers = element.querySelectorAll('th'); |
| | | if (headers.length > 0) { |
| | | markdown += '| '; |
| | | headers.forEach(header => { |
| | | markdown += `${header.textContent} | `; |
| | | }); |
| | | markdown += '\n'; |
| | | |
| | | // åé线 |
| | | markdown += '| '; |
| | | headers.forEach(() => { |
| | | markdown += '--- | '; |
| | | }); |
| | | markdown += '\n'; |
| | | } |
| | | |
| | | // å¤çè¡¨æ ¼è¡ |
| | | const rows = element.querySelectorAll('tr'); |
| | | rows.forEach(row => { |
| | | const cells = row.querySelectorAll('td'); |
| | | if (cells.length > 0) { |
| | | markdown += '| '; |
| | | cells.forEach(cell => { |
| | | markdown += `${cell.textContent} | `; |
| | | }); |
| | | markdown += '\n'; |
| | | } |
| | | }); |
| | | markdown += '\n'; |
| | | } else if (element.children && element.children.length > 0) { |
| | | // å¤ç容å¨å
ç´ ï¼éå½å¤çåå
ç´ |
| | | Array.from(element.children).forEach(child => processElement(child)); |
| | | } |
| | | }; |
| | | |
| | | // æé¡ºåºå¤çææåå
ç´ |
| | | Array.from(content.children).forEach(child => processElement(child)); |
| | | |
| | | // å建Blob对象 |
| | | const blob = new Blob([markdown], {type: 'text/markdown'}); |
| | | const url = URL.createObjectURL(blob); |
| | | |
| | | // å建ä¸è½½é¾æ¥ |
| | | const link = document.createElement('a'); |
| | | link.href = url; |
| | | link.download = 'æ¥å£ææ¡£.md'; |
| | | link.click(); |
| | | |
| | | // éæ¾URL对象 |
| | | setTimeout(() => URL.revokeObjectURL(url), 100); |
| | | } catch (e) { |
| | | console.error('导åºMarkdown失败:', e); |
| | | alert('导åºMarkdown失败ï¼è¯·éè¯'); |
| | | } |
| | | } |
| | | } |
| | | |
| | | // çå¬iframeå è½½å®æ |
| | | window.addEventListener('load', function () { |
| | | console.log('页é¢å è½½å®æ'); |