diff --git a/.github/pull_request_template.md b/.github/pull_request_template.md index e73caa3f5..1fca19669 100644 --- a/.github/pull_request_template.md +++ b/.github/pull_request_template.md @@ -1,4 +1,18 @@ -# License Agreement for Contributions -By submitting this pull request, I acknowledge and agree that my contributions will be included in Stirling-PDF and that they can be relicensed in the future under MPL 2.0 (Mozilla Public License Version 2.0) license. +# Description + +Please provide a summary of the changes, including relevant motivation and context. + +Closes #(issue_number) + +## Checklist: + +- [ ] I have read the [Contribution Guidelines](https://github.com/Stirling-Tools/Stirling-PDF/blob/main/CONTRIBUTING.md) +- [ ] I have performed a self-review of my own code +- [ ] I have commented my code, particularly in hard-to-understand areas +- [ ] My changes generate no new warnings + +## Contributor License Agreement + +By submitting this pull request, I acknowledge and agree that my contributions will be included in Stirling-PDF and that they can be relicensed in the future under the MPL 2.0 (Mozilla Public License Version 2.0) license. (This does not change the general open-source nature of Stirling-PDF, simply moving from one license to another license) diff --git a/.github/workflows/pull_request_template.md b/.github/workflows/pull_request_template.md deleted file mode 100644 index bc8f5d04f..000000000 --- a/.github/workflows/pull_request_template.md +++ /dev/null @@ -1,3 +0,0 @@ -# License Agreement for Contributions -By submitting this pull request, I acknowledge and agree that my contributions will be included in Stirling-PDF and that they can be relicensed in the future under MPL 2.0 (Mozilla Public License Version 2.0) license. -(This does not change the open-source nature of Stirling-PDF, simply moving from one license to another license) diff --git a/build.gradle b/build.gradle index e12cbd331..987f98546 100644 --- a/build.gradle +++ b/build.gradle @@ -12,7 +12,7 @@ plugins { import com.github.jk1.license.render.* group = 'stirling.software' -version = '0.20.0' +version = '0.20.1' sourceCompatibility = '17' repositories { diff --git a/exampleYmlFiles/docker-compose-latest-lite-security.yml b/exampleYmlFiles/docker-compose-latest-lite-security.yml index 41dc45679..90e4c5bf8 100644 --- a/exampleYmlFiles/docker-compose-latest-lite-security.yml +++ b/exampleYmlFiles/docker-compose-latest-lite-security.yml @@ -21,7 +21,7 @@ services: environment: DOCKER_ENABLE_SECURITY: "true" SECURITY_ENABLELOGIN: "true" - SYSTEM_DEFAULTLOCALE: en_US + SYSTEM_DEFAULTLOCALE: en-US UI_APPNAME: Stirling-PDF-Lite UI_HOMEDESCRIPTION: Demo site for Stirling-PDF-Lite Latest with Security UI_APPNAMENAVBAR: Stirling-PDF-Lite Latest diff --git a/exampleYmlFiles/docker-compose-latest-lite.yml b/exampleYmlFiles/docker-compose-latest-lite.yml index 7b3746882..e40f873dc 100644 --- a/exampleYmlFiles/docker-compose-latest-lite.yml +++ b/exampleYmlFiles/docker-compose-latest-lite.yml @@ -20,7 +20,7 @@ services: environment: DOCKER_ENABLE_SECURITY: "false" SECURITY_ENABLELOGIN: "false" - SYSTEM_DEFAULTLOCALE: en_US + SYSTEM_DEFAULTLOCALE: en-US UI_APPNAME: Stirling-PDF-Lite UI_HOMEDESCRIPTION: Demo site for Stirling-PDF-Lite Latest UI_APPNAMENAVBAR: Stirling-PDF-Lite Latest diff --git a/exampleYmlFiles/docker-compose-latest-security.yml b/exampleYmlFiles/docker-compose-latest-security.yml index 807a755e0..513bb5823 100644 --- a/exampleYmlFiles/docker-compose-latest-security.yml +++ b/exampleYmlFiles/docker-compose-latest-security.yml @@ -21,7 +21,7 @@ services: environment: DOCKER_ENABLE_SECURITY: "true" SECURITY_ENABLELOGIN: "true" - SYSTEM_DEFAULTLOCALE: en_US + SYSTEM_DEFAULTLOCALE: en-US UI_APPNAME: Stirling-PDF UI_HOMEDESCRIPTION: Demo site for Stirling-PDF Latest with Security UI_APPNAMENAVBAR: Stirling-PDF Latest diff --git a/exampleYmlFiles/docker-compose-latest-ultra-lite-security.yml b/exampleYmlFiles/docker-compose-latest-ultra-lite-security.yml index 7971eeb76..b78486966 100644 --- a/exampleYmlFiles/docker-compose-latest-ultra-lite-security.yml +++ b/exampleYmlFiles/docker-compose-latest-ultra-lite-security.yml @@ -21,7 +21,7 @@ services: environment: DOCKER_ENABLE_SECURITY: "true" SECURITY_ENABLELOGIN: "true" - SYSTEM_DEFAULTLOCALE: en_US + SYSTEM_DEFAULTLOCALE: en-US UI_APPNAME: Stirling-PDF-Lite UI_HOMEDESCRIPTION: Demo site for Stirling-PDF-Lite Latest with Security UI_APPNAMENAVBAR: Stirling-PDF-Lite Latest diff --git a/exampleYmlFiles/docker-compose-latest-ultra-lite.yml b/exampleYmlFiles/docker-compose-latest-ultra-lite.yml index 31fec67b4..710c0072f 100644 --- a/exampleYmlFiles/docker-compose-latest-ultra-lite.yml +++ b/exampleYmlFiles/docker-compose-latest-ultra-lite.yml @@ -20,7 +20,7 @@ services: environment: DOCKER_ENABLE_SECURITY: "false" SECURITY_ENABLELOGIN: "false" - SYSTEM_DEFAULTLOCALE: en_US + SYSTEM_DEFAULTLOCALE: en-US UI_APPNAME: Stirling-PDF-Ultra-lite UI_HOMEDESCRIPTION: Demo site for Stirling-PDF-Ultra-lite Latest UI_APPNAMENAVBAR: Stirling-PDF-Ultra-lite Latest diff --git a/exampleYmlFiles/docker-compose-latest.yml b/exampleYmlFiles/docker-compose-latest.yml index a9dc1f31f..d506e4242 100644 --- a/exampleYmlFiles/docker-compose-latest.yml +++ b/exampleYmlFiles/docker-compose-latest.yml @@ -21,7 +21,7 @@ services: environment: DOCKER_ENABLE_SECURITY: "false" SECURITY_ENABLELOGIN: "false" - SYSTEM_DEFAULTLOCALE: en_US + SYSTEM_DEFAULTLOCALE: en-US UI_APPNAME: Stirling-PDF UI_HOMEDESCRIPTION: Demo site for Stirling-PDF Latest UI_APPNAMENAVBAR: Stirling-PDF Latest diff --git a/src/main/java/stirling/software/SPDF/config/security/UserAuthenticationFilter.java b/src/main/java/stirling/software/SPDF/config/security/UserAuthenticationFilter.java index 61b209de6..47423eb67 100644 --- a/src/main/java/stirling/software/SPDF/config/security/UserAuthenticationFilter.java +++ b/src/main/java/stirling/software/SPDF/config/security/UserAuthenticationFilter.java @@ -115,4 +115,4 @@ public class UserAuthenticationFilter extends OncePerRequestFilter { return false; } -} \ No newline at end of file +} diff --git a/src/main/java/stirling/software/SPDF/controller/api/SplitPdfBySectionsController.java b/src/main/java/stirling/software/SPDF/controller/api/SplitPdfBySectionsController.java index de3e5a4b0..90418169d 100644 --- a/src/main/java/stirling/software/SPDF/controller/api/SplitPdfBySectionsController.java +++ b/src/main/java/stirling/software/SPDF/controller/api/SplitPdfBySectionsController.java @@ -121,8 +121,8 @@ public class SplitPdfBySectionsController { subDoc, subPage, AppendMode.APPEND, true, true)) { // Set clipping area and position float translateX = -subPageWidth * i; - - //float translateY = height - subPageHeight * (verticalDivisions - j); + + // float translateY = height - subPageHeight * (verticalDivisions - j); float translateY = -subPageHeight * (verticalDivisions - 1 - j); contentStream.saveGraphicsState(); diff --git a/src/main/java/stirling/software/SPDF/controller/api/converters/ConvertHtmlToPDF.java b/src/main/java/stirling/software/SPDF/controller/api/converters/ConvertHtmlToPDF.java index fdcd114a3..9e1d4fb93 100644 --- a/src/main/java/stirling/software/SPDF/controller/api/converters/ConvertHtmlToPDF.java +++ b/src/main/java/stirling/software/SPDF/controller/api/converters/ConvertHtmlToPDF.java @@ -12,7 +12,7 @@ import org.springframework.web.multipart.MultipartFile; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.tags.Tag; -import stirling.software.SPDF.model.api.GeneralFile; +import stirling.software.SPDF.model.api.converters.HTMLToPdfRequest; import stirling.software.SPDF.utils.FileToPdf; import stirling.software.SPDF.utils.WebResponseUtils; @@ -30,7 +30,8 @@ public class ConvertHtmlToPDF { summary = "Convert an HTML or ZIP (containing HTML and CSS) to PDF", description = "This endpoint takes an HTML or ZIP file input and converts it to a PDF format.") - public ResponseEntity HtmlToPdf(@ModelAttribute GeneralFile request) throws Exception { + public ResponseEntity HtmlToPdf(@ModelAttribute HTMLToPdfRequest request) + throws Exception { MultipartFile fileInput = request.getFileInput(); if (fileInput == null) { @@ -45,7 +46,7 @@ public class ConvertHtmlToPDF { } byte[] pdfBytes = FileToPdf.convertHtmlToPdf( - fileInput.getBytes(), originalFilename, htmlFormatsInstalled); + request, fileInput.getBytes(), originalFilename, htmlFormatsInstalled); String outputFilename = originalFilename.replaceFirst("[.][^.]+$", "") diff --git a/src/main/java/stirling/software/SPDF/controller/api/converters/ConvertImgPDFController.java b/src/main/java/stirling/software/SPDF/controller/api/converters/ConvertImgPDFController.java index a3ea28418..a4f8a98de 100644 --- a/src/main/java/stirling/software/SPDF/controller/api/converters/ConvertImgPDFController.java +++ b/src/main/java/stirling/software/SPDF/controller/api/converters/ConvertImgPDFController.java @@ -96,7 +96,7 @@ public class ConvertImgPDFController { @Operation( summary = "Convert images to a PDF file", description = - "This endpoint converts one or more images to a PDF file. Users can specify whether to stretch the images to fit the PDF page, and whether to automatically rotate the images. Input:Image Output:PDF Type:SISO?") + "This endpoint converts one or more images to a PDF file. Users can specify whether to stretch the images to fit the PDF page, and whether to automatically rotate the images. Input:Image Output:PDF Type:MISO") public ResponseEntity convertToPdf(@ModelAttribute ConvertToPdfRequest request) throws IOException { MultipartFile[] file = request.getFileInput(); diff --git a/src/main/java/stirling/software/SPDF/controller/api/converters/ConvertMarkdownToPdf.java b/src/main/java/stirling/software/SPDF/controller/api/converters/ConvertMarkdownToPdf.java index fe590459a..12fc9097d 100644 --- a/src/main/java/stirling/software/SPDF/controller/api/converters/ConvertMarkdownToPdf.java +++ b/src/main/java/stirling/software/SPDF/controller/api/converters/ConvertMarkdownToPdf.java @@ -39,7 +39,7 @@ public class ConvertMarkdownToPdf { @Operation( summary = "Convert a Markdown file to PDF", description = - "This endpoint takes a Markdown file input, converts it to HTML, and then to PDF format.") + "This endpoint takes a Markdown file input, converts it to HTML, and then to PDF format. Input:MARKDOWN Output:PDF Type:SISO") public ResponseEntity markdownToPdf(@ModelAttribute GeneralFile request) throws Exception { MultipartFile fileInput = request.getFileInput(); @@ -68,7 +68,7 @@ public class ConvertMarkdownToPdf { byte[] pdfBytes = FileToPdf.convertHtmlToPdf( - htmlContent.getBytes(), "converted.html", htmlFormatsInstalled); + null, htmlContent.getBytes(), "converted.html", htmlFormatsInstalled); String outputFilename = originalFilename.replaceFirst("[.][^.]+$", "") diff --git a/src/main/java/stirling/software/SPDF/controller/api/misc/AutoSplitPdfController.java b/src/main/java/stirling/software/SPDF/controller/api/misc/AutoSplitPdfController.java index b793fc3e8..8b095358d 100644 --- a/src/main/java/stirling/software/SPDF/controller/api/misc/AutoSplitPdfController.java +++ b/src/main/java/stirling/software/SPDF/controller/api/misc/AutoSplitPdfController.java @@ -43,6 +43,7 @@ import stirling.software.SPDF.utils.WebResponseUtils; public class AutoSplitPdfController { private static final String QR_CONTENT = "https://github.com/Stirling-Tools/Stirling-PDF"; + private static final String QR_CONTENT_OLD = "https://github.com/Frooodle/Stirling-PDF"; @PostMapping(value = "/auto-split-pdf", consumes = "multipart/form-data") @Operation( @@ -63,12 +64,13 @@ public class AutoSplitPdfController { for (int page = 0; page < document.getNumberOfPages(); ++page) { BufferedImage bim = pdfRenderer.renderImageWithDPI(page, 150); String result = decodeQRCode(bim); - - if (QR_CONTENT.equals(result) && page != 0) { + if ((QR_CONTENT.equals(result) || QR_CONTENT_OLD.equals(result)) && page != 0) { splitDocuments.add(new PDDocument()); } - if (!splitDocuments.isEmpty() && !QR_CONTENT.equals(result)) { + if (!splitDocuments.isEmpty() + && !QR_CONTENT.equals(result) + && !QR_CONTENT_OLD.equals(result)) { splitDocuments.get(splitDocuments.size() - 1).addPage(document.getPage(page)); } else if (page == 0) { PDDocument firstDocument = new PDDocument(); @@ -77,7 +79,7 @@ public class AutoSplitPdfController { } // If duplexMode is true and current page is a divider, then skip next page - if (duplexMode && QR_CONTENT.equals(result)) { + if (duplexMode && (QR_CONTENT.equals(result) || QR_CONTENT_OLD.equals(result))) { page++; } } diff --git a/src/main/java/stirling/software/SPDF/controller/api/misc/BlankPageController.java b/src/main/java/stirling/software/SPDF/controller/api/misc/BlankPageController.java index 8a17e3def..21e5987ba 100644 --- a/src/main/java/stirling/software/SPDF/controller/api/misc/BlankPageController.java +++ b/src/main/java/stirling/software/SPDF/controller/api/misc/BlankPageController.java @@ -33,7 +33,6 @@ import io.swagger.v3.oas.annotations.tags.Tag; import stirling.software.SPDF.model.api.misc.RemoveBlankPagesRequest; import stirling.software.SPDF.utils.PdfUtils; import stirling.software.SPDF.utils.ProcessExecutor; -import stirling.software.SPDF.utils.ProcessExecutor.ProcessExecutorResult; import stirling.software.SPDF.utils.WebResponseUtils; @RestController @@ -85,7 +84,7 @@ public class BlankPageController { List command = new ArrayList<>( Arrays.asList( - "python3", + "python", System.getProperty("user.dir") + "/scripts/detect-blank-pages.py", tempFile.toString(), @@ -94,18 +93,25 @@ public class BlankPageController { "--white_percent", String.valueOf(whitePercent))); + Boolean blank = false; // Run CLI command - ProcessExecutorResult returnCode = - ProcessExecutor.getInstance(ProcessExecutor.Processes.PYTHON_OPENCV) - .runCommandWithOutputHandling(command); + try { + ProcessExecutor.getInstance(ProcessExecutor.Processes.PYTHON_OPENCV) + .runCommandWithOutputHandling(command); + } catch (IOException e) { + // From detect-blank-pages.py + // Return code 1: The image is considered blank. + // Return code 0: The image is not considered blank. + // Since the process returned with a failure code, it should be blank. + blank = true; + } - // does contain data - if (returnCode.getRc() == 0) { + if (blank) { + System.out.println("Skipping, Image was blank for page #" + pageIndex); + } else { System.out.println( "page " + pageIndex + " has image which is not blank"); pagesToKeepIndex.add(pageIndex); - } else { - System.out.println("Skipping, Image was blank for page #" + pageIndex); } } } diff --git a/src/main/java/stirling/software/SPDF/controller/api/misc/FakeScanControllerWIP.java b/src/main/java/stirling/software/SPDF/controller/api/misc/FakeScanControllerWIP.java index cb8db7d35..cf719f56a 100644 --- a/src/main/java/stirling/software/SPDF/controller/api/misc/FakeScanControllerWIP.java +++ b/src/main/java/stirling/software/SPDF/controller/api/misc/FakeScanControllerWIP.java @@ -29,7 +29,6 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.http.ResponseEntity; import org.springframework.web.bind.annotation.ModelAttribute; -import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; import org.springframework.web.multipart.MultipartFile; @@ -50,7 +49,7 @@ public class FakeScanControllerWIP { // TODO @Hidden - @PostMapping(consumes = "multipart/form-data", value = "/fakeScan") + // @PostMapping(consumes = "multipart/form-data", value = "/fakeScan") @Operation( summary = "Repair a PDF file", description = diff --git a/src/main/java/stirling/software/SPDF/controller/api/misc/OverlayImageController.java b/src/main/java/stirling/software/SPDF/controller/api/misc/OverlayImageController.java index 9fe6249c9..caf2efaf3 100644 --- a/src/main/java/stirling/software/SPDF/controller/api/misc/OverlayImageController.java +++ b/src/main/java/stirling/software/SPDF/controller/api/misc/OverlayImageController.java @@ -30,7 +30,7 @@ public class OverlayImageController { @Operation( summary = "Overlay image onto a PDF file", description = - "This endpoint overlays an image onto a PDF file at the specified coordinates. The image can be overlaid on every page of the PDF if specified. Input:PDF/IMAGE Output:PDF Type:MF-SISO") + "This endpoint overlays an image onto a PDF file at the specified coordinates. The image can be overlaid on every page of the PDF if specified. Input:PDF/IMAGE Output:PDF Type:SISO") public ResponseEntity overlayImage(@ModelAttribute OverlayImageRequest request) { MultipartFile pdfFile = request.getFileInput(); MultipartFile imageFile = request.getImageFile(); 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 new file mode 100644 index 000000000..0dd4200cd --- /dev/null +++ b/src/main/java/stirling/software/SPDF/controller/api/misc/StampController.java @@ -0,0 +1,311 @@ +package stirling.software.SPDF.controller.api.misc; + +import java.awt.Color; +import java.awt.image.BufferedImage; +import java.io.File; +import java.io.FileOutputStream; +import java.io.IOException; +import java.io.InputStream; + +import javax.imageio.ImageIO; + +import org.apache.commons.io.IOUtils; +import org.apache.pdfbox.Loader; +import org.apache.pdfbox.pdmodel.PDDocument; +import org.apache.pdfbox.pdmodel.PDPage; +import org.apache.pdfbox.pdmodel.PDPageContentStream; +import org.apache.pdfbox.pdmodel.common.PDRectangle; +import org.apache.pdfbox.pdmodel.font.PDFont; +import org.apache.pdfbox.pdmodel.font.PDType0Font; +import org.apache.pdfbox.pdmodel.font.PDType1Font; +import org.apache.pdfbox.pdmodel.font.Standard14Fonts; +import org.apache.pdfbox.pdmodel.graphics.image.LosslessFactory; +import org.apache.pdfbox.pdmodel.graphics.image.PDImageXObject; +import org.apache.pdfbox.pdmodel.graphics.state.PDExtendedGraphicsState; +import org.apache.pdfbox.util.Matrix; +import org.springframework.core.io.ClassPathResource; +import org.springframework.http.ResponseEntity; +import org.springframework.web.bind.annotation.ModelAttribute; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; +import org.springframework.web.multipart.MultipartFile; + +import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.tags.Tag; + +import stirling.software.SPDF.model.api.misc.AddStampRequest; +import stirling.software.SPDF.utils.WebResponseUtils; + +@RestController +@RequestMapping("/api/v1/misc") +@Tag(name = "Misc", description = "Miscellaneous APIs") +public class StampController { + + @PostMapping(consumes = "multipart/form-data", value = "/add-stamp") + @Operation( + summary = "Add stamp to a PDF file", + description = + "This endpoint adds a stamp to a given PDF file. Users can specify the watermark type (text or image), rotation, opacity, width spacer, and height spacer. Input:PDF Output:PDF Type:SISO") + public ResponseEntity addStamp(@ModelAttribute AddStampRequest request) + throws IOException, Exception { + MultipartFile pdfFile = request.getFileInput(); + String watermarkType = request.getStampType(); + String watermarkText = request.getStampText(); + MultipartFile watermarkImage = request.getStampImage(); + String alphabet = request.getAlphabet(); + float fontSize = request.getFontSize(); + float rotation = request.getRotation(); + float opacity = request.getOpacity(); + int position = request.getPosition(); // Updated to use 1-9 positioning logic + float overrideX = request.getOverrideX(); // New field for X override + float overrideY = request.getOverrideY(); // New field for Y override + + String customColor = request.getCustomColor(); + float marginFactor; + switch (request.getCustomMargin().toLowerCase()) { + case "small": + marginFactor = 0.02f; + break; + case "medium": + marginFactor = 0.035f; + break; + case "large": + marginFactor = 0.05f; + break; + case "x-large": + marginFactor = 0.075f; + break; + + default: + marginFactor = 0.035f; + break; + } + + // Load the input PDF + PDDocument document = Loader.loadPDF(pdfFile.getBytes()); + + for (PDPage page : document.getPages()) { + PDPageContentStream contentStream = + new PDPageContentStream( + document, page, PDPageContentStream.AppendMode.APPEND, true, true); + + PDExtendedGraphicsState graphicsState = new PDExtendedGraphicsState(); + graphicsState.setNonStrokingAlphaConstant(opacity); + contentStream.setGraphicsStateParameters(graphicsState); + + if (watermarkType.equalsIgnoreCase("text")) { + addTextStamp( + contentStream, + watermarkText, + document, + page, + rotation, + position, + fontSize, + alphabet, + overrideX, + overrideY, + marginFactor, + customColor); + } else if (watermarkType.equalsIgnoreCase("image")) { + addImageStamp( + contentStream, + watermarkImage, + document, + page, + rotation, + position, + fontSize, + overrideX, + overrideY, + marginFactor); + } + + contentStream.close(); + } + + return WebResponseUtils.pdfDocToWebResponse( + document, + pdfFile.getOriginalFilename().replaceFirst("[.][^.]+$", "") + "_watermarked.pdf"); + } + + private void addTextStamp( + PDPageContentStream contentStream, + String watermarkText, + PDDocument document, + PDPage page, + float rotation, + int position, // 1-9 positioning logic + float fontSize, + String alphabet, + float overrideX, // X override + float overrideY, + float marginFactor, + String colorString) // Y override + throws IOException { + String resourceDir = ""; + PDFont font = new PDType1Font(Standard14Fonts.FontName.HELVETICA); + switch (alphabet) { + case "arabic": + resourceDir = "static/fonts/NotoSansArabic-Regular.ttf"; + break; + case "japanese": + resourceDir = "static/fonts/Meiryo.ttf"; + break; + case "korean": + resourceDir = "static/fonts/malgun.ttf"; + break; + case "chinese": + resourceDir = "static/fonts/SimSun.ttf"; + break; + case "roman": + default: + resourceDir = "static/fonts/NotoSans-Regular.ttf"; + break; + } + + if (!resourceDir.equals("")) { + ClassPathResource classPathResource = new ClassPathResource(resourceDir); + String fileExtension = resourceDir.substring(resourceDir.lastIndexOf(".")); + File tempFile = File.createTempFile("NotoSansFont", fileExtension); + try (InputStream is = classPathResource.getInputStream(); + FileOutputStream os = new FileOutputStream(tempFile)) { + IOUtils.copy(is, os); + } + + font = PDType0Font.load(document, tempFile); + tempFile.deleteOnExit(); + } + + contentStream.setFont(font, fontSize); + + Color redactColor; + try { + if (!colorString.startsWith("#")) { + colorString = "#" + colorString; + } + redactColor = Color.decode(colorString); + } catch (NumberFormatException e) { + + redactColor = Color.LIGHT_GRAY; + } + + contentStream.setNonStrokingColor(redactColor); + + PDRectangle pageSize = page.getMediaBox(); + float x, y; + + if (overrideX >= 0 && overrideY >= 0) { + // Use override values if provided + x = overrideX; + y = overrideY; + } else { + x = + calculatePositionX( + pageSize, + position, + fontSize, + font, + fontSize, + watermarkText, + marginFactor); + y = calculatePositionY(pageSize, position, fontSize, marginFactor); + } + + contentStream.beginText(); + contentStream.setTextMatrix(Matrix.getRotateInstance(Math.toRadians(rotation), x, y)); + contentStream.showText(watermarkText); + contentStream.endText(); + } + + private void addImageStamp( + PDPageContentStream contentStream, + MultipartFile watermarkImage, + PDDocument document, + PDPage page, + float rotation, + int position, // 1-9 positioning logic + float fontSize, + float overrideX, + float overrideY, + float marginFactor) + throws IOException { + + // Load the watermark image + BufferedImage image = ImageIO.read(watermarkImage.getInputStream()); + + // Compute width based on original aspect ratio + float aspectRatio = (float) image.getWidth() / (float) image.getHeight(); + + // Desired physical height (in PDF points) + float desiredPhysicalHeight = fontSize; + + // Desired physical width based on the aspect ratio + float desiredPhysicalWidth = desiredPhysicalHeight * aspectRatio; + + // Convert the BufferedImage to PDImageXObject + PDImageXObject xobject = LosslessFactory.createFromImage(document, image); + + PDRectangle pageSize = page.getMediaBox(); + float x, y; + + if (overrideX >= 0 && overrideY >= 0) { + // Use override values if provided + x = overrideX; + y = overrideY; + } else { + x = + calculatePositionX( + pageSize, position, desiredPhysicalWidth, null, 0, null, marginFactor); + y = calculatePositionY(pageSize, position, fontSize, marginFactor); + } + + contentStream.saveGraphicsState(); + contentStream.transform(Matrix.getTranslateInstance(x, y)); + contentStream.transform(Matrix.getRotateInstance(Math.toRadians(rotation), 0, 0)); + contentStream.drawImage(xobject, 0, 0, desiredPhysicalWidth, desiredPhysicalHeight); + contentStream.restoreGraphicsState(); + } + + private float calculatePositionX( + PDRectangle pageSize, + int position, + float contentWidth, + PDFont font, + float fontSize, + String text, + float marginFactor) + throws IOException { + float actualWidth = + (text != null) ? calculateTextWidth(text, font, fontSize) : contentWidth; + switch (position % 3) { + case 1: // Left + return pageSize.getLowerLeftX() + marginFactor * pageSize.getWidth(); + case 2: // Center + return (pageSize.getWidth() - actualWidth) / 2; + case 0: // Right + return pageSize.getUpperRightX() - actualWidth - marginFactor * pageSize.getWidth(); + default: + return 0; + } + } + + private float calculateTextWidth(String text, PDFont font, float fontSize) throws IOException { + return font.getStringWidth(text) / 1000 * fontSize; + } + + private float calculatePositionY( + PDRectangle pageSize, int position, float height, float marginFactor) { + switch ((position - 1) / 3) { + case 0: // Top + return pageSize.getUpperRightY() - height - marginFactor * pageSize.getHeight(); + case 1: // Middle + return (pageSize.getHeight() - height) / 2; + case 2: // Bottom + return pageSize.getLowerLeftY() + marginFactor * pageSize.getHeight(); + default: + return 0; + } + } +} diff --git a/src/main/java/stirling/software/SPDF/controller/api/pipeline/ApiDocService.java b/src/main/java/stirling/software/SPDF/controller/api/pipeline/ApiDocService.java index 6ed5f51d0..02c37e5ce 100644 --- a/src/main/java/stirling/software/SPDF/controller/api/pipeline/ApiDocService.java +++ b/src/main/java/stirling/software/SPDF/controller/api/pipeline/ApiDocService.java @@ -1,6 +1,8 @@ package stirling.software.SPDF.controller.api.pipeline; +import java.util.Arrays; import java.util.HashMap; +import java.util.List; import java.util.Map; import java.util.regex.Matcher; import java.util.regex.Pattern; @@ -39,6 +41,57 @@ public class ApiDocService { return "http://localhost:" + port + contextPath + "/v1/api-docs"; } + Map> outputToFileTypes = new HashMap<>(); + + public List getExtensionTypes(boolean output, String operationName) { + if (outputToFileTypes.size() == 0) { + outputToFileTypes.put("PDF", Arrays.asList("pdf")); + outputToFileTypes.put( + "IMAGE", + Arrays.asList( + "png", "jpg", "jpeg", "gif", "webp", "bmp", "tif", "tiff", "svg", "psd", + "ai", "eps")); + outputToFileTypes.put( + "ZIP", + Arrays.asList("zip", "rar", "7z", "tar", "gz", "bz2", "xz", "lz", "lzma", "z")); + outputToFileTypes.put("WORD", Arrays.asList("doc", "docx", "odt", "rtf")); + outputToFileTypes.put("CSV", Arrays.asList("csv")); + outputToFileTypes.put("JS", Arrays.asList("js", "jsx")); + outputToFileTypes.put("HTML", Arrays.asList("html", "htm", "xhtml")); + outputToFileTypes.put("JSON", Arrays.asList("json")); + outputToFileTypes.put("TXT", Arrays.asList("txt", "text", "md", "markdown")); + outputToFileTypes.put("PPT", Arrays.asList("ppt", "pptx", "odp")); + outputToFileTypes.put("XML", Arrays.asList("xml", "xsd", "xsl")); + outputToFileTypes.put( + "BOOK", Arrays.asList("epub", "mobi", "azw3", "fb2", "txt", "docx")); + // type. + } + + if (apiDocsJsonRootNode == null || apiDocumentation.size() == 0) { + loadApiDocumentation(); + } + if (!apiDocumentation.containsKey(operationName)) { + return null; + } + + ApiEndpoint endpoint = apiDocumentation.get(operationName); + String description = endpoint.getDescription(); + Pattern pattern = null; + if (output) { + pattern = Pattern.compile("Output:(\\w+)"); + } else { + pattern = Pattern.compile("Input:(\\w+)"); + } + Matcher matcher = pattern.matcher(description); + while (matcher.find()) { + String type = matcher.group(1).toUpperCase(); + if (outputToFileTypes.containsKey(type)) { + return outputToFileTypes.get(type); + } + } + return null; + } + @Autowired(required = false) private UserServiceInterface userService; diff --git a/src/main/java/stirling/software/SPDF/controller/api/pipeline/PipelineProcessor.java b/src/main/java/stirling/software/SPDF/controller/api/pipeline/PipelineProcessor.java index 34dcb6133..5ff6842c5 100644 --- a/src/main/java/stirling/software/SPDF/controller/api/pipeline/PipelineProcessor.java +++ b/src/main/java/stirling/software/SPDF/controller/api/pipeline/PipelineProcessor.java @@ -11,6 +11,7 @@ import java.nio.file.Files; import java.nio.file.Path; import java.nio.file.Paths; import java.util.ArrayList; +import java.util.Arrays; import java.util.List; import java.util.Map; import java.util.Map.Entry; @@ -82,15 +83,11 @@ public class PipelineProcessor { operation, isMultiInputOperation); Map parameters = pipelineOperation.getParameters(); - String inputFileExtension = ""; - - // TODO - // if (operationNode.has("inputFileType")) { - // inputFileExtension = operationNode.get("inputFileType").asText(); - // } else { - inputFileExtension = ".pdf"; - // } - final String finalInputFileExtension = inputFileExtension; + List inputFileTypes = apiDocService.getExtensionTypes(false, operation); + if (inputFileTypes == null) { + inputFileTypes = new ArrayList(Arrays.asList("ALL")); + } + // List outputFileTypes = apiDocService.getExtensionTypes(true, operation); String url = getBaseUrl() + operation; @@ -98,38 +95,42 @@ public class PipelineProcessor { if (!isMultiInputOperation) { for (Resource file : outputFiles) { boolean hasInputFileType = false; - if (file.getFilename().endsWith(inputFileExtension)) { - hasInputFileType = true; - MultiValueMap body = new LinkedMultiValueMap<>(); - body.add("fileInput", file); + for (String extension : inputFileTypes) { + if (extension.equals("ALL") || file.getFilename().endsWith(extension)) { + hasInputFileType = true; + MultiValueMap body = new LinkedMultiValueMap<>(); + body.add("fileInput", file); - for (Entry entry : parameters.entrySet()) { - body.add(entry.getKey(), entry.getValue()); + for (Entry entry : parameters.entrySet()) { + body.add(entry.getKey(), entry.getValue()); + } + + ResponseEntity response = sendWebRequest(url, body); + + // If the operation is filter and the response body is null or empty, + // skip + // this + // file + if (operation.startsWith("filter-") + && (response.getBody() == null + || response.getBody().length == 0)) { + logger.info("Skipping file due to failing {}", operation); + continue; + } + + if (!response.getStatusCode().equals(HttpStatus.OK)) { + logPrintStream.println("Error: " + response.getBody()); + hasErrors = true; + continue; + } + processOutputFiles(operation, response, newOutputFiles); } - - ResponseEntity response = sendWebRequest(url, body); - - // If the operation is filter and the response body is null or empty, skip - // this - // file - if (operation.startsWith("filter-") - && (response.getBody() == null || response.getBody().length == 0)) { - logger.info("Skipping file due to failing {}", operation); - continue; - } - - if (!response.getStatusCode().equals(HttpStatus.OK)) { - logPrintStream.println("Error: " + response.getBody()); - hasErrors = true; - continue; - } - processOutputFiles(operation, file.getFilename(), response, newOutputFiles); } if (!hasInputFileType) { logPrintStream.println( "No files with extension " - + inputFileExtension + + String.join(", ", inputFileTypes) + " found for operation " + operation); hasErrors = true; @@ -138,13 +139,19 @@ public class PipelineProcessor { } else { // Filter and collect all files that match the inputFileExtension - List matchingFiles = - outputFiles.stream() - .filter( - file -> - file.getFilename() - .endsWith(finalInputFileExtension)) - .collect(Collectors.toList()); + List matchingFiles; + if (inputFileTypes.contains("ALL")) { + matchingFiles = new ArrayList<>(outputFiles); + } else { + final List finalinputFileTypes = inputFileTypes; + matchingFiles = + outputFiles.stream() + .filter( + file -> + finalinputFileTypes.stream() + .anyMatch(file.getFilename()::endsWith)) + .collect(Collectors.toList()); + } // Check if there are matching files if (!matchingFiles.isEmpty()) { @@ -164,11 +171,7 @@ public class PipelineProcessor { // Handle the response if (response.getStatusCode().equals(HttpStatus.OK)) { - processOutputFiles( - operation, - matchingFiles.get(0).getFilename(), - response, - newOutputFiles); + processOutputFiles(operation, response, newOutputFiles); } else { // Log error if the response status is not OK logPrintStream.println( @@ -178,7 +181,7 @@ public class PipelineProcessor { } else { logPrintStream.println( "No files with extension " - + inputFileExtension + + String.join(", ", inputFileTypes) + " found for multi-input operation " + operation); hasErrors = true; @@ -211,11 +214,29 @@ public class PipelineProcessor { return restTemplate.exchange(url, HttpMethod.POST, entity, byte[].class); } + public static String removeTrailingNaming(String filename) { + // Splitting filename into name and extension + int dotIndex = filename.lastIndexOf("."); + if (dotIndex == -1) { + // No extension found + return filename; + } + String name = filename.substring(0, dotIndex); + String extension = filename.substring(dotIndex); + + // Finding the last underscore + int underscoreIndex = name.lastIndexOf("_"); + if (underscoreIndex == -1) { + // No underscore found + return filename; + } + + // Removing the last part and reattaching the extension + return name.substring(0, underscoreIndex) + extension; + } + private List processOutputFiles( - String operation, - String fileName, - ResponseEntity response, - List newOutputFiles) + String operation, ResponseEntity response, List newOutputFiles) throws IOException { // Define filename String newFilename; @@ -227,7 +248,7 @@ public class PipelineProcessor { newFilename = extractFilename(response); } else { // Otherwise, keep the original filename. - newFilename = fileName; + newFilename = removeTrailingNaming(extractFilename(response)); } // Check if the response body is a zip file diff --git a/src/main/java/stirling/software/SPDF/controller/api/security/CertSignController.java b/src/main/java/stirling/software/SPDF/controller/api/security/CertSignController.java index f7c7390eb..e7cccb44e 100644 --- a/src/main/java/stirling/software/SPDF/controller/api/security/CertSignController.java +++ b/src/main/java/stirling/software/SPDF/controller/api/security/CertSignController.java @@ -74,7 +74,7 @@ public class CertSignController { @Operation( summary = "Sign PDF with a Digital Certificate", description = - "This endpoint accepts a PDF file, a digital certificate and related information to sign the PDF. It then returns the digitally signed PDF file. Input:PDF Output:PDF Type:MF-SISO") + "This endpoint accepts a PDF file, a digital certificate and related information to sign the PDF. It then returns the digitally signed PDF file. Input:PDF Output:PDF Type:SISO") public ResponseEntity signPDFWithCert(@ModelAttribute SignPDFWithCertRequest request) throws Exception { MultipartFile pdf = request.getFileInput(); diff --git a/src/main/java/stirling/software/SPDF/controller/api/security/WatermarkController.java b/src/main/java/stirling/software/SPDF/controller/api/security/WatermarkController.java index 7bfb4c851..6630a200f 100644 --- a/src/main/java/stirling/software/SPDF/controller/api/security/WatermarkController.java +++ b/src/main/java/stirling/software/SPDF/controller/api/security/WatermarkController.java @@ -155,9 +155,16 @@ public class WatermarkController { contentStream.setFont(font, fontSize); contentStream.setNonStrokingColor(Color.LIGHT_GRAY); + String[] textLines = watermarkText.split("\\\\n"); + float maxLineWidth = 0; + + for (int i = 0; i < textLines.length; ++i) { + maxLineWidth = Math.max(maxLineWidth, font.getStringWidth(textLines[i])); + } + // Set size and location of text watermark - float watermarkWidth = widthSpacer + font.getStringWidth(watermarkText) * fontSize / 1000; - float watermarkHeight = heightSpacer + fontSize; + float watermarkWidth = widthSpacer + maxLineWidth * fontSize / 1000; + float watermarkHeight = heightSpacer + fontSize * textLines.length; float pageWidth = page.getMediaBox().getWidth(); float pageHeight = page.getMediaBox().getHeight(); int watermarkRows = (int) (pageHeight / watermarkHeight + 1); @@ -172,7 +179,12 @@ public class WatermarkController { (float) Math.toRadians(rotation), j * watermarkWidth, i * watermarkHeight)); - contentStream.showText(watermarkText); + + for (int k = 0; k < textLines.length; ++k) { + contentStream.showText(textLines[k]); + contentStream.newLineAtOffset(0, -fontSize); + } + contentStream.endText(); } } diff --git a/src/main/java/stirling/software/SPDF/controller/web/OtherWebController.java b/src/main/java/stirling/software/SPDF/controller/web/OtherWebController.java index b02047795..a7c109082 100644 --- a/src/main/java/stirling/software/SPDF/controller/web/OtherWebController.java +++ b/src/main/java/stirling/software/SPDF/controller/web/OtherWebController.java @@ -39,6 +39,13 @@ public class OtherWebController { return "misc/show-javascript"; } + @GetMapping("/stamp") + @Hidden + public String stampForm(Model model) { + model.addAttribute("currentPage", "stamp"); + return "misc/stamp"; + } + @GetMapping("/add-page-numbers") @Hidden public String addPageNumbersForm(Model model) { diff --git a/src/main/java/stirling/software/SPDF/model/api/converters/HTMLToPdfRequest.java b/src/main/java/stirling/software/SPDF/model/api/converters/HTMLToPdfRequest.java new file mode 100644 index 000000000..c778c36fe --- /dev/null +++ b/src/main/java/stirling/software/SPDF/model/api/converters/HTMLToPdfRequest.java @@ -0,0 +1,52 @@ +package stirling.software.SPDF.model.api.converters; + +import io.swagger.v3.oas.annotations.media.Schema; + +import lombok.Data; +import lombok.EqualsAndHashCode; +import stirling.software.SPDF.model.api.PDFFile; + +@Data +@EqualsAndHashCode(callSuper = true) +public class HTMLToPdfRequest extends PDFFile { + + @Schema( + description = "Zoom level for displaying the website. Default is '1'.", + defaultValue = "1") + private float zoom; + + @Schema(description = "Width of the page in centimeters.") + private Float pageWidth; + + @Schema(description = "Height of the page in centimeters.") + private Float pageHeight; + + @Schema(description = "Top margin of the page in millimeters.") + private Float marginTop; + + @Schema(description = "Bottom margin of the page in millimeters.") + private Float marginBottom; + + @Schema(description = "Left margin of the page in millimeters.") + private Float marginLeft; + + @Schema(description = "Right margin of the page in millimeters.") + private Float marginRight; + + @Schema( + description = "Enable or disable rendering of website background.", + allowableValues = {"Yes", "No"}) + private String printBackground; + + @Schema( + description = + "Enable or disable the default header. The default header includes the name of the page on the left and the page number on the right.", + allowableValues = {"Yes", "No"}) + private String defaultHeader; + + @Schema( + description = "Change the CSS media type of the page. Defaults to 'print'.", + allowableValues = {"none", "print", "screen"}, + defaultValue = "print") + private String cssMediaType; +} diff --git a/src/main/java/stirling/software/SPDF/model/api/misc/AddStampRequest.java b/src/main/java/stirling/software/SPDF/model/api/misc/AddStampRequest.java new file mode 100644 index 000000000..82296acc9 --- /dev/null +++ b/src/main/java/stirling/software/SPDF/model/api/misc/AddStampRequest.java @@ -0,0 +1,68 @@ +package stirling.software.SPDF.model.api.misc; + +import org.springframework.web.multipart.MultipartFile; + +import io.swagger.v3.oas.annotations.media.Schema; + +import lombok.Data; +import lombok.EqualsAndHashCode; +import stirling.software.SPDF.model.api.PDFFile; + +@Data +@EqualsAndHashCode(callSuper = true) +public class AddStampRequest extends PDFFile { + + @Schema( + description = "The stamp type (text or image)", + allowableValues = {"text", "image"}, + required = true) + private String stampType; + + @Schema(description = "The stamp text") + private String stampText; + + @Schema(description = "The stamp image") + private MultipartFile stampImage; + + @Schema( + description = "The selected alphabet", + allowableValues = {"roman", "arabic", "japanese", "korean", "chinese"}, + defaultValue = "roman") + private String alphabet = "roman"; + + @Schema(description = "The font size of the stamp text", example = "30") + private float fontSize = 30; + + @Schema(description = "The rotation of the stamp in degrees", example = "0") + private float rotation = 0; + + @Schema(description = "The opacity of the stamp (0.0 - 1.0)", example = "0.5") + private float opacity; + + @Schema( + description = + "Position for stamp placement based on a 1-9 grid (1: bottom-left, 2: bottom-center, ..., 9: top-right)", + example = "1") + private int position; + + @Schema( + description = + "Override X coordinate for stamp placement. If set, it will override the position-based calculation. Negative value means no override.", + example = "-1") + private float overrideX = -1; // Default to -1 indicating no override + + @Schema( + description = + "Override Y coordinate for stamp placement. If set, it will override the position-based calculation. Negative value means no override.", + example = "-1") + private float overrideY = -1; // Default to -1 indicating no override + + @Schema( + description = "Specifies the margin size for the stamp.", + allowableValues = {"small", "medium", "large", "x-large"}, + defaultValue = "medium") + private String customMargin = "medium"; + + @Schema(description = "The color for stamp", defaultValue = "#d3d3d3") + private String customColor = "#d3d3d3"; +} diff --git a/src/main/java/stirling/software/SPDF/pdf/ImageFinder.java b/src/main/java/stirling/software/SPDF/pdf/ImageFinder.java deleted file mode 100644 index a710dbd57..000000000 --- a/src/main/java/stirling/software/SPDF/pdf/ImageFinder.java +++ /dev/null @@ -1,131 +0,0 @@ -package stirling.software.SPDF.pdf; - -import java.awt.geom.Point2D; -import java.io.IOException; -import java.util.List; - -import org.apache.pdfbox.contentstream.operator.Operator; -import org.apache.pdfbox.contentstream.operator.OperatorName; -import org.apache.pdfbox.cos.COSBase; -import org.apache.pdfbox.cos.COSName; -import org.apache.pdfbox.pdmodel.PDPage; -import org.apache.pdfbox.pdmodel.graphics.PDXObject; -import org.apache.pdfbox.pdmodel.graphics.form.PDFormXObject; -import org.apache.pdfbox.pdmodel.graphics.image.PDImage; -import org.apache.pdfbox.pdmodel.graphics.image.PDImageXObject; - -public class ImageFinder extends org.apache.pdfbox.contentstream.PDFGraphicsStreamEngine { - private boolean hasImages = false; - - public ImageFinder(PDPage page) { - super(page); - } - - public boolean hasImages() { - return hasImages; - } - - @Override - protected void processOperator(Operator operator, List operands) throws IOException { - String operation = operator.getName(); - if (operation.equals(OperatorName.DRAW_OBJECT)) { - COSBase base = operands.get(0); - if (base instanceof COSName) { - COSName objectName = (COSName) base; - PDXObject xobject = getResources().getXObject(objectName); - if (xobject instanceof PDImageXObject) { - hasImages = true; - } else if (xobject instanceof PDFormXObject) { - PDFormXObject form = (PDFormXObject) xobject; - ImageFinder innerFinder = new ImageFinder(getPage()); - innerFinder.processPage(getPage()); - if (innerFinder.hasImages()) { - hasImages = true; - } - } - } - } - super.processOperator(operator, operands); - } - - @Override - public void appendRectangle(Point2D p0, Point2D p1, Point2D p2, Point2D p3) throws IOException { - // TODO Auto-generated method stub - - } - - @Override - public void drawImage(PDImage pdImage) throws IOException { - // TODO Auto-generated method stub - - } - - @Override - public void clip(int windingRule) throws IOException { - // TODO Auto-generated method stub - - } - - @Override - public void moveTo(float x, float y) throws IOException { - // TODO Auto-generated method stub - - } - - @Override - public void lineTo(float x, float y) throws IOException { - // TODO Auto-generated method stub - - } - - @Override - public void curveTo(float x1, float y1, float x2, float y2, float x3, float y3) - throws IOException { - // TODO Auto-generated method stub - - } - - @Override - public Point2D getCurrentPoint() throws IOException { - // TODO Auto-generated method stub - return null; - } - - @Override - public void closePath() throws IOException { - // TODO Auto-generated method stub - - } - - @Override - public void endPath() throws IOException { - // TODO Auto-generated method stub - - } - - @Override - public void strokePath() throws IOException { - // TODO Auto-generated method stub - - } - - @Override - public void fillPath(int windingRule) throws IOException { - // TODO Auto-generated method stub - - } - - @Override - public void fillAndStrokePath(int windingRule) throws IOException { - // TODO Auto-generated method stub - - } - - @Override - public void shadingFill(COSName shadingName) throws IOException { - // TODO Auto-generated method stub - - } - - // ... rest of the overridden methods -} diff --git a/src/main/java/stirling/software/SPDF/utils/FileToPdf.java b/src/main/java/stirling/software/SPDF/utils/FileToPdf.java index ebdbf4fa9..bdf3ec61f 100644 --- a/src/main/java/stirling/software/SPDF/utils/FileToPdf.java +++ b/src/main/java/stirling/software/SPDF/utils/FileToPdf.java @@ -2,6 +2,7 @@ package stirling.software.SPDF.utils; import java.io.ByteArrayInputStream; import java.io.IOException; +import java.nio.charset.StandardCharsets; import java.nio.file.Files; import java.nio.file.Path; import java.util.ArrayList; @@ -11,12 +12,16 @@ import java.util.stream.Stream; import java.util.zip.ZipEntry; import java.util.zip.ZipInputStream; +import stirling.software.SPDF.model.api.converters.HTMLToPdfRequest; import stirling.software.SPDF.utils.ProcessExecutor.ProcessExecutorResult; public class FileToPdf { public static byte[] convertHtmlToPdf( - byte[] fileBytes, String fileName, boolean htmlFormatsInstalled) + HTMLToPdfRequest request, + byte[] fileBytes, + String fileName, + boolean htmlFormatsInstalled) throws IOException, InterruptedException { Path tempOutputFile = Files.createTempFile("output_", ".pdf"); @@ -36,6 +41,65 @@ public class FileToPdf { } else { command.add("wkhtmltopdf"); command.add("--enable-local-file-access"); + command.add("--load-error-handling"); + command.add("ignore"); + command.add("--load-media-error-handling"); + command.add("ignore"); + command.add("--zoom"); + command.add(String.valueOf(request.getZoom())); + + // if custom zoom add zoom style direct to html + // https://github.com/wkhtmltopdf/wkhtmltopdf/issues/4900 + if (request.getZoom() != 1.0) { + String htmlContent = new String(Files.readAllBytes(tempInputFile)); + + String zoomStyle = ""; + // Check for tag, add style tag to associated tag + if (htmlContent.contains("")) { + htmlContent = htmlContent.replace("", "" + zoomStyle); + } else if (htmlContent.contains("")) { + // If no tag, but tag exists + htmlContent = htmlContent.replace("", "" + zoomStyle); + } else { + // If neither nor tags exist + htmlContent = zoomStyle + htmlContent; + } + // rewrite new html to file + Files.write(tempInputFile, htmlContent.getBytes(StandardCharsets.UTF_8)); + } + + if (request.getPageWidth() != null) { + command.add("--page-width"); + command.add(request.getPageWidth() + "cm"); + } + + if (request.getPageHeight() != null) { + command.add("--page-height"); + command.add(request.getPageHeight() + "cm"); + } + + if (request.getMarginTop() != null) { + command.add("--margin-top"); + command.add(request.getMarginTop() + "mm"); + } + + // Repeat similar pattern for marginBottom, marginLeft, marginRight + + if ("Yes".equalsIgnoreCase(request.getPrintBackground())) { + command.add("--background"); + } else { + command.add("--no-background"); + } + + if ("Yes".equalsIgnoreCase(request.getDefaultHeader())) { + command.add("--default-header"); + } + + if ("print".equalsIgnoreCase(request.getCssMediaType())) { + command.add("--print-media-type"); + } else if ("screen".equalsIgnoreCase(request.getCssMediaType())) { + command.add("--no-print-media-type"); + } } command.add(tempInputFile.toString()); @@ -59,7 +123,13 @@ public class FileToPdf { } pdfBytes = Files.readAllBytes(tempOutputFile); + } catch (IOException e) { + pdfBytes = Files.readAllBytes(tempOutputFile); + if (pdfBytes.length < 1) { + throw e; + } } finally { + // Clean up temporary files Files.delete(tempOutputFile); Files.delete(tempInputFile); @@ -130,7 +200,6 @@ public class FileToPdf { command.add("ebook-convert"); command.add(tempInputFile.toString()); command.add(tempOutputFile.toString()); - ProcessExecutorResult returnCode = ProcessExecutor.getInstance(ProcessExecutor.Processes.CALIBRE) .runCommandWithOutputHandling(command); diff --git a/src/main/java/stirling/software/SPDF/utils/PdfUtils.java b/src/main/java/stirling/software/SPDF/utils/PdfUtils.java index 426fc78d3..1676ce853 100644 --- a/src/main/java/stirling/software/SPDF/utils/PdfUtils.java +++ b/src/main/java/stirling/software/SPDF/utils/PdfUtils.java @@ -2,8 +2,10 @@ package stirling.software.SPDF.utils; import java.awt.Graphics; import java.awt.image.BufferedImage; +import java.awt.image.RenderedImage; import java.io.ByteArrayOutputStream; import java.io.IOException; +import java.util.ArrayList; import java.util.List; import java.util.zip.ZipEntry; import java.util.zip.ZipOutputStream; @@ -16,11 +18,15 @@ import javax.imageio.ImageWriter; import javax.imageio.stream.ImageOutputStream; import org.apache.pdfbox.Loader; +import org.apache.pdfbox.cos.COSName; import org.apache.pdfbox.pdmodel.PDDocument; import org.apache.pdfbox.pdmodel.PDPage; import org.apache.pdfbox.pdmodel.PDPageContentStream; import org.apache.pdfbox.pdmodel.PDPageContentStream.AppendMode; +import org.apache.pdfbox.pdmodel.PDResources; import org.apache.pdfbox.pdmodel.common.PDRectangle; +import org.apache.pdfbox.pdmodel.graphics.PDXObject; +import org.apache.pdfbox.pdmodel.graphics.form.PDFormXObject; import org.apache.pdfbox.pdmodel.graphics.image.JPEGFactory; import org.apache.pdfbox.pdmodel.graphics.image.LosslessFactory; import org.apache.pdfbox.pdmodel.graphics.image.PDImageXObject; @@ -31,8 +37,6 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.web.multipart.MultipartFile; -import stirling.software.SPDF.pdf.ImageFinder; - public class PdfUtils { private static final Logger logger = LoggerFactory.getLogger(PdfUtils.class); @@ -62,6 +66,23 @@ public class PdfUtils { } } + public static List getAllImages(PDResources resources) throws IOException { + List images = new ArrayList<>(); + + for (COSName name : resources.getXObjectNames()) { + PDXObject object = resources.getXObject(name); + + if (object instanceof PDImageXObject) { + images.add(((PDImageXObject) object).getImage()); + + } else if (object instanceof PDFormXObject) { + images.addAll(getAllImages(((PDFormXObject) object).getResources())); + } + } + + return images; + } + public static boolean hasImages(PDDocument document, String pagesToCheck) throws IOException { String[] pageOrderArr = pagesToCheck.split(","); List pageList = @@ -94,9 +115,7 @@ public class PdfUtils { } public static boolean hasImagesOnPage(PDPage page) throws IOException { - ImageFinder imageFinder = new ImageFinder(page); - imageFinder.processPage(page); - return imageFinder.hasImages(); + return getAllImages(page.getResources()).size() > 0; } public static boolean hasTextOnPage(PDPage page, String phrase) throws IOException { diff --git a/src/main/resources/messages_ar_AR.properties b/src/main/resources/messages_ar_AR.properties index cac25052e..f37a67a5d 100644 --- a/src/main/resources/messages_ar_AR.properties +++ b/src/main/resources/messages_ar_AR.properties @@ -44,7 +44,8 @@ blue=Blue custom=Custom... WorkInProgess=Work in progress, May not work or be buggy, Please report any ploblems! poweredBy=Powered by - +yes=Yes +no=No changedCredsMessage=Credentials changed! notAuthenticatedMessage=User not authenticated. userNotFoundMessage=User not found. @@ -68,6 +69,7 @@ pipelineOptions.header=Pipeline Configuration pipelineOptions.pipelineNameLabel=Pipeline Name pipelineOptions.saveSettings=Save Operation Settings pipelineOptions.pipelineNamePrompt=Enter pipeline name here +pipelineOptions.selectOperation=Select Operation pipelineOptions.addOperationButton=Add operation pipelineOptions.pipelineHeader=Pipeline: pipelineOptions.saveButton=Download @@ -384,6 +386,11 @@ home.split-by-sections.title=Split PDF by Sections home.split-by-sections.desc=Divide each page of a PDF into smaller horizontal and vertical sections split-by-sections.tags=Section Split, Divide, Customize +home.AddStampRequest.title=Add Stamp to PDF +home.AddStampRequest.desc=Add text or add image stamps at set locations +AddStampRequest.tags=Stamp, Add image, center image, Watermark, PDF, Embed, Customize + + ########################### # # # WEB PAGES # @@ -459,8 +466,38 @@ HTMLToPDF.header=HTML To PDF HTMLToPDF.help=Accepts HTML files and ZIPs containing html/css/images etc required HTMLToPDF.submit=Convert HTMLToPDF.credit=Uses WeasyPrint +HTMLToPDF.zoom=Zoom level for displaying the website. +HTMLToPDF.pageWidth=Width of the page in centimeters. (Blank to default) +HTMLToPDF.pageHeight=Height of the page in centimeters. (Blank to default) +HTMLToPDF.marginTop=Top margin of the page in millimeters. (Blank to default) +HTMLToPDF.marginBottom=Bottom margin of the page in millimeters. (Blank to default) +HTMLToPDF.marginLeft=Left margin of the page in millimeters. (Blank to default) +HTMLToPDF.marginRight=Right margin of the page in millimeters. (Blank to default) +HTMLToPDF.printBackground=Render the background of websites. +HTMLToPDF.defaultHeader=Enable Default Header (Name and page number) +HTMLToPDF.cssMediaType=Change the CSS media type of the page. +HTMLToPDF.none=None +HTMLToPDF.print=Print +HTMLToPDF.screen=Screen +#AddStampRequest +AddStampRequest.header=Stamp PDF +AddStampRequest.title=Stamp PDF +AddStampRequest.stampType=Stamp Type +AddStampRequest.stampText=Stamp Text +AddStampRequest.stampImage=Stamp Image +AddStampRequest.alphabet=Alphabet +AddStampRequest.fontSize=Font/Image Size +AddStampRequest.rotation=Rotation +AddStampRequest.opacity=Opacity +AddStampRequest.position=Position +AddStampRequest.overrideX=Override X Coordinate +AddStampRequest.overrideY=Override Y Coordinate +AddStampRequest.customMargin=Custom Margin +AddStampRequest.customColor=Custom Text Color +AddStampRequest.submit=Submit + #sanitizePDF sanitizePDF.title=Sanitize PDF sanitizePDF.header=Sanitize a PDF file diff --git a/src/main/resources/messages_bg_BG.properties b/src/main/resources/messages_bg_BG.properties index e31749ca8..13dce03cd 100644 --- a/src/main/resources/messages_bg_BG.properties +++ b/src/main/resources/messages_bg_BG.properties @@ -44,7 +44,8 @@ blue=Синьо custom=Персонализиране... WorkInProgess=Work in progress, May not work or be buggy, Please report any ploblems! poweredBy=Powered by - +yes=Yes +no=No changedCredsMessage=Идентификационните данни са променени! notAuthenticatedMessage=Потребителят не е автентикиран. userNotFoundMessage=Потребителят не е намерен @@ -68,6 +69,7 @@ pipelineOptions.header=Pipeline Configuration pipelineOptions.pipelineNameLabel=Pipeline Name pipelineOptions.saveSettings=Save Operation Settings pipelineOptions.pipelineNamePrompt=Enter pipeline name here +pipelineOptions.selectOperation=Select Operation pipelineOptions.addOperationButton=Add operation pipelineOptions.pipelineHeader=Pipeline: pipelineOptions.saveButton=Download @@ -384,6 +386,11 @@ home.split-by-sections.title=Split PDF by Sections home.split-by-sections.desc=Divide each page of a PDF into smaller horizontal and vertical sections split-by-sections.tags=Section Split, Divide, Customize +home.AddStampRequest.title=Add Stamp to PDF +home.AddStampRequest.desc=Add text or add image stamps at set locations +AddStampRequest.tags=Stamp, Add image, center image, Watermark, PDF, Embed, Customize + + ########################### # # # WEB PAGES # @@ -459,8 +466,38 @@ HTMLToPDF.header=HTML към PDF HTMLToPDF.help=Приема HTML файлове и ZIP файлове, съдържащи html/css/изображения и т.н HTMLToPDF.submit=Преобразуване HTMLToPDF.credit=Използва WeasyPrint +HTMLToPDF.zoom=Zoom level for displaying the website. +HTMLToPDF.pageWidth=Width of the page in centimeters. (Blank to default) +HTMLToPDF.pageHeight=Height of the page in centimeters. (Blank to default) +HTMLToPDF.marginTop=Top margin of the page in millimeters. (Blank to default) +HTMLToPDF.marginBottom=Bottom margin of the page in millimeters. (Blank to default) +HTMLToPDF.marginLeft=Left margin of the page in millimeters. (Blank to default) +HTMLToPDF.marginRight=Right margin of the page in millimeters. (Blank to default) +HTMLToPDF.printBackground=Render the background of websites. +HTMLToPDF.defaultHeader=Enable Default Header (Name and page number) +HTMLToPDF.cssMediaType=Change the CSS media type of the page. +HTMLToPDF.none=None +HTMLToPDF.print=Print +HTMLToPDF.screen=Screen +#AddStampRequest +AddStampRequest.header=Stamp PDF +AddStampRequest.title=Stamp PDF +AddStampRequest.stampType=Stamp Type +AddStampRequest.stampText=Stamp Text +AddStampRequest.stampImage=Stamp Image +AddStampRequest.alphabet=Alphabet +AddStampRequest.fontSize=Font/Image Size +AddStampRequest.rotation=Rotation +AddStampRequest.opacity=Opacity +AddStampRequest.position=Position +AddStampRequest.overrideX=Override X Coordinate +AddStampRequest.overrideY=Override Y Coordinate +AddStampRequest.customMargin=Custom Margin +AddStampRequest.customColor=Custom Text Color +AddStampRequest.submit=Submit + #sanitizePDF sanitizePDF.title=Дезинфектирай PDF sanitizePDF.header=Дезинфектира PDF файл diff --git a/src/main/resources/messages_ca_CA.properties b/src/main/resources/messages_ca_CA.properties index 406eee890..8e6dd4fa2 100644 --- a/src/main/resources/messages_ca_CA.properties +++ b/src/main/resources/messages_ca_CA.properties @@ -44,7 +44,8 @@ blue=Blau custom=Personalitzat... WorkInProgess=Work in progress, May not work or be buggy, Please report any ploblems! poweredBy=Powered by - +yes=Yes +no=No changedCredsMessage=Credentials changed! notAuthenticatedMessage=User not authenticated. userNotFoundMessage=User not found. @@ -68,6 +69,7 @@ pipelineOptions.header=Pipeline Configuration pipelineOptions.pipelineNameLabel=Pipeline Name pipelineOptions.saveSettings=Save Operation Settings pipelineOptions.pipelineNamePrompt=Enter pipeline name here +pipelineOptions.selectOperation=Select Operation pipelineOptions.addOperationButton=Add operation pipelineOptions.pipelineHeader=Pipeline: pipelineOptions.saveButton=Download @@ -384,6 +386,11 @@ home.split-by-sections.title=Split PDF by Sections home.split-by-sections.desc=Divide each page of a PDF into smaller horizontal and vertical sections split-by-sections.tags=Section Split, Divide, Customize +home.AddStampRequest.title=Add Stamp to PDF +home.AddStampRequest.desc=Add text or add image stamps at set locations +AddStampRequest.tags=Stamp, Add image, center image, Watermark, PDF, Embed, Customize + + ########################### # # # WEB PAGES # @@ -459,8 +466,38 @@ HTMLToPDF.header=HTML To PDF HTMLToPDF.help=Accepts HTML files and ZIPs containing html/css/images etc required HTMLToPDF.submit=Convert HTMLToPDF.credit=Uses WeasyPrint +HTMLToPDF.zoom=Zoom level for displaying the website. +HTMLToPDF.pageWidth=Width of the page in centimeters. (Blank to default) +HTMLToPDF.pageHeight=Height of the page in centimeters. (Blank to default) +HTMLToPDF.marginTop=Top margin of the page in millimeters. (Blank to default) +HTMLToPDF.marginBottom=Bottom margin of the page in millimeters. (Blank to default) +HTMLToPDF.marginLeft=Left margin of the page in millimeters. (Blank to default) +HTMLToPDF.marginRight=Right margin of the page in millimeters. (Blank to default) +HTMLToPDF.printBackground=Render the background of websites. +HTMLToPDF.defaultHeader=Enable Default Header (Name and page number) +HTMLToPDF.cssMediaType=Change the CSS media type of the page. +HTMLToPDF.none=None +HTMLToPDF.print=Print +HTMLToPDF.screen=Screen +#AddStampRequest +AddStampRequest.header=Stamp PDF +AddStampRequest.title=Stamp PDF +AddStampRequest.stampType=Stamp Type +AddStampRequest.stampText=Stamp Text +AddStampRequest.stampImage=Stamp Image +AddStampRequest.alphabet=Alphabet +AddStampRequest.fontSize=Font/Image Size +AddStampRequest.rotation=Rotation +AddStampRequest.opacity=Opacity +AddStampRequest.position=Position +AddStampRequest.overrideX=Override X Coordinate +AddStampRequest.overrideY=Override Y Coordinate +AddStampRequest.customMargin=Custom Margin +AddStampRequest.customColor=Custom Text Color +AddStampRequest.submit=Submit + #sanitizePDF sanitizePDF.title=Sanitize PDF sanitizePDF.header=Sanitize a PDF file diff --git a/src/main/resources/messages_de_DE.properties b/src/main/resources/messages_de_DE.properties index 082918c37..ce6e25efa 100644 --- a/src/main/resources/messages_de_DE.properties +++ b/src/main/resources/messages_de_DE.properties @@ -1,4 +1,4 @@ -########### +########### # Generic # ########### # the direction that the language is written (ltr=left to right, rtl = right to left) @@ -44,7 +44,8 @@ blue=Blau custom=benutzerdefiniert... WorkInProgess=Work in progress, May not work or be buggy, Please report any ploblems! poweredBy=Powered by - +yes=Yes +no=No changedCredsMessage=Anmeldedaten geändert! notAuthenticatedMessage=Benutzer nicht authentifiziert. userNotFoundMessage=Benutzer nicht gefunden. @@ -68,6 +69,7 @@ pipelineOptions.header=Pipeline Configuration pipelineOptions.pipelineNameLabel=Pipeline Name pipelineOptions.saveSettings=Save Operation Settings pipelineOptions.pipelineNamePrompt=Enter pipeline name here +pipelineOptions.selectOperation=Select Operation pipelineOptions.addOperationButton=Add operation pipelineOptions.pipelineHeader=Pipeline: pipelineOptions.saveButton=Download @@ -340,22 +342,22 @@ HTMLToPDF.tags=markup,web-content,transformation,convert home.MarkdownToPDF.title=Markdown zu PDF home.MarkdownToPDF.desc=Konvertiert jede Markdown-Datei zu PDF -MarkdownToPDF.tags=markup,web-content,transformation,convert +MarkdownToPDF.tags=markup,web-content,transformation,konvertieren home.getPdfInfo.title=Alle Informationen anzeigen home.getPdfInfo.desc=Erfasst alle möglichen Informationen in einer PDF -getPdfInfo.tags=infomation,data,stats,statistics +getPdfInfo.tags=infomation,daten,statistik home.extractPage.title=Seite(n) extrahieren home.extractPage.desc=Extrahiert ausgewählte Seiten aus einer PDF -extractPage.tags=extract +extractPage.tags=extrahieren home.PdfToSinglePage.title=PDF zu einer Seite zusammenfassen home.PdfToSinglePage.desc=Fügt alle PDF-Seiten zu einer einzigen großen Seite zusammen -PdfToSinglePage.tags=single page +PdfToSinglePage.tags=einzelseite home.showJS.title=Javascript anzeigen @@ -363,26 +365,31 @@ home.showJS.desc=Alle Javascript Funktionen in einer PDF anzeigen showJS.tags=JS home.autoRedact.title=Automatisch zensieren/schwärzen -home.autoRedact.desc=Automatisches zensierten (Schwärzen) von Text in einer PDF-Datei basierend auf dem eingegebenen Text -showJS.tags=JS +home.autoRedact.desc=Automatisches Zensieren (Schwärzen) von Text in einer PDF-Datei basierend auf dem eingegebenen Text +showJS.tags=zensieren,schwärzen home.tableExtraxt.title=Tabelle extrahieren home.tableExtraxt.desc=Tabelle aus PDF in CSV extrahieren tableExtraxt.tags=CSV -home.autoSizeSplitPDF.title=Auto Split by Size/Count -home.autoSizeSplitPDF.desc=Split a single PDF into multiple documents based on size, page count, or document count -autoSizeSplitPDF.tags=pdf,split,document,organization +home.autoSizeSplitPDF.title=Teilen nach Größe/Anzahl +home.autoSizeSplitPDF.desc=Teilen Sie ein einzelnes PDF basierend auf Größe, Seitenanzahl oder Dokumentanzahl in mehrere Dokumente auf +autoSizeSplitPDF.tags=pdf,teilen,dokument,organisation -home.overlay-pdfs.title=Overlay PDFs -home.overlay-pdfs.desc=Overlays PDFs on-top of another PDF -overlay-pdfs.tags=Overlay +home.overlay-pdfs.title=PDF mit Overlay versehen +home.overlay-pdfs.desc=Überlagert eine PDF über eine andere PDF +overlay-pdfs.tags=overlay,überlagern + +home.split-by-sections.title=PDF in Abschnitte teilen +home.split-by-sections.desc=Teilen Sie jede Seite einer PDF-Datei in kleinere horizontale und vertikale Abschnitte auf +split-by-sections.tags=abschnitte,teilen,bearbeiten + +home.AddStampRequest.title=Add Stamp to PDF +home.AddStampRequest.desc=Add text or add image stamps at set locations +AddStampRequest.tags=Stamp, Add image, center image, Watermark, PDF, Embed, Customize -home.split-by-sections.title=Split PDF by Sections -home.split-by-sections.desc=Divide each page of a PDF into smaller horizontal and vertical sections -split-by-sections.tags=Section Split, Divide, Customize ########################### # # @@ -408,7 +415,7 @@ autoRedact.useRegexLabel=Regex verwenden autoRedact.wholeWordSearchLabel=Ganzes Wort suchen autoRedact.customPaddingLabel=Benutzerdefinierte Extra-Padding autoRedact.convertPDFToImageLabel=PDF in PDF-Bild konvertieren (zum Entfernen von Text hinter dem Kasten) -autoRedact.submitButton=zensieren +autoRedact.submitButton=Zensieren #showJS @@ -459,8 +466,38 @@ HTMLToPDF.header=HTML zu PDF HTMLToPDF.help=Akzeptiert HTML-Dateien und ZIPs mit html/css/images etc. HTMLToPDF.submit=Konvertieren HTMLToPDF.credit=Verwendet WeasyPrint +HTMLToPDF.zoom=Zoom level for displaying the website. +HTMLToPDF.pageWidth=Width of the page in centimeters. (Blank to default) +HTMLToPDF.pageHeight=Height of the page in centimeters. (Blank to default) +HTMLToPDF.marginTop=Top margin of the page in millimeters. (Blank to default) +HTMLToPDF.marginBottom=Bottom margin of the page in millimeters. (Blank to default) +HTMLToPDF.marginLeft=Left margin of the page in millimeters. (Blank to default) +HTMLToPDF.marginRight=Right margin of the page in millimeters. (Blank to default) +HTMLToPDF.printBackground=Render the background of websites. +HTMLToPDF.defaultHeader=Enable Default Header (Name and page number) +HTMLToPDF.cssMediaType=Change the CSS media type of the page. +HTMLToPDF.none=None +HTMLToPDF.print=Print +HTMLToPDF.screen=Screen +#AddStampRequest +AddStampRequest.header=Stamp PDF +AddStampRequest.title=Stamp PDF +AddStampRequest.stampType=Stamp Type +AddStampRequest.stampText=Stamp Text +AddStampRequest.stampImage=Stamp Image +AddStampRequest.alphabet=Alphabet +AddStampRequest.fontSize=Font/Image Size +AddStampRequest.rotation=Rotation +AddStampRequest.opacity=Opacity +AddStampRequest.position=Position +AddStampRequest.overrideX=Override X Coordinate +AddStampRequest.overrideY=Override Y Coordinate +AddStampRequest.customMargin=Custom Margin +AddStampRequest.customColor=Custom Text Color +AddStampRequest.submit=Submit + #sanitizePDF sanitizePDF.title=PDF Bereinigen sanitizePDF.header=PDF Bereinigen @@ -572,9 +609,9 @@ removeBlanks.submit=Leere Seiten entfernen #removeAnnotations -removeAnnotations.title=Remove Annotations -removeAnnotations.header=Remove Annotations -removeAnnotations.submit=Remove +removeAnnotations.title=Kommentare entfernen +removeAnnotations.header=Kommentare entfernen +removeAnnotations.submit=Entfernen #compare @@ -591,7 +628,7 @@ sign.header=PDFs signieren sign.upload=Bild hochladen sign.draw=Signatur zeichnen sign.text=Texteingabe -sign.clear=Klar +sign.clear=Leeren sign.add=Signieren @@ -883,44 +920,44 @@ PDFToXML.submit=Konvertieren #PDFToCSV PDFToCSV.title=PDF zu CSV PDFToCSV.header=PDF zu CSV -PDFToCSV.prompt=Choose page to extract table -PDFToCSV.submit=Extrakt +PDFToCSV.prompt=Seite mit der zu extrahierenden Tabelle wählen +PDFToCSV.submit=Extrahieren #split-by-size-or-count -split-by-size-or-count.header=Split PDF by Size or Count -split-by-size-or-count.type.label=Select Split Type -split-by-size-or-count.type.size=By Size -split-by-size-or-count.type.pageCount=By Page Count -split-by-size-or-count.type.docCount=By Document Count -split-by-size-or-count.value.label=Enter Value -split-by-size-or-count.value.placeholder=Enter size (e.g., 2MB or 3KB) or count (e.g., 5) -split-by-size-or-count.submit=Submit +split-by-size-or-count.header=PDF nach Größe oder Anzahl teilen +split-by-size-or-count.type.label=Teil-Modus wählen +split-by-size-or-count.type.size=Nach Größe +split-by-size-or-count.type.pageCount=Nach Anzahl Seiten +split-by-size-or-count.type.docCount=Nach Anzahl Dokumenten +split-by-size-or-count.value.label=Wert eingeben +split-by-size-or-count.value.placeholder=Größe eingeben (z. B.: 2MB oder 3KB) oder Anzahl (z. B.: 5) +split-by-size-or-count.submit=Erstellen #overlay-pdfs -overlay-pdfs.header=Overlay PDF Files -overlay-pdfs.baseFile.label=Select Base PDF File -overlay-pdfs.overlayFiles.label=Select Overlay PDF Files -overlay-pdfs.mode.label=Select Overlay Mode -overlay-pdfs.mode.sequential=Sequential Overlay -overlay-pdfs.mode.interleaved=Interleaved Overlay -overlay-pdfs.mode.fixedRepeat=Fixed Repeat Overlay -overlay-pdfs.counts.label=Overlay Counts (for Fixed Repeat Mode) -overlay-pdfs.counts.placeholder=Enter comma-separated counts (e.g., 2,3,1) -overlay-pdfs.position.label=Select Overlay Position -overlay-pdfs.position.foreground=Foreground -overlay-pdfs.position.background=Background -overlay-pdfs.submit=Submit +overlay-pdfs.header=PDF mit Overlay versehen +overlay-pdfs.baseFile.label=Basis-PDF-Datei auswählen +overlay-pdfs.overlayFiles.label=Overlay-PDF-Datei auswählen +overlay-pdfs.mode.label=Overlay-Modus auswählen +overlay-pdfs.mode.sequential=Sequentielles Overlay +overlay-pdfs.mode.interleaved=Verschachteltes Overlay +overlay-pdfs.mode.fixedRepeat=Feste-Wiederholung Overlay +overlay-pdfs.counts.label=Overlay Anzahl (für Feste-Wiederholung) +overlay-pdfs.counts.placeholder=Komma-separierte Anzahl eingeben (z. B.: 2,3,1) +overlay-pdfs.position.label=Overlay Position auswählen +overlay-pdfs.position.foreground=Vordergrund +overlay-pdfs.position.background=Hintergrund +overlay-pdfs.submit=Erstellen #split-by-sections -split-by-sections.title=Split PDF by Sections -split-by-sections.header=Split PDF into Sections -split-by-sections.horizontal.label=Horizontal Divisions -split-by-sections.vertical.label=Vertical Divisions -split-by-sections.horizontal.placeholder=Enter number of horizontal divisions -split-by-sections.vertical.placeholder=Enter number of vertical divisions -split-by-sections.submit=Split PDF +split-by-sections.title=PDF in Abschnitte teilen +split-by-sections.header=PDF in Abschnitte teilen +split-by-sections.horizontal.label=Horizontale Teiler +split-by-sections.vertical.label=Vertikale Teiler +split-by-sections.horizontal.placeholder=Anzahl horizontaler Teiler eingeben +split-by-sections.vertical.placeholder=Anzahl vertikaler Teiler eingeben +split-by-sections.submit=PDF teilen #licenses @@ -931,4 +968,3 @@ licenses.module=Module licenses.version=Version licenses.license=License - diff --git a/src/main/resources/messages_el_GR.properties b/src/main/resources/messages_el_GR.properties index 83bf96b46..2e45c1413 100644 --- a/src/main/resources/messages_el_GR.properties +++ b/src/main/resources/messages_el_GR.properties @@ -44,7 +44,8 @@ blue=\u039C\u03C0\u03BB\u03AD custom=\u03A0\u03C1\u03BF\u03C3\u03B1\u03C1\u03BC\u03BF\u03B3\u03AE... WorkInProgess=Work in progress, May not work or be buggy, Please report any ploblems! poweredBy=Powered by - +yes=Yes +no=No changedCredsMessage=\u03A4\u03B1 \u03B4\u03B9\u03B1\u03C0\u03B9\u03C3\u03C4\u03B5\u03C5\u03C4\u03AE\u03C1\u03B9\u03B1 \u03AD\u03C7\u03BF\u03C5\u03BD \u03B1\u03BB\u03BB\u03AC\u03BE\u03B5\u03B9! notAuthenticatedMessage=\u039F \u03C7\u03C1\u03AE\u03C3\u03C4\u03B7\u03C2 \u03B4\u03B5\u03BD \u03AD\u03C7\u03B5\u03B9 \u03B1\u03C5\u03B8\u03B5\u03BD\u03C4\u03B9\u03BA\u03BF\u03C0\u03BF\u03B9\u03B7\u03B8\u03B5\u03AF. userNotFoundMessage=\u039F \u03C7\u03C1\u03AE\u03C3\u03C4\u03B7\u03C2 \u03B4\u03B5\u03BD \u03B2\u03C1\u03AD\u03B8\u03B7\u03BA\u03B5. @@ -68,6 +69,7 @@ pipelineOptions.header=Pipeline Configuration pipelineOptions.pipelineNameLabel=Pipeline Name pipelineOptions.saveSettings=Save Operation Settings pipelineOptions.pipelineNamePrompt=Enter pipeline name here +pipelineOptions.selectOperation=Select Operation pipelineOptions.addOperationButton=Add operation pipelineOptions.pipelineHeader=Pipeline: pipelineOptions.saveButton=Download @@ -384,6 +386,11 @@ home.split-by-sections.title=Split PDF by Sections home.split-by-sections.desc=Divide each page of a PDF into smaller horizontal and vertical sections split-by-sections.tags=Section Split, Divide, Customize +home.AddStampRequest.title=Add Stamp to PDF +home.AddStampRequest.desc=Add text or add image stamps at set locations +AddStampRequest.tags=Stamp, Add image, center image, Watermark, PDF, Embed, Customize + + ########################### # # # WEB PAGES # @@ -459,8 +466,38 @@ HTMLToPDF.header=HTML \u03C3\u03B5 PDF HTMLToPDF.help=\u0394\u03AD\u03C7\u03B5\u03C4\u03B1\u03B9 \u03B1\u03C1\u03C7\u03B5\u03AF\u03B1 \u03C4\u03CD\u03C0\u03BF\u03C5 HTML \u03BA\u03B1\u03B9 \u03C4\u03CD\u03C0\u03BF\u03C5 ZIP \u03C0\u03BF\u03C5 \u03C0\u03B5\u03C1\u03B9\u03AD\u03C7\u03BF\u03C5\u03BD html/css/\u03B5\u03B9\u03BA\u03CC\u03BD\u03B5\u03C2 \u03BA.\u03BB\u03C0. \u03C0\u03BF\u03C5 \u03B1\u03C0\u03B1\u03B9\u03C4\u03BF\u03CD\u03BD\u03C4\u03B1\u03B9 HTMLToPDF.submit=\u039C\u03B5\u03C4\u03B1\u03C4\u03C1\u03BF\u03C0\u03AE HTMLToPDF.credit=\u03A7\u03C1\u03B7\u03C3\u03B9\u03BC\u03BF\u03C0\u03BF\u03B9\u03B5\u03AF WeasyPrint +HTMLToPDF.zoom=Zoom level for displaying the website. +HTMLToPDF.pageWidth=Width of the page in centimeters. (Blank to default) +HTMLToPDF.pageHeight=Height of the page in centimeters. (Blank to default) +HTMLToPDF.marginTop=Top margin of the page in millimeters. (Blank to default) +HTMLToPDF.marginBottom=Bottom margin of the page in millimeters. (Blank to default) +HTMLToPDF.marginLeft=Left margin of the page in millimeters. (Blank to default) +HTMLToPDF.marginRight=Right margin of the page in millimeters. (Blank to default) +HTMLToPDF.printBackground=Render the background of websites. +HTMLToPDF.defaultHeader=Enable Default Header (Name and page number) +HTMLToPDF.cssMediaType=Change the CSS media type of the page. +HTMLToPDF.none=None +HTMLToPDF.print=Print +HTMLToPDF.screen=Screen +#AddStampRequest +AddStampRequest.header=Stamp PDF +AddStampRequest.title=Stamp PDF +AddStampRequest.stampType=Stamp Type +AddStampRequest.stampText=Stamp Text +AddStampRequest.stampImage=Stamp Image +AddStampRequest.alphabet=Alphabet +AddStampRequest.fontSize=Font/Image Size +AddStampRequest.rotation=Rotation +AddStampRequest.opacity=Opacity +AddStampRequest.position=Position +AddStampRequest.overrideX=Override X Coordinate +AddStampRequest.overrideY=Override Y Coordinate +AddStampRequest.customMargin=Custom Margin +AddStampRequest.customColor=Custom Text Color +AddStampRequest.submit=Submit + #sanitizePDF sanitizePDF.title=\u0391\u03C0\u03BF\u03BB\u03CD\u03BC\u03B1\u03BD\u03C3\u03B7 PDF sanitizePDF.header=\u0391\u03C0\u03BF\u03BB\u03CD\u03BC\u03B1\u03BD\u03C3\u03B7 \u03B5\u03BD\u03CC\u03C2 PDF \u03B1\u03C1\u03C7\u03B5\u03AF\u03BF\u03C5 diff --git a/src/main/resources/messages_en_GB.properties b/src/main/resources/messages_en_GB.properties index c6da18c2b..aeda5c471 100644 --- a/src/main/resources/messages_en_GB.properties +++ b/src/main/resources/messages_en_GB.properties @@ -44,7 +44,8 @@ blue=Blue custom=Custom... WorkInProgess=Work in progress, May not work or be buggy, Please report any ploblems! poweredBy=Powered by - +yes=Yes +no=No changedCredsMessage=Credentials changed! notAuthenticatedMessage=User not authenticated. userNotFoundMessage=User not found. @@ -385,6 +386,11 @@ home.split-by-sections.title=Split PDF by Sections home.split-by-sections.desc=Divide each page of a PDF into smaller horizontal and vertical sections split-by-sections.tags=Section Split, Divide, Customize +home.AddStampRequest.title=Add Stamp to PDF +home.AddStampRequest.desc=Add text or add image stamps at set locations +AddStampRequest.tags=Stamp, Add image, center image, Watermark, PDF, Embed, Customize + + ########################### # # # WEB PAGES # @@ -460,8 +466,38 @@ HTMLToPDF.header=HTML To PDF HTMLToPDF.help=Accepts HTML files and ZIPs containing html/css/images etc required HTMLToPDF.submit=Convert HTMLToPDF.credit=Uses WeasyPrint +HTMLToPDF.zoom=Zoom level for displaying the website. +HTMLToPDF.pageWidth=Width of the page in centimeters. (Blank to default) +HTMLToPDF.pageHeight=Height of the page in centimeters. (Blank to default) +HTMLToPDF.marginTop=Top margin of the page in millimeters. (Blank to default) +HTMLToPDF.marginBottom=Bottom margin of the page in millimeters. (Blank to default) +HTMLToPDF.marginLeft=Left margin of the page in millimeters. (Blank to default) +HTMLToPDF.marginRight=Right margin of the page in millimeters. (Blank to default) +HTMLToPDF.printBackground=Render the background of websites. +HTMLToPDF.defaultHeader=Enable Default Header (Name and page number) +HTMLToPDF.cssMediaType=Change the CSS media type of the page. +HTMLToPDF.none=None +HTMLToPDF.print=Print +HTMLToPDF.screen=Screen +#AddStampRequest +AddStampRequest.header=Stamp PDF +AddStampRequest.title=Stamp PDF +AddStampRequest.stampType=Stamp Type +AddStampRequest.stampText=Stamp Text +AddStampRequest.stampImage=Stamp Image +AddStampRequest.alphabet=Alphabet +AddStampRequest.fontSize=Font/Image Size +AddStampRequest.rotation=Rotation +AddStampRequest.opacity=Opacity +AddStampRequest.position=Position +AddStampRequest.overrideX=Override X Coordinate +AddStampRequest.overrideY=Override Y Coordinate +AddStampRequest.customMargin=Custom Margin +AddStampRequest.customColor=Custom Text Color +AddStampRequest.submit=Submit + #sanitizePDF sanitizePDF.title=Sanitize PDF sanitizePDF.header=Sanitize a PDF file diff --git a/src/main/resources/messages_en_US.properties b/src/main/resources/messages_en_US.properties index d6f7ef711..58bdafda8 100644 --- a/src/main/resources/messages_en_US.properties +++ b/src/main/resources/messages_en_US.properties @@ -44,7 +44,8 @@ blue=Blue custom=Custom... WorkInProgess=Work in progress, May not work or be buggy, Please report any ploblems! poweredBy=Powered by - +yes=Yes +no=No changedCredsMessage=Credentials changed! notAuthenticatedMessage=User not authenticated. userNotFoundMessage=User not found. @@ -68,6 +69,7 @@ pipelineOptions.header=Pipeline Configuration pipelineOptions.pipelineNameLabel=Pipeline Name pipelineOptions.saveSettings=Save Operation Settings pipelineOptions.pipelineNamePrompt=Enter pipeline name here +pipelineOptions.selectOperation=Select Operation pipelineOptions.addOperationButton=Add operation pipelineOptions.pipelineHeader=Pipeline: pipelineOptions.saveButton=Download @@ -384,6 +386,11 @@ home.split-by-sections.title=Split PDF by Sections home.split-by-sections.desc=Divide each page of a PDF into smaller horizontal and vertical sections split-by-sections.tags=Section Split, Divide, Customize +home.AddStampRequest.title=Add Stamp to PDF +home.AddStampRequest.desc=Add text or add image stamps at set locations +AddStampRequest.tags=Stamp, Add image, center image, Watermark, PDF, Embed, Customize + + ########################### # # # WEB PAGES # @@ -459,8 +466,38 @@ HTMLToPDF.header=HTML To PDF HTMLToPDF.help=Accepts HTML files and ZIPs containing html/css/images etc required HTMLToPDF.submit=Convert HTMLToPDF.credit=Uses WeasyPrint +HTMLToPDF.zoom=Zoom level for displaying the website. +HTMLToPDF.pageWidth=Width of the page in centimeters. (Blank to default) +HTMLToPDF.pageHeight=Height of the page in centimeters. (Blank to default) +HTMLToPDF.marginTop=Top margin of the page in millimeters. (Blank to default) +HTMLToPDF.marginBottom=Bottom margin of the page in millimeters. (Blank to default) +HTMLToPDF.marginLeft=Left margin of the page in millimeters. (Blank to default) +HTMLToPDF.marginRight=Right margin of the page in millimeters. (Blank to default) +HTMLToPDF.printBackground=Render the background of websites. +HTMLToPDF.defaultHeader=Enable Default Header (Name and page number) +HTMLToPDF.cssMediaType=Change the CSS media type of the page. +HTMLToPDF.none=None +HTMLToPDF.print=Print +HTMLToPDF.screen=Screen +#AddStampRequest +AddStampRequest.header=Stamp PDF +AddStampRequest.title=Stamp PDF +AddStampRequest.stampType=Stamp Type +AddStampRequest.stampText=Stamp Text +AddStampRequest.stampImage=Stamp Image +AddStampRequest.alphabet=Alphabet +AddStampRequest.fontSize=Font/Image Size +AddStampRequest.rotation=Rotation +AddStampRequest.opacity=Opacity +AddStampRequest.position=Position +AddStampRequest.overrideX=Override X Coordinate +AddStampRequest.overrideY=Override Y Coordinate +AddStampRequest.customMargin=Custom Margin +AddStampRequest.customColor=Custom Text Color +AddStampRequest.submit=Submit + #sanitizePDF sanitizePDF.title=Sanitize PDF sanitizePDF.header=Sanitize a PDF file diff --git a/src/main/resources/messages_es_ES.properties b/src/main/resources/messages_es_ES.properties index 887b14de0..538cc776f 100644 --- a/src/main/resources/messages_es_ES.properties +++ b/src/main/resources/messages_es_ES.properties @@ -44,7 +44,8 @@ blue=Azul custom=Personalizado... WorkInProgess=Work in progress, May not work or be buggy, Please report any ploblems! poweredBy=Powered by - +yes=Yes +no=No changedCredsMessage=Se cambiaron las credenciales! notAuthenticatedMessage=Usuario no autentificado. userNotFoundMessage=Usuario no encontrado. @@ -68,6 +69,7 @@ pipelineOptions.header=Pipeline Configuration pipelineOptions.pipelineNameLabel=Pipeline Name pipelineOptions.saveSettings=Save Operation Settings pipelineOptions.pipelineNamePrompt=Enter pipeline name here +pipelineOptions.selectOperation=Select Operation pipelineOptions.addOperationButton=Add operation pipelineOptions.pipelineHeader=Pipeline: pipelineOptions.saveButton=Download @@ -384,6 +386,11 @@ home.split-by-sections.title=Dividir PDF por Secciones home.split-by-sections.desc=Dividir cada página de un PDF en secciones verticales y horizontales más pequeñas split-by-sections.tags=Dividir sección, Dividir, Personalizar +home.AddStampRequest.title=Add Stamp to PDF +home.AddStampRequest.desc=Add text or add image stamps at set locations +AddStampRequest.tags=Stamp, Add image, center image, Watermark, PDF, Embed, Customize + + ########################### # # # WEB PAGES # @@ -459,8 +466,38 @@ HTMLToPDF.header=HTML a PDF HTMLToPDF.help=Acepta archivos HTML y ZIPs conteniendo los html/css/imágenes, etc, requeridas HTMLToPDF.submit=Convertir HTMLToPDF.credit=Utiliza WeasyPrint +HTMLToPDF.zoom=Zoom level for displaying the website. +HTMLToPDF.pageWidth=Width of the page in centimeters. (Blank to default) +HTMLToPDF.pageHeight=Height of the page in centimeters. (Blank to default) +HTMLToPDF.marginTop=Top margin of the page in millimeters. (Blank to default) +HTMLToPDF.marginBottom=Bottom margin of the page in millimeters. (Blank to default) +HTMLToPDF.marginLeft=Left margin of the page in millimeters. (Blank to default) +HTMLToPDF.marginRight=Right margin of the page in millimeters. (Blank to default) +HTMLToPDF.printBackground=Render the background of websites. +HTMLToPDF.defaultHeader=Enable Default Header (Name and page number) +HTMLToPDF.cssMediaType=Change the CSS media type of the page. +HTMLToPDF.none=None +HTMLToPDF.print=Print +HTMLToPDF.screen=Screen +#AddStampRequest +AddStampRequest.header=Stamp PDF +AddStampRequest.title=Stamp PDF +AddStampRequest.stampType=Stamp Type +AddStampRequest.stampText=Stamp Text +AddStampRequest.stampImage=Stamp Image +AddStampRequest.alphabet=Alphabet +AddStampRequest.fontSize=Font/Image Size +AddStampRequest.rotation=Rotation +AddStampRequest.opacity=Opacity +AddStampRequest.position=Position +AddStampRequest.overrideX=Override X Coordinate +AddStampRequest.overrideY=Override Y Coordinate +AddStampRequest.customMargin=Custom Margin +AddStampRequest.customColor=Custom Text Color +AddStampRequest.submit=Submit + #sanitizePDF sanitizePDF.title=Desinfectar archivo PDF sanitizePDF.header=Desinfectar un archivo PDF diff --git a/src/main/resources/messages_eu_ES.properties b/src/main/resources/messages_eu_ES.properties index ef9b628a6..4a3e85523 100644 --- a/src/main/resources/messages_eu_ES.properties +++ b/src/main/resources/messages_eu_ES.properties @@ -44,7 +44,8 @@ blue=Urdina custom=Pertsonalizatu... WorkInProgess=Work in progress, May not work or be buggy, Please report any ploblems! poweredBy=Powered by - +yes=Yes +no=No changedCredsMessage=Credentials changed! notAuthenticatedMessage=User not authenticated. userNotFoundMessage=User not found. @@ -68,6 +69,7 @@ pipelineOptions.header=Pipeline Configuration pipelineOptions.pipelineNameLabel=Pipeline Name pipelineOptions.saveSettings=Save Operation Settings pipelineOptions.pipelineNamePrompt=Enter pipeline name here +pipelineOptions.selectOperation=Select Operation pipelineOptions.addOperationButton=Add operation pipelineOptions.pipelineHeader=Pipeline: pipelineOptions.saveButton=Download @@ -384,6 +386,11 @@ home.split-by-sections.title=Split PDF by Sections home.split-by-sections.desc=Divide each page of a PDF into smaller horizontal and vertical sections split-by-sections.tags=Section Split, Divide, Customize +home.AddStampRequest.title=Add Stamp to PDF +home.AddStampRequest.desc=Add text or add image stamps at set locations +AddStampRequest.tags=Stamp, Add image, center image, Watermark, PDF, Embed, Customize + + ########################### # # # WEB PAGES # @@ -459,8 +466,38 @@ HTMLToPDF.header=HTML bat PDF-ra HTMLToPDF.help=Html/css/images etab dituen HTML eta Zip fitxategiak onartzen ditu HTMLToPDF.submit=Bihurtu HTMLToPDF.credit=WeasyPrint darabil +HTMLToPDF.zoom=Zoom level for displaying the website. +HTMLToPDF.pageWidth=Width of the page in centimeters. (Blank to default) +HTMLToPDF.pageHeight=Height of the page in centimeters. (Blank to default) +HTMLToPDF.marginTop=Top margin of the page in millimeters. (Blank to default) +HTMLToPDF.marginBottom=Bottom margin of the page in millimeters. (Blank to default) +HTMLToPDF.marginLeft=Left margin of the page in millimeters. (Blank to default) +HTMLToPDF.marginRight=Right margin of the page in millimeters. (Blank to default) +HTMLToPDF.printBackground=Render the background of websites. +HTMLToPDF.defaultHeader=Enable Default Header (Name and page number) +HTMLToPDF.cssMediaType=Change the CSS media type of the page. +HTMLToPDF.none=None +HTMLToPDF.print=Print +HTMLToPDF.screen=Screen +#AddStampRequest +AddStampRequest.header=Stamp PDF +AddStampRequest.title=Stamp PDF +AddStampRequest.stampType=Stamp Type +AddStampRequest.stampText=Stamp Text +AddStampRequest.stampImage=Stamp Image +AddStampRequest.alphabet=Alphabet +AddStampRequest.fontSize=Font/Image Size +AddStampRequest.rotation=Rotation +AddStampRequest.opacity=Opacity +AddStampRequest.position=Position +AddStampRequest.overrideX=Override X Coordinate +AddStampRequest.overrideY=Override Y Coordinate +AddStampRequest.customMargin=Custom Margin +AddStampRequest.customColor=Custom Text Color +AddStampRequest.submit=Submit + #sanitizePDF sanitizePDF.title=PDF-a desinfektatu sanitizePDF.header=PDF fitxategi bat desinfektatu diff --git a/src/main/resources/messages_fr_FR.properties b/src/main/resources/messages_fr_FR.properties index 80da3038d..d6462b66e 100644 --- a/src/main/resources/messages_fr_FR.properties +++ b/src/main/resources/messages_fr_FR.properties @@ -44,7 +44,8 @@ blue=Bleu custom=Personnalisé\u2026 WorkInProgess=Work in progress, May not work or be buggy, Please report any ploblems! poweredBy=Powered by - +yes=Yes +no=No changedCredsMessage=Les identifiants ont été mis à jour\u00a0! notAuthenticatedMessage=Utilisateur non authentifié. userNotFoundMessage=Utilisateur non trouvé. @@ -68,6 +69,7 @@ pipelineOptions.header=Pipeline Configuration pipelineOptions.pipelineNameLabel=Pipeline Name pipelineOptions.saveSettings=Save Operation Settings pipelineOptions.pipelineNamePrompt=Enter pipeline name here +pipelineOptions.selectOperation=Select Operation pipelineOptions.addOperationButton=Add operation pipelineOptions.pipelineHeader=Pipeline: pipelineOptions.saveButton=Download @@ -384,6 +386,11 @@ home.split-by-sections.title=Split PDF by Sections home.split-by-sections.desc=Divide each page of a PDF into smaller horizontal and vertical sections split-by-sections.tags=Section Split, Divide, Customize +home.AddStampRequest.title=Add Stamp to PDF +home.AddStampRequest.desc=Add text or add image stamps at set locations +AddStampRequest.tags=Stamp, Add image, center image, Watermark, PDF, Embed, Customize + + ########################### # # # WEB PAGES # @@ -459,8 +466,38 @@ HTMLToPDF.header=HTML en PDF HTMLToPDF.help=Accepte les fichiers HTML et les ZIP contenant du HTML, du CSS, des images, etc. (requis). HTMLToPDF.submit=Convertir HTMLToPDF.credit=Utilise WeasyPrint. +HTMLToPDF.zoom=Zoom level for displaying the website. +HTMLToPDF.pageWidth=Width of the page in centimeters. (Blank to default) +HTMLToPDF.pageHeight=Height of the page in centimeters. (Blank to default) +HTMLToPDF.marginTop=Top margin of the page in millimeters. (Blank to default) +HTMLToPDF.marginBottom=Bottom margin of the page in millimeters. (Blank to default) +HTMLToPDF.marginLeft=Left margin of the page in millimeters. (Blank to default) +HTMLToPDF.marginRight=Right margin of the page in millimeters. (Blank to default) +HTMLToPDF.printBackground=Render the background of websites. +HTMLToPDF.defaultHeader=Enable Default Header (Name and page number) +HTMLToPDF.cssMediaType=Change the CSS media type of the page. +HTMLToPDF.none=None +HTMLToPDF.print=Print +HTMLToPDF.screen=Screen +#AddStampRequest +AddStampRequest.header=Stamp PDF +AddStampRequest.title=Stamp PDF +AddStampRequest.stampType=Stamp Type +AddStampRequest.stampText=Stamp Text +AddStampRequest.stampImage=Stamp Image +AddStampRequest.alphabet=Alphabet +AddStampRequest.fontSize=Font/Image Size +AddStampRequest.rotation=Rotation +AddStampRequest.opacity=Opacity +AddStampRequest.position=Position +AddStampRequest.overrideX=Override X Coordinate +AddStampRequest.overrideY=Override Y Coordinate +AddStampRequest.customMargin=Custom Margin +AddStampRequest.customColor=Custom Text Color +AddStampRequest.submit=Submit + #sanitizePDF sanitizePDF.title=Assainir sanitizePDF.header=Assainir diff --git a/src/main/resources/messages_hi_IN.properties b/src/main/resources/messages_hi_IN.properties index a44f3c5b4..5b33891df 100644 --- a/src/main/resources/messages_hi_IN.properties +++ b/src/main/resources/messages_hi_IN.properties @@ -44,7 +44,8 @@ blue=नीला custom=कस्टम... WorkInProgess=Work in progress, May not work or be buggy, Please report any ploblems! poweredBy=Powered by - +yes=Yes +no=No changedCredsMessage=क्रेडेंशियल्स बदल दी गईं! notAuthenticatedMessage=उपयोगकर्ता प्रमाणित नहीं है। userNotFoundMessage=उपयोगकर्ता नहीं मिला। @@ -68,6 +69,7 @@ pipelineOptions.header=Pipeline Configuration pipelineOptions.pipelineNameLabel=Pipeline Name pipelineOptions.saveSettings=Save Operation Settings pipelineOptions.pipelineNamePrompt=Enter pipeline name here +pipelineOptions.selectOperation=Select Operation pipelineOptions.addOperationButton=Add operation pipelineOptions.pipelineHeader=Pipeline: pipelineOptions.saveButton=Download @@ -384,6 +386,11 @@ home.split-by-sections.title=खंडों से पीडीएफ़ वि home.split-by-sections.desc=पीडीएफ़ के प्रत्येक पृष्ठ को छोटे से छोटे क्षैतिज और ऊर्ध्वाधर खंडों में विभाजित करें split-by-sections.tags=खंड विभाजन, विभाजित करें, अनुकूलित +home.AddStampRequest.title=Add Stamp to PDF +home.AddStampRequest.desc=Add text or add image stamps at set locations +AddStampRequest.tags=Stamp, Add image, center image, Watermark, PDF, Embed, Customize + + ########################### # # # WEB PAGES # @@ -459,8 +466,38 @@ HTMLToPDF.header=HTML से पीडीएफ़ HTMLToPDF.help=HTML फ़ाइलों और html/css/images आदि को आत्मसात करने वाले ZIPs को स्वीकार करता है HTMLToPDF.submit=रूपांतरित करें HTMLToPDF.credit=WeasyPrint का प्रयोग होता है +HTMLToPDF.zoom=Zoom level for displaying the website. +HTMLToPDF.pageWidth=Width of the page in centimeters. (Blank to default) +HTMLToPDF.pageHeight=Height of the page in centimeters. (Blank to default) +HTMLToPDF.marginTop=Top margin of the page in millimeters. (Blank to default) +HTMLToPDF.marginBottom=Bottom margin of the page in millimeters. (Blank to default) +HTMLToPDF.marginLeft=Left margin of the page in millimeters. (Blank to default) +HTMLToPDF.marginRight=Right margin of the page in millimeters. (Blank to default) +HTMLToPDF.printBackground=Render the background of websites. +HTMLToPDF.defaultHeader=Enable Default Header (Name and page number) +HTMLToPDF.cssMediaType=Change the CSS media type of the page. +HTMLToPDF.none=None +HTMLToPDF.print=Print +HTMLToPDF.screen=Screen +#AddStampRequest +AddStampRequest.header=Stamp PDF +AddStampRequest.title=Stamp PDF +AddStampRequest.stampType=Stamp Type +AddStampRequest.stampText=Stamp Text +AddStampRequest.stampImage=Stamp Image +AddStampRequest.alphabet=Alphabet +AddStampRequest.fontSize=Font/Image Size +AddStampRequest.rotation=Rotation +AddStampRequest.opacity=Opacity +AddStampRequest.position=Position +AddStampRequest.overrideX=Override X Coordinate +AddStampRequest.overrideY=Override Y Coordinate +AddStampRequest.customMargin=Custom Margin +AddStampRequest.customColor=Custom Text Color +AddStampRequest.submit=Submit + #sanitizePDF sanitizePDF.title=पीडीएफ़ को सफाई करें sanitizePDF.header=एक पीडीएफ़ फ़ाइल को सफाई करें diff --git a/src/main/resources/messages_hu_HU.properties b/src/main/resources/messages_hu_HU.properties index 7a43b8ce3..c1364ce15 100644 --- a/src/main/resources/messages_hu_HU.properties +++ b/src/main/resources/messages_hu_HU.properties @@ -44,7 +44,8 @@ blue=Kék custom=Egyedi... WorkInProgess=Work in progress, May not work or be buggy, Please report any ploblems! poweredBy=Powered by - +yes=Yes +no=No changedCredsMessage=A hitelek megváltoztak! notAuthenticatedMessage=Felhasználó nincs hitelesítve. userNotFoundMessage=A felhasználó nem található. @@ -68,6 +69,7 @@ pipelineOptions.header=Pipeline Configuration pipelineOptions.pipelineNameLabel=Pipeline Name pipelineOptions.saveSettings=Save Operation Settings pipelineOptions.pipelineNamePrompt=Enter pipeline name here +pipelineOptions.selectOperation=Select Operation pipelineOptions.addOperationButton=Add operation pipelineOptions.pipelineHeader=Pipeline: pipelineOptions.saveButton=Download @@ -384,6 +386,11 @@ home.split-by-sections.title=PDF Szakaszokra osztása home.split-by-sections.desc=Minden oldal felosztása kisebb vízszintes és függőleges szakaszokra split-by-sections.tags=Szakasz elosztás, felosztás, testreszabás +home.AddStampRequest.title=Add Stamp to PDF +home.AddStampRequest.desc=Add text or add image stamps at set locations +AddStampRequest.tags=Stamp, Add image, center image, Watermark, PDF, Embed, Customize + + ########################### # # # WEB PAGES # @@ -459,8 +466,38 @@ HTMLToPDF.header=HTML >> PDF HTMLToPDF.help=Elfogad HTML fájlokat és ZIP-fájlokat, amelyek tartalmaznak html/css/képeket stb. HTMLToPDF.submit=Átalakítás HTMLToPDF.credit=WeasyPrint alkalmazása +HTMLToPDF.zoom=Zoom level for displaying the website. +HTMLToPDF.pageWidth=Width of the page in centimeters. (Blank to default) +HTMLToPDF.pageHeight=Height of the page in centimeters. (Blank to default) +HTMLToPDF.marginTop=Top margin of the page in millimeters. (Blank to default) +HTMLToPDF.marginBottom=Bottom margin of the page in millimeters. (Blank to default) +HTMLToPDF.marginLeft=Left margin of the page in millimeters. (Blank to default) +HTMLToPDF.marginRight=Right margin of the page in millimeters. (Blank to default) +HTMLToPDF.printBackground=Render the background of websites. +HTMLToPDF.defaultHeader=Enable Default Header (Name and page number) +HTMLToPDF.cssMediaType=Change the CSS media type of the page. +HTMLToPDF.none=None +HTMLToPDF.print=Print +HTMLToPDF.screen=Screen +#AddStampRequest +AddStampRequest.header=Stamp PDF +AddStampRequest.title=Stamp PDF +AddStampRequest.stampType=Stamp Type +AddStampRequest.stampText=Stamp Text +AddStampRequest.stampImage=Stamp Image +AddStampRequest.alphabet=Alphabet +AddStampRequest.fontSize=Font/Image Size +AddStampRequest.rotation=Rotation +AddStampRequest.opacity=Opacity +AddStampRequest.position=Position +AddStampRequest.overrideX=Override X Coordinate +AddStampRequest.overrideY=Override Y Coordinate +AddStampRequest.customMargin=Custom Margin +AddStampRequest.customColor=Custom Text Color +AddStampRequest.submit=Submit + #sanitizePDF sanitizePDF.title=PDF tisztítása sanitizePDF.header=PDF fájl megtisztítása diff --git a/src/main/resources/messages_id_ID.properties b/src/main/resources/messages_id_ID.properties index b3ed56a9b..926dcd1bd 100644 --- a/src/main/resources/messages_id_ID.properties +++ b/src/main/resources/messages_id_ID.properties @@ -44,7 +44,8 @@ blue=Biru custom=Kustom... WorkInProgess=Work in progress, May not work or be buggy, Please report any ploblems! poweredBy=Powered by - +yes=Yes +no=No changedCredsMessage=Kredensial berubah!! notAuthenticatedMessage=Pengguna tidak ter-autentikasi. userNotFoundMessage=Pengguna tidak ditemukan. @@ -68,6 +69,7 @@ pipelineOptions.header=Pipeline Configuration pipelineOptions.pipelineNameLabel=Pipeline Name pipelineOptions.saveSettings=Save Operation Settings pipelineOptions.pipelineNamePrompt=Enter pipeline name here +pipelineOptions.selectOperation=Select Operation pipelineOptions.addOperationButton=Add operation pipelineOptions.pipelineHeader=Pipeline: pipelineOptions.saveButton=Download @@ -384,6 +386,11 @@ home.split-by-sections.title=Membagi PDF berdasarkan Bagian home.split-by-sections.desc=Membagi setiap halaman PDF menjadi beberapa bagian horizontal dan vertikal yang lebih kecil split-by-sections.tags=Membagi Bagian, Membagi, Menyesuaikan +home.AddStampRequest.title=Add Stamp to PDF +home.AddStampRequest.desc=Add text or add image stamps at set locations +AddStampRequest.tags=Stamp, Add image, center image, Watermark, PDF, Embed, Customize + + ########################### # # # WEB PAGES # @@ -459,8 +466,38 @@ HTMLToPDF.header=HTML Ke PDF HTMLToPDF.help=Menerima berkas HTML dan ZIP yang berisi html / css / gambar, dll yang diperlukan HTMLToPDF.submit=Konversi HTMLToPDF.credit=Menggunakan WeasyPrint +HTMLToPDF.zoom=Zoom level for displaying the website. +HTMLToPDF.pageWidth=Width of the page in centimeters. (Blank to default) +HTMLToPDF.pageHeight=Height of the page in centimeters. (Blank to default) +HTMLToPDF.marginTop=Top margin of the page in millimeters. (Blank to default) +HTMLToPDF.marginBottom=Bottom margin of the page in millimeters. (Blank to default) +HTMLToPDF.marginLeft=Left margin of the page in millimeters. (Blank to default) +HTMLToPDF.marginRight=Right margin of the page in millimeters. (Blank to default) +HTMLToPDF.printBackground=Render the background of websites. +HTMLToPDF.defaultHeader=Enable Default Header (Name and page number) +HTMLToPDF.cssMediaType=Change the CSS media type of the page. +HTMLToPDF.none=None +HTMLToPDF.print=Print +HTMLToPDF.screen=Screen +#AddStampRequest +AddStampRequest.header=Stamp PDF +AddStampRequest.title=Stamp PDF +AddStampRequest.stampType=Stamp Type +AddStampRequest.stampText=Stamp Text +AddStampRequest.stampImage=Stamp Image +AddStampRequest.alphabet=Alphabet +AddStampRequest.fontSize=Font/Image Size +AddStampRequest.rotation=Rotation +AddStampRequest.opacity=Opacity +AddStampRequest.position=Position +AddStampRequest.overrideX=Override X Coordinate +AddStampRequest.overrideY=Override Y Coordinate +AddStampRequest.customMargin=Custom Margin +AddStampRequest.customColor=Custom Text Color +AddStampRequest.submit=Submit + #sanitizePDF sanitizePDF.title=Bersihkan PDF sanitizePDF.header=Membersihkan berkas PDF diff --git a/src/main/resources/messages_it_IT.properties b/src/main/resources/messages_it_IT.properties index 7ef311ba4..86485d206 100644 --- a/src/main/resources/messages_it_IT.properties +++ b/src/main/resources/messages_it_IT.properties @@ -44,7 +44,8 @@ blue=Blu custom=Personalizzato WorkInProgess=Lavori in corso, potrebbe non funzionare o essere difettoso, segnalare eventuali problemi! poweredBy=Alimentato da - +yes=Si +no=No changedCredsMessage=Credenziali cambiate! notAuthenticatedMessage=Utente non autenticato. userNotFoundMessage=Utente non trovato. @@ -68,6 +69,7 @@ pipelineOptions.header=Configurazione Pipeline pipelineOptions.pipelineNameLabel=Nome della Pipeline pipelineOptions.saveSettings=Salva Impostazioni pipelineOptions.pipelineNamePrompt=Inserisci qui il nome della pipeline +pipelineOptions.selectOperation=Seleziona operazione pipelineOptions.addOperationButton=Aggiungi operazione pipelineOptions.pipelineHeader=Pipeline: pipelineOptions.saveButton=Download @@ -234,7 +236,7 @@ ocr.tags=riconoscimento,testo,immagine,scansione,lettura,identificazione,rilevam home.extractImages.title=Estrai immagini home.extractImages.desc=Estrai tutte le immagini da un PDF e salvale come zip. -extractImages.tags=picture,photo,save,archive,zip,capture,grab +extractImages.tags=immagine,photo,save,archive,zip,capture,grab home.pdfToPDFA.title=Converti in PDF/A home.pdfToPDFA.desc=Converti un PDF nel formato PDF/A per archiviazione a lungo termine. @@ -311,7 +313,7 @@ add-page-numbers.tags=impaginare,etichettare,organizzare,indicizzare home.auto-rename.title=Rinomina automaticamente il file PDF home.auto-rename.desc=Rinomina automaticamente un file PDF in base all'intestazione rilevata -auto-rename.tags=arilevamento automatico,basato su intestazione,organizzazione,rietichettatura +auto-rename.tags=rilevamento automatico,basato su intestazione,organizzazione,rietichettatura home.adjust-contrast.title=Regola colori/contrasto home.adjust-contrast.desc=Regola contrasto, saturazione e luminosità di un PDF @@ -384,6 +386,11 @@ home.split-by-sections.title=Dividi PDF per sezioni home.split-by-sections.desc=Dividi ciascuna pagina di un PDF in sezioni orizzontali e verticali più piccole split-by-sections.tags=Dividi sezione, dividi, personalizza +home.AddStampRequest.title=Aggiungi timbro al PDF +home.AddStampRequest.desc=Aggiungi testo o aggiungi timbri immagine nelle posizioni prestabilite +AddStampRequest.tags=Timbro, Aggiungi immagine, Centra immagine, Filigrana, PDF, Incorpora, Personalizza + + ########################### # # # WEB PAGES # @@ -459,8 +466,38 @@ HTMLToPDF.header=HTML a PDF HTMLToPDF.help=Accetta file HTML e ZIP contenenti html/css/immagini ecc. richiesti HTMLToPDF.submit=Converti HTMLToPDF.credit=Utilizza WeasyPrint +HTMLToPDF.zoom=Livello di zoom per la visualizzazione del sito web. +HTMLToPDF.pageWidth=Larghezza della pagina in centimetri. (Vuoto per impostazione predefinita) +HTMLToPDF.pageHeight=Altezza della pagina in centimetri. (Vuoto per impostazione predefinita) +HTMLToPDF.marginTop=Margine superiore della pagina in millimetri. (Vuoto per impostazione predefinita) +HTMLToPDF.marginBottom=Margine inferiore della pagina in millimetri. (Vuoto per impostazione predefinita) +HTMLToPDF.marginLeft=Margine sinistro della pagina in millimetri. (Vuoto per impostazione predefinita) +HTMLToPDF.marginRight=Margine destro della pagina in millimetri. (Vuoto per impostazione predefinita) +HTMLToPDF.printBackground=Rendering dello sfondo dei siti Web. +HTMLToPDF.defaultHeader=Abilita intestazione predefinita (nome e numero di pagina) +HTMLToPDF.cssMediaType=Cambia il tipo di supporto CSS della pagina. +HTMLToPDF.none=Nessuno +HTMLToPDF.print=Stampa +HTMLToPDF.screen=Schermo +#AddStampRequest +AddStampRequest.header=Timbro PDF +AddStampRequest.title=Timbro PDF +AddStampRequest.stampType=Tipo di timbro +AddStampRequest.stampText=Testo del timbro +AddStampRequest.stampImage=Immagine del timbro +AddStampRequest.alphabet=Alfabeto +AddStampRequest.fontSize=Dimensione carattere/immagine +AddStampRequest.rotation=Rotazione +AddStampRequest.opacity=Opacità +AddStampRequest.position=Posizione +AddStampRequest.overrideX=Sostituisci la coordinata X +AddStampRequest.overrideY=Sostituisci la coordinata Y +AddStampRequest.customMargin=Margine personalizzato +AddStampRequest.customColor=Colore testo personalizzato +AddStampRequest.submit=Invia + #sanitizePDF sanitizePDF.title=Pulire PDF sanitizePDF.header=Pulisci un file PDF diff --git a/src/main/resources/messages_ja_JP.properties b/src/main/resources/messages_ja_JP.properties index 7600209e7..3d4ecb086 100644 --- a/src/main/resources/messages_ja_JP.properties +++ b/src/main/resources/messages_ja_JP.properties @@ -44,7 +44,8 @@ blue=青 custom=カスタム... WorkInProgess=Work in progress, May not work or be buggy, Please report any ploblems! poweredBy=Powered by - +yes=Yes +no=No changedCredsMessage=資格情報が変更されました! notAuthenticatedMessage=ユーザーが認証されていません。 userNotFoundMessage=ユーザーが見つかりません。 @@ -68,6 +69,7 @@ pipelineOptions.header=パイプライン設定 pipelineOptions.pipelineNameLabel=パイプライン名 pipelineOptions.saveSettings=動作設定の保存 pipelineOptions.pipelineNamePrompt=ここにパイプライン名を入力 +pipelineOptions.selectOperation=Select Operation pipelineOptions.addOperationButton=動作の追加 pipelineOptions.pipelineHeader=パイプライン: pipelineOptions.saveButton=ダウンロード @@ -384,6 +386,11 @@ home.split-by-sections.title=PDFをセクションで分割 home.split-by-sections.desc=PDFの各ページを縦横に分割します。 split-by-sections.tags=Section Split, Divide, Customize +home.AddStampRequest.title=Add Stamp to PDF +home.AddStampRequest.desc=Add text or add image stamps at set locations +AddStampRequest.tags=Stamp, Add image, center image, Watermark, PDF, Embed, Customize + + ########################### # # # WEB PAGES # @@ -459,8 +466,38 @@ HTMLToPDF.header=HTMLをPDFに変換 HTMLToPDF.help=HTMLファイルと必要なhtml/css/画像などを含むZIPを受け入れます HTMLToPDF.submit=変換 HTMLToPDF.credit=WeasyPrintを使用 +HTMLToPDF.zoom=Zoom level for displaying the website. +HTMLToPDF.pageWidth=Width of the page in centimeters. (Blank to default) +HTMLToPDF.pageHeight=Height of the page in centimeters. (Blank to default) +HTMLToPDF.marginTop=Top margin of the page in millimeters. (Blank to default) +HTMLToPDF.marginBottom=Bottom margin of the page in millimeters. (Blank to default) +HTMLToPDF.marginLeft=Left margin of the page in millimeters. (Blank to default) +HTMLToPDF.marginRight=Right margin of the page in millimeters. (Blank to default) +HTMLToPDF.printBackground=Render the background of websites. +HTMLToPDF.defaultHeader=Enable Default Header (Name and page number) +HTMLToPDF.cssMediaType=Change the CSS media type of the page. +HTMLToPDF.none=None +HTMLToPDF.print=Print +HTMLToPDF.screen=Screen +#AddStampRequest +AddStampRequest.header=Stamp PDF +AddStampRequest.title=Stamp PDF +AddStampRequest.stampType=Stamp Type +AddStampRequest.stampText=Stamp Text +AddStampRequest.stampImage=Stamp Image +AddStampRequest.alphabet=Alphabet +AddStampRequest.fontSize=Font/Image Size +AddStampRequest.rotation=Rotation +AddStampRequest.opacity=Opacity +AddStampRequest.position=Position +AddStampRequest.overrideX=Override X Coordinate +AddStampRequest.overrideY=Override Y Coordinate +AddStampRequest.customMargin=Custom Margin +AddStampRequest.customColor=Custom Text Color +AddStampRequest.submit=Submit + #sanitizePDF sanitizePDF.title=PDFをサニタイズ sanitizePDF.header=PDFファイルをサニタイズ diff --git a/src/main/resources/messages_ko_KR.properties b/src/main/resources/messages_ko_KR.properties index 0213dc79b..bebdb2171 100644 --- a/src/main/resources/messages_ko_KR.properties +++ b/src/main/resources/messages_ko_KR.properties @@ -44,7 +44,8 @@ blue=Blue custom=Custom... WorkInProgess=Work in progress, May not work or be buggy, Please report any ploblems! poweredBy=Powered by - +yes=Yes +no=No changedCredsMessage=계정 정보 변경 성공! notAuthenticatedMessage=User not authenticated. userNotFoundMessage=사용자를 찾을 수 없습니다. @@ -68,6 +69,7 @@ pipelineOptions.header=Pipeline Configuration pipelineOptions.pipelineNameLabel=Pipeline Name pipelineOptions.saveSettings=Save Operation Settings pipelineOptions.pipelineNamePrompt=Enter pipeline name here +pipelineOptions.selectOperation=Select Operation pipelineOptions.addOperationButton=Add operation pipelineOptions.pipelineHeader=Pipeline: pipelineOptions.saveButton=Download @@ -384,6 +386,11 @@ home.split-by-sections.title=Split PDF by Sections home.split-by-sections.desc=Divide each page of a PDF into smaller horizontal and vertical sections split-by-sections.tags=Section Split, Divide, Customize +home.AddStampRequest.title=Add Stamp to PDF +home.AddStampRequest.desc=Add text or add image stamps at set locations +AddStampRequest.tags=Stamp, Add image, center image, Watermark, PDF, Embed, Customize + + ########################### # # # WEB PAGES # @@ -459,8 +466,38 @@ HTMLToPDF.header=HTML 파일을 PDF 문서로 변환 HTMLToPDF.help=HTML 파일, 또는 html/css/이미지 등을 포함한 ZIP 파일을 받습니다. HTMLToPDF.submit=변환 HTMLToPDF.credit=이 기능은 WeasyPrint를 사용합니다. +HTMLToPDF.zoom=Zoom level for displaying the website. +HTMLToPDF.pageWidth=Width of the page in centimeters. (Blank to default) +HTMLToPDF.pageHeight=Height of the page in centimeters. (Blank to default) +HTMLToPDF.marginTop=Top margin of the page in millimeters. (Blank to default) +HTMLToPDF.marginBottom=Bottom margin of the page in millimeters. (Blank to default) +HTMLToPDF.marginLeft=Left margin of the page in millimeters. (Blank to default) +HTMLToPDF.marginRight=Right margin of the page in millimeters. (Blank to default) +HTMLToPDF.printBackground=Render the background of websites. +HTMLToPDF.defaultHeader=Enable Default Header (Name and page number) +HTMLToPDF.cssMediaType=Change the CSS media type of the page. +HTMLToPDF.none=None +HTMLToPDF.print=Print +HTMLToPDF.screen=Screen +#AddStampRequest +AddStampRequest.header=Stamp PDF +AddStampRequest.title=Stamp PDF +AddStampRequest.stampType=Stamp Type +AddStampRequest.stampText=Stamp Text +AddStampRequest.stampImage=Stamp Image +AddStampRequest.alphabet=Alphabet +AddStampRequest.fontSize=Font/Image Size +AddStampRequest.rotation=Rotation +AddStampRequest.opacity=Opacity +AddStampRequest.position=Position +AddStampRequest.overrideX=Override X Coordinate +AddStampRequest.overrideY=Override Y Coordinate +AddStampRequest.customMargin=Custom Margin +AddStampRequest.customColor=Custom Text Color +AddStampRequest.submit=Submit + #sanitizePDF sanitizePDF.title=PDF 정제 sanitizePDF.header=PDF 문서 정제 diff --git a/src/main/resources/messages_nl_NL.properties b/src/main/resources/messages_nl_NL.properties index bcfa528c0..c56e988a2 100644 --- a/src/main/resources/messages_nl_NL.properties +++ b/src/main/resources/messages_nl_NL.properties @@ -4,7 +4,7 @@ # the direction that the language is written (ltr=left to right, rtl = right to left) language.direction=ltr -pdfPrompt=Selecteer PDF(s) +pdfPrompt=Selecteer PDF('s) multiPdfPrompt=Selecteer PDFs (2+) multiPdfDropPrompt=Selecteer (of sleep & zet neer) alle PDFs die je nodig hebt imgPrompt=Selecteer afbeelding(en) @@ -29,49 +29,51 @@ pageNum=Paginanummer sizes.small=Klein sizes.medium=Medium sizes.large=Groot -sizes.x-large=Extra Groot -error.pdfPassword=Het PDF document is beveiligd met een wachtwoord en het wachtwoord is niet ingevoerd of was onjuist +sizes.x-large=Extra groot +error.pdfPassword=Het PDF document is beveiligd met een wachtwoord en het wachtwoord is niet ingevoerd of is onjuist delete=Verwijderen username=Gebruikersnaam password=Wachtwoord welcome=Welkom -property=Property -black=Black -white=White -red=Red -green=Green -blue=Blue -custom=Custom... -WorkInProgess=Work in progress, May not work or be buggy, Please report any ploblems! -poweredBy=Powered by - -changedCredsMessage=Credentials changed! -notAuthenticatedMessage=User not authenticated. -userNotFoundMessage=User not found. -incorrectPasswordMessage=Current password is incorrect. -usernameExistsMessage=New Username already exists. +property=Eigenschap +black=Zwart +white=Wit +red=Rood +green=Groen +blue=Blauw +custom=Aangepast... +WorkInProgess=Werk in uitvoering. Werkt mogelijk niet of bevat fouten. Meld eventuele problemen! +poweredBy=Mogelijk gemaakt door +yes=Ja +no=Nee +changedCredsMessage=Inloggegevens gewijzigd! +notAuthenticatedMessage=Gebruiker niet ingelogd. +userNotFoundMessage=Gebruiker niet gevonden. +incorrectPasswordMessage=Huidige wachtwoord is onjuist. +usernameExistsMessage=Nieuwe gebruikersnaam bestaat al. ############### # Pipeline # ############### -pipeline.header=Pipeline Menu (Alpha) -pipeline.uploadButton=Upload Custom -pipeline.configureButton=Configure -pipeline.defaultOption=Custom -pipeline.submitButton=Submit +pipeline.header=Pijplijn menu (Alpha) +pipeline.uploadButton=Aangepast uploaden +pipeline.configureButton=Configureren +pipeline.defaultOption=Aangepast +pipeline.submitButton=Opslaan ###################### # Pipeline Options # ###################### -pipelineOptions.header=Pipeline Configuration -pipelineOptions.pipelineNameLabel=Pipeline Name -pipelineOptions.saveSettings=Save Operation Settings -pipelineOptions.pipelineNamePrompt=Enter pipeline name here -pipelineOptions.addOperationButton=Add operation -pipelineOptions.pipelineHeader=Pipeline: -pipelineOptions.saveButton=Download -pipelineOptions.validateButton=Validate +pipelineOptions.header=Pijplijn onfiguratie +pipelineOptions.pipelineNameLabel=Pijplijn naam +pipelineOptions.saveSettings=Instellingen voor bewerking opslaan +pipelineOptions.pipelineNamePrompt=Voer hier de naam van de pijplijn in +pipelineOptions.selectOperation=Selecteer bewerking +pipelineOptions.addOperationButton=Bewerking toevoegen +pipelineOptions.pipelineHeader=Pijplijn: +pipelineOptions.saveButton=Downloaden +pipelineOptions.validateButton=Valideren @@ -83,7 +85,7 @@ navbar.convert=Converteren navbar.security=Beveiliging navbar.other=Overige navbar.darkmode=Donkere modus -navbar.pageOps=Pagina operaties +navbar.pageOps=Pagina bewerkingen navbar.settings=Instellingen ############# @@ -96,20 +98,20 @@ settings.downloadOption.title=Kies download optie (Voor enkelvoudige bestanddown settings.downloadOption.1=Open in hetzelfde venster settings.downloadOption.2=Open in nieuw venster settings.downloadOption.3=Download bestand -settings.zipThreshold=Zip bestanden wanneer het aantal gedownloade bestanden overschrijdt +settings.zipThreshold=Bestanden zippen wanneer het aantal gedownloade bestanden meer is dan settings.signOut=Uitloggen settings.accountSettings=Account instellingen -changeCreds.title=Change Credentials -changeCreds.header=Update Your Account Details -changeCreds.changeUserAndPassword=You are using default login credentials. Please enter a new password (and username if wanted) -changeCreds.newUsername=New Username -changeCreds.oldPassword=Current Password -changeCreds.newPassword=New Password -changeCreds.confirmNewPassword=Confirm New Password -changeCreds.submit=Submit Changes +changeCreds.title=Inloggegevens wijzigen +changeCreds.header=Werk je accountgegevens bij +changeCreds.changeUserAndPassword=Je gebruikt de standaard inloggegevens. Voer een nieuw wachtwoord in (en eventueel een gebruikersnaam) +changeCreds.newUsername=Nieuwe gebruikersnaam +changeCreds.oldPassword=Huidige wachtwoord +changeCreds.newPassword=Nieuw wachtwoord +changeCreds.confirmNewPassword=Bevestig nieuw wachtwoord +changeCreds.submit=Wijzigingen opslaan @@ -129,13 +131,13 @@ account.yourApiKey=Jouw API sleutel account.syncTitle=Synchroniseer browserinstellingen met account account.settingsCompare=Instellingen vergelijking: account.property=Eigenschap -account.webBrowserSettings=Web Browser instelling +account.webBrowserSettings=Webbrowser instelling account.syncToBrowser=Synchroniseer account -> browser account.syncToAccount=Synchroniseer account <- browser -adminUserSettings.title=Gebruikerscontrole instellingen -adminUserSettings.header=Beheer Gebruikerscontrole instellingen +adminUserSettings.title=Gebruikersbeheer +adminUserSettings.header=Beheer gebruikers adminUserSettings.admin=Beheerder adminUserSettings.user=Gebruiker adminUserSettings.addUser=Voeg nieuwe gebruiker toe @@ -144,35 +146,35 @@ adminUserSettings.role=Rol adminUserSettings.actions=Acties adminUserSettings.apiUser=Beperkte API gebruiker adminUserSettings.webOnlyUser=Alleen web gebruiker -adminUserSettings.demoUser=Demo User (No custom settings) -adminUserSettings.forceChange=Force user to change username/password on login -adminUserSettings.submit=Sla gebruiker op +adminUserSettings.demoUser=Demogebruiker (geen aangepaste instellingen) +adminUserSettings.forceChange=Forceer gebruiker om gebruikersnaam/wachtwoord te wijzigen bij inloggen +adminUserSettings.submit=Gebruiker opslaan ############# # HOME-PAGE # ############# home.desc=Jouw lokaal gehoste one-stop-shop voor al je PDF-behoeften. -home.searchBar=Search for features... +home.searchBar=Zoeken naar functies... -home.viewPdf.title=View PDF -home.viewPdf.desc=View, annotate, add text or images -viewPdf.tags=view,read,annotate,text,image +home.viewPdf.title=PDF bekijken +home.viewPdf.desc=Bekijk, annoteer, voeg tekst of afbeeldingen toe +viewPdf.tags=bekijken,lezen,annoteren,tekst,afbeelding -home.multiTool.title=PDF Multitool -home.multiTool.desc=Samenvoegen, draaien, herschikken en pagina''s verwijderen +home.multiTool.title=PDF multitool +home.multiTool.desc=Pagina's samenvoegen, draaien, herschikken en verwijderen multiTool.tags=Multitool,Multi bewerking,UI,klik sleep,voorkant,clientzijde,interactief,beweegbaar,verplaats home.merge.title=Samenvoegen -home.merge.desc=Voeg eenvoudig meerdere PDF''s samen tot één. -merge.tags=samenvoegen,Pagina operaties,Serverkant +home.merge.desc=Voeg eenvoudig meerdere PDF's samen tot één. +merge.tags=samenvoegen,Pagina bewerkingen,Serverkant home.split.title=Splitsen -home.split.desc=Splits PDF''s in meerdere documenten -split.tags=Pagina operaties,verdelen,meerdere pagina''s,knippen,serverzijde +home.split.desc=Splits PDF's in meerdere documenten +split.tags=Pagina bewerkingen,verdelen,meerdere pagina's,knippen,serverzijde home.rotate.title=Roteren -home.rotate.desc=Roteer eenvoudig je PDF''s. +home.rotate.desc=Roteer eenvoudig je PDF's. rotate.tags=serverzijde @@ -185,7 +187,7 @@ home.pdfToImage.desc=Converteer een PDF naar een afbeelding. (PNG, JPEG, GIF) pdfToImage.tags=conversie,img,jpg,foto home.pdfOrganiser.title=Organiseren -home.pdfOrganiser.desc=Verwijder/Herschik pagina''s in een volgorde naar keus +home.pdfOrganiser.desc=Verwijder/herschik pagina's in een volgorde naar keus pdfOrganiser.tags=duplex,even oneven,sorteren,verplaatsen @@ -203,8 +205,8 @@ permissions.tags=lezen,schrijven,bewerken,printen home.removePages.title=Verwijderen -home.removePages.desc=Verwijder ongewenste pagina''s uit je PDF-document. -removePages.tags=Pagina''s verwijderen +home.removePages.desc=Verwijder ongewenste pagina's uit je PDF-document. +removePages.tags=Pagina's verwijderen home.addPassword.title=Wachtwoord toevoegen home.addPassword.desc=Versleutel je PDF-document met een wachtwoord. @@ -220,7 +222,7 @@ compressPdfs.tags=comprimeren,klein home.changeMetadata.title=Metadata wijzigen -home.changeMetadata.desc=Wijzig/Verwijder/Voeg metadata toe van een PDF-document +home.changeMetadata.desc=Wijzig/verwijder/voeg metadata toe van een PDF-document changeMetadata.tags=Titel,auteur,datum,creatie,tijd,uitgever,producent,statistieken home.fileToPDF.title=Bestand naar PDF converteren @@ -261,8 +263,8 @@ home.PDFToXML.title=PDF naar XML home.PDFToXML.desc=Converteer PDF naar XML formaat PDFToXML.tags=data-extractie,gestructureerd,code -home.ScannerImageSplit.title=Detecteer/Split gescande foto''s -home.ScannerImageSplit.desc=Splits meerdere foto''s van binnen een foto/PDF +home.ScannerImageSplit.title=Detecteer/Split gescande foto's +home.ScannerImageSplit.desc=Splits meerdere foto's van binnen een foto/PDF ScannerImageSplit.tags=scheiden,auto-detecteren,scans,meer-foto,organiseren home.sign.title=Ondertekenen @@ -277,16 +279,16 @@ home.repair.title=Repareren home.repair.desc=Probeert een corrupt/beschadigd PDF te herstellen repair.tags=repareren,herstellen,correctie,terughalen -home.removeBlanks.title=Verwijder lege pagina''s -home.removeBlanks.desc=Detecteert en verwijdert lege pagina''s uit een document +home.removeBlanks.title=Verwijder lege pagina's +home.removeBlanks.desc=Detecteert en verwijdert lege pagina's uit een document removeBlanks.tags=opruimen,stroomlijnen,geen-inhoud,organiseren -home.removeAnnotations.title=Remove Annotations -home.removeAnnotations.desc=Removes all comments/annotations from a PDF -removeAnnotations.tags=comments,highlight,notes,markup,remove +home.removeAnnotations.title=Annotaties verwijderen +home.removeAnnotations.desc=Verwijdert alle opmerkingen/annotaties uit een PDF +removeAnnotations.tags=opmerkingen,highlight,notities,opmaak,verwijderen home.compare.title=Vergelijken -home.compare.desc=Vergelijkt en toont de verschillen tussen 2 PDF-documenten +home.compare.desc=Vergelijkt en toont de verschillen tussen twee PDF-documenten compare.tags=onderscheiden,contrasteren,veranderingen,analyse home.certSign.title=Ondertekenen met certificaat @@ -294,7 +296,7 @@ home.certSign.desc=Ondertekent een PDF met een certificaat/sleutel (PEM/P12) certSign.tags=authenticeren,PEM,P12,officieel,versleutelen home.pageLayout.title=Multi-pagina indeling -home.pageLayout.desc=Voeg meerdere pagina''s van een PDF-document samen op één pagina +home.pageLayout.desc=Voeg meerdere pagina's van een PDF-document samen op één pagina pageLayout.tags=samenvoegen,composiet,enkel-zicht,organiseren home.scalePages.title=Aanpassen paginaformaat/schaal @@ -302,7 +304,7 @@ home.scalePages.desc=Wijzig de grootte/schaal van een pagina en/of de inhoud erv scalePages.tags=resize,aanpassen,dimensie,aanpassen home.pipeline.title=Pijplijn (Geavanceerd) -home.pipeline.desc=Voer meerdere acties uit op PDF''s door pipelinescripts te definiëren +home.pipeline.desc=Voer meerdere acties uit op PDF's door pipelinescripts te definiëren pipeline.tags=automatiseren,volgorde,gescrript,batch-verwerking home.add-page-numbers.title=Paginanummers toevoegen @@ -313,15 +315,15 @@ home.auto-rename.title=Automatisch hernoemen PDF-bestand home.auto-rename.desc=Hernoemt automatisch een PDF-bestand op basis van de gedetecteerde header auto-rename.tags=auto-detecteren,op-header-gebaseerd,organiseren,herlabelen -home.adjust-contrast.title=Kleuren/Contrast aanpassen -home.adjust-contrast.desc=Pas Contrast, Verzadiging en Helderheid van een PDF aan +home.adjust-contrast.title=Kleuren/contrast aanpassen +home.adjust-contrast.desc=Pas contrast, verzadiging en helderheid van een PDF aan adjust-contrast.tags=kleur-correctie,afstemmen,aanpassen,verbeteren home.crop.title=PDF bijsnijden home.crop.desc=Snijd een PDF bij om de grootte te verkleinen (behoudt tekst!) crop.tags=trimmen,verkleinen,bewerken,vorm -home.autoSplitPDF.title=Automatisch splitsen pagina''s +home.autoSplitPDF.title=Automatisch splitsen pagina's home.autoSplitPDF.desc=Automatisch splitsen van gescande PDF met fysieke gescande paginasplitter QR-code autoSplitPDF.tags=QR-gebaseerd,scheiden,scan-segment,organiseren @@ -329,7 +331,7 @@ home.sanitizePdf.title=Opschonen home.sanitizePdf.desc=Verwijder scripts en andere elementen uit PDF-bestanden sanitizePdf.tags=schoonmaken,veilig,veilig,bedreigingen verwijderen -home.URLToPDF.title=URL/Website naar PDF +home.URLToPDF.title=URL/website naar PDF home.URLToPDF.desc=Zet http(s)URL om naar PDF URLToPDF.tags=web-capture,pagina opslaan,web-naar-doc,archief @@ -344,17 +346,17 @@ MarkdownToPDF.tags=markup,web-inhoud,transformatie,omzetten home.getPdfInfo.title=Haal ALLE informatie op over PDF -home.getPdfInfo.desc=Haalt alle mogelijke informatie op van PDF''s +home.getPdfInfo.desc=Haalt alle mogelijke informatie op van PDF's getPdfInfo.tags=informatie,data,statistieken -home.extractPage.title=Pagina(''s) extraheren -home.extractPage.desc=Extraheert geselecteerde pagina''s uit PDF +home.extractPage.title=Pagina('s) extraheren +home.extractPage.desc=Extraheert geselecteerde pagina's uit PDF extractPage.tags=extraheren home.PdfToSinglePage.title=PDF naar één grote pagina -home.PdfToSinglePage.desc=Voegt alle PDF-pagina''s samen tot één grote pagina +home.PdfToSinglePage.desc=Voegt alle PDF-pagina's samen tot één grote pagina PdfToSinglePage.tags=één pagina @@ -362,27 +364,32 @@ home.showJS.title=Toon Javascript home.showJS.desc=Zoekt en toont ieder script dat in een PDF is geïnjecteerd showJS.tags=JS -home.autoRedact.title=Auto Redact -home.autoRedact.desc=Auto Redacts(Blacks out) text in a PDF based on input text +home.autoRedact.title=Automatisch censureren +home.autoRedact.desc=Automatisch censureren (onherkenbaar maken) van tekst in een PDF op basis van ingevoerde tekst showJS.tags=JS -home.tableExtraxt.title=PDF to CSV -home.tableExtraxt.desc=Extracts Tables from a PDF converting it to CSV -tableExtraxt.tags=CSV,Table Extraction,extract,convert +home.tableExtraxt.title=PDF naar CSV +home.tableExtraxt.desc=Haalt tabellen uit een PDF en converteert ze naar CSV +tableExtraxt.tags=CSV,tabel extractie,extractie,converteren -home.autoSizeSplitPDF.title=Auto Split by Size/Count -home.autoSizeSplitPDF.desc=Split a single PDF into multiple documents based on size, page count, or document count -autoSizeSplitPDF.tags=pdf,split,document,organization +home.autoSizeSplitPDF.title=Automatisch splitsen op grootte/aantal +home.autoSizeSplitPDF.desc=Splits een enkele PDF in meerdere documenten op basis van grootte, aantal pagina's of aantal documenten +autoSizeSplitPDF.tags=pdf,splitsen,document,organiseren -home.overlay-pdfs.title=Overlay PDFs -home.overlay-pdfs.desc=Overlays PDFs on-top of another PDF -overlay-pdfs.tags=Overlay +home.overlay-pdfs.title=PDF's overlappen +home.overlay-pdfs.desc=Plaatst PDF's over een andere PDF heen +overlay-pdfs.tags=Overlappen + +home.split-by-sections.title=PDF in secties splitsen +home.split-by-sections.desc=Verdeel elke pagina van een PDF in kleinere horizontale en verticale secties +split-by-sections.tags=Sectie splitsen, Verdelen, Aanpassen + +home.AddStampRequest.title=Stempel toevoegen aan PDF +home.AddStampRequest.desc=Voeg tekst of afbeeldingsstempels toe op vaste locaties +AddStampRequest.tags=Stempel, Afbeelding toevoegen, afbeelding centreren, watermerk, PDF, Insluiten, Aanpassen -home.split-by-sections.title=Split PDF by Sections -home.split-by-sections.desc=Divide each page of a PDF into smaller horizontal and vertical sections -split-by-sections.tags=Section Split, Divide, Customize ########################### # # @@ -390,25 +397,25 @@ split-by-sections.tags=Section Split, Divide, Customize # # ########################### #login -login.title=Sign in -login.signin=Sign in -login.rememberme=Remember me -login.invalid=Invalid username or password. -login.locked=Your account has been locked. -login.signinTitle=Please sign in +login.title=Inloggen +login.signin=Inloggen +login.rememberme=Onthoud mij +login.invalid=Ongeldige gebruikersnaam of wachtwoord. +login.locked=Je account is geblokkeerd. +login.signinTitle=Gelieve in te loggen #auto-redact -autoRedact.title=Auto Redact -autoRedact.header=Auto Redact -autoRedact.colorLabel=Colour -autoRedact.textsToRedactLabel=Text to Redact (line-separated) -autoRedact.textsToRedactPlaceholder=e.g. \nConfidential \nTop-Secret -autoRedact.useRegexLabel=Use Regex -autoRedact.wholeWordSearchLabel=Whole Word Search -autoRedact.customPaddingLabel=Custom Extra Padding -autoRedact.convertPDFToImageLabel=Convert PDF to PDF-Image (Used to remove text behind the box) -autoRedact.submitButton=Submit +autoRedact.title=Automatisch censureren +autoRedact.header=Automatisch censureren +autoRedact.colorLabel=Kleur +autoRedact.textsToRedactLabel=Tekst om te censureren (gescheiden door regels) +autoRedact.textsToRedactPlaceholder=bijv.\Vertrouwelijk \nTopgeheim +autoRedact.useRegexLabel=Gebruik regex +autoRedact.wholeWordSearchLabel=Zoeken op hele woorden +autoRedact.customPaddingLabel=Aangepaste extra ruimtevulling +autoRedact.convertPDFToImageLabel=Converteer PDF naar PDF-afbeelding (wordt gebruikt om tekst achter het vak te verwijderen) +autoRedact.submitButton=Indienen #showJS @@ -425,8 +432,8 @@ pdfToSinglePage.submit=Converteren naar enkele pagina #pageExtracter -pageExtracter.title=Pagina''s extraheren -pageExtracter.header=Pagina''s extraheren +pageExtracter.title=Pagina's extraheren +pageExtracter.header=Pagina's extraheren pageExtracter.submit=Extraheren @@ -456,11 +463,41 @@ URLToPDF.credit=Gebruikt WeasyPrint #html-to-pdf HTMLToPDF.title=HTML naar PDF HTMLToPDF.header=HTML naar PDF -HTMLToPDF.help=Accepteert HTML-bestanden en ZIP''s die html/css/afbeeldingen etc. bevatten +HTMLToPDF.help=Accepteert HTML-bestanden en ZIP's die html/css/afbeeldingen etc. bevatten HTMLToPDF.submit=Converteren HTMLToPDF.credit=Gebruikt WeasyPrint +HTMLToPDF.zoom=Zoom level for displaying the website. +HTMLToPDF.pageWidth=Breedte van de pagina in centimeters. (leeg voor standaard) +HTMLToPDF.pageHeight=Hoogte van de pagina in centimeters. (leeg voor standaard) +HTMLToPDF.marginTop=Marge bovenaan de pagina in millimeters. (leeg voor standaard) +HTMLToPDF.marginBottom=Marge onderaan de pagina in millimeters. (leeg voor standaard) +HTMLToPDF.marginLeft=Marge links van de pagina in millimeters. (leeg voor standaard) +HTMLToPDF.marginRight=Marge rechts van de pagina in millimeters. (leeg voor standaard) +HTMLToPDF.printBackground=De achtergrond van websites weergeven. +HTMLToPDF.defaultHeader=Standaard koptekst weergeven (naam en paginanummer) +HTMLToPDF.cssMediaType=Wijzig het CSS-mediatype van de pagina. +HTMLToPDF.none=Geen +HTMLToPDF.print=Print +HTMLToPDF.screen=Screen +#AddStampRequest +AddStampRequest.header=Stempel PDF +AddStampRequest.title=Stempel PDF +AddStampRequest.stampType=Soort stempel +AddStampRequest.stampText=Stempel tekst +AddStampRequest.stampImage=Stempel afbeelding +AddStampRequest.alphabet=Alfabet +AddStampRequest.fontSize=Tekst/afbeelding grootte +AddStampRequest.rotation=Rotatie +AddStampRequest.opacity=Transparantie +AddStampRequest.position=Positie +AddStampRequest.overrideX=X coördinaat overschrijven +AddStampRequest.overrideY=Y coördinaat overschrijven +AddStampRequest.customMargin=Aangepate marge +AddStampRequest.customColor=Aangepaste tekstkleur +AddStampRequest.submit=Indienen + #sanitizePDF sanitizePDF.title=PDF opschonen sanitizePDF.header=Een PDF-bestand opschonen @@ -479,11 +516,11 @@ addPageNumbers.selectText.1=Selecteer PDF-bestand: addPageNumbers.selectText.2=Margegrootte addPageNumbers.selectText.3=Positie addPageNumbers.selectText.4=Startnummer -addPageNumbers.selectText.5=Pagina''s om te nummeren +addPageNumbers.selectText.5=Pagina's om te nummeren addPageNumbers.selectText.6=Aangepaste tekst -addPageNumbers.customTextDesc=Custom Text -addPageNumbers.numberPagesDesc=Which pages to number, default 'all', also accepts 1-5 or 2,5,9 etc -addPageNumbers.customNumberDesc=Defaults to {n}, also accepts 'Page {n} of {total}', 'Text-{n}', '{filename}-{n} +addPageNumbers.customTextDesc=Aangepaste tekst +addPageNumbers.numberPagesDesc=Welke pagina's genummerd moeten worden, standaard 'all', accepteert ook 1-5 of 2,5,9 etc +addPageNumbers.customNumberDesc=Standaard {n}, accepteert ook 'Pagina {n} van {total}', 'Tekst-{n}', '{filename}-{n} addPageNumbers.submit=Paginanummers toevoegen @@ -515,7 +552,7 @@ autoSplitPDF.description=Print, Voeg in, Scan, upload, en laat ons je documenten autoSplitPDF.selectText.1=Print enkele scheidingsbladen van hieronder (Zwart-wit is prima). autoSplitPDF.selectText.2=Scan al je documenten tegelijk door het scheidingsblad ertussen te plaatsen. autoSplitPDF.selectText.3=Upload het enkele grote gescande PDF-bestand en laat Stirling PDF de rest afhandelen. -autoSplitPDF.selectText.4=Scheidingspagina''s worden automatisch gedetecteerd en verwijderd, wat een net einddocument garandeert. +autoSplitPDF.selectText.4=Scheidingspagina's worden automatisch gedetecteerd en verwijderd, wat een net einddocument garandeert. autoSplitPDF.formPrompt=Dien PDF in met Stirling-PDF Pagina-scheiders: autoSplitPDF.duplexMode=Duplex Modus (voor- en achterkant scannen) autoSplitPDF.dividerDownload1=Download 'Auto Splitter Divider (minimal).pdf' @@ -530,8 +567,8 @@ pipeline.title=Pijplijn #pageLayout pageLayout.title=Meerdere pagina indeling pageLayout.header=Meerdere pagina indeling -pageLayout.pagesPerSheet=Pagina''s per vel: -pageLayout.addBorder=Add Borders +pageLayout.pagesPerSheet=Pagina's per vel: +pageLayout.addBorder=Randen toevoegen pageLayout.submit=Indienen @@ -562,24 +599,24 @@ certSign.submit=PDF ondertekenen #removeBlanks -removeBlanks.title=Verwijder blanco''s -removeBlanks.header=Verwijder lege pagina''s +removeBlanks.title=Verwijder blanco's +removeBlanks.header=Verwijder lege pagina's removeBlanks.threshold=Pixel witheid drempel: -removeBlanks.thresholdDesc=Drempel voor het bepalen hoe wit een witte pixel moet zijn om als ''Wit'' te worden geclassificeerd. 0 = Zwart, 255 zuiver wit. +removeBlanks.thresholdDesc=Drempel voor het bepalen hoe wit een witte pixel moet zijn om als 'Wit' te worden geclassificeerd. 0 = Zwart, 255 zuiver wit. removeBlanks.whitePercent=Wit percentage (%): -removeBlanks.whitePercentDesc=Percentage van de pagina dat ''witte'' pixels moet zijn om verwijderd te worden -removeBlanks.submit=Blanco''s verwijderen +removeBlanks.whitePercentDesc=Percentage van de pagina dat 'witte' pixels moet zijn om verwijderd te worden +removeBlanks.submit=Blanco's verwijderen #removeAnnotations -removeAnnotations.title=Remove Annotations -removeAnnotations.header=Remove Annotations -removeAnnotations.submit=Remove +removeAnnotations.title=Verwijder annotaties +removeAnnotations.header=Verwijder annotaties +removeAnnotations.submit=Verwijderen #compare compare.title=Vergelijken -compare.header=PDF''s vergelijken +compare.header=PDF's vergelijken compare.document.1=Document 1 compare.document.2=Document 2 compare.submit=Vergelijken @@ -587,7 +624,7 @@ compare.submit=Vergelijken #sign sign.title=Ondertekenen -sign.header=PDF''s ondertekenen +sign.header=PDF's ondertekenen sign.upload=Upload afbeelding sign.draw=Handtekening tekenen sign.text=Tekstinvoer @@ -597,13 +634,13 @@ sign.add=Toevoegen #repair repair.title=Repareren -repair.header=PDF''s repareren +repair.header=PDF's repareren repair.submit=Repareren #flatten flatten.title=Afvlakken -flatten.header=PDF''s afvlakken +flatten.header=PDF's afvlakken flatten.submit=Afvlakken @@ -624,12 +661,12 @@ ScannerImageSplit.selectText.10=Stelt de grootte van de toegevoegde en verwijder ocr.title=OCR / Scan opruimen ocr.header=Scans opruimen / OCR (Optical Character Recognition) ocr.selectText.1=Selecteer talen die binnen de PDF gedetecteerd moeten worden (De vermelde zijn de momenteel gedetecteerde): -ocr.selectText.2=Produceer tekstbestand met OCR-tekst naast de OCR''d PDF -ocr.selectText.3=Corrigeer pagina''s die onder een scheve hoek zijn gescand door ze terug te draaien +ocr.selectText.2=Produceer tekstbestand met OCR-tekst naast de OCR'd PDF +ocr.selectText.3=Corrigeer pagina's die onder een scheve hoek zijn gescand door ze terug te draaien ocr.selectText.4=Maak de pagina schoon, zodat het minder waarschijnlijk is dat OCR tekst in achtergrondruis vindt. (Geen uitvoerverandering) ocr.selectText.5=Maak de pagina schoon zodat OCR waarschijnlijk geen tekst in achtergrondruis vindt, behoudt opruiming in uitvoer. -ocr.selectText.6=Negeert pagina''s met interactieve tekst, OCR''s alleen pagina''s die afbeeldingen zijn -ocr.selectText.7=Forceer OCR, zal elke pagina OCR''en en alle originele tekstelementen verwijderen +ocr.selectText.6=Negeert pagina's met interactieve tekst, OCR's alleen pagina's die afbeeldingen zijn +ocr.selectText.7=Forceer OCR, zal elke pagina OCR'en en alle originele tekstelementen verwijderen ocr.selectText.8=Normaal (Zal een fout geven als de PDF tekst bevat) ocr.selectText.9=Aanvullende instellingen ocr.selectText.10=OCR-modus @@ -677,7 +714,7 @@ addImage.submit=Afbeelding toevoegen #merge merge.title=Samenvoegen -merge.header=Meerdere PDF''s samenvoegen (2+) +merge.header=Meerdere PDF's samenvoegen (2+) merge.sortByName=Sorteer op naam merge.sortByDate=Sorteer op datum merge.submit=Samenvoegen @@ -686,7 +723,7 @@ merge.submit=Samenvoegen #pdfOrganiser pdfOrganiser.title=Pagina organisator pdfOrganiser.header=PDF pagina organisator -pdfOrganiser.submit=Pagina''s herschikken +pdfOrganiser.submit=Pagina's herschikken #multiTool @@ -694,14 +731,14 @@ multiTool.title=PDF Multitool multiTool.header=PDF Multitool #view pdf -viewPdf.title=View PDF -viewPdf.header=View PDF +viewPdf.title=PDF bekijken +viewPdf.header=PDF bekijken #pageRemover pageRemover.title=Pagina verwijderaar pageRemover.header=PDF pagina verwijderaar -pageRemover.pagesToDelete=Te verwijderen pagina''s (Voer een door komma''s gescheiden lijst met paginanummers in): -pageRemover.submit=Pagina''s verwijderen +pageRemover.pagesToDelete=Te verwijderen pagina's (Voer een door komma's gescheiden lijst met paginanummers in): +pageRemover.submit=Pagina's verwijderen #rotate @@ -715,14 +752,14 @@ rotate.submit=Roteren split.title=PDF splitsen split.header=PDF splitsen split.desc.1=De nummers die je kiest zijn de paginanummers waarop je een splitsing wilt uitvoeren -split.desc.2=Als zodanig selecteren van 1,3,7-8 zou een 10 pagina''s tellend document splitsen in 6 aparte PDF''s met: +split.desc.2=Als zodanig selecteren van 1,3,7-8 zou een 10 pagina's tellend document splitsen in 6 aparte PDF's met: split.desc.3=Document #1: Pagina 1 split.desc.4=Document #2: Pagina 2 en 3 split.desc.5=Document #3: Pagina 4, 5 en 6 split.desc.6=Document #4: Pagina 7 split.desc.7=Document #5: Pagina 8 split.desc.8=Document #6: Pagina 9 en 10 -split.splitPages=Voer pagina''s in om op te splitsen: +split.splitPages=Voer pagina's in om op te splitsen: split.submit=Splitsen @@ -730,14 +767,14 @@ split.submit=Splitsen imageToPDF.title=Afbeelding naar PDF imageToPDF.header=Afbeelding naar PDF imageToPDF.submit=Omzetten -imageToPDF.selectLabel=Image Fit Options -imageToPDF.fillPage=Fill Page -imageToPDF.fitDocumentToImage=Fit Page to Image -imageToPDF.maintainAspectRatio=Maintain Aspect Ratios +imageToPDF.selectLabel=Opties voor afbeelding passend maken +imageToPDF.fillPage=Pagina vullen +imageToPDF.fitDocumentToImage=Pagina passend maken voor afbeelding +imageToPDF.maintainAspectRatio=Beeldverhoudingen behouden imageToPDF.selectText.2=PDF automatisch draaien imageToPDF.selectText.3=Meervoudige bestandslogica (Alleen ingeschakeld bij werken met meerdere afbeeldingen) imageToPDF.selectText.4=Voeg samen in één PDF -imageToPDF.selectText.5=Zet om naar afzonderlijke PDF''s +imageToPDF.selectText.5=Zet om naar afzonderlijke PDF's #pdfToImage @@ -745,7 +782,7 @@ pdfToImage.title=PDF naar afbeelding pdfToImage.header=PDF naar afbeelding pdfToImage.selectText=Afbeeldingsformaat pdfToImage.singleOrMultiple=Resultaattype van pagina naar afbeelding -pdfToImage.single=Eén grote afbeelding die alle pagina''s combineert +pdfToImage.single=Eén grote afbeelding die alle pagina's combineert pdfToImage.multi=Meerdere afbeeldingen, één afbeelding per pagina pdfToImage.colorType=Kleurtype pdfToImage.color=Kleur @@ -887,48 +924,48 @@ PDFToCSV.prompt=Choose page to extract table PDFToCSV.submit=Extract #split-by-size-or-count -split-by-size-or-count.header=Split PDF by Size or Count -split-by-size-or-count.type.label=Select Split Type -split-by-size-or-count.type.size=By Size -split-by-size-or-count.type.pageCount=By Page Count -split-by-size-or-count.type.docCount=By Document Count -split-by-size-or-count.value.label=Enter Value -split-by-size-or-count.value.placeholder=Enter size (e.g., 2MB or 3KB) or count (e.g., 5) -split-by-size-or-count.submit=Submit +split-by-size-or-count.header=PDF splitsen op grootte of aantal +split-by-size-or-count.type.label=Selecteer splits type +split-by-size-or-count.type.size=Op grootte +split-by-size-or-count.type.pageCount=Op pagina aantal +split-by-size-or-count.type.docCount=Op document aantal +split-by-size-or-count.value.label=Voer waarde in +split-by-size-or-count.value.placeholder=Voer grootte (bijv., 2MB of 3KB) of aantal (bijv., 5) +split-by-size-or-count.submit=Indienen #overlay-pdfs -overlay-pdfs.header=Overlay PDF Files -overlay-pdfs.baseFile.label=Select Base PDF File -overlay-pdfs.overlayFiles.label=Select Overlay PDF Files -overlay-pdfs.mode.label=Select Overlay Mode -overlay-pdfs.mode.sequential=Sequential Overlay -overlay-pdfs.mode.interleaved=Interleaved Overlay -overlay-pdfs.mode.fixedRepeat=Fixed Repeat Overlay -overlay-pdfs.counts.label=Overlay Counts (for Fixed Repeat Mode) -overlay-pdfs.counts.placeholder=Enter comma-separated counts (e.g., 2,3,1) -overlay-pdfs.position.label=Select Overlay Position -overlay-pdfs.position.foreground=Foreground -overlay-pdfs.position.background=Background -overlay-pdfs.submit=Submit +overlay-pdfs.header=PDF bestanden overlappen +overlay-pdfs.baseFile.label=Selecteer basis PDF-bestand +overlay-pdfs.overlayFiles.label=Selecteer overlappende PDF-bestanden +overlay-pdfs.mode.label=Selecteer overlappingsmodus +overlay-pdfs.mode.sequential=Sequentieel overlappen +overlay-pdfs.mode.interleaved=Geïnterlinieerd overlappen +overlay-pdfs.mode.fixedRepeat=Overlappen met vaste herhaling +overlay-pdfs.counts.label=Aantal keren overlappen (voor vaste herhalings modus) +overlay-pdfs.counts.placeholder=Voer door komma's gescheiden aantallen in (bijv., 2,3,1) +overlay-pdfs.position.label=Selecteer overlappingspositie +overlay-pdfs.position.foreground=Voorgrond +overlay-pdfs.position.background=Achtergrond +overlay-pdfs.submit=Indienen #split-by-sections -split-by-sections.title=Split PDF by Sections -split-by-sections.header=Split PDF into Sections -split-by-sections.horizontal.label=Horizontal Divisions -split-by-sections.vertical.label=Vertical Divisions -split-by-sections.horizontal.placeholder=Enter number of horizontal divisions -split-by-sections.vertical.placeholder=Enter number of vertical divisions -split-by-sections.submit=Split PDF +split-by-sections.title=PDF in secties splitsen +split-by-sections.header=PDF in secties splitsen +split-by-sections.horizontal.label=Horizontale secties +split-by-sections.vertical.label=Verticale secties +split-by-sections.horizontal.placeholder=Voer het aantal horizontale secties in +split-by-sections.vertical.placeholder=Voer het aantal verticale secties in +split-by-sections.submit=PDF splitsen #licenses -licenses.nav=Licenses -licenses.title=3rd Party Licenses -licenses.header=3rd Party Licenses +licenses.nav=Licensies +licenses.title=Licensies van derden +licenses.header=Licensies van derden licenses.module=Module -licenses.version=Version -licenses.license=License +licenses.version=Versie +licenses.license=Licensie diff --git a/src/main/resources/messages_pl_PL.properties b/src/main/resources/messages_pl_PL.properties index 5d08a3467..48411999e 100644 --- a/src/main/resources/messages_pl_PL.properties +++ b/src/main/resources/messages_pl_PL.properties @@ -44,7 +44,8 @@ blue=Blue custom=Custom... WorkInProgess=Work in progress, May not work or be buggy, Please report any ploblems! poweredBy=Powered by - +yes=Yes +no=No changedCredsMessage=Credentials changed! notAuthenticatedMessage=User not authenticated. userNotFoundMessage=User not found. @@ -68,6 +69,7 @@ pipelineOptions.header=Pipeline Configuration pipelineOptions.pipelineNameLabel=Pipeline Name pipelineOptions.saveSettings=Save Operation Settings pipelineOptions.pipelineNamePrompt=Enter pipeline name here +pipelineOptions.selectOperation=Select Operation pipelineOptions.addOperationButton=Add operation pipelineOptions.pipelineHeader=Pipeline: pipelineOptions.saveButton=Download @@ -384,6 +386,11 @@ home.split-by-sections.title=Split PDF by Sections home.split-by-sections.desc=Divide each page of a PDF into smaller horizontal and vertical sections split-by-sections.tags=Section Split, Divide, Customize +home.AddStampRequest.title=Add Stamp to PDF +home.AddStampRequest.desc=Add text or add image stamps at set locations +AddStampRequest.tags=Stamp, Add image, center image, Watermark, PDF, Embed, Customize + + ########################### # # # WEB PAGES # @@ -459,8 +466,38 @@ HTMLToPDF.header=HTML To PDF HTMLToPDF.help=Accepts HTML files and ZIPs containing html/css/images etc required HTMLToPDF.submit=Convert HTMLToPDF.credit=Uses WeasyPrint +HTMLToPDF.zoom=Zoom level for displaying the website. +HTMLToPDF.pageWidth=Width of the page in centimeters. (Blank to default) +HTMLToPDF.pageHeight=Height of the page in centimeters. (Blank to default) +HTMLToPDF.marginTop=Top margin of the page in millimeters. (Blank to default) +HTMLToPDF.marginBottom=Bottom margin of the page in millimeters. (Blank to default) +HTMLToPDF.marginLeft=Left margin of the page in millimeters. (Blank to default) +HTMLToPDF.marginRight=Right margin of the page in millimeters. (Blank to default) +HTMLToPDF.printBackground=Render the background of websites. +HTMLToPDF.defaultHeader=Enable Default Header (Name and page number) +HTMLToPDF.cssMediaType=Change the CSS media type of the page. +HTMLToPDF.none=None +HTMLToPDF.print=Print +HTMLToPDF.screen=Screen +#AddStampRequest +AddStampRequest.header=Stamp PDF +AddStampRequest.title=Stamp PDF +AddStampRequest.stampType=Stamp Type +AddStampRequest.stampText=Stamp Text +AddStampRequest.stampImage=Stamp Image +AddStampRequest.alphabet=Alphabet +AddStampRequest.fontSize=Font/Image Size +AddStampRequest.rotation=Rotation +AddStampRequest.opacity=Opacity +AddStampRequest.position=Position +AddStampRequest.overrideX=Override X Coordinate +AddStampRequest.overrideY=Override Y Coordinate +AddStampRequest.customMargin=Custom Margin +AddStampRequest.customColor=Custom Text Color +AddStampRequest.submit=Submit + #sanitizePDF sanitizePDF.title=Sanitize PDF sanitizePDF.header=Sanitize a PDF file diff --git a/src/main/resources/messages_pt_BR.properties b/src/main/resources/messages_pt_BR.properties index 5002f064f..0976d83f6 100644 --- a/src/main/resources/messages_pt_BR.properties +++ b/src/main/resources/messages_pt_BR.properties @@ -44,7 +44,8 @@ blue=Blue custom=Custom... WorkInProgess=Work in progress, May not work or be buggy, Please report any ploblems! poweredBy=Powered by - +yes=Yes +no=No changedCredsMessage=Credentials changed! notAuthenticatedMessage=User not authenticated. userNotFoundMessage=User not found. @@ -68,6 +69,7 @@ pipelineOptions.header=Pipeline Configuration pipelineOptions.pipelineNameLabel=Pipeline Name pipelineOptions.saveSettings=Save Operation Settings pipelineOptions.pipelineNamePrompt=Enter pipeline name here +pipelineOptions.selectOperation=Select Operation pipelineOptions.addOperationButton=Add operation pipelineOptions.pipelineHeader=Pipeline: pipelineOptions.saveButton=Download @@ -384,6 +386,11 @@ home.split-by-sections.title=Split PDF by Sections home.split-by-sections.desc=Divide each page of a PDF into smaller horizontal and vertical sections split-by-sections.tags=Section Split, Divide, Customize +home.AddStampRequest.title=Add Stamp to PDF +home.AddStampRequest.desc=Add text or add image stamps at set locations +AddStampRequest.tags=Stamp, Add image, center image, Watermark, PDF, Embed, Customize + + ########################### # # # WEB PAGES # @@ -459,8 +466,38 @@ HTMLToPDF.header=HTML para PDF HTMLToPDF.help=Aceita arquivos HTML e ZIPs contendo html/css/imagens etc necessários HTMLToPDF.submit=Converter HTMLToPDF.credit=Usa o WeasyPrint +HTMLToPDF.zoom=Zoom level for displaying the website. +HTMLToPDF.pageWidth=Width of the page in centimeters. (Blank to default) +HTMLToPDF.pageHeight=Height of the page in centimeters. (Blank to default) +HTMLToPDF.marginTop=Top margin of the page in millimeters. (Blank to default) +HTMLToPDF.marginBottom=Bottom margin of the page in millimeters. (Blank to default) +HTMLToPDF.marginLeft=Left margin of the page in millimeters. (Blank to default) +HTMLToPDF.marginRight=Right margin of the page in millimeters. (Blank to default) +HTMLToPDF.printBackground=Render the background of websites. +HTMLToPDF.defaultHeader=Enable Default Header (Name and page number) +HTMLToPDF.cssMediaType=Change the CSS media type of the page. +HTMLToPDF.none=None +HTMLToPDF.print=Print +HTMLToPDF.screen=Screen +#AddStampRequest +AddStampRequest.header=Stamp PDF +AddStampRequest.title=Stamp PDF +AddStampRequest.stampType=Stamp Type +AddStampRequest.stampText=Stamp Text +AddStampRequest.stampImage=Stamp Image +AddStampRequest.alphabet=Alphabet +AddStampRequest.fontSize=Font/Image Size +AddStampRequest.rotation=Rotation +AddStampRequest.opacity=Opacity +AddStampRequest.position=Position +AddStampRequest.overrideX=Override X Coordinate +AddStampRequest.overrideY=Override Y Coordinate +AddStampRequest.customMargin=Custom Margin +AddStampRequest.customColor=Custom Text Color +AddStampRequest.submit=Submit + #sanitizePDF sanitizePDF.title=Sanitizar PDF sanitizePDF.header=Sanitizar um arquivo PDF diff --git a/src/main/resources/messages_ro_RO.properties b/src/main/resources/messages_ro_RO.properties index dbbd73d2c..d6f3b97a5 100644 --- a/src/main/resources/messages_ro_RO.properties +++ b/src/main/resources/messages_ro_RO.properties @@ -44,7 +44,8 @@ blue=Blue custom=Custom... WorkInProgess=Work in progress, May not work or be buggy, Please report any ploblems! poweredBy=Powered by - +yes=Yes +no=No changedCredsMessage=Credentials changed! notAuthenticatedMessage=User not authenticated. userNotFoundMessage=User not found. @@ -68,6 +69,7 @@ pipelineOptions.header=Pipeline Configuration pipelineOptions.pipelineNameLabel=Pipeline Name pipelineOptions.saveSettings=Save Operation Settings pipelineOptions.pipelineNamePrompt=Enter pipeline name here +pipelineOptions.selectOperation=Select Operation pipelineOptions.addOperationButton=Add operation pipelineOptions.pipelineHeader=Pipeline: pipelineOptions.saveButton=Download @@ -384,6 +386,11 @@ home.split-by-sections.title=Split PDF by Sections home.split-by-sections.desc=Divide each page of a PDF into smaller horizontal and vertical sections split-by-sections.tags=Section Split, Divide, Customize +home.AddStampRequest.title=Add Stamp to PDF +home.AddStampRequest.desc=Add text or add image stamps at set locations +AddStampRequest.tags=Stamp, Add image, center image, Watermark, PDF, Embed, Customize + + ########################### # # # WEB PAGES # @@ -459,8 +466,38 @@ HTMLToPDF.header=HTML To PDF HTMLToPDF.help=Accepts HTML files and ZIPs containing html/css/images etc required HTMLToPDF.submit=Convert HTMLToPDF.credit=Uses WeasyPrint +HTMLToPDF.zoom=Zoom level for displaying the website. +HTMLToPDF.pageWidth=Width of the page in centimeters. (Blank to default) +HTMLToPDF.pageHeight=Height of the page in centimeters. (Blank to default) +HTMLToPDF.marginTop=Top margin of the page in millimeters. (Blank to default) +HTMLToPDF.marginBottom=Bottom margin of the page in millimeters. (Blank to default) +HTMLToPDF.marginLeft=Left margin of the page in millimeters. (Blank to default) +HTMLToPDF.marginRight=Right margin of the page in millimeters. (Blank to default) +HTMLToPDF.printBackground=Render the background of websites. +HTMLToPDF.defaultHeader=Enable Default Header (Name and page number) +HTMLToPDF.cssMediaType=Change the CSS media type of the page. +HTMLToPDF.none=None +HTMLToPDF.print=Print +HTMLToPDF.screen=Screen +#AddStampRequest +AddStampRequest.header=Stamp PDF +AddStampRequest.title=Stamp PDF +AddStampRequest.stampType=Stamp Type +AddStampRequest.stampText=Stamp Text +AddStampRequest.stampImage=Stamp Image +AddStampRequest.alphabet=Alphabet +AddStampRequest.fontSize=Font/Image Size +AddStampRequest.rotation=Rotation +AddStampRequest.opacity=Opacity +AddStampRequest.position=Position +AddStampRequest.overrideX=Override X Coordinate +AddStampRequest.overrideY=Override Y Coordinate +AddStampRequest.customMargin=Custom Margin +AddStampRequest.customColor=Custom Text Color +AddStampRequest.submit=Submit + #sanitizePDF sanitizePDF.title=Sanitize PDF sanitizePDF.header=Sanitize a PDF file diff --git a/src/main/resources/messages_ru_RU.properties b/src/main/resources/messages_ru_RU.properties index 1b6fa7f0a..289b0fa67 100644 --- a/src/main/resources/messages_ru_RU.properties +++ b/src/main/resources/messages_ru_RU.properties @@ -44,7 +44,8 @@ blue=Blue custom=Custom... WorkInProgess=Work in progress, May not work or be buggy, Please report any ploblems! poweredBy=Powered by - +yes=Yes +no=No changedCredsMessage=Credentials changed! notAuthenticatedMessage=User not authenticated. userNotFoundMessage=User not found. @@ -68,6 +69,7 @@ pipelineOptions.header=Pipeline Configuration pipelineOptions.pipelineNameLabel=Pipeline Name pipelineOptions.saveSettings=Save Operation Settings pipelineOptions.pipelineNamePrompt=Enter pipeline name here +pipelineOptions.selectOperation=Select Operation pipelineOptions.addOperationButton=Add operation pipelineOptions.pipelineHeader=Pipeline: pipelineOptions.saveButton=Download @@ -384,6 +386,11 @@ home.split-by-sections.title=Split PDF by Sections home.split-by-sections.desc=Divide each page of a PDF into smaller horizontal and vertical sections split-by-sections.tags=Section Split, Divide, Customize +home.AddStampRequest.title=Add Stamp to PDF +home.AddStampRequest.desc=Add text or add image stamps at set locations +AddStampRequest.tags=Stamp, Add image, center image, Watermark, PDF, Embed, Customize + + ########################### # # # WEB PAGES # @@ -459,8 +466,38 @@ HTMLToPDF.header=HTML в PDF HTMLToPDF.help=Принимает файлы HTML и ZIP-файлы, содержащие html/css/изображения и т. д. HTMLToPDF.submit=Конвертировать HTMLToPDF.credit=Использует WeasyPrint +HTMLToPDF.zoom=Zoom level for displaying the website. +HTMLToPDF.pageWidth=Width of the page in centimeters. (Blank to default) +HTMLToPDF.pageHeight=Height of the page in centimeters. (Blank to default) +HTMLToPDF.marginTop=Top margin of the page in millimeters. (Blank to default) +HTMLToPDF.marginBottom=Bottom margin of the page in millimeters. (Blank to default) +HTMLToPDF.marginLeft=Left margin of the page in millimeters. (Blank to default) +HTMLToPDF.marginRight=Right margin of the page in millimeters. (Blank to default) +HTMLToPDF.printBackground=Render the background of websites. +HTMLToPDF.defaultHeader=Enable Default Header (Name and page number) +HTMLToPDF.cssMediaType=Change the CSS media type of the page. +HTMLToPDF.none=None +HTMLToPDF.print=Print +HTMLToPDF.screen=Screen +#AddStampRequest +AddStampRequest.header=Stamp PDF +AddStampRequest.title=Stamp PDF +AddStampRequest.stampType=Stamp Type +AddStampRequest.stampText=Stamp Text +AddStampRequest.stampImage=Stamp Image +AddStampRequest.alphabet=Alphabet +AddStampRequest.fontSize=Font/Image Size +AddStampRequest.rotation=Rotation +AddStampRequest.opacity=Opacity +AddStampRequest.position=Position +AddStampRequest.overrideX=Override X Coordinate +AddStampRequest.overrideY=Override Y Coordinate +AddStampRequest.customMargin=Custom Margin +AddStampRequest.customColor=Custom Text Color +AddStampRequest.submit=Submit + #sanitizePDF sanitizePDF.title=Дезинфицировать PDF sanitizePDF.header=Дезинфицировать PDF файл diff --git a/src/main/resources/messages_sr-Latn-RS.properties b/src/main/resources/messages_sr-Latn-RS.properties index 620e7df85..9ff6d44a2 100644 --- a/src/main/resources/messages_sr-Latn-RS.properties +++ b/src/main/resources/messages_sr-Latn-RS.properties @@ -44,7 +44,8 @@ blue=Plavo custom=Prilagođeno... WorkInProgess=Radovi u toku, možda neće raditi ili će biti grešaka, molimo prijavite sve probleme ! poweredBy=Powered by - +yes=Yes +no=No changedCredsMessage=Podaci za prijavu uspešno promenjeni! notAuthenticatedMessage=Korisnik nije autentifikovan. userNotFoundMessage=Korisnik nije pronađen. @@ -68,6 +69,7 @@ pipelineOptions.header=Konfiguracija Pipeline-a pipelineOptions.pipelineNameLabel=Ime Pipeline-a pipelineOptions.saveSettings=Sačuvaj podešavanja pipelineOptions.pipelineNamePrompt=Unesite ime pipeline-a ovde +pipelineOptions.selectOperation=Select Operation pipelineOptions.addOperationButton=Dodaj operaciju pipelineOptions.pipelineHeader=Pipeline: pipelineOptions.saveButton=Preuzmi @@ -384,6 +386,11 @@ home.split-by-sections.title=Deljenje PDF-a po Odeljcima home.split-by-sections.desc=Deljenje svake stranice PDF-a na manje horizontalne i vertikalne odeljke split-by-sections.tags=Deljenje odeljaka,Deljenje,Podešavanje +home.AddStampRequest.title=Add Stamp to PDF +home.AddStampRequest.desc=Add text or add image stamps at set locations +AddStampRequest.tags=Stamp, Add image, center image, Watermark, PDF, Embed, Customize + + ########################### # # # WEB PAGES # @@ -459,8 +466,38 @@ HTMLToPDF.header=HTML u PDF HTMLToPDF.help=Prihvata HTML fajlove i ZIP-ove koji sadrže html/css/slike itd. potrebno HTMLToPDF.submit=Konvertuj HTMLToPDF.credit=Koristi WeasyPrint +HTMLToPDF.zoom=Zoom level for displaying the website. +HTMLToPDF.pageWidth=Width of the page in centimeters. (Blank to default) +HTMLToPDF.pageHeight=Height of the page in centimeters. (Blank to default) +HTMLToPDF.marginTop=Top margin of the page in millimeters. (Blank to default) +HTMLToPDF.marginBottom=Bottom margin of the page in millimeters. (Blank to default) +HTMLToPDF.marginLeft=Left margin of the page in millimeters. (Blank to default) +HTMLToPDF.marginRight=Right margin of the page in millimeters. (Blank to default) +HTMLToPDF.printBackground=Render the background of websites. +HTMLToPDF.defaultHeader=Enable Default Header (Name and page number) +HTMLToPDF.cssMediaType=Change the CSS media type of the page. +HTMLToPDF.none=None +HTMLToPDF.print=Print +HTMLToPDF.screen=Screen +#AddStampRequest +AddStampRequest.header=Stamp PDF +AddStampRequest.title=Stamp PDF +AddStampRequest.stampType=Stamp Type +AddStampRequest.stampText=Stamp Text +AddStampRequest.stampImage=Stamp Image +AddStampRequest.alphabet=Alphabet +AddStampRequest.fontSize=Font/Image Size +AddStampRequest.rotation=Rotation +AddStampRequest.opacity=Opacity +AddStampRequest.position=Position +AddStampRequest.overrideX=Override X Coordinate +AddStampRequest.overrideY=Override Y Coordinate +AddStampRequest.customMargin=Custom Margin +AddStampRequest.customColor=Custom Text Color +AddStampRequest.submit=Submit + #sanitizePDF sanitizePDF.title=Sanitizacija PDF-a sanitizePDF.header=Sanitizacija PDF fajla diff --git a/src/main/resources/messages_sv_SE.properties b/src/main/resources/messages_sv_SE.properties index 85e2559cf..85a934b28 100644 --- a/src/main/resources/messages_sv_SE.properties +++ b/src/main/resources/messages_sv_SE.properties @@ -44,7 +44,8 @@ blue=Blue custom=Custom... WorkInProgess=Work in progress, May not work or be buggy, Please report any ploblems! poweredBy=Powered by - +yes=Yes +no=No changedCredsMessage=Credentials changed! notAuthenticatedMessage=User not authenticated. userNotFoundMessage=User not found. @@ -68,6 +69,7 @@ pipelineOptions.header=Pipeline Configuration pipelineOptions.pipelineNameLabel=Pipeline Name pipelineOptions.saveSettings=Save Operation Settings pipelineOptions.pipelineNamePrompt=Enter pipeline name here +pipelineOptions.selectOperation=Select Operation pipelineOptions.addOperationButton=Add operation pipelineOptions.pipelineHeader=Pipeline: pipelineOptions.saveButton=Download @@ -384,6 +386,11 @@ home.split-by-sections.title=Split PDF by Sections home.split-by-sections.desc=Divide each page of a PDF into smaller horizontal and vertical sections split-by-sections.tags=Section Split, Divide, Customize +home.AddStampRequest.title=Add Stamp to PDF +home.AddStampRequest.desc=Add text or add image stamps at set locations +AddStampRequest.tags=Stamp, Add image, center image, Watermark, PDF, Embed, Customize + + ########################### # # # WEB PAGES # @@ -459,8 +466,38 @@ HTMLToPDF.header=HTML To PDF HTMLToPDF.help=Accepts HTML files and ZIPs containing html/css/images etc required HTMLToPDF.submit=Convert HTMLToPDF.credit=Uses WeasyPrint +HTMLToPDF.zoom=Zoom level for displaying the website. +HTMLToPDF.pageWidth=Width of the page in centimeters. (Blank to default) +HTMLToPDF.pageHeight=Height of the page in centimeters. (Blank to default) +HTMLToPDF.marginTop=Top margin of the page in millimeters. (Blank to default) +HTMLToPDF.marginBottom=Bottom margin of the page in millimeters. (Blank to default) +HTMLToPDF.marginLeft=Left margin of the page in millimeters. (Blank to default) +HTMLToPDF.marginRight=Right margin of the page in millimeters. (Blank to default) +HTMLToPDF.printBackground=Render the background of websites. +HTMLToPDF.defaultHeader=Enable Default Header (Name and page number) +HTMLToPDF.cssMediaType=Change the CSS media type of the page. +HTMLToPDF.none=None +HTMLToPDF.print=Print +HTMLToPDF.screen=Screen +#AddStampRequest +AddStampRequest.header=Stamp PDF +AddStampRequest.title=Stamp PDF +AddStampRequest.stampType=Stamp Type +AddStampRequest.stampText=Stamp Text +AddStampRequest.stampImage=Stamp Image +AddStampRequest.alphabet=Alphabet +AddStampRequest.fontSize=Font/Image Size +AddStampRequest.rotation=Rotation +AddStampRequest.opacity=Opacity +AddStampRequest.position=Position +AddStampRequest.overrideX=Override X Coordinate +AddStampRequest.overrideY=Override Y Coordinate +AddStampRequest.customMargin=Custom Margin +AddStampRequest.customColor=Custom Text Color +AddStampRequest.submit=Submit + #sanitizePDF sanitizePDF.title=Sanitize PDF sanitizePDF.header=Sanitize a PDF file diff --git a/src/main/resources/messages_tr_TR.properties b/src/main/resources/messages_tr_TR.properties index f3071b007..caae08679 100644 --- a/src/main/resources/messages_tr_TR.properties +++ b/src/main/resources/messages_tr_TR.properties @@ -44,7 +44,8 @@ blue=Mavi custom=Özel WorkInProgess=Work in progress, May not work or be buggy, Please report any ploblems! poweredBy=Powered by - +yes=Yes +no=No changedCredsMessage=Bilgiler değiştirildi! notAuthenticatedMessage=Kullanıcı doğrulanmadı. userNotFoundMessage=Kullanıcı bulunamadı. @@ -68,6 +69,7 @@ pipelineOptions.header=Pipeline Configuration pipelineOptions.pipelineNameLabel=Pipeline Name pipelineOptions.saveSettings=Save Operation Settings pipelineOptions.pipelineNamePrompt=Enter pipeline name here +pipelineOptions.selectOperation=Select Operation pipelineOptions.addOperationButton=Add operation pipelineOptions.pipelineHeader=Pipeline: pipelineOptions.saveButton=Download @@ -384,6 +386,11 @@ home.split-by-sections.title=Split PDF by Sections home.split-by-sections.desc=Divide each page of a PDF into smaller horizontal and vertical sections split-by-sections.tags=Section Split, Divide, Customize +home.AddStampRequest.title=Add Stamp to PDF +home.AddStampRequest.desc=Add text or add image stamps at set locations +AddStampRequest.tags=Stamp, Add image, center image, Watermark, PDF, Embed, Customize + + ########################### # # # WEB PAGES # @@ -459,8 +466,38 @@ HTMLToPDF.header=HTML'den PDF'e HTMLToPDF.help=HTML dosyalarını ve html/css/görsel vb. içeren ZIP'leri kabul eder HTMLToPDF.submit=Dönüştür HTMLToPDF.credit=WeasyPrint Kullanıyor +HTMLToPDF.zoom=Zoom level for displaying the website. +HTMLToPDF.pageWidth=Width of the page in centimeters. (Blank to default) +HTMLToPDF.pageHeight=Height of the page in centimeters. (Blank to default) +HTMLToPDF.marginTop=Top margin of the page in millimeters. (Blank to default) +HTMLToPDF.marginBottom=Bottom margin of the page in millimeters. (Blank to default) +HTMLToPDF.marginLeft=Left margin of the page in millimeters. (Blank to default) +HTMLToPDF.marginRight=Right margin of the page in millimeters. (Blank to default) +HTMLToPDF.printBackground=Render the background of websites. +HTMLToPDF.defaultHeader=Enable Default Header (Name and page number) +HTMLToPDF.cssMediaType=Change the CSS media type of the page. +HTMLToPDF.none=None +HTMLToPDF.print=Print +HTMLToPDF.screen=Screen +#AddStampRequest +AddStampRequest.header=Stamp PDF +AddStampRequest.title=Stamp PDF +AddStampRequest.stampType=Stamp Type +AddStampRequest.stampText=Stamp Text +AddStampRequest.stampImage=Stamp Image +AddStampRequest.alphabet=Alphabet +AddStampRequest.fontSize=Font/Image Size +AddStampRequest.rotation=Rotation +AddStampRequest.opacity=Opacity +AddStampRequest.position=Position +AddStampRequest.overrideX=Override X Coordinate +AddStampRequest.overrideY=Override Y Coordinate +AddStampRequest.customMargin=Custom Margin +AddStampRequest.customColor=Custom Text Color +AddStampRequest.submit=Submit + #sanitizePDF sanitizePDF.title=PDF'i Temizle sanitizePDF.header=PDF dosyasını temizle diff --git a/src/main/resources/messages_zh_CN.properties b/src/main/resources/messages_zh_CN.properties index 7498b0c93..46934cba5 100644 --- a/src/main/resources/messages_zh_CN.properties +++ b/src/main/resources/messages_zh_CN.properties @@ -44,7 +44,8 @@ blue=Blue custom=Custom... WorkInProgess=Work in progress, May not work or be buggy, Please report any ploblems! poweredBy=Powered by - +yes=Yes +no=No changedCredsMessage=凭证已更改! notAuthenticatedMessage=用户未经过身份验证。 userNotFoundMessage=未找到用户。 @@ -68,6 +69,7 @@ pipelineOptions.header=Pipeline Configuration pipelineOptions.pipelineNameLabel=Pipeline Name pipelineOptions.saveSettings=Save Operation Settings pipelineOptions.pipelineNamePrompt=Enter pipeline name here +pipelineOptions.selectOperation=Select Operation pipelineOptions.addOperationButton=Add operation pipelineOptions.pipelineHeader=Pipeline: pipelineOptions.saveButton=Download @@ -384,6 +386,11 @@ home.split-by-sections.title=拆分PDF成小块 home.split-by-sections.desc=将PDF的每一页分割成更小的水平和垂直的部分 split-by-sections.tags=章节拆分、分割、自定义 +home.AddStampRequest.title=Add Stamp to PDF +home.AddStampRequest.desc=Add text or add image stamps at set locations +AddStampRequest.tags=Stamp, Add image, center image, Watermark, PDF, Embed, Customize + + ########################### # # # WEB PAGES # @@ -459,8 +466,38 @@ HTMLToPDF.header=HTML转PDF HTMLToPDF.help=接受HTML文件和包含所需的html/css/images等的ZIP文件 HTMLToPDF.submit=转换 HTMLToPDF.credit=使用WeasyPrint +HTMLToPDF.zoom=Zoom level for displaying the website. +HTMLToPDF.pageWidth=Width of the page in centimeters. (Blank to default) +HTMLToPDF.pageHeight=Height of the page in centimeters. (Blank to default) +HTMLToPDF.marginTop=Top margin of the page in millimeters. (Blank to default) +HTMLToPDF.marginBottom=Bottom margin of the page in millimeters. (Blank to default) +HTMLToPDF.marginLeft=Left margin of the page in millimeters. (Blank to default) +HTMLToPDF.marginRight=Right margin of the page in millimeters. (Blank to default) +HTMLToPDF.printBackground=Render the background of websites. +HTMLToPDF.defaultHeader=Enable Default Header (Name and page number) +HTMLToPDF.cssMediaType=Change the CSS media type of the page. +HTMLToPDF.none=None +HTMLToPDF.print=Print +HTMLToPDF.screen=Screen +#AddStampRequest +AddStampRequest.header=Stamp PDF +AddStampRequest.title=Stamp PDF +AddStampRequest.stampType=Stamp Type +AddStampRequest.stampText=Stamp Text +AddStampRequest.stampImage=Stamp Image +AddStampRequest.alphabet=Alphabet +AddStampRequest.fontSize=Font/Image Size +AddStampRequest.rotation=Rotation +AddStampRequest.opacity=Opacity +AddStampRequest.position=Position +AddStampRequest.overrideX=Override X Coordinate +AddStampRequest.overrideY=Override Y Coordinate +AddStampRequest.customMargin=Custom Margin +AddStampRequest.customColor=Custom Text Color +AddStampRequest.submit=Submit + #sanitizePDF sanitizePDF.title=清理PDF sanitizePDF.header=清理PDF文件 diff --git a/src/main/resources/messages_zh_TW.properties b/src/main/resources/messages_zh_TW.properties index b6a8811c6..e2f0e4d9f 100644 --- a/src/main/resources/messages_zh_TW.properties +++ b/src/main/resources/messages_zh_TW.properties @@ -44,7 +44,8 @@ blue=藍色 custom=自訂... WorkInProgess=Work in progress, May not work or be buggy, Please report any ploblems! poweredBy=Powered by - +yes=Yes +no=No changedCredsMessage=憑證已變更! notAuthenticatedMessage=使用者未認證。 userNotFoundMessage=找不到使用者。 @@ -68,6 +69,7 @@ pipelineOptions.header=Pipeline Configuration pipelineOptions.pipelineNameLabel=Pipeline Name pipelineOptions.saveSettings=Save Operation Settings pipelineOptions.pipelineNamePrompt=Enter pipeline name here +pipelineOptions.selectOperation=Select Operation pipelineOptions.addOperationButton=Add operation pipelineOptions.pipelineHeader=Pipeline: pipelineOptions.saveButton=Download @@ -384,6 +386,11 @@ home.split-by-sections.title=依區段分割 PDF home.split-by-sections.desc=將 PDF 的每一頁分割為較小的水平和垂直區段 split-by-sections.tags=區段分割, 劃分, 自訂 +home.AddStampRequest.title=Add Stamp to PDF +home.AddStampRequest.desc=Add text or add image stamps at set locations +AddStampRequest.tags=Stamp, Add image, center image, Watermark, PDF, Embed, Customize + + ########################### # # # WEB PAGES # @@ -459,8 +466,38 @@ HTMLToPDF.header=HTML 轉 PDF HTMLToPDF.help=接受 HTML 文件和包含所需 html/css/images 等的 ZIP HTMLToPDF.submit=轉換 HTMLToPDF.credit=使用 WeasyPrint +HTMLToPDF.zoom=Zoom level for displaying the website. +HTMLToPDF.pageWidth=Width of the page in centimeters. (Blank to default) +HTMLToPDF.pageHeight=Height of the page in centimeters. (Blank to default) +HTMLToPDF.marginTop=Top margin of the page in millimeters. (Blank to default) +HTMLToPDF.marginBottom=Bottom margin of the page in millimeters. (Blank to default) +HTMLToPDF.marginLeft=Left margin of the page in millimeters. (Blank to default) +HTMLToPDF.marginRight=Right margin of the page in millimeters. (Blank to default) +HTMLToPDF.printBackground=Render the background of websites. +HTMLToPDF.defaultHeader=Enable Default Header (Name and page number) +HTMLToPDF.cssMediaType=Change the CSS media type of the page. +HTMLToPDF.none=None +HTMLToPDF.print=Print +HTMLToPDF.screen=Screen +#AddStampRequest +AddStampRequest.header=Stamp PDF +AddStampRequest.title=Stamp PDF +AddStampRequest.stampType=Stamp Type +AddStampRequest.stampText=Stamp Text +AddStampRequest.stampImage=Stamp Image +AddStampRequest.alphabet=Alphabet +AddStampRequest.fontSize=Font/Image Size +AddStampRequest.rotation=Rotation +AddStampRequest.opacity=Opacity +AddStampRequest.position=Position +AddStampRequest.overrideX=Override X Coordinate +AddStampRequest.overrideY=Override Y Coordinate +AddStampRequest.customMargin=Custom Margin +AddStampRequest.customColor=Custom Text Color +AddStampRequest.submit=Submit + #sanitizePDF sanitizePDF.title=清理 PDF sanitizePDF.header=清理 PDF 檔案 diff --git a/src/main/resources/static/images/stamp.svg b/src/main/resources/static/images/stamp.svg new file mode 100644 index 000000000..aa35a6cba --- /dev/null +++ b/src/main/resources/static/images/stamp.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/src/main/resources/static/js/languageSelection.js b/src/main/resources/static/js/languageSelection.js index a5e7be2a3..432b467e6 100644 --- a/src/main/resources/static/js/languageSelection.js +++ b/src/main/resources/static/js/languageSelection.js @@ -1,7 +1,20 @@ document.addEventListener('DOMContentLoaded', function() { setLanguageForDropdown('.lang_dropdown-item'); - const defaultLocale = document.documentElement.lang || 'en_GB'; - const storedLocale = localStorage.getItem('languageCode') || defaultLocale; + + // Detect the browser's preferred language + let browserLang = navigator.language || navigator.userLanguage; + // Convert to a format consistent with your language codes (e.g., en-GB, fr-FR) + browserLang = browserLang.replace('-', '_'); + + // Check if the dropdown contains the browser's language + const dropdownLangExists = document.querySelector(`.lang_dropdown-item[data-language-code="${browserLang}"]`); + + // Set the default language to browser's language or 'en_GB' if not found in the dropdown + const defaultLocale = dropdownLangExists ? browserLang : 'en_GB'; + const storedLocale = localStorage.getItem('languageCode') || defaultLocale; + + + const dropdownItems = document.querySelectorAll('.lang_dropdown-item'); for (let i = 0; i < dropdownItems.length; i++) { diff --git a/src/main/resources/static/js/merge.js b/src/main/resources/static/js/merge.js index b90c7be27..7ca524d24 100644 --- a/src/main/resources/static/js/merge.js +++ b/src/main/resources/static/js/merge.js @@ -8,11 +8,18 @@ document.getElementById("fileInput-input").addEventListener("change", function() displayFiles(files); }); +/** + * @param {FileList} files + */ function displayFiles(files) { - var list = document.getElementById("selectedFiles"); + const list = document.getElementById("selectedFiles"); - for (var i = 0; i < files.length; i++) { - var item = document.createElement("li"); + while (list.firstChild) { + list.removeChild(list.firstChild); + } + + for (let i = 0; i < files.length; i++) { + const item = document.createElement("li"); item.className = "list-group-item"; item.innerHTML = `
diff --git a/src/main/resources/static/js/multitool/PdfContainer.js b/src/main/resources/static/js/multitool/PdfContainer.js index 4a53c9615..7ff2e9452 100644 --- a/src/main/resources/static/js/multitool/PdfContainer.js +++ b/src/main/resources/static/js/multitool/PdfContainer.js @@ -26,6 +26,7 @@ class PdfContainer { movePageTo: this.movePageTo, addPdfs: this.addPdfs, rotateElement: this.rotateElement, + updateFilename: this.updateFilename }) }) @@ -38,7 +39,7 @@ class PdfContainer { filenameInput.onkeyup = this.updateFilename; filenameInput.onkeydown = this.preventIllegalChars; - filenameInput.disabled = true; + filenameInput.disabled = false; filenameInput.innerText = ""; downloadBtn.disabled = true; } @@ -59,7 +60,7 @@ class PdfContainer { const vector = (endIndex !== -1 && startIndex > endIndex) ? 0-width : width; - + this.pagesContainerWrapper.scroll({ left: this.pagesContainerWrapper.scrollLeft + vector, }) @@ -73,30 +74,9 @@ class PdfContainer { input.setAttribute("accept", "application/pdf"); input.onchange = async(e) => { const files = e.target.files; - if (files.length > 0) { - const filenameInput = document.getElementById('filename-input'); - const pagesContainer = document.getElementById('pages-container'); - const downloadBtn = document.getElementById('export-button'); - - filenameInput.disabled = false; - - if (pagesContainer.childElementCount === 0) { - filenameInput.value = ""; - this.filename = null; - downloadBtn.disabled = true; - } else { - this.filename = filenameInput.value; - } - - if (this.filename === null || this.filename === undefined) { - filenameInput.value = files[0].name; - } else { - filenameInput.value = this.filename; - } - - } this.addPdfsFromFiles(files, nextSiblingElement); + this.updateFilename(files ? files[0].name : ""); } input.click(); @@ -197,7 +177,7 @@ class PdfContainer { return pdfDoc; } - + rotateAll(deg) { for (var i=0; i { - let overlay; - let dragCounter = 0; +class FileDragManager { + overlay; + dragCounter; + updateFilename; - const dragenterListener = function() { - dragCounter++; - if (!overlay) { + constructor(cb = null) { + this.dragCounter = 0; + this.setCallback(cb); + + // Prevent default behavior for drag events + ['dragenter', 'dragover', 'dragleave', 'drop'].forEach(eventName => { + document.body.addEventListener(eventName, preventDefaults, false); + }); + + function preventDefaults(e) { + e.preventDefault(); + e.stopPropagation(); + } + + this.dragenterListener = this.dragenterListener.bind(this); + this.dragleaveListener = this.dragleaveListener.bind(this); + this.dropListener = this.dropListener.bind(this); + + document.body.addEventListener('dragenter', this.dragenterListener); + document.body.addEventListener('dragleave', this.dragleaveListener); + // Add drop event listener + document.body.addEventListener('drop', this.dropListener); + } + + setActions({ updateFilename }) { + this.updateFilename = updateFilename; + } + + setCallback(cb) { + if (cb) { + this.callback = cb; + } else { + this.callback = (files) => console.warn("FileDragManager not set"); + } + } + + dragenterListener() { + this.dragCounter++; + if (!this.overlay) { // Create and show the overlay - overlay = document.createElement('div'); - overlay.style.position = 'fixed'; - overlay.style.top = 0; - overlay.style.left = 0; - overlay.style.width = '100%'; - overlay.style.height = '100%'; - overlay.style.background = 'rgba(0, 0, 0, 0.5)'; - overlay.style.color = '#fff'; - overlay.style.zIndex = '1000'; - overlay.style.display = 'flex'; - overlay.style.alignItems = 'center'; - overlay.style.justifyContent = 'center'; - overlay.style.pointerEvents = 'none'; - overlay.innerHTML = '

Drop files anywhere to upload

'; - document.getElementById('content-wrap').appendChild(overlay); + this.overlay = document.createElement('div'); + this.overlay.style.position = 'fixed'; + this.overlay.style.top = 0; + this.overlay.style.left = 0; + this.overlay.style.width = '100%'; + this.overlay.style.height = '100%'; + this.overlay.style.background = 'rgba(0, 0, 0, 0.5)'; + this.overlay.style.color = '#fff'; + this.overlay.style.zIndex = '1000'; + this.overlay.style.display = 'flex'; + this.overlay.style.alignItems = 'center'; + this.overlay.style.justifyContent = 'center'; + this.overlay.style.pointerEvents = 'none'; + this.overlay.innerHTML = '

Drop files anywhere to upload

'; + document.getElementById('content-wrap').appendChild(this.overlay); } }; - const dragleaveListener = function() { - dragCounter--; - if (dragCounter === 0) { + dragleaveListener() { + this.dragCounter--; + if (this.dragCounter === 0) { // Hide and remove the overlay - if (overlay) { - overlay.remove(); - overlay = null; + if (this.overlay) { + this.overlay.remove(); + this.overlay = null; } } }; - const dropListener = function(e) { + dropListener(e) { const dt = e.dataTransfer; const files = dt.files; - callback(files).catch((err) => { + this.callback(files).catch((err) => { console.error(err); //maybe }).finally(() => { - if (overlay) { - overlay.remove(); - overlay = null; + // Hide and remove the overlay + if (this.overlay) { + this.overlay.remove(); + this.overlay = null; } + + this.updateFilename(files ? files[0].name : ""); }); }; - - // Prevent default behavior for drag events - ['dragenter', 'dragover', 'dragleave', 'drop'].forEach(eventName => { - document.body.addEventListener(eventName, preventDefaults, false); - }); - - function preventDefaults(e) { - e.preventDefault(); - e.stopPropagation(); - } - - document.body.addEventListener('dragenter', dragenterListener); - document.body.addEventListener('dragleave', dragleaveListener); - // Add drop event listener - document.body.addEventListener('drop', dropListener); } -export default addFileDragListener; \ No newline at end of file +export default FileDragManager; diff --git a/src/main/resources/templates/auto-split-pdf.html b/src/main/resources/templates/auto-split-pdf.html index 4fd27772d..bb984cc5e 100644 --- a/src/main/resources/templates/auto-split-pdf.html +++ b/src/main/resources/templates/auto-split-pdf.html @@ -24,7 +24,7 @@

-
+
diff --git a/src/main/resources/templates/convert/html-to-pdf.html b/src/main/resources/templates/convert/html-to-pdf.html index ab6c53245..cbb22b995 100644 --- a/src/main/resources/templates/convert/html-to-pdf.html +++ b/src/main/resources/templates/convert/html-to-pdf.html @@ -10,10 +10,73 @@

-
+

-
+
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ + +
+ + +
+ +
diff --git a/src/main/resources/templates/convert/markdown-to-pdf.html b/src/main/resources/templates/convert/markdown-to-pdf.html index c81931124..4606d2b51 100644 --- a/src/main/resources/templates/convert/markdown-to-pdf.html +++ b/src/main/resources/templates/convert/markdown-to-pdf.html @@ -13,7 +13,7 @@

-
+

diff --git a/src/main/resources/templates/fragments/common.html b/src/main/resources/templates/fragments/common.html index 924140e62..cd2d47b7d 100644 --- a/src/main/resources/templates/fragments/common.html +++ b/src/main/resources/templates/fragments/common.html @@ -120,7 +120,7 @@ data-bs-files-selected=#{filesSelected}, data-bs-pdf-prompt=#{pdfPrompt}">
- +
diff --git a/src/main/resources/templates/fragments/navbar.html b/src/main/resources/templates/fragments/navbar.html index b090b08c8..aec6b826b 100644 --- a/src/main/resources/templates/fragments/navbar.html +++ b/src/main/resources/templates/fragments/navbar.html @@ -133,6 +133,7 @@
+
diff --git a/src/main/resources/templates/home.html b/src/main/resources/templates/home.html index 52f945ebe..d42ccb4af 100644 --- a/src/main/resources/templates/home.html +++ b/src/main/resources/templates/home.html @@ -101,8 +101,10 @@
+
+
diff --git a/src/main/resources/templates/misc/show-javascript.html b/src/main/resources/templates/misc/show-javascript.html index 36f1bb80d..0614a2c23 100644 --- a/src/main/resources/templates/misc/show-javascript.html +++ b/src/main/resources/templates/misc/show-javascript.html @@ -18,7 +18,7 @@
+ th:replace="~{fragments/common :: fileSelector(name='fileInput', multiple=false, remoteCall='false', accept='application/pdf')}">

diff --git a/src/main/resources/templates/misc/stamp.html b/src/main/resources/templates/misc/stamp.html new file mode 100644 index 000000000..a05e9717b --- /dev/null +++ b/src/main/resources/templates/misc/stamp.html @@ -0,0 +1,216 @@ + + + + + + + + +
+
+
+

+
+
+
+

+ +
+
+
+ + +
+ + + +
+ +
+
1
+
2
+
3
+
4
+
5
+
6
+
7
+
8
+
9
+
+
+ + + + + +
+ + +
+ +
+ + +
+ + + +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ + +
+ + +
+ +
+ + +
+ +
+ + +
+ + + + +
+
+
+ +
+
+
+ + diff --git a/src/main/resources/templates/multi-tool.html b/src/main/resources/templates/multi-tool.html index d602cbe9a..d49b7f837 100644 --- a/src/main/resources/templates/multi-tool.html +++ b/src/main/resources/templates/multi-tool.html @@ -49,7 +49,7 @@ - +
diff --git a/src/main/resources/templates/security/get-info-on-pdf.html b/src/main/resources/templates/security/get-info-on-pdf.html index 41ff4be72..84bf8692d 100644 --- a/src/main/resources/templates/security/get-info-on-pdf.html +++ b/src/main/resources/templates/security/get-info-on-pdf.html @@ -16,7 +16,7 @@
+ th:replace="~{fragments/common :: fileSelector(name='fileInput', multiple=false, remoteCall='false', accept='application/pdf')}">
diff --git a/src/main/resources/templates/view-pdf.html b/src/main/resources/templates/view-pdf.html index b230f7991..8aca45424 100644 --- a/src/main/resources/templates/view-pdf.html +++ b/src/main/resources/templates/view-pdf.html @@ -30,7 +30,6 @@ See https://github.com/adobe-type-tools/cmap-resources -