From 3c0a8071dca0de436e519a30bafb6ef701922e00 Mon Sep 17 00:00:00 2001 From: Sai Kumar <40134996+saikumarjetti@users.noreply.github.com> Date: Mon, 2 Dec 2024 23:18:19 +0530 Subject: [PATCH] added support for new line break in stampController (#2370) added support for new line in stampController Co-authored-by: Anthony Stirling <77850077+Frooodle@users.noreply.github.com> --- .../controller/api/misc/StampController.java | 22 ++++++++++++++----- 1 file changed, 17 insertions(+), 5 deletions(-) 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