आधार कार्ड क्रोप साइज ऑनलाइन - डॉक्यूमेंट क्रॉपर प्रो PDF
↓
📁 इमेज या PDF यहाँ Drop करें
चरण 1: PDF अपलोड करें
खींचें और Drop करें या बटन से चुनें
चरण 2: PDF प्रोसेस हो रहा है
पहला पेज इमेज में बदल रहा है
चरण 3: इमेज घुमाएं
स्लाइडर से सटीक रोटेशन करें
चरण 4: क्षेत्र चुनें
क्लिक + ड्रैग करके कार्ड क्षेत्र चुनें
चरण 5: प्रिंट करें
A4 पर 86×54mm साइज में प्रिंट होगा
खींचकर घुमाएं ↔
👆 Handle को drag करके demo card को 3D में घुमाएं
नीचे dots पर click करके steps देखें
`);
pw.document.close();
});document.getElementById('cResetA').addEventListener('click',()=>{
if(!confirm('सब रीसेट करें?')) return;
A={origImg:new Image(),rotImg:new Image(),scale:1,isLoaded:false,rotation:0,isDrawing:false,startX:0,startY:0,sel:null,frontData:null,backData:null,frontOrig:null,backOrig:null,frontTemp:null,backTemp:null,pdfDoc:null,pdfPage:1};
cCanvasA.width=cCanvasA.height=0; cCanvasWrapA.style.display='none'; cSelBoxA.style.display='none';
document.getElementById('cSelGuideA').style.display='none'; document.getElementById('cSelInfoA').style.display='none';
document.getElementById('cRotA').style.display='none'; document.getElementById('cFrontCtrl').style.display='none';
document.getElementById('cBackCtrl').style.display='none'; document.getElementById('cPdfNavA').style.display='none';
document.getElementById('cLoadingA').style.display='none'; document.getElementById('cFrontRt').style.display='none'; document.getElementById('cBackRt').style.display='none';
document.getElementById('cFileAadhaar').value='';
document.getElementById('cRotSliderA').value=0; document.getElementById('cRotValA').textContent='0°';
['cFrontBr','cFrontCo','cBackBr','cBackCo'].forEach(id=>document.getElementById(id).value=0);
['cFrontBrV','cFrontCoV','cBackBrV','cBackCoV'].forEach(id=>document.getElementById(id).textContent='0');
document.getElementById('cCropFront').disabled=document.getElementById('cCropBack').disabled=document.getElementById('cPrintA').disabled=true;
const BL="data:image/svg+xml;charset=UTF-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='300' height='180'%3E%3Crect width='300' height='180' fill='%23f0f0f0'/%3E%3C/svg%3E";
document.getElementById('cFrontPrev').src=document.getElementById('cBackPrev').src=BL;
showStatus('शुरू करने के लिए इमेज या PDF अपलोड करें','info','cStatusA');
});// File input + drag drop aadhaar
document.getElementById('cFileAadhaar').addEventListener('change',e=>{ if(e.target.files[0]) handleFileA(e.target.files[0]); });
['dragenter','dragover'].forEach(ev=>document.getElementById('cDropAadhaar').addEventListener(ev,e=>{e.preventDefault();e.stopPropagation();document.getElementById('cDropAadhaar').classList.add('drag-over');}));
['dragleave','dragend'].forEach(ev=>document.getElementById('cDropAadhaar').addEventListener(ev,e=>{e.preventDefault();e.stopPropagation();document.getElementById('cDropAadhaar').classList.remove('drag-over');}));
document.getElementById('cDropAadhaar').addEventListener('drop',e=>{e.preventDefault();e.stopPropagation();document.getElementById('cDropAadhaar').classList.remove('drag-over');if(e.dataTransfer.files[0]) handleFileA(e.dataTransfer.files[0]);});// ═══════════════════════════════════════════════
// SINGLE PAGE TOOL STATE
// ═══════════════════════════════════════════════
let S = {
origImg:new Image(),rotImg:new Image(),scale:1,isLoaded:false,rotation:0,
isDrawing:false,startX:0,startY:0,sel:null,imgData:null,origCanvas:null,tempCanvas:null,
pdfDoc:null,pdfPage:1,
};const cCanvasS = document.getElementById('cCanvasS');
const cCtxS = cCanvasS.getContext('2d');
const cCanvasWrapS = document.getElementById('cCanvasWrapS');
const cSelBoxS = document.getElementById('cSelBoxS');function drawS() {
cCtxS.clearRect(0,0,cCanvasS.width,cCanvasS.height);
const x=(cCanvasS.width-S.rotImg.width*S.scale)/2,y=(cCanvasS.height-S.rotImg.height*S.scale)/2;
cCtxS.drawImage(S.rotImg,x,y,S.rotImg.width*S.scale,S.rotImg.height*S.scale);
if(S.rotation!==0){ cCtxS.fillStyle='rgba(102,126,234,0.85)'; cCtxS.fillRect(8,8,110,30); cCtxS.fillStyle='white'; cCtxS.font='bold 13px monospace'; cCtxS.fillText(`↻ ${S.rotation}°`,14,28); }
}async function updateRotS(angle){
S.rotation=angle; document.getElementById('cRotSliderS').value=angle; document.getElementById('cRotValS').textContent=angle+'°';
S.rotImg=await rotateImg(S.origImg,angle);
const mw=Math.min(700,S.rotImg.width,window.innerWidth-80);
S.scale=mw/S.rotImg.width; cCanvasS.width=mw; cCanvasS.height=S.rotImg.height*S.scale;
drawS(); cSelBoxS.style.display='none'; S.sel=null;
}function loadIntoS(dataUrl){
const img=new Image();
img.onload=function(){
S.origImg=img; S.rotImg=img; S.rotation=0; S.isLoaded=true;
document.getElementById('cRotSliderS').value=0; document.getElementById('cRotValS').textContent='0°';
document.getElementById('cRotS').style.display='block'; cCanvasWrapS.style.display='block';
const mw=Math.min(700,img.width,window.innerWidth-80);
S.scale=mw/img.width; cCanvasS.width=mw; cCanvasS.height=img.height*S.scale;
drawS();
document.getElementById('cSelGuideS').style.display='none'; document.getElementById('cSelInfoS').style.display='none';
document.getElementById('cCropSingle').disabled=true;
showStatus('इमेज लोड! घुमाएं फिर क्रॉप करें।','success','cStatusS');
smoothTo(document.getElementById('cRotS'));
};
img.onerror=()=>showStatus('त्रुटि।','error','cStatusS');
img.src=dataUrl;
}async function handleFileS(file){
const isPDF=file.type==='application/pdf'||file.name.toLowerCase().endsWith('.pdf');
if(!file.type.startsWith('image/')&&!isPDF){alert('इमेज या PDF चुनें');return;}
if(file.size>10*1024*1024){alert('10MB से कम');return;}
document.getElementById('cPdfNavS').style.display='none';
if(isPDF){
try{
const doc=await processPDF(file,'cLoadingS',true);
S.pdfDoc=doc; S.pdfPage=1; setupPDFNav(doc,true);
const url=await renderPDFPage(doc,1);
showStatus('PDF लोड!','success','cStatusS'); loadIntoS(url);
}catch(e){console.error(e);document.getElementById('cLoadingS').style.display='none';}
} else {
const url=await new Promise((res,rej)=>{const r=new FileReader();r.onload=e=>res(e.target.result);r.onerror=rej;r.readAsDataURL(file);});
loadIntoS(url);
}
}document.getElementById('cPdfPrevS').addEventListener('click',async()=>{ S.pdfPage=Math.max(1,S.pdfPage-1); updatePDFNavPage(S.pdfPage,S.pdfDoc.numPages,true); loadIntoS(await renderPDFPage(S.pdfDoc,S.pdfPage)); });
document.getElementById('cPdfNextS').addEventListener('click',async()=>{ S.pdfPage=Math.min(S.pdfDoc.numPages,S.pdfPage+1); updatePDFNavPage(S.pdfPage,S.pdfDoc.numPages,true); loadIntoS(await renderPDFPage(S.pdfDoc,S.pdfPage)); });document.getElementById('cRotLS').addEventListener('click',async()=>{await updateRotS((S.rotation-90+360)%360);showStatus('↶ 90°','success','cStatusS');});
document.getElementById('cRotRS').addEventListener('click',async()=>{await updateRotS((S.rotation+90)%360);showStatus('↷ 90°','success','cStatusS');});
document.getElementById('cRotResetS').addEventListener('click',async()=>{await updateRotS(0);showStatus('रीसेट','info','cStatusS');});
document.getElementById('cRotSliderS').addEventListener('input',function(){document.getElementById('cRotValS').textContent=this.value+'°';dbRotS(async()=>await updateRotS(parseInt(this.value)),100);});
document.getElementById('cNextS').addEventListener('click',()=>{ showStatus('रोटेशन पूरा! ड्रैग करें।','success','cStatusS'); document.getElementById('cSelGuideS').style.display='block'; smoothTo(cCanvasWrapS); });cCanvasS.addEventListener('mousedown',e=>{if(!S.isLoaded)return; const c=getCoords(e,cCanvasS);S.startX=c.cssX;S.startY=c.cssY;S.isDrawing=true;cSelBoxS.style.display='block';document.getElementById('cSelGuideS').style.display='none';document.getElementById('cSelInfoS').style.display='none';});
cCanvasS.addEventListener('mousemove',e=>{if(!S.isDrawing)return;const c=getCoords(e,cCanvasS),w=c.cssX-S.startX,h=c.cssY-S.startY;cSelBoxS.style.left=Math.min(S.startX,c.cssX)+'px';cSelBoxS.style.top=Math.min(S.startY,c.cssY)+'px';cSelBoxS.style.width=Math.abs(w)+'px';cSelBoxS.style.height=Math.abs(h)+'px';S.sel={x:Math.min(S.startX,c.cssX),y:Math.min(S.startY,c.cssY),w:Math.abs(w),h:Math.abs(h)};document.getElementById('cSelSizeS').textContent=`${Math.round(S.sel.w)}×${Math.round(S.sel.h)}`;});
function endSelS(){if(!S.isDrawing)return;S.isDrawing=false;if(!S.sel||S.sel.w<10||S.sel.h<10){cSelBoxS.style.display='none';S.sel=null;return;}document.getElementById('cSelInfoS').style.display='block';if(S.sel.w>30&&S.sel.h>30)document.getElementById('cCropSingle').disabled=false;}
cCanvasS.addEventListener('mouseup',endSelS);
cCanvasS.addEventListener('mouseleave',endSelS);
cCanvasS.addEventListener('touchstart',e=>{e.preventDefault();if(S.isLoaded){const c=getCoords(e,cCanvasS);S.startX=c.cssX;S.startY=c.cssY;S.isDrawing=true;cSelBoxS.style.display='block';}},{passive:false});
cCanvasS.addEventListener('touchmove',e=>{e.preventDefault();if(!S.isDrawing)return;const c=getCoords(e,cCanvasS),w=c.cssX-S.startX,h=c.cssY-S.startY;cSelBoxS.style.left=Math.min(S.startX,c.cssX)+'px';cSelBoxS.style.top=Math.min(S.startY,c.cssY)+'px';cSelBoxS.style.width=Math.abs(w)+'px';cSelBoxS.style.height=Math.abs(h)+'px';S.sel={x:Math.min(S.startX,c.cssX),y:Math.min(S.startY,c.cssY),w:Math.abs(w),h:Math.abs(h)};},{passive:false});
cCanvasS.addEventListener('touchend',e=>{e.preventDefault();endSelS();},{passive:false});document.getElementById('cSingleBr').addEventListener('input',function(){ document.getElementById('cSingleBrV').textContent=this.value; document.getElementById('cSingleRt').style.display='block'; dbSingle(()=>{ if(!S.origCanvas) return; if(!S.tempCanvas){S.tempCanvas=document.createElement('canvas');S.tempCanvas.width=S.origCanvas.width;S.tempCanvas.height=S.origCanvas.height;} document.getElementById('cSinglePrev').src=applyBC(S.origCanvas,+document.getElementById('cSingleBr').value,+document.getElementById('cSingleCo').value,S.tempCanvas); },50); });
document.getElementById('cSingleCo').addEventListener('input',function(){ document.getElementById('cSingleCoV').textContent=this.value; document.getElementById('cSingleRt').style.display='block'; dbSingle(()=>{ if(!S.origCanvas) return; if(!S.tempCanvas){S.tempCanvas=document.createElement('canvas');S.tempCanvas.width=S.origCanvas.width;S.tempCanvas.height=S.origCanvas.height;} document.getElementById('cSinglePrev').src=applyBC(S.origCanvas,+document.getElementById('cSingleBr').value,+document.getElementById('cSingleCo').value,S.tempCanvas); },50); });document.getElementById('cSaveSingle').addEventListener('click',()=>{
if(!S.origCanvas) return;
S.imgData=applyBC(S.origCanvas,+document.getElementById('cSingleBr').value,+document.getElementById('cSingleCo').value);
document.getElementById('cSinglePrev').src=S.imgData; document.getElementById('cSingleRt').style.display='none';
showStatus('सेव! ✓','success','cStatusS'); document.getElementById('cPrintSingle').disabled=false;
});
document.getElementById('cResetSingle').addEventListener('click',()=>{
if(!S.origCanvas) return;
document.getElementById('cSingleBr').value=document.getElementById('cSingleCo').value=0;
document.getElementById('cSingleBrV').textContent=document.getElementById('cSingleCoV').textContent='0';
S.imgData=S.origCanvas.toDataURL('image/jpeg',0.95); document.getElementById('cSinglePrev').src=S.imgData;
document.getElementById('cSingleRt').style.display='none';
});document.getElementById('cCropSingle').addEventListener('click',()=>{
if(!S.isLoaded){alert('पहले अपलोड करें');return;}
if(!S.sel){alert('क्षेत्र चुनें');return;}
const r=cCanvasS.getBoundingClientRect(),sx=cCanvasS.width/r.width,sy=cCanvasS.height/r.height;
const cx=(cCanvasS.width-S.rotImg.width*S.scale)/2,cy=(cCanvasS.height-S.rotImg.height*S.scale)/2;
const x=(S.sel.x*sx-cx)/S.scale,y=(S.sel.y*sy-cy)/S.scale,w=S.sel.w*sx/S.scale,h=S.sel.h*sy/S.scale;
if(x<0||y<0||x+w>S.rotImg.width||y+h>S.rotImg.height){alert('बाहर है');return;}
const tc=document.createElement('canvas'); tc.width=Math.round(w); tc.height=Math.round(h);
const tx=tc.getContext('2d'); tx.imageSmoothingEnabled=true; tx.imageSmoothingQuality='high';
tx.drawImage(S.rotImg,x,y,w,h,0,0,tc.width,tc.height);
tx.strokeStyle='white'; tx.lineWidth=6; tx.strokeRect(0,0,tc.width,tc.height);
S.origCanvas=tc; S.imgData=tc.toDataURL('image/jpeg',0.95);
document.getElementById('cSinglePrev').src=S.imgData;
document.getElementById('cSingleCtrl').style.display='block';
document.getElementById('cSingleBr').value=document.getElementById('cSingleCo').value=0;
document.getElementById('cSingleBrV').textContent=document.getElementById('cSingleCoV').textContent='0';
cSelBoxS.style.display='none'; S.sel=null;
document.getElementById('cSelInfoS').style.display='none';
document.getElementById('cPrintSingle').disabled=false;
showStatus('क्रॉप ✓ चमक एडजस्ट करें फिर प्रिंट करें','success','cStatusS');
smoothTo(document.getElementById('cSingleCtrl'));
});document.getElementById('cPrintSingle').addEventListener('click',()=>{
if(!S.imgData){alert('पहले क्रॉप करें');return;}
const pw=window.open('','_blank'); if(!pw){alert('Pop-up block');return;}
pw.document.write(`
पेज प्रिंट
`);
pw.document.close();
});document.getElementById('cResetS').addEventListener('click',()=>{
if(!confirm('सब रीसेट करें?')) return;
S={origImg:new Image(),rotImg:new Image(),scale:1,isLoaded:false,rotation:0,isDrawing:false,startX:0,startY:0,sel:null,imgData:null,origCanvas:null,tempCanvas:null,pdfDoc:null,pdfPage:1};
cCanvasS.width=cCanvasS.height=0; cCanvasWrapS.style.display='none'; cSelBoxS.style.display='none';
document.getElementById('cSelGuideS').style.display='none'; document.getElementById('cSelInfoS').style.display='none';
document.getElementById('cRotS').style.display='none'; document.getElementById('cSingleCtrl').style.display='none';
document.getElementById('cPdfNavS').style.display='none'; document.getElementById('cLoadingS').style.display='none';
document.getElementById('cSingleRt').style.display='none'; document.getElementById('cFileSingle').value='';
document.getElementById('cRotSliderS').value=0; document.getElementById('cRotValS').textContent='0°';
['cSingleBr','cSingleCo'].forEach(id=>document.getElementById(id).value=0);
['cSingleBrV','cSingleCoV'].forEach(id=>document.getElementById(id).textContent='0');
document.getElementById('cCropSingle').disabled=document.getElementById('cPrintSingle').disabled=true;
document.getElementById('cSinglePrev').src="data:image/svg+xml;charset=UTF-8,%3Csvg xmlns='http://www.w3.org/2000/svg' width='300' height='180'%3E%3Crect width='300' height='180' fill='%23f0f0f0'/%3E%3C/svg%3E";
showStatus('शुरू करने के लिए अपलोड करें','info','cStatusS');
});// File input + drag drop single
document.getElementById('cFileSingle').addEventListener('change',e=>{if(e.target.files[0]) handleFileS(e.target.files[0]);});
['dragenter','dragover'].forEach(ev=>document.getElementById('cDropSingle').addEventListener(ev,e=>{e.preventDefault();e.stopPropagation();document.getElementById('cDropSingle').classList.add('drag-over');}));
['dragleave','dragend'].forEach(ev=>document.getElementById('cDropSingle').addEventListener(ev,e=>{e.preventDefault();e.stopPropagation();document.getElementById('cDropSingle').classList.remove('drag-over');}));
document.getElementById('cDropSingle').addEventListener('drop',e=>{e.preventDefault();e.stopPropagation();document.getElementById('cDropSingle').classList.remove('drag-over');if(e.dataTransfer.files[0]) handleFileS(e.dataTransfer.files[0]);});// Keyboard shortcuts
document.addEventListener('keydown',e=>{
const active=document.querySelector('.c-tab-btn.active').dataset.ctab;
if(active==='aadhaar'){
if((e.key==='f'||e.key==='F')&&!document.getElementById('cCropFront').disabled){e.preventDefault();document.getElementById('cCropFront').click();}
else if((e.key==='b'||e.key==='B')&&!document.getElementById('cCropBack').disabled){e.preventDefault();document.getElementById('cCropBack').click();}
else if((e.key==='p'||e.key==='P')&&!document.getElementById('cPrintA').disabled){e.preventDefault();document.getElementById('cPrintA').click();}
else if(e.key==='Escape'){cSelBoxA.style.display='none';A.sel=null;A.isDrawing=false;document.getElementById('cSelInfoA').style.display='none';}
} else {
if((e.key==='c'||e.key==='C')&&!document.getElementById('cCropSingle').disabled){e.preventDefault();document.getElementById('cCropSingle').click();}
else if((e.key==='p'||e.key==='P')&&!document.getElementById('cPrintSingle').disabled){e.preventDefault();document.getElementById('cPrintSingle').click();}
else if(e.key==='Escape'){cSelBoxS.style.display='none';S.sel=null;S.isDrawing=false;document.getElementById('cSelInfoS').style.display='none';}
}
});document.addEventListener('dragover',e=>e.preventDefault());
document.addEventListener('drop',e=>e.preventDefault());