PDF Organizer body { font-family: Arial, sans-serif; max-width: 800px; margin: 0 auto; padding: 20px; background-color: #f4f4f4; } h1 { text-align: center; color: #333; } .container { background: white; padding: 20px; border-radius: 8px; box-shadow: 0 2px 4px rgba(0,0,0,0.1); } .controls { margin-bottom: 20px; } button, input[type="file"], input[type="number"] { margin: 5px; padding: 8px; border-radius: 4px; border: 1px solid #ccc; } button { background-color: #007bff; color: white; border: none; cursor: pointer; } button:hover { background-color: #0056b3; } #pageList { margin-top: 10px; max-height: 200px; overflow-y: auto; border: 1px solid #ddd; padding: 10px; } .page-item { padding: 5px; border-bottom: 1px solid #eee; } #preview { margin-top: 20px; max-height: 400px; overflow: auto; border: 1px solid #ddd; padding: 10px; }

PDF Organizer

let pdfDoc = null; let originalPDFs = []; async function loadPDF(files) { originalPDFs = []; pdfDoc = await PDFLib.PDFDocument.create(); for (let file of files) { const arrayBuffer = await file.arrayBuffer(); const pdf = await PDFLib.PDFDocument.load(arrayBuffer); originalPDFs.push(pdf); const pages = await pdfDoc.copyPages(pdf, pdf.getPageIndices()); pages.forEach(page => pdfDoc.addPage(page)); } updatePageList(); renderPreview(); } function updatePageList() { const pageList = document.getElementById('pageList'); pageList.innerHTML = ''; for (let i = 0; i < pdfDoc.getPageCount(); i++) { const pageItem = document.createElement('div'); pageItem.className = 'page-item'; pageItem.textContent = `Page ${i + 1}`; pageList.appendChild(pageItem); } } async function renderPreview() { const preview = document.getElementById('preview'); preview.innerHTML = 'Rendering preview...'; const pdfBytes = await pdfDoc.save(); const blob = new Blob([pdfBytes], { type: 'application/pdf' }); const url = URL.createObjectURL(blob); preview.innerHTML = ``; } async function extractPage() { const pageNum = parseInt(document.getElementById('pageNumber').value) - 1; if (isNaN(pageNum) || pageNum = pdfDoc.getPageCount()) { alert('Invalid page number'); return; } const newPdf = await PDFLib.PDFDocument.create(); const [page] = await newPdf.copyPages(pdfDoc, [pageNum]); newPdf.addPage(page); pdfDoc.removePage(pageNum); updatePageList(); renderPreview(); } async function rotatePage() { const pageNum = parseInt(document.getElementById('pageNumber').value) - 1; if (isNaN(pageNum) || pageNum = pdfDoc.getPageCount()) { alert('Invalid page number'); return; } const page = pdfDoc.getPage(pageNum); const rotation = (page.getRotation().angle + 90) % 360; page.setRotation(PDFLib.degrees(rotation)); updatePageList(); renderPreview(); } async function deletePage() { const pageNum = parseInt(document.getElementById('pageNumber').value) - 1; if (isNaN(pageNum) || pageNum = pdfDoc.getPageCount()) { alert('Invalid page number'); return; } pdfDoc.removePage(pageNum); updatePageList(); renderPreview(); } async function addPage() { const pageNum = parseInt(document.getElementById('pageNumber').value) - 1; if (isNaN(pageNum) || pageNum = pdfDoc.getPageCount()) { alert('Invalid page number'); return; } pdfDoc.insertPage(pageNum + 1, [595, 842]); // A4 size in points updatePageList(); renderPreview(); } async function downloadPDF() { const pdfBytes = await pdfDoc.save(); const blob = new Blob([pdfBytes], { type: 'application/pdf' }); const url = URL.createObjectURL(blob); const a = document.createElement('a'); a.href = url; a.download = 'modified_pdf.pdf'; a.click(); URL.revokeObjectURL(url); } document.getElementById('pdfInput').addEventListener('change', async (event) => { const files = event.target.files; if (files.length > 0) { await loadPDF(files); } });
Scroll to Top