From 2fd8c643af1327f214eb70aef892e6514b0f62a3 Mon Sep 17 00:00:00 2001 From: Anthony Stirling <77850077+Frooodle@users.noreply.github.com> Date: Sat, 22 Jul 2023 17:27:08 +0100 Subject: [PATCH 01/18] UI for html/url --- .../api/converters/ConvertHtmlToPDF.java | 2 +- .../web/ConverterWebController.java | 190 ++++++++++-------- .../templates/convert/html-to-pdf.html | 29 +++ .../templates/convert/pdf-to-html.html | 58 +++--- .../templates/convert/url-to-pdf.html | 29 +++ 5 files changed, 190 insertions(+), 118 deletions(-) create mode 100644 src/main/resources/templates/convert/html-to-pdf.html create mode 100644 src/main/resources/templates/convert/url-to-pdf.html 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 edaf3213c0..d30d01dd9e 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 @@ -24,7 +24,7 @@ import stirling.software.SPDF.utils.WebResponseUtils; public class ConvertHtmlToPDF { - @PostMapping(consumes = "multipart/form-data", value = "/convert-to-pdf") + @PostMapping(consumes = "multipart/form-data", value = "/html-to-pdf") @Operation( 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." diff --git a/src/main/java/stirling/software/SPDF/controller/web/ConverterWebController.java b/src/main/java/stirling/software/SPDF/controller/web/ConverterWebController.java index e8c1fa7631..90429f1a38 100644 --- a/src/main/java/stirling/software/SPDF/controller/web/ConverterWebController.java +++ b/src/main/java/stirling/software/SPDF/controller/web/ConverterWebController.java @@ -1,88 +1,102 @@ -package stirling.software.SPDF.controller.web; - -import org.springframework.stereotype.Controller; -import org.springframework.ui.Model; -import org.springframework.web.bind.annotation.GetMapping; -import org.springframework.web.servlet.ModelAndView; - -import io.swagger.v3.oas.annotations.Hidden; -import io.swagger.v3.oas.annotations.tags.Tag; - -@Controller -@Tag(name = "Convert", description = "Convert APIs") -public class ConverterWebController { - - @GetMapping("/img-to-pdf") - @Hidden - public String convertImgToPdfForm(Model model) { - model.addAttribute("currentPage", "img-to-pdf"); - return "convert/img-to-pdf"; - } - - - @GetMapping("/pdf-to-img") - @Hidden - public String pdfToimgForm(Model model) { - model.addAttribute("currentPage", "pdf-to-img"); - return "convert/pdf-to-img"; - } - - @GetMapping("/file-to-pdf") - @Hidden - public String convertToPdfForm(Model model) { - model.addAttribute("currentPage", "file-to-pdf"); - return "convert/file-to-pdf"; - } - - - - //PDF TO...... - - @GetMapping("/pdf-to-html") - @Hidden - public ModelAndView pdfToHTML() { - ModelAndView modelAndView = new ModelAndView("convert/pdf-to-html"); - modelAndView.addObject("currentPage", "pdf-to-html"); - return modelAndView; - } - - @GetMapping("/pdf-to-presentation") - @Hidden - public ModelAndView pdfToPresentation() { - ModelAndView modelAndView = new ModelAndView("convert/pdf-to-presentation"); - modelAndView.addObject("currentPage", "pdf-to-presentation"); - return modelAndView; - } - - @GetMapping("/pdf-to-text") - @Hidden - public ModelAndView pdfToText() { - ModelAndView modelAndView = new ModelAndView("convert/pdf-to-text"); - modelAndView.addObject("currentPage", "pdf-to-text"); - return modelAndView; - } - - @GetMapping("/pdf-to-word") - @Hidden - public ModelAndView pdfToWord() { - ModelAndView modelAndView = new ModelAndView("convert/pdf-to-word"); - modelAndView.addObject("currentPage", "pdf-to-word"); - return modelAndView; - } - - @GetMapping("/pdf-to-xml") - @Hidden - public ModelAndView pdfToXML() { - ModelAndView modelAndView = new ModelAndView("convert/pdf-to-xml"); - modelAndView.addObject("currentPage", "pdf-to-xml"); - return modelAndView; - } - - - @GetMapping("/pdf-to-pdfa") - @Hidden - public String pdfToPdfAForm(Model model) { - model.addAttribute("currentPage", "pdf-to-pdfa"); - return "convert/pdf-to-pdfa"; - } -} +package stirling.software.SPDF.controller.web; + +import org.springframework.stereotype.Controller; +import org.springframework.ui.Model; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.servlet.ModelAndView; + +import io.swagger.v3.oas.annotations.Hidden; +import io.swagger.v3.oas.annotations.tags.Tag; + +@Controller +@Tag(name = "Convert", description = "Convert APIs") +public class ConverterWebController { + + @GetMapping("/img-to-pdf") + @Hidden + public String convertImgToPdfForm(Model model) { + model.addAttribute("currentPage", "img-to-pdf"); + return "convert/img-to-pdf"; + } + + @GetMapping("/html-to-pdf") + @Hidden + public String convertHTMLToPdfForm(Model model) { + model.addAttribute("currentPage", "html-to-pdf"); + return "convert/html-to-pdf"; + } + + @GetMapping("/url-to-pdf") + @Hidden + public String convertURLToPdfForm(Model model) { + model.addAttribute("currentPage", "url-to-pdf"); + return "convert/url-to-pdf"; + } + + + @GetMapping("/pdf-to-img") + @Hidden + public String pdfToimgForm(Model model) { + model.addAttribute("currentPage", "pdf-to-img"); + return "convert/pdf-to-img"; + } + + @GetMapping("/file-to-pdf") + @Hidden + public String convertToPdfForm(Model model) { + model.addAttribute("currentPage", "file-to-pdf"); + return "convert/file-to-pdf"; + } + + + + //PDF TO...... + + @GetMapping("/pdf-to-html") + @Hidden + public ModelAndView pdfToHTML() { + ModelAndView modelAndView = new ModelAndView("convert/pdf-to-html"); + modelAndView.addObject("currentPage", "pdf-to-html"); + return modelAndView; + } + + @GetMapping("/pdf-to-presentation") + @Hidden + public ModelAndView pdfToPresentation() { + ModelAndView modelAndView = new ModelAndView("convert/pdf-to-presentation"); + modelAndView.addObject("currentPage", "pdf-to-presentation"); + return modelAndView; + } + + @GetMapping("/pdf-to-text") + @Hidden + public ModelAndView pdfToText() { + ModelAndView modelAndView = new ModelAndView("convert/pdf-to-text"); + modelAndView.addObject("currentPage", "pdf-to-text"); + return modelAndView; + } + + @GetMapping("/pdf-to-word") + @Hidden + public ModelAndView pdfToWord() { + ModelAndView modelAndView = new ModelAndView("convert/pdf-to-word"); + modelAndView.addObject("currentPage", "pdf-to-word"); + return modelAndView; + } + + @GetMapping("/pdf-to-xml") + @Hidden + public ModelAndView pdfToXML() { + ModelAndView modelAndView = new ModelAndView("convert/pdf-to-xml"); + modelAndView.addObject("currentPage", "pdf-to-xml"); + return modelAndView; + } + + + @GetMapping("/pdf-to-pdfa") + @Hidden + public String pdfToPdfAForm(Model model) { + model.addAttribute("currentPage", "pdf-to-pdfa"); + return "convert/pdf-to-pdfa"; + } +} diff --git a/src/main/resources/templates/convert/html-to-pdf.html b/src/main/resources/templates/convert/html-to-pdf.html new file mode 100644 index 0000000000..171a610a06 --- /dev/null +++ b/src/main/resources/templates/convert/html-to-pdf.html @@ -0,0 +1,29 @@ + + + + + + +
+
+
+

+
+
+
+

+
+
+
+ + +
+

+
+
+
+
+
+
+ + diff --git a/src/main/resources/templates/convert/pdf-to-html.html b/src/main/resources/templates/convert/pdf-to-html.html index a67329ac30..16e0a39b95 100644 --- a/src/main/resources/templates/convert/pdf-to-html.html +++ b/src/main/resources/templates/convert/pdf-to-html.html @@ -1,29 +1,29 @@ - - - - - - -
-
-
-

-
-
-
-

-
-
-
- - -
-

-
-
-
-
-
-
- - + + + + + + +
+
+
+

+
+
+
+

+
+
+
+ + +
+

+
+
+
+
+
+
+ + diff --git a/src/main/resources/templates/convert/url-to-pdf.html b/src/main/resources/templates/convert/url-to-pdf.html new file mode 100644 index 0000000000..fb59b4ba01 --- /dev/null +++ b/src/main/resources/templates/convert/url-to-pdf.html @@ -0,0 +1,29 @@ + + + + + + +
+
+
+

+
+
+
+

+
+ +
+ + +
+

+
+
+
+
+
+
+ + From 116d103119321d06f494d34d88fe9a2d418e85dc Mon Sep 17 00:00:00 2001 From: Anthony Stirling <77850077+Frooodle@users.noreply.github.com> Date: Sun, 23 Jul 2023 00:03:25 +0100 Subject: [PATCH 02/18] html to pdf --- Dockerfile | 2 +- .../SPDF/config/EndpointConfiguration.java | 11 +- .../api/converters/ConvertHtmlToPDF.java | 122 +++++++++++------- .../api/converters/ConvertWebsiteToPDF.java | 41 +++--- src/main/resources/messages_en_GB.properties | 6 + src/main/resources/static/images/html.svg | 3 + src/main/resources/static/images/url.svg | 4 + .../resources/templates/fragments/navbar.html | 3 + src/main/resources/templates/home.html | 11 +- 9 files changed, 129 insertions(+), 74 deletions(-) create mode 100644 src/main/resources/static/images/html.svg create mode 100644 src/main/resources/static/images/url.svg diff --git a/Dockerfile b/Dockerfile index b1d91a4809..c98a21c883 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,5 +1,5 @@ # Build jbig2enc in a separate stage -FROM frooodle/stirling-pdf-base:latest +FROM frooodle/stirling-pdf-base:beta4 # Create scripts folder and copy local scripts RUN mkdir /scripts diff --git a/src/main/java/stirling/software/SPDF/config/EndpointConfiguration.java b/src/main/java/stirling/software/SPDF/config/EndpointConfiguration.java index 24f2822d3a..322de0e2ca 100644 --- a/src/main/java/stirling/software/SPDF/config/EndpointConfiguration.java +++ b/src/main/java/stirling/software/SPDF/config/EndpointConfiguration.java @@ -83,7 +83,9 @@ public class EndpointConfiguration { addEndpointToGroup("Convert", "pdf-to-text"); addEndpointToGroup("Convert", "pdf-to-html"); addEndpointToGroup("Convert", "pdf-to-xml"); - + addEndpointToGroup("Convert", "html-to-pdf"); + addEndpointToGroup("Convert", "url-to-pdf"); + // Adding endpoints to "Security" group addEndpointToGroup("Security", "add-password"); addEndpointToGroup("Security", "remove-password"); @@ -125,12 +127,15 @@ public class EndpointConfiguration { addEndpointToGroup("CLI", "pdf-to-html"); addEndpointToGroup("CLI", "pdf-to-xml"); addEndpointToGroup("CLI", "ocr-pdf"); + addEndpointToGroup("CLI", "html-to-pdf"); + addEndpointToGroup("CLI", "url-to-pdf"); + //python addEndpointToGroup("Python", "extract-image-scans"); addEndpointToGroup("Python", "remove-blanks"); - - + addEndpointToGroup("Python", "html-to-pdf"); + addEndpointToGroup("Python", "url-to-pdf"); //openCV addEndpointToGroup("OpenCV", "extract-image-scans"); 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 d30d01dd9e..2d792ee3db 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 @@ -4,9 +4,13 @@ import java.io.ByteArrayInputStream; import java.io.IOException; import java.nio.file.Files; import java.nio.file.Path; +import java.util.ArrayList; +import java.util.List; +import java.util.stream.Collectors; +import java.util.stream.Stream; import java.util.zip.ZipEntry; import java.util.zip.ZipInputStream; -import java.util.*; + import org.springframework.http.ResponseEntity; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestPart; @@ -40,61 +44,83 @@ public class ConvertHtmlToPDF { if (originalFilename == null || (!originalFilename.endsWith(".html") && !originalFilename.endsWith(".zip"))) { throw new IllegalArgumentException("File must be either .html or .zip format."); } - Path tempOutputFile = Files.createTempFile("output_", ".pdf"); - Path tempInputFile; - - if (originalFilename.endsWith(".html")) { - tempInputFile = Files.createTempFile("input_", ".html"); - Files.write(tempInputFile, fileInput.getBytes()); - } else { - tempInputFile = unzipAndGetMainHtml(fileInput); + Path tempInputFile = null; + byte[] pdfBytes; + try { + if (originalFilename.endsWith(".html")) { + tempInputFile = Files.createTempFile("input_", ".html"); + Files.write(tempInputFile, fileInput.getBytes()); + } else { + tempInputFile = unzipAndGetMainHtml(fileInput); + } + + List command = new ArrayList<>(); + command.add("weasyprint"); + command.add(tempInputFile.toString()); + command.add(tempOutputFile.toString()); + int returnCode = 0; + if (originalFilename.endsWith(".zip")) { + returnCode = ProcessExecutor.getInstance(ProcessExecutor.Processes.WEASYPRINT) + .runCommandWithOutputHandling(command, tempInputFile.getParent().toFile()); + } else { + + returnCode = ProcessExecutor.getInstance(ProcessExecutor.Processes.WEASYPRINT) + .runCommandWithOutputHandling(command); + } + + pdfBytes = Files.readAllBytes(tempOutputFile); + } finally { + // Clean up temporary files + Files.delete(tempOutputFile); + Files.delete(tempInputFile); + + if (originalFilename.endsWith(".zip")) { + GeneralUtils.deleteDirectory(tempInputFile.getParent()); + } } - - List command = new ArrayList<>(); - command.add("weasyprint"); - command.add(tempInputFile.toString()); - command.add(tempOutputFile.toString()); - int returnCode = 0; - if (originalFilename.endsWith(".zip")) { - returnCode = ProcessExecutor.getInstance(ProcessExecutor.Processes.WEASYPRINT) - .runCommandWithOutputHandling(command, tempInputFile.getParent().toFile()); - } else { - - returnCode = ProcessExecutor.getInstance(ProcessExecutor.Processes.WEASYPRINT) - .runCommandWithOutputHandling(command); - } - - byte[] pdfBytes = Files.readAllBytes(tempOutputFile); - - // Clean up temporary files - Files.delete(tempOutputFile); - Files.delete(tempInputFile); - if (originalFilename.endsWith(".zip")) { - GeneralUtils.deleteDirectory(tempInputFile.getParent()); - } - String outputFilename = originalFilename.replaceFirst("[.][^.]+$", "") + ".pdf"; // Remove file extension and append .pdf return WebResponseUtils.bytesToWebResponse(pdfBytes, outputFilename); } - private Path unzipAndGetMainHtml(MultipartFile zipFile) throws IOException { - Path tempDirectory = Files.createTempDirectory("unzipped_"); - try (ZipInputStream zipIn = new ZipInputStream(new ByteArrayInputStream(zipFile.getBytes()))) { - ZipEntry entry = zipIn.getNextEntry(); - while (entry != null) { - Path filePath = tempDirectory.resolve(entry.getName()); - if (!entry.isDirectory()) { - Files.copy(zipIn, filePath); - } - zipIn.closeEntry(); - entry = zipIn.getNextEntry(); - } - } - return tempDirectory.resolve("index.html"); - } + private Path unzipAndGetMainHtml(MultipartFile zipFile) throws IOException { + Path tempDirectory = Files.createTempDirectory("unzipped_"); + try (ZipInputStream zipIn = new ZipInputStream(new ByteArrayInputStream(zipFile.getBytes()))) { + ZipEntry entry = zipIn.getNextEntry(); + while (entry != null) { + Path filePath = tempDirectory.resolve(entry.getName()); + if (entry.isDirectory()) { + Files.createDirectories(filePath); // Explicitly create the directory structure + } else { + Files.createDirectories(filePath.getParent()); // Create parent directories if they don't exist + Files.copy(zipIn, filePath); + } + zipIn.closeEntry(); + entry = zipIn.getNextEntry(); + } + } + + //search for the main HTML file. + try (Stream walk = Files.walk(tempDirectory)) { + List htmlFiles = walk.filter(file -> file.toString().endsWith(".html")) + .collect(Collectors.toList()); + + if (htmlFiles.isEmpty()) { + throw new IOException("No HTML files found in the unzipped directory."); + } + + // Prioritize 'index.html' if it exists, otherwise use the first .html file + for (Path htmlFile : htmlFiles) { + if (htmlFile.getFileName().toString().equals("index.html")) { + return htmlFile; + } + } + + return htmlFiles.get(0); + } + } diff --git a/src/main/java/stirling/software/SPDF/controller/api/converters/ConvertWebsiteToPDF.java b/src/main/java/stirling/software/SPDF/controller/api/converters/ConvertWebsiteToPDF.java index f69adbd19e..9167a6e43e 100644 --- a/src/main/java/stirling/software/SPDF/controller/api/converters/ConvertWebsiteToPDF.java +++ b/src/main/java/stirling/software/SPDF/controller/api/converters/ConvertWebsiteToPDF.java @@ -34,27 +34,30 @@ public class ConvertWebsiteToPDF { String URL) throws IOException, InterruptedException { // Validate the URL format - if(!URL.matches("^https?://.*") && GeneralUtils.isValidURL(URL)) { + if(!URL.matches("^https?://.*") || !GeneralUtils.isValidURL(URL)) { throw new IllegalArgumentException("Invalid URL format provided."); } - - // Prepare the output file path - Path tempOutputFile = Files.createTempFile("output_", ".pdf"); - - // Prepare the OCRmyPDF command - List command = new ArrayList<>(); - command.add("weasyprint"); - command.add(URL); - command.add(tempOutputFile.toString()); - - int returnCode = ProcessExecutor.getInstance(ProcessExecutor.Processes.WEASYPRINT).runCommandWithOutputHandling(command); - - // Read the optimized PDF file - byte[] pdfBytes = Files.readAllBytes(tempOutputFile); - - // Clean up the temporary files - Files.delete(tempOutputFile); - + Path tempOutputFile = null; + byte[] pdfBytes; + try { + // Prepare the output file path + tempOutputFile = Files.createTempFile("output_", ".pdf"); + + // Prepare the OCRmyPDF command + List command = new ArrayList<>(); + command.add("weasyprint"); + command.add(URL); + command.add(tempOutputFile.toString()); + + int returnCode = ProcessExecutor.getInstance(ProcessExecutor.Processes.WEASYPRINT).runCommandWithOutputHandling(command); + + // Read the optimized PDF file + pdfBytes = Files.readAllBytes(tempOutputFile); + } + finally { + // Clean up the temporary files + Files.delete(tempOutputFile); + } // Convert URL to a safe filename String outputFilename = convertURLToFileName(URL); diff --git a/src/main/resources/messages_en_GB.properties b/src/main/resources/messages_en_GB.properties index 98ab5d0374..9f99a0b627 100644 --- a/src/main/resources/messages_en_GB.properties +++ b/src/main/resources/messages_en_GB.properties @@ -183,6 +183,12 @@ home.autoSplitPDF.desc=Auto Split Scanned PDF with physical scanned page splitte home.sanitizePdf.title=Sanitize home.sanitizePdf.desc=Remove scripts and other elements from PDF files +home.URLToPDF.title=URL/Website To PDF +home.URLToPDF.desc=Converts any http(s)URL to PDF + +home.HTMLToPDF.title=HTML to PDF +home.HTMLToPDF.desc=Converts any HTML file or zip to PDF + ########################### # # diff --git a/src/main/resources/static/images/html.svg b/src/main/resources/static/images/html.svg new file mode 100644 index 0000000000..35d7218566 --- /dev/null +++ b/src/main/resources/static/images/html.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/src/main/resources/static/images/url.svg b/src/main/resources/static/images/url.svg new file mode 100644 index 0000000000..df35bc8a1e --- /dev/null +++ b/src/main/resources/static/images/url.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/src/main/resources/templates/fragments/navbar.html b/src/main/resources/templates/fragments/navbar.html index 804a442e09..024b7bc396 100644 --- a/src/main/resources/templates/fragments/navbar.html +++ b/src/main/resources/templates/fragments/navbar.html @@ -71,6 +71,9 @@
+
+
+
diff --git a/src/main/resources/templates/home.html b/src/main/resources/templates/home.html index 6d0d2fcf50..8cbb6ca7c9 100644 --- a/src/main/resources/templates/home.html +++ b/src/main/resources/templates/home.html @@ -34,6 +34,10 @@
+
+
+ +
@@ -73,12 +77,13 @@
-
+
-
-
+ +
+
From 5605d53a5fa3e26ceb3e739c9d2639276e47d022 Mon Sep 17 00:00:00 2001 From: Anthony Stirling <77850077+Frooodle@users.noreply.github.com> Date: Sun, 23 Jul 2023 13:05:47 +0100 Subject: [PATCH 03/18] Update messages_en_GB.properties --- src/main/resources/messages_en_GB.properties | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) diff --git a/src/main/resources/messages_en_GB.properties b/src/main/resources/messages_en_GB.properties index 9f99a0b627..c19f9bf919 100644 --- a/src/main/resources/messages_en_GB.properties +++ b/src/main/resources/messages_en_GB.properties @@ -63,7 +63,7 @@ home.desc=Your locally hosted one-stop-shop for all your PDF needs. home.multiTool.title=PDF Multi Tool home.multiTool.desc=Merge, Rotate, Rearrange, and Remove pages -multiTool.tags=Multi Tool,Multi operation,UI,click drag,front end,client side +multiTool.tags=Multi Tool,Multi operation,UI,click drag,front end,client side,interactive,intractable,move home.merge.title=Merge home.merge.desc=Easily merge multiple PDFs into one. @@ -71,33 +71,46 @@ merge.tags=merge,Page operations,Back end,server side home.split.title=Split home.split.desc=Split PDFs into multiple documents +split.tags=Page operations,divide,Multi Page,cut,server side home.rotate.title=Rotate home.rotate.desc=Easily rotate your PDFs. +rotate.tags=server side + home.imageToPdf.title=Image to PDF home.imageToPdf.desc=Convert a image (PNG, JPEG, GIF) to PDF. +imageToPdf.tags=conversion,img,jpg,picture,photo home.pdfToImage.title=PDF to Image home.pdfToImage.desc=Convert a PDF to a image. (PNG, JPEG, GIF) +pdfToImage.tags=conversion,img,jpg,picture,photo home.pdfOrganiser.title=Organise home.pdfOrganiser.desc=Remove/Rearrange pages in any order +pdfOrganiser.tags=duplex,even,odd,sort,move + home.addImage.title=Add image home.addImage.desc=Adds a image onto a set location on the PDF +addImage.tags=img,jpg,picture,photo home.watermark.title=Add Watermark home.watermark.desc=Add a custom watermark to your PDF document. +watermark.tags=Text,repeating,label,own,copyright,trademark,img,jpg,picture,photo home.permissions.title=Change Permissions home.permissions.desc=Change the permissions of your PDF document +permissions.tags=read,write,edit,print + home.removePages.title=Remove home.removePages.desc=Delete unwanted pages from your PDF document. +removePages.tags=Remove pages,delete pages home.addPassword.title=Add Password home.addPassword.desc=Encrypt your PDF document with a password. +addPassword.tags=secure,security home.removePassword.title=Remove Password home.removePassword.desc=Remove password protection from your PDF document. @@ -107,6 +120,7 @@ home.compressPdfs.desc=Compress PDFs to reduce their file size. home.changeMetadata.title=Change Metadata home.changeMetadata.desc=Change/Remove/Add metadata from a PDF document +changeMetadata.tags==Title,author,date,creation,time,publisher,producer,stats, home.fileToPDF.title=Convert file to PDF home.fileToPDF.desc=Convert nearly any file to PDF (DOCX, PNG, XLS, PPT, TXT and more) From 940f8d999e380e6ae9fd4323e384fd0838a63850 Mon Sep 17 00:00:00 2001 From: Anthony Stirling <77850077+Frooodle@users.noreply.github.com> Date: Sun, 23 Jul 2023 15:13:33 +0100 Subject: [PATCH 04/18] Update messages_en_GB.properties --- src/main/resources/messages_en_GB.properties | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/main/resources/messages_en_GB.properties b/src/main/resources/messages_en_GB.properties index c19f9bf919..97f1568c1d 100644 --- a/src/main/resources/messages_en_GB.properties +++ b/src/main/resources/messages_en_GB.properties @@ -114,13 +114,16 @@ addPassword.tags=secure,security home.removePassword.title=Remove Password home.removePassword.desc=Remove password protection from your PDF document. +removePassword.tags=secure,Decrypt,security,unpassword,delete password home.compressPdfs.title=Compress home.compressPdfs.desc=Compress PDFs to reduce their file size. +compressPdfs.tags=squish,small,tiny + home.changeMetadata.title=Change Metadata home.changeMetadata.desc=Change/Remove/Add metadata from a PDF document -changeMetadata.tags==Title,author,date,creation,time,publisher,producer,stats, +changeMetadata.tags==Title,author,date,creation,time,publisher,producer,stats home.fileToPDF.title=Convert file to PDF home.fileToPDF.desc=Convert nearly any file to PDF (DOCX, PNG, XLS, PPT, TXT and more) From 295357f12b8b9d2d4d7b49d90e4a29bf43578c91 Mon Sep 17 00:00:00 2001 From: Anthony Stirling <77850077+Frooodle@users.noreply.github.com> Date: Sun, 23 Jul 2023 23:05:02 +0100 Subject: [PATCH 05/18] tags and searching --- src/main/resources/messages_en_GB.properties | 29 +++++++ src/main/resources/static/js/homecard.js | 9 +- src/main/resources/static/js/search.js | 5 +- .../resources/templates/fragments/navbar.html | 82 +++++++++---------- .../templates/fragments/navbarEntry.html | 6 +- 5 files changed, 84 insertions(+), 47 deletions(-) diff --git a/src/main/resources/messages_en_GB.properties b/src/main/resources/messages_en_GB.properties index 97f1568c1d..6d0d22a01e 100644 --- a/src/main/resources/messages_en_GB.properties +++ b/src/main/resources/messages_en_GB.properties @@ -127,84 +127,113 @@ changeMetadata.tags==Title,author,date,creation,time,publisher,producer,stats home.fileToPDF.title=Convert file to PDF home.fileToPDF.desc=Convert nearly any file to PDF (DOCX, PNG, XLS, PPT, TXT and more) +fileToPDF.tags=transformation,format,document,picture,slide,text,conversion,office,docs,word,excel,powerpoint home.ocr.title=OCR / Cleanup scans home.ocr.desc=Cleanup scans and detects text from images within a PDF and re-adds it as text. +ocr.tags=recognition,text,image,scan,read,identify,detection,editable + home.extractImages.title=Extract Images home.extractImages.desc=Extracts all images from a PDF and saves them to zip +extractImages.tags=picture,photo,save,archive,zip,capture,grab home.pdfToPDFA.title=PDF to PDF/A home.pdfToPDFA.desc=Convert PDF to PDF/A for long-term storage +pdfToPDFA.tags=archive,long-term,standard,conversion,storage,preservation home.PDFToWord.title=PDF to Word home.PDFToWord.desc=Convert PDF to Word formats (DOC, DOCX and ODT) +PDFToWord.tags=doc,docx,odt,word,transformation,format,conversion,office,microsoft,docfile home.PDFToPresentation.title=PDF to Presentation home.PDFToPresentation.desc=Convert PDF to Presentation formats (PPT, PPTX and ODP) +PDFToPresentation.tags=slides,show,office,microsoft home.PDFToText.title=PDF to RTF (Text) home.PDFToText.desc=Convert PDF to Text or RTF format +PDFToText.tags=richformat,richtextformat,rich text format home.PDFToHTML.title=PDF to HTML home.PDFToHTML.desc=Convert PDF to HTML format +PDFToHTML.tags=web content,browser friendly + home.PDFToXML.title=PDF to XML home.PDFToXML.desc=Convert PDF to XML format +PDFToXML.tags=data-extraction,structured-content,interop,transformation,convert home.ScannerImageSplit.title=Detect/Split Scanned photos home.ScannerImageSplit.desc=Splits multiple photos from within a photo/PDF +ScannerImageSplit.tags=separate,auto-detect,scans,multi-photo,organize home.sign.title=Sign home.sign.desc=Adds signature to PDF by drawing, text or image +sign.tags=authorize,initials,drawn-signature,text-sign,image-signature home.flatten.title=Flatten home.flatten.desc=Remove all interactive elements and forms from a PDF +flatten.tags=static,deactivate,non-interactive,streamline home.repair.title=Repair home.repair.desc=Tries to repair a corrupt/broken PDF +repair.tags=fix,restore,correction,recover home.removeBlanks.title=Remove Blank pages home.removeBlanks.desc=Detects and removes blank pages from a document +removeBlanks.tags=cleanup,streamline,non-content,organize home.compare.title=Compare home.compare.desc=Compares and shows the differences between 2 PDF Documents +compare.tags=differentiate,contrast,changes,analysis home.certSign.title=Sign with Certificate home.certSign.desc=Signs a PDF with a Certificate/Key (PEM/P12) +certSign.tags=authenticate,PEM,P12,official,encrypt home.pageLayout.title=Multi-Page Layout home.pageLayout.desc=Merge multiple pages of a PDF document into a single page +pageLayout.tags=merge,composite,single-view,organize home.scalePages.title=Adjust page size/scale home.scalePages.desc=Change the size/scale of a page and/or its contents. +scalePages.tags=resize,modify,dimension,adapt home.pipeline.title=Pipeline (Advanced) home.pipeline.desc=Run multiple actions on PDFs by defining pipeline scripts +pipeline.tags=automate,sequence,scripted,batch-process home.add-page-numbers.title=Add Page Numbers home.add-page-numbers.desc=Add Page numbers throughout a document in a set location +add-page-numbers.tags=paginate,label,organize,index home.auto-rename.title=Auto Rename PDF File home.auto-rename.desc=Auto renames a PDF file based on its detected header +auto-rename.tags=auto-detect,header-based,organize,relabel home.adjust-contrast.title=Adjust Colors/Contrast home.adjust-contrast.desc=Adjust Contrast, Saturation and Brightness of a PDF +adjust-contrast.tags=color-correction,tune,modify,enhance home.crop.title=Crop PDF home.crop.desc=Crop a PDF to reduce its size (maintains text!) +crop.tags=trim,shrink,edit,shape home.autoSplitPDF.title=Auto Split Pages home.autoSplitPDF.desc=Auto Split Scanned PDF with physical scanned page splitter QR Code +autoSplitPDF.tags=QR-based,separate,scan-segment,organize home.sanitizePdf.title=Sanitize home.sanitizePdf.desc=Remove scripts and other elements from PDF files +sanitizePdf.tags=clean,secure,safe,remove-threats home.URLToPDF.title=URL/Website To PDF home.URLToPDF.desc=Converts any http(s)URL to PDF +URLToPDF.tags=web-capture,save-page,web-to-doc,archive home.HTMLToPDF.title=HTML to PDF home.HTMLToPDF.desc=Converts any HTML file or zip to PDF +HTMLToPDF.tags=markup,web-content,transformation,convert ########################### diff --git a/src/main/resources/static/js/homecard.js b/src/main/resources/static/js/homecard.js index fb962a12ef..72997a0298 100644 --- a/src/main/resources/static/js/homecard.js +++ b/src/main/resources/static/js/homecard.js @@ -7,8 +7,12 @@ function filterCards() { var card = cards[i]; var title = card.querySelector('h5.card-title').innerText; var text = card.querySelector('p.card-text').innerText; - var tags = card.getAttribute('data-tags'); - var content = title + ' ' + text + ' ' + tags; + + // Get the navbar tags associated with the card + var navbarItem = document.querySelector(`a.dropdown-item[href="${card.id}"]`); + var navbarTags = navbarItem ? navbarItem.getAttribute('data-tags') : ''; + + var content = title + ' ' + text + ' ' + navbarTags; if (content.toUpperCase().indexOf(filter) > -1) { card.style.display = ""; @@ -19,6 +23,7 @@ function filterCards() { } + function toggleFavorite(element) { var img = element.querySelector('img'); var card = element.closest('.feature-card'); diff --git a/src/main/resources/static/js/search.js b/src/main/resources/static/js/search.js index e8c9bf9e96..a400720695 100644 --- a/src/main/resources/static/js/search.js +++ b/src/main/resources/static/js/search.js @@ -43,9 +43,11 @@ document.querySelector('#navbarSearchInput').addEventListener('input', function( var titleElement = item.querySelector('.icon-text'); var iconElement = item.querySelector('.icon'); var itemHref = item.getAttribute('href'); + var tags = item.getAttribute('data-tags') || ""; // If no tags, default to empty string + if (titleElement && iconElement && itemHref !== '#') { var title = titleElement.innerText; - if (title.toLowerCase().indexOf(searchText) !== -1 && !resultsBox.querySelector(`a[href="${item.getAttribute('href')}"]`)) { + if ((title.toLowerCase().indexOf(searchText) !== -1 || tags.toLowerCase().indexOf(searchText) !== -1) && !resultsBox.querySelector(`a[href="${item.getAttribute('href')}"]`)) { var result = document.createElement('a'); result.href = itemHref; result.classList.add('dropdown-item'); @@ -70,3 +72,4 @@ document.querySelector('#navbarSearchInput').addEventListener('input', function( resultsBox.style.width = window.navItemMaxWidth + 'px'; }); + diff --git a/src/main/resources/templates/fragments/navbar.html b/src/main/resources/templates/fragments/navbar.html index 024b7bc396..5b4b594ac9 100644 --- a/src/main/resources/templates/fragments/navbar.html +++ b/src/main/resources/templates/fragments/navbar.html @@ -47,16 +47,16 @@ @@ -69,19 +69,19 @@ From 9e655631b444da74cb7ba0c4b50244aafd735be7 Mon Sep 17 00:00:00 2001 From: Anthony Stirling <77850077+Frooodle@users.noreply.github.com> Date: Mon, 24 Jul 2023 23:53:52 +0100 Subject: [PATCH 08/18] lang cleanup --- scripts/PropSync.java | 80 ++++ src/main/resources/messages_ar_AR.properties | 192 ++++++++- src/main/resources/messages_ca_CA.properties | 189 ++++++++- src/main/resources/messages_de_DE.properties | 192 ++++++++- src/main/resources/messages_es_ES.properties | 195 ++++++++- src/main/resources/messages_eu_ES.properties | 195 ++++++++- src/main/resources/messages_fr_FR.properties | 192 ++++++++- src/main/resources/messages_it_IT.properties | 190 ++++++++- src/main/resources/messages_ja_JP.properties | 424 +++++++++++++++++-- src/main/resources/messages_ko_KR.properties | 189 ++++++++- src/main/resources/messages_pl_PL.properties | 189 ++++++++- src/main/resources/messages_pt_BR.properties | 190 ++++++++- src/main/resources/messages_ro_RO.properties | 189 ++++++++- src/main/resources/messages_ru_RU.properties | 189 ++++++++- src/main/resources/messages_sv_SE.properties | 192 ++++++++- src/main/resources/messages_zh_CN.properties | 189 ++++++++- 16 files changed, 2920 insertions(+), 256 deletions(-) create mode 100644 scripts/PropSync.java diff --git a/scripts/PropSync.java b/scripts/PropSync.java new file mode 100644 index 0000000000..741712b5b5 --- /dev/null +++ b/scripts/PropSync.java @@ -0,0 +1,80 @@ +package stirling.software.Stirling.Stats; + +import java.nio.file.*; +import java.nio.charset.MalformedInputException; +import java.nio.charset.StandardCharsets; +import java.io.*; +import java.util.*; + +public class PropSync { + + public static void main(String[] args) throws IOException { + File folder = new File("C:\\Users\\systo\\git\\Stirling-PDF\\src\\main\\resources"); + File[] files = folder.listFiles((dir, name) -> name.matches("messages_.*\\.properties")); + + List enLines = Files.readAllLines(Paths.get(folder + "\\messages_en_GB.properties"), StandardCharsets.UTF_8); + Map enProps = linesToProps(enLines); + + for (File file : files) { + if (!file.getName().equals("messages_en_GB.properties")) { + System.out.println("Processing file: " + file.getName()); + List lines; + try { + lines = Files.readAllLines(file.toPath(), StandardCharsets.UTF_8); + } catch (MalformedInputException e) { + System.out.println("Skipping due to not UTF8 format for file: " + file.getName()); + continue; + } catch (IOException e) { + throw new UncheckedIOException(e); + } + + Map currentProps = linesToProps(lines); + List newLines = syncPropsWithLines(enProps, currentProps, enLines); + + Files.write(file.toPath(), newLines, StandardCharsets.UTF_8); + System.out.println("Finished processing file: " + file.getName()); + } + } + } + + private static Map linesToProps(List lines) { + Map props = new LinkedHashMap<>(); + for (String line : lines) { + if (!line.trim().isEmpty() && line.contains("=")) { + String[] parts = line.split("=", 2); + props.put(parts[0].trim(), parts[1].trim()); + } + } + return props; + } + + private static List syncPropsWithLines(Map enProps, Map currentProps, List enLines) { + List newLines = new ArrayList<>(); + boolean needsTranslateComment = false; // flag to check if we need to add "TODO: Translate" + + for (String line : enLines) { + if (line.contains("=")) { + String key = line.split("=", 2)[0].trim(); + + if (currentProps.containsKey(key)) { + newLines.add(key + "=" + currentProps.get(key)); + needsTranslateComment = false; + } else { + if (!needsTranslateComment) { + newLines.add("##########################"); + newLines.add("### TODO: Translate ###"); + newLines.add("##########################"); + needsTranslateComment = true; + } + newLines.add(line); + } + } else { + // handle comments and other non-property lines + newLines.add(line); + needsTranslateComment = false; // reset the flag when we encounter comments or empty lines + } + } + + return newLines; + } +} diff --git a/src/main/resources/messages_ar_AR.properties b/src/main/resources/messages_ar_AR.properties index 20a2a09071..9f3d30c6d7 100644 --- a/src/main/resources/messages_ar_AR.properties +++ b/src/main/resources/messages_ar_AR.properties @@ -1,7 +1,7 @@ ########### # Generic # ########### -# the direction that the language is written (ltr = left to right, rtl = right to left) +# the direction that the language is written (ltr=left to right, rtl = right to left) language.direction=rtl pdfPrompt=اختر PDF @@ -26,9 +26,6 @@ text=نص font=الخط selectFillter=- حدد - pageNum=رقم الصفحة -########################## -### TODO: Translate ### -########################## sizes.small=Small sizes.medium=Medium sizes.large=Large @@ -66,134 +63,297 @@ home.desc=متجرك الشامل المستضاف محليًا لجميع اح home.multiTool.title=أداة متعددة PDF home.multiTool.desc=دمج الصفحات وتدويرها وإعادة ترتيبها وإزالتها -########################## -### TODO: Translate ### -########################## multiTool.tags=Multi Tool,Multi operation,UI,click drag,front end,client side home.merge.title=دمج ملفات home.merge.desc=دمج ملفات PDF متعددة في ملف واحد بسهولة. -########################## -### TODO: Translate ### -########################## merge.tags=merge,Page operations,Back end,server side home.split.title=انقسام ملفات home.split.desc=تقسيم ملفات PDF إلى مستندات متعددة +########################## +### TODO: Translate ### +########################## +split.tags=Page operations,divide,Multi Page,cut,server side home.rotate.title=تدوير ملفات home.rotate.desc=قم بتدوير ملفات PDF الخاصة بك بسهولة. +########################## +### TODO: Translate ### +########################## +rotate.tags=server side + home.imageToPdf.title=صورة إلى PDF home.imageToPdf.desc=تحويل الصور (PNG ، JPEG ، GIF) إلى PDF. +########################## +### TODO: Translate ### +########################## +imageToPdf.tags=conversion,img,jpg,picture,photo home.pdfToImage.title=تحويل PDF إلى صورة home.pdfToImage.desc=تحويل ملف PDF إلى صورة. (PNG ، JPEG ، GIF) +########################## +### TODO: Translate ### +########################## +pdfToImage.tags=conversion,img,jpg,picture,photo home.pdfOrganiser.title=منظم home.pdfOrganiser.desc=إزالة / إعادة ترتيب الصفحات بأي ترتيب +########################## +### TODO: Translate ### +########################## +pdfOrganiser.tags=duplex,even,odd,sort,move + home.addImage.title=إضافة صورة إلى ملف PDF home.addImage.desc=إضافة صورة إلى موقع معين في PDF (العمل قيد التقدم) +########################## +### TODO: Translate ### +########################## +addImage.tags=img,jpg,picture,photo home.watermark.title=إضافة علامة مائية home.watermark.desc=أضف علامة مائية مخصصة إلى مستند PDF الخاص بك. +########################## +### TODO: Translate ### +########################## +watermark.tags=Text,repeating,label,own,copyright,trademark,img,jpg,picture,photo home.permissions.title=تغيير الأذونات home.permissions.desc=قم بتغيير أذونات مستند PDF الخاص بك +########################## +### TODO: Translate ### +########################## +permissions.tags=read,write,edit,print + home.removePages.title=إزالة الصفحات home.removePages.desc=حذف الصفحات غير المرغوب فيها من مستند PDF الخاص بك. +########################## +### TODO: Translate ### +########################## +removePages.tags=Remove pages,delete pages home.addPassword.title=إضافة كلمة مرور home.addPassword.desc=تشفير مستند PDF الخاص بك بكلمة مرور. +########################## +### TODO: Translate ### +########################## +addPassword.tags=secure,security home.removePassword.title=إزالة كلمة المرور home.removePassword.desc=إزالة الحماية بكلمة مرور من مستند PDF الخاص بك. +########################## +### TODO: Translate ### +########################## +removePassword.tags=secure,Decrypt,security,unpassword,delete password home.compressPdfs.title=ضغط ملفات home.compressPdfs.desc=ضغط ملفات PDF لتقليل حجم الملف. +########################## +### TODO: Translate ### +########################## +compressPdfs.tags=squish,small,tiny + home.changeMetadata.title=\u062A\u063A\u064A\u064A\u0631 \u0627\u0644\u0628\u064A\u0627\u0646\u0627\u062A \u0627\u0644\u0648\u0635\u0641\u064A\u0629 home.changeMetadata.desc=\u062A\u063A\u064A\u064A\u0631 / \u0625\u0632\u0627\u0644\u0629 / \u0625\u0636\u0627\u0641\u0629 \u0628\u064A\u0627\u0646\u0627\u062A \u0623\u0648\u0644\u064A\u0629 \u0645\u0646 \u0645\u0633\u062A\u0646\u062F PDF +########################## +### TODO: Translate ### +########################## +changeMetadata.tags==Title,author,date,creation,time,publisher,producer,stats home.fileToPDF.title=\u062A\u062D\u0648\u064A\u0644 \u0627\u0644\u0645\u0644\u0641 \u0625\u0644\u0649 PDF home.fileToPDF.desc=\u062A\u062D\u0648\u064A\u0644 \u0623\u064A \u0645\u0644\u0641 \u062A\u0642\u0631\u064A\u0628\u0627 \u0625\u0644\u0649 PDF (DOCX \u0648PNG \u0648XLS \u0648PPT \u0648TXT \u0648\u0627\u0644\u0645\u0632\u064A\u062F) +########################## +### TODO: Translate ### +########################## +fileToPDF.tags=transformation,format,document,picture,slide,text,conversion,office,docs,word,excel,powerpoint home.ocr.title=\u062A\u0634\u063A\u064A\u0644 OCR \u0639\u0644\u0649 PDF \u0648 / \u0623\u0648 \u0645\u0633\u062D \u0636\u0648\u0626\u064A home.ocr.desc=\u064A\u0642\u0648\u0645 \u0628\u0631\u0646\u0627\u0645\u062C \u0627\u0644\u062A\u0646\u0638\u064A\u0641 \u0628\u0645\u0633\u062D \u0648\u0627\u0643\u062A\u0634\u0627\u0641 \u0627\u0644\u0646\u0635 \u0645\u0646 \u0627\u0644\u0635\u0648\u0631 \u062F\u0627\u062E\u0644 \u0645\u0644\u0641 PDF \u0648\u064A\u0639\u064A\u062F \u0625\u0636\u0627\u0641\u062A\u0647 \u0643\u0646\u0635 +########################## +### TODO: Translate ### +########################## +ocr.tags=recognition,text,image,scan,read,identify,detection,editable + home.extractImages.title=\u0627\u0633\u062A\u062E\u0631\u0627\u062C \u0627\u0644\u0635\u0648\u0631 home.extractImages.desc=\u064A\u0633\u062A\u062E\u0631\u062C \u062C\u0645\u064A\u0639 \u0627\u0644\u0635\u0648\u0631 \u0645\u0646 \u0645\u0644\u0641 PDF \u0648\u064A\u062D\u0641\u0638\u0647\u0627 \u0641\u064A \u0627\u0644\u0631\u0645\u0632 \u0627\u0644\u0628\u0631\u064A\u062F\u064A +########################## +### TODO: Translate ### +########################## +extractImages.tags=picture,photo,save,archive,zip,capture,grab home.pdfToPDFA.title=\u062A\u062D\u0648\u064A\u0644 \u0645\u0644\u0641\u0627\u062A PDF \u0625\u0644\u0649 PDF / A home.pdfToPDFA.desc=\u062A\u062D\u0648\u064A\u0644 PDF \u0625\u0644\u0649 PDF / A \u0644\u0644\u062A\u062E\u0632\u064A\u0646 \u0637\u0648\u064A\u0644 \u0627\u0644\u0645\u062F\u0649 +########################## +### TODO: Translate ### +########################## +pdfToPDFA.tags=archive,long-term,standard,conversion,storage,preservation home.PDFToWord.title=تحويل PDF إلى Word home.PDFToWord.desc=تحويل PDF إلى تنسيقات Word (DOC و DOCX و ODT) +########################## +### TODO: Translate ### +########################## +PDFToWord.tags=doc,docx,odt,word,transformation,format,conversion,office,microsoft,docfile home.PDFToPresentation.title=PDF للعرض التقديمي home.PDFToPresentation.desc=تحويل PDF إلى تنسيقات عرض تقديمي (PPT و PPTX و ODP) +########################## +### TODO: Translate ### +########################## +PDFToPresentation.tags=slides,show,office,microsoft home.PDFToText.title=تحويل PDF إلى نص / RTF home.PDFToText.desc=تحويل PDF إلى تنسيق نص أو RTF +########################## +### TODO: Translate ### +########################## +PDFToText.tags=richformat,richtextformat,rich text format home.PDFToHTML.title=تحويل PDF إلى HTML home.PDFToHTML.desc=تحويل PDF إلى تنسيق HTML +########################## +### TODO: Translate ### +########################## +PDFToHTML.tags=web content,browser friendly + home.PDFToXML.title=تحويل PDF إلى XML home.PDFToXML.desc=تحويل PDF إلى تنسيق XML +########################## +### TODO: Translate ### +########################## +PDFToXML.tags=data-extraction,structured-content,interop,transformation,convert home.ScannerImageSplit.title=كشف / انقسام الصور الممسوحة ضوئيًا home.ScannerImageSplit.desc=تقسيم عدة صور من داخل صورة / ملف PDF +########################## +### TODO: Translate ### +########################## +ScannerImageSplit.tags=separate,auto-detect,scans,multi-photo,organize home.sign.title=تسجيل الدخول home.sign.desc=إضافة التوقيع إلى PDF عن طريق الرسم أو النص أو الصورة +########################## +### TODO: Translate ### +########################## +sign.tags=authorize,initials,drawn-signature,text-sign,image-signature home.flatten.title=تسطيح home.flatten.desc=قم بإزالة كافة العناصر والنماذج التفاعلية من ملف PDF +########################## +### TODO: Translate ### +########################## +flatten.tags=static,deactivate,non-interactive,streamline home.repair.title=إصلاح home.repair.desc=يحاول إصلاح ملف PDF تالف / معطل +########################## +### TODO: Translate ### +########################## +repair.tags=fix,restore,correction,recover home.removeBlanks.title=إزالة الصفحات الفارغة home.removeBlanks.desc=يكتشف ويزيل الصفحات الفارغة من المستند +########################## +### TODO: Translate ### +########################## +removeBlanks.tags=cleanup,streamline,non-content,organize home.compare.title=قارن home.compare.desc=يقارن ويظهر الاختلافات بين 2 من مستندات PDF +########################## +### TODO: Translate ### +########################## +compare.tags=differentiate,contrast,changes,analysis home.certSign.title=Sign with Certificate home.certSign.desc=Signs a PDF with a Certificate/Key (PEM/P12) +########################## +### TODO: Translate ### +########################## +certSign.tags=authenticate,PEM,P12,official,encrypt home.pageLayout.title=Multi-Page Layout home.pageLayout.desc=Merge multiple pages of a PDF document into a single page +########################## +### TODO: Translate ### +########################## +pageLayout.tags=merge,composite,single-view,organize home.scalePages.title=Adjust page size/scale home.scalePages.desc=Change the size/scale of page and/or its contents. - -########################## -### TODO: Translate ### ########################## +### TODO: Translate ### +########################## +scalePages.tags=resize,modify,dimension,adapt + home.pipeline.title=Pipeline (Advanced) home.pipeline.desc=Run multiple actions on PDFs by defining pipeline scripts +########################## +### TODO: Translate ### +########################## +pipeline.tags=automate,sequence,scripted,batch-process home.add-page-numbers.title=Add Page Numbers home.add-page-numbers.desc=Add Page numbers throughout a document in a set location +########################## +### TODO: Translate ### +########################## +add-page-numbers.tags=paginate,label,organize,index home.auto-rename.title=Auto Rename PDF File home.auto-rename.desc=Auto renames a PDF file based on its detected header +########################## +### TODO: Translate ### +########################## +auto-rename.tags=auto-detect,header-based,organize,relabel home.adjust-contrast.title=Adjust Colors/Contrast home.adjust-contrast.desc=Adjust Contrast, Saturation and Brightness of a PDF +########################## +### TODO: Translate ### +########################## +adjust-contrast.tags=color-correction,tune,modify,enhance home.crop.title=Crop PDF home.crop.desc=Crop a PDF to reduce its size (maintains text!) +########################## +### TODO: Translate ### +########################## +crop.tags=trim,shrink,edit,shape home.autoSplitPDF.title=Auto Split Pages home.autoSplitPDF.desc=Auto Split Scanned PDF with physical scanned page splitter QR Code +########################## +### TODO: Translate ### +########################## +autoSplitPDF.tags=QR-based,separate,scan-segment,organize home.sanitizePdf.title=Sanitize home.sanitizePdf.desc=Remove scripts and other elements from PDF files +########################## +### TODO: Translate ### +########################## +sanitizePdf.tags=clean,secure,safe,remove-threats + +########################## +### TODO: Translate ### +########################## +home.URLToPDF.title=URL/Website To PDF +home.URLToPDF.desc=Converts any http(s)URL to PDF +URLToPDF.tags=web-capture,save-page,web-to-doc,archive + +########################## +### TODO: Translate ### +########################## +home.HTMLToPDF.title=HTML to PDF +home.HTMLToPDF.desc=Converts any HTML file or zip to PDF +HTMLToPDF.tags=markup,web-content,transformation,convert ########################### @@ -215,6 +375,7 @@ HTMLToPDF.help=Accepts HTML files and ZIPs containing html/css/images etc requir HTMLToPDF.submit=Convert HTMLToPDF.credit=Uses WeasyPrint + #sanitizePDF sanitizePDF.title=Sanitize PDF sanitizePDF.header=Sanitize a PDF file @@ -331,9 +492,6 @@ sign.title=تسجيل الدخول sign.header=توقيع ملفات PDF sign.upload=تحميل الصورة sign.draw=رسم التوقيع -########################## -### TODO: Translate ### -########################## sign.text=Text Input sign.clear=واضح sign.add=إضافة @@ -362,7 +520,7 @@ ScannerImageSplit.selectText.7=الحد الأدنى لمنطقة المحيط: ScannerImageSplit.selectText.8=تعيين الحد الأدنى لمنطقة المحيط للصورة ScannerImageSplit.selectText.9=حجم الحدود: ScannerImageSplit.selectText.10=يضبط حجم الحدود المضافة والمزالة لمنع الحدود البيضاء في الإخراج (الافتراضي: 1). - + #OCR ocr.title=\u0627\u0644\u062A\u0639\u0631\u0641 \u0627\u0644\u0636\u0648\u0626\u064A \u0639\u0644\u0649 \u0627\u0644\u062D\u0631\u0648\u0641 / \u062A\u0646\u0638\u064A\u0641 \u0627\u0644\u0645\u0633\u062D \u0627\u0644\u0636\u0648\u0626\u064A diff --git a/src/main/resources/messages_ca_CA.properties b/src/main/resources/messages_ca_CA.properties index fb1611870a..fb29aa6b3c 100644 --- a/src/main/resources/messages_ca_CA.properties +++ b/src/main/resources/messages_ca_CA.properties @@ -1,7 +1,7 @@ ########### # Generic # ########### -# the direction that the language is written (ltr = left to right, rtl = right to left) +# the direction that the language is written (ltr=left to right, rtl = right to left) language.direction=ltr pdfPrompt=Selecciona PDF(s) @@ -26,9 +26,6 @@ text=Text font=Tipus de lletra selectFillter=-- Selecciona -- pageNum=Número de pàgina -########################## -### TODO: Translate ### -########################## sizes.small=Small sizes.medium=Medium sizes.large=Large @@ -66,134 +63,297 @@ home.desc=L'eina allotjada localment per a necessitats PDF. home.multiTool.title=PDF Multi Tool home.multiTool.desc=Fusiona, Rota, Reorganitza, i Esborra pàgines -########################## -### TODO: Translate ### -########################## multiTool.tags=Multi Tool,Multi operation,UI,click drag,front end,client side home.merge.title=Fusiona home.merge.desc=Fusiona fàcilment pàgines en una. -########################## -### TODO: Translate ### -########################## merge.tags=merge,Page operations,Back end,server side home.split.title=Divideix home.split.desc=Divideix PDFs en múltiples documents +########################## +### TODO: Translate ### +########################## +split.tags=Page operations,divide,Multi Page,cut,server side home.rotate.title=Rota home.rotate.desc=Rota els PDFs. +########################## +### TODO: Translate ### +########################## +rotate.tags=server side + home.imageToPdf.title=Imatge a PDF home.imageToPdf.desc=Converteix imatge (PNG, JPEG, GIF) a PDF. +########################## +### TODO: Translate ### +########################## +imageToPdf.tags=conversion,img,jpg,picture,photo home.pdfToImage.title=PDF a Imatge home.pdfToImage.desc=Converteix PDF a imatge. (PNG, JPEG, GIF) +########################## +### TODO: Translate ### +########################## +pdfToImage.tags=conversion,img,jpg,picture,photo home.pdfOrganiser.title=Organitza home.pdfOrganiser.desc=Elimina/Reorganitza pàgines en qualsevol ordre +########################## +### TODO: Translate ### +########################## +pdfOrganiser.tags=duplex,even,odd,sort,move + home.addImage.title=Afegir imatge a PDF home.addImage.desc=Afegeix imatge en un PDF (En progrés) +########################## +### TODO: Translate ### +########################## +addImage.tags=img,jpg,picture,photo home.watermark.title=Afegir Marca d'aigua home.watermark.desc=Afegir Marca d'aigua personalitzada en un PDF +########################## +### TODO: Translate ### +########################## +watermark.tags=Text,repeating,label,own,copyright,trademark,img,jpg,picture,photo home.permissions.title=Canvia permissos home.permissions.desc=Canvia permisos del document PDF +########################## +### TODO: Translate ### +########################## +permissions.tags=read,write,edit,print + home.removePages.title=Elimina home.removePages.desc=Elimina pàgines del document PDF. +########################## +### TODO: Translate ### +########################## +removePages.tags=Remove pages,delete pages home.addPassword.title=Afegir Password home.addPassword.desc=Xifra document PDF amb password. +########################## +### TODO: Translate ### +########################## +addPassword.tags=secure,security home.removePassword.title=Elimina Password home.removePassword.desc=Elimia Password de document PDF. +########################## +### TODO: Translate ### +########################## +removePassword.tags=secure,Decrypt,security,unpassword,delete password home.compressPdfs.title=Comprimeix home.compressPdfs.desc=Comprimeix PDFs per reduir la mida. +########################## +### TODO: Translate ### +########################## +compressPdfs.tags=squish,small,tiny + home.changeMetadata.title=Canvia Metadades home.changeMetadata.desc=Canvia/Treu/Afegeix matadades al document PDF. +########################## +### TODO: Translate ### +########################## +changeMetadata.tags==Title,author,date,creation,time,publisher,producer,stats home.fileToPDF.title=Converteix arxiu a PDF home.fileToPDF.desc=Converteix qualsevol arxiu a PDF (DOCX, PNG, XLS, PPT, TXT i més) +########################## +### TODO: Translate ### +########################## +fileToPDF.tags=transformation,format,document,picture,slide,text,conversion,office,docs,word,excel,powerpoint home.ocr.title=Executa exploracions OCR i/o neteja escanejos home.ocr.desc=Neteja escanejats i detecta text d'imatges dins d'un PDF i el torna a afegir com a text. +########################## +### TODO: Translate ### +########################## +ocr.tags=recognition,text,image,scan,read,identify,detection,editable + home.extractImages.title=Extreu Imatges home.extractImages.desc=Extreu les Imatges del PDF i les desa a zip +########################## +### TODO: Translate ### +########################## +extractImages.tags=picture,photo,save,archive,zip,capture,grab home.pdfToPDFA.title=PDF a PDF/A home.pdfToPDFA.desc=Converteix PDF a PDF/A per desar a llarg termini. +########################## +### TODO: Translate ### +########################## +pdfToPDFA.tags=archive,long-term,standard,conversion,storage,preservation home.PDFToWord.title=PDF a Word home.PDFToWord.desc=Converteix PDF a formats de Word (DOC, DOCX and ODT) +########################## +### TODO: Translate ### +########################## +PDFToWord.tags=doc,docx,odt,word,transformation,format,conversion,office,microsoft,docfile home.PDFToPresentation.title=PDF a Presentació home.PDFToPresentation.desc=Convert PDF to Presentation formats (PPT, PPTX and ODP) +########################## +### TODO: Translate ### +########################## +PDFToPresentation.tags=slides,show,office,microsoft home.PDFToText.title=PDF a Text/RTF home.PDFToText.desc=Converteix PDF a Text o format RTF +########################## +### TODO: Translate ### +########################## +PDFToText.tags=richformat,richtextformat,rich text format home.PDFToHTML.title=PDF a HTML home.PDFToHTML.desc=Converteix PDF a format HTML +########################## +### TODO: Translate ### +########################## +PDFToHTML.tags=web content,browser friendly + home.PDFToXML.title=PDF a XML home.PDFToXML.desc=Converteix PDF a format XML +########################## +### TODO: Translate ### +########################## +PDFToXML.tags=data-extraction,structured-content,interop,transformation,convert home.ScannerImageSplit.title=Detecta/Divideix fotos escanejades home.ScannerImageSplit.desc=Divideix múltiples fotos dins del PDF/foto +########################## +### TODO: Translate ### +########################## +ScannerImageSplit.tags=separate,auto-detect,scans,multi-photo,organize home.sign.title=Sign home.sign.desc=Afegeix signatura al PDF mitjançant dibuix, text o imatge +########################## +### TODO: Translate ### +########################## +sign.tags=authorize,initials,drawn-signature,text-sign,image-signature home.flatten.title=Aplanar home.flatten.desc=Elimineu tots els elements i formularis interactius d'un PDF +########################## +### TODO: Translate ### +########################## +flatten.tags=static,deactivate,non-interactive,streamline home.repair.title=Reparar home.repair.desc=Intenta reparar un PDF danyat o trencat +########################## +### TODO: Translate ### +########################## +repair.tags=fix,restore,correction,recover home.removeBlanks.title=Elimina les pàgines en blanc home.removeBlanks.desc=Detecta i elimina les pàgines en blanc d'un document +########################## +### TODO: Translate ### +########################## +removeBlanks.tags=cleanup,streamline,non-content,organize home.compare.title=Compara home.compare.desc=Compara i mostra les diferències entre 2 documents PDF +########################## +### TODO: Translate ### +########################## +compare.tags=differentiate,contrast,changes,analysis home.certSign.title=Sign with Certificate home.certSign.desc=Signs a PDF with a Certificate/Key (PEM/P12) +########################## +### TODO: Translate ### +########################## +certSign.tags=authenticate,PEM,P12,official,encrypt home.pageLayout.title=Multi-Page Layout home.pageLayout.desc=Merge multiple pages of a PDF document into a single page +########################## +### TODO: Translate ### +########################## +pageLayout.tags=merge,composite,single-view,organize home.scalePages.title=Adjust page size/scale home.scalePages.desc=Change the size/scale of page and/or its contents. - -########################## -### TODO: Translate ### ########################## +### TODO: Translate ### +########################## +scalePages.tags=resize,modify,dimension,adapt + home.pipeline.title=Pipeline (Advanced) home.pipeline.desc=Run multiple actions on PDFs by defining pipeline scripts +########################## +### TODO: Translate ### +########################## +pipeline.tags=automate,sequence,scripted,batch-process home.add-page-numbers.title=Add Page Numbers home.add-page-numbers.desc=Add Page numbers throughout a document in a set location +########################## +### TODO: Translate ### +########################## +add-page-numbers.tags=paginate,label,organize,index home.auto-rename.title=Auto Rename PDF File home.auto-rename.desc=Auto renames a PDF file based on its detected header +########################## +### TODO: Translate ### +########################## +auto-rename.tags=auto-detect,header-based,organize,relabel home.adjust-contrast.title=Adjust Colors/Contrast home.adjust-contrast.desc=Adjust Contrast, Saturation and Brightness of a PDF +########################## +### TODO: Translate ### +########################## +adjust-contrast.tags=color-correction,tune,modify,enhance home.crop.title=Crop PDF home.crop.desc=Crop a PDF to reduce its size (maintains text!) +########################## +### TODO: Translate ### +########################## +crop.tags=trim,shrink,edit,shape home.autoSplitPDF.title=Auto Split Pages home.autoSplitPDF.desc=Auto Split Scanned PDF with physical scanned page splitter QR Code +########################## +### TODO: Translate ### +########################## +autoSplitPDF.tags=QR-based,separate,scan-segment,organize home.sanitizePdf.title=Sanitize home.sanitizePdf.desc=Remove scripts and other elements from PDF files +########################## +### TODO: Translate ### +########################## +sanitizePdf.tags=clean,secure,safe,remove-threats + +########################## +### TODO: Translate ### +########################## +home.URLToPDF.title=URL/Website To PDF +home.URLToPDF.desc=Converts any http(s)URL to PDF +URLToPDF.tags=web-capture,save-page,web-to-doc,archive + +########################## +### TODO: Translate ### +########################## +home.HTMLToPDF.title=HTML to PDF +home.HTMLToPDF.desc=Converts any HTML file or zip to PDF +HTMLToPDF.tags=markup,web-content,transformation,convert ########################### @@ -215,6 +375,7 @@ HTMLToPDF.help=Accepts HTML files and ZIPs containing html/css/images etc requir HTMLToPDF.submit=Convert HTMLToPDF.credit=Uses WeasyPrint + #sanitizePDF sanitizePDF.title=Sanitize PDF sanitizePDF.header=Sanitize a PDF file @@ -359,7 +520,7 @@ ScannerImageSplit.selectText.7=Àrea de contorn mínima: ScannerImageSplit.selectText.8=Estableix el llindar mínim de l'àrea de contorn per a una foto ScannerImageSplit.selectText.9=Mida Vora: ScannerImageSplit.selectText.10=Estableix la mida de la vora afegida i eliminada per evitar vores blanques a la sortida (per defecte: 1). - + #OCR ocr.title=OCR / Neteja escaneig diff --git a/src/main/resources/messages_de_DE.properties b/src/main/resources/messages_de_DE.properties index 090e12eed1..04f31beb41 100644 --- a/src/main/resources/messages_de_DE.properties +++ b/src/main/resources/messages_de_DE.properties @@ -1,7 +1,7 @@ ########### # Generic # ########### -# the direction that the language is written (ltr = left to right, rtl = right to left) +# the direction that the language is written (ltr=left to right, rtl = right to left) language.direction=ltr pdfPrompt=PDF auswählen @@ -26,9 +26,6 @@ text=Text font=Schriftart selectFillter=-- Auswählen -- pageNum=Seitenzahl -########################## -### TODO: Translate ### -########################## sizes.small=Small sizes.medium=Medium sizes.large=Large @@ -66,134 +63,297 @@ home.desc=Ihr lokal gehosteter One-Stop-Shop für alle Ihre PDF-Anforderungen. home.multiTool.title=PDF-Multitool home.multiTool.desc=Seiten zusammenführen, drehen, neu anordnen und entfernen -########################## -### TODO: Translate ### -########################## multiTool.tags=Multi Tool,Multi operation,UI,click drag,front end,client side home.merge.title=Zusammenführen home.merge.desc=Mehrere PDF-Dateien zu einer einzigen zusammenführen. -########################## -### TODO: Translate ### -########################## merge.tags=merge,Page operations,Back end,server side home.split.title=Aufteilen home.split.desc=PDFs in mehrere Dokumente aufteilen. +########################## +### TODO: Translate ### +########################## +split.tags=Page operations,divide,Multi Page,cut,server side home.rotate.title=Drehen home.rotate.desc=Drehen Sie Ihre PDFs ganz einfach. +########################## +### TODO: Translate ### +########################## +rotate.tags=server side + home.imageToPdf.title=Bild zu PDF home.imageToPdf.desc=Konvertieren Sie ein Bild (PNG, JPEG, GIF) in ein PDF. +########################## +### TODO: Translate ### +########################## +imageToPdf.tags=conversion,img,jpg,picture,photo home.pdfToImage.title=PDF zu Bild home.pdfToImage.desc=Konvertieren Sie ein PDF in ein Bild (PNG, JPEG, GIF). +########################## +### TODO: Translate ### +########################## +pdfToImage.tags=conversion,img,jpg,picture,photo home.pdfOrganiser.title=Organisieren home.pdfOrganiser.desc=Seiten entfernen und Seitenreihenfolge ändern. +########################## +### TODO: Translate ### +########################## +pdfOrganiser.tags=duplex,even,odd,sort,move + home.addImage.title=Bild einfügen home.addImage.desc=Fügt ein Bild an eine bestimmte Stelle im PDF ein (Work in progress). +########################## +### TODO: Translate ### +########################## +addImage.tags=img,jpg,picture,photo home.watermark.title=Wasserzeichen hinzufügen home.watermark.desc=Fügen Sie ein eigenes Wasserzeichen zu Ihrem PDF hinzu. +########################## +### TODO: Translate ### +########################## +watermark.tags=Text,repeating,label,own,copyright,trademark,img,jpg,picture,photo home.permissions.title=Berechtigungen ändern home.permissions.desc=Die Berechtigungen für Ihr PDF-Dokument verändern. +########################## +### TODO: Translate ### +########################## +permissions.tags=read,write,edit,print + home.removePages.title=Entfernen home.removePages.desc=Ungewollte Seiten aus dem PDF entfernen. +########################## +### TODO: Translate ### +########################## +removePages.tags=Remove pages,delete pages home.addPassword.title=Passwort hinzufügen home.addPassword.desc=Das PDF mit einem Passwort verschlüsseln. +########################## +### TODO: Translate ### +########################## +addPassword.tags=secure,security home.removePassword.title=Passwort entfernen home.removePassword.desc=Den Passwortschutz eines PDFs entfernen. +########################## +### TODO: Translate ### +########################## +removePassword.tags=secure,Decrypt,security,unpassword,delete password home.compressPdfs.title=Komprimieren home.compressPdfs.desc=PDF komprimieren um die Dateigröße zu reduzieren. +########################## +### TODO: Translate ### +########################## +compressPdfs.tags=squish,small,tiny + home.changeMetadata.title=Metadaten ändern home.changeMetadata.desc=Ändern/Entfernen/Hinzufügen von Metadaten aus einem PDF-Dokument +########################## +### TODO: Translate ### +########################## +changeMetadata.tags==Title,author,date,creation,time,publisher,producer,stats home.fileToPDF.title=Datei in PDF konvertieren home.fileToPDF.desc=Konvertieren Sie nahezu jede Datei in PDF (DOCX, PNG, XLS, PPT, TXT und mehr) +########################## +### TODO: Translate ### +########################## +fileToPDF.tags=transformation,format,document,picture,slide,text,conversion,office,docs,word,excel,powerpoint home.ocr.title=Führe OCR auf PDF- und/oder Cleanup-Scans aus home.ocr.desc=Cleanup scannt und erkennt Text aus Bildern in einer PDF-Datei und fügt ihn erneut als Text hinzu. +########################## +### TODO: Translate ### +########################## +ocr.tags=recognition,text,image,scan,read,identify,detection,editable + home.extractImages.title=Bilder extrahieren home.extractImages.desc=Extrahiert alle Bilder aus einer PDF-Datei und speichert sie als Zip-Datei +########################## +### TODO: Translate ### +########################## +extractImages.tags=picture,photo,save,archive,zip,capture,grab home.pdfToPDFA.title=PDF zu PDF/A konvertieren home.pdfToPDFA.desc=PDF zu PDF/A für Langzeitarchivierung konvertieren +########################## +### TODO: Translate ### +########################## +pdfToPDFA.tags=archive,long-term,standard,conversion,storage,preservation home.PDFToWord.title=PDF zu Word home.PDFToWord.desc=PDF in Word-Formate konvertieren (DOC, DOCX und ODT) +########################## +### TODO: Translate ### +########################## +PDFToWord.tags=doc,docx,odt,word,transformation,format,conversion,office,microsoft,docfile home.PDFToPresentation.title=PDF zu Präsentation home.PDFToPresentation.desc=PDF in Präsentationsformate konvertieren (PPT, PPTX und ODP) +########################## +### TODO: Translate ### +########################## +PDFToPresentation.tags=slides,show,office,microsoft home.PDFToText.title=PDF in Text/RTF home.PDFToText.desc=PDF in Text- oder RTF-Format konvertieren +########################## +### TODO: Translate ### +########################## +PDFToText.tags=richformat,richtextformat,rich text format home.PDFToHTML.title=PDF in HTML home.PDFToHTML.desc=PDF in HTML-Format konvertieren +########################## +### TODO: Translate ### +########################## +PDFToHTML.tags=web content,browser friendly + home.PDFToXML.title=PDF in XML home.PDFToXML.desc=PDF in XML-Format konvertieren +########################## +### TODO: Translate ### +########################## +PDFToXML.tags=data-extraction,structured-content,interop,transformation,convert home.ScannerImageSplit.title=Gescannte Fotos erkennen/aufteilen home.ScannerImageSplit.desc=Teilt mehrere Fotos innerhalb eines Fotos/PDF +########################## +### TODO: Translate ### +########################## +ScannerImageSplit.tags=separate,auto-detect,scans,multi-photo,organize home.sign.title=Signieren home.sign.desc=Fügt PDF-Signaturen durch Zeichnung, Text oder Bild hinzu +########################## +### TODO: Translate ### +########################## +sign.tags=authorize,initials,drawn-signature,text-sign,image-signature home.flatten.title=Abflachen home.flatten.desc=Alle interaktiven Elemente und Formulare aus einem PDF entfernen +########################## +### TODO: Translate ### +########################## +flatten.tags=static,deactivate,non-interactive,streamline home.repair.title=Reparatur home.repair.desc=Versucht, ein beschädigtes/kaputtes PDF zu reparieren +########################## +### TODO: Translate ### +########################## +repair.tags=fix,restore,correction,recover home.removeBlanks.title=Leere Seiten entfernen home.removeBlanks.desc=Erkennt und entfernt leere Seiten aus einem Dokument +########################## +### TODO: Translate ### +########################## +removeBlanks.tags=cleanup,streamline,non-content,organize home.compare.title=Vergleichen home.compare.desc=Vergleicht und zeigt die Unterschiede zwischen zwei PDF-Dokumenten an +########################## +### TODO: Translate ### +########################## +compare.tags=differentiate,contrast,changes,analysis home.certSign.title=Sign with Certificate home.certSign.desc=Signs a PDF with a Certificate/Key (PEM/P12) +########################## +### TODO: Translate ### +########################## +certSign.tags=authenticate,PEM,P12,official,encrypt home.pageLayout.title=Multi-Page Layout home.pageLayout.desc=Merge multiple pages of a PDF document into a single page +########################## +### TODO: Translate ### +########################## +pageLayout.tags=merge,composite,single-view,organize home.scalePages.title=Adjust page size/scale home.scalePages.desc=Change the size/scale of page and/or its contents. - -########################## -### TODO: Translate ### ########################## +### TODO: Translate ### +########################## +scalePages.tags=resize,modify,dimension,adapt + home.pipeline.title=Pipeline (Advanced) home.pipeline.desc=Run multiple actions on PDFs by defining pipeline scripts +########################## +### TODO: Translate ### +########################## +pipeline.tags=automate,sequence,scripted,batch-process home.add-page-numbers.title=Add Page Numbers home.add-page-numbers.desc=Add Page numbers throughout a document in a set location +########################## +### TODO: Translate ### +########################## +add-page-numbers.tags=paginate,label,organize,index home.auto-rename.title=Auto Rename PDF File home.auto-rename.desc=Auto renames a PDF file based on its detected header +########################## +### TODO: Translate ### +########################## +auto-rename.tags=auto-detect,header-based,organize,relabel home.adjust-contrast.title=Adjust Colors/Contrast home.adjust-contrast.desc=Adjust Contrast, Saturation and Brightness of a PDF +########################## +### TODO: Translate ### +########################## +adjust-contrast.tags=color-correction,tune,modify,enhance home.crop.title=Crop PDF home.crop.desc=Crop a PDF to reduce its size (maintains text!) +########################## +### TODO: Translate ### +########################## +crop.tags=trim,shrink,edit,shape home.autoSplitPDF.title=Auto Split Pages home.autoSplitPDF.desc=Auto Split Scanned PDF with physical scanned page splitter QR Code +########################## +### TODO: Translate ### +########################## +autoSplitPDF.tags=QR-based,separate,scan-segment,organize home.sanitizePdf.title=Sanitize home.sanitizePdf.desc=Remove scripts and other elements from PDF files +########################## +### TODO: Translate ### +########################## +sanitizePdf.tags=clean,secure,safe,remove-threats + +########################## +### TODO: Translate ### +########################## +home.URLToPDF.title=URL/Website To PDF +home.URLToPDF.desc=Converts any http(s)URL to PDF +URLToPDF.tags=web-capture,save-page,web-to-doc,archive + +########################## +### TODO: Translate ### +########################## +home.HTMLToPDF.title=HTML to PDF +home.HTMLToPDF.desc=Converts any HTML file or zip to PDF +HTMLToPDF.tags=markup,web-content,transformation,convert ########################### @@ -215,6 +375,7 @@ HTMLToPDF.help=Accepts HTML files and ZIPs containing html/css/images etc requir HTMLToPDF.submit=Convert HTMLToPDF.credit=Uses WeasyPrint + #sanitizePDF sanitizePDF.title=Sanitize PDF sanitizePDF.header=Sanitize a PDF file @@ -338,9 +499,6 @@ sign.add=Hinzufügen #repair repair.title=Reparieren -########################## -### TODO: Translate ### -########################## repair.header=Repair PDFs repair.submit=Reparieren @@ -362,7 +520,7 @@ ScannerImageSplit.selectText.7=Minimaler Konturbereich: ScannerImageSplit.selectText.8=Legt den minimalen Konturbereichsschwellenwert für ein Foto fest ScannerImageSplit.selectText.9=Randgröße: ScannerImageSplit.selectText.10=Legt die Größe des hinzugefügten und entfernten Randes fest, um weiße Ränder in der Ausgabe zu verhindern (Standard: 1). - + #OCR ocr.title=OCR / Scan-Bereinigung diff --git a/src/main/resources/messages_es_ES.properties b/src/main/resources/messages_es_ES.properties index fe99edf27e..56e92fdb77 100644 --- a/src/main/resources/messages_es_ES.properties +++ b/src/main/resources/messages_es_ES.properties @@ -1,7 +1,7 @@ ########### # Generic # ########### -# the direction that the language is written (ltr = left to right, rtl = right to left) +# the direction that the language is written (ltr=left to right, rtl = right to left) language.direction=ltr pdfPrompt=Seleccionar PDF(s) @@ -24,14 +24,8 @@ alphabet=Alfabeto downloadPdf=Descargar PDF text=Texto font=Fuente -########################## -### TODO: Translate ### -########################## selectFillter=-- Select -- pageNum=Número de página -########################## -### TODO: Translate ### -########################## sizes.small=Small sizes.medium=Medium sizes.large=Large @@ -69,134 +63,297 @@ home.desc=Tu ventanilla única autohospedada para todas tus necesidades PDF home.multiTool.title=Multi-herramienta PDF home.multiTool.desc=Combinar, rotar, reorganizar y eliminar páginas -########################## -### TODO: Translate ### -########################## multiTool.tags=Multi Tool,Multi operation,UI,click drag,front end,client side home.merge.title=Unir home.merge.desc=Unir fácilmente múltiples PDFs en uno -########################## -### TODO: Translate ### -########################## merge.tags=merge,Page operations,Back end,server side home.split.title=Dividir home.split.desc=Dividir PDFs en múltiples documentos +########################## +### TODO: Translate ### +########################## +split.tags=Page operations,divide,Multi Page,cut,server side home.rotate.title=Rotar home.rotate.desc=Rotar fácilmente tus PDFs +########################## +### TODO: Translate ### +########################## +rotate.tags=server side + home.imageToPdf.title=Imagen a PDF home.imageToPdf.desc=Convertir una imagen (PNG, JPEG, GIF) a PDF +########################## +### TODO: Translate ### +########################## +imageToPdf.tags=conversion,img,jpg,picture,photo home.pdfToImage.title=PDF a Imagen home.pdfToImage.desc=Convertir un PDF a una imagen (PNG, JPEG, GIF) +########################## +### TODO: Translate ### +########################## +pdfToImage.tags=conversion,img,jpg,picture,photo home.pdfOrganiser.title=Organizador home.pdfOrganiser.desc=Eliminar/Reorganizar páginas en cualquier orden +########################## +### TODO: Translate ### +########################## +pdfOrganiser.tags=duplex,even,odd,sort,move + home.addImage.title=Agregar imagen al PDF home.addImage.desc=Agregar una imagen en una ubicación establecida en el PDF (trabajo en progreso) +########################## +### TODO: Translate ### +########################## +addImage.tags=img,jpg,picture,photo home.watermark.title=Añadir marca de agua home.watermark.desc=Añadir una marca de agua predefinida al documento PDF +########################## +### TODO: Translate ### +########################## +watermark.tags=Text,repeating,label,own,copyright,trademark,img,jpg,picture,photo home.permissions.title=Cambiar permisos home.permissions.desc=Cambiar los permisos del documento PDF +########################## +### TODO: Translate ### +########################## +permissions.tags=read,write,edit,print + home.removePages.title=Eliminar home.removePages.desc=Eliminar páginas no deseadas del documento PDF +########################## +### TODO: Translate ### +########################## +removePages.tags=Remove pages,delete pages home.addPassword.title=Añadir contraseña home.addPassword.desc=Encriptar el documento PDF con una contraseña +########################## +### TODO: Translate ### +########################## +addPassword.tags=secure,security home.removePassword.title=Eliminar contraseña home.removePassword.desc=Eliminar la contraseña del documento PDF +########################## +### TODO: Translate ### +########################## +removePassword.tags=secure,Decrypt,security,unpassword,delete password home.compressPdfs.title=Comprimir home.compressPdfs.desc=Comprimir PDFs para reducir el tamaño del fichero +########################## +### TODO: Translate ### +########################## +compressPdfs.tags=squish,small,tiny + home.changeMetadata.title=Cambiar metadatos home.changeMetadata.desc=Cambiar/Eliminar/Añadir metadatos al documento PDF +########################## +### TODO: Translate ### +########################## +changeMetadata.tags==Title,author,date,creation,time,publisher,producer,stats home.fileToPDF.title=Convertir fichero a PDF home.fileToPDF.desc=Convertir casi cualquier archivo a PDF (DOCX, PNG, XLS, PPT, TXT y más) +########################## +### TODO: Translate ### +########################## +fileToPDF.tags=transformation,format,document,picture,slide,text,conversion,office,docs,word,excel,powerpoint home.ocr.title=Ejecutar OCR en PDF y/o escaneos de limpieza home.ocr.desc=Escaneos de limpieza y detectar texto de imágenes dentro de un PDF y volver a agregarlo como texto +########################## +### TODO: Translate ### +########################## +ocr.tags=recognition,text,image,scan,read,identify,detection,editable + home.extractImages.title=Extraer imágenes home.extractImages.desc=Extraer todas las imágenes de un PDF y guardarlas en ZIP +########################## +### TODO: Translate ### +########################## +extractImages.tags=picture,photo,save,archive,zip,capture,grab home.pdfToPDFA.title=Convertir PDF a PDF/A home.pdfToPDFA.desc=Convertir PDF a PDF/A para almacenamiento a largo plazo +########################## +### TODO: Translate ### +########################## +pdfToPDFA.tags=archive,long-term,standard,conversion,storage,preservation home.PDFToWord.title=PDF a Word home.PDFToWord.desc=Convertir formatos PDF a Word (DOC, DOCX y ODT) +########################## +### TODO: Translate ### +########################## +PDFToWord.tags=doc,docx,odt,word,transformation,format,conversion,office,microsoft,docfile home.PDFToPresentation.title=PDF a presentación home.PDFToPresentation.desc=Convertir PDF a formatos de presentación (PPT, PPTX y ODP) +########################## +### TODO: Translate ### +########################## +PDFToPresentation.tags=slides,show,office,microsoft home.PDFToText.title=PDF a TXT o RTF home.PDFToText.desc=Convertir PDF a formato TXT o RTF +########################## +### TODO: Translate ### +########################## +PDFToText.tags=richformat,richtextformat,rich text format home.PDFToHTML.title=PDF a HTML home.PDFToHTML.desc=Convertir PDF a formato HTML +########################## +### TODO: Translate ### +########################## +PDFToHTML.tags=web content,browser friendly + home.PDFToXML.title=PDF a XML home.PDFToXML.desc=Convertir PDF a formato XML +########################## +### TODO: Translate ### +########################## +PDFToXML.tags=data-extraction,structured-content,interop,transformation,convert home.ScannerImageSplit.title=Detectar/Dividir fotos escaneadas home.ScannerImageSplit.desc=Dividir varias fotos dentro de una foto/PDF +########################## +### TODO: Translate ### +########################## +ScannerImageSplit.tags=separate,auto-detect,scans,multi-photo,organize home.sign.title=Firmar home.sign.desc=Añadir firma a PDF mediante dibujo, texto o imagen +########################## +### TODO: Translate ### +########################## +sign.tags=authorize,initials,drawn-signature,text-sign,image-signature home.flatten.title=Aplanar home.flatten.desc=Eliminar todos los elementos y formularios interactivos de un PDF +########################## +### TODO: Translate ### +########################## +flatten.tags=static,deactivate,non-interactive,streamline home.repair.title=Reparar home.repair.desc=Intentar reparar un PDF corrupto/roto +########################## +### TODO: Translate ### +########################## +repair.tags=fix,restore,correction,recover home.removeBlanks.title=Eliminar páginas en blanco home.removeBlanks.desc=Detectar y eliminar páginas en blanco de un documento +########################## +### TODO: Translate ### +########################## +removeBlanks.tags=cleanup,streamline,non-content,organize home.compare.title=Comparar home.compare.desc=Comparar y mostrar las diferencias entre 2 documentos PDF +########################## +### TODO: Translate ### +########################## +compare.tags=differentiate,contrast,changes,analysis home.certSign.title=Firmar con certificado home.certSign.desc=Firmar un PDF con un Certificado/Clave (PEM/P12) +########################## +### TODO: Translate ### +########################## +certSign.tags=authenticate,PEM,P12,official,encrypt home.pageLayout.title=Diseño de varias páginas home.pageLayout.desc=Unir varias páginas de un documento PDF en una sola página +########################## +### TODO: Translate ### +########################## +pageLayout.tags=merge,composite,single-view,organize home.scalePages.title=Escalar/ajustar tamaño de página home.scalePages.desc=Escalar/cambiar el tamaño de una pagina y/o su contenido - -########################## -### TODO: Translate ### ########################## +### TODO: Translate ### +########################## +scalePages.tags=resize,modify,dimension,adapt + home.pipeline.title=Pipeline (Advanced) home.pipeline.desc=Run multiple actions on PDFs by defining pipeline scripts +########################## +### TODO: Translate ### +########################## +pipeline.tags=automate,sequence,scripted,batch-process home.add-page-numbers.title=Add Page Numbers home.add-page-numbers.desc=Add Page numbers throughout a document in a set location +########################## +### TODO: Translate ### +########################## +add-page-numbers.tags=paginate,label,organize,index home.auto-rename.title=Auto Rename PDF File home.auto-rename.desc=Auto renames a PDF file based on its detected header +########################## +### TODO: Translate ### +########################## +auto-rename.tags=auto-detect,header-based,organize,relabel home.adjust-contrast.title=Adjust Colors/Contrast home.adjust-contrast.desc=Adjust Contrast, Saturation and Brightness of a PDF +########################## +### TODO: Translate ### +########################## +adjust-contrast.tags=color-correction,tune,modify,enhance home.crop.title=Crop PDF home.crop.desc=Crop a PDF to reduce its size (maintains text!) +########################## +### TODO: Translate ### +########################## +crop.tags=trim,shrink,edit,shape home.autoSplitPDF.title=Auto Split Pages home.autoSplitPDF.desc=Auto Split Scanned PDF with physical scanned page splitter QR Code +########################## +### TODO: Translate ### +########################## +autoSplitPDF.tags=QR-based,separate,scan-segment,organize home.sanitizePdf.title=Sanitize home.sanitizePdf.desc=Remove scripts and other elements from PDF files +########################## +### TODO: Translate ### +########################## +sanitizePdf.tags=clean,secure,safe,remove-threats + +########################## +### TODO: Translate ### +########################## +home.URLToPDF.title=URL/Website To PDF +home.URLToPDF.desc=Converts any http(s)URL to PDF +URLToPDF.tags=web-capture,save-page,web-to-doc,archive + +########################## +### TODO: Translate ### +########################## +home.HTMLToPDF.title=HTML to PDF +home.HTMLToPDF.desc=Converts any HTML file or zip to PDF +HTMLToPDF.tags=markup,web-content,transformation,convert ########################### @@ -218,6 +375,7 @@ HTMLToPDF.help=Accepts HTML files and ZIPs containing html/css/images etc requir HTMLToPDF.submit=Convert HTMLToPDF.credit=Uses WeasyPrint + #sanitizePDF sanitizePDF.title=Sanitize PDF sanitizePDF.header=Sanitize a PDF file @@ -362,7 +520,7 @@ ScannerImageSplit.selectText.7=Área de contorno mínima: ScannerImageSplit.selectText.8=Establecer el umbral mínimo del área de contorno para una foto ScannerImageSplit.selectText.9=Tamaño del borde: ScannerImageSplit.selectText.10=Establece el tamaño del borde agregado y eliminado para evitar bordes blancos en la salida (predeterminado: 1). - + #OCR ocr.title=OCR / Escaneo de limpieza @@ -446,9 +604,6 @@ pageRemover.submit=Eliminar Páginas #rotate rotate.title=Rotar PDF rotate.header=Rotar PDF -########################## -### TODO: Translate ### -########################## rotate.selectAngle=Select rotation angle (in multiples of 90 degrees): rotate.submit=Rotar diff --git a/src/main/resources/messages_eu_ES.properties b/src/main/resources/messages_eu_ES.properties index 4398000ac9..1149b8ca56 100644 --- a/src/main/resources/messages_eu_ES.properties +++ b/src/main/resources/messages_eu_ES.properties @@ -1,7 +1,7 @@ ########### # Generic # ########### -# the direction that the language is written (ltr = left to right, rtl = right to left) +# the direction that the language is written (ltr=left to right, rtl = right to left) language.direction=ltr pdfPrompt=Hautatu PDFa(k) @@ -24,14 +24,8 @@ alphabet=Alfabetoa downloadPdf=PDFa deskargatu text=Testua font=Letra-tipoa -########################## -### TODO: Translate ### -########################## selectFillter=-- Select -- pageNum=Orrialde-zenbakia -########################## -### TODO: Translate ### -########################## sizes.small=Small sizes.medium=Medium sizes.large=Large @@ -69,134 +63,297 @@ home.desc=Zure leihatila bakarra autoostatatua zure PDF behar guztietarako home.multiTool.title=Erabilera anitzeko tresna PDF home.multiTool.desc=Orriak konbinatu, biratu, berrantolatu eta ezabatu -########################## -### TODO: Translate ### -########################## multiTool.tags=Multi Tool,Multi operation,UI,click drag,front end,client side home.merge.title=Elkartu home.merge.desc=Elkartu zenbait PDF dokumentu bakar batean modu errazean -########################## -### TODO: Translate ### -########################## merge.tags=merge,Page operations,Back end,server side home.split.title=Zatitu home.split.desc=Zatitu PDFak zenbait dokumentutan +########################## +### TODO: Translate ### +########################## +split.tags=Page operations,divide,Multi Page,cut,server side home.rotate.title=Biratu home.rotate.desc=Biratu PDFak modu errazean +########################## +### TODO: Translate ### +########################## +rotate.tags=server side + home.imageToPdf.title=Irudia PDF bihurtu home.imageToPdf.desc=Irudi bat(PNG, JPEG, GIF)PDF bihurtu +########################## +### TODO: Translate ### +########################## +imageToPdf.tags=conversion,img,jpg,picture,photo home.pdfToImage.title=PDFa irudi bihurtu home.pdfToImage.desc=PDF bat irudi (PNG, JPEG, GIF) bihurtu +########################## +### TODO: Translate ### +########################## +pdfToImage.tags=conversion,img,jpg,picture,photo home.pdfOrganiser.title=Antolatzailea home.pdfOrganiser.desc=Ezabatu/Berrantolatu orrialdeak edozein ordenatan +########################## +### TODO: Translate ### +########################## +pdfOrganiser.tags=duplex,even,odd,sort,move + home.addImage.title=Gehitu irudia PDFari home.addImage.desc=Gehitu irudi bat PDFan ezarritako kokaleku batean (lanean) +########################## +### TODO: Translate ### +########################## +addImage.tags=img,jpg,picture,photo home.watermark.title=Gehitu ur-marka home.watermark.desc=Gehitu aurrez zehaztutako ur-marka bat PFD dokumentuari +########################## +### TODO: Translate ### +########################## +watermark.tags=Text,repeating,label,own,copyright,trademark,img,jpg,picture,photo home.permissions.title=Aldatu baimenak home.permissions.desc=Aldatu PDF dokumentuaren baimenak +########################## +### TODO: Translate ### +########################## +permissions.tags=read,write,edit,print + home.removePages.title=Ezabatu home.removePages.desc=Ezabatu nahi ez dituzun orrialdeak PDF dokumentutik +########################## +### TODO: Translate ### +########################## +removePages.tags=Remove pages,delete pages home.addPassword.title=Gehitu pasahitza home.addPassword.desc=Enkriptatu PDF dokumentua pasahitz batekin +########################## +### TODO: Translate ### +########################## +addPassword.tags=secure,security home.removePassword.title=Ezabatu pasahitza home.removePassword.desc=Ezabatu pasahitza PDF dokumentutik +########################## +### TODO: Translate ### +########################## +removePassword.tags=secure,Decrypt,security,unpassword,delete password home.compressPdfs.title=Konprimatu home.compressPdfs.desc=Konprimatu PDFak fitxategiaren tamaina murrizteko +########################## +### TODO: Translate ### +########################## +compressPdfs.tags=squish,small,tiny + home.changeMetadata.title=Aldatu metadatuak home.changeMetadata.desc=Aldatu/Ezabatu/Gehitu metadatuak PDF dokumentuari +########################## +### TODO: Translate ### +########################## +changeMetadata.tags==Title,author,date,creation,time,publisher,producer,stats home.fileToPDF.title=Fitxategia PDF bihurtu home.fileToPDF.desc=PDF bihurtu ia edozein fitxategi (DOCX, PNG, XLS, PPT, TXT eta gehiago) +########################## +### TODO: Translate ### +########################## +fileToPDF.tags=transformation,format,document,picture,slide,text,conversion,office,docs,word,excel,powerpoint home.ocr.title=OCR exekutatu PDFan eta/edo garbiketa-eskaneatzeak home.ocr.desc=Garbiketa-eskaneatzeak eta irudi-testuak detektatu PDF baten barruan eta berriz ere gehitu testu gisa +########################## +### TODO: Translate ### +########################## +ocr.tags=recognition,text,image,scan,read,identify,detection,editable + home.extractImages.title=Atera irudiak home.extractImages.desc=Atera irudi guztiak PDF batetik eta ZIPen gorde +########################## +### TODO: Translate ### +########################## +extractImages.tags=picture,photo,save,archive,zip,capture,grab home.pdfToPDFA.title=PDFa PDF/A bihurtu home.pdfToPDFA.desc=PDFa PDF/A bihurtu luzaro biltegiratzeko +########################## +### TODO: Translate ### +########################## +pdfToPDFA.tags=archive,long-term,standard,conversion,storage,preservation home.PDFToWord.title=PDFa Word Bihurtu home.PDFToWord.desc=PDF formatuak Word bihurtu (DOC, DOCX y ODT) +########################## +### TODO: Translate ### +########################## +PDFToWord.tags=doc,docx,odt,word,transformation,format,conversion,office,microsoft,docfile home.PDFToPresentation.title=PDFa aurkezpen bihurtu home.PDFToPresentation.desc=PDFa aurkezpen formatu bihurtu (PPT, PPTX y ODP) +########################## +### TODO: Translate ### +########################## +PDFToPresentation.tags=slides,show,office,microsoft home.PDFToText.title=PDFa TXT edo RTF bihurtu home.PDFToText.desc=PDFa TXT edo RTF formatu bihurtu +########################## +### TODO: Translate ### +########################## +PDFToText.tags=richformat,richtextformat,rich text format home.PDFToHTML.title=PDFa HTML bihurtu home.PDFToHTML.desc=PDFa HTML formatu bihurtu +########################## +### TODO: Translate ### +########################## +PDFToHTML.tags=web content,browser friendly + home.PDFToXML.title=PDFa XML bihurtu home.PDFToXML.desc=PDFa XML formatu bihurtu +########################## +### TODO: Translate ### +########################## +PDFToXML.tags=data-extraction,structured-content,interop,transformation,convert home.ScannerImageSplit.title=Detektatu/Zatitu argazki eskaneatuak home.ScannerImageSplit.desc=Hainbat argazki zatitu argazki/PDF baten barruan +########################## +### TODO: Translate ### +########################## +ScannerImageSplit.tags=separate,auto-detect,scans,multi-photo,organize home.sign.title=Sinatu home.sign.desc=Gehitu sinadura PDFari marrazki, testu edo irudi bidez +########################## +### TODO: Translate ### +########################## +sign.tags=authorize,initials,drawn-signature,text-sign,image-signature home.flatten.title=Lautu home.flatten.desc=PDF batetik elementu eta inprimaki interaktibo guztiak ezabatu +########################## +### TODO: Translate ### +########################## +flatten.tags=static,deactivate,non-interactive,streamline home.repair.title=Konpondu home.repair.desc=Saiatu PDF hondatu/kaltetu bat konpontzen +########################## +### TODO: Translate ### +########################## +repair.tags=fix,restore,correction,recover home.removeBlanks.title=Ezabatu orrialde zuriak home.removeBlanks.desc=Detektatu orrialde zuriak eta dokumentutik ezabatu +########################## +### TODO: Translate ### +########################## +removeBlanks.tags=cleanup,streamline,non-content,organize home.compare.title=Konparatu home.compare.desc=Konparatu eta erakutsi 2 PDF dokumenturen aldeak +########################## +### TODO: Translate ### +########################## +compare.tags=differentiate,contrast,changes,analysis home.certSign.title=Sinatu ziurtagiriarekin home.certSign.desc=Sinatu PDF bat Ziurtagiri/Gako batekin (PEM/P12) +########################## +### TODO: Translate ### +########################## +certSign.tags=authenticate,PEM,P12,official,encrypt home.pageLayout.title=Zenbait orrialderen diseinua home.pageLayout.desc=Elkartu orri bakar batean PDF dokumentu baten zenbait orrialde +########################## +### TODO: Translate ### +########################## +pageLayout.tags=merge,composite,single-view,organize home.scalePages.title=Eskalatu/Doitu orrialdearen tamaina home.scalePages.desc=Eskalatu/Aldatu orrialde baten tamaina eta/edo edukia - -########################## -### TODO: Translate ### ########################## +### TODO: Translate ### +########################## +scalePages.tags=resize,modify,dimension,adapt + home.pipeline.title=Pipeline (Advanced) home.pipeline.desc=Run multiple actions on PDFs by defining pipeline scripts +########################## +### TODO: Translate ### +########################## +pipeline.tags=automate,sequence,scripted,batch-process home.add-page-numbers.title=Add Page Numbers home.add-page-numbers.desc=Add Page numbers throughout a document in a set location +########################## +### TODO: Translate ### +########################## +add-page-numbers.tags=paginate,label,organize,index home.auto-rename.title=Auto Rename PDF File home.auto-rename.desc=Auto renames a PDF file based on its detected header +########################## +### TODO: Translate ### +########################## +auto-rename.tags=auto-detect,header-based,organize,relabel home.adjust-contrast.title=Adjust Colors/Contrast home.adjust-contrast.desc=Adjust Contrast, Saturation and Brightness of a PDF +########################## +### TODO: Translate ### +########################## +adjust-contrast.tags=color-correction,tune,modify,enhance home.crop.title=Crop PDF home.crop.desc=Crop a PDF to reduce its size (maintains text!) +########################## +### TODO: Translate ### +########################## +crop.tags=trim,shrink,edit,shape home.autoSplitPDF.title=Auto Split Pages home.autoSplitPDF.desc=Auto Split Scanned PDF with physical scanned page splitter QR Code +########################## +### TODO: Translate ### +########################## +autoSplitPDF.tags=QR-based,separate,scan-segment,organize home.sanitizePdf.title=Sanitize home.sanitizePdf.desc=Remove scripts and other elements from PDF files +########################## +### TODO: Translate ### +########################## +sanitizePdf.tags=clean,secure,safe,remove-threats + +########################## +### TODO: Translate ### +########################## +home.URLToPDF.title=URL/Website To PDF +home.URLToPDF.desc=Converts any http(s)URL to PDF +URLToPDF.tags=web-capture,save-page,web-to-doc,archive + +########################## +### TODO: Translate ### +########################## +home.HTMLToPDF.title=HTML to PDF +home.HTMLToPDF.desc=Converts any HTML file or zip to PDF +HTMLToPDF.tags=markup,web-content,transformation,convert ########################### @@ -218,6 +375,7 @@ HTMLToPDF.help=Accepts HTML files and ZIPs containing html/css/images etc requir HTMLToPDF.submit=Convert HTMLToPDF.credit=Uses WeasyPrint + #sanitizePDF sanitizePDF.title=Sanitize PDF sanitizePDF.header=Sanitize a PDF file @@ -362,7 +520,7 @@ ScannerImageSplit.selectText.7=Inguruko area gutxienekoa: ScannerImageSplit.selectText.8=Ezarri inguruko arearen gutxieneko balioa argazki batentzat ScannerImageSplit.selectText.9=Ertzaren tamaina: ScannerImageSplit.selectText.10=Ezarri gehitutako eta ezabatutako ertzaren tamaina irteeran ertz zuriak saihesteko (lehenetsia: 1). - + #OCR ocr.title=OCR / Garbiketa-eskaneatzea @@ -446,9 +604,6 @@ pageRemover.submit=Ezabatu orrialdeak #rotate rotate.title=Biratu PDFa rotate.header=Biratu PDFa -########################## -### TODO: Translate ### -########################## rotate.selectAngle=Select rotation angle (in multiples of 90 degrees): rotate.submit=Biratu diff --git a/src/main/resources/messages_fr_FR.properties b/src/main/resources/messages_fr_FR.properties index 8489dd47ef..b5e677329e 100644 --- a/src/main/resources/messages_fr_FR.properties +++ b/src/main/resources/messages_fr_FR.properties @@ -1,7 +1,7 @@ ########### # Generic # ########### -# the direction that the language is written (ltr = left to right, rtl = right to left) +# the direction that the language is written (ltr=left to right, rtl = right to left) language.direction=ltr pdfPrompt=Choisir PDF @@ -24,14 +24,8 @@ alphabet=Alphabet downloadPdf=Télécharger le PDF text=Texte font=Police -########################## -### TODO: Translate ### -########################## selectFillter=-- Select -- pageNum=numéro de page -########################## -### TODO: Translate ### -########################## sizes.small=Small sizes.medium=Medium sizes.large=Large @@ -69,134 +63,297 @@ home.desc=Votre guichet unique hébergé localement pour tous vos besoins PDF. home.multiTool.title=Multi-outil PDF home.multiTool.desc=Fusionner, faire pivoter, réorganiser et supprimer des pages -########################## -### TODO: Translate ### -########################## multiTool.tags=Multi Tool,Multi operation,UI,click drag,front end,client side home.merge.title=Fusionnez home.merge.desc=Fusionnez facilement plusieurs PDF en un seul. -########################## -### TODO: Translate ### -########################## merge.tags=merge,Page operations,Back end,server side home.split.title=Fractionner home.split.desc=Diviser les PDF en plusieurs documents +########################## +### TODO: Translate ### +########################## +split.tags=Page operations,divide,Multi Page,cut,server side home.rotate.title=Tourner home.rotate.desc=Faites pivoter facilement vos PDF. +########################## +### TODO: Translate ### +########################## +rotate.tags=server side + home.imageToPdf.title=Image au format PDF home.imageToPdf.desc=Convertir une image (PNG, JPEG, GIF) en PDF. +########################## +### TODO: Translate ### +########################## +imageToPdf.tags=conversion,img,jpg,picture,photo home.pdfToImage.title=PDF vers image home.pdfToImage.desc=Convertir un PDF en image. (PNG, JPEG, GIF) +########################## +### TODO: Translate ### +########################## +pdfToImage.tags=conversion,img,jpg,picture,photo home.pdfOrganiser.title=Organisateur home.pdfOrganiser.desc=Supprimer/Réorganiser les pages dans n'importe quel ordre +########################## +### TODO: Translate ### +########################## +pdfOrganiser.tags=duplex,even,odd,sort,move + home.addImage.title=Ajouter une image au PDF home.addImage.desc=Ajoute une image à un emplacement défini sur le PDF (Travail en cours) +########################## +### TODO: Translate ### +########################## +addImage.tags=img,jpg,picture,photo home.watermark.title=Ajouter un filigrane home.watermark.desc=Ajoutez un filigrane personnalisé à votre document PDF. +########################## +### TODO: Translate ### +########################## +watermark.tags=Text,repeating,label,own,copyright,trademark,img,jpg,picture,photo home.permissions.title=Modifier les autorisations home.permissions.desc=Modifier les permissions de votre document PDF +########################## +### TODO: Translate ### +########################## +permissions.tags=read,write,edit,print + home.removePages.title=Supprimer home.removePages.desc=Supprimez les pages inutiles de votre document PDF. +########################## +### TODO: Translate ### +########################## +removePages.tags=Remove pages,delete pages home.addPassword.title=Ajouter un mot de passe home.addPassword.desc=Cryptez votre document PDF avec un mot de passe. +########################## +### TODO: Translate ### +########################## +addPassword.tags=secure,security home.removePassword.title=Supprimer le mot de passe home.removePassword.desc=Supprimez la protection par mot de passe de votre document PDF. +########################## +### TODO: Translate ### +########################## +removePassword.tags=secure,Decrypt,security,unpassword,delete password home.compressPdfs.title=Compresser home.compressPdfs.desc=Compressez les PDF pour réduire leur taille de fichier. +########################## +### TODO: Translate ### +########################## +compressPdfs.tags=squish,small,tiny + home.changeMetadata.title=Modifier les métadonnées home.changeMetadata.desc=Modifier/Supprimer/Ajouter des métadonnées d'un document PDF +########################## +### TODO: Translate ### +########################## +changeMetadata.tags==Title,author,date,creation,time,publisher,producer,stats home.fileToPDF.title=Convertir un fichier en PDF home.fileToPDF.desc=Convertissez presque n\u2019importe quel fichier en PDF (DOCX, PNG, XLS, PPT, TXT et plus) +########################## +### TODO: Translate ### +########################## +fileToPDF.tags=transformation,format,document,picture,slide,text,conversion,office,docs,word,excel,powerpoint home.ocr.title=Exécuter l'OCR sur les scans PDF et/ou de nettoyage home.ocr.desc=Le nettoyage analyse et détecte le texte des images dans un PDF et le rajoute en tant que texte. +########################## +### TODO: Translate ### +########################## +ocr.tags=recognition,text,image,scan,read,identify,detection,editable + home.extractImages.title=Extraire les images home.extractImages.desc=Extrait toutes les images d\u2019un PDF et les enregistre au format zip +########################## +### TODO: Translate ### +########################## +extractImages.tags=picture,photo,save,archive,zip,capture,grab home.pdfToPDFA.title=Convertir PDF en PDF/A home.pdfToPDFA.desc=Convertir un PDF en PDF/A pour un stockage à long terme +########################## +### TODO: Translate ### +########################## +pdfToPDFA.tags=archive,long-term,standard,conversion,storage,preservation home.PDFToWord.title=PDF vers Word home.PDFToWord.desc=Convertir les formats PDF en Word (DOC, DOCX et ODT) +########################## +### TODO: Translate ### +########################## +PDFToWord.tags=doc,docx,odt,word,transformation,format,conversion,office,microsoft,docfile home.PDFToPresentation.title=PDF vers présentation home.PDFToPresentation.desc=Convertir des PDF en formats de présentation (PPT, PPTX et ODP) +########################## +### TODO: Translate ### +########################## +PDFToPresentation.tags=slides,show,office,microsoft home.PDFToText.title=PDF vers texte/RTF home.PDFToText.desc=Convertir un PDF au format Texte ou RTF +########################## +### TODO: Translate ### +########################## +PDFToText.tags=richformat,richtextformat,rich text format home.PDFToHTML.title=PDF vers HTML home.PDFToHTML.desc=Convertir le PDF au format HTML +########################## +### TODO: Translate ### +########################## +PDFToHTML.tags=web content,browser friendly + home.PDFToXML.title=PDF vers XML home.PDFToXML.desc=Convertir le PDF au format XML +########################## +### TODO: Translate ### +########################## +PDFToXML.tags=data-extraction,structured-content,interop,transformation,convert home.ScannerImageSplit.title=Détecter/diviser les photos numérisées home.ScannerImageSplit.desc=Divise plusieurs photos à partir d'une photo/PDF +########################## +### TODO: Translate ### +########################## +ScannerImageSplit.tags=separate,auto-detect,scans,multi-photo,organize home.sign.title=Signe home.sign.desc=Ajoute une signature au PDF par dessin, texte ou image +########################## +### TODO: Translate ### +########################## +sign.tags=authorize,initials,drawn-signature,text-sign,image-signature home.flatten.title=Aplatir home.flatten.desc=Supprimer tous les éléments et formulaires interactifs d'un PDF +########################## +### TODO: Translate ### +########################## +flatten.tags=static,deactivate,non-interactive,streamline home.repair.title=Réparer home.repair.desc=Essaye de réparer un PDF corrompu/cassé +########################## +### TODO: Translate ### +########################## +repair.tags=fix,restore,correction,recover home.removeBlanks.title=Supprimer les pages vierges home.removeBlanks.desc=Détecte et supprime les pages vierges d'un document +########################## +### TODO: Translate ### +########################## +removeBlanks.tags=cleanup,streamline,non-content,organize home.compare.title=Comparer home.compare.desc=Compare et affiche les différences entre 2 documents PDF +########################## +### TODO: Translate ### +########################## +compare.tags=differentiate,contrast,changes,analysis home.certSign.title=Sign with Certificate home.certSign.desc=Signs a PDF with a Certificate/Key (PEM/P12) +########################## +### TODO: Translate ### +########################## +certSign.tags=authenticate,PEM,P12,official,encrypt home.pageLayout.title=Multi-Page Layout home.pageLayout.desc=Merge multiple pages of a PDF document into a single page +########################## +### TODO: Translate ### +########################## +pageLayout.tags=merge,composite,single-view,organize home.scalePages.title=Adjust page size/scale home.scalePages.desc=Change the size/scale of page and/or its contents. - -########################## -### TODO: Translate ### ########################## +### TODO: Translate ### +########################## +scalePages.tags=resize,modify,dimension,adapt + home.pipeline.title=Pipeline (Advanced) home.pipeline.desc=Run multiple actions on PDFs by defining pipeline scripts +########################## +### TODO: Translate ### +########################## +pipeline.tags=automate,sequence,scripted,batch-process home.add-page-numbers.title=Add Page Numbers home.add-page-numbers.desc=Add Page numbers throughout a document in a set location +########################## +### TODO: Translate ### +########################## +add-page-numbers.tags=paginate,label,organize,index home.auto-rename.title=Auto Rename PDF File home.auto-rename.desc=Auto renames a PDF file based on its detected header +########################## +### TODO: Translate ### +########################## +auto-rename.tags=auto-detect,header-based,organize,relabel home.adjust-contrast.title=Adjust Colors/Contrast home.adjust-contrast.desc=Adjust Contrast, Saturation and Brightness of a PDF +########################## +### TODO: Translate ### +########################## +adjust-contrast.tags=color-correction,tune,modify,enhance home.crop.title=Crop PDF home.crop.desc=Crop a PDF to reduce its size (maintains text!) +########################## +### TODO: Translate ### +########################## +crop.tags=trim,shrink,edit,shape home.autoSplitPDF.title=Auto Split Pages home.autoSplitPDF.desc=Auto Split Scanned PDF with physical scanned page splitter QR Code +########################## +### TODO: Translate ### +########################## +autoSplitPDF.tags=QR-based,separate,scan-segment,organize home.sanitizePdf.title=Sanitize home.sanitizePdf.desc=Remove scripts and other elements from PDF files +########################## +### TODO: Translate ### +########################## +sanitizePdf.tags=clean,secure,safe,remove-threats + +########################## +### TODO: Translate ### +########################## +home.URLToPDF.title=URL/Website To PDF +home.URLToPDF.desc=Converts any http(s)URL to PDF +URLToPDF.tags=web-capture,save-page,web-to-doc,archive + +########################## +### TODO: Translate ### +########################## +home.HTMLToPDF.title=HTML to PDF +home.HTMLToPDF.desc=Converts any HTML file or zip to PDF +HTMLToPDF.tags=markup,web-content,transformation,convert ########################### @@ -218,6 +375,7 @@ HTMLToPDF.help=Accepts HTML files and ZIPs containing html/css/images etc requir HTMLToPDF.submit=Convert HTMLToPDF.credit=Uses WeasyPrint + #sanitizePDF sanitizePDF.title=Sanitize PDF sanitizePDF.header=Sanitize a PDF file @@ -362,7 +520,7 @@ ScannerImageSplit.selectText.7=Zone de contour minimale : ScannerImageSplit.selectText.8=Définit le seuil de zone de contour minimum pour une photo ScannerImageSplit.selectText.9=Taille de la bordure : ScannerImageSplit.selectText.10=Définit la taille de la bordure ajoutée et supprimée pour éviter les bordures blanches dans la sortie (par défaut : 1). - + #OCR ocr.title=OCR / Nettoyage de numérisation diff --git a/src/main/resources/messages_it_IT.properties b/src/main/resources/messages_it_IT.properties index 9f85c226ab..25a5bc82d3 100644 --- a/src/main/resources/messages_it_IT.properties +++ b/src/main/resources/messages_it_IT.properties @@ -1,7 +1,7 @@ ########### # Generic # ########### -# the direction that the language is written (ltr = left to right, rtl = right to left) +# the direction that the language is written (ltr=left to right, rtl = right to left) language.direction=ltr pdfPrompt=Scegli PDF @@ -26,9 +26,6 @@ text=Testo font=Font selectFillter=-- Seleziona -- pageNum=Numero pagina -########################## -### TODO: Translate ### -########################## sizes.small=Small sizes.medium=Medium sizes.large=Large @@ -66,134 +63,297 @@ home.desc=La tua pagina self-hostata per gestire qualsiasi PDF. home.multiTool.title=Multifunzione PDF home.multiTool.desc=Unisci, Ruota, Riordina, e Rimuovi pagine -########################## -### TODO: Translate ### -########################## multiTool.tags=Multi Tool,Multi operation,UI,click drag,front end,client side home.merge.title=Unisci home.merge.desc=Unisci facilmente più PDF in uno. -########################## -### TODO: Translate ### -########################## merge.tags=merge,Page operations,Back end,server side home.split.title=Dividi home.split.desc=Dividi un singolo PDF in più documenti. +########################## +### TODO: Translate ### +########################## +split.tags=Page operations,divide,Multi Page,cut,server side home.rotate.title=Ruota home.rotate.desc=Ruota un PDF. +########################## +### TODO: Translate ### +########################## +rotate.tags=server side + home.imageToPdf.title=Da immagine a PDF home.imageToPdf.desc=Converti un'immagine (PNG, JPEG, GIF) in PDF. +########################## +### TODO: Translate ### +########################## +imageToPdf.tags=conversion,img,jpg,picture,photo home.pdfToImage.title=Da PDF a immagine home.pdfToImage.desc=Converti un PDF in un'immagine. (PNG, JPEG, GIF) +########################## +### TODO: Translate ### +########################## +pdfToImage.tags=conversion,img,jpg,picture,photo home.pdfOrganiser.title=Organizza home.pdfOrganiser.desc=Rimuovi/Riordina le pagine in qualsiasi ordine. +########################## +### TODO: Translate ### +########################## +pdfOrganiser.tags=duplex,even,odd,sort,move + home.addImage.title=Aggiungi Immagine home.addImage.desc=Aggiungi un'immagine in un punto specifico del PDF (Work in progress) +########################## +### TODO: Translate ### +########################## +addImage.tags=img,jpg,picture,photo home.watermark.title=Aggiungi Filigrana home.watermark.desc=Aggiungi una filigrana al tuo PDF. +########################## +### TODO: Translate ### +########################## +watermark.tags=Text,repeating,label,own,copyright,trademark,img,jpg,picture,photo home.permissions.title=Cambia Permessi home.permissions.desc=Cambia i permessi del tuo PDF. +########################## +### TODO: Translate ### +########################## +permissions.tags=read,write,edit,print + home.removePages.title=Rimuovi home.removePages.desc=Elimina alcune pagine dal PDF. +########################## +### TODO: Translate ### +########################## +removePages.tags=Remove pages,delete pages home.addPassword.title=Aggiungi Password home.addPassword.desc=Crittografa il tuo PDF con una password. +########################## +### TODO: Translate ### +########################## +addPassword.tags=secure,security home.removePassword.title=Rimuovi Password home.removePassword.desc=Rimuovi la password dal tuo PDF. +########################## +### TODO: Translate ### +########################## +removePassword.tags=secure,Decrypt,security,unpassword,delete password home.compressPdfs.title=Comprimi home.compressPdfs.desc=Comprimi PDF per ridurne le dimensioni. +########################## +### TODO: Translate ### +########################## +compressPdfs.tags=squish,small,tiny + home.changeMetadata.title=Modifica Proprietà home.changeMetadata.desc=Modifica/Aggiungi/Rimuovi le proprietà di un documento PDF. +########################## +### TODO: Translate ### +########################## +changeMetadata.tags==Title,author,date,creation,time,publisher,producer,stats home.fileToPDF.title=Converti file in PDF home.fileToPDF.desc=Converti quasi ogni file in PDF (DOCX, PNG, XLS, PPT, TXT e altro) +########################## +### TODO: Translate ### +########################## +fileToPDF.tags=transformation,format,document,picture,slide,text,conversion,office,docs,word,excel,powerpoint home.ocr.title=OCR / Pulisci scansioni home.ocr.desc=Pulisci scansioni ed estrai testo da immagini, convertendo le immagini in testo puro. +########################## +### TODO: Translate ### +########################## +ocr.tags=recognition,text,image,scan,read,identify,detection,editable + home.extractImages.title=Estrai immagini home.extractImages.desc=Estrai tutte le immagini da un PDF e salvale come zip. +########################## +### TODO: Translate ### +########################## +extractImages.tags=picture,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. +########################## +### TODO: Translate ### +########################## +pdfToPDFA.tags=archive,long-term,standard,conversion,storage,preservation home.PDFToWord.title=Da PDF a Word home.PDFToWord.desc=Converti un PDF nei formati Word (DOC, DOCX e ODT) +########################## +### TODO: Translate ### +########################## +PDFToWord.tags=doc,docx,odt,word,transformation,format,conversion,office,microsoft,docfile home.PDFToPresentation.title=Da PDF a presentazioni home.PDFToPresentation.desc=Converti un PDF in presentazioni (PPT, PPTX and ODP) +########################## +### TODO: Translate ### +########################## +PDFToPresentation.tags=slides,show,office,microsoft home.PDFToText.title=Da PDF a testo/RTF home.PDFToText.desc=Converti un PDF in testo o RTF. +########################## +### TODO: Translate ### +########################## +PDFToText.tags=richformat,richtextformat,rich text format home.PDFToHTML.title=Da PDF ad HTML home.PDFToHTML.desc=Converti un PDF in HTML. +########################## +### TODO: Translate ### +########################## +PDFToHTML.tags=web content,browser friendly + home.PDFToXML.title=Da PDF a XML home.PDFToXML.desc=Converti un PDF in XML. +########################## +### TODO: Translate ### +########################## +PDFToXML.tags=data-extraction,structured-content,interop,transformation,convert home.ScannerImageSplit.title=Trova/Dividi foto scansionate home.ScannerImageSplit.desc=Estrai più foto da una singola foto o PDF. +########################## +### TODO: Translate ### +########################## +ScannerImageSplit.tags=separate,auto-detect,scans,multi-photo,organize home.sign.title=Firma home.sign.desc=Aggiungi una firma al PDF da disegno, testo o immagine. +########################## +### TODO: Translate ### +########################## +sign.tags=authorize,initials,drawn-signature,text-sign,image-signature home.flatten.title=Appiattisci home.flatten.desc=Rimuovi tutti gli elementi interattivi e moduli da un PDF. +########################## +### TODO: Translate ### +########################## +flatten.tags=static,deactivate,non-interactive,streamline home.repair.title=Ripara home.repair.desc=Prova a riparare un PDF corrotto. +########################## +### TODO: Translate ### +########################## +repair.tags=fix,restore,correction,recover home.removeBlanks.title=Rimuovi pagine vuote home.removeBlanks.desc=Trova e rimuovi pagine vuote da un PDF. +########################## +### TODO: Translate ### +########################## +removeBlanks.tags=cleanup,streamline,non-content,organize home.compare.title=Compara home.compare.desc=Vedi e compara le differenze tra due PDF. +########################## +### TODO: Translate ### +########################## +compare.tags=differentiate,contrast,changes,analysis home.certSign.title=Sign with Certificate home.certSign.desc=Signs a PDF with a Certificate/Key (PEM/P12) +########################## +### TODO: Translate ### +########################## +certSign.tags=authenticate,PEM,P12,official,encrypt home.pageLayout.title=Multi-Page Layout home.pageLayout.desc=Merge multiple pages of a PDF document into a single page +########################## +### TODO: Translate ### +########################## +pageLayout.tags=merge,composite,single-view,organize home.scalePages.title=Adjust page size/scale home.scalePages.desc=Change the size/scale of page and/or its contents. - -########################## -### TODO: Translate ### ########################## +### TODO: Translate ### +########################## +scalePages.tags=resize,modify,dimension,adapt + home.pipeline.title=Pipeline (Advanced) home.pipeline.desc=Run multiple actions on PDFs by defining pipeline scripts +########################## +### TODO: Translate ### +########################## +pipeline.tags=automate,sequence,scripted,batch-process home.add-page-numbers.title=Add Page Numbers home.add-page-numbers.desc=Add Page numbers throughout a document in a set location +########################## +### TODO: Translate ### +########################## +add-page-numbers.tags=paginate,label,organize,index home.auto-rename.title=Auto Rename PDF File home.auto-rename.desc=Auto renames a PDF file based on its detected header +########################## +### TODO: Translate ### +########################## +auto-rename.tags=auto-detect,header-based,organize,relabel home.adjust-contrast.title=Adjust Colors/Contrast home.adjust-contrast.desc=Adjust Contrast, Saturation and Brightness of a PDF +########################## +### TODO: Translate ### +########################## +adjust-contrast.tags=color-correction,tune,modify,enhance home.crop.title=Crop PDF home.crop.desc=Crop a PDF to reduce its size (maintains text!) +########################## +### TODO: Translate ### +########################## +crop.tags=trim,shrink,edit,shape home.autoSplitPDF.title=Auto Split Pages home.autoSplitPDF.desc=Auto Split Scanned PDF with physical scanned page splitter QR Code +########################## +### TODO: Translate ### +########################## +autoSplitPDF.tags=QR-based,separate,scan-segment,organize home.sanitizePdf.title=Sanitize home.sanitizePdf.desc=Remove scripts and other elements from PDF files +########################## +### TODO: Translate ### +########################## +sanitizePdf.tags=clean,secure,safe,remove-threats + +########################## +### TODO: Translate ### +########################## +home.URLToPDF.title=URL/Website To PDF +home.URLToPDF.desc=Converts any http(s)URL to PDF +URLToPDF.tags=web-capture,save-page,web-to-doc,archive + +########################## +### TODO: Translate ### +########################## +home.HTMLToPDF.title=HTML to PDF +home.HTMLToPDF.desc=Converts any HTML file or zip to PDF +HTMLToPDF.tags=markup,web-content,transformation,convert ########################### @@ -215,6 +375,7 @@ HTMLToPDF.help=Accepts HTML files and ZIPs containing html/css/images etc requir HTMLToPDF.submit=Convert HTMLToPDF.credit=Uses WeasyPrint + #sanitizePDF sanitizePDF.title=Sanitize PDF sanitizePDF.header=Sanitize a PDF file @@ -272,6 +433,7 @@ autoSplitPDF.dividerDownload1=Download 'Auto Splitter Divider (minimal).pdf' autoSplitPDF.dividerDownload2=Download 'Auto Splitter Divider (with instructions).pdf' autoSplitPDF.submit=Submit + #pipeline pipeline.title=Pipeline @@ -358,7 +520,7 @@ ScannerImageSplit.selectText.7=Area di contorno minima: ScannerImageSplit.selectText.8=Imposta l'area minima del contorno di una foto ScannerImageSplit.selectText.9=Spessore bordo: ScannerImageSplit.selectText.10=Imposta lo spessore del bordo aggiunto o rimosso per prevenire bordi bianchi nel risultato (default: 1). - + #OCR ocr.title=OCR / Pulisci scansioni diff --git a/src/main/resources/messages_ja_JP.properties b/src/main/resources/messages_ja_JP.properties index 3db4d50d00..ac20e9ec0d 100644 --- a/src/main/resources/messages_ja_JP.properties +++ b/src/main/resources/messages_ja_JP.properties @@ -1,7 +1,7 @@ ########### # Generic # ########### -# the direction that the language is written (ltr = left to right, rtl = right to left) +# the direction that the language is written (ltr=left to right, rtl = right to left) language.direction=ltr pdfPrompt=PDFを選択 @@ -21,139 +21,475 @@ filesSelected=選択されたファイル noFavourites=お気に入りはありません bored=待ち時間が退屈 alphabet=\u30A2\u30EB\u30D5\u30A1\u30D9\u30C3\u30C8 +downloadPdf=PDFをダウンロード +text=テキスト +font=フォント +selectFillter=-- 選択 -- +pageNum=ページ番号 +########################## +### TODO: Translate ### +########################## +sizes.small=Small +sizes.medium=Medium +sizes.large=Large +sizes.x-large=X-Large +error.pdfPassword=PDFにパスワードが設定されてますが、パスワードが入力されてないか間違ってます。 + + +############# +# NAVBAR # +############# +navbar.convert=変換 +navbar.security=セキュリティ +navbar.other=その他 +navbar.darkmode=ダークモード +navbar.pageOps=ページ操作 +navbar.settings=設定 + +############# +# SETTINGS # +############# +settings.title=設定 +settings.update=利用可能なアップデート +settings.appVersion=Appバージョン: +settings.downloadOption.title=ダウンロードオプション (zip以外の単一ファイル): +settings.downloadOption.1=同じウィンドウで開く +settings.downloadOption.2=新しいウィンドウで開く +settings.downloadOption.3=ファイルをダウンロード +settings.zipThreshold=このファイル数を超えたときにファイルを圧縮する + ############# # HOME-PAGE # ############# home.desc=PDFのあらゆるニーズに対応するローカルホスティングされた総合窓口です。 -navbar.convert=変換 -navbar.security=セキュリティ -navbar.other=その他 -navbar.darkmode=ダークモード -navbar.pageOps=ページ操作 - home.multiTool.title=PDFマルチツール home.multiTool.desc=ページの結合、回転、並べ替え、削除します。 +########################## +### TODO: Translate ### +########################## +multiTool.tags=Multi Tool,Multi operation,UI,click drag,front end,client side,interactive,intractable,move home.merge.title=結合 home.merge.desc=複数のPDFを1つに結合します。 +########################## +### TODO: Translate ### +########################## +merge.tags=merge,Page operations,Back end,server side home.split.title=分割 home.split.desc=PDFを複数のドキュメントに分割します。 +########################## +### TODO: Translate ### +########################## +split.tags=Page operations,divide,Multi Page,cut,server side home.rotate.title=回転 home.rotate.desc=PDFを回転します。 +########################## +### TODO: Translate ### +########################## +rotate.tags=server side + home.imageToPdf.title=画像をPDFに変換 home.imageToPdf.desc=画像 (PNG, JPEG, GIF) をPDFに変換します。 +########################## +### TODO: Translate ### +########################## +imageToPdf.tags=conversion,img,jpg,picture,photo home.pdfToImage.title=PDFを画像に変換 home.pdfToImage.desc=PDFを画像 (PNG, JPEG, GIF) に変換します。 +########################## +### TODO: Translate ### +########################## +pdfToImage.tags=conversion,img,jpg,picture,photo home.pdfOrganiser.title=整理 home.pdfOrganiser.desc=ページの削除/並べ替えします。 +########################## +### TODO: Translate ### +########################## +pdfOrganiser.tags=duplex,even,odd,sort,move + home.addImage.title=画像の追加 home.addImage.desc=PDF上の任意の場所に画像を追加します。 +########################## +### TODO: Translate ### +########################## +addImage.tags=img,jpg,picture,photo home.watermark.title=透かしの追加 home.watermark.desc=PDFに独自の透かしを追加します。 - -home.remove-watermark.title=透かしの削除 -home.remove-watermark.desc=PDFから透かしを削除します。 +########################## +### TODO: Translate ### +########################## +watermark.tags=Text,repeating,label,own,copyright,trademark,img,jpg,picture,photo home.permissions.title=権限の変更 home.permissions.desc=PDFの権限を変更します。 +########################## +### TODO: Translate ### +########################## +permissions.tags=read,write,edit,print + home.removePages.title=削除 home.removePages.desc=PDFから不要なページを削除します。 +########################## +### TODO: Translate ### +########################## +removePages.tags=Remove pages,delete pages home.addPassword.title=パスワードの追加 home.addPassword.desc=PDFをパスワードで暗号化します。 +########################## +### TODO: Translate ### +########################## +addPassword.tags=secure,security home.removePassword.title=パスワードの削除 home.removePassword.desc=PDFからパスワードの削除します。 +########################## +### TODO: Translate ### +########################## +removePassword.tags=secure,Decrypt,security,unpassword,delete password home.compressPdfs.title=圧縮 home.compressPdfs.desc=PDFを圧縮してファイルサイズを小さくします。 +########################## +### TODO: Translate ### +########################## +compressPdfs.tags=squish,small,tiny + home.changeMetadata.title=メタデータの変更 home.changeMetadata.desc=PDFのメタデータを変更/削除/追加します。 +########################## +### TODO: Translate ### +########################## +changeMetadata.tags==Title,author,date,creation,time,publisher,producer,stats home.fileToPDF.title=ファイルをPDFに変換 home.fileToPDF.desc=ほぼすべてのファイルをPDFに変換します。 (DOCX, PNG, XLS, PPT, TXTなど) +########################## +### TODO: Translate ### +########################## +fileToPDF.tags=transformation,format,document,picture,slide,text,conversion,office,docs,word,excel,powerpoint home.ocr.title=OCR / クリーンアップ home.ocr.desc=クリーンアップはPDF内の画像からテキストを検出してテキストとして再追加します。 +########################## +### TODO: Translate ### +########################## +ocr.tags=recognition,text,image,scan,read,identify,detection,editable + home.extractImages.title=画像の抽出 home.extractImages.desc=PDFからすべての画像を抽出してzipで保存します。 +########################## +### TODO: Translate ### +########################## +extractImages.tags=picture,photo,save,archive,zip,capture,grab home.pdfToPDFA.title=PDFをPDF/Aに変換 home.pdfToPDFA.desc=長期保存のためにPDFをPDF/Aに変換。 +########################## +### TODO: Translate ### +########################## +pdfToPDFA.tags=archive,long-term,standard,conversion,storage,preservation home.PDFToWord.title=PDFをWordに変換 home.PDFToWord.desc=PDFをWord形式に変換します。 (DOC, DOCX および ODT) +########################## +### TODO: Translate ### +########################## +PDFToWord.tags=doc,docx,odt,word,transformation,format,conversion,office,microsoft,docfile home.PDFToPresentation.title=PDFをプレゼンテーションに変換 home.PDFToPresentation.desc=PDFをプレゼンテーション形式に変換します。 (PPT, PPTX および ODP) +########################## +### TODO: Translate ### +########################## +PDFToPresentation.tags=slides,show,office,microsoft home.PDFToText.title=PDFをText/RTFに変換 home.PDFToText.desc=PDFをTextまたはRTF形式に変換します。 +########################## +### TODO: Translate ### +########################## +PDFToText.tags=richformat,richtextformat,rich text format home.PDFToHTML.title=PDFをHTMLに変換 home.PDFToHTML.desc=PDFをHTML形式に変換します。 +########################## +### TODO: Translate ### +########################## +PDFToHTML.tags=web content,browser friendly + home.PDFToXML.title=PDFをXMLに変換 home.PDFToXML.desc=PDFをXML形式に変換します。 +########################## +### TODO: Translate ### +########################## +PDFToXML.tags=data-extraction,structured-content,interop,transformation,convert home.ScannerImageSplit.title=スキャンされた画像の検出/分割 home.ScannerImageSplit.desc=1枚の画像/PDFから複数の写真を分割します。 +########################## +### TODO: Translate ### +########################## +ScannerImageSplit.tags=separate,auto-detect,scans,multi-photo,organize home.sign.title=署名 home.sign.desc=手書き、テキストまたは画像によってPDFに署名を追加します。 +########################## +### TODO: Translate ### +########################## +sign.tags=authorize,initials,drawn-signature,text-sign,image-signature home.flatten.title=平坦化 home.flatten.desc=PDFからインタラクティブな要素とフォームをすべて削除します。 +########################## +### TODO: Translate ### +########################## +flatten.tags=static,deactivate,non-interactive,streamline home.repair.title=修復 home.repair.desc=破損したPDFの修復を試みます。 +########################## +### TODO: Translate ### +########################## +repair.tags=fix,restore,correction,recover home.removeBlanks.title=空白ページの削除 home.removeBlanks.desc=ドキュメントから空白ページを検出して削除します。 +########################## +### TODO: Translate ### +########################## +removeBlanks.tags=cleanup,streamline,non-content,organize home.compare.title=比較 home.compare.desc=2つのPDFを比較して表示します。 +########################## +### TODO: Translate ### +########################## +compare.tags=differentiate,contrast,changes,analysis home.certSign.title=証明書による署名 home.certSign.desc=証明書/キーを使用してPDFに署名します。 (PEM/P12) +########################## +### TODO: Translate ### +########################## +certSign.tags=authenticate,PEM,P12,official,encrypt home.pageLayout.title=マルチページレイアウト home.pageLayout.desc=PDFの複数のページを1ページに結合します。 +########################## +### TODO: Translate ### +########################## +pageLayout.tags=merge,composite,single-view,organize home.scalePages.title=ページの縮尺の調整 home.scalePages.desc=ページやコンテンツの縮尺を変更します。 +########################## +### TODO: Translate ### +########################## +scalePages.tags=resize,modify,dimension,adapt -error.pdfPassword=PDFにパスワードが設定されてますが、パスワードが入力されてないか間違ってます。 +########################## +### TODO: Translate ### +########################## +home.pipeline.title=Pipeline (Advanced) +home.pipeline.desc=Run multiple actions on PDFs by defining pipeline scripts +pipeline.tags=automate,sequence,scripted,batch-process -downloadPdf=PDFをダウンロード -text=テキスト -font=フォント -selectFillter=-- 選択 -- -pageNum=ページ番号 +########################## +### TODO: Translate ### +########################## +home.add-page-numbers.title=Add Page Numbers +home.add-page-numbers.desc=Add Page numbers throughout a document in a set location +add-page-numbers.tags=paginate,label,organize,index +########################## +### TODO: Translate ### +########################## +home.auto-rename.title=Auto Rename PDF File +home.auto-rename.desc=Auto renames a PDF file based on its detected header +auto-rename.tags=auto-detect,header-based,organize,relabel + +########################## +### TODO: Translate ### +########################## +home.adjust-contrast.title=Adjust Colors/Contrast +home.adjust-contrast.desc=Adjust Contrast, Saturation and Brightness of a PDF +adjust-contrast.tags=color-correction,tune,modify,enhance + +########################## +### TODO: Translate ### +########################## +home.crop.title=Crop PDF +home.crop.desc=Crop a PDF to reduce its size (maintains text!) +crop.tags=trim,shrink,edit,shape + +########################## +### TODO: Translate ### +########################## +home.autoSplitPDF.title=Auto Split Pages +home.autoSplitPDF.desc=Auto Split Scanned PDF with physical scanned page splitter QR Code +autoSplitPDF.tags=QR-based,separate,scan-segment,organize + +########################## +### TODO: Translate ### +########################## +home.sanitizePdf.title=Sanitize +home.sanitizePdf.desc=Remove scripts and other elements from PDF files +sanitizePdf.tags=clean,secure,safe,remove-threats + +########################## +### TODO: Translate ### +########################## +home.URLToPDF.title=URL/Website To PDF +home.URLToPDF.desc=Converts any http(s)URL to PDF +URLToPDF.tags=web-capture,save-page,web-to-doc,archive + +########################## +### TODO: Translate ### +########################## +home.HTMLToPDF.title=HTML to PDF +home.HTMLToPDF.desc=Converts any HTML file or zip to PDF +HTMLToPDF.tags=markup,web-content,transformation,convert + + +########################### +# # +# WEB PAGES # +# # +########################### +#url-to-pdf +########################## +### TODO: Translate ### +########################## +URLToPDF.title=URL To PDF +URLToPDF.header=URL To PDF +URLToPDF.submit=Convert +URLToPDF.credit=Uses WeasyPrint + + +#html-to-pdf +########################## +### TODO: Translate ### +########################## +HTMLToPDF.title=HTML To PDF +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 + + +#sanitizePDF +########################## +### TODO: Translate ### +########################## +sanitizePDF.title=Sanitize PDF +sanitizePDF.header=Sanitize a PDF file +sanitizePDF.selectText.1=Remove JavaScript actions +sanitizePDF.selectText.2=Remove embedded files +sanitizePDF.selectText.3=Remove metadata +sanitizePDF.selectText.4=Remove links +sanitizePDF.selectText.5=Remove fonts +sanitizePDF.submit=Sanitize PDF + + +#addPageNumbers +########################## +### TODO: Translate ### +########################## +addPageNumbers.title=Add Page Numbers +addPageNumbers.header=Add Page Numbers +addPageNumbers.selectText.1=Select PDF file: +addPageNumbers.selectText.2=Margin Size +addPageNumbers.selectText.3=Position +addPageNumbers.selectText.4=Starting Number +addPageNumbers.selectText.5=Pages to Number +addPageNumbers.selectText.6=Custom Text +addPageNumbers.submit=Add Page Numbers + + +#auto-rename +########################## +### TODO: Translate ### +########################## +auto-rename.title=Auto Rename +auto-rename.header=Auto Rename PDF +auto-rename.submit=Auto Rename + + +#adjustContrast +########################## +### TODO: Translate ### +########################## +adjustContrast.title=Adjust Contrast +adjustContrast.header=Adjust Contrast +adjustContrast.contrast=Contrast: +adjustContrast.brightness=Brightness: +adjustContrast.saturation=Saturation: +adjustContrast.download=Download + + +#crop +########################## +### TODO: Translate ### +########################## +crop.title=Crop +crop.header=Crop Image +crop.submit=Submit + + +#autoSplitPDF +########################## +### TODO: Translate ### +########################## +autoSplitPDF.title=Auto Split PDF +autoSplitPDF.header=Auto Split PDF +autoSplitPDF.description=Print, Insert, Scan, upload, and let us auto-separate your documents. No manual work sorting needed. +autoSplitPDF.selectText.1=Print out some divider sheets from below (Black and white is fine). +autoSplitPDF.selectText.2=Scan all your documents at once by inserting the divider sheet between them. +autoSplitPDF.selectText.3=Upload the single large scanned PDF file and let Stirling PDF handle the rest. +autoSplitPDF.selectText.4=Divider pages are automatically detected and removed, guaranteeing a neat final document. +autoSplitPDF.formPrompt=Submit PDF containing Stirling-PDF Page dividers: +autoSplitPDF.dividerDownload1=Download 'Auto Splitter Divider (minimal).pdf' +autoSplitPDF.dividerDownload2=Download 'Auto Splitter Divider (with instructions).pdf' +autoSplitPDF.submit=Submit + + +#pipeline +########################## +### TODO: Translate ### +########################## +pipeline.title=Pipeline + + +#pageLayout pageLayout.title=マルチページレイアウト pageLayout.header=マルチページレイアウト pageLayout.pagesPerSheet=1枚あたりのページ数: pageLayout.submit=送信 + +#scalePages scalePages.title=ページの縮尺の調整 scalePages.header=ページの縮尺の調整 scalePages.pageSize=1ページのサイズ scalePages.scaleFactor=1ページの拡大レベル (トリミング)。 scalePages.submit=送信 + +#certSign certSign.title=証明書による署名 certSign.header=証明書を使用してPDFに署名します。 (進行中) certSign.selectPDF=署名するPDFファイルを選択: @@ -168,6 +504,8 @@ certSign.location=場所 certSign.name=名前 certSign.submit=PDFに署名 + +#removeBlanks removeBlanks.title=空白の削除 removeBlanks.header=空白ページの削除 removeBlanks.threshold=しきい値 : @@ -176,12 +514,16 @@ removeBlanks.whitePercent=白比率 removeBlanks.whitePercentDesc=削除するページの白の割合 removeBlanks.submit=空白ページの削除 + +#compare compare.title=比較 compare.header=PDFの比較 compare.document.1=ドキュメント 1 compare.document.2=ドキュメント 2 compare.submit=比較 + +#sign sign.title=署名 sign.header=PDFに署名 sign.upload=画像をアップロード @@ -190,14 +532,20 @@ sign.text=テキスト入力 sign.clear=クリア sign.add=追加 + +#repair repair.title=修復 repair.header=PDFを修復 repair.submit=修復 + +#flatten flatten.title=平坦化 flatten.header=PDFを平坦化する flatten.submit=平坦化 + +#ScannerImageSplit ScannerImageSplit.selectText.1=角度のしきい値: ScannerImageSplit.selectText.2=画像を回転させるために必要な絶対角度の最小値を設定 (初期値:10)。 ScannerImageSplit.selectText.3=許容範囲: @@ -209,18 +557,6 @@ ScannerImageSplit.selectText.8=画像の最小の輪郭面積のしきい値を ScannerImageSplit.selectText.9=境界線サイズ: ScannerImageSplit.selectText.10=出力に白い縁取りが出ないように追加・削除される境界線の大きさを設定 (初期値:1)。 -navbar.settings=設定 -settings.title=設定 -settings.update=利用可能なアップデート -settings.appVersion=Appバージョン: -settings.downloadOption.title=ダウンロードオプション (zip以外の単一ファイル): -settings.downloadOption.1=同じウィンドウで開く -settings.downloadOption.2=新しいウィンドウで開く -settings.downloadOption.3=ファイルをダウンロード -settings.zipThreshold=このファイル数を超えたときにファイルを圧縮する - - - #OCR ocr.title=OCR / クリーンアップ @@ -242,7 +578,7 @@ ocr.credit=本サービスにはOCRにOCRmyPDFとTesseractを使用していま ocr.submit=OCRでPDFを処理する - +#extractImages extractImages.title=画像の抽出 extractImages.header=画像の抽出 extractImages.selectText=抽出した画像のフォーマットを選択 @@ -282,11 +618,13 @@ merge.title=結合 merge.header=複数のPDFを結合 (2ファイル以上) merge.submit=結合 + #pdfOrganiser pdfOrganiser.title=整理 pdfOrganiser.header=PDFページの整理 pdfOrganiser.submit=ページの整理 + #multiTool multiTool.title=PDFマルチツール multiTool.header=PDFマルチツール @@ -298,6 +636,7 @@ pageRemover.header=PDFページ削除 pageRemover.pagesToDelete=削除するページ (ページ番号のカンマ区切りリストを入力してください): pageRemover.submit=ページ削除 + #rotate rotate.title=PDFの回転 rotate.header=PDFの回転 @@ -305,8 +644,6 @@ rotate.selectAngle=回転角度を選択 (90度の倍数): rotate.submit=回転 - - #merge split.title=PDFの分割 split.header=PDFの分割 @@ -331,6 +668,7 @@ imageToPDF.selectText.2=PDFの自動回転 imageToPDF.selectText.3=マルチファイルの処理 (複数の画像を操作する場合に有効になります) imageToPDF.selectText.4=1つのPDFに結合 imageToPDF.selectText.5=個別のPDFに変換 + #pdfToImage pdfToImage.title=PDFを画像に変換 @@ -345,6 +683,7 @@ pdfToImage.grey=グレースケール pdfToImage.blackwhite=白黒 (データが失われる可能性があります!) pdfToImage.submit=変換 + #addPassword addPassword.title=パスワードの追加 addPassword.header=パスワードの追加 (暗号化) @@ -363,9 +702,10 @@ addPassword.selectText.12=印刷を禁止 addPassword.selectText.13=異なる形式の印刷を禁止 addPassword.selectText.14=所有者パスワード addPassword.selectText.15=ドキュメントを開いた後に実行できる操作を制限します (すべてのリーダーでサポートされているわけではありません) -addPassword.selectText.16=ドキュメントを開くことを制限します +addPassword.selectText.16=ドキュメントを開くことを制限します addPassword.submit=暗号化 + #watermark watermark.title=透かしの追加 watermark.header=透かしの追加 @@ -378,6 +718,7 @@ watermark.selectText.6=高さスペース (各透かし間の垂直方向のス watermark.selectText.7=不透明度 (0% - 100%): watermark.submit=透かしを追加 + #remove-watermark remove-watermark.title=透かしの削除 remove-watermark.header=透かしの削除 @@ -385,6 +726,7 @@ remove-watermark.selectText.1=透かしを削除するPDFを選択: remove-watermark.selectText.2=透かしのテキスト: remove-watermark.submit=透かしを削除 + #Change permissions permissions.title=権限の変更 permissions.header=権限の変更 @@ -401,6 +743,7 @@ permissions.selectText.9=印刷を禁止 permissions.selectText.10=異なる形式の印刷を禁止 permissions.submit=変更 + #remove password removePassword.title=パスワードの削除 removePassword.header=パスワードの削除 (復号化) @@ -408,7 +751,9 @@ removePassword.selectText.1=復号化するPDFを選択 removePassword.selectText.2=パスワード removePassword.submit=削除 -changeMetadata.title=メタデータの変更 + +#changeMetadata +changeMetadata.title=タイトル: changeMetadata.header=メタデータの変更 changeMetadata.selectText.1=変更したい変数を編集してください changeMetadata.selectText.2=すべてのメタデータを削除 @@ -426,27 +771,30 @@ changeMetadata.selectText.4=その他のメタデータ: changeMetadata.selectText.5=カスタムメタデータの追加 changeMetadata.submit=変更 + +#xlsToPdf xlsToPdf.title=ExcelをPDFに変換 xlsToPdf.header=ExcelをPDFに変換 xlsToPdf.selectText.1=変換するXLSまたはXLSX Execlシートを選択 xlsToPdf.convert=変換 - - +#pdfToPDFA pdfToPDFA.title=PDFをPDF/Aに変換 pdfToPDFA.header=PDFをPDF/Aに変換 pdfToPDFA.credit=本サービスはPDF/Aの変換にOCRmyPDFを使用しています。 pdfToPDFA.submit=変換 - +#PDFToWord PDFToWord.title=PDFをWordに変換 PDFToWord.header=PDFをWordに変換 PDFToWord.selectText.1=出力ファイル形式 PDFToWord.credit=本サービスはファイル変換にLibreOfficeを使用しています。 PDFToWord.submit=変換 + +#PDFToPresentation PDFToPresentation.title=PDFをプレゼンテーションに変換 PDFToPresentation.header=PDFをプレゼンテーションに変換 PDFToPresentation.selectText.1=出力ファイル形式 @@ -454,6 +802,7 @@ PDFToPresentation.credit=本サービスはファイル変換にLibreOfficeを PDFToPresentation.submit=変換 +#PDFToText PDFToText.title=PDFをText/RTFに変換 PDFToText.header=PDFをText/RTFに変換 PDFToText.selectText.1=出力ファイル形式 @@ -461,11 +810,14 @@ PDFToText.credit=本サービスはファイル変換にLibreOfficeを使用し PDFToText.submit=変換 +#PDFToHTML PDFToHTML.title=PDFをHTMLに変換 PDFToHTML.header=PDFをHTMLに変換 PDFToHTML.credit=本サービスはファイル変換にLibreOfficeを使用しています。 PDFToHTML.submit=変換 + +#PDFToXML PDFToXML.title=PDFをXMLに変換 PDFToXML.header=PDFをXMLに変換 PDFToXML.credit=本サービスはファイル変換にLibreOfficeを使用しています。 diff --git a/src/main/resources/messages_ko_KR.properties b/src/main/resources/messages_ko_KR.properties index 2f26a6b3e8..956aad6d7b 100644 --- a/src/main/resources/messages_ko_KR.properties +++ b/src/main/resources/messages_ko_KR.properties @@ -1,7 +1,7 @@ ########### # Generic # ########### -# the direction that the language is written (ltr = left to right, rtl = right to left) +# the direction that the language is written (ltr=left to right, rtl = right to left) language.direction=ltr pdfPrompt=PDF 선택 @@ -26,9 +26,6 @@ text=텍스트 font=폰트 selectFillter=-- 선택 -- pageNum=페이지 번호 -########################## -### TODO: Translate ### -########################## sizes.small=Small sizes.medium=Medium sizes.large=Large @@ -66,134 +63,297 @@ home.desc=당신의 PDF에 필요한 모든 것이 있는 로컬 호스팅된 home.multiTool.title=PDF 멀티 툴 home.multiTool.desc=페이지를 병합, 회전, 재배열, 제거하세요. -########################## -### TODO: Translate ### -########################## multiTool.tags=Multi Tool,Multi operation,UI,click drag,front end,client side home.merge.title=병합 home.merge.desc=여러 개의 PDF를 쉽게 하나로 합치세요. -########################## -### TODO: Translate ### -########################## merge.tags=merge,Page operations,Back end,server side home.split.title=분할 home.split.desc=PDF를 여러 개의 문서로 분할하세요. +########################## +### TODO: Translate ### +########################## +split.tags=Page operations,divide,Multi Page,cut,server side home.rotate.title=회전 home.rotate.desc=PDF를 쉽게 회전하세요. +########################## +### TODO: Translate ### +########################## +rotate.tags=server side + home.imageToPdf.title=Image to PDF home.imageToPdf.desc=이미지(PNG, JPEG, GIF)를 PDF로 변환하세요. +########################## +### TODO: Translate ### +########################## +imageToPdf.tags=conversion,img,jpg,picture,photo home.pdfToImage.title=PDF to Image home.pdfToImage.desc=PDF를 이미지(PNG, JPEG, GIF)로 변환하세요. +########################## +### TODO: Translate ### +########################## +pdfToImage.tags=conversion,img,jpg,picture,photo home.pdfOrganiser.title=정렬 home.pdfOrganiser.desc=페이지를 원하는 순서대로 제거/재배열하세요. +########################## +### TODO: Translate ### +########################## +pdfOrganiser.tags=duplex,even,odd,sort,move + home.addImage.title=사진 추가 home.addImage.desc=PDF의 설정된 위치에 이미지를 추가하세요.(개발 중) +########################## +### TODO: Translate ### +########################## +addImage.tags=img,jpg,picture,photo home.watermark.title=워터마크 추가 home.watermark.desc=PDF 문서에 사용자 지정 워터마크를 추가하세요. +########################## +### TODO: Translate ### +########################## +watermark.tags=Text,repeating,label,own,copyright,trademark,img,jpg,picture,photo home.permissions.title=권한 변경 home.permissions.desc=PDF 문서의 권한을 변경하세요. +########################## +### TODO: Translate ### +########################## +permissions.tags=read,write,edit,print + home.removePages.title=제거 home.removePages.desc=PDF 문서에서 원치 않는 페이지를 제거하세요. +########################## +### TODO: Translate ### +########################## +removePages.tags=Remove pages,delete pages home.addPassword.title=비밀번호 추가 home.addPassword.desc=PDF 문서를 비밀번호로 암호화하세요. +########################## +### TODO: Translate ### +########################## +addPassword.tags=secure,security home.removePassword.title=비밀번호 제거 home.removePassword.desc=PDF 문서에서 비밀번호를 제거하세요. +########################## +### TODO: Translate ### +########################## +removePassword.tags=secure,Decrypt,security,unpassword,delete password home.compressPdfs.title=압축 home.compressPdfs.desc=파일 크기를 줄이기 위해 PDF 문서를 압축하세요. +########################## +### TODO: Translate ### +########################## +compressPdfs.tags=squish,small,tiny + home.changeMetadata.title=메타데이터 변경 home.changeMetadata.desc=PDF 문서의 메타데이터를 수정/제거/추가하세요. +########################## +### TODO: Translate ### +########################## +changeMetadata.tags==Title,author,date,creation,time,publisher,producer,stats home.fileToPDF.title=파일을 PDF로 변환 home.fileToPDF.desc=거의 모든 파일을 PDF로 변환하세요(DOCX, PNG, XLS, PPT, TXT 등) +########################## +### TODO: Translate ### +########################## +fileToPDF.tags=transformation,format,document,picture,slide,text,conversion,office,docs,word,excel,powerpoint home.ocr.title=OCR / 깔끔하게 스캔 home.ocr.desc=깔끔하게 스캔하고 PDF 내의 이미지에서 텍스트를 감지하여 텍스트로 다시 추가합니다. +########################## +### TODO: Translate ### +########################## +ocr.tags=recognition,text,image,scan,read,identify,detection,editable + home.extractImages.title=이미지 추출 home.extractImages.desc=PDF에서 모든 이미지를 추출하여 zip으로 저장합니다. +########################## +### TODO: Translate ### +########################## +extractImages.tags=picture,photo,save,archive,zip,capture,grab home.pdfToPDFA.title=PDF to PDF/A home.pdfToPDFA.desc=장기 보관을 위해 PDF를 PDF/A 문서로 변환하세요. +########################## +### TODO: Translate ### +########################## +pdfToPDFA.tags=archive,long-term,standard,conversion,storage,preservation home.PDFToWord.title=PDF to Word home.PDFToWord.desc=PDF를 Word 형식으로 변환하세요. (DOC, DOCX, ODT) +########################## +### TODO: Translate ### +########################## +PDFToWord.tags=doc,docx,odt,word,transformation,format,conversion,office,microsoft,docfile home.PDFToPresentation.title=PDF to 프리젠테이션 home.PDFToPresentation.desc=PDF를 프리젠테이션 형식으로 변환하세요. (PPT, PPTX, ODP) +########################## +### TODO: Translate ### +########################## +PDFToPresentation.tags=slides,show,office,microsoft home.PDFToText.title=PDF to 텍스트/RTF home.PDFToText.desc=PDF를 텍스트 또는 RTF 형식으로 변환하세요. +########################## +### TODO: Translate ### +########################## +PDFToText.tags=richformat,richtextformat,rich text format home.PDFToHTML.title=PDF to HTML home.PDFToHTML.desc=PDF를 HTML 형식으로 변환하세요. +########################## +### TODO: Translate ### +########################## +PDFToHTML.tags=web content,browser friendly + home.PDFToXML.title=PDF to XML home.PDFToXML.desc=PDF를 XML 형식으로 변환하세요. +########################## +### TODO: Translate ### +########################## +PDFToXML.tags=data-extraction,structured-content,interop,transformation,convert home.ScannerImageSplit.title=스캔한 사진 감지/분할 home.ScannerImageSplit.desc=사진/PDF 내에서 여러 장의 사진을 분할합니다. +########################## +### TODO: Translate ### +########################## +ScannerImageSplit.tags=separate,auto-detect,scans,multi-photo,organize home.sign.title=서명 home.sign.desc=PDF에 그림, 텍스트, 이미지로 서명을 추가합니다. +########################## +### TODO: Translate ### +########################## +sign.tags=authorize,initials,drawn-signature,text-sign,image-signature home.flatten.title=합치기 home.flatten.desc=PDF에서 모든 인터랙션 요소와 양식을 제거하세요. +########################## +### TODO: Translate ### +########################## +flatten.tags=static,deactivate,non-interactive,streamline home.repair.title=복구 home.repair.desc=손상된 PDF의 복구를 시도합니다. +########################## +### TODO: Translate ### +########################## +repair.tags=fix,restore,correction,recover home.removeBlanks.title=빈 페이지 제거 home.removeBlanks.desc=문서에서 빈 페이지를 감지하고 제거합니다. +########################## +### TODO: Translate ### +########################## +removeBlanks.tags=cleanup,streamline,non-content,organize home.compare.title=비교 home.compare.desc=2개의 PDF 문서를 비교하고 차이를 표시합니다. +########################## +### TODO: Translate ### +########################## +compare.tags=differentiate,contrast,changes,analysis home.certSign.title=인증서로 서명 home.certSign.desc=PDF에 인증서/키로 서명합니다. (PEM/P12) +########################## +### TODO: Translate ### +########################## +certSign.tags=authenticate,PEM,P12,official,encrypt home.pageLayout.title=Multi-Page Layout home.pageLayout.desc=Merge multiple pages of a PDF document into a single page +########################## +### TODO: Translate ### +########################## +pageLayout.tags=merge,composite,single-view,organize home.scalePages.title=Adjust page size/scale home.scalePages.desc=Change the size/scale of page and/or its contents. - -########################## -### TODO: Translate ### ########################## +### TODO: Translate ### +########################## +scalePages.tags=resize,modify,dimension,adapt + home.pipeline.title=Pipeline (Advanced) home.pipeline.desc=Run multiple actions on PDFs by defining pipeline scripts +########################## +### TODO: Translate ### +########################## +pipeline.tags=automate,sequence,scripted,batch-process home.add-page-numbers.title=Add Page Numbers home.add-page-numbers.desc=Add Page numbers throughout a document in a set location +########################## +### TODO: Translate ### +########################## +add-page-numbers.tags=paginate,label,organize,index home.auto-rename.title=Auto Rename PDF File home.auto-rename.desc=Auto renames a PDF file based on its detected header +########################## +### TODO: Translate ### +########################## +auto-rename.tags=auto-detect,header-based,organize,relabel home.adjust-contrast.title=Adjust Colors/Contrast home.adjust-contrast.desc=Adjust Contrast, Saturation and Brightness of a PDF +########################## +### TODO: Translate ### +########################## +adjust-contrast.tags=color-correction,tune,modify,enhance home.crop.title=Crop PDF home.crop.desc=Crop a PDF to reduce its size (maintains text!) +########################## +### TODO: Translate ### +########################## +crop.tags=trim,shrink,edit,shape home.autoSplitPDF.title=Auto Split Pages home.autoSplitPDF.desc=Auto Split Scanned PDF with physical scanned page splitter QR Code +########################## +### TODO: Translate ### +########################## +autoSplitPDF.tags=QR-based,separate,scan-segment,organize home.sanitizePdf.title=Sanitize home.sanitizePdf.desc=Remove scripts and other elements from PDF files +########################## +### TODO: Translate ### +########################## +sanitizePdf.tags=clean,secure,safe,remove-threats + +########################## +### TODO: Translate ### +########################## +home.URLToPDF.title=URL/Website To PDF +home.URLToPDF.desc=Converts any http(s)URL to PDF +URLToPDF.tags=web-capture,save-page,web-to-doc,archive + +########################## +### TODO: Translate ### +########################## +home.HTMLToPDF.title=HTML to PDF +home.HTMLToPDF.desc=Converts any HTML file or zip to PDF +HTMLToPDF.tags=markup,web-content,transformation,convert ########################### @@ -215,6 +375,7 @@ HTMLToPDF.help=Accepts HTML files and ZIPs containing html/css/images etc requir HTMLToPDF.submit=Convert HTMLToPDF.credit=Uses WeasyPrint + #sanitizePDF sanitizePDF.title=Sanitize PDF sanitizePDF.header=Sanitize a PDF file @@ -359,7 +520,7 @@ ScannerImageSplit.selectText.7=최소 윤곽 영역: ScannerImageSplit.selectText.8=사진의 최소 윤곽선 영역 임계값을 설정합니다. ScannerImageSplit.selectText.9=테두리 크기: ScannerImageSplit.selectText.10=출력에서 흰색 테두리를 방지하기 위해 추가 및 제거되는 테두리의 크기를 설정합니다(기본값: 1). - + #OCR ocr.title=OCR / 깔끔하게 스캔 diff --git a/src/main/resources/messages_pl_PL.properties b/src/main/resources/messages_pl_PL.properties index fd90723b40..7c78541c10 100644 --- a/src/main/resources/messages_pl_PL.properties +++ b/src/main/resources/messages_pl_PL.properties @@ -1,7 +1,7 @@ ########### # Generic # ########### -# the direction that the language is written (ltr = left to right, rtl = right to left) +# the direction that the language is written (ltr=left to right, rtl = right to left) language.direction=ltr pdfPrompt=Wybierz PDF @@ -26,9 +26,6 @@ text=Tekst font=Czcionka selectFillter=-- Wybierz -- pageNum=Numer strony -########################## -### TODO: Translate ### -########################## sizes.small=Small sizes.medium=Medium sizes.large=Large @@ -66,134 +63,297 @@ home.desc=Twoja lokalna aplikacja do kompleksowej obsługi Twoich potrzeb związ home.multiTool.title=Multi narzędzie PDF home.multiTool.desc=Łącz, dziel, obracaj, zmieniaj kolejność i usuwaj strony -########################## -### TODO: Translate ### -########################## multiTool.tags=Multi Tool,Multi operation,UI,click drag,front end,client side home.merge.title=Połącz home.merge.desc=Łatwe łączenie wielu dokumentów PDF w jeden. -########################## -### TODO: Translate ### -########################## merge.tags=merge,Page operations,Back end,server side home.split.title=Podziel home.split.desc=Podziel dokument PDF na wiele dokumentów +########################## +### TODO: Translate ### +########################## +split.tags=Page operations,divide,Multi Page,cut,server side home.rotate.title=Obróć home.rotate.desc=Łatwo obracaj dokumenty PDF. +########################## +### TODO: Translate ### +########################## +rotate.tags=server side + home.imageToPdf.title=Obraz na PDF home.imageToPdf.desc=Konwertuj obraz (PNG, JPEG, GIF) do dokumentu PDF. +########################## +### TODO: Translate ### +########################## +imageToPdf.tags=conversion,img,jpg,picture,photo home.pdfToImage.title=PDF na Obraz home.pdfToImage.desc=Konwertuj plik PDF na obraz (PNG, JPEG, GIF). +########################## +### TODO: Translate ### +########################## +pdfToImage.tags=conversion,img,jpg,picture,photo home.pdfOrganiser.title=Uporządkuj home.pdfOrganiser.desc=Usuń/Zmień kolejność stron w dowolnej kolejności +########################## +### TODO: Translate ### +########################## +pdfOrganiser.tags=duplex,even,odd,sort,move + home.addImage.title=Dodaj obraz home.addImage.desc=Dodaje obraz w wybranym miejscu w dokumencie PDF (moduł w budowie) +########################## +### TODO: Translate ### +########################## +addImage.tags=img,jpg,picture,photo home.watermark.title=Dodaj znak wodny home.watermark.desc=Dodaj niestandardowy znak wodny do dokumentu PDF. +########################## +### TODO: Translate ### +########################## +watermark.tags=Text,repeating,label,own,copyright,trademark,img,jpg,picture,photo home.permissions.title=Zmień uprawnienia home.permissions.desc=Zmień uprawnienia dokumentu PDF +########################## +### TODO: Translate ### +########################## +permissions.tags=read,write,edit,print + home.removePages.title=Usuń home.removePages.desc=Usuń niechciane strony z dokumentu PDF. +########################## +### TODO: Translate ### +########################## +removePages.tags=Remove pages,delete pages home.addPassword.title=Dodaj hasło home.addPassword.desc=Zaszyfruj dokument PDF za pomocą hasła. +########################## +### TODO: Translate ### +########################## +addPassword.tags=secure,security home.removePassword.title=Usuń hasło home.removePassword.desc=Usuń ochronę hasłem z dokumentu PDF. +########################## +### TODO: Translate ### +########################## +removePassword.tags=secure,Decrypt,security,unpassword,delete password home.compressPdfs.title=Kompresuj home.compressPdfs.desc=Kompresuj dokumenty PDF, aby zmniejszyć ich rozmiar. +########################## +### TODO: Translate ### +########################## +compressPdfs.tags=squish,small,tiny + home.changeMetadata.title=Zmień metadane home.changeMetadata.desc=Zmień/Usuń/Dodaj metadane w dokumencie PDF +########################## +### TODO: Translate ### +########################## +changeMetadata.tags==Title,author,date,creation,time,publisher,producer,stats home.fileToPDF.title=Konwertuj plik do PDF home.fileToPDF.desc=Konwertuj dowolny plik do dokumentu PDF (DOCX, PNG, XLS, PPT, TXT i więcej) +########################## +### TODO: Translate ### +########################## +fileToPDF.tags=transformation,format,document,picture,slide,text,conversion,office,docs,word,excel,powerpoint home.ocr.title=OCR / Zamiana na tekst home.ocr.desc=OCR skanuje i wykrywa tekst z obrazów w dokumencie PDF i zamienia go na tekst. +########################## +### TODO: Translate ### +########################## +ocr.tags=recognition,text,image,scan,read,identify,detection,editable + home.extractImages.title=Wyodrębnij obrazy home.extractImages.desc=Wyodrębnia wszystkie obrazy z dokumentu PDF i zapisuje je w wybranym formacie +########################## +### TODO: Translate ### +########################## +extractImages.tags=picture,photo,save,archive,zip,capture,grab home.pdfToPDFA.title=PDF na PDF/A home.pdfToPDFA.desc=Konwertuj dokument PDF na PDF/A w celu długoterminowego przechowywania +########################## +### TODO: Translate ### +########################## +pdfToPDFA.tags=archive,long-term,standard,conversion,storage,preservation home.PDFToWord.title=PDF na Word home.PDFToWord.desc=Konwertuj dokument PDF na formaty Word (DOC, DOCX i ODT) +########################## +### TODO: Translate ### +########################## +PDFToWord.tags=doc,docx,odt,word,transformation,format,conversion,office,microsoft,docfile home.PDFToPresentation.title=PDF na Prezentację home.PDFToPresentation.desc=Konwertuj dokument PDF na formaty prezentacji (PPT, PPTX i ODP) +########################## +### TODO: Translate ### +########################## +PDFToPresentation.tags=slides,show,office,microsoft home.PDFToText.title=PDF na Tekst/RTF home.PDFToText.desc=Konwertuj dokument PDF na tekst lub format RTF +########################## +### TODO: Translate ### +########################## +PDFToText.tags=richformat,richtextformat,rich text format home.PDFToHTML.title=PDF na HTML home.PDFToHTML.desc=Konwertuj dokument PDF na format HTML +########################## +### TODO: Translate ### +########################## +PDFToHTML.tags=web content,browser friendly + home.PDFToXML.title=PDF na XML home.PDFToXML.desc=Konwertuj dokument PDF na format XML +########################## +### TODO: Translate ### +########################## +PDFToXML.tags=data-extraction,structured-content,interop,transformation,convert home.ScannerImageSplit.title=Wykryj/Podziel zeskanowane zdjęcia home.ScannerImageSplit.desc=Podziel na wiele zdjęć z jednego zdjęcia/PDF +########################## +### TODO: Translate ### +########################## +ScannerImageSplit.tags=separate,auto-detect,scans,multi-photo,organize home.sign.title=Podpis home.sign.desc=Dodaje podpis do dokument PDF za pomocą rysunku, tekstu lub obrazu +########################## +### TODO: Translate ### +########################## +sign.tags=authorize,initials,drawn-signature,text-sign,image-signature home.flatten.title=Spłaszcz home.flatten.desc=Usuń wszystkie interaktywne elementy i formularze z dokumentu PDF +########################## +### TODO: Translate ### +########################## +flatten.tags=static,deactivate,non-interactive,streamline home.repair.title=Napraw home.repair.desc=Spróbuj naprawić uszkodzony dokument PDF +########################## +### TODO: Translate ### +########################## +repair.tags=fix,restore,correction,recover home.removeBlanks.title=Usuń puste strony home.removeBlanks.desc=Wykrywa i usuwa puste strony z dokumentu PDF +########################## +### TODO: Translate ### +########################## +removeBlanks.tags=cleanup,streamline,non-content,organize home.compare.title=Porównaj home.compare.desc=Porównuje i pokazuje różnice między dwoma dokumentami PDF +########################## +### TODO: Translate ### +########################## +compare.tags=differentiate,contrast,changes,analysis home.certSign.title=Podpisz certyfikatem home.certSign.desc=Podpisz dokument PDF za pomocą certyfikatu/klucza prywatnego (PEM/P12) +########################## +### TODO: Translate ### +########################## +certSign.tags=authenticate,PEM,P12,official,encrypt home.pageLayout.title=Układ wielu stron home.pageLayout.desc=Scal wiele stron dokumentu PDF w jedną stronę +########################## +### TODO: Translate ### +########################## +pageLayout.tags=merge,composite,single-view,organize home.scalePages.title=Dopasuj rozmiar stron home.scalePages.desc=Dopasuj rozmiar stron wybranego dokumentu PDF - -########################## -### TODO: Translate ### ########################## +### TODO: Translate ### +########################## +scalePages.tags=resize,modify,dimension,adapt + home.pipeline.title=Pipeline (Advanced) home.pipeline.desc=Run multiple actions on PDFs by defining pipeline scripts +########################## +### TODO: Translate ### +########################## +pipeline.tags=automate,sequence,scripted,batch-process home.add-page-numbers.title=Add Page Numbers home.add-page-numbers.desc=Add Page numbers throughout a document in a set location +########################## +### TODO: Translate ### +########################## +add-page-numbers.tags=paginate,label,organize,index home.auto-rename.title=Auto Rename PDF File home.auto-rename.desc=Auto renames a PDF file based on its detected header +########################## +### TODO: Translate ### +########################## +auto-rename.tags=auto-detect,header-based,organize,relabel home.adjust-contrast.title=Adjust Colors/Contrast home.adjust-contrast.desc=Adjust Contrast, Saturation and Brightness of a PDF +########################## +### TODO: Translate ### +########################## +adjust-contrast.tags=color-correction,tune,modify,enhance home.crop.title=Crop PDF home.crop.desc=Crop a PDF to reduce its size (maintains text!) +########################## +### TODO: Translate ### +########################## +crop.tags=trim,shrink,edit,shape home.autoSplitPDF.title=Auto Split Pages home.autoSplitPDF.desc=Auto Split Scanned PDF with physical scanned page splitter QR Code +########################## +### TODO: Translate ### +########################## +autoSplitPDF.tags=QR-based,separate,scan-segment,organize home.sanitizePdf.title=Sanitize home.sanitizePdf.desc=Remove scripts and other elements from PDF files +########################## +### TODO: Translate ### +########################## +sanitizePdf.tags=clean,secure,safe,remove-threats + +########################## +### TODO: Translate ### +########################## +home.URLToPDF.title=URL/Website To PDF +home.URLToPDF.desc=Converts any http(s)URL to PDF +URLToPDF.tags=web-capture,save-page,web-to-doc,archive + +########################## +### TODO: Translate ### +########################## +home.HTMLToPDF.title=HTML to PDF +home.HTMLToPDF.desc=Converts any HTML file or zip to PDF +HTMLToPDF.tags=markup,web-content,transformation,convert ########################### @@ -215,6 +375,7 @@ HTMLToPDF.help=Accepts HTML files and ZIPs containing html/css/images etc requir HTMLToPDF.submit=Convert HTMLToPDF.credit=Uses WeasyPrint + #sanitizePDF sanitizePDF.title=Sanitize PDF sanitizePDF.header=Sanitize a PDF file @@ -359,7 +520,7 @@ ScannerImageSplit.selectText.7=Minimalny obszar konturu: ScannerImageSplit.selectText.8=Ustawia próg minimalnego obszaru konturu dla zdjęcia ScannerImageSplit.selectText.9=Rozmiar obramowania: ScannerImageSplit.selectText.10=Ustawia rozmiar dodawanego i usuwanego obramowania, aby uniknąć białych obramowań na wyjściu (domyślnie: 1). - + #OCR ocr.title=OCR / Zamiana na tekst diff --git a/src/main/resources/messages_pt_BR.properties b/src/main/resources/messages_pt_BR.properties index 0715cf0da0..f6e4cda1d6 100644 --- a/src/main/resources/messages_pt_BR.properties +++ b/src/main/resources/messages_pt_BR.properties @@ -1,7 +1,7 @@ ########### # Generic # ########### -# the direction that the language is written (ltr = left to right, rtl = right to left) +# the direction that the language is written (ltr=left to right, rtl = right to left) language.direction=ltr pdfPrompt=Selecione PDF(s) @@ -26,9 +26,6 @@ text=Texto font=Fonte selectFillter=-- Selecione -- pageNum=Número de página -########################## -### TODO: Translate ### -########################## sizes.small=Small sizes.medium=Medium sizes.large=Large @@ -66,134 +63,297 @@ home.desc=Seu melhor utilitário para as necessidades de PDF. home.multiTool.title=Multiferramenta de PDF home.multiTool.desc=Mesclar, girar, reorganizar e remover páginas -########################## -### TODO: Translate ### -########################## multiTool.tags=Multi Tool,Multi operation,UI,click drag,front end,client side home.merge.title=mesclar home.merge.desc=Mescle facilmente vários PDFs em um. -########################## -### TODO: Translate ### -########################## merge.tags=merge,Page operations,Back end,server side home.split.title=Dividir home.split.desc=Dividir PDFs em vários documentos +########################## +### TODO: Translate ### +########################## +split.tags=Page operations,divide,Multi Page,cut,server side home.rotate.title=Girar home.rotate.desc=Gire facilmente seus PDFs. +########################## +### TODO: Translate ### +########################## +rotate.tags=server side + home.imageToPdf.title=Imagem para PDF home.imageToPdf.desc=Converta uma imagem (PNG, JPEG, GIF) em PDF. +########################## +### TODO: Translate ### +########################## +imageToPdf.tags=conversion,img,jpg,picture,photo home.pdfToImage.title=PDF para imagem home.pdfToImage.desc=Converta um PDF em uma imagem. (PNG, JPG, GIF) +########################## +### TODO: Translate ### +########################## +pdfToImage.tags=conversion,img,jpg,picture,photo home.pdfOrganiser.title=Organizar home.pdfOrganiser.desc=Remova/reorganize as páginas em qualquer ordem +########################## +### TODO: Translate ### +########################## +pdfOrganiser.tags=duplex,even,odd,sort,move + home.addImage.title=Adicionar imagem home.addImage.desc=Adiciona uma imagem em um local definido no PDF (trabalho em andamento) +########################## +### TODO: Translate ### +########################## +addImage.tags=img,jpg,picture,photo home.watermark.title=Adicione uma Marca d'água home.watermark.desc=Adicione uma marca d'água personalizada ao seu documento PDF. +########################## +### TODO: Translate ### +########################## +watermark.tags=Text,repeating,label,own,copyright,trademark,img,jpg,picture,photo home.permissions.title=Alterar permissões home.permissions.desc=Altere as permissões do seu documento PDF +########################## +### TODO: Translate ### +########################## +permissions.tags=read,write,edit,print + home.removePages.title=Remover home.removePages.desc=Exclua as páginas indesejadas do seu documento PDF. +########################## +### TODO: Translate ### +########################## +removePages.tags=Remove pages,delete pages home.addPassword.title=Adicionar senha home.addPassword.desc=Criptografe seu documento PDF com uma senha. +########################## +### TODO: Translate ### +########################## +addPassword.tags=secure,security home.removePassword.title=Remover senha home.removePassword.desc=Remova a proteção por senha do seu documento PDF. +########################## +### TODO: Translate ### +########################## +removePassword.tags=secure,Decrypt,security,unpassword,delete password home.compressPdfs.title=Comprimir home.compressPdfs.desc=Comprima PDFs para reduzir o tamanho do arquivo. +########################## +### TODO: Translate ### +########################## +compressPdfs.tags=squish,small,tiny + home.changeMetadata.title=Alterar metadados home.changeMetadata.desc=Alterar/remover/adicionar metadados de um documento PDF +########################## +### TODO: Translate ### +########################## +changeMetadata.tags==Title,author,date,creation,time,publisher,producer,stats home.fileToPDF.title=Converter arquivo para PDF home.fileToPDF.desc=Converta praticamente qualquer arquivo em PDF (DOCX, PNG, XLS, PPT, TXT e mais) +########################## +### TODO: Translate ### +########################## +fileToPDF.tags=transformation,format,document,picture,slide,text,conversion,office,docs,word,excel,powerpoint home.ocr.title=OCR / Varreduras de limpeza home.ocr.desc=A limpeza verifica e detecta texto de imagens em um PDF e o adiciona novamente como texto. +########################## +### TODO: Translate ### +########################## +ocr.tags=recognition,text,image,scan,read,identify,detection,editable + home.extractImages.title=Extrair imagens home.extractImages.desc=Extrai todas as imagens de um PDF e as salva em zip +########################## +### TODO: Translate ### +########################## +extractImages.tags=picture,photo,save,archive,zip,capture,grab home.pdfToPDFA.title=PDF para PDF/A home.pdfToPDFA.desc=Converta PDF para PDF/A para armazenamento de longo prazo +########################## +### TODO: Translate ### +########################## +pdfToPDFA.tags=archive,long-term,standard,conversion,storage,preservation home.PDFToWord.title=PDF para Word home.PDFToWord.desc=Converter PDF para formatos Word (DOC, DOCX e ODT) +########################## +### TODO: Translate ### +########################## +PDFToWord.tags=doc,docx,odt,word,transformation,format,conversion,office,microsoft,docfile home.PDFToPresentation.title=PDF para apresentação home.PDFToPresentation.desc=Converter PDF para formatos de apresentação (PPT, PPTX e ODP) +########################## +### TODO: Translate ### +########################## +PDFToPresentation.tags=slides,show,office,microsoft home.PDFToText.title=PDF para Texto/RTF home.PDFToText.desc=Converter PDF em formato de texto ou RTF +########################## +### TODO: Translate ### +########################## +PDFToText.tags=richformat,richtextformat,rich text format home.PDFToHTML.title=PDF para HTML home.PDFToHTML.desc=Converter PDF para o formato HTML +########################## +### TODO: Translate ### +########################## +PDFToHTML.tags=web content,browser friendly + home.PDFToXML.title=PDF para XML home.PDFToXML.desc=Converter PDF para o formato XML +########################## +### TODO: Translate ### +########################## +PDFToXML.tags=data-extraction,structured-content,interop,transformation,convert home.ScannerImageSplit.title=Detectar/dividir fotos digitalizadas home.ScannerImageSplit.desc=Divide várias fotos de dentro de uma foto/PDF +########################## +### TODO: Translate ### +########################## +ScannerImageSplit.tags=separate,auto-detect,scans,multi-photo,organize home.sign.title=Sinal home.sign.desc=Adiciona assinatura ao PDF por desenho, texto ou imagem +########################## +### TODO: Translate ### +########################## +sign.tags=authorize,initials,drawn-signature,text-sign,image-signature home.flatten.title=achatar home.flatten.desc=Remova todos os elementos e formulários interativos de um PDF +########################## +### TODO: Translate ### +########################## +flatten.tags=static,deactivate,non-interactive,streamline home.repair.title=Reparar home.repair.desc=Tenta reparar um PDF corrompido/quebrado +########################## +### TODO: Translate ### +########################## +repair.tags=fix,restore,correction,recover home.removeBlanks.title=Remover páginas em branco home.removeBlanks.desc=Detecta e remove páginas em branco de um documento +########################## +### TODO: Translate ### +########################## +removeBlanks.tags=cleanup,streamline,non-content,organize home.compare.title=Comparar home.compare.desc=Compara e mostra as diferenças entre 2 documentos PDF +########################## +### TODO: Translate ### +########################## +compare.tags=differentiate,contrast,changes,analysis home.certSign.title=Assinar com certificado home.certSign.desc=Assina um PDF com um Certificado/Chave (PEM/P12) +########################## +### TODO: Translate ### +########################## +certSign.tags=authenticate,PEM,P12,official,encrypt home.pageLayout.title=Multi-Page Layout home.pageLayout.desc=Merge multiple pages of a PDF document into a single page +########################## +### TODO: Translate ### +########################## +pageLayout.tags=merge,composite,single-view,organize home.scalePages.title=Adjust page size/scale home.scalePages.desc=Change the size/scale of page and/or its contents. - -########################## -### TODO: Translate ### ########################## +### TODO: Translate ### +########################## +scalePages.tags=resize,modify,dimension,adapt + home.pipeline.title=Pipeline (Advanced) home.pipeline.desc=Run multiple actions on PDFs by defining pipeline scripts +########################## +### TODO: Translate ### +########################## +pipeline.tags=automate,sequence,scripted,batch-process home.add-page-numbers.title=Add Page Numbers home.add-page-numbers.desc=Add Page numbers throughout a document in a set location +########################## +### TODO: Translate ### +########################## +add-page-numbers.tags=paginate,label,organize,index home.auto-rename.title=Auto Rename PDF File home.auto-rename.desc=Auto renames a PDF file based on its detected header +########################## +### TODO: Translate ### +########################## +auto-rename.tags=auto-detect,header-based,organize,relabel home.adjust-contrast.title=Adjust Colors/Contrast home.adjust-contrast.desc=Adjust Contrast, Saturation and Brightness of a PDF +########################## +### TODO: Translate ### +########################## +adjust-contrast.tags=color-correction,tune,modify,enhance home.crop.title=Crop PDF home.crop.desc=Crop a PDF to reduce its size (maintains text!) +########################## +### TODO: Translate ### +########################## +crop.tags=trim,shrink,edit,shape home.autoSplitPDF.title=Auto Split Pages home.autoSplitPDF.desc=Auto Split Scanned PDF with physical scanned page splitter QR Code +########################## +### TODO: Translate ### +########################## +autoSplitPDF.tags=QR-based,separate,scan-segment,organize home.sanitizePdf.title=Sanitize home.sanitizePdf.desc=Remove scripts and other elements from PDF files +########################## +### TODO: Translate ### +########################## +sanitizePdf.tags=clean,secure,safe,remove-threats + +########################## +### TODO: Translate ### +########################## +home.URLToPDF.title=URL/Website To PDF +home.URLToPDF.desc=Converts any http(s)URL to PDF +URLToPDF.tags=web-capture,save-page,web-to-doc,archive + +########################## +### TODO: Translate ### +########################## +home.HTMLToPDF.title=HTML to PDF +home.HTMLToPDF.desc=Converts any HTML file or zip to PDF +HTMLToPDF.tags=markup,web-content,transformation,convert ########################### @@ -215,6 +375,7 @@ HTMLToPDF.help=Accepts HTML files and ZIPs containing html/css/images etc requir HTMLToPDF.submit=Convert HTMLToPDF.credit=Uses WeasyPrint + #sanitizePDF sanitizePDF.title=Sanitize PDF sanitizePDF.header=Sanitize a PDF file @@ -272,6 +433,7 @@ autoSplitPDF.dividerDownload1=Download 'Auto Splitter Divider (minimal).pdf' autoSplitPDF.dividerDownload2=Download 'Auto Splitter Divider (with instructions).pdf' autoSplitPDF.submit=Submit + #pipeline pipeline.title=Pipeline @@ -358,7 +520,7 @@ ScannerImageSplit.selectText.7=Área mínima de contorno: ScannerImageSplit.selectText.8=Define o limite mínimo da área de contorno para uma foto ScannerImageSplit.selectText.9=Tamanho da Borda: ScannerImageSplit.selectText.10=Define o tamanho da borda adicionada e removida para evitar bordas brancas na saída (padrão: 1). - + #OCR ocr.title=OCR / Limpeza de digitalização diff --git a/src/main/resources/messages_ro_RO.properties b/src/main/resources/messages_ro_RO.properties index a7afb95934..e28e9d8dc7 100644 --- a/src/main/resources/messages_ro_RO.properties +++ b/src/main/resources/messages_ro_RO.properties @@ -1,7 +1,7 @@ ########### # Generic # ########### -# the direction that the language is written (ltr = left to right, rtl = right to left) +# the direction that the language is written (ltr=left to right, rtl = right to left) language.direction=ltr pdfPrompt=Selectează fișiere PDF @@ -26,9 +26,6 @@ text=Text font=Font selectFillter=-- Selectează -- pageNum=Numărul paginii -########################## -### TODO: Translate ### -########################## sizes.small=Small sizes.medium=Medium sizes.large=Large @@ -66,134 +63,297 @@ home.desc=Un singur punct de oprire găzduit local pentru toate nevoile tale leg home.multiTool.title=Instrument multiplu PDF home.multiTool.desc=Unifică, rotește, rearanjează și elimină pagini -########################## -### TODO: Translate ### -########################## multiTool.tags=Multi Tool,Multi operation,UI,click drag,front end,client side home.merge.title=Unifică home.merge.desc=Unifică cu ușurință mai multe fișiere PDF într-unul singur. -########################## -### TODO: Translate ### -########################## merge.tags=merge,Page operations,Back end,server side home.split.title=Desparte home.split.desc=Desparte fișierele PDF în mai multe documente. +########################## +### TODO: Translate ### +########################## +split.tags=Page operations,divide,Multi Page,cut,server side home.rotate.title=Rotește home.rotate.desc=Rotește cu ușurință fișierele PDF. +########################## +### TODO: Translate ### +########################## +rotate.tags=server side + home.imageToPdf.title=Imagine în PDF home.imageToPdf.desc=Convertește o imagine (PNG, JPEG, GIF) în PDF. +########################## +### TODO: Translate ### +########################## +imageToPdf.tags=conversion,img,jpg,picture,photo home.pdfToImage.title=PDF în Imagine home.pdfToImage.desc=Convertește un fișier PDF în imagine (PNG, JPEG, GIF). +########################## +### TODO: Translate ### +########################## +pdfToImage.tags=conversion,img,jpg,picture,photo home.pdfOrganiser.title=Organizează home.pdfOrganiser.desc=Elimină/rearanjează pagini în orice ordine +########################## +### TODO: Translate ### +########################## +pdfOrganiser.tags=duplex,even,odd,sort,move + home.addImage.title=Adaugă imagine home.addImage.desc=Adaugă o imagine într-o locație specifică pe PDF (în curs de dezvoltare) +########################## +### TODO: Translate ### +########################## +addImage.tags=img,jpg,picture,photo home.watermark.title=Adaugă Filigran home.watermark.desc=Adaugă un filigran personalizat la documentul PDF. +########################## +### TODO: Translate ### +########################## +watermark.tags=Text,repeating,label,own,copyright,trademark,img,jpg,picture,photo home.permissions.title=Schimbă permisiuni home.permissions.desc=Schimbă permisiunile documentului PDF +########################## +### TODO: Translate ### +########################## +permissions.tags=read,write,edit,print + home.removePages.title=Elimină home.removePages.desc=Șterge paginile nedorite din documentul PDF. +########################## +### TODO: Translate ### +########################## +removePages.tags=Remove pages,delete pages home.addPassword.title=Adaugă Parolă home.addPassword.desc=Criptează documentul PDF cu o parolă. +########################## +### TODO: Translate ### +########################## +addPassword.tags=secure,security home.removePassword.title=Elimină Parola home.removePassword.desc=Elimină protecția cu parolă din documentul PDF. +########################## +### TODO: Translate ### +########################## +removePassword.tags=secure,Decrypt,security,unpassword,delete password home.compressPdfs.title=Comprimă home.compressPdfs.desc=Comprimă fișierele PDF pentru a reduce dimensiunea lor. +########################## +### TODO: Translate ### +########################## +compressPdfs.tags=squish,small,tiny + home.changeMetadata.title=Schimbă Metadatele home.changeMetadata.desc=Schimbă/Elimină/Adaugă metadate într-un document PDF. +########################## +### TODO: Translate ### +########################## +changeMetadata.tags==Title,author,date,creation,time,publisher,producer,stats home.fileToPDF.title=Convertește fișierul în PDF home.fileToPDF.desc=Convertește aproape orice fișier în format PDF (DOCX, PNG, XLS, PPT, TXT și altele). +########################## +### TODO: Translate ### +########################## +fileToPDF.tags=transformation,format,document,picture,slide,text,conversion,office,docs,word,excel,powerpoint home.ocr.title=OCR / Curățare scanări home.ocr.desc=Curăță scanările și detectează textul din imaginile dintr-un PDF și îl adaugă ca text. +########################## +### TODO: Translate ### +########################## +ocr.tags=recognition,text,image,scan,read,identify,detection,editable + home.extractImages.title=Extrage Imagini home.extractImages.desc=Extrage toate imaginile dintr-un PDF și le salvează într-un fișier zip. +########################## +### TODO: Translate ### +########################## +extractImages.tags=picture,photo,save,archive,zip,capture,grab home.pdfToPDFA.title=PDF în PDF/A home.pdfToPDFA.desc=Convertește un document PDF în format PDF/A pentru stocare pe termen lung. +########################## +### TODO: Translate ### +########################## +pdfToPDFA.tags=archive,long-term,standard,conversion,storage,preservation home.PDFToWord.title=PDF în Word home.PDFToWord.desc=Convertește un document PDF în formate Word (DOC, DOCX și ODT). +########################## +### TODO: Translate ### +########################## +PDFToWord.tags=doc,docx,odt,word,transformation,format,conversion,office,microsoft,docfile home.PDFToPresentation.title=PDF în Prezentare home.PDFToPresentation.desc=Convertește un document PDF în formate de prezentare (PPT, PPTX și ODP). +########################## +### TODO: Translate ### +########################## +PDFToPresentation.tags=slides,show,office,microsoft home.PDFToText.title=PDF în Text/RTF home.PDFToText.desc=Convertește un document PDF în format Text sau RTF. +########################## +### TODO: Translate ### +########################## +PDFToText.tags=richformat,richtextformat,rich text format home.PDFToHTML.title=PDF în HTML home.PDFToHTML.desc=Convertește un document PDF în format HTML. +########################## +### TODO: Translate ### +########################## +PDFToHTML.tags=web content,browser friendly + home.PDFToXML.title=PDF în XML home.PDFToXML.desc=Convertește un document PDF în format XML. +########################## +### TODO: Translate ### +########################## +PDFToXML.tags=data-extraction,structured-content,interop,transformation,convert home.ScannerImageSplit.title=Detectează/Împarte poze scanate home.ScannerImageSplit.desc=Împarte mai multe poze dintr-o poză/PDF. +########################## +### TODO: Translate ### +########################## +ScannerImageSplit.tags=separate,auto-detect,scans,multi-photo,organize home.sign.title=Semnează home.sign.desc=Adaugă o semnătură la documentul PDF prin desenare, text sau imagine. +########################## +### TODO: Translate ### +########################## +sign.tags=authorize,initials,drawn-signature,text-sign,image-signature home.flatten.title=Nivelare home.flatten.desc=Elimină toate elementele interactive și formularele dintr-un PDF. +########################## +### TODO: Translate ### +########################## +flatten.tags=static,deactivate,non-interactive,streamline home.repair.title=Repară home.repair.desc=Încearcă să repare un document PDF corupt/defect. +########################## +### TODO: Translate ### +########################## +repair.tags=fix,restore,correction,recover home.removeBlanks.title=Elimină pagini goale home.removeBlanks.desc=Detectează și elimină paginile goale dintr-un document. +########################## +### TODO: Translate ### +########################## +removeBlanks.tags=cleanup,streamline,non-content,organize home.compare.title=Compară home.compare.desc=Compară și arată diferențele dintre 2 documente PDF. +########################## +### TODO: Translate ### +########################## +compare.tags=differentiate,contrast,changes,analysis home.certSign.title=Semnare cu certificat home.certSign.desc=Semnează un PDF cu un certificat/cheie (PEM/P12) +########################## +### TODO: Translate ### +########################## +certSign.tags=authenticate,PEM,P12,official,encrypt home.pageLayout.title=Multi-Page Layout home.pageLayout.desc=Merge multiple pages of a PDF document into a single page +########################## +### TODO: Translate ### +########################## +pageLayout.tags=merge,composite,single-view,organize home.scalePages.title=Adjust page size/scale home.scalePages.desc=Change the size/scale of page and/or its contents. - -########################## -### TODO: Translate ### ########################## +### TODO: Translate ### +########################## +scalePages.tags=resize,modify,dimension,adapt + home.pipeline.title=Pipeline (Advanced) home.pipeline.desc=Run multiple actions on PDFs by defining pipeline scripts +########################## +### TODO: Translate ### +########################## +pipeline.tags=automate,sequence,scripted,batch-process home.add-page-numbers.title=Add Page Numbers home.add-page-numbers.desc=Add Page numbers throughout a document in a set location +########################## +### TODO: Translate ### +########################## +add-page-numbers.tags=paginate,label,organize,index home.auto-rename.title=Auto Rename PDF File home.auto-rename.desc=Auto renames a PDF file based on its detected header +########################## +### TODO: Translate ### +########################## +auto-rename.tags=auto-detect,header-based,organize,relabel home.adjust-contrast.title=Adjust Colors/Contrast home.adjust-contrast.desc=Adjust Contrast, Saturation and Brightness of a PDF +########################## +### TODO: Translate ### +########################## +adjust-contrast.tags=color-correction,tune,modify,enhance home.crop.title=Crop PDF home.crop.desc=Crop a PDF to reduce its size (maintains text!) +########################## +### TODO: Translate ### +########################## +crop.tags=trim,shrink,edit,shape home.autoSplitPDF.title=Auto Split Pages home.autoSplitPDF.desc=Auto Split Scanned PDF with physical scanned page splitter QR Code +########################## +### TODO: Translate ### +########################## +autoSplitPDF.tags=QR-based,separate,scan-segment,organize home.sanitizePdf.title=Sanitize home.sanitizePdf.desc=Remove scripts and other elements from PDF files +########################## +### TODO: Translate ### +########################## +sanitizePdf.tags=clean,secure,safe,remove-threats + +########################## +### TODO: Translate ### +########################## +home.URLToPDF.title=URL/Website To PDF +home.URLToPDF.desc=Converts any http(s)URL to PDF +URLToPDF.tags=web-capture,save-page,web-to-doc,archive + +########################## +### TODO: Translate ### +########################## +home.HTMLToPDF.title=HTML to PDF +home.HTMLToPDF.desc=Converts any HTML file or zip to PDF +HTMLToPDF.tags=markup,web-content,transformation,convert ########################### @@ -215,6 +375,7 @@ HTMLToPDF.help=Accepts HTML files and ZIPs containing html/css/images etc requir HTMLToPDF.submit=Convert HTMLToPDF.credit=Uses WeasyPrint + #sanitizePDF sanitizePDF.title=Sanitize PDF sanitizePDF.header=Sanitize a PDF file @@ -359,7 +520,7 @@ ScannerImageSplit.selectText.7=Arie minimă a conturului: ScannerImageSplit.selectText.8=Stabilește pragul minim de arie a conturului pentru o fotografie. ScannerImageSplit.selectText.9=Mărimea marginii: ScannerImageSplit.selectText.10=Stabilește mărimea marginii adăugate și eliminate pentru a evita marginile albe în rezultat (implicit: 1). - + #OCR ocr.title=OCR / Curățare scanare diff --git a/src/main/resources/messages_ru_RU.properties b/src/main/resources/messages_ru_RU.properties index b52739ecbd..5b509f465f 100644 --- a/src/main/resources/messages_ru_RU.properties +++ b/src/main/resources/messages_ru_RU.properties @@ -1,7 +1,7 @@ ########### # Generic # ########### -# the direction that the language is written (ltr = left to right, rtl = right to left) +# the direction that the language is written (ltr=left to right, rtl = right to left) language.direction=ltr pdfPrompt=Выберите PDF(ы) @@ -26,9 +26,6 @@ text=Текст font=Шрифт selectFillter=-- Выбрать -- pageNum=номер страницы -########################## -### TODO: Translate ### -########################## sizes.small=Small sizes.medium=Medium sizes.large=Large @@ -66,134 +63,297 @@ home.desc=Ваш локальный универсальный магазин д home.multiTool.title=Мультиинструмент PDF home.multiTool.desc=Объединение, поворот, изменение порядка и удаление страниц -########################## -### TODO: Translate ### -########################## multiTool.tags=Multi Tool,Multi operation,UI,click drag,front end,client side home.merge.title=Объединить home.merge.desc=Легко объединяйте несколько PDF-файлов в один. -########################## -### TODO: Translate ### -########################## merge.tags=merge,Page operations,Back end,server side home.split.title=Разделить home.split.desc=Разделить PDF-файлы на несколько документов +########################## +### TODO: Translate ### +########################## +split.tags=Page operations,divide,Multi Page,cut,server side home.rotate.title=Повернуть home.rotate.desc=Легко поворачивайте свои PDF-файлы. +########################## +### TODO: Translate ### +########################## +rotate.tags=server side + home.imageToPdf.title=Изображение в PDF home.imageToPdf.desc=Преобразование изображения (PNG, JPEG, GIF) в PDF. +########################## +### TODO: Translate ### +########################## +imageToPdf.tags=conversion,img,jpg,picture,photo home.pdfToImage.title=PDF в изображение home.pdfToImage.desc=Преобразование PDF в изображение. (PNG, JPEG, GIF) +########################## +### TODO: Translate ### +########################## +pdfToImage.tags=conversion,img,jpg,picture,photo home.pdfOrganiser.title=Реорганизация home.pdfOrganiser.desc=Удалить/переставить страницы в любом порядке +########################## +### TODO: Translate ### +########################## +pdfOrganiser.tags=duplex,even,odd,sort,move + home.addImage.title=Добавить изображение home.addImage.desc=Добавляет изображение в заданное место в PDF (в процессе) +########################## +### TODO: Translate ### +########################## +addImage.tags=img,jpg,picture,photo home.watermark.title=Добавить водяной знак home.watermark.desc=Добавьте собственный водяной знак в документ PDF. +########################## +### TODO: Translate ### +########################## +watermark.tags=Text,repeating,label,own,copyright,trademark,img,jpg,picture,photo home.permissions.title=Изменить разрешения home.permissions.desc=Измените разрешения вашего PDF-документа +########################## +### TODO: Translate ### +########################## +permissions.tags=read,write,edit,print + home.removePages.title=Удаление home.removePages.desc=Удалите ненужные страницы из документа PDF. +########################## +### TODO: Translate ### +########################## +removePages.tags=Remove pages,delete pages home.addPassword.title=Добавить пароль home.addPassword.desc=Зашифруйте PDF-документ паролем. +########################## +### TODO: Translate ### +########################## +addPassword.tags=secure,security home.removePassword.title=Удалить пароль home.removePassword.desc=Снимите защиту паролем с вашего PDF-документа. +########################## +### TODO: Translate ### +########################## +removePassword.tags=secure,Decrypt,security,unpassword,delete password home.compressPdfs.title=Сжать home.compressPdfs.desc=Сжимайте PDF-файлы, чтобы уменьшить их размер. +########################## +### TODO: Translate ### +########################## +compressPdfs.tags=squish,small,tiny + home.changeMetadata.title=Изменить метаданные home.changeMetadata.desc=Изменить/удалить/добавить метаданные из документа PDF +########################## +### TODO: Translate ### +########################## +changeMetadata.tags==Title,author,date,creation,time,publisher,producer,stats home.fileToPDF.title=Конвертировать файл в PDF home.fileToPDF.desc=Конвертируйте практически любой файл в PDF (DOCX, PNG, XLS, PPT, TXT и другие) +########################## +### TODO: Translate ### +########################## +fileToPDF.tags=transformation,format,document,picture,slide,text,conversion,office,docs,word,excel,powerpoint home.ocr.title=OCR / Очистка сканирования home.ocr.desc=Очистка сканирования и обнаружение текста на изображениях в PDF-файле и повторно добавляет его как текст. +########################## +### TODO: Translate ### +########################## +ocr.tags=recognition,text,image,scan,read,identify,detection,editable + home.extractImages.title=Извлечь изображения home.extractImages.desc=Извлекает все изображения из PDF и сохраняет их в zip +########################## +### TODO: Translate ### +########################## +extractImages.tags=picture,photo,save,archive,zip,capture,grab home.pdfToPDFA.title=PDF в PDF/A home.pdfToPDFA.desc=Преобразование PDF в PDF/A для длительного хранения +########################## +### TODO: Translate ### +########################## +pdfToPDFA.tags=archive,long-term,standard,conversion,storage,preservation home.PDFToWord.title=PDF в Word home.PDFToWord.desc=Преобразование PDF в форматы Word (DOC, DOCX и ODT) +########################## +### TODO: Translate ### +########################## +PDFToWord.tags=doc,docx,odt,word,transformation,format,conversion,office,microsoft,docfile home.PDFToPresentation.title=PDF в презентацию home.PDFToPresentation.desc=Преобразование PDF в форматы презентаций (PPT, PPTX и ODP) +########################## +### TODO: Translate ### +########################## +PDFToPresentation.tags=slides,show,office,microsoft home.PDFToText.title=PDF в Text/RTF home.PDFToText.desc=Преобразование PDF в текстовый или RTF формат +########################## +### TODO: Translate ### +########################## +PDFToText.tags=richformat,richtextformat,rich text format home.PDFToHTML.title=PDF в HTML home.PDFToHTML.desc=Преобразование PDF в формат HTML +########################## +### TODO: Translate ### +########################## +PDFToHTML.tags=web content,browser friendly + home.PDFToXML.title=PDF в XML home.PDFToXML.desc=Преобразование PDF в формат XML +########################## +### TODO: Translate ### +########################## +PDFToXML.tags=data-extraction,structured-content,interop,transformation,convert home.ScannerImageSplit.title=Обнаружение/разделение отсканированных фотографий home.ScannerImageSplit.desc=Разделяет несколько фотографий из фото/PDF +########################## +### TODO: Translate ### +########################## +ScannerImageSplit.tags=separate,auto-detect,scans,multi-photo,organize home.sign.title=Подпись home.sign.desc=Добавляет подпись в PDF с помощью рисунка, текста или изображения +########################## +### TODO: Translate ### +########################## +sign.tags=authorize,initials,drawn-signature,text-sign,image-signature home.flatten.title=Сглаживание home.flatten.desc=Удалить все интерактивные элементы и формы из PDF +########################## +### TODO: Translate ### +########################## +flatten.tags=static,deactivate,non-interactive,streamline home.repair.title=Ремонт home.repair.desc=Пытается восстановить поврежденный/сломанный PDF +########################## +### TODO: Translate ### +########################## +repair.tags=fix,restore,correction,recover home.removeBlanks.title=Удалить пустые страницы home.removeBlanks.desc=Обнаруживает и удаляет пустые страницы из документа +########################## +### TODO: Translate ### +########################## +removeBlanks.tags=cleanup,streamline,non-content,organize home.compare.title=Сравнение home.compare.desc=Сравнивает и показывает различия между двумя PDF-документами +########################## +### TODO: Translate ### +########################## +compare.tags=differentiate,contrast,changes,analysis home.certSign.title=Sign with Certificate home.certSign.desc=Signs a PDF with a Certificate/Key (PEM/P12) +########################## +### TODO: Translate ### +########################## +certSign.tags=authenticate,PEM,P12,official,encrypt home.pageLayout.title=Multi-Page Layout home.pageLayout.desc=Merge multiple pages of a PDF document into a single page +########################## +### TODO: Translate ### +########################## +pageLayout.tags=merge,composite,single-view,organize home.scalePages.title=Adjust page size/scale home.scalePages.desc=Change the size/scale of page and/or its contents. - -########################## -### TODO: Translate ### ########################## +### TODO: Translate ### +########################## +scalePages.tags=resize,modify,dimension,adapt + home.pipeline.title=Pipeline (Advanced) home.pipeline.desc=Run multiple actions on PDFs by defining pipeline scripts +########################## +### TODO: Translate ### +########################## +pipeline.tags=automate,sequence,scripted,batch-process home.add-page-numbers.title=Add Page Numbers home.add-page-numbers.desc=Add Page numbers throughout a document in a set location +########################## +### TODO: Translate ### +########################## +add-page-numbers.tags=paginate,label,organize,index home.auto-rename.title=Auto Rename PDF File home.auto-rename.desc=Auto renames a PDF file based on its detected header +########################## +### TODO: Translate ### +########################## +auto-rename.tags=auto-detect,header-based,organize,relabel home.adjust-contrast.title=Adjust Colors/Contrast home.adjust-contrast.desc=Adjust Contrast, Saturation and Brightness of a PDF +########################## +### TODO: Translate ### +########################## +adjust-contrast.tags=color-correction,tune,modify,enhance home.crop.title=Crop PDF home.crop.desc=Crop a PDF to reduce its size (maintains text!) +########################## +### TODO: Translate ### +########################## +crop.tags=trim,shrink,edit,shape home.autoSplitPDF.title=Auto Split Pages home.autoSplitPDF.desc=Auto Split Scanned PDF with physical scanned page splitter QR Code +########################## +### TODO: Translate ### +########################## +autoSplitPDF.tags=QR-based,separate,scan-segment,organize home.sanitizePdf.title=Sanitize home.sanitizePdf.desc=Remove scripts and other elements from PDF files +########################## +### TODO: Translate ### +########################## +sanitizePdf.tags=clean,secure,safe,remove-threats + +########################## +### TODO: Translate ### +########################## +home.URLToPDF.title=URL/Website To PDF +home.URLToPDF.desc=Converts any http(s)URL to PDF +URLToPDF.tags=web-capture,save-page,web-to-doc,archive + +########################## +### TODO: Translate ### +########################## +home.HTMLToPDF.title=HTML to PDF +home.HTMLToPDF.desc=Converts any HTML file or zip to PDF +HTMLToPDF.tags=markup,web-content,transformation,convert ########################### @@ -215,6 +375,7 @@ HTMLToPDF.help=Accepts HTML files and ZIPs containing html/css/images etc requir HTMLToPDF.submit=Convert HTMLToPDF.credit=Uses WeasyPrint + #sanitizePDF sanitizePDF.title=Sanitize PDF sanitizePDF.header=Sanitize a PDF file @@ -359,7 +520,7 @@ ScannerImageSplit.selectText.7=Минимальная площадь конту ScannerImageSplit.selectText.8=Устанавливает минимальный порог области контура для фотографии ScannerImageSplit.selectText.9=Размер границы: ScannerImageSplit.selectText.10=Устанавливает размер добавляемой и удаляемой границы, чтобы предотвратить появление белых границ на выходе (по умолчанию: 1). - + #OCR ocr.title=OCR / Очистка сканирования diff --git a/src/main/resources/messages_sv_SE.properties b/src/main/resources/messages_sv_SE.properties index e30de8e6ea..d85527254a 100644 --- a/src/main/resources/messages_sv_SE.properties +++ b/src/main/resources/messages_sv_SE.properties @@ -1,7 +1,7 @@ ########### # Generic # ########### -# the direction that the language is written (ltr = left to right, rtl = right to left) +# the direction that the language is written (ltr=left to right, rtl = right to left) language.direction=ltr pdfPrompt=Välj PDF(er) @@ -12,9 +12,6 @@ genericSubmit=Skicka processTimeWarning=Varning: Denna process kan ta upp till en minut beroende på filstorlek pageOrderPrompt=Sidordning (Ange en kommaseparerad lista med sidnummer) : goToPage=Gå till -########################## -### TODO: Translate ### -########################## true=True false=Falskt unknown=Okänt @@ -29,9 +26,6 @@ text=Text font=Teckensnitt selectFillter=-- Välj -- pageNum=Sidnummer -########################## -### TODO: Translate ### -########################## sizes.small=Small sizes.medium=Medium sizes.large=Large @@ -69,134 +63,297 @@ home.desc=Din lokala one-stop-shop för alla dina PDF-behov. home.multiTool.title=PDF Multi-verktyg home.multiTool.desc=Sammanfoga, rotera, ordna om och ta bort sidor -########################## -### TODO: Translate ### -########################## multiTool.tags=Multi Tool,Multi operation,UI,click drag,front end,client side home.merge.title=Sammanfoga home.merge.desc=Sammanfoga enkelt flera PDF-filer till en. -########################## -### TODO: Translate ### -########################## merge.tags=merge,Page operations,Back end,server side home.split.title=Dela home.split.desc=Dela upp PDF-filer i flera dokument +########################## +### TODO: Translate ### +########################## +split.tags=Page operations,divide,Multi Page,cut,server side home.rotate.title=Rotera home.rotate.desc=Rotera enkelt dina PDF-filer. +########################## +### TODO: Translate ### +########################## +rotate.tags=server side + home.imageToPdf.title=Bild till PDF home.imageToPdf.desc=Konvertera en bild (PNG, JPEG, GIF) till PDF. +########################## +### TODO: Translate ### +########################## +imageToPdf.tags=conversion,img,jpg,picture,photo home.pdfToImage.title=PDF till bild home.pdfToImage.desc=Konvertera en PDF till en bild. (PNG, JPEG, GIF) +########################## +### TODO: Translate ### +########################## +pdfToImage.tags=conversion,img,jpg,picture,photo home.pdfOrganiser.title=Ordna home.pdfOrganiser.desc=Ta bort/ordna om sidor i valfri ordning +########################## +### TODO: Translate ### +########################## +pdfOrganiser.tags=duplex,even,odd,sort,move + home.addImage.title=Lägg till bild home.addImage.desc=Lägger till en bild på en angiven plats i PDF:en (pågår arbete) +########################## +### TODO: Translate ### +########################## +addImage.tags=img,jpg,picture,photo home.watermark.title=Lägg till vattenstämpel home.watermark.desc=Lägg till en anpassad vattenstämpel till ditt PDF-dokument. +########################## +### TODO: Translate ### +########################## +watermark.tags=Text,repeating,label,own,copyright,trademark,img,jpg,picture,photo home.permissions.title=Ändra behörigheter home.permissions.desc=Ändra behörigheterna för ditt PDF-dokument +########################## +### TODO: Translate ### +########################## +permissions.tags=read,write,edit,print + home.removePages.title=Ta bort home.removePages.desc=Ta bort oönskade sidor från ditt PDF-dokument. +########################## +### TODO: Translate ### +########################## +removePages.tags=Remove pages,delete pages home.addPassword.title=Lägg till lösenord home.addPassword.desc=Kryptera ditt PDF-dokument med ett lösenord. +########################## +### TODO: Translate ### +########################## +addPassword.tags=secure,security home.removePassword.title=Ta bort lösenord home.removePassword.desc=Ta bort lösenordsskydd från ditt PDF-dokument. +########################## +### TODO: Translate ### +########################## +removePassword.tags=secure,Decrypt,security,unpassword,delete password home.compressPdfs.title=Komprimera home.compressPdfs.desc=Komprimera PDF-filer för att minska deras filstorlek. +########################## +### TODO: Translate ### +########################## +compressPdfs.tags=squish,small,tiny + home.changeMetadata.title=Ändra metadata home.changeMetadata.desc=Ändra/ta bort/lägg till metadata från ett PDF-dokument +########################## +### TODO: Translate ### +########################## +changeMetadata.tags==Title,author,date,creation,time,publisher,producer,stats home.fileToPDF.title=Konvertera fil till PDF home.fileToPDF.desc=Konvertera nästan vilken fil som helst till PDF (DOCX, PNG, XLS, PPT, TXT och mer) +########################## +### TODO: Translate ### +########################## +fileToPDF.tags=transformation,format,document,picture,slide,text,conversion,office,docs,word,excel,powerpoint home.ocr.title=OCR / Rensningsskanningar home.ocr.desc=Cleanup skannar och upptäcker text från bilder i en PDF och lägger till den igen som text. +########################## +### TODO: Translate ### +########################## +ocr.tags=recognition,text,image,scan,read,identify,detection,editable + home.extractImages.title=Extrahera bilder home.extractImages.desc=Extraherar alla bilder från en PDF och sparar dem till zip +########################## +### TODO: Translate ### +########################## +extractImages.tags=picture,photo,save,archive,zip,capture,grab home.pdfToPDFA.title=PDF till PDF/A home.pdfToPDFA.desc=Konvertera PDF till PDF/A för långtidslagring +########################## +### TODO: Translate ### +########################## +pdfToPDFA.tags=archive,long-term,standard,conversion,storage,preservation home.PDFToWord.title=PDF till Word home.PDFToWord.desc=Konvertera PDF till Word-format (DOC, DOCX och ODT) +########################## +### TODO: Translate ### +########################## +PDFToWord.tags=doc,docx,odt,word,transformation,format,conversion,office,microsoft,docfile home.PDFToPresentation.title=PDF till presentation home.PDFToPresentation.desc=Konvertera PDF till presentationsformat (PPT, PPTX och ODP) +########################## +### TODO: Translate ### +########################## +PDFToPresentation.tags=slides,show,office,microsoft home.PDFToText.title=PDF till text/RTF home.PDFToText.desc=Konvertera PDF till text- eller RTF-format +########################## +### TODO: Translate ### +########################## +PDFToText.tags=richformat,richtextformat,rich text format home.PDFToHTML.title=PDF till HTML home.PDFToHTML.desc=Konvertera PDF till HTML-format +########################## +### TODO: Translate ### +########################## +PDFToHTML.tags=web content,browser friendly + home.PDFToXML.title=PDF till XML home.PDFToXML.desc=Konvertera PDF till XML-format +########################## +### TODO: Translate ### +########################## +PDFToXML.tags=data-extraction,structured-content,interop,transformation,convert home.ScannerImageSplit.title=Detektera/Dela skannade foton home.ScannerImageSplit.desc=Delar flera foton från ett foto/PDF +########################## +### TODO: Translate ### +########################## +ScannerImageSplit.tags=separate,auto-detect,scans,multi-photo,organize home.sign.title=Signera home.sign.desc=Lägger till signatur till PDF genom ritning, text eller bild +########################## +### TODO: Translate ### +########################## +sign.tags=authorize,initials,drawn-signature,text-sign,image-signature home.flatten.title=Platta till home.flatten.desc=Ta bort alla interaktiva element och formulär från en PDF +########################## +### TODO: Translate ### +########################## +flatten.tags=static,deactivate,non-interactive,streamline home.repair.title=Reparera home.repair.desc=Försöker reparera en korrupt/trasig PDF +########################## +### TODO: Translate ### +########################## +repair.tags=fix,restore,correction,recover home.removeBlanks.title=Ta bort tomma sidor home.removeBlanks.desc=Känner av och tar bort tomma sidor från ett dokument +########################## +### TODO: Translate ### +########################## +removeBlanks.tags=cleanup,streamline,non-content,organize home.compare.title=Jämför home.compare.desc=Jämför och visar skillnaderna mellan 2 PDF-dokument +########################## +### TODO: Translate ### +########################## +compare.tags=differentiate,contrast,changes,analysis home.certSign.title=Sign with Certificate home.certSign.desc=Signs a PDF with a Certificate/Key (PEM/P12) +########################## +### TODO: Translate ### +########################## +certSign.tags=authenticate,PEM,P12,official,encrypt home.pageLayout.title=Multi-Page Layout home.pageLayout.desc=Merge multiple pages of a PDF document into a single page +########################## +### TODO: Translate ### +########################## +pageLayout.tags=merge,composite,single-view,organize home.scalePages.title=Adjust page size/scale home.scalePages.desc=Change the size/scale of page and/or its contents. - -########################## -### TODO: Translate ### ########################## +### TODO: Translate ### +########################## +scalePages.tags=resize,modify,dimension,adapt + home.pipeline.title=Pipeline (Advanced) home.pipeline.desc=Run multiple actions on PDFs by defining pipeline scripts +########################## +### TODO: Translate ### +########################## +pipeline.tags=automate,sequence,scripted,batch-process home.add-page-numbers.title=Add Page Numbers home.add-page-numbers.desc=Add Page numbers throughout a document in a set location +########################## +### TODO: Translate ### +########################## +add-page-numbers.tags=paginate,label,organize,index home.auto-rename.title=Auto Rename PDF File home.auto-rename.desc=Auto renames a PDF file based on its detected header +########################## +### TODO: Translate ### +########################## +auto-rename.tags=auto-detect,header-based,organize,relabel home.adjust-contrast.title=Adjust Colors/Contrast home.adjust-contrast.desc=Adjust Contrast, Saturation and Brightness of a PDF +########################## +### TODO: Translate ### +########################## +adjust-contrast.tags=color-correction,tune,modify,enhance home.crop.title=Crop PDF home.crop.desc=Crop a PDF to reduce its size (maintains text!) +########################## +### TODO: Translate ### +########################## +crop.tags=trim,shrink,edit,shape home.autoSplitPDF.title=Auto Split Pages home.autoSplitPDF.desc=Auto Split Scanned PDF with physical scanned page splitter QR Code +########################## +### TODO: Translate ### +########################## +autoSplitPDF.tags=QR-based,separate,scan-segment,organize home.sanitizePdf.title=Sanitize home.sanitizePdf.desc=Remove scripts and other elements from PDF files +########################## +### TODO: Translate ### +########################## +sanitizePdf.tags=clean,secure,safe,remove-threats + +########################## +### TODO: Translate ### +########################## +home.URLToPDF.title=URL/Website To PDF +home.URLToPDF.desc=Converts any http(s)URL to PDF +URLToPDF.tags=web-capture,save-page,web-to-doc,archive + +########################## +### TODO: Translate ### +########################## +home.HTMLToPDF.title=HTML to PDF +home.HTMLToPDF.desc=Converts any HTML file or zip to PDF +HTMLToPDF.tags=markup,web-content,transformation,convert ########################### @@ -218,6 +375,7 @@ HTMLToPDF.help=Accepts HTML files and ZIPs containing html/css/images etc requir HTMLToPDF.submit=Convert HTMLToPDF.credit=Uses WeasyPrint + #sanitizePDF sanitizePDF.title=Sanitize PDF sanitizePDF.header=Sanitize a PDF file @@ -362,7 +520,7 @@ ScannerImageSplit.selectText.7=Minsta konturarea: ScannerImageSplit.selectText.8=Ställer in minsta tröskelvärde för konturarea för ett foto ScannerImageSplit.selectText.9=Kantstorlek: ScannerImageSplit.selectText.10=Ställer in storleken på kanten som läggs till och tas bort för att förhindra vita kanter i utdata (standard: 1). - + #OCR ocr.title=OCR / Scan Cleanup diff --git a/src/main/resources/messages_zh_CN.properties b/src/main/resources/messages_zh_CN.properties index 6a733490d2..447a4ec409 100644 --- a/src/main/resources/messages_zh_CN.properties +++ b/src/main/resources/messages_zh_CN.properties @@ -1,7 +1,7 @@ ########### # Generic # ########### -# the direction that the language is written (ltr = left to right, rtl = right to left) +# the direction that the language is written (ltr=left to right, rtl = right to left) language.direction=ltr pdfPrompt=选择PDF @@ -26,9 +26,6 @@ text=\u6587\u672C font=\u5B57\u4F53 selectFillter=-- 选择-- pageNum=页码 -########################## -### TODO: Translate ### -########################## sizes.small=Small sizes.medium=Medium sizes.large=Large @@ -66,134 +63,297 @@ home.desc=您的本地托管一站式服务,满足您的所有PDF需求。 home.multiTool.title=PDF多功能工具 home.multiTool.desc=合并、旋转、重新排列和删除PDF页面 -########################## -### TODO: Translate ### -########################## multiTool.tags=Multi Tool,Multi operation,UI,click drag,front end,client side home.merge.title=合并 home.merge.desc=轻松合并多个PDF为一个。 -########################## -### TODO: Translate ### -########################## merge.tags=merge,Page operations,Back end,server side home.split.title=拆分 home.split.desc=将 PDF 拆分为多个文档。 +########################## +### TODO: Translate ### +########################## +split.tags=Page operations,divide,Multi Page,cut,server side home.rotate.title=旋转 home.rotate.desc=旋转PDF。 +########################## +### TODO: Translate ### +########################## +rotate.tags=server side + home.imageToPdf.title=转换图像到PDF home.imageToPdf.desc=转换图像(PNG, JPEG, GIF)到 PDF。 +########################## +### TODO: Translate ### +########################## +imageToPdf.tags=conversion,img,jpg,picture,photo home.pdfToImage.title=转换PDF到图像 home.pdfToImage.desc=转换PDF到图像(PNG, JPEG, GIF) +########################## +### TODO: Translate ### +########################## +pdfToImage.tags=conversion,img,jpg,picture,photo home.pdfOrganiser.title=整理 home.pdfOrganiser.desc=按任何顺序删除/重新排列页面。 +########################## +### TODO: Translate ### +########################## +pdfOrganiser.tags=duplex,even,odd,sort,move + home.addImage.title=在PDF中添加图片 home.addImage.desc=将图像添加到PDF的设定位置上 +########################## +### TODO: Translate ### +########################## +addImage.tags=img,jpg,picture,photo home.watermark.title=添加水印 home.watermark.desc=在PDF中添加一个自定义的水印。 +########################## +### TODO: Translate ### +########################## +watermark.tags=Text,repeating,label,own,copyright,trademark,img,jpg,picture,photo home.permissions.title=更改权限 home.permissions.desc=改变你的PDF文档的权限。 +########################## +### TODO: Translate ### +########################## +permissions.tags=read,write,edit,print + home.removePages.title=删除 home.removePages.desc=从你的PDF文档中删除不需要的页面。 +########################## +### TODO: Translate ### +########################## +removePages.tags=Remove pages,delete pages home.addPassword.title=添加密码 home.addPassword.desc=用密码来加密你的PDF文档。 +########################## +### TODO: Translate ### +########################## +addPassword.tags=secure,security home.removePassword.title=删除密码 home.removePassword.desc=从你的PDF文档中移除密码保护。 +########################## +### TODO: Translate ### +########################## +removePassword.tags=secure,Decrypt,security,unpassword,delete password home.compressPdfs.title=压缩 home.compressPdfs.desc=压缩PDF文件以减少其文件大小。 +########################## +### TODO: Translate ### +########################## +compressPdfs.tags=squish,small,tiny + home.changeMetadata.title=更改元数据 home.changeMetadata.desc=更改/删除/添加PDF文档的元数据。 +########################## +### TODO: Translate ### +########################## +changeMetadata.tags==Title,author,date,creation,time,publisher,producer,stats home.fileToPDF.title=将文件转换为PDF文件 home.fileToPDF.desc=将几乎所有文件转换为PDF(DOCX、PNG、XLS、PPT、TXT等) +########################## +### TODO: Translate ### +########################## +fileToPDF.tags=transformation,format,document,picture,slide,text,conversion,office,docs,word,excel,powerpoint home.ocr.title=运行OCR/清理扫描 home.ocr.desc=清理和检测PDF中的文本图像,并将其重新添加为文本。 +########################## +### TODO: Translate ### +########################## +ocr.tags=recognition,text,image,scan,read,identify,detection,editable + home.extractImages.title=提取图像 home.extractImages.desc=从PDF中提取所有的图像并将其保存到压缩包中。 +########################## +### TODO: Translate ### +########################## +extractImages.tags=picture,photo,save,archive,zip,capture,grab home.pdfToPDFA.title=PDF To PDF/A home.pdfToPDFA.desc=将PDF转换为PDF/A以便长期保存 +########################## +### TODO: Translate ### +########################## +pdfToPDFA.tags=archive,long-term,standard,conversion,storage,preservation home.PDFToWord.title=PDF to Word home.PDFToWord.desc=将PDF转换为Word格式(DOC、DOCX和ODT)。 +########################## +### TODO: Translate ### +########################## +PDFToWord.tags=doc,docx,odt,word,transformation,format,conversion,office,microsoft,docfile home.PDFToPresentation.title=PDF To Presentation home.PDFToPresentation.desc=将PDF转换成演示文稿格式(PPT、PPTX和ODP)。 +########################## +### TODO: Translate ### +########################## +PDFToPresentation.tags=slides,show,office,microsoft home.PDFToText.title=PDF to RTF (Text) home.PDFToText.desc=将PDF转换为文本或RTF格式 +########################## +### TODO: Translate ### +########################## +PDFToText.tags=richformat,richtextformat,rich text format home.PDFToHTML.title=PDF To HTML home.PDFToHTML.desc=将PDF转换为HTML格式 +########################## +### TODO: Translate ### +########################## +PDFToHTML.tags=web content,browser friendly + home.PDFToXML.title=PDF To XML home.PDFToXML.desc=将PDF转换为XML格式 +########################## +### TODO: Translate ### +########################## +PDFToXML.tags=data-extraction,structured-content,interop,transformation,convert home.ScannerImageSplit.title=检测/分割扫描的照片 home.ScannerImageSplit.desc=从一张照片/PDF中分割出多张照片 +########################## +### TODO: Translate ### +########################## +ScannerImageSplit.tags=separate,auto-detect,scans,multi-photo,organize home.sign.title=\u6807\u5FD7 home.sign.desc=\u901A\u8FC7\u7ED8\u56FE\u3001\u6587\u672C\u6216\u56FE\u50CF\u5411 PDF \u6DFB\u52A0\u7B7E\u540D +########################## +### TODO: Translate ### +########################## +sign.tags=authorize,initials,drawn-signature,text-sign,image-signature home.flatten.title=\u5C55\u5E73 home.flatten.desc=\u4ECE PDF \u4E2D\u5220\u9664\u6240\u6709\u4EA4\u4E92\u5143\u7D20\u548C\u8868\u5355 +########################## +### TODO: Translate ### +########################## +flatten.tags=static,deactivate,non-interactive,streamline home.repair.title=\u4FEE\u590D home.repair.desc=\u5C1D\u8BD5\u4FEE\u590D\u635F\u574F/\u635F\u574F\u7684 PDF +########################## +### TODO: Translate ### +########################## +repair.tags=fix,restore,correction,recover home.removeBlanks.title=\u5220\u9664\u7A7A\u767D\u9875 home.removeBlanks.desc=\u68C0\u6D4B\u5E76\u5220\u9664\u6587\u6863\u4E2D\u7684\u7A7A\u767D\u9875 +########################## +### TODO: Translate ### +########################## +removeBlanks.tags=cleanup,streamline,non-content,organize home.compare.title=\u6BD4\u8F83 home.compare.desc=\u6BD4\u8F83\u5E76\u663E\u793A 2 \u4E2A PDF \u6587\u6863\u4E4B\u95F4\u7684\u5DEE\u5F02 +########################## +### TODO: Translate ### +########################## +compare.tags=differentiate,contrast,changes,analysis home.certSign.title=Sign with Certificate home.certSign.desc=Signs a PDF with a Certificate/Key (PEM/P12) +########################## +### TODO: Translate ### +########################## +certSign.tags=authenticate,PEM,P12,official,encrypt home.pageLayout.title=Multi-Page Layout home.pageLayout.desc=Merge multiple pages of a PDF document into a single page +########################## +### TODO: Translate ### +########################## +pageLayout.tags=merge,composite,single-view,organize home.scalePages.title=Adjust page size/scale home.scalePages.desc=Change the size/scale of page and/or its contents. - -########################## -### TODO: Translate ### ########################## +### TODO: Translate ### +########################## +scalePages.tags=resize,modify,dimension,adapt + home.pipeline.title=Pipeline (Advanced) home.pipeline.desc=Run multiple actions on PDFs by defining pipeline scripts +########################## +### TODO: Translate ### +########################## +pipeline.tags=automate,sequence,scripted,batch-process home.add-page-numbers.title=Add Page Numbers home.add-page-numbers.desc=Add Page numbers throughout a document in a set location +########################## +### TODO: Translate ### +########################## +add-page-numbers.tags=paginate,label,organize,index home.auto-rename.title=Auto Rename PDF File home.auto-rename.desc=Auto renames a PDF file based on its detected header +########################## +### TODO: Translate ### +########################## +auto-rename.tags=auto-detect,header-based,organize,relabel home.adjust-contrast.title=Adjust Colors/Contrast home.adjust-contrast.desc=Adjust Contrast, Saturation and Brightness of a PDF +########################## +### TODO: Translate ### +########################## +adjust-contrast.tags=color-correction,tune,modify,enhance home.crop.title=Crop PDF home.crop.desc=Crop a PDF to reduce its size (maintains text!) +########################## +### TODO: Translate ### +########################## +crop.tags=trim,shrink,edit,shape home.autoSplitPDF.title=Auto Split Pages home.autoSplitPDF.desc=Auto Split Scanned PDF with physical scanned page splitter QR Code +########################## +### TODO: Translate ### +########################## +autoSplitPDF.tags=QR-based,separate,scan-segment,organize home.sanitizePdf.title=Sanitize home.sanitizePdf.desc=Remove scripts and other elements from PDF files +########################## +### TODO: Translate ### +########################## +sanitizePdf.tags=clean,secure,safe,remove-threats + +########################## +### TODO: Translate ### +########################## +home.URLToPDF.title=URL/Website To PDF +home.URLToPDF.desc=Converts any http(s)URL to PDF +URLToPDF.tags=web-capture,save-page,web-to-doc,archive + +########################## +### TODO: Translate ### +########################## +home.HTMLToPDF.title=HTML to PDF +home.HTMLToPDF.desc=Converts any HTML file or zip to PDF +HTMLToPDF.tags=markup,web-content,transformation,convert ########################### @@ -215,6 +375,7 @@ HTMLToPDF.help=Accepts HTML files and ZIPs containing html/css/images etc requir HTMLToPDF.submit=Convert HTMLToPDF.credit=Uses WeasyPrint + #sanitizePDF sanitizePDF.title=Sanitize PDF sanitizePDF.header=Sanitize a PDF file @@ -359,7 +520,7 @@ ScannerImageSplit.selectText.7=最小轮廓面积: ScannerImageSplit.selectText.8=设置照片的最小轮廓面积阈值。 ScannerImageSplit.selectText.9=边框尺寸: ScannerImageSplit.selectText.10=设置添加和删除的边框大小,以防止输出中出现白边(默认值:1)。 - + #OCR ocr.title=OCR/扫描清理 From 29dab5e47dbb6042efb14e29d968536d9460806e Mon Sep 17 00:00:00 2001 From: Anthony Stirling <77850077+Frooodle@users.noreply.github.com> Date: Tue, 25 Jul 2023 00:01:20 +0100 Subject: [PATCH 09/18] numbers name --- .../SPDF/controller/api/other/PageNumbersController.java | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/src/main/java/stirling/software/SPDF/controller/api/other/PageNumbersController.java b/src/main/java/stirling/software/SPDF/controller/api/other/PageNumbersController.java index c1454a2455..9096e64e9d 100644 --- a/src/main/java/stirling/software/SPDF/controller/api/other/PageNumbersController.java +++ b/src/main/java/stirling/software/SPDF/controller/api/other/PageNumbersController.java @@ -165,10 +165,8 @@ public class PageNumbersController { pdfDoc.close(); byte[] resultBytes = baos.toByteArray(); - return ResponseEntity.ok() - .header("Content-Type", "application/pdf; charset=UTF-8") - .header("Content-Disposition", "inline; filename=" + URLEncoder.encode(file.getOriginalFilename().replaceFirst("[.][^.]+$", "") + "_numbersAdded.pdf", "UTF-8")) - .body(resultBytes); + return WebResponseUtils.bytesToWebResponse(resultBytes, URLEncoder.encode(file.getOriginalFilename().replaceFirst("[.][^.]+$", "") + "_numbersAdded.pdf", "UTF-8"), MediaType.APPLICATION_PDF); + } From d028465dc500d7d2b841507addebf64c31250832 Mon Sep 17 00:00:00 2001 From: Anthony Stirling <77850077+Frooodle@users.noreply.github.com> Date: Tue, 25 Jul 2023 21:21:43 +0100 Subject: [PATCH 10/18] Update README.md --- README.md | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/README.md b/README.md index b2606c7dc0..8e69fb9126 100644 --- a/README.md +++ b/README.md @@ -27,6 +27,11 @@ Feel free to request any features or bug fixes either in github issues or our [D - Convert PDFs to and from images - Reorganize PDF pages into different orders. - Add/Generate signatures +- Format PDFs into a multi-paged page +- Scale page contents size by set % +- Adjust Contrast +- Crop PDF +- Auto Split PDF (With physically scanned page dividers) - Flatten PDFs - Repair PDFs - Detect and remove blank pages @@ -39,8 +44,14 @@ Feel free to request any features or bug fixes either in github issues or our [D - Add watermark(s) - Convert Any common file to PDF (using LibreOffice) - Convert PDF to Word/Powerpoint/Others (using LibreOffice) +- Convert HTML to PDF +- URL to PDF - Extract images from PDF +- Extract images from Scans +- Add page numbers +- Auto rename file by detecting PDF header text - OCR on PDF (Using OCRMyPDF) +- PDF/A conversion (Using OCRMyPDF) - Edit metadata - Dark mode support. - Custom download options (see [here](https://github.com/Frooodle/Stirling-PDF/blob/main/images/settings.png) for example) From 8260eced2d4f81e2e88a1b92edd34f19e1c55fe1 Mon Sep 17 00:00:00 2001 From: Anthony Stirling <77850077+Frooodle@users.noreply.github.com> Date: Tue, 25 Jul 2023 23:36:19 +0100 Subject: [PATCH 11/18] auto split cleanup --- .../api/other/AutoSplitPdfController.java | 28 +++++++++++-------- .../resources/templates/auto-split-pdf.html | 4 +++ 2 files changed, 20 insertions(+), 12 deletions(-) diff --git a/src/main/java/stirling/software/SPDF/controller/api/other/AutoSplitPdfController.java b/src/main/java/stirling/software/SPDF/controller/api/other/AutoSplitPdfController.java index e69c05977b..9e08e9a7b5 100644 --- a/src/main/java/stirling/software/SPDF/controller/api/other/AutoSplitPdfController.java +++ b/src/main/java/stirling/software/SPDF/controller/api/other/AutoSplitPdfController.java @@ -41,20 +41,22 @@ public class AutoSplitPdfController { @PostMapping(value = "/auto-split-pdf", consumes = "multipart/form-data") @Operation(summary = "Auto split PDF pages into separate documents", description = "This endpoint accepts a PDF file, scans each page for a specific QR code, and splits the document at the QR code boundaries. The output is a zip file containing each separate PDF document. Input:PDF Output:ZIP Type:SISO") public ResponseEntity autoSplitPdf( - @RequestParam("fileInput") @Parameter(description = "The input PDF file which needs to be split into separate documents based on QR code boundaries.", required = true) MultipartFile file) + @RequestParam("fileInput") @Parameter(description = "The input PDF file which needs to be split into separate documents based on QR code boundaries.", required = true) MultipartFile file, + @RequestParam(value ="duplexMode",defaultValue = "false") @Parameter(description = "Flag indicating if the duplex mode is active, where the page after the divider also gets removed.", required = false) boolean duplexMode) throws IOException { + InputStream inputStream = file.getInputStream(); PDDocument document = PDDocument.load(inputStream); PDFRenderer pdfRenderer = new PDFRenderer(document); List splitDocuments = new ArrayList<>(); - List splitDocumentsBoas = new ArrayList<>(); // create this list to store ByteArrayOutputStreams for zipping + List splitDocumentsBoas = new ArrayList<>(); 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) && page != 0) { splitDocuments.add(new PDDocument()); } @@ -65,9 +67,16 @@ public class AutoSplitPdfController { firstDocument.addPage(document.getPage(page)); splitDocuments.add(firstDocument); } + + // If duplexMode is true and current page is a divider, then skip next page + if (duplexMode && QR_CONTENT.equals(result)) { + page++; + } } - // After all pages are added to splitDocuments, convert each to ByteArrayOutputStream and add to splitDocumentsBoas + // Remove split documents that have no pages + splitDocuments.removeIf(pdDocument -> pdDocument.getNumberOfPages() == 0); + for (PDDocument splitDocument : splitDocuments) { ByteArrayOutputStream baos = new ByteArrayOutputStream(); splitDocument.save(baos); @@ -77,18 +86,16 @@ public class AutoSplitPdfController { document.close(); - // After this line, you can find your zip logic integrated Path zipFile = Files.createTempFile("split_documents", ".zip"); String filename = file.getOriginalFilename().replaceFirst("[.][^.]+$", ""); byte[] data; + try (ZipOutputStream zipOut = new ZipOutputStream(Files.newOutputStream(zipFile))) { - // loop through the split documents and write them to the zip file for (int i = 0; i < splitDocumentsBoas.size(); i++) { - String fileName = filename + "_" + (i + 1) + ".pdf"; // You should replace "originalFileName" with the real file name + String fileName = filename + "_" + (i + 1) + ".pdf"; ByteArrayOutputStream baos = splitDocumentsBoas.get(i); byte[] pdf = baos.toByteArray(); - // Add PDF file to the zip ZipEntry pdfEntry = new ZipEntry(fileName); zipOut.putNextEntry(pdfEntry); zipOut.write(pdf); @@ -101,9 +108,6 @@ public class AutoSplitPdfController { Files.delete(zipFile); } - - - // return the Resource in the response return WebResponseUtils.bytesToWebResponse(data, filename + ".zip", MediaType.APPLICATION_OCTET_STREAM); } diff --git a/src/main/resources/templates/auto-split-pdf.html b/src/main/resources/templates/auto-split-pdf.html index 8085f4d0f9..4f3045e057 100644 --- a/src/main/resources/templates/auto-split-pdf.html +++ b/src/main/resources/templates/auto-split-pdf.html @@ -25,6 +25,10 @@

+
+ + +

From 21de6c6520bdad2b6254a04494e7b97e51ad8307 Mon Sep 17 00:00:00 2001 From: NeilJared Date: Wed, 26 Jul 2023 12:17:20 +0200 Subject: [PATCH 12/18] Update messages_es_ES.properties partial translation update, will continue by line 348 --- src/main/resources/messages_es_ES.properties | 142 +++++++++---------- 1 file changed, 71 insertions(+), 71 deletions(-) diff --git a/src/main/resources/messages_es_ES.properties b/src/main/resources/messages_es_ES.properties index 56e92fdb77..f750be966e 100644 --- a/src/main/resources/messages_es_ES.properties +++ b/src/main/resources/messages_es_ES.properties @@ -6,7 +6,7 @@ language.direction=ltr pdfPrompt=Seleccionar PDF(s) multiPdfPrompt=Seleccionar PDFs (2+) -multiPdfDropPrompt=Selecciona (o arrastra y suelta) todos los PDFs que quieras +multiPdfDropPrompt=Seleccione (o arrastre y suelte) todos los PDFs que quiera imgPrompt=Seleccionar Imagen(es) genericSubmit=Enviar processTimeWarning=Advertencia: este proceso puede tardar hasta un minuto dependiendo del tamaño del archivo @@ -19,17 +19,17 @@ save=Guardar close=Cerrar filesSelected=archivos seleccionados noFavourites=No se agregaron favoritos -bored=¿Aburrido de esperar? +bored=¿Cansado de esperar? alphabet=Alfabeto downloadPdf=Descargar PDF text=Texto font=Fuente -selectFillter=-- Select -- +selectFillter=-- Seleccionar -- pageNum=Número de página -sizes.small=Small -sizes.medium=Medium -sizes.large=Large -sizes.x-large=X-Large +sizes.small=Paqueño +sizes.medium=Mediano +sizes.large=Grande +sizes.x-large=Extra grande error.pdfPassword=El documento PDF está protegido con contraseña y no se ha proporcionado o es incorrecta @@ -58,30 +58,30 @@ settings.zipThreshold=Ficheros ZIP cuando excede el número de ficheros descarga ############# # HOME-PAGE # ############# -home.desc=Tu ventanilla única autohospedada para todas tus necesidades PDF +home.desc=Su ventanilla única autohospedada para todas tus necesidades PDF home.multiTool.title=Multi-herramienta PDF home.multiTool.desc=Combinar, rotar, reorganizar y eliminar páginas -multiTool.tags=Multi Tool,Multi operation,UI,click drag,front end,client side +multiTool.tags=Multi-herramienta,Multi-operación,Interfaz de usuario,Arrastrar con un click,front end,lado del client home.merge.title=Unir home.merge.desc=Unir fácilmente múltiples PDFs en uno -merge.tags=merge,Page operations,Back end,server side +merge.tags=Unir,Operaciones de página,Back end,lado del servidor home.split.title=Dividir home.split.desc=Dividir PDFs en múltiples documentos ########################## ### TODO: Translate ### ########################## -split.tags=Page operations,divide,Multi Page,cut,server side +split.tags=Operaciones de página,dividir,Multi-página,cortar,lado del servidor home.rotate.title=Rotar -home.rotate.desc=Rotar fácilmente tus PDFs +home.rotate.desc=Rotar fácilmente sus PDFs ########################## ### TODO: Translate ### ########################## -rotate.tags=server side +rotate.tags=lado del servidor home.imageToPdf.title=Imagen a PDF @@ -89,43 +89,43 @@ home.imageToPdf.desc=Convertir una imagen (PNG, JPEG, GIF) a PDF ########################## ### TODO: Translate ### ########################## -imageToPdf.tags=conversion,img,jpg,picture,photo +imageToPdf.tags=conversión,img,jpg,imagen,fotografía home.pdfToImage.title=PDF a Imagen home.pdfToImage.desc=Convertir un PDF a una imagen (PNG, JPEG, GIF) ########################## ### TODO: Translate ### ########################## -pdfToImage.tags=conversion,img,jpg,picture,photo +pdfToImage.tags=conversión,img,jpg,imagen,fotografía home.pdfOrganiser.title=Organizador home.pdfOrganiser.desc=Eliminar/Reorganizar páginas en cualquier orden ########################## ### TODO: Translate ### ########################## -pdfOrganiser.tags=duplex,even,odd,sort,move +pdfOrganiser.tags=doble cara,pares,impares,ordenar,mover home.addImage.title=Agregar imagen al PDF -home.addImage.desc=Agregar una imagen en una ubicación establecida en el PDF (trabajo en progreso) +home.addImage.desc=Agregar una imagen en una ubicación establecida en el PDF (en desarrollo) ########################## ### TODO: Translate ### ########################## -addImage.tags=img,jpg,picture,photo +addImage.tags=img,jpg,imagen,fotografía home.watermark.title=Añadir marca de agua home.watermark.desc=Añadir una marca de agua predefinida al documento PDF ########################## ### TODO: Translate ### ########################## -watermark.tags=Text,repeating,label,own,copyright,trademark,img,jpg,picture,photo +watermark.tags=Texto,repetir,etiquetar,propietario,copyight,marca comercial,img,jpg,imagen,fotografía home.permissions.title=Cambiar permisos home.permissions.desc=Cambiar los permisos del documento PDF ########################## ### TODO: Translate ### ########################## -permissions.tags=read,write,edit,print +permissions.tags=leer,escribir,editar,imprimir home.removePages.title=Eliminar @@ -133,28 +133,28 @@ home.removePages.desc=Eliminar páginas no deseadas del documento PDF ########################## ### TODO: Translate ### ########################## -removePages.tags=Remove pages,delete pages +removePages.tags=Borrar páginas,eliminar páginas home.addPassword.title=Añadir contraseña home.addPassword.desc=Encriptar el documento PDF con una contraseña ########################## ### TODO: Translate ### ########################## -addPassword.tags=secure,security +addPassword.tags=seguro,seguridad home.removePassword.title=Eliminar contraseña home.removePassword.desc=Eliminar la contraseña del documento PDF ########################## ### TODO: Translate ### ########################## -removePassword.tags=secure,Decrypt,security,unpassword,delete password +removePassword.tags=seguro,Desencriptar,seguridad,quitar contraseña,eliminar contraseña home.compressPdfs.title=Comprimir home.compressPdfs.desc=Comprimir PDFs para reducir el tamaño del fichero ########################## ### TODO: Translate ### ########################## -compressPdfs.tags=squish,small,tiny +compressPdfs.tags=aplastar,pequeño,diminuto home.changeMetadata.title=Cambiar metadatos @@ -162,21 +162,21 @@ home.changeMetadata.desc=Cambiar/Eliminar/Añadir metadatos al documento PDF ########################## ### TODO: Translate ### ########################## -changeMetadata.tags==Title,author,date,creation,time,publisher,producer,stats +changeMetadata.tags==Título,autor,fecha,creación,hora,editorial,productor,estadísticas home.fileToPDF.title=Convertir fichero a PDF home.fileToPDF.desc=Convertir casi cualquier archivo a PDF (DOCX, PNG, XLS, PPT, TXT y más) ########################## ### TODO: Translate ### ########################## -fileToPDF.tags=transformation,format,document,picture,slide,text,conversion,office,docs,word,excel,powerpoint +fileToPDF.tags=transformación,formato,documento,imagen,diapositiva,texto,conversión,office,docs,word,excel,powerpoint -home.ocr.title=Ejecutar OCR en PDF y/o escaneos de limpieza -home.ocr.desc=Escaneos de limpieza y detectar texto de imágenes dentro de un PDF y volver a agregarlo como texto +home.ocr.title=Ejecutar OCR en PDF y/o tareas de limpieza +home.ocr.desc=Tareas de limpieza y detectar texto en imágenes dentro de un PDF y volver a incrustarlo como texto ########################## ### TODO: Translate ### ########################## -ocr.tags=recognition,text,image,scan,read,identify,detection,editable +ocr.tags=reconocimiento,texto,imagen,escanear,leer,identificar,detección,editable home.extractImages.title=Extraer imágenes @@ -184,42 +184,42 @@ home.extractImages.desc=Extraer todas las imágenes de un PDF y guardarlas en ZI ########################## ### TODO: Translate ### ########################## -extractImages.tags=picture,photo,save,archive,zip,capture,grab +extractImages.tags=imagen,fotografía,guardar,archivo,zip,capturar,coger home.pdfToPDFA.title=Convertir PDF a PDF/A home.pdfToPDFA.desc=Convertir PDF a PDF/A para almacenamiento a largo plazo ########################## ### TODO: Translate ### ########################## -pdfToPDFA.tags=archive,long-term,standard,conversion,storage,preservation +pdfToPDFA.tags=archivo,largo plazo,estándar,conversión,almacewnamiento,conservación home.PDFToWord.title=PDF a Word home.PDFToWord.desc=Convertir formatos PDF a Word (DOC, DOCX y ODT) ########################## ### TODO: Translate ### ########################## -PDFToWord.tags=doc,docx,odt,word,transformation,format,conversion,office,microsoft,docfile +PDFToWord.tags=doc,docx,odt,word,transformación,formato,conversión,office,microsoft,archivo del documento home.PDFToPresentation.title=PDF a presentación home.PDFToPresentation.desc=Convertir PDF a formatos de presentación (PPT, PPTX y ODP) ########################## ### TODO: Translate ### ########################## -PDFToPresentation.tags=slides,show,office,microsoft +PDFToPresentation.tags=diapositivas,mostrar,office,microsoft home.PDFToText.title=PDF a TXT o RTF home.PDFToText.desc=Convertir PDF a formato TXT o RTF ########################## ### TODO: Translate ### ########################## -PDFToText.tags=richformat,richtextformat,rich text format +PDFToText.tags=formato enriquecido,formato de texto enriquecido,formato de texto enriquecido home.PDFToHTML.title=PDF a HTML home.PDFToHTML.desc=Convertir PDF a formato HTML ########################## ### TODO: Translate ### ########################## -PDFToHTML.tags=web content,browser friendly +PDFToHTML.tags=contenido web,amigable para navegador home.PDFToXML.title=PDF a XML @@ -227,132 +227,132 @@ home.PDFToXML.desc=Convertir PDF a formato XML ########################## ### TODO: Translate ### ########################## -PDFToXML.tags=data-extraction,structured-content,interop,transformation,convert +PDFToXML.tags=extracción de datos,contenido estructurado,interopersabilidad,transformación,convertir home.ScannerImageSplit.title=Detectar/Dividir fotos escaneadas home.ScannerImageSplit.desc=Dividir varias fotos dentro de una foto/PDF ########################## ### TODO: Translate ### ########################## -ScannerImageSplit.tags=separate,auto-detect,scans,multi-photo,organize +ScannerImageSplit.tags=separar,auto-detectar,escaneos,multi-foto,organizar home.sign.title=Firmar home.sign.desc=Añadir firma a PDF mediante dibujo, texto o imagen ########################## ### TODO: Translate ### ########################## -sign.tags=authorize,initials,drawn-signature,text-sign,image-signature +sign.tags=autorizar,iniciales,firma manuscrita,texto de firma,imagen de firma home.flatten.title=Aplanar home.flatten.desc=Eliminar todos los elementos y formularios interactivos de un PDF ########################## ### TODO: Translate ### ########################## -flatten.tags=static,deactivate,non-interactive,streamline +flatten.tags=estática,desactivar,no interactiva,etiqueta dinámica home.repair.title=Reparar home.repair.desc=Intentar reparar un PDF corrupto/roto ########################## ### TODO: Translate ### ########################## -repair.tags=fix,restore,correction,recover +repair.tags=reparar,restaurar,corregir,recuperar home.removeBlanks.title=Eliminar páginas en blanco home.removeBlanks.desc=Detectar y eliminar páginas en blanco de un documento ########################## ### TODO: Translate ### ########################## -removeBlanks.tags=cleanup,streamline,non-content,organize +removeBlanks.tags=limpieza,dinámica,sin contenido,organizar home.compare.title=Comparar home.compare.desc=Comparar y mostrar las diferencias entre 2 documentos PDF ########################## ### TODO: Translate ### ########################## -compare.tags=differentiate,contrast,changes,analysis +compare.tags=diferenciar,contrastar,cambios,análisis home.certSign.title=Firmar con certificado home.certSign.desc=Firmar un PDF con un Certificado/Clave (PEM/P12) ########################## ### TODO: Translate ### ########################## -certSign.tags=authenticate,PEM,P12,official,encrypt +certSign.tags=autentificar,PEM,P12,oficial,encriptar home.pageLayout.title=Diseño de varias páginas home.pageLayout.desc=Unir varias páginas de un documento PDF en una sola página ########################## ### TODO: Translate ### ########################## -pageLayout.tags=merge,composite,single-view,organize +pageLayout.tags=unir,compuesto,vista única,organizar home.scalePages.title=Escalar/ajustar tamaño de página home.scalePages.desc=Escalar/cambiar el tamaño de una pagina y/o su contenido ########################## ### TODO: Translate ### ########################## -scalePages.tags=resize,modify,dimension,adapt +scalePages.tags=cambiar tamaño,modificar,dimensionar,adaptar -home.pipeline.title=Pipeline (Advanced) -home.pipeline.desc=Run multiple actions on PDFs by defining pipeline scripts +home.pipeline.title=Secuencia (Avanzado) +home.pipeline.desc=Ejecutar varias tareas a PDFs definiendo una secuencia de comandos ########################## ### TODO: Translate ### ########################## -pipeline.tags=automate,sequence,scripted,batch-process +pipeline.tags=automatizar,secuencia,con script,proceso por lotes -home.add-page-numbers.title=Add Page Numbers -home.add-page-numbers.desc=Add Page numbers throughout a document in a set location +home.add-page-numbers.title=Aádir números de página +home.add-page-numbers.desc=Aádir números de página en un documento en una ubicación concreta ########################## ### TODO: Translate ### ########################## -add-page-numbers.tags=paginate,label,organize,index +add-page-numbers.tags=paginar,etiquetar,organizar,indexar -home.auto-rename.title=Auto Rename PDF File -home.auto-rename.desc=Auto renames a PDF file based on its detected header +home.auto-rename.title=Auto renombrar archivo PDF +home.auto-rename.desc=Auto renormbrar un archivo PDF según su encabezamiento detecetado ########################## ### TODO: Translate ### ########################## -auto-rename.tags=auto-detect,header-based,organize,relabel +auto-rename.tags=auto-detectar,basado en el encabezamiento,organizar,re-etiquetar -home.adjust-contrast.title=Adjust Colors/Contrast -home.adjust-contrast.desc=Adjust Contrast, Saturation and Brightness of a PDF +home.adjust-contrast.title=Ajustar Color/Contraste +home.adjust-contrast.desc=Ajustar Contraste, Saturación y Brillo de un PDF ########################## ### TODO: Translate ### ########################## -adjust-contrast.tags=color-correction,tune,modify,enhance +adjust-contrast.tags=corrección de color,sintonizar color,modificar,mejorar -home.crop.title=Crop PDF -home.crop.desc=Crop a PDF to reduce its size (maintains text!) +home.crop.title=Recortar PDF +home.crop.desc=Recortar un PDF para reducir su tamaño (¡conservando el texto!) ########################## ### TODO: Translate ### ########################## -crop.tags=trim,shrink,edit,shape +crop.tags=recortar,contraer,editar,forma -home.autoSplitPDF.title=Auto Split Pages -home.autoSplitPDF.desc=Auto Split Scanned PDF with physical scanned page splitter QR Code +home.autoSplitPDF.title=Auto Dividir Páginas +home.autoSplitPDF.desc=Auto Dividir PDF escaneado con código QR divsor de página escaneada físicamente ########################## ### TODO: Translate ### ########################## -autoSplitPDF.tags=QR-based,separate,scan-segment,organize +autoSplitPDF.tags=Marcado por QR,separar,segmento de escaneo,organizar -home.sanitizePdf.title=Sanitize -home.sanitizePdf.desc=Remove scripts and other elements from PDF files +home.sanitizePdf.title=Desinfectar +home.sanitizePdf.desc=Eliminar scripts y otros elementos de los archivos PDF ########################## ### TODO: Translate ### ########################## -sanitizePdf.tags=clean,secure,safe,remove-threats +sanitizePdf.tags=limpiar,asegurar,seguro,quitar amenazas ########################## ### TODO: Translate ### ########################## -home.URLToPDF.title=URL/Website To PDF -home.URLToPDF.desc=Converts any http(s)URL to PDF -URLToPDF.tags=web-capture,save-page,web-to-doc,archive +home.URLToPDF.title=URL/Página web a PDF +home.URLToPDF.desc=Convierte cualquier dirección http(s) a PDF +URLToPDF.tags=captura web,guardar página,web-a-doc,archivo ########################## ### TODO: Translate ### ########################## -home.HTMLToPDF.title=HTML to PDF -home.HTMLToPDF.desc=Converts any HTML file or zip to PDF +home.HTMLToPDF.title=HTML a PDF +home.HTMLToPDF.desc=Convierte cualquier archivo HTML o ZIP a PDF HTMLToPDF.tags=markup,web-content,transformation,convert From bf995f989c340dfeaa26d293151536ffde87cb11 Mon Sep 17 00:00:00 2001 From: Anthony Stirling <77850077+Frooodle@users.noreply.github.com> Date: Wed, 26 Jul 2023 13:00:06 +0100 Subject: [PATCH 13/18] fixes --- build.gradle | 2 +- .../controller/web/GeneralWebController.java | 44 ++++++++++++++++--- src/main/resources/messages_ar_AR.properties | 1 + src/main/resources/messages_ca_CA.properties | 1 + src/main/resources/messages_de_DE.properties | 1 + src/main/resources/messages_en_GB.properties | 1 + src/main/resources/messages_es_ES.properties | 1 + src/main/resources/messages_eu_ES.properties | 1 + src/main/resources/messages_fr_FR.properties | 1 + src/main/resources/messages_it_IT.properties | 1 + src/main/resources/messages_ja_JP.properties | 1 + src/main/resources/messages_ko_KR.properties | 1 + src/main/resources/messages_pl_PL.properties | 1 + src/main/resources/messages_pt_BR.properties | 1 + src/main/resources/messages_ro_RO.properties | 1 + src/main/resources/messages_ru_RU.properties | 1 + src/main/resources/messages_sv_SE.properties | 1 + src/main/resources/messages_zh_CN.properties | 1 + .../templates/convert/pdf-to-html.html | 10 ++--- 19 files changed, 61 insertions(+), 11 deletions(-) diff --git a/build.gradle b/build.gradle index 0afc366b3c..bf19d3c6a3 100644 --- a/build.gradle +++ b/build.gradle @@ -8,7 +8,7 @@ plugins { } group = 'stirling.software' -version = '0.11.0' +version = '0.11.1' sourceCompatibility = '17' repositories { diff --git a/src/main/java/stirling/software/SPDF/controller/web/GeneralWebController.java b/src/main/java/stirling/software/SPDF/controller/web/GeneralWebController.java index dcf953a5a8..8290f76bd0 100644 --- a/src/main/java/stirling/software/SPDF/controller/web/GeneralWebController.java +++ b/src/main/java/stirling/software/SPDF/controller/web/GeneralWebController.java @@ -2,7 +2,12 @@ package stirling.software.SPDF.controller.web; import java.io.File; import java.io.IOException; +import java.net.URI; +import java.net.URISyntaxException; +import java.net.URL; import java.nio.charset.StandardCharsets; +import java.nio.file.FileSystem; +import java.nio.file.FileSystems; import java.nio.file.Files; import java.nio.file.Path; import java.nio.file.Paths; @@ -124,17 +129,46 @@ public class GeneralWebController { return "sign"; } private List getFontNames() { + List fontNames = new ArrayList<>(); + try { - return Files.list(Paths.get("src/main/resources/static/fonts")) - .map(Path::getFileName) - .map(Path::toString) + // Get the directory URL from classpath + URL dirURL = getClass().getClassLoader().getResource("static/fonts"); + + if (dirURL != null && dirURL.getProtocol().equals("file")) { + // If running from the file system (e.g., IDE) + fontNames.addAll( + Files.list(Paths.get(dirURL.toURI())) + .map(java.nio.file.Path::getFileName) + .map(java.nio.file.Path::toString) + .filter(name -> name.endsWith(".woff2")) + .map(name -> name.substring(0, name.length() - 6)) // Remove .woff2 extension + .collect(Collectors.toList()) + ); + } else { + // If running from a JAR file + // Resources in JAR go through a different URL protocol. + // In this case, we'll use a different approach to list them. + + // Create a link to the resource. This assumes resources are at the root of the JAR. + URI uri = getClass().getResource("/").toURI(); + FileSystem fileSystem = FileSystems.newFileSystem(uri, new HashMap<>()); + Path myPath = fileSystem.getPath("/static/fonts/"); + Files.walk(myPath, 1) + .filter(path -> !Files.isDirectory(path)) + .map(path -> path.getFileName().toString()) .filter(name -> name.endsWith(".woff2")) .map(name -> name.substring(0, name.length() - 6)) // Remove .woff2 extension - .collect(Collectors.toList()); - } catch (IOException e) { + .forEach(fontNames::add); + fileSystem.close(); + } + } catch (IOException | URISyntaxException e) { throw new RuntimeException("Failed to read font directory", e); } + + return fontNames; } + @GetMapping("/crop") diff --git a/src/main/resources/messages_ar_AR.properties b/src/main/resources/messages_ar_AR.properties index 9f3d30c6d7..96a53cec89 100644 --- a/src/main/resources/messages_ar_AR.properties +++ b/src/main/resources/messages_ar_AR.properties @@ -429,6 +429,7 @@ autoSplitPDF.selectText.2=Scan all your documents at once by inserting the divid autoSplitPDF.selectText.3=Upload the single large scanned PDF file and let Stirling PDF handle the rest. autoSplitPDF.selectText.4=Divider pages are automatically detected and removed, guaranteeing a neat final document. autoSplitPDF.formPrompt=Submit PDF containing Stirling-PDF Page dividers: +autoSplitPDF.duplexMode=Duplex Mode (Front and back scanning) autoSplitPDF.dividerDownload1=Download 'Auto Splitter Divider (minimal).pdf' autoSplitPDF.dividerDownload2=Download 'Auto Splitter Divider (with instructions).pdf' autoSplitPDF.submit=Submit diff --git a/src/main/resources/messages_ca_CA.properties b/src/main/resources/messages_ca_CA.properties index fb29aa6b3c..bec9353662 100644 --- a/src/main/resources/messages_ca_CA.properties +++ b/src/main/resources/messages_ca_CA.properties @@ -429,6 +429,7 @@ autoSplitPDF.selectText.2=Scan all your documents at once by inserting the divid autoSplitPDF.selectText.3=Upload the single large scanned PDF file and let Stirling PDF handle the rest. autoSplitPDF.selectText.4=Divider pages are automatically detected and removed, guaranteeing a neat final document. autoSplitPDF.formPrompt=Submit PDF containing Stirling-PDF Page dividers: +autoSplitPDF.duplexMode=Duplex Mode (Front and back scanning) autoSplitPDF.dividerDownload1=Download 'Auto Splitter Divider (minimal).pdf' autoSplitPDF.dividerDownload2=Download 'Auto Splitter Divider (with instructions).pdf' autoSplitPDF.submit=Submit diff --git a/src/main/resources/messages_de_DE.properties b/src/main/resources/messages_de_DE.properties index 04f31beb41..1ed74f91bf 100644 --- a/src/main/resources/messages_de_DE.properties +++ b/src/main/resources/messages_de_DE.properties @@ -429,6 +429,7 @@ autoSplitPDF.selectText.2=Scan all your documents at once by inserting the divid autoSplitPDF.selectText.3=Upload the single large scanned PDF file and let Stirling PDF handle the rest. autoSplitPDF.selectText.4=Divider pages are automatically detected and removed, guaranteeing a neat final document. autoSplitPDF.formPrompt=Submit PDF containing Stirling-PDF Page dividers: +autoSplitPDF.duplexMode=Duplex Mode (Front and back scanning) autoSplitPDF.dividerDownload1=Download 'Auto Splitter Divider (minimal).pdf' autoSplitPDF.dividerDownload2=Download 'Auto Splitter Divider (with instructions).pdf' autoSplitPDF.submit=Submit diff --git a/src/main/resources/messages_en_GB.properties b/src/main/resources/messages_en_GB.properties index e18ee26413..0d881b65b9 100644 --- a/src/main/resources/messages_en_GB.properties +++ b/src/main/resources/messages_en_GB.properties @@ -309,6 +309,7 @@ autoSplitPDF.selectText.2=Scan all your documents at once by inserting the divid autoSplitPDF.selectText.3=Upload the single large scanned PDF file and let Stirling PDF handle the rest. autoSplitPDF.selectText.4=Divider pages are automatically detected and removed, guaranteeing a neat final document. autoSplitPDF.formPrompt=Submit PDF containing Stirling-PDF Page dividers: +autoSplitPDF.duplexMode=Duplex Mode (Front and back scanning) autoSplitPDF.dividerDownload1=Download 'Auto Splitter Divider (minimal).pdf' autoSplitPDF.dividerDownload2=Download 'Auto Splitter Divider (with instructions).pdf' autoSplitPDF.submit=Submit diff --git a/src/main/resources/messages_es_ES.properties b/src/main/resources/messages_es_ES.properties index 56e92fdb77..4e87240f6e 100644 --- a/src/main/resources/messages_es_ES.properties +++ b/src/main/resources/messages_es_ES.properties @@ -429,6 +429,7 @@ autoSplitPDF.selectText.2=Scan all your documents at once by inserting the divid autoSplitPDF.selectText.3=Upload the single large scanned PDF file and let Stirling PDF handle the rest. autoSplitPDF.selectText.4=Divider pages are automatically detected and removed, guaranteeing a neat final document. autoSplitPDF.formPrompt=Submit PDF containing Stirling-PDF Page dividers: +autoSplitPDF.duplexMode=Duplex Mode (Front and back scanning) autoSplitPDF.dividerDownload1=Download 'Auto Splitter Divider (minimal).pdf' autoSplitPDF.dividerDownload2=Download 'Auto Splitter Divider (with instructions).pdf' autoSplitPDF.submit=Submit diff --git a/src/main/resources/messages_eu_ES.properties b/src/main/resources/messages_eu_ES.properties index 1149b8ca56..96db85819c 100644 --- a/src/main/resources/messages_eu_ES.properties +++ b/src/main/resources/messages_eu_ES.properties @@ -429,6 +429,7 @@ autoSplitPDF.selectText.2=Scan all your documents at once by inserting the divid autoSplitPDF.selectText.3=Upload the single large scanned PDF file and let Stirling PDF handle the rest. autoSplitPDF.selectText.4=Divider pages are automatically detected and removed, guaranteeing a neat final document. autoSplitPDF.formPrompt=Submit PDF containing Stirling-PDF Page dividers: +autoSplitPDF.duplexMode=Duplex Mode (Front and back scanning) autoSplitPDF.dividerDownload1=Download 'Auto Splitter Divider (minimal).pdf' autoSplitPDF.dividerDownload2=Download 'Auto Splitter Divider (with instructions).pdf' autoSplitPDF.submit=Submit diff --git a/src/main/resources/messages_fr_FR.properties b/src/main/resources/messages_fr_FR.properties index b5e677329e..86eb1fc6fa 100644 --- a/src/main/resources/messages_fr_FR.properties +++ b/src/main/resources/messages_fr_FR.properties @@ -429,6 +429,7 @@ autoSplitPDF.selectText.2=Scan all your documents at once by inserting the divid autoSplitPDF.selectText.3=Upload the single large scanned PDF file and let Stirling PDF handle the rest. autoSplitPDF.selectText.4=Divider pages are automatically detected and removed, guaranteeing a neat final document. autoSplitPDF.formPrompt=Submit PDF containing Stirling-PDF Page dividers: +autoSplitPDF.duplexMode=Duplex Mode (Front and back scanning) autoSplitPDF.dividerDownload1=Download 'Auto Splitter Divider (minimal).pdf' autoSplitPDF.dividerDownload2=Download 'Auto Splitter Divider (with instructions).pdf' autoSplitPDF.submit=Submit diff --git a/src/main/resources/messages_it_IT.properties b/src/main/resources/messages_it_IT.properties index 25a5bc82d3..e8d706b0eb 100644 --- a/src/main/resources/messages_it_IT.properties +++ b/src/main/resources/messages_it_IT.properties @@ -429,6 +429,7 @@ autoSplitPDF.selectText.2=Scan all your documents at once by inserting the divid autoSplitPDF.selectText.3=Upload the single large scanned PDF file and let Stirling PDF handle the rest. autoSplitPDF.selectText.4=Divider pages are automatically detected and removed, guaranteeing a neat final document. autoSplitPDF.formPrompt=Submit PDF containing Stirling-PDF Page dividers: +autoSplitPDF.duplexMode=Duplex Mode (Front and back scanning) autoSplitPDF.dividerDownload1=Download 'Auto Splitter Divider (minimal).pdf' autoSplitPDF.dividerDownload2=Download 'Auto Splitter Divider (with instructions).pdf' autoSplitPDF.submit=Submit diff --git a/src/main/resources/messages_ja_JP.properties b/src/main/resources/messages_ja_JP.properties index ac20e9ec0d..fe6086e7bb 100644 --- a/src/main/resources/messages_ja_JP.properties +++ b/src/main/resources/messages_ja_JP.properties @@ -462,6 +462,7 @@ autoSplitPDF.selectText.2=Scan all your documents at once by inserting the divid autoSplitPDF.selectText.3=Upload the single large scanned PDF file and let Stirling PDF handle the rest. autoSplitPDF.selectText.4=Divider pages are automatically detected and removed, guaranteeing a neat final document. autoSplitPDF.formPrompt=Submit PDF containing Stirling-PDF Page dividers: +autoSplitPDF.duplexMode=Duplex Mode (Front and back scanning) autoSplitPDF.dividerDownload1=Download 'Auto Splitter Divider (minimal).pdf' autoSplitPDF.dividerDownload2=Download 'Auto Splitter Divider (with instructions).pdf' autoSplitPDF.submit=Submit diff --git a/src/main/resources/messages_ko_KR.properties b/src/main/resources/messages_ko_KR.properties index 956aad6d7b..cd01f4170a 100644 --- a/src/main/resources/messages_ko_KR.properties +++ b/src/main/resources/messages_ko_KR.properties @@ -429,6 +429,7 @@ autoSplitPDF.selectText.2=Scan all your documents at once by inserting the divid autoSplitPDF.selectText.3=Upload the single large scanned PDF file and let Stirling PDF handle the rest. autoSplitPDF.selectText.4=Divider pages are automatically detected and removed, guaranteeing a neat final document. autoSplitPDF.formPrompt=Submit PDF containing Stirling-PDF Page dividers: +autoSplitPDF.duplexMode=Duplex Mode (Front and back scanning) autoSplitPDF.dividerDownload1=Download 'Auto Splitter Divider (minimal).pdf' autoSplitPDF.dividerDownload2=Download 'Auto Splitter Divider (with instructions).pdf' autoSplitPDF.submit=Submit diff --git a/src/main/resources/messages_pl_PL.properties b/src/main/resources/messages_pl_PL.properties index 7c78541c10..7ea6416767 100644 --- a/src/main/resources/messages_pl_PL.properties +++ b/src/main/resources/messages_pl_PL.properties @@ -429,6 +429,7 @@ autoSplitPDF.selectText.2=Scan all your documents at once by inserting the divid autoSplitPDF.selectText.3=Upload the single large scanned PDF file and let Stirling PDF handle the rest. autoSplitPDF.selectText.4=Divider pages are automatically detected and removed, guaranteeing a neat final document. autoSplitPDF.formPrompt=Submit PDF containing Stirling-PDF Page dividers: +autoSplitPDF.duplexMode=Duplex Mode (Front and back scanning) autoSplitPDF.dividerDownload1=Download 'Auto Splitter Divider (minimal).pdf' autoSplitPDF.dividerDownload2=Download 'Auto Splitter Divider (with instructions).pdf' autoSplitPDF.submit=Submit diff --git a/src/main/resources/messages_pt_BR.properties b/src/main/resources/messages_pt_BR.properties index f6e4cda1d6..3b98b0e620 100644 --- a/src/main/resources/messages_pt_BR.properties +++ b/src/main/resources/messages_pt_BR.properties @@ -429,6 +429,7 @@ autoSplitPDF.selectText.2=Scan all your documents at once by inserting the divid autoSplitPDF.selectText.3=Upload the single large scanned PDF file and let Stirling PDF handle the rest. autoSplitPDF.selectText.4=Divider pages are automatically detected and removed, guaranteeing a neat final document. autoSplitPDF.formPrompt=Submit PDF containing Stirling-PDF Page dividers: +autoSplitPDF.duplexMode=Duplex Mode (Front and back scanning) autoSplitPDF.dividerDownload1=Download 'Auto Splitter Divider (minimal).pdf' autoSplitPDF.dividerDownload2=Download 'Auto Splitter Divider (with instructions).pdf' autoSplitPDF.submit=Submit diff --git a/src/main/resources/messages_ro_RO.properties b/src/main/resources/messages_ro_RO.properties index e28e9d8dc7..e66a6fc598 100644 --- a/src/main/resources/messages_ro_RO.properties +++ b/src/main/resources/messages_ro_RO.properties @@ -429,6 +429,7 @@ autoSplitPDF.selectText.2=Scan all your documents at once by inserting the divid autoSplitPDF.selectText.3=Upload the single large scanned PDF file and let Stirling PDF handle the rest. autoSplitPDF.selectText.4=Divider pages are automatically detected and removed, guaranteeing a neat final document. autoSplitPDF.formPrompt=Submit PDF containing Stirling-PDF Page dividers: +autoSplitPDF.duplexMode=Duplex Mode (Front and back scanning) autoSplitPDF.dividerDownload1=Download 'Auto Splitter Divider (minimal).pdf' autoSplitPDF.dividerDownload2=Download 'Auto Splitter Divider (with instructions).pdf' autoSplitPDF.submit=Submit diff --git a/src/main/resources/messages_ru_RU.properties b/src/main/resources/messages_ru_RU.properties index 5b509f465f..28b0a1e7f1 100644 --- a/src/main/resources/messages_ru_RU.properties +++ b/src/main/resources/messages_ru_RU.properties @@ -429,6 +429,7 @@ autoSplitPDF.selectText.2=Scan all your documents at once by inserting the divid autoSplitPDF.selectText.3=Upload the single large scanned PDF file and let Stirling PDF handle the rest. autoSplitPDF.selectText.4=Divider pages are automatically detected and removed, guaranteeing a neat final document. autoSplitPDF.formPrompt=Submit PDF containing Stirling-PDF Page dividers: +autoSplitPDF.duplexMode=Duplex Mode (Front and back scanning) autoSplitPDF.dividerDownload1=Download 'Auto Splitter Divider (minimal).pdf' autoSplitPDF.dividerDownload2=Download 'Auto Splitter Divider (with instructions).pdf' autoSplitPDF.submit=Submit diff --git a/src/main/resources/messages_sv_SE.properties b/src/main/resources/messages_sv_SE.properties index d85527254a..0e833124c6 100644 --- a/src/main/resources/messages_sv_SE.properties +++ b/src/main/resources/messages_sv_SE.properties @@ -429,6 +429,7 @@ autoSplitPDF.selectText.2=Scan all your documents at once by inserting the divid autoSplitPDF.selectText.3=Upload the single large scanned PDF file and let Stirling PDF handle the rest. autoSplitPDF.selectText.4=Divider pages are automatically detected and removed, guaranteeing a neat final document. autoSplitPDF.formPrompt=Submit PDF containing Stirling-PDF Page dividers: +autoSplitPDF.duplexMode=Duplex Mode (Front and back scanning) autoSplitPDF.dividerDownload1=Download 'Auto Splitter Divider (minimal).pdf' autoSplitPDF.dividerDownload2=Download 'Auto Splitter Divider (with instructions).pdf' autoSplitPDF.submit=Submit diff --git a/src/main/resources/messages_zh_CN.properties b/src/main/resources/messages_zh_CN.properties index 447a4ec409..d1b3b578bb 100644 --- a/src/main/resources/messages_zh_CN.properties +++ b/src/main/resources/messages_zh_CN.properties @@ -429,6 +429,7 @@ autoSplitPDF.selectText.2=Scan all your documents at once by inserting the divid autoSplitPDF.selectText.3=Upload the single large scanned PDF file and let Stirling PDF handle the rest. autoSplitPDF.selectText.4=Divider pages are automatically detected and removed, guaranteeing a neat final document. autoSplitPDF.formPrompt=Submit PDF containing Stirling-PDF Page dividers: +autoSplitPDF.duplexMode=Duplex Mode (Front and back scanning) autoSplitPDF.dividerDownload1=Download 'Auto Splitter Divider (minimal).pdf' autoSplitPDF.dividerDownload2=Download 'Auto Splitter Divider (with instructions).pdf' autoSplitPDF.submit=Submit diff --git a/src/main/resources/templates/convert/pdf-to-html.html b/src/main/resources/templates/convert/pdf-to-html.html index 16e0a39b95..4e28471c06 100644 --- a/src/main/resources/templates/convert/pdf-to-html.html +++ b/src/main/resources/templates/convert/pdf-to-html.html @@ -1,7 +1,7 @@ - +
@@ -11,14 +11,14 @@
-

- +

+

- + -

+

From 33a6a7869c19ec4e56d628c7d0f8dd0070b07ee0 Mon Sep 17 00:00:00 2001 From: Anthony Stirling <77850077+Frooodle@users.noreply.github.com> Date: Wed, 26 Jul 2023 22:08:19 +0100 Subject: [PATCH 14/18] Further Fixes --- build.gradle | 2 +- .../converters/ConvertImgPDFController.java | 4 +- .../controller/web/GeneralWebController.java | 79 ++++++------------- src/main/resources/static/js/downloader.js | 18 ++++- .../templates/convert/img-to-pdf.html | 2 +- 5 files changed, 45 insertions(+), 60 deletions(-) diff --git a/build.gradle b/build.gradle index bf19d3c6a3..688bee009a 100644 --- a/build.gradle +++ b/build.gradle @@ -8,7 +8,7 @@ plugins { } group = 'stirling.software' -version = '0.11.1' +version = '0.11.2' sourceCompatibility = '17' repositories { 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 d19a24b6da..d4964196e3 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 @@ -43,7 +43,7 @@ public class ConvertImgPDFController { @Parameter(description = "Choose between a single image containing all pages or separate images for each page", schema = @Schema(allowableValues = {"single", "multiple"})) String singleOrMultiple, @RequestParam("colorType") - @Parameter(description = "The color type of the output image(s)", schema = @Schema(allowableValues = {"rgb", "greyscale", "blackwhite"})) + @Parameter(description = "The color type of the output image(s)", schema = @Schema(allowableValues = {"color", "greyscale", "blackwhite"})) String colorType, @RequestParam("dpi") @Parameter(description = "The DPI (dots per inch) for the output image(s)") @@ -94,7 +94,7 @@ public class ConvertImgPDFController { @Parameter(description = "Whether to stretch the images to fit the PDF page or maintain the aspect ratio", example = "false") boolean stretchToFit, @RequestParam("colorType") - @Parameter(description = "The color type of the output image(s)", schema = @Schema(allowableValues = {"rgb", "greyscale", "blackwhite"})) + @Parameter(description = "The color type of the output image(s)", schema = @Schema(allowableValues = {"color", "greyscale", "blackwhite"})) String colorType, @RequestParam(defaultValue = "false", name = "autoRotate") @Parameter(description = "Whether to automatically rotate the images to better fit the PDF page", example = "true") diff --git a/src/main/java/stirling/software/SPDF/controller/web/GeneralWebController.java b/src/main/java/stirling/software/SPDF/controller/web/GeneralWebController.java index 8290f76bd0..75d67401ba 100644 --- a/src/main/java/stirling/software/SPDF/controller/web/GeneralWebController.java +++ b/src/main/java/stirling/software/SPDF/controller/web/GeneralWebController.java @@ -1,35 +1,25 @@ package stirling.software.SPDF.controller.web; - -import java.io.File; import java.io.IOException; -import java.net.URI; -import java.net.URISyntaxException; -import java.net.URL; import java.nio.charset.StandardCharsets; -import java.nio.file.FileSystem; -import java.nio.file.FileSystems; 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.HashMap; import java.util.List; import java.util.Map; import java.util.stream.Collectors; +import java.util.stream.Stream; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.core.io.Resource; +import org.springframework.core.io.ResourceLoader; +import org.springframework.core.io.support.ResourcePatternUtils; import org.springframework.stereotype.Controller; import org.springframework.ui.Model; import org.springframework.web.bind.annotation.GetMapping; -import java.io.IOException; -import java.nio.file.Files; -import java.nio.file.Paths; -import java.util.ArrayList; -import java.util.List; -import java.util.HashMap; -import java.util.stream.Collectors; -import java.util.stream.Stream; -import org.springframework.web.bind.annotation.GetMapping; -import org.springframework.web.bind.annotation.ModelAttribute; - import com.fasterxml.jackson.databind.ObjectMapper; import io.swagger.v3.oas.annotations.Hidden; @@ -128,45 +118,28 @@ public class GeneralWebController { model.addAttribute("fonts", getFontNames()); return "sign"; } + + @Autowired + private ResourceLoader resourceLoader; + private List getFontNames() { - List fontNames = new ArrayList<>(); - try { - // Get the directory URL from classpath - URL dirURL = getClass().getClassLoader().getResource("static/fonts"); - - if (dirURL != null && dirURL.getProtocol().equals("file")) { - // If running from the file system (e.g., IDE) - fontNames.addAll( - Files.list(Paths.get(dirURL.toURI())) - .map(java.nio.file.Path::getFileName) - .map(java.nio.file.Path::toString) - .filter(name -> name.endsWith(".woff2")) - .map(name -> name.substring(0, name.length() - 6)) // Remove .woff2 extension - .collect(Collectors.toList()) - ); - } else { - // If running from a JAR file - // Resources in JAR go through a different URL protocol. - // In this case, we'll use a different approach to list them. - - // Create a link to the resource. This assumes resources are at the root of the JAR. - URI uri = getClass().getResource("/").toURI(); - FileSystem fileSystem = FileSystems.newFileSystem(uri, new HashMap<>()); - Path myPath = fileSystem.getPath("/static/fonts/"); - Files.walk(myPath, 1) - .filter(path -> !Files.isDirectory(path)) - .map(path -> path.getFileName().toString()) - .filter(name -> name.endsWith(".woff2")) - .map(name -> name.substring(0, name.length() - 6)) // Remove .woff2 extension - .forEach(fontNames::add); - fileSystem.close(); - } - } catch (IOException | URISyntaxException e) { + Resource[] resources = ResourcePatternUtils.getResourcePatternResolver(resourceLoader) + .getResources("classpath:static/fonts/*.woff2"); + + return Arrays.stream(resources) + .map(resource -> { + try { + String filename = resource.getFilename(); + return filename.substring(0, filename.length() - 6); // Remove .woff2 extension + } catch (Exception e) { + throw new RuntimeException("Error processing filename", e); + } + }) + .collect(Collectors.toList()); + } catch (Exception e) { throw new RuntimeException("Failed to read font directory", e); } - - return fontNames; } diff --git a/src/main/resources/static/js/downloader.js b/src/main/resources/static/js/downloader.js index e9abdf384c..d06d82dc5e 100644 --- a/src/main/resources/static/js/downloader.js +++ b/src/main/resources/static/js/downloader.js @@ -154,11 +154,22 @@ async function submitMultiPdfForm(url, files) { if (zipFiles) { jszip = new JSZip(); } - + + + // Get the form with the method attribute set to POST + let postForm = document.querySelector('form[method="POST"]'); + // Get existing form data - let formData = new FormData($('form')[0]); + let formData; + if (postForm) { + formData = new FormData($(postForm)[0]); // Convert the form to a jQuery object and get the raw DOM element + } else { + console.log("No form with POST method found."); + } + //Remove file to reuse parameters for other runs formData.delete('fileInput'); + const CONCURRENCY_LIMIT = 8; const chunks = []; for (let i = 0; i < Array.from(files).length; i += CONCURRENCY_LIMIT) { @@ -169,10 +180,11 @@ async function submitMultiPdfForm(url, files) { const promises = chunk.map(async file => { let fileFormData = new FormData(); fileFormData.append('fileInput', file); - + console.log(fileFormData); // Add other form data for (let pair of formData.entries()) { fileFormData.append(pair[0], pair[1]); + console.log(pair[0]+ ', ' + pair[1]); } try { diff --git a/src/main/resources/templates/convert/img-to-pdf.html b/src/main/resources/templates/convert/img-to-pdf.html index b64f43f175..3182eb9d8d 100644 --- a/src/main/resources/templates/convert/img-to-pdf.html +++ b/src/main/resources/templates/convert/img-to-pdf.html @@ -31,7 +31,7 @@
- From 7ead12922f65f27afbcf49e4b3993d727e5ac40b Mon Sep 17 00:00:00 2001 From: Anthony Stirling <77850077+Frooodle@users.noreply.github.com> Date: Wed, 26 Jul 2023 22:08:34 +0100 Subject: [PATCH 15/18] new page --- images/stirling-home.png | Bin 131177 -> 121265 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/images/stirling-home.png b/images/stirling-home.png index 47d03b055ecaf3eecd90c7568ee0572e73904dd9..27241bf413187b7c57e86cb11efc0a6a988b3b50 100644 GIT binary patch literal 121265 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�AfL?3my!EAqcmjMi^7r@|JWF~ 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

g$ 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 DrtYb2 From 4d438142209c16dbf7ac1f15947dd6648016b14a Mon Sep 17 00:00:00 2001 From: NeilJared Date: Thu, 27 Jul 2023 21:20:30 +0200 Subject: [PATCH 16/18] Update messages_es_ES.properties ES translation completed and updated to v.0.11.2 --- src/main/resources/messages_es_ES.properties | 104 +++++++++---------- 1 file changed, 52 insertions(+), 52 deletions(-) diff --git a/src/main/resources/messages_es_ES.properties b/src/main/resources/messages_es_ES.properties index f750be966e..dbdc0a1799 100644 --- a/src/main/resources/messages_es_ES.properties +++ b/src/main/resources/messages_es_ES.properties @@ -353,7 +353,7 @@ URLToPDF.tags=captura web,guardar página,web-a-doc,archivo ########################## home.HTMLToPDF.title=HTML a PDF home.HTMLToPDF.desc=Convierte cualquier archivo HTML o ZIP a PDF -HTMLToPDF.tags=markup,web-content,transformation,convert +HTMLToPDF.tags=margen,contenido web,transformación,convertir ########################### @@ -362,76 +362,76 @@ HTMLToPDF.tags=markup,web-content,transformation,convert # # ########################### #url-to-pdf -URLToPDF.title=URL To PDF -URLToPDF.header=URL To PDF -URLToPDF.submit=Convert -URLToPDF.credit=Uses WeasyPrint +URLToPDF.title=URL a PDF +URLToPDF.header=URL a PDF +URLToPDF.submit=Convertir +URLToPDF.credit=Utiliza WeasyPrint #html-to-pdf -HTMLToPDF.title=HTML To PDF -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.title=HTML a PDF +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 #sanitizePDF -sanitizePDF.title=Sanitize PDF -sanitizePDF.header=Sanitize a PDF file -sanitizePDF.selectText.1=Remove JavaScript actions -sanitizePDF.selectText.2=Remove embedded files -sanitizePDF.selectText.3=Remove metadata -sanitizePDF.selectText.4=Remove links -sanitizePDF.selectText.5=Remove fonts -sanitizePDF.submit=Sanitize PDF +sanitizePDF.title=Desinfectar archivo PDF +sanitizePDF.header=Desinfectar un archivo PDF +sanitizePDF.selectText.1=Eliminar acciones JavaScript +sanitizePDF.selectText.2=Eliminar archivos incrustados +sanitizePDF.selectText.3=Eliminar metadatos +sanitizePDF.selectText.4=Eliminar enlaces +sanitizePDF.selectText.5=Eliminar fuentes +sanitizePDF.submit=Desinfectar PDF #addPageNumbers -addPageNumbers.title=Add Page Numbers -addPageNumbers.header=Add Page Numbers -addPageNumbers.selectText.1=Select PDF file: -addPageNumbers.selectText.2=Margin Size -addPageNumbers.selectText.3=Position -addPageNumbers.selectText.4=Starting Number -addPageNumbers.selectText.5=Pages to Number -addPageNumbers.selectText.6=Custom Text -addPageNumbers.submit=Add Page Numbers +addPageNumbers.title=Añadir Números de Página +addPageNumbers.header=Añadir Números de Página +addPageNumbers.selectText.1=Seleccionar archivo PDF: +addPageNumbers.selectText.2=Tamaño del margen +addPageNumbers.selectText.3=Posición +addPageNumbers.selectText.4=Número de inicio +addPageNumbers.selectText.5=Páginas a numerar +addPageNumbers.selectText.6=Texto personalizado +addPageNumbers.submit=Añadir Números de Página #auto-rename -auto-rename.title=Auto Rename -auto-rename.header=Auto Rename PDF -auto-rename.submit=Auto Rename +auto-rename.title=Auto Renombrar +auto-rename.header=Auto Renombrar PDF +auto-rename.submit=Auto Renombrar #adjustContrast -adjustContrast.title=Adjust Contrast -adjustContrast.header=Adjust Contrast -adjustContrast.contrast=Contrast: -adjustContrast.brightness=Brightness: -adjustContrast.saturation=Saturation: -adjustContrast.download=Download +adjustContrast.title=Ajustar Contraste +adjustContrast.header=Ajustar Contraste +adjustContrast.contrast=Contraste: +adjustContrast.brightness=Brillo: +adjustContrast.saturation=Saturación: +adjustContrast.download=Descargar #crop -crop.title=Crop -crop.header=Crop Image -crop.submit=Submit +crop.title=Recortar +crop.header=Recortar Imagen +crop.submit=Entregar #autoSplitPDF -autoSplitPDF.title=Auto Split PDF -autoSplitPDF.header=Auto Split PDF -autoSplitPDF.description=Print, Insert, Scan, upload, and let us auto-separate your documents. No manual work sorting needed. -autoSplitPDF.selectText.1=Print out some divider sheets from below (Black and white is fine). -autoSplitPDF.selectText.2=Scan all your documents at once by inserting the divider sheet between them. -autoSplitPDF.selectText.3=Upload the single large scanned PDF file and let Stirling PDF handle the rest. -autoSplitPDF.selectText.4=Divider pages are automatically detected and removed, guaranteeing a neat final document. -autoSplitPDF.formPrompt=Submit PDF containing Stirling-PDF Page dividers: -autoSplitPDF.dividerDownload1=Download 'Auto Splitter Divider (minimal).pdf' -autoSplitPDF.dividerDownload2=Download 'Auto Splitter Divider (with instructions).pdf' -autoSplitPDF.submit=Submit +autoSplitPDF.title=Auto Dividir PDF +autoSplitPDF.header=Auto Dividir PDF +autoSplitPDF.description=Imprimir, Insertar, Escanear, cargar, y déjenos sepsrar automáticamente sus documentos. No se necesita clasificación manual. +autoSplitPDF.selectText.1=Imprimir algunas hojas divisorias desde la parte inferior (Blanco y negro está bien). +autoSplitPDF.selectText.2=Escanee todos sus documentos a la vez insertando la hoja divisoria entre ellos. +autoSplitPDF.selectText.3=Cargue un único archivo PDF escaneado de gran tamaño y deje que Stirling PDF se encargue del resto. +autoSplitPDF.selectText.4=Las páginas divisorias son automáticamente detectadas y eliminadas, garantizando un buen documento final. +autoSplitPDF.formPrompt=Entregar PDF conteniendo divisores de página de Stirling-PDF: +autoSplitPDF.dividerDownload1=Descargar 'Auto Splitter Divider (mínima).pdf' +autoSplitPDF.dividerDownload2=Descargar 'Auto Splitter Divider (con instrucciones).pdf' +autoSplitPDF.submit=Entregar #pipeline @@ -455,13 +455,13 @@ scalePages.submit=Entregar #certSign certSign.title=Firma de certificado -certSign.header=Firmar un PDF con su certificado (Trabajo en progreso) +certSign.header=Firmar un PDF con su certificado (en desarrollo) certSign.selectPDF=Seleccione un archivo PDF para firmar: certSign.selectKey=Seleccione su archivo de clave privada (formato PKCS#8, podría ser .pem o .der): certSign.selectCert=Seleccione su archivo de certificado (formato X.509, podría ser .pem o .der): certSign.selectP12=Seleccione su archivo de almacén de claves PKCS#12 (.p12 o .pfx) (Opcional, si se proporciona, debe contener su clave privada y certificado): certSign.certType=Tipo de certificado -certSign.password=Ingrese su almacén de claves o contraseña de clave privada (si corresponde): +certSign.password=Introduzca su almacén de claves o contraseña de clave privada (si corresponde): certSign.showSig=Mostrar firma certSign.reason=Razón certSign.location=Ubicación From b5b4636e569fd0153d697a2249187e1c8136489f Mon Sep 17 00:00:00 2001 From: Anthony Stirling <77850077+Frooodle@users.noreply.github.com> Date: Sat, 29 Jul 2023 13:53:30 +0100 Subject: [PATCH 17/18] changes to script executor and init --- scripts/init.sh | 12 +++++++ .../api/converters/ConvertHtmlToPDF.java | 3 +- .../converters/ConvertOfficeController.java | 7 ++-- .../api/converters/ConvertPDFToPDFA.java | 3 +- .../api/converters/ConvertWebsiteToPDF.java | 3 +- .../api/other/BlankPageController.java | 5 +-- .../api/other/CompressController.java | 3 +- .../other/ExtractImageScansController.java | 3 +- .../controller/api/other/OCRController.java | 11 ++++-- .../api/other/RepairController.java | 3 +- .../api/security/PasswordController.java | 24 ++++++------- .../controller/web/SecurityWebController.java | 2 ++ .../software/SPDF/utils/PDFToFile.java | 4 ++- .../software/SPDF/utils/ProcessExecutor.java | 34 ++++++++++++++++--- 14 files changed, 85 insertions(+), 32 deletions(-) diff --git a/scripts/init.sh b/scripts/init.sh index b45bf45f08..99ff222653 100644 --- a/scripts/init.sh +++ b/scripts/init.sh @@ -5,5 +5,17 @@ echo "Copying original files without overwriting existing files" mkdir -p /usr/share/tesseract-ocr cp -rn /usr/share/tesseract-ocr-original/* /usr/share/tesseract-ocr +# Check if TESSERACT_LANGS environment variable is set and is not empty +if [[ -n "$TESSERACT_LANGS" ]]; then + # Convert comma-separated values to a space-separated list + LANGS=$(echo $TESSERACT_LANGS | tr ',' ' ') + + # Install each language pack + for LANG in $LANGS; do + apt-get install -y "tesseract-ocr-$LANG" + done +fi + + # Run the main command exec "$@" \ No newline at end of file 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 2d792ee3db..a5878b04b0 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 @@ -21,6 +21,7 @@ import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.tags.Tag; import stirling.software.SPDF.utils.GeneralUtils; import stirling.software.SPDF.utils.ProcessExecutor; +import stirling.software.SPDF.utils.ProcessExecutor.ProcessExecutorResult; import stirling.software.SPDF.utils.WebResponseUtils; @RestController @@ -59,7 +60,7 @@ public class ConvertHtmlToPDF { command.add("weasyprint"); command.add(tempInputFile.toString()); command.add(tempOutputFile.toString()); - int returnCode = 0; + ProcessExecutorResult returnCode; if (originalFilename.endsWith(".zip")) { returnCode = ProcessExecutor.getInstance(ProcessExecutor.Processes.WEASYPRINT) .runCommandWithOutputHandling(command, tempInputFile.getParent().toFile()); diff --git a/src/main/java/stirling/software/SPDF/controller/api/converters/ConvertOfficeController.java b/src/main/java/stirling/software/SPDF/controller/api/converters/ConvertOfficeController.java index 79be9e2e12..3b9f278f79 100644 --- a/src/main/java/stirling/software/SPDF/controller/api/converters/ConvertOfficeController.java +++ b/src/main/java/stirling/software/SPDF/controller/api/converters/ConvertOfficeController.java @@ -19,6 +19,7 @@ import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.Parameter; import io.swagger.v3.oas.annotations.tags.Tag; import stirling.software.SPDF.utils.ProcessExecutor; +import stirling.software.SPDF.utils.ProcessExecutor.ProcessExecutorResult; import stirling.software.SPDF.utils.WebResponseUtils; @RestController @@ -41,7 +42,7 @@ public class ConvertOfficeController { // Run the LibreOffice command List command = new ArrayList<>(Arrays.asList("unoconv", "-vvv", "-f", "pdf", "-o", tempOutputFile.toString(), tempInputFile.toString())); - int returnCode = ProcessExecutor.getInstance(ProcessExecutor.Processes.LIBRE_OFFICE).runCommandWithOutputHandling(command); + ProcessExecutorResult returnCode = ProcessExecutor.getInstance(ProcessExecutor.Processes.LIBRE_OFFICE).runCommandWithOutputHandling(command); // Read the converted PDF file byte[] pdfBytes = Files.readAllBytes(tempOutputFile); @@ -62,10 +63,10 @@ public class ConvertOfficeController { summary = "Convert a file to a PDF using LibreOffice", description = "This endpoint converts a given file to a PDF using LibreOffice API Input:Any Output:PDF Type:SISO" ) - public ResponseEntity processPdfWithOCR( + public ResponseEntity processFileToPDF( @RequestPart(required = true, value = "fileInput") @Parameter( - description = "The input file to be converted to a PDF file using OCR", + description = "The input file to be converted to a PDF file using LibreOffice", required = true ) MultipartFile inputFile diff --git a/src/main/java/stirling/software/SPDF/controller/api/converters/ConvertPDFToPDFA.java b/src/main/java/stirling/software/SPDF/controller/api/converters/ConvertPDFToPDFA.java index 4ff2b4f259..6a99090bbf 100644 --- a/src/main/java/stirling/software/SPDF/controller/api/converters/ConvertPDFToPDFA.java +++ b/src/main/java/stirling/software/SPDF/controller/api/converters/ConvertPDFToPDFA.java @@ -16,6 +16,7 @@ import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.Parameter; import io.swagger.v3.oas.annotations.tags.Tag; import stirling.software.SPDF.utils.ProcessExecutor; +import stirling.software.SPDF.utils.ProcessExecutor.ProcessExecutorResult; import stirling.software.SPDF.utils.WebResponseUtils; @RestController @@ -49,7 +50,7 @@ public class ConvertPDFToPDFA { command.add(tempInputFile.toString()); command.add(tempOutputFile.toString()); - int returnCode = ProcessExecutor.getInstance(ProcessExecutor.Processes.OCR_MY_PDF).runCommandWithOutputHandling(command); + ProcessExecutorResult returnCode = ProcessExecutor.getInstance(ProcessExecutor.Processes.OCR_MY_PDF).runCommandWithOutputHandling(command); // Read the optimized PDF file byte[] pdfBytes = Files.readAllBytes(tempOutputFile); diff --git a/src/main/java/stirling/software/SPDF/controller/api/converters/ConvertWebsiteToPDF.java b/src/main/java/stirling/software/SPDF/controller/api/converters/ConvertWebsiteToPDF.java index 9167a6e43e..57cf8f7ff0 100644 --- a/src/main/java/stirling/software/SPDF/controller/api/converters/ConvertWebsiteToPDF.java +++ b/src/main/java/stirling/software/SPDF/controller/api/converters/ConvertWebsiteToPDF.java @@ -17,6 +17,7 @@ import io.swagger.v3.oas.annotations.Parameter; import io.swagger.v3.oas.annotations.tags.Tag; import stirling.software.SPDF.utils.GeneralUtils; import stirling.software.SPDF.utils.ProcessExecutor; +import stirling.software.SPDF.utils.ProcessExecutor.ProcessExecutorResult; import stirling.software.SPDF.utils.WebResponseUtils; @RestController @@ -49,7 +50,7 @@ public class ConvertWebsiteToPDF { command.add(URL); command.add(tempOutputFile.toString()); - int returnCode = ProcessExecutor.getInstance(ProcessExecutor.Processes.WEASYPRINT).runCommandWithOutputHandling(command); + ProcessExecutorResult returnCode = ProcessExecutor.getInstance(ProcessExecutor.Processes.WEASYPRINT).runCommandWithOutputHandling(command); // Read the optimized PDF file pdfBytes = Files.readAllBytes(tempOutputFile); diff --git a/src/main/java/stirling/software/SPDF/controller/api/other/BlankPageController.java b/src/main/java/stirling/software/SPDF/controller/api/other/BlankPageController.java index 6ed76edb34..4f505b7389 100644 --- a/src/main/java/stirling/software/SPDF/controller/api/other/BlankPageController.java +++ b/src/main/java/stirling/software/SPDF/controller/api/other/BlankPageController.java @@ -31,6 +31,7 @@ import io.swagger.v3.oas.annotations.Parameter; import io.swagger.v3.oas.annotations.tags.Tag; 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 @@ -86,10 +87,10 @@ public class BlankPageController { List command = new ArrayList<>(Arrays.asList("python3", System.getProperty("user.dir") + "/scripts/detect-blank-pages.py", tempFile.toString() ,"--threshold", String.valueOf(threshold), "--white_percent", String.valueOf(whitePercent))); // Run CLI command - int returnCode = ProcessExecutor.getInstance(ProcessExecutor.Processes.PYTHON_OPENCV).runCommandWithOutputHandling(command); + ProcessExecutorResult returnCode = ProcessExecutor.getInstance(ProcessExecutor.Processes.PYTHON_OPENCV).runCommandWithOutputHandling(command); // does contain data - if (returnCode == 0) { + if (returnCode.getRc() == 0) { System.out.println("page " + pageIndex + " has image which is not blank"); pagesToKeepIndex.add(pageIndex); } else { diff --git a/src/main/java/stirling/software/SPDF/controller/api/other/CompressController.java b/src/main/java/stirling/software/SPDF/controller/api/other/CompressController.java index 42ab6a41b1..381a682158 100644 --- a/src/main/java/stirling/software/SPDF/controller/api/other/CompressController.java +++ b/src/main/java/stirling/software/SPDF/controller/api/other/CompressController.java @@ -34,6 +34,7 @@ import io.swagger.v3.oas.annotations.media.Schema; import io.swagger.v3.oas.annotations.tags.Tag; import stirling.software.SPDF.utils.GeneralUtils; import stirling.software.SPDF.utils.ProcessExecutor; +import stirling.software.SPDF.utils.ProcessExecutor.ProcessExecutorResult; import stirling.software.SPDF.utils.WebResponseUtils; @RestController @@ -116,7 +117,7 @@ public class CompressController { command.add("-sOutputFile=" + tempOutputFile.toString()); command.add(tempInputFile.toString()); - int returnCode = ProcessExecutor.getInstance(ProcessExecutor.Processes.GHOSTSCRIPT).runCommandWithOutputHandling(command); + ProcessExecutorResult returnCode = ProcessExecutor.getInstance(ProcessExecutor.Processes.GHOSTSCRIPT).runCommandWithOutputHandling(command); // Check if file size is within expected size or not auto mode so instantly finish long outputFileSize = Files.size(tempOutputFile); diff --git a/src/main/java/stirling/software/SPDF/controller/api/other/ExtractImageScansController.java b/src/main/java/stirling/software/SPDF/controller/api/other/ExtractImageScansController.java index f9ac676111..55ff446ca0 100644 --- a/src/main/java/stirling/software/SPDF/controller/api/other/ExtractImageScansController.java +++ b/src/main/java/stirling/software/SPDF/controller/api/other/ExtractImageScansController.java @@ -33,6 +33,7 @@ import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.Parameter; import io.swagger.v3.oas.annotations.tags.Tag; import stirling.software.SPDF.utils.ProcessExecutor; +import stirling.software.SPDF.utils.ProcessExecutor.ProcessExecutorResult; import stirling.software.SPDF.utils.WebResponseUtils; @RestController @@ -117,7 +118,7 @@ public class ExtractImageScansController { // Run CLI command - int returnCode = ProcessExecutor.getInstance(ProcessExecutor.Processes.PYTHON_OPENCV).runCommandWithOutputHandling(command); + ProcessExecutorResult returnCode = ProcessExecutor.getInstance(ProcessExecutor.Processes.PYTHON_OPENCV).runCommandWithOutputHandling(command); // Read the output photos in temp directory List tempOutputFiles = Files.list(tempDir).sorted().collect(Collectors.toList()); diff --git a/src/main/java/stirling/software/SPDF/controller/api/other/OCRController.java b/src/main/java/stirling/software/SPDF/controller/api/other/OCRController.java index c3c323f5a9..d6009c8aca 100644 --- a/src/main/java/stirling/software/SPDF/controller/api/other/OCRController.java +++ b/src/main/java/stirling/software/SPDF/controller/api/other/OCRController.java @@ -29,6 +29,7 @@ import io.swagger.v3.oas.annotations.Parameter; import io.swagger.v3.oas.annotations.media.Schema; import io.swagger.v3.oas.annotations.tags.Tag; import stirling.software.SPDF.utils.ProcessExecutor; +import stirling.software.SPDF.utils.ProcessExecutor.ProcessExecutorResult; import stirling.software.SPDF.utils.WebResponseUtils; @RestController @@ -141,8 +142,12 @@ public class OCRController { command.addAll(Arrays.asList("--language", languageOption, tempInputFile.toString(), tempOutputFile.toString())); // Run CLI command - int returnCode = ProcessExecutor.getInstance(ProcessExecutor.Processes.OCR_MY_PDF).runCommandWithOutputHandling(command); - + ProcessExecutorResult result = ProcessExecutor.getInstance(ProcessExecutor.Processes.OCR_MY_PDF).runCommandWithOutputHandling(command); + if(result.getRc() != 0 && result.getMessages().contains("multiprocessing/synchronize.py") && result.getMessages().contains("OSError: [Errno 38] Function not implemented")) { + command.add("--jobs"); + command.add("1"); + result = ProcessExecutor.getInstance(ProcessExecutor.Processes.OCR_MY_PDF).runCommandWithOutputHandling(command); + } @@ -153,7 +158,7 @@ public class OCRController { List gsCommand = Arrays.asList("gs", "-sDEVICE=pdfwrite", "-dFILTERIMAGE", "-o", tempPdfWithoutImages.toString(), tempOutputFile.toString()); - int gsReturnCode = ProcessExecutor.getInstance(ProcessExecutor.Processes.GHOSTSCRIPT).runCommandWithOutputHandling(gsCommand); + ProcessExecutor.getInstance(ProcessExecutor.Processes.GHOSTSCRIPT).runCommandWithOutputHandling(gsCommand); tempOutputFile = tempPdfWithoutImages; } // Read the OCR processed PDF file diff --git a/src/main/java/stirling/software/SPDF/controller/api/other/RepairController.java b/src/main/java/stirling/software/SPDF/controller/api/other/RepairController.java index 536f8c89b8..52644080c6 100644 --- a/src/main/java/stirling/software/SPDF/controller/api/other/RepairController.java +++ b/src/main/java/stirling/software/SPDF/controller/api/other/RepairController.java @@ -18,6 +18,7 @@ import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.Parameter; import io.swagger.v3.oas.annotations.tags.Tag; import stirling.software.SPDF.utils.ProcessExecutor; +import stirling.software.SPDF.utils.ProcessExecutor.ProcessExecutorResult; import stirling.software.SPDF.utils.WebResponseUtils; @RestController @@ -51,7 +52,7 @@ public class RepairController { command.add(tempInputFile.toString()); - int returnCode = ProcessExecutor.getInstance(ProcessExecutor.Processes.GHOSTSCRIPT).runCommandWithOutputHandling(command); + ProcessExecutorResult returnCode = ProcessExecutor.getInstance(ProcessExecutor.Processes.GHOSTSCRIPT).runCommandWithOutputHandling(command); // Read the optimized PDF file byte[] pdfBytes = Files.readAllBytes(tempOutputFile); diff --git a/src/main/java/stirling/software/SPDF/controller/api/security/PasswordController.java b/src/main/java/stirling/software/SPDF/controller/api/security/PasswordController.java index fa6df6ef97..b3afecf151 100644 --- a/src/main/java/stirling/software/SPDF/controller/api/security/PasswordController.java +++ b/src/main/java/stirling/software/SPDF/controller/api/security/PasswordController.java @@ -35,7 +35,7 @@ public class PasswordController { @RequestPart(required = true, value = "fileInput") @Parameter(description = "The input PDF file from which the password should be removed", required = true) MultipartFile fileInput, - @RequestParam(name = "password") + @RequestPart(name = "password") @Parameter(description = "The password of the PDF file", required = true) String password) throws IOException { PDDocument document = PDDocument.load(fileInput.getBytes(), password); @@ -52,37 +52,37 @@ public class PasswordController { @RequestPart(required = true, value = "fileInput") @Parameter(description = "The input PDF file to which the password should be added", required = true) MultipartFile fileInput, - @RequestParam(defaultValue = "", name = "ownerPassword") + @RequestPart(value = "", name = "ownerPassword") @Parameter(description = "The owner password to be added to the PDF file (Restricts what can be done with the document once it is opened)") String ownerPassword, - @RequestParam(defaultValue = "", name = "password") + @RequestPart( name = "password") @Parameter(description = "The password to be added to the PDF file (Restricts the opening of the document itself.)") String password, - @RequestParam(defaultValue = "128", name = "keyLength") + @RequestPart( name = "keyLength") @Parameter(description = "The length of the encryption key", schema = @Schema(allowableValues = {"40", "128", "256"})) int keyLength, - @RequestParam(defaultValue = "false", name = "canAssembleDocument") + @RequestPart( name = "canAssembleDocument") @Parameter(description = "Whether the document assembly is allowed", example = "false") boolean canAssembleDocument, - @RequestParam(defaultValue = "false", name = "canExtractContent") + @RequestPart( name = "canExtractContent") @Parameter(description = "Whether content extraction for accessibility is allowed", example = "false") boolean canExtractContent, - @RequestParam(defaultValue = "false", name = "canExtractForAccessibility") + @RequestPart( name = "canExtractForAccessibility") @Parameter(description = "Whether content extraction for accessibility is allowed", example = "false") boolean canExtractForAccessibility, - @RequestParam(defaultValue = "false", name = "canFillInForm") + @RequestPart( name = "canFillInForm") @Parameter(description = "Whether form filling is allowed", example = "false") boolean canFillInForm, - @RequestParam(defaultValue = "false", name = "canModify") + @RequestPart( name = "canModify") @Parameter(description = "Whether the document modification is allowed", example = "false") boolean canModify, - @RequestParam(defaultValue = "false", name = "canModifyAnnotations") + @RequestPart( name = "canModifyAnnotations") @Parameter(description = "Whether modification of annotations is allowed", example = "false") boolean canModifyAnnotations, - @RequestParam(defaultValue = "false", name = "canPrint") + @RequestPart(name = "canPrint") @Parameter(description = "Whether printing of the document is allowed", example = "false") boolean canPrint, - @RequestParam(defaultValue = "false", name = "canPrintFaithful") + @RequestPart( name = "canPrintFaithful") @Parameter(description = "Whether faithful printing is allowed", example = "false") boolean canPrintFaithful ) throws IOException { diff --git a/src/main/java/stirling/software/SPDF/controller/web/SecurityWebController.java b/src/main/java/stirling/software/SPDF/controller/web/SecurityWebController.java index fe176f6289..66de400e5a 100644 --- a/src/main/java/stirling/software/SPDF/controller/web/SecurityWebController.java +++ b/src/main/java/stirling/software/SPDF/controller/web/SecurityWebController.java @@ -10,6 +10,8 @@ import io.swagger.v3.oas.annotations.tags.Tag; @Controller @Tag(name = "Security", description = "Security APIs") public class SecurityWebController { + + @GetMapping("/add-password") @Hidden public String addPasswordForm(Model model) { diff --git a/src/main/java/stirling/software/SPDF/utils/PDFToFile.java b/src/main/java/stirling/software/SPDF/utils/PDFToFile.java index ffe1d93d63..af658f7917 100644 --- a/src/main/java/stirling/software/SPDF/utils/PDFToFile.java +++ b/src/main/java/stirling/software/SPDF/utils/PDFToFile.java @@ -20,6 +20,8 @@ import org.springframework.http.MediaType; import org.springframework.http.ResponseEntity; import org.springframework.web.multipart.MultipartFile; +import stirling.software.SPDF.utils.ProcessExecutor.ProcessExecutorResult; + public class PDFToFile { public ResponseEntity processPdfToOfficeFormat(MultipartFile inputFile, String outputFormat, String libreOfficeFilter) throws IOException, InterruptedException { @@ -53,7 +55,7 @@ public class PDFToFile { // Run the LibreOffice command List command = new ArrayList<>( Arrays.asList("soffice", "--infilter=" + libreOfficeFilter, "--convert-to", outputFormat, "--outdir", tempOutputDir.toString(), tempInputFile.toString())); - int returnCode = ProcessExecutor.getInstance(ProcessExecutor.Processes.LIBRE_OFFICE).runCommandWithOutputHandling(command); + ProcessExecutorResult returnCode = ProcessExecutor.getInstance(ProcessExecutor.Processes.LIBRE_OFFICE).runCommandWithOutputHandling(command); // Get output files List outputFiles = Arrays.asList(tempOutputDir.toFile().listFiles()); diff --git a/src/main/java/stirling/software/SPDF/utils/ProcessExecutor.java b/src/main/java/stirling/software/SPDF/utils/ProcessExecutor.java index f2a7ed55e6..fe5c67170a 100644 --- a/src/main/java/stirling/software/SPDF/utils/ProcessExecutor.java +++ b/src/main/java/stirling/software/SPDF/utils/ProcessExecutor.java @@ -37,11 +37,12 @@ public class ProcessExecutor { private ProcessExecutor(int semaphoreLimit) { this.semaphore = new Semaphore(semaphoreLimit); } - public int runCommandWithOutputHandling(List command) throws IOException, InterruptedException { + public ProcessExecutorResult runCommandWithOutputHandling(List command) throws IOException, InterruptedException { return runCommandWithOutputHandling(command, null); } - public int runCommandWithOutputHandling(List command, File workingDirectory) throws IOException, InterruptedException { + public ProcessExecutorResult runCommandWithOutputHandling(List command, File workingDirectory) throws IOException, InterruptedException { int exitCode = 1; + String messages = ""; semaphore.acquire(); try { @@ -89,14 +90,16 @@ public class ProcessExecutor { // Wait for the reader threads to finish errorReaderThread.join(); outputReaderThread.join(); - + if (outputLines.size() > 0) { String outputMessage = String.join("\n", outputLines); + messages += outputMessage; System.out.println("Command output:\n" + outputMessage); } if (errorLines.size() > 0) { String errorMessage = String.join("\n", errorLines); + messages += errorMessage; System.out.println("Command error output:\n" + errorMessage); if (exitCode != 0) { throw new IOException("Command process failed with exit code " + exitCode + ". Error message: " + errorMessage); @@ -105,7 +108,28 @@ public class ProcessExecutor { } finally { semaphore.release(); } - return exitCode; + return new ProcessExecutorResult(exitCode, messages); + } + public class ProcessExecutorResult{ + int rc; + String messages; + public ProcessExecutorResult(int rc, String messages) { + this.rc = rc; + this.messages = messages; + } + public int getRc() { + return rc; + } + public void setRc(int rc) { + this.rc = rc; + } + public String getMessages() { + return messages; + } + public void setMessages(String messages) { + this.messages = messages; + } + + } - } From 0732ffa76e6c2a2af8287918f953acdd4c5fa4f9 Mon Sep 17 00:00:00 2001 From: Anthony Stirling <77850077+Frooodle@users.noreply.github.com> Date: Sat, 29 Jul 2023 14:31:09 +0100 Subject: [PATCH 18/18] Update README.md --- README.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/README.md b/README.md index 8e69fb9126..f88f9873c5 100644 --- a/README.md +++ b/README.md @@ -8,6 +8,8 @@ [![Paypal Donate](https://img.shields.io/badge/Paypal%20Donate-yellow?style=flat&logo=paypal)](https://www.paypal.com/paypalme/froodleplex) [![Github Sponser](https://img.shields.io/badge/Github%20Sponsor-yellow?style=flat&logo=github)](https://github.com/sponsors/Frooodle) +[![Deploy to DO](https://www.deploytodo.com/do-btn-blue.svg)](https://cloud.digitalocean.com/apps/new?repo=https://github.com/Frooodle/Stirling-PDF/tree/digitalOcean&refcode=c3210994b1af) + This is a powerful locally hosted web based PDF manipulation tool using docker that allows you to perform various operations on PDF files, such as splitting merging, converting, reorganizing, adding images, rotating, compressing, and more. This locally hosted web application started as a 100% ChatGPT-made application and has evolved to include a wide range of features to handle all your PDF needs. Stirling PDF makes no outbound calls for any record keeping or tracking.