diff --git a/app/core/src/main/java/stirling/software/SPDF/controller/api/misc/PageNumbersController.java b/app/core/src/main/java/stirling/software/SPDF/controller/api/misc/PageNumbersController.java
index 41cbe7328..6d0d05a28 100644
--- a/app/core/src/main/java/stirling/software/SPDF/controller/api/misc/PageNumbersController.java
+++ b/app/core/src/main/java/stirling/software/SPDF/controller/api/misc/PageNumbersController.java
@@ -52,9 +52,17 @@ public class PageNumbersController {
int pageNumber = request.getStartingNumber();
String pagesToNumber = request.getPagesToNumber();
String customText = request.getCustomText();
+ int zeroPad = request.getZeroPad();
float fontSize = request.getFontSize();
String fontType = request.getFontType();
String fontColor = request.getFontColor();
+ // compute padded number string where requested
+ String formatN;
+ if (zeroPad > 0) {
+ formatN = String.format("%%0%dd", Math.max(0, zeroPad));
+ } else {
+ formatN = "%d";
+ }
Color color = Color.BLACK;
if (fontColor != null && !fontColor.trim().isEmpty()) {
@@ -93,9 +101,10 @@ public class PageNumbersController {
PDPage page = document.getPage(i);
PDRectangle pageSize = page.getMediaBox();
+ String nFormatted = String.format(formatN, pageNumber);
String text =
customText
- .replace("{n}", String.valueOf(pageNumber))
+ .replace("{n}", nFormatted)
.replace("{total}", String.valueOf(document.getNumberOfPages()))
.replace(
"{filename}",
diff --git a/app/core/src/main/java/stirling/software/SPDF/model/api/misc/AddPageNumbersRequest.java b/app/core/src/main/java/stirling/software/SPDF/model/api/misc/AddPageNumbersRequest.java
index 3e116742d..c4b907465 100644
--- a/app/core/src/main/java/stirling/software/SPDF/model/api/misc/AddPageNumbersRequest.java
+++ b/app/core/src/main/java/stirling/software/SPDF/model/api/misc/AddPageNumbersRequest.java
@@ -39,6 +39,13 @@ public class AddPageNumbersRequest extends PDFWithPageNums {
requiredMode = RequiredMode.NOT_REQUIRED)
private String fontColor;
+ @Schema(
+ description = "Zero-padding width for page numbers (Bates Stamping). Set to 0 to disable padding",
+ minimum = "0",
+ defaultValue = "0",
+ requiredMode = RequiredMode.NOT_REQUIRED)
+ private int zeroPad = 0;
+
@Schema(
description =
"Position: 1-9 representing positions on the page (1=top-left, 2=top-center,"
diff --git a/frontend/public/locales/en-GB/translation.toml b/frontend/public/locales/en-GB/translation.toml
index 2bb1b12f9..a0077e184 100644
--- a/frontend/public/locales/en-GB/translation.toml
+++ b/frontend/public/locales/en-GB/translation.toml
@@ -219,6 +219,9 @@ pagesAndStarting = "Pages & Starting Number"
positionAndPages = "Position & Pages"
preview = "Position Selection"
previewDisclaimer = "Preview is approximate. Final output may vary due to PDF font metrics."
+zeroPad = "Zero‑pad Width (Bates Stamping)"
+zeroPadTooltip = "Zero‑pad (Bates Stamp) page numbers to this width (e.g., 3 ⇒ 001). Set 0 to disable."
+
[addPageNumbers.selectText]
1 = "Select PDF file:"
diff --git a/frontend/src/core/components/tools/addPageNumbers/AddPageNumbersAppearanceSettings.tsx b/frontend/src/core/components/tools/addPageNumbers/AddPageNumbersAppearanceSettings.tsx
index 6ff03ede6..0ff9690d8 100644
--- a/frontend/src/core/components/tools/addPageNumbers/AddPageNumbersAppearanceSettings.tsx
+++ b/frontend/src/core/components/tools/addPageNumbers/AddPageNumbersAppearanceSettings.tsx
@@ -49,6 +49,16 @@ const AddPageNumbersAppearanceSettings = ({
/>
+ 001). Set 0 to disable.')}>
+ onParameterChange('zeroPad', typeof v === 'number' ? v : 0)}
+ min={0}
+ disabled={disabled}
+ />
+
+