Free Job Alert: Latest Jobs | Admit Cards | Results

All-in-One Utility Tools Suite
UTI 213*213 Resizer

UTI PAN Card Photo & Signature Resizer

Crop, resize and process your photos and signatures for UTI/NSDL PAN application online.

Photo Specifications

  • Dimensions: 213 x 213 pixels
  • Resolution: 300 DPI
  • Max Size: < 30 KB
  • Format: JPEG

Signature Specifications

  • Resolution: 600 DPI
  • Color: Black & White
  • Max Size: < 60 KB
  • Format: JPEG

Scanning Specifications

  • Application Form: Scan at 200 DPI, Color, PDF/A format.
  • Supporting Documents: Scan at 200 DPI, Color, PDF/A format.
  • Combined File: Club all forms and docs into a single PDF (Max 2MB).

Note: Ensure scanning is done as per these specifications. Mismatch in format or size may lead to application rejection by UTIITSL.

© 2026 WebTools Suite

${file.name}

`; filesQueue2.appendChild(div); }; reader.readAsDataURL(file); }); }); document.getElementById('convertBtn2').addEventListener('click', async () => { const pdfDoc = await PDFLib.PDFDocument.create(); const images = Array.from(filesQueue2.children); for (const imgEl of images) { const imgData = imgEl.querySelector('img').src; const imgBytes = await fetch(imgData).then(r => r.arrayBuffer()); const image = imgData.includes('jpeg') ? await pdfDoc.embedJpg(imgBytes) : await pdfDoc.embedPng(imgBytes); const page = pdfDoc.addPage([600, 800]); const margin = options2.mar; page.drawImage(image, { x: margin, y: margin, width: 600 - (margin * 2), height: 800 - (margin * 2) }); } const pdfBytes = await pdfDoc.save(); const blob = new Blob([pdfBytes], {type: 'application/pdf'}); const a = document.createElement('a'); a.href = URL.createObjectURL(blob); a.download = "converted.pdf"; a.click(); }); // --- Tool 3 Logic --- pdfjsLib.GlobalWorkerOptions.workerSrc = 'https://cdnjs.cloudflare.com/ajax/libs/pdf.js/3.4.120/pdf.worker.min.js'; let fileMap3 = new Map(); const uploadView3 = document.getElementById('uploadView3'); const workspaceView3 = document.getElementById('workspaceView3'); const dropZone3 = document.getElementById('dropZone3'); const fileInput3 = document.getElementById('fileInput3'); const filesQueue3 = document.getElementById('filesQueue3'); const sidebarFileCount3 = document.getElementById('sidebarFileCount3'); const mergeBtn3 = document.getElementById('mergeBtn3'); const clearAllBtn3 = document.getElementById('clearAllBtn3'); const addMoreBtn3 = document.getElementById('addMoreBtn3'); new Sortable(filesQueue3, { animation: 180, ghostClass: 'bg-red-50/40' }); dropZone3.addEventListener('click', () => fileInput3.click()); addMoreBtn3.addEventListener('click', () => fileInput3.click()); fileInput3.addEventListener('change', (e) => handleUploadProcessing3(Array.from(e.target.files))); async function handleUploadProcessing3(files) { if (files.length === 0) return; uploadView3.classList.add('hidden'); workspaceView3.classList.remove('hidden'); for (const file of files) { const uniqueId = `file_${Date.now()}_${Math.random().toString(36).substr(2, 9)}`; fileMap3.set(uniqueId, { file: file, rotation: 0 }); filesQueue3.appendChild(createSkeletonCard3(uniqueId, file.name)); renderThumbnailStream3(file, uniqueId); } updateSidebarStats3(); fileInput3.value = ''; } function createSkeletonCard3(id, filename) { const div = document.createElement('div'); div.className = "group relative bg-slate-50 border border-slate-200 rounded-xl p-3 flex flex-col items-center transition-all hover:shadow-md cursor-grab"; div.dataset.id = id; div.innerHTML = `

${filename}

`; return div; } async function renderThumbnailStream3(file, id) { try { const pdf = await pdfjsLib.getDocument({ data: await file.arrayBuffer() }).promise; const page = await pdf.getPage(1); const viewport = page.getViewport({ scale: 0.3 }); const canvas = document.createElement('canvas'); canvas.height = viewport.height; canvas.width = viewport.width; await page.render({ canvasContext: canvas.getContext('2d'), viewport: viewport }).promise; document.getElementById(`loader_${id}`).remove(); document.querySelector(`[data-id="${id}"] .canvas-container`).appendChild(canvas); } catch (err) { document.getElementById(`loader_${id}`).innerHTML = ``; } } function downloadSinglePdf3(id) { const data = fileMap3.get(id); const a = document.createElement('a'); a.href = URL.createObjectURL(data.file); a.download = data.file.name; a.click(); } function rotateCard3(id) { const data = fileMap3.get(id); data.rotation = (data.rotation + 90) % 360; document.querySelector(`[data-id="${id}"] .canvas-container`).style.transform = `rotate(${data.rotation}deg)`; } function removeCard3(id) { document.querySelector(`[data-id="${id}"]`).remove(); fileMap3.delete(id); updateSidebarStats3(); } function updateSidebarStats3() { sidebarFileCount3.innerText = filesQueue3.children.length; if (filesQueue3.children.length === 0) { workspaceView3.classList.add('hidden'); uploadView3.classList.remove('hidden'); } } clearAllBtn3.addEventListener('click', () => { filesQueue3.innerHTML = ''; fileMap3.clear(); updateSidebarStats3(); }); mergeBtn3.addEventListener('click', async () => { const activeCards = Array.from(filesQueue3.children); if (activeCards.length < 2) return alert('Add at least 2 files'); mergeBtn3.disabled = true; try { const mergedPdf = await PDFLib.PDFDocument.create(); for (const card of activeCards) { const record = fileMap3.get(card.dataset.id); const pdfDoc = await PDFLib.PDFDocument.load(await record.file.arrayBuffer()); const pages = await mergedPdf.copyPages(pdfDoc, pdfDoc.getPageIndices()); pages.forEach(p => { if (record.rotation) p.setRotation(PDFLib.degrees(record.rotation)); mergedPdf.addPage(p); }); } const blob = new Blob([await mergedPdf.save()], { type: 'application/pdf' }); const link = document.createElement('a'); link.href = URL.createObjectURL(blob); link.download = 'merged_documents.pdf'; link.click(); } catch (e) { console.error(e); } finally { mergeBtn3.disabled = false; } });

Leave a Comment

Your email address will not be published. Required fields are marked *

Scroll to Top