Spaces:
Sleeping
Sleeping
| <html lang="en"> | |
| <head> | |
| <meta charset="UTF-8"> | |
| <title>Upload PDF for Sprite Extraction</title> | |
| <style> | |
| body { font-family: Arial; padding: 20px; background: #f5f5f5; } | |
| .sprite { margin: 20px; padding: 10px; background: white; border: 1px solid #ccc; display: inline-block; width: 250px; } | |
| .sprite img { width: 100%; } | |
| #status { margin-top: 15px; font-weight: bold; } | |
| </style> | |
| </head> | |
| <body> | |
| <h2>Upload PDF for Image Extraction and Captioning</h2> | |
| <form id="pdfForm" enctype="multipart/form-data"> | |
| <input type="file" id="pdfFile" name="pdf_file" accept="application/pdf"> | |
| <button type="submit">Upload & Process</button> | |
| </form> | |
| <div id="status"></div> | |
| <div id="result-container"></div> | |
| <script> | |
| const form = document.getElementById('pdfForm'); | |
| const statusEl = document.getElementById('status'); | |
| const resultEl = document.getElementById('result-container'); | |
| form.addEventListener('submit', async (e) => { | |
| e.preventDefault(); | |
| const fileInput = document.getElementById('pdfFile'); | |
| if (!fileInput.files[0]) { | |
| alert('Please select a PDF file.'); | |
| return; | |
| } | |
| statusEl.textContent = 'Uploading and processing...'; | |
| resultEl.innerHTML = ''; | |
| const formData = new FormData(); | |
| formData.append('pdf_file', fileInput.files[0]); | |
| try { | |
| const res = await fetch('/process_pdf', { | |
| method: 'POST', | |
| body: formData | |
| }); | |
| const data = await res.json(); | |
| if (!res.ok) throw new Error(data.error || 'Upload failed'); | |
| statusEl.textContent = data.message; | |
| const sprites = data.sprites; | |
| for (const [key, sprite] of Object.entries(sprites)) { | |
| const div = document.createElement('div'); | |
| div.className = 'sprite'; | |
| const img = document.createElement('img'); | |
| img.src = `data:image/png;base64,${sprite.base64}`; | |
| const name = document.createElement('h4'); | |
| name.textContent = sprite.name; | |
| const desc = document.createElement('p'); | |
| desc.textContent = sprite.description; | |
| div.appendChild(img); | |
| div.appendChild(name); | |
| div.appendChild(desc); | |
| resultEl.appendChild(div); | |
| } | |
| } catch (err) { | |
| statusEl.textContent = `❌ Error: ${err.message}`; | |
| } | |
| }); | |
| </script> | |
| </body> | |
| </html> |