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} + /> + +