diff --git a/src/main/java/stirling/software/SPDF/controller/api/misc/StampController.java b/src/main/java/stirling/software/SPDF/controller/api/misc/StampController.java index b15b76e7..cdd5c5c8 100644 --- a/src/main/java/stirling/software/SPDF/controller/api/misc/StampController.java +++ b/src/main/java/stirling/software/SPDF/controller/api/misc/StampController.java @@ -147,7 +147,7 @@ public class StampController { return WebResponseUtils.pdfDocToWebResponse( document, Filenames.toSimpleFileName(pdfFile.getOriginalFilename()) - .replaceFirst("[.][^.]+$", "") + .replaceFirst("[.][^.]+$", "") + "_stamped.pdf"); } @@ -191,7 +191,7 @@ public class StampController { String fileExtension = resourceDir.substring(resourceDir.lastIndexOf(".")); File tempFile = Files.createTempFile("NotoSansFont", fileExtension).toFile(); try (InputStream is = classPathResource.getInputStream(); - FileOutputStream os = new FileOutputStream(tempFile)) { + FileOutputStream os = new FileOutputStream(tempFile)) { IOUtils.copy(is, os); font = PDType0Font.load(document, tempFile); } finally { @@ -229,10 +229,22 @@ public class StampController { calculatePositionY( pageSize, position, calculateTextCapHeight(font, fontSize), margin); } + // Split the stampText into multiple lines + String[] lines = stampText.split("\\\\n"); + + // Calculate dynamic line height based on font ascent and descent + float ascent = font.getFontDescriptor().getAscent(); + float descent = font.getFontDescriptor().getDescent(); + float lineHeight = ((ascent - descent) / 1000) * fontSize; contentStream.beginText(); - contentStream.setTextMatrix(Matrix.getRotateInstance(Math.toRadians(rotation), x, y)); - contentStream.showText(stampText); + for (int i = 0; i < lines.length; i++) { + String line = lines[i]; + // Set the text matrix for each line with rotation + contentStream.setTextMatrix( + Matrix.getRotateInstance(Math.toRadians(rotation), x, y - (i * lineHeight))); + contentStream.showText(line); + } contentStream.endText(); } @@ -327,4 +339,4 @@ public class StampController { private float calculateTextCapHeight(PDFont font, float fontSize) { return font.getFontDescriptor().getCapHeight() / 1000 * fontSize; } -} +} \ No newline at end of file