<!doctypehtml><!-- Images to PDF By Fullintro - https://fullintro.com --><html lang=en><meta charset=UTF-8><meta content="width=device-width,initial-scale=1"name=viewport><title>Images to PDF</title><link href="https://fonts.googleapis.com/css2?family=Rubik&display=swap"rel=stylesheet><style>*{padding:0;margin:0;box-sizing:border-box;font-family:Poppins,sans-serif}body{background-color:#fff}.main{display:flex;justify-content:center;align-items:center;min-height:100vh;padding:1em}.wrapper{text-align:center;width:min(90%,800px);background-color:#f0f0f0;border:3px solid #bfbfbf;padding:2em 3em;border-radius:10px;transition:box-shadow .3s ease-in-out}.wrapper.drag-over{box-shadow:0 0 20px rgba(0,0,0,.3)}h1{font-size:40px;color:#5a5a5a}p{color:#5a5a5a;font-size:16px}input[type=file]{display:none}label{display:block;position:relative;background-color:#1cab26;color:#fff;font-size:16px;text-align:center;width:250px;padding:16px 0;border-radius:.3em;margin:16px auto;cursor:pointer}.container{display:flex;flex-wrap:wrap;justify-content:center;gap:1em;margin-top:20px}.image-block{background-color:#f9f9f9;padding:1em;border-radius:.5em;text-align:center;width:200px;box-shadow:0 4px 6px rgba(0,0,0,.1)}img{display:block;max-width:100%;margin-bottom:1em}.download-container{margin-top:20px;text-align:center}.download-btn{display:inline-block;border:2px solid #1cab26;background-color:#1cab26;color:#fff;text-decoration:none;padding:.5em 1em;font-size:1em;border-radius:.3em;cursor:pointer;display:none}.warning{color:red;font-size:14px;margin-top:20px;display:none}</style><div class=main><div class=wrapper id=drop-zone><p>Drag & drop images here or use the upload button below.</p><input accept="image/jpeg, image/png, image/webp"id=file-input multiple type=file> <label for=file-input>Upload Images</label><div class=warning id=warning-message>Please upload a maximum of 100 images in JPG, PNG, or WEBP format.</div><div class=container id=image-container></div><div class=download-container><a class=download-btn href=# id=download-pdf>Download PDF</a></div></div></div><!-- Include jsPDF Library --><script src="https://cdnjs.cloudflare.com/ajax/libs/jspdf/2.5.1/jspdf.umd.min.js"></script><script>const fileInput=document.getElementById("file-input");const imageContainer=document.getElementById("image-container");const warningMessage=document.getElementById("warning-message");const downloadPdfButton=document.getElementById("download-pdf");const{jsPDF}=window.jspdf;const MAX_IMAGES=100;const SUPPORTED_FORMATS=["image/jpeg","image/png","image/webp"];let pdf=null;document.getElementById("drop-zone").addEventListener("dragover",(event)=>{event.preventDefault();event.target.classList.add("drag-over")});document.getElementById("drop-zone").addEventListener("dragleave",(event)=>{event.target.classList.remove("drag-over")});document.getElementById("drop-zone").addEventListener("drop",(event)=>{event.preventDefault();event.target.classList.remove("drag-over");const files=Array.from(event.dataTransfer.files);handleFiles(files)});fileInput.addEventListener("change",()=>{const files=Array.from(fileInput.files);handleFiles(files)});function handleFiles(files){warningMessage.style.display="none";imageContainer.innerHTML="";downloadPdfButton.style.display="none";if(files.length>MAX_IMAGES){warningMessage.textContent=`You can only upload a maximum of ${MAX_IMAGES} images.`;warningMessage.style.display="block";return}
const validFiles=files.filter(file=>SUPPORTED_FORMATS.includes(file.type));if(validFiles.length!==files.length){warningMessage.textContent="Some files are not in supported formats (JPG, PNG, WEBP).";warningMessage.style.display="block";return}
pdf=new jsPDF();let loadedImages=0;let pdfFilename="";validFiles.forEach((file,index)=>{const reader=new FileReader();reader.onload=()=>{const imageSrc=reader.result;const imageBlock=document.createElement("div");imageBlock.classList.add("image-block");const img=document.createElement("img");img.src=imageSrc;img.alt=file.name;imageBlock.appendChild(img);imageContainer.appendChild(imageBlock);const imgObj=new Image();imgObj.src=imageSrc;imgObj.onload=()=>{const imgWidth=190;const imgHeight=(imgObj.height*imgWidth)/imgObj.width;if(index!==0){pdf.addPage()}
pdf.addImage(imgObj,file.type.replace("image/","").toUpperCase(),10,10,imgWidth,imgHeight);if(index===0){pdfFilename=file.name.split('.')[0]}
loadedImages++;if(loadedImages===validFiles.length){downloadPdfButton.style.display="inline-block";downloadPdfButton.href=pdf.output("bloburl");downloadPdfButton.download=`${pdfFilename}.pdf`}}};reader.readAsDataURL(file)})}</script><script>document.addEventListener('contextmenu',function(event){event.preventDefault()});</script><script src="https://cdnjs.cloudflare.com/ajax/libs/iframe-resizer/4.3.2/iframeResizer.min.js"></script><script src="https://cdnjs.cloudflare.com/ajax/libs/iframe-resizer/4.3.2/iframeResizer.contentWindow.min.js"></script></body></html>