Advanced Image to PDF Converter Image to PDF Converter🌐 Urdu🌓 Dark Mode📁 Click or drop images here A4Letter PortraitLandscape High QualityMediumSmall File Size Convert to PDF🔒 All conversions happen on your device – files are never uploaded. `; thumbContainer.appendChild(div); }; reader.readAsDataURL(file); }); Sortable.create(thumbContainer, { animation: 150, onEnd: (evt) => { const oldFiles = [...files]; const [removed] = oldFiles.splice(evt.oldIndex, 1); oldFiles.splice(evt.newIndex, 0, removed); files = oldFiles; } }); }async function generatePDF() { const { jsPDF } = window.jspdf; const pdf = new jsPDF({ orientation: document.getElementById('orientation').value, unit: "mm", format: document.getElementById('pageSize').value });for (let i = 0; i < files.length; i++) { const file = files[i]; const compressedFile = await imageCompression(file, { maxSizeMB: document.getElementById('quality').value === 'low' ? 0.5 : document.getElementById('quality').value === 'medium' ? 1 : 2, maxWidthOrHeight: 1000, useWebWorker: true });const imgData = await toBase64(compressedFile); const img = new Image(); img.src = imgData; await new Promise(res => img.onload = res);const pageWidth = pdf.internal.pageSize.getWidth(); const pageHeight = pdf.internal.pageSize.getHeight(); const ratio = Math.min(pageWidth / img.width, pageHeight / img.height); const imgWidth = img.width * ratio; const imgHeight = img.height * ratio;if (i > 0) pdf.addPage(); pdf.addImage(imgData, 'JPEG', (pageWidth - imgWidth)/2, (pageHeight - imgHeight)/2, imgWidth, imgHeight); }const name = document.getElementById('fileName').value || "converted.pdf"; pdf.save(name); }function toBase64(file) { return new Promise((resolve, reject) => { const reader = new FileReader(); reader.onload = () => resolve(reader.result); reader.onerror = err => reject(err); reader.readAsDataURL(file); }); }function toggleLanguage() { currentLang = currentLang === 'en' ? 'ur' : 'en'; const map = languageMap[currentLang]; document.getElementById('title').innerText = map.title; document.getElementById('drop-text').innerText = map.drop; document.getElementById('lang-label').innerText = map.lang; document.getElementById('theme-label').innerText = map.theme; }function toggleTheme() { const html = document.body; const isDark = html.getAttribute("data-theme") === "dark"; html.setAttribute("data-theme", isDark ? "light" : "dark"); localStorage.setItem("theme", isDark ? "light" : "dark"); document.getElementById('theme-label').innerText = isDark ? "Dark Mode" : "Light Mode"; }// Init theme from localStorage window.addEventListener('DOMContentLoaded', () => { const savedTheme = localStorage.getItem("theme") || "light"; document.body.setAttribute("data-theme", savedTheme); document.getElementById('theme-label').innerText = savedTheme === "dark" ? "Light Mode" : "Dark Mode"; });