Spaces:
Running
Running
| <html lang="en"> | |
| <head> | |
| <meta charset="UTF-8"> | |
| <meta name="viewport" content="width=device-width, initial-scale=1.0"> | |
| <title>PDF Portrait Duplicator</title> | |
| <link rel="stylesheet" href="style.css"> | |
| <script src="https://cdn.tailwindcss.com"></script> | |
| <script src="https://cdn.jsdelivr.net/npm/pdf-lib/dist/pdf-lib.min.js"></script> | |
| <script src="https://cdn.jsdelivr.net/npm/downloadjs@1.4.7"></script> | |
| <script src="https://unpkg.com/feather-icons"></script> | |
| <script src="https://cdn.jsdelivr.net/npm/feather-icons/dist/feather.min.js"></script> | |
| </head> | |
| <body class="bg-gray-100 min-h-screen"> | |
| <div class="container mx-auto px-4 py-12"> | |
| <header class="text-center mb-12"> | |
| <h1 class="text-4xl font-bold text-gray-800 mb-2">PDF Portrait Duplicator</h1> | |
| <p class="text-gray-600">Convert single portrait pages into landscape with 2 pages side by side</p> | |
| </header> | |
| <main class="max-w-3xl mx-auto bg-white rounded-xl shadow-md overflow-hidden p-8"> | |
| <div class="mb-8"> | |
| <label class="block text-gray-700 text-sm font-bold mb-2" for="pdf-input"> | |
| Upload PDF File | |
| </label> | |
| <div class="flex items-center justify-center w-full"> | |
| <label class="flex flex-col items-center justify-center w-full h-32 border-2 border-gray-300 border-dashed rounded-lg cursor-pointer bg-gray-50 hover:bg-gray-100 transition"> | |
| <div class="flex flex-col items-center justify-center pt-5 pb-6"> | |
| <i data-feather="upload" class="w-8 h-8 text-gray-500 mb-3"></i> | |
| <p class="mb-2 text-sm text-gray-500">Click to upload or drag and drop</p> | |
| <p class="text-xs text-gray-500">PDF only</p> | |
| </div> | |
| <input id="pdf-input" type="file" class="hidden" accept=".pdf" /> | |
| </label> | |
| </div> | |
| </div> | |
| <div class="mb-8"> | |
| <label class="block text-gray-700 text-sm font-bold mb-2"> | |
| Options | |
| </label> | |
| <div class="grid grid-cols-1 md:grid-cols-2 gap-4"> | |
| <div> | |
| <label class="inline-flex items-center"> | |
| <input type="checkbox" id="reverse-order" class="rounded border-gray-300 text-indigo-600 shadow-sm focus:border-indigo-300 focus:ring focus:ring-indigo-200 focus:ring-opacity-50"> | |
| <span class="ml-2 text-gray-700">Reverse page order</span> | |
| </label> | |
| </div> | |
| <div> | |
| <label class="inline-flex items-center"> | |
| <input type="checkbox" id="add-page-numbers" class="rounded border-gray-300 text-indigo-600 shadow-sm focus:border-indigo-300 focus:ring focus:ring-indigo-200 focus:ring-opacity-50"> | |
| <span class="ml-2 text-gray-700">Add page numbers</span> | |
| </label> | |
| </div> | |
| </div> | |
| </div> | |
| <div class="flex justify-center"> | |
| <button id="process-btn" class="bg-indigo-600 hover:bg-indigo-700 text-white font-bold py-3 px-6 rounded-lg shadow-md transition flex items-center"> | |
| <i data-feather="repeat" class="mr-2"></i> | |
| Process PDF | |
| </button> | |
| </div> | |
| <div id="preview-container" class="mt-8 hidden"> | |
| <h3 class="text-lg font-semibold text-gray-700 mb-4">Preview</h3> | |
| <div id="preview" class="border border-gray-200 rounded-lg p-4 bg-gray-50"> | |
| <p class="text-gray-500 text-center">Preview will appear here</p> | |
| </div> | |
| </div> | |
| <div id="download-container" class="mt-8 hidden"> | |
| <button id="download-btn" class="w-full bg-green-600 hover:bg-green-700 text-white font-bold py-3 px-6 rounded-lg shadow-md transition flex items-center justify-center"> | |
| <i data-feather="download" class="mr-2"></i> | |
| Download Processed PDF | |
| </button> | |
| </div> | |
| </main> | |
| <footer class="mt-12 text-center text-gray-500 text-sm"> | |
| <p>Created with PDF-lib.js - Simple PDF manipulation in the browser</p> | |
| </footer> | |
| </div> | |
| <script src="script.js"></script> | |
| <script> | |
| feather.replace(); | |
| </script> | |
| <script src="https://huggingface.co/deepsite/deepsite-badge.js"></script> | |
| </body> | |
| </html> |