PDF Page Numbering Utility
Add page numbers to PDF files in the browser — pure JavaScript via pdf-lib. Choose from 9 positions (top/bottom × left/center/right), 5 number formats (arabic, roman-lower, roman-upper, alpha-lower, alpha-upper, or custom '{page}/{total}'), custom start number, skip first N pages, font size, color, and margin. 100% client-side.
About PDF Page Numbering Utility
Add page numbers to PDF files in the browser — pure JavaScript via pdf-lib. Choose from 9 positions (top/bottom × left/center/right), 5 number formats (arabic, roman-lower, roman-upper, alpha-lower, alpha-upper, or custom '{page}/{total}'), custom start number, skip first N pages, font size, color, and margin. 100% client-side. Everything runs locally in your browser — your data never leaves your device.
How to use
- Enter your input in the tool above.
- Adjust any options to your preference.
- Use the Copy or Download buttons to save the result.
- Everything happens locally — your data never leaves your browser.
FAQ
What does this tool do?
Adds page numbers to any PDF file in your browser using pdf-lib. You choose from 9 positions (top-left, top-center, top-right, middle-left, middle-center, middle-right, bottom-left, bottom-center, bottom-right — though typically you want top or bottom), 5 number formats (arabic 1,2,3 / roman-lower i,ii,iii / roman-upper I,II,III / alpha-lower a,b,c / alpha-upper A,B,C / custom like 'Page 1 of 10' using {page} and {total} placeholders), a custom start number, the ability to skip the first N pages, font size, hex color, and margin. The output is a fresh PDF ready to download.
What is the difference between arabic and roman page numbers?
Arabic numerals are the standard 1, 2, 3, 4, 5. Roman numerals are i, ii, iii, iv, v (lowercase) or I, II, III, IV, V (uppercase) — commonly used for front-matter pages (preface, table of contents) in books. Alpha numerals are a, b, c, d (lowercase) or A, B, C, D (uppercase) — used for very short documents or appendices. The custom format lets you write any template like 'Page 1 of 10' using {page} and {total} placeholders.
Can I skip the cover page or first few pages?
Yes — set 'Skip first N pages' to a number (e.g. 1 for the cover, 2 for cover + title page). Skipped pages will not get a page number; the page count continues normally on subsequent pages (so page 2 in the file becomes page 1 in the numbering, unless you also set a custom start number).
How does the {page}/{total} custom format work?
Use {page} as a placeholder for the current page number (after applying start offset and skip) and {total} as a placeholder for the total number of numbered pages. Examples: 'Page {page} of {total}' → 'Page 1 of 10', '{page}/{total}' → '1/10', '- {page} -' → '- 1 -'. The placeholders are case-sensitive.
What extra features does this tool have compared to others?
10 extras: (1) Drag-drop file input. (2) 9 page-number positions (top/middle/bottom × left/center/right). (3) 5 number formats — arabic, roman-lower, roman-upper, alpha-lower, alpha-upper, plus a custom template option. (4) Custom start number (e.g. start at 5 instead of 1). (5) Skip first N pages. (6) Adjustable font size (6pt-72pt). (7) Custom hex color picker. (8) Adjustable margin (px). (9) History of recently numbered PDFs (localStorage — last 10). (10) Shareable URL with all options encoded in the hash.
Is my PDF uploaded anywhere?
No. All PDF parsing and page-number rendering happens in your browser using pdf-lib (a pure-JS PDF library). The PDF binary is processed locally — file contents never leave your device. Only file summaries (filename, page count, format used) are saved to local history.
Can I number pages in a password-protected PDF?
No — pdf-lib cannot open encrypted PDFs without the password. If your PDF is password-protected, remove the password first using a desktop tool (qpdf, Adobe Acrobat), then upload the unprotected file.
Related tools
7Z Extractor
Inspect and extract files from 7z archives. Detects the 7z signature (0x37 0x7A 0xBC 0xAF 0x27 0x1C), parses the SignatureHeader and StartHeader, lists files from the archive metadata, and extracts STORE-method files when possible. Honest about LZMA compression limitations. 100% client-side.
APK Extractor
Extract and inspect Android APK files in the browser — pure JavaScript APK (ZIP) parser. View AndroidManifest.xml (binary XML detection), list DEX files, resources, and assets, extract individual files, detect app info (package name, version) from manifest. 100% client-side.
ARJ Extractor
Inspect ARJ archives. Detects the ARJ magic (0x60 0xEA), parses header structures, lists file entries with sizes and CRCs, and extracts STORE-method files when possible. Honest about ARJ compression limitations. 100% client-side.