HomeAdd Page Numbers to PDF Online – Free, No Upload
Add Page Numbers to PDF Online – Free, No Upload
🔒 100% in your browser — files never leave your device
🔢
Click or drop a PDF here
Professional numbering in seconds
Bottom centerBottom rightBottom leftTop rightTop left
1, 2, 3Page 1Page 1 of N
Quick answer: To add page numbers to a PDF free, drop the file below, choose a position (bottom-center is standard for reports), pick a format like Page 1 of 10, optionally skip the cover page, and click Add numbers. The stamped PDF downloads instantly.
Universities, courts and HR departments regularly demand numbered pages – and Word-exported or merged PDFs often arrive without them. Rather than re-opening the source document (which you may not even have), this tool stamps clean, professional numbering directly onto the finished PDF.
You control position, size, starting number, and whether the first page (usually a cover) is skipped. The classic Page X of Y style is included because assignments and legal bundles frequently require it. The stamping is done by pdf-lib in your browser, so thesis drafts and case files stay private.
How to add page numbers to a PDF
Add your PDF below.
Choose position (bottom-center, bottom-right, bottom-left, top-right or top-left) and font size.
Pick a format: 1, Page 1, or Page 1 of N, and tick Skip first page for cover pages.
Click Add numbers and download the numbered PDF.
Why use the GadgetsFocus pdf page number adder?
Five placement positions with sensible margins that avoid most footers.
Formats include plain numbers, “Page 1” and “Page 1 of N”.
Skip-cover option starts numbering from page 2 while keeping the count correct.
Text is stamped as real vector text – crisp at any zoom, tiny file-size impact.
Completely private, browser-only processing.
Honest limitations
Numbers are stamped on top of existing content; if a page already has footer text in the same spot, choose a different corner.
One style per run – mixed roman/arabic sections (i, ii, 1, 2) aren't supported yet.
Last updated: July 11, 2026. Built and tested by the GadgetsFocus team on Chrome, Edge, Firefox and Safari (desktop & mobile). Everything on this page runs locally in your browser — we never see, store or transmit your files.
{"@context": "https://schema.org", "@graph": [{"@type": "WebApplication", "name": "Add Page Numbers to PDF Online – Free, No Upload", "url": "https://gadgetsfocus.com/free-online-pdf-page-number-adder/", "description": "Add page numbers to PDF online free. Choose position, format (Page X of Y), size and starting page – numbering is stamped in your browser, no upload.", "applicationCategory": "UtilitiesApplication", "operatingSystem": "Any (works in all modern web browsers)", "browserRequirements": "Requires JavaScript. No installation, sign-up, or file upload needed.", "offers": {"@type": "Offer", "price": "0", "priceCurrency": "USD"}, "featureList": ["Five placement positions with sensible margins that avoid most footers.", "Formats include plain numbers, “Page 1” and “Page 1 of N”.", "Skip-cover option starts numbering from page 2 while keeping the count correct.", "Text is stamped as real vector text – crisp at any zoom, tiny file-size impact.", "Completely private, browser-only processing."], "dateModified": "2026-07-11", "publisher": {"@type": "Organization", "name": "GadgetsFocus", "url": "https://gadgetsfocus.com"}}, {"@type": "FAQPage", "mainEntity": [{"@type": "Question", "name": "Can I start numbering from a number other than 1?", "acceptedAnswer": {"@type": "Answer", "text": "Yes – set the “Start at” value. Useful when a chapter PDF must continue numbering from a previous file (e.g., start at 47)."}}, {"@type": "Question", "name": "Will the numbers print correctly?", "acceptedAnswer": {"@type": "Answer", "text": "Yes. They are embedded as standard Helvetica vector text on the page itself, so every viewer and printer renders them identically."}}, {"@type": "Question", "name": "How do I keep the cover page unnumbered?", "acceptedAnswer": {"@type": "Answer", "text": "Tick Skip first page. Page 2 then shows “2” (or “Page 2 of N”), matching common thesis formatting where the cover counts but isn't stamped."}}, {"@type": "Question", "name": "Does this work on scanned PDFs?", "acceptedAnswer": {"@type": "Answer", "text": "Yes – numbering is drawn over the scan image just like on digital pages."}}, {"@type": "Question", "name": "Is my document uploaded?", "acceptedAnswer": {"@type": "Answer", "text": "No. Everything happens locally in your browser; the tool keeps working offline once the page has loaded."}}]}]}
.gft{--ac:#0E7490;--ac2:#0c5f75;--ok:#15803D;--bad:#B91C1C;--bd:#d8dee4;--bg:#f7fafb;
box-sizing:border-box;max-width:860px;margin:0 auto 28px;padding:22px;border:1px solid var(--bd);
border-radius:14px;background:#fff;font-size:16px;line-height:1.55;color:#1b2733}
.gft *,.gft *:before,.gft *:after{box-sizing:inherit}
.gft-badge{display:inline-block;background:#ecfeff;color:#155e75;border:1px solid #a5f3fc;
padding:5px 12px;border-radius:999px;font-size:13px;font-weight:600;margin-bottom:14px}
.gft-drop{border:2px dashed var(--ac);border-radius:12px;background:var(--bg);padding:34px 16px;
text-align:center;cursor:pointer;transition:background .15s}
.gft-drop.gft-over{background:#e0f2f7}
.gft-drop p{margin:6px 0;color:#41525f}
.gft-btn{display:inline-block;background:var(--ac);color:#fff;border:0;border-radius:9px;
padding:11px 20px;font-size:15px;font-weight:600;cursor:pointer;margin:4px 6px 4px 0}
.gft-btn:hover{background:var(--ac2)}
.gft-btn:focus-visible,.gft input:focus-visible,.gft select:focus-visible{outline:3px solid #67e8f9;outline-offset:2px}
.gft-btn[disabled]{opacity:.5;cursor:not-allowed}
.gft-btn.gft-sec{background:#fff;color:var(--ac);border:1.5px solid var(--ac)}
.gft-btn.gft-sec:hover{background:#ecfeff}
.gft-row{display:flex;flex-wrap:wrap;gap:10px;align-items:center;margin:12px 0}
.gft label{font-weight:600;font-size:14px}
.gft select,.gft input[type=text],.gft input[type=number],.gft input[type=url],.gft input[type=password]{
padding:9px 10px;border:1px solid var(--bd);border-radius:8px;font-size:15px;max-width:100%}
.gft-prog{height:10px;background:#e6edf1;border-radius:99px;overflow:hidden;margin:12px 0;display:none}
.gft-prog span{display:block;height:100%;width:0;background:var(--ac);transition:width .2s}
.gft-status{font-size:14px;color:#41525f;min-height:20px;margin:6px 0}
.gft-out{border:1px solid var(--bd);border-radius:12px;padding:14px;margin-top:14px;background:var(--bg);display:none}
.gft-out.gft-show,.gft-prog.gft-show{display:block}
.gft-files{list-style:none;margin:12px 0;padding:0}
.gft-files li{display:flex;align-items:center;gap:8px;padding:8px 10px;border:1px solid var(--bd);
border-radius:8px;margin-bottom:6px;background:#fff;font-size:14px}
.gft-files li b{flex:1;font-weight:500;word-break:break-all}
.gft-mini{background:#eef4f7;border:0;border-radius:6px;padding:5px 9px;cursor:pointer;font-size:13px}
.gft-mini:hover{background:#dcebf1}
.gft-thumbs{display:grid;grid-template-columns:repeat(auto-fill,minmax(120px,1fr));gap:10px;margin-top:12px}
.gft-thumbs figure{margin:0;border:1px solid var(--bd);border-radius:8px;padding:6px;text-align:center;background:#fff}
.gft-thumbs canvas,.gft-thumbs img{max-width:100%;height:auto;border-radius:4px}
.gft-thumbs figcaption{font-size:12px;color:#41525f;margin-top:4px}
.gft-note{font-size:13px;color:#5c6c78;background:#f2f6f8;border-radius:8px;padding:9px 12px;margin-top:12px}
.gft-good{color:var(--ok);font-weight:700}.gft-err{color:var(--bad);font-weight:600}
.gft-seo{max-width:860px;margin:0 auto;font-size:16.5px;line-height:1.65;color:#22303c}
.gft-seo h2{margin:30px 0 10px;font-size:24px}.gft-seo h3{margin:18px 0 6px;font-size:18px}
.gft-tldr{background:#ecfeff;border-left:4px solid var(--ac);padding:12px 14px;border-radius:0 10px 10px 0}
.gft-updated{font-size:13.5px;color:#5c6c78;border-top:1px solid var(--bd);padding-top:12px;margin-top:26px}
@media(max-width:560px){.gft{padding:14px}.gft-btn{width:100%;margin:4px 0}.gft-row{gap:6px}}
@media(prefers-reduced-motion:reduce){.gft *{transition:none!important;animation:none!important}}function gft$(id){return document.getElementById(id)}
function gftSize(b){if(b<1024)return b+' B';if(b<1048576)return (b/1024).toFixed(1)+' KB';return (b/1048576).toFixed(2)+' MB'}
function gftDl(blob,name){var a=document.createElement('a');a.href=URL.createObjectURL(blob);a.download=name;document.body.appendChild(a);a.click();setTimeout(function(){URL.revokeObjectURL(a.href);a.remove()},4000)}
function gftDrop(zone,input,cb){zone.addEventListener('click',function(){input.click()});
zone.addEventListener('dragover',function(e){e.preventDefault();zone.classList.add('gft-over')});
zone.addEventListener('dragleave',function(){zone.classList.remove('gft-over')});
zone.addEventListener('drop',function(e){e.preventDefault();zone.classList.remove('gft-over');cb(e.dataTransfer.files)});
input.addEventListener('change',function(){cb(input.files);input.value=''})}
function gftProg(el,f){el.classList.add('gft-show');el.firstElementChild.style.width=Math.round(f*100)+'%'}
var pnFile=null;
gftDrop(gft$('pn_zone'),gft$('pn_in'),function(fs){if(!fs.length)return;pnFile=fs[0];
gft$('pn_info').innerHTML=''+pnFile.name+' u2013 '+gftSize(pnFile.size);
gft$('pn_go').disabled=false;});
gft$('pn_go').onclick=async function(){var st=gft$('pn_st');st.textContent='Stamping numbers...';
try{var doc=await PDFLib.PDFDocument.load(await pnFile.arrayBuffer(),{ignoreEncryption:true});
var font=await doc.embedFont(PDFLib.StandardFonts.Helvetica);
var n=doc.getPageCount(),size=Math.max(6,Math.min(36,parseInt(gft$('pn_size').value,10)||11));
var start=Math.max(1,parseInt(gft$('pn_start').value,10)||1);
var skip=gft$('pn_skip').checked,pos=gft$('pn_pos').value,fmt=gft$('pn_fmt').value;
for(var i=0;i<n;i++){if(skip&&i===0)continue;
var num=start+i;
var label=fmt==='n'?String(num):fmt==='p'?'Page '+num:'Page '+num+' of '+(start+n-1);
var page=doc.getPage(i),w=page.getWidth(),h=page.getHeight();
var tw=font.widthOfTextAtSize(label,size),m=28,x,y;
if(pos==='bc'){x=(w-tw)/2;y=m;}else if(pos==='br'){x=w-tw-m;y=m;}
else if(pos==='bl'){x=m;y=m;}else if(pos==='tr'){x=w-tw-m;y=h-m-size;}else{x=m;y=h-m-size;}
page.drawText(label,{x:x,y:y,size:size,font:font,color:PDFLib.rgb(0.15,0.15,0.15)});}
var bytes=await doc.save();
gftDl(new Blob([bytes],{type:'application/pdf'}),pnFile.name.replace(/.pdf$/i,'')+'-numbered.pdf');
st.innerHTML='Done! Page numbers added to '+(skip?n-1:n)+' page(s).';}
catch(e){st.innerHTML='Could not number this PDF: '+(e.message||e)+'';}};