diff --git a/Dockerfile-lite b/Dockerfile-lite index eb92e487..d3968a2a 100644 --- a/Dockerfile-lite +++ b/Dockerfile-lite @@ -10,12 +10,6 @@ RUN apt-get update && \ unoconv && \ rm -rf /var/lib/apt/lists/* -#Install fonts -RUN mkdir /usr/share/fonts/opentype/noto/ -COPY src/main/resources/static/fonts/*.ttf /usr/share/fonts/opentype/noto/ -COPY src/main/resources/static/fonts/*.otf /usr/share/fonts/opentype/noto/ -RUN fc-cache -f -v - # Copy the application JAR file COPY build/libs/*.jar app.jar diff --git a/Endpoint-groups.md b/Endpoint-groups.md index e6401396..9c7f3ae6 100644 --- a/Endpoint-groups.md +++ b/Endpoint-groups.md @@ -3,9 +3,11 @@ | adjust-contrast | ✔️ | | | | | | | | | | ✔️ | | auto-split-pdf | ✔️ | | | | | | | | | ✔️ | | | crop | ✔️ | | | | | | | | | ✔️ | | +| extract-page | ✔️ | | | | | | | | | ✔️ | | | merge-pdfs | ✔️ | | | | | | | | | ✔️ | | | multi-page-layout | ✔️ | | | | | | | | | ✔️ | | | pdf-organizer | ✔️ | | | | | | | | | ✔️ | ✔️ | +| pdf-to-single-page | ✔️ | | | | | | | | | ✔️ | | | remove-pages | ✔️ | | | | | | | | | ✔️ | | | rotate-pdf | ✔️ | | | | | | | | | ✔️ | | | scale-pages | ✔️ | | | | | | | | | ✔️ | | @@ -15,6 +17,7 @@ | pdf-to-html | | ✔️ | | | ✔️ | | | ✔️ | | | | | pdf-to-img | | ✔️ | | | | | | | | ✔️ | | | pdf-to-pdfa | | ✔️ | | | ✔️ | | | | ✔️ | | | +| pdf-to-markdown | | ✔️ | | | | | | | | ✔️ | | | pdf-to-presentation | | ✔️ | | | ✔️ | | | ✔️ | | | | | pdf-to-text | | ✔️ | | | ✔️ | | | ✔️ | | | | | pdf-to-word | | ✔️ | | | ✔️ | | | ✔️ | | | | @@ -34,8 +37,10 @@ | compress-pdf | | | | ✔️ | ✔️ | | | | ✔️ | | | | extract-image-scans | | | | ✔️ | ✔️ | ✔️ | ✔️ | | | | | | extract-images | | | | ✔️ | | | | | | ✔️ | | -| flatten | | | | ✔️ | | | | | | | | +| flatten | | | | ✔️ | | | | | | | ✔️ | +| get-info-on-pdf | | | | ✔️ | | | | | | ✔️ | | | ocr-pdf | | | | ✔️ | ✔️ | | | | ✔️ | | | | remove-blanks | | | | ✔️ | ✔️ | ✔️ | ✔️ | | | | | | repair | | | | ✔️ | ✔️ | | | ✔️ | | | | +| show-javascript | | | | ✔️ | | | | | | | ✔️ | | sign | | | | ✔️ | | | | | | | ✔️ | \ No newline at end of file diff --git a/README.md b/README.md index 8e69fb91..9b7365f3 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. @@ -176,6 +178,7 @@ Using the same method you can also change - Disable and remove endpoints and functionality from Stirling-PDF. Currently the endpoints ENDPOINTS_TO_REMOVE and GROUPS_TO_REMOVE can include comma seperated lists of endpoints and groups to disable as example ENDPOINTS_TO_REMOVE=img-to-pdf,remove-pages would disable both image to pdf and remove pages, GROUPS_TO_REMOVE=LibreOffice Would disable all things that use LibreOffice. You can see a list of all endpoints and groups [here](https://github.com/Frooodle/Stirling-PDF/blob/main/groups.md) - Change the max file size allowed through the server with the environment variable MAX_FILE_SIZE. default 2000MB - Customise static files such as app logo by placing files in the /customFiles/static/ directory. Example to customise app logo is placing a /customFiles/static/favicon.svg to override current SVG. This can be used to change any images/icons/css/fonts/js etc in Stirling-PDF +- Enable/Disable metric api endpoints with ENABLE_API_METRICS. Default enabled ## API For those wanting to use Stirling-PDFs backend API to link with their own custom scripting to edit PDFs you can view all existing API documentation diff --git a/Version-groups.md b/Version-groups.md index 557cadb2..90020579 100644 --- a/Version-groups.md +++ b/Version-groups.md @@ -15,6 +15,7 @@ Operation | Ultra-Lite | Lite | Full --------------------|------------|------|----- add-page-numbers | ✔️ | ✔️ | ✔️ add-password | ✔️ | ✔️ | ✔️ +add-image | ✔️ | ✔️ | ✔️ add-watermark | ✔️ | ✔️ | ✔️ adjust-contrast | ✔️ | ✔️ | ✔️ auto-split-pdf | ✔️ | ✔️ | ✔️ @@ -24,21 +25,25 @@ crop | ✔️ | ✔️ | ✔️ change-metadata | ✔️ | ✔️ | ✔️ change-permissions | ✔️ | ✔️ | ✔️ compare | ✔️ | ✔️ | ✔️ +extract-page | ✔️ | ✔️ | ✔️ extract-images | ✔️ | ✔️ | ✔️ flatten | ✔️ | ✔️ | ✔️ +get-info-on-pdf | ✔️ | ✔️ | ✔️ img-to-pdf | ✔️ | ✔️ | ✔️ +markdown-to-pdf | ✔️ | ✔️ | ✔️ merge-pdfs | ✔️ | ✔️ | ✔️ multi-page-layout | ✔️ | ✔️ | ✔️ pdf-organizer | ✔️ | ✔️ | ✔️ pdf-to-img | ✔️ | ✔️ | ✔️ +pdf-to-single-page | ✔️ | ✔️ | ✔️ remove-pages | ✔️ | ✔️ | ✔️ remove-password | ✔️ | ✔️ | ✔️ rotate-pdf | ✔️ | ✔️ | ✔️ sanitize-pdf | ✔️ | ✔️ | ✔️ scale-pages | ✔️ | ✔️ | ✔️ sign | ✔️ | ✔️ | ✔️ +show-javascript | ✔️ | ✔️ | ✔️ split-pdfs | ✔️ | ✔️ | ✔️ -add-image | ✔️ | ✔️ | ✔️ file-to-pdf | | ✔️ | ✔️ pdf-to-html | | ✔️ | ✔️ pdf-to-presentation | | ✔️ | ✔️ diff --git a/build.gradle b/build.gradle index 94252116..debc1f9a 100644 --- a/build.gradle +++ b/build.gradle @@ -8,7 +8,7 @@ plugins { } group = 'stirling.software' -version = '0.11.2' +version = '0.12.2' sourceCompatibility = '17' repositories { @@ -61,8 +61,9 @@ dependencies { implementation 'com.itextpdf:itext7-core:7.2.5' implementation 'org.springframework.boot:spring-boot-starter-actuator' implementation 'io.micrometer:micrometer-core' - implementation group: 'com.google.zxing', name: 'core', version: '3.5.1' + // https://mvnrepository.com/artifact/org.commonmark/commonmark + implementation 'org.commonmark:commonmark:0.21.0' developmentOnly("org.springframework.boot:spring-boot-devtools") diff --git a/scripts/init.sh b/scripts/init.sh index b45bf45f..99ff2226 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/config/EndpointConfiguration.java b/src/main/java/stirling/software/SPDF/config/EndpointConfiguration.java index 322de0e2..11f7b8c8 100644 --- a/src/main/java/stirling/software/SPDF/config/EndpointConfiguration.java +++ b/src/main/java/stirling/software/SPDF/config/EndpointConfiguration.java @@ -71,6 +71,8 @@ public class EndpointConfiguration { addEndpointToGroup("PageOps", "adjust-contrast"); addEndpointToGroup("PageOps", "crop"); addEndpointToGroup("PageOps", "auto-split-pdf"); + addEndpointToGroup("PageOps", "extract-page"); + addEndpointToGroup("PageOps", "pdf-to-single-page"); // Adding endpoints to "Convert" group addEndpointToGroup("Convert", "pdf-to-img"); @@ -85,6 +87,7 @@ public class EndpointConfiguration { addEndpointToGroup("Convert", "pdf-to-xml"); addEndpointToGroup("Convert", "html-to-pdf"); addEndpointToGroup("Convert", "url-to-pdf"); + addEndpointToGroup("Convert", "markdown-to-pdf"); // Adding endpoints to "Security" group addEndpointToGroup("Security", "add-password"); @@ -94,7 +97,7 @@ public class EndpointConfiguration { addEndpointToGroup("Security", "cert-sign"); addEndpointToGroup("Security", "sanitize-pdf"); - + // Adding endpoints to "Other" group addEndpointToGroup("Other", "ocr-pdf"); addEndpointToGroup("Other", "add-image"); @@ -109,7 +112,8 @@ public class EndpointConfiguration { addEndpointToGroup("Other", "compare"); addEndpointToGroup("Other", "add-page-numbers"); addEndpointToGroup("Other", "auto-rename"); - + addEndpointToGroup("Other", "get-info-on-pdf"); + addEndpointToGroup("Other", "show-javascript"); @@ -180,6 +184,11 @@ public class EndpointConfiguration { addEndpointToGroup("Java", "auto-split-pdf"); addEndpointToGroup("Java", "sanitize-pdf"); addEndpointToGroup("Java", "crop"); + addEndpointToGroup("Java", "get-info-on-pdf"); + addEndpointToGroup("Java", "extract-page"); + addEndpointToGroup("Java", "pdf-to-single-page"); + addEndpointToGroup("Java", "markdown-to-pdf"); + addEndpointToGroup("Java", "show-javascript"); //Javascript addEndpointToGroup("Javascript", "pdf-organizer"); diff --git a/src/main/java/stirling/software/SPDF/controller/api/ToSinglePageController.java b/src/main/java/stirling/software/SPDF/controller/api/ToSinglePageController.java new file mode 100644 index 00000000..2c249b85 --- /dev/null +++ b/src/main/java/stirling/software/SPDF/controller/api/ToSinglePageController.java @@ -0,0 +1,86 @@ +package stirling.software.SPDF.controller.api; + +import java.io.IOException; +import java.io.ByteArrayOutputStream; +import com.itextpdf.kernel.pdf.*; +import com.itextpdf.kernel.pdf.xobject.PdfFormXObject; +import com.itextpdf.kernel.geom.PageSize; +import com.itextpdf.kernel.geom.Rectangle; +import com.itextpdf.layout.Document; +import com.itextpdf.layout.element.Image; +import java.util.ArrayList; +import java.util.List; + +import org.apache.pdfbox.pdmodel.PDDocument; +import org.apache.pdfbox.pdmodel.PDPage; +import org.apache.pdfbox.pdmodel.PDPageTree; +import org.apache.pdfbox.pdmodel.common.PDRectangle; +import org.apache.pdfbox.pdmodel.graphics.form.PDFormXObject; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.http.ResponseEntity; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestPart; +import org.springframework.web.bind.annotation.RestController; +import org.springframework.web.multipart.MultipartFile; + +import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.Parameter; +import io.swagger.v3.oas.annotations.tags.Tag; +import stirling.software.SPDF.utils.WebResponseUtils; +import org.apache.pdfbox.pdmodel.*; +import org.apache.pdfbox.multipdf.PDFMergerUtility; +@RestController +@Tag(name = "General", description = "General APIs") +public class ToSinglePageController { + + private static final Logger logger = LoggerFactory.getLogger(ToSinglePageController.class); + + + @PostMapping(consumes = "multipart/form-data", value = "/pdf-to-single-page") + @Operation( + summary = "Convert a multi-page PDF into a single long page PDF", + description = "This endpoint converts a multi-page PDF document into a single paged PDF document. The width of the single page will be same as the input's width, but the height will be the sum of all the pages' heights. Input:PDF Output:PDF Type:SISO" + ) + public ResponseEntity pdfToSinglePage( + @RequestPart(required = true, value = "fileInput") + @Parameter(description = "The input multi-page PDF file to be converted into a single page", required = true) + MultipartFile file) throws IOException { + + PdfReader reader = new PdfReader(file.getInputStream()); + PdfDocument sourceDocument = new PdfDocument(reader); + + float totalHeight = 0; + float width = 0; + + for (int i = 1; i <= sourceDocument.getNumberOfPages(); i++) { + Rectangle pageSize = sourceDocument.getPage(i).getPageSize(); + totalHeight += pageSize.getHeight(); + if(width < pageSize.getWidth()) + width = pageSize.getWidth(); + } + + ByteArrayOutputStream baos = new ByteArrayOutputStream(); + PdfWriter writer = new PdfWriter(baos); + PdfDocument newDocument = new PdfDocument(writer); + PageSize newPageSize = new PageSize(width, totalHeight); + newDocument.addNewPage(newPageSize); + + Document layoutDoc = new Document(newDocument); + float yOffset = totalHeight; + + for (int i = 1; i <= sourceDocument.getNumberOfPages(); i++) { + PdfFormXObject pageCopy = sourceDocument.getPage(i).copyAsFormXObject(newDocument); + Image copiedPage = new Image(pageCopy); + copiedPage.setFixedPosition(0, yOffset - sourceDocument.getPage(i).getPageSize().getHeight()); + yOffset -= sourceDocument.getPage(i).getPageSize().getHeight(); + layoutDoc.add(copiedPage); + } + + layoutDoc.close(); + sourceDocument.close(); + + byte[] result = baos.toByteArray(); + return WebResponseUtils.bytesToWebResponse(result, file.getOriginalFilename().replaceFirst("[.][^.]+$", "") + "_singlePage.pdf"); + } +} \ No newline at end of file diff --git a/src/main/java/stirling/software/SPDF/controller/api/converters/ConvertEpubToPdf.java b/src/main/java/stirling/software/SPDF/controller/api/converters/ConvertEpubToPdf.java new file mode 100644 index 00000000..6705bee8 --- /dev/null +++ b/src/main/java/stirling/software/SPDF/controller/api/converters/ConvertEpubToPdf.java @@ -0,0 +1,139 @@ +package stirling.software.SPDF.controller.api.converters; + +import java.io.IOException; + +import org.commonmark.node.Node; +import org.commonmark.parser.Parser; +import org.commonmark.renderer.html.HtmlRenderer; +import org.springframework.http.ResponseEntity; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestPart; +import org.springframework.web.bind.annotation.RestController; +import org.springframework.web.multipart.MultipartFile; + +import io.swagger.v3.oas.annotations.Hidden; +import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.tags.Tag; +import stirling.software.SPDF.utils.FileToPdf; +import stirling.software.SPDF.utils.WebResponseUtils; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestPart; +import org.springframework.web.bind.annotation.RestController; +import org.springframework.web.multipart.MultipartFile; +import org.springframework.http.ResponseEntity; + +import io.swagger.v3.oas.annotations.Operation; + +import javax.xml.parsers.DocumentBuilderFactory; +import javax.xml.parsers.DocumentBuilder; +import org.w3c.dom.Document; +import org.w3c.dom.Element; +import org.w3c.dom.NodeList; +import org.xml.sax.InputSource; + +import java.io.ByteArrayOutputStream; +import java.io.IOException; +import java.io.StringReader; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.zip.ZipEntry; +import java.util.zip.ZipInputStream; + +@RestController +@Tag(name = "Convert", description = "Convert APIs") +public class ConvertEpubToPdf { + //TODO + @PostMapping(consumes = "multipart/form-data", value = "/epub-to-single-pdf") + @Hidden + @Operation( + summary = "Convert an EPUB file to a single PDF", + description = "This endpoint takes an EPUB file input and converts it to a single PDF." + ) + public ResponseEntity epubToSinglePdf( + @RequestPart(required = true, value = "fileInput") MultipartFile fileInput) + throws Exception { + + if (fileInput == null) { + throw new IllegalArgumentException("Please provide an EPUB file for conversion."); + } + + String originalFilename = fileInput.getOriginalFilename(); + if (originalFilename == null || !originalFilename.endsWith(".epub")) { + throw new IllegalArgumentException("File must be in .epub format."); + } + + Map epubContents = extractEpubContent(fileInput); + List htmlFilesOrder = getHtmlFilesOrderFromOpf(epubContents); + + List individualPdfs = new ArrayList<>(); + + for (String htmlFile : htmlFilesOrder) { + byte[] htmlContent = epubContents.get(htmlFile); + byte[] pdfBytes = FileToPdf.convertHtmlToPdf(htmlContent, htmlFile.replace(".html", ".pdf")); + individualPdfs.add(pdfBytes); + } + + // Pseudo-code to merge individual PDFs into one. + byte[] mergedPdfBytes = mergeMultiplePdfsIntoOne(individualPdfs); + + return WebResponseUtils.bytesToWebResponse(mergedPdfBytes, originalFilename.replace(".epub", ".pdf")); + } + + // Assuming a pseudo-code function that merges multiple PDFs into one. + private byte[] mergeMultiplePdfsIntoOne(List individualPdfs) { + // You can use a library such as iText or PDFBox to perform the merging here. + // Return the byte[] of the merged PDF. + return null; + } + + private Map extractEpubContent(MultipartFile fileInput) throws IOException { + Map contentMap = new HashMap<>(); + + try (ZipInputStream zis = new ZipInputStream(fileInput.getInputStream())) { + ZipEntry zipEntry = zis.getNextEntry(); + while (zipEntry != null) { + ByteArrayOutputStream baos = new ByteArrayOutputStream(); + byte[] buffer = new byte[1024]; + int read = 0; + while ((read = zis.read(buffer)) != -1) { + baos.write(buffer, 0, read); + } + contentMap.put(zipEntry.getName(), baos.toByteArray()); + zipEntry = zis.getNextEntry(); + } + } + + return contentMap; + } + + private List getHtmlFilesOrderFromOpf(Map epubContents) throws Exception { + String opfContent = new String(epubContents.get("OEBPS/content.opf")); // Adjusting for given path + DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance(); + DocumentBuilder dBuilder = dbFactory.newDocumentBuilder(); + InputSource is = new InputSource(new StringReader(opfContent)); + Document doc = dBuilder.parse(is); + + NodeList itemRefs = doc.getElementsByTagName("itemref"); + List htmlFilesOrder = new ArrayList<>(); + + for (int i = 0; i < itemRefs.getLength(); i++) { + Element itemRef = (Element) itemRefs.item(i); + String idref = itemRef.getAttribute("idref"); + + NodeList items = doc.getElementsByTagName("item"); + for (int j = 0; j < items.getLength(); j++) { + Element item = (Element) items.item(j); + if (idref.equals(item.getAttribute("id"))) { + htmlFilesOrder.add(item.getAttribute("href")); // Fetching the actual href + break; + } + } + } + + return htmlFilesOrder; + } + + +} 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 2d792ee3..e054d7f0 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 @@ -19,8 +19,10 @@ import org.springframework.web.multipart.MultipartFile; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.tags.Tag; +import stirling.software.SPDF.utils.FileToPdf; 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 @@ -43,87 +45,17 @@ public class ConvertHtmlToPDF { String originalFilename = fileInput.getOriginalFilename(); 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 = 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()); - } - } + }byte[] pdfBytes = FileToPdf.convertHtmlToPdf( fileInput.getBytes(), originalFilename); + 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.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/ConvertMarkdownToPdf.java b/src/main/java/stirling/software/SPDF/controller/api/converters/ConvertMarkdownToPdf.java new file mode 100644 index 00000000..c1bc1b73 --- /dev/null +++ b/src/main/java/stirling/software/SPDF/controller/api/converters/ConvertMarkdownToPdf.java @@ -0,0 +1,52 @@ +package stirling.software.SPDF.controller.api.converters; + +import java.io.IOException; + +import org.commonmark.node.Node; +import org.commonmark.parser.Parser; +import org.commonmark.renderer.html.HtmlRenderer; +import org.springframework.http.ResponseEntity; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestPart; +import org.springframework.web.bind.annotation.RestController; +import org.springframework.web.multipart.MultipartFile; + +import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.tags.Tag; +import stirling.software.SPDF.utils.FileToPdf; +import stirling.software.SPDF.utils.WebResponseUtils; + +@RestController +@Tag(name = "Convert", description = "Convert APIs") +public class ConvertMarkdownToPdf { + + @PostMapping(consumes = "multipart/form-data", value = "/markdown-to-pdf") + @Operation( + summary = "Convert a Markdown file to PDF", + description = "This endpoint takes a Markdown file input, converts it to HTML, and then to PDF format." + ) + public ResponseEntity markdownToPdf( + @RequestPart(required = true, value = "fileInput") MultipartFile fileInput) + throws IOException, InterruptedException { + + if (fileInput == null) { + throw new IllegalArgumentException("Please provide a Markdown file for conversion."); + } + + String originalFilename = fileInput.getOriginalFilename(); + if (originalFilename == null || !originalFilename.endsWith(".md")) { + throw new IllegalArgumentException("File must be in .md format."); + } + + // Convert Markdown to HTML using CommonMark + Parser parser = Parser.builder().build(); + Node document = parser.parse(new String(fileInput.getBytes())); + HtmlRenderer renderer = HtmlRenderer.builder().build(); + String htmlContent = renderer.render(document); + + byte[] pdfBytes = FileToPdf.convertHtmlToPdf(htmlContent.getBytes(), "converted.html"); + + String outputFilename = originalFilename.replaceFirst("[.][^.]+$", "") + ".pdf"; // Remove file extension and append .pdf + return WebResponseUtils.bytesToWebResponse(pdfBytes, outputFilename); + } +} 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 79be9e2e..3b9f278f 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 4ff2b4f2..6a99090b 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 9167a6e4..7b8ba3a7 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 @@ -8,6 +8,7 @@ import java.util.List; import org.springframework.http.ResponseEntity; import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.RequestPart; import org.springframework.web.bind.annotation.RestController; import org.springframework.web.multipart.MultipartFile; @@ -17,6 +18,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 @@ -29,7 +31,7 @@ public class ConvertWebsiteToPDF { description = "This endpoint fetches content from a URL and converts it to a PDF format." ) public ResponseEntity urlToPdf( - @RequestPart(required = true, value = "urlInput") + @RequestParam(required = true, value = "urlInput") @Parameter(description = "The input URL to be converted to a PDF file", required = true) String URL) throws IOException, InterruptedException { @@ -49,7 +51,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 6ed76edb..4f505b73 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 42ab6a41..381a6821 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 f9ac6761..55ff446c 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 c3c323f5..d6009c8a 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 536f8c89..52644080 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/other/ShowJavascript.java b/src/main/java/stirling/software/SPDF/controller/api/other/ShowJavascript.java new file mode 100644 index 00000000..49ce28c9 --- /dev/null +++ b/src/main/java/stirling/software/SPDF/controller/api/other/ShowJavascript.java @@ -0,0 +1,141 @@ +package stirling.software.SPDF.controller.api.other; + +import java.io.IOException; +import java.util.Comparator; +import java.util.List; +import java.util.stream.Collectors; +import java.util.stream.Stream; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.http.HttpStatus; +import org.springframework.http.ResponseEntity; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.bind.annotation.RequestPart; +import org.springframework.web.bind.annotation.RestController; +import org.springframework.web.multipart.MultipartFile; + +import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.Parameter; +import io.swagger.v3.oas.annotations.tags.Tag; +import stirling.software.SPDF.utils.GeneralUtils; +import stirling.software.SPDF.utils.PdfUtils; +import stirling.software.SPDF.utils.WebResponseUtils; +import org.apache.pdfbox.pdmodel.*; +import org.apache.pdfbox.pdmodel.common.*; +import org.apache.pdfbox.pdmodel.PDPageContentStream.*; +import org.springframework.web.bind.annotation.*; +import org.springframework.http.*; +import org.springframework.web.multipart.MultipartFile; +import io.swagger.v3.oas.annotations.*; +import io.swagger.v3.oas.annotations.media.*; +import io.swagger.v3.oas.annotations.parameters.*; +import org.apache.pdfbox.pdmodel.font.PDType1Font; +import org.apache.pdfbox.text.TextPosition; +import org.apache.tomcat.util.http.ResponseUtil; +import java.io.ByteArrayInputStream; +import java.io.ByteArrayOutputStream; +import java.io.IOException; +import java.net.URLEncoder; +import java.nio.charset.StandardCharsets; +import java.util.List; +import java.util.ArrayList; + +import org.springframework.http.ResponseEntity; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.multipart.MultipartFile; + +import com.fasterxml.jackson.databind.node.ArrayNode; +import com.fasterxml.jackson.databind.node.ObjectNode; +import com.itextpdf.io.font.constants.StandardFonts; +import com.itextpdf.kernel.font.PdfFont; +import com.itextpdf.kernel.font.PdfFontFactory; +import com.itextpdf.kernel.geom.Rectangle; +import com.itextpdf.kernel.pdf.PdfReader; +import com.itextpdf.kernel.pdf.PdfStream; +import com.itextpdf.kernel.pdf.PdfWriter; +import com.itextpdf.kernel.pdf.PdfArray; +import com.itextpdf.kernel.pdf.PdfDictionary; +import com.itextpdf.kernel.pdf.PdfDocument; +import com.itextpdf.kernel.pdf.PdfName; +import com.itextpdf.kernel.pdf.PdfObject; +import com.itextpdf.kernel.pdf.PdfPage; +import com.itextpdf.kernel.pdf.canvas.PdfCanvas; +import com.itextpdf.layout.Canvas; +import com.itextpdf.layout.element.Paragraph; +import com.itextpdf.layout.properties.TextAlignment; + +import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.media.Schema; + +import java.io.*; +import org.apache.pdfbox.pdmodel.*; +import org.apache.pdfbox.text.*; +import org.springframework.web.bind.annotation.*; +import org.springframework.web.multipart.MultipartFile; +import io.swagger.v3.oas.annotations.*; +import io.swagger.v3.oas.annotations.media.Schema; +import org.springframework.http.ResponseEntity; +@RestController +@Tag(name = "Other", description = "Other APIs") +public class ShowJavascript { + + private static final Logger logger = LoggerFactory.getLogger(ShowJavascript.class); + @PostMapping(consumes = "multipart/form-data", value = "/show-javascript") + @Operation(summary = "Extract header from PDF file", description = "This endpoint accepts a PDF file and attempts to extract its title or header based on heuristics. Input:PDF Output:PDF Type:SISO") + public ResponseEntity extractHeader( + @RequestPart(value = "fileInput") @Parameter(description = "The input PDF file from which the javascript is to be extracted.", required = true) MultipartFile inputFile) + throws Exception { + + try ( + PdfDocument itextDoc = new PdfDocument(new PdfReader(inputFile.getInputStream())) + ) { + + String name = ""; + String script = ""; + String entryName = "File: "+inputFile.getOriginalFilename() + ", Script: "; + //Javascript + PdfDictionary namesDict = itextDoc.getCatalog().getPdfObject().getAsDictionary(PdfName.Names); + if (namesDict != null) { + PdfDictionary javascriptDict = namesDict.getAsDictionary(PdfName.JavaScript); + if (javascriptDict != null) { + + PdfArray namesArray = javascriptDict.getAsArray(PdfName.Names); + for (int i = 0; i < namesArray.size(); i += 2) { + if(namesArray.getAsString(i) != null) + name = namesArray.getAsString(i).toString(); + + PdfObject jsCode = namesArray.get(i+1); + if (jsCode instanceof PdfStream) { + byte[] jsCodeBytes = ((PdfStream)jsCode).getBytes(); + String jsCodeStr = new String(jsCodeBytes, StandardCharsets.UTF_8); + script = "//" + entryName + name + "\n" +jsCodeStr; + + } else if (jsCode instanceof PdfDictionary) { + // If the JS code is in a dictionary, you'll need to know the key to use. + // Assuming the key is PdfName.JS: + PdfStream jsCodeStream = ((PdfDictionary)jsCode).getAsStream(PdfName.JS); + if (jsCodeStream != null) { + byte[] jsCodeBytes = jsCodeStream.getBytes(); + String jsCodeStr = new String(jsCodeBytes, StandardCharsets.UTF_8); + script = "//" + entryName + name + "\n" +jsCodeStr; + } + } + } + + } + } + if(script.equals("")) { + script = "PDF '" +inputFile.getOriginalFilename() + "' does not contain Javascript"; + } + return WebResponseUtils.bytesToWebResponse(script.getBytes(), name + ".js"); + } + + } + + + + +} diff --git a/src/main/java/stirling/software/SPDF/controller/api/security/GetInfoOnPDF.java b/src/main/java/stirling/software/SPDF/controller/api/security/GetInfoOnPDF.java new file mode 100644 index 00000000..159dd4ab --- /dev/null +++ b/src/main/java/stirling/software/SPDF/controller/api/security/GetInfoOnPDF.java @@ -0,0 +1,779 @@ +package stirling.software.SPDF.controller.api.security; + +import org.apache.pdfbox.cos.COSArray; +import org.apache.pdfbox.cos.COSBase; +import org.apache.pdfbox.cos.COSDictionary; +import org.apache.pdfbox.cos.COSName; +import org.apache.pdfbox.cos.COSString; +import org.apache.pdfbox.pdmodel.PDDocument; +import org.apache.pdfbox.pdmodel.PDDocumentInformation; +import org.apache.pdfbox.pdmodel.PDPage; +import org.apache.pdfbox.pdmodel.common.PDRectangle; +import org.apache.pdfbox.pdmodel.documentinterchange.logicalstructure.PDStructureElement; +import org.apache.pdfbox.pdmodel.documentinterchange.logicalstructure.PDStructureNode; +import org.apache.pdfbox.pdmodel.documentinterchange.logicalstructure.PDStructureTreeRoot; +import org.apache.pdfbox.pdmodel.encryption.PDEncryption; +import org.apache.pdfbox.pdmodel.interactive.form.PDAcroForm; +import org.apache.pdfbox.pdmodel.interactive.form.PDField; + +import com.itextpdf.kernel.pdf.PdfObject; +import com.itextpdf.kernel.pdf.PdfOutline; +import com.itextpdf.forms.PdfAcroForm; +import com.itextpdf.forms.fields.PdfFormField; +import com.itextpdf.kernel.geom.Rectangle; +import com.itextpdf.kernel.pdf.PdfArray; +import com.itextpdf.kernel.pdf.PdfCatalog; +import com.itextpdf.kernel.pdf.PdfDictionary; +import com.itextpdf.kernel.pdf.PdfDocument; +import com.itextpdf.kernel.pdf.PdfDocumentInfo; +import com.itextpdf.kernel.pdf.PdfEncryption; +import com.itextpdf.kernel.pdf.PdfReader; +import com.itextpdf.kernel.pdf.PdfResources; +import com.itextpdf.kernel.pdf.PdfStream; +import com.itextpdf.kernel.pdf.PdfString; +import com.itextpdf.kernel.pdf.PdfName; +import com.itextpdf.kernel.pdf.PdfViewerPreferences; +import com.itextpdf.kernel.pdf.PdfWriter; +import com.itextpdf.kernel.pdf.annot.PdfAnnotation; +import com.itextpdf.kernel.pdf.annot.PdfFileAttachmentAnnotation; +import com.itextpdf.kernel.pdf.annot.PdfLinkAnnotation; +import com.itextpdf.kernel.pdf.annot.PdfWidgetAnnotation; +import com.itextpdf.kernel.pdf.layer.PdfLayer; +import com.itextpdf.kernel.pdf.layer.PdfOCProperties; +import com.itextpdf.kernel.xmp.XMPException; +import com.itextpdf.kernel.xmp.XMPMeta; +import com.itextpdf.kernel.xmp.XMPMetaFactory; +import com.itextpdf.kernel.xmp.options.SerializeOptions; + +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.WebResponseUtils; + +import com.fasterxml.jackson.databind.ObjectMapper; +import com.fasterxml.jackson.databind.node.ArrayNode; +import com.fasterxml.jackson.databind.node.ObjectNode; +import org.apache.pdfbox.text.PDFTextStripper; +import org.springframework.http.MediaType; +import org.springframework.http.ResponseEntity; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestPart; +import org.springframework.web.bind.annotation.RestController; +import org.springframework.web.multipart.MultipartFile; + +import java.io.File; +import java.util.HashMap; +import java.io.FileWriter; +import java.io.IOException; +import java.nio.charset.StandardCharsets; +import java.text.SimpleDateFormat; +import java.util.Calendar; +import java.util.List; +import java.util.Map; +import java.util.Set; +import java.util.HashSet; +@RestController +@Tag(name = "Security", description = "Security APIs") +public class GetInfoOnPDF { + + static ObjectMapper objectMapper = new ObjectMapper(); + + @PostMapping(consumes = "multipart/form-data", value = "/get-info-on-pdf") + @Operation(summary = "Summary here", description = "desc. Input:PDF Output:JSON Type:SISO") + public ResponseEntity getPdfInfo( + @RequestPart(required = true, value = "fileInput") + @Parameter(description = "The input PDF file to get info on", required = true) MultipartFile inputFile) + throws IOException { + + try ( + PDDocument pdfBoxDoc = PDDocument.load(inputFile.getInputStream()); + PdfDocument itextDoc = new PdfDocument(new PdfReader(inputFile.getInputStream())) + ) { + ObjectMapper objectMapper = new ObjectMapper(); + ObjectNode jsonOutput = objectMapper.createObjectNode(); + + // Metadata using PDFBox + PDDocumentInformation info = pdfBoxDoc.getDocumentInformation(); + ObjectNode metadata = objectMapper.createObjectNode(); + ObjectNode basicInfo = objectMapper.createObjectNode(); + ObjectNode docInfoNode = objectMapper.createObjectNode(); + ObjectNode compliancy = objectMapper.createObjectNode(); + ObjectNode encryption = objectMapper.createObjectNode(); + ObjectNode other = objectMapper.createObjectNode(); + + + metadata.put("Title", info.getTitle()); + metadata.put("Author", info.getAuthor()); + metadata.put("Subject", info.getSubject()); + metadata.put("Keywords", info.getKeywords()); + metadata.put("Producer", info.getProducer()); + metadata.put("Creator", info.getCreator()); + metadata.put("CreationDate", formatDate(info.getCreationDate())); + metadata.put("ModificationDate", formatDate(info.getModificationDate())); + jsonOutput.set("Metadata", metadata); + + + + + // Total file size of the PDF + long fileSizeInBytes = inputFile.getSize(); + basicInfo.put("FileSizeInBytes", fileSizeInBytes); + + // Number of words, paragraphs, and images in the entire document + String fullText = new PDFTextStripper().getText(pdfBoxDoc); + String[] words = fullText.split("\\s+"); + int wordCount = words.length; + int paragraphCount = fullText.split("\r\n|\r|\n").length; + basicInfo.put("WordCount", wordCount); + basicInfo.put("ParagraphCount", paragraphCount); + // Number of characters in the entire document (including spaces and special characters) + int charCount = fullText.length(); + basicInfo.put("CharacterCount", charCount); + + + // Initialize the flags and types + boolean hasCompression = false; + String compressionType = "None"; + + // Check for object streams + for (int i = 1; i <= itextDoc.getNumberOfPdfObjects(); i++) { + PdfObject obj = itextDoc.getPdfObject(i); + if (obj != null && obj.isStream() && ((PdfStream) obj).get(PdfName.Type) == PdfName.ObjStm) { + hasCompression = true; + compressionType = "Object Streams"; + break; + } + } + + // If not compressed using object streams, check for compressed Xref tables + if (!hasCompression && itextDoc.getReader().hasRebuiltXref()) { + hasCompression = true; + compressionType = "Compressed Xref or Rebuilt Xref"; + } + basicInfo.put("Compression", hasCompression); + if(hasCompression) + basicInfo.put("CompressionType", compressionType); + + String language = pdfBoxDoc.getDocumentCatalog().getLanguage(); + basicInfo.put("Language", language); + basicInfo.put("Number of pages", pdfBoxDoc.getNumberOfPages()); + + + // Page Mode using iText7 + PdfCatalog catalog = itextDoc.getCatalog(); + PdfName pageMode = catalog.getPdfObject().getAsName(PdfName.PageMode); + + // Document Information using PDFBox + docInfoNode.put("PDF version", pdfBoxDoc.getVersion()); + docInfoNode.put("Trapped", info.getTrapped()); + docInfoNode.put("Page Mode", getPageModeDescription(pageMode));; + + + + + + PdfAcroForm acroForm = PdfAcroForm.getAcroForm(itextDoc, false); + ObjectNode formFieldsNode = objectMapper.createObjectNode(); + if (acroForm != null) { + for (Map.Entry entry : acroForm.getFormFields().entrySet()) { + formFieldsNode.put(entry.getKey(), entry.getValue().getValueAsString()); + } + } + jsonOutput.set("FormFields", formFieldsNode); + + + + + + //embeed files TODO size + ArrayNode embeddedFilesArray = objectMapper.createArrayNode(); + if(itextDoc.getCatalog().getPdfObject().getAsDictionary(PdfName.Names) != null) + { + PdfDictionary embeddedFiles = itextDoc.getCatalog().getPdfObject().getAsDictionary(PdfName.Names) + .getAsDictionary(PdfName.EmbeddedFiles); + if (embeddedFiles != null) { + + PdfArray namesArray = embeddedFiles.getAsArray(PdfName.Names); + if(namesArray != null) { + for (int i = 0; i < namesArray.size(); i += 2) { + ObjectNode embeddedFileNode = objectMapper.createObjectNode(); + embeddedFileNode.put("Name", namesArray.getAsString(i).toString()); + // Add other details if required + embeddedFilesArray.add(embeddedFileNode); + } + } + + } + } + other.set("EmbeddedFiles", embeddedFilesArray); + + //attachments TODO size + ArrayNode attachmentsArray = objectMapper.createArrayNode(); + for (int pageNum = 1; pageNum <= itextDoc.getNumberOfPages(); pageNum++) { + for (PdfAnnotation annotation : itextDoc.getPage(pageNum).getAnnotations()) { + if (annotation instanceof PdfFileAttachmentAnnotation) { + ObjectNode attachmentNode = objectMapper.createObjectNode(); + attachmentNode.put("Name", ((PdfFileAttachmentAnnotation) annotation).getName().toString()); + attachmentNode.put("Description", annotation.getContents().getValue()); + attachmentsArray.add(attachmentNode); + } + } + } + other.set("Attachments", attachmentsArray); + + //Javascript + PdfDictionary namesDict = itextDoc.getCatalog().getPdfObject().getAsDictionary(PdfName.Names); + ArrayNode javascriptArray = objectMapper.createArrayNode(); + if (namesDict != null) { + PdfDictionary javascriptDict = namesDict.getAsDictionary(PdfName.JavaScript); + if (javascriptDict != null) { + + PdfArray namesArray = javascriptDict.getAsArray(PdfName.Names); + for (int i = 0; i < namesArray.size(); i += 2) { + ObjectNode jsNode = objectMapper.createObjectNode(); + if(namesArray.getAsString(i) != null) + jsNode.put("JS Name", namesArray.getAsString(i).toString()); + + // Here we check for a PdfStream object and retrieve the JS code from it + PdfObject jsCode = namesArray.get(i+1); + if (jsCode instanceof PdfStream) { + byte[] jsCodeBytes = ((PdfStream)jsCode).getBytes(); + String jsCodeStr = new String(jsCodeBytes, StandardCharsets.UTF_8); + jsNode.put("JS Script Length", jsCodeStr.length()); + } else if (jsCode instanceof PdfDictionary) { + // If the JS code is in a dictionary, you'll need to know the key to use. + // Assuming the key is PdfName.JS: + PdfStream jsCodeStream = ((PdfDictionary)jsCode).getAsStream(PdfName.JS); + if (jsCodeStream != null) { + byte[] jsCodeBytes = jsCodeStream.getBytes(); + String jsCodeStr = new String(jsCodeBytes, StandardCharsets.UTF_8); + jsNode.put("JS Script Character Length", jsCodeStr.length()); + } + } + + javascriptArray.add(jsNode); + } + + } + } + other.set("JavaScript", javascriptArray); + + //TODO size + PdfOCProperties ocProperties = itextDoc.getCatalog().getOCProperties(false); + ArrayNode layersArray = objectMapper.createArrayNode(); + if (ocProperties != null) { + + for (PdfLayer layer : ocProperties.getLayers()) { + ObjectNode layerNode = objectMapper.createObjectNode(); + layerNode.put("Name", layer.getPdfObject().getAsString(PdfName.Name).toString()); + layersArray.add(layerNode); + } + + } + other.set("Layers", layersArray); + + //TODO Security + + + + + + + // Digital Signatures using iText7 TODO + + + + + PDStructureTreeRoot structureTreeRoot = pdfBoxDoc.getDocumentCatalog().getStructureTreeRoot(); + ArrayNode structureTreeArray; + try { + if(structureTreeRoot != null) { + structureTreeArray = exploreStructureTree(structureTreeRoot.getKids()); + other.set("StructureTree", structureTreeArray); + } + } catch (Exception e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + + + boolean isPdfACompliant = checkOutputIntent(itextDoc, "PDF/A"); + boolean isPdfXCompliant = checkOutputIntent(itextDoc, "PDF/X"); + boolean isPdfECompliant = checkForStandard(itextDoc, "PDF/E"); + boolean isPdfVTCompliant = checkForStandard(itextDoc, "PDF/VT"); + boolean isPdfUACompliant = checkForStandard(itextDoc, "PDF/UA"); + boolean isPdfBCompliant = checkForStandard(itextDoc, "PDF/B"); // If you want to check for PDF/Broadcast, though this isn't an official ISO standard. + boolean isPdfSECCompliant = checkForStandard(itextDoc, "PDF/SEC"); // This might not be effective since PDF/SEC was under development in 2021. + + compliancy.put("IsPDF/ACompliant", isPdfACompliant); + compliancy.put("IsPDF/XCompliant", isPdfXCompliant); + compliancy.put("IsPDF/ECompliant", isPdfECompliant); + compliancy.put("IsPDF/VTCompliant", isPdfVTCompliant); + compliancy.put("IsPDF/UACompliant", isPdfUACompliant); + compliancy.put("IsPDF/BCompliant", isPdfBCompliant); + compliancy.put("IsPDF/SECCompliant", isPdfSECCompliant); + + + + + + ArrayNode bookmarksArray = objectMapper.createArrayNode(); + PdfOutline root = itextDoc.getOutlines(false); + if (root != null) { + for (PdfOutline child : root.getAllChildren()) { + addOutlinesToArray(child, bookmarksArray); + } + } + other.set("Bookmarks/Outline/TOC", bookmarksArray); + + byte[] xmpBytes = itextDoc.getXmpMetadata(); + String xmpString = null; + if (xmpBytes != null) { + try { + XMPMeta xmpMeta = XMPMetaFactory.parseFromBuffer(xmpBytes); + xmpString = new String(XMPMetaFactory.serializeToBuffer(xmpMeta, new SerializeOptions())); + } catch (XMPException e) { + e.printStackTrace(); + } + } + other.put("XMPMetadata", xmpString); + + + + if (pdfBoxDoc.isEncrypted()) { + encryption.put("IsEncrypted", true); + + // Retrieve encryption details using getEncryption() + PDEncryption pdfEncryption = pdfBoxDoc.getEncryption(); + encryption.put("EncryptionAlgorithm", pdfEncryption.getFilter()); + encryption.put("KeyLength", pdfEncryption.getLength()); + encryption.put("Permissions", pdfBoxDoc.getCurrentAccessPermission().toString()); + + // Add other encryption-related properties as needed + } else { + encryption.put("IsEncrypted", false); + } + + + + + ObjectNode pageInfoParent = objectMapper.createObjectNode(); + for (int pageNum = 1; pageNum <= itextDoc.getNumberOfPages(); pageNum++) { + ObjectNode pageInfo = objectMapper.createObjectNode(); + + // Page-level Information + Rectangle pageSize = itextDoc.getPage(pageNum).getPageSize(); + pageInfo.put("Width", pageSize.getWidth()); + pageInfo.put("Height", pageSize.getHeight()); + pageInfo.put("Rotation", itextDoc.getPage(pageNum).getRotation()); + pageInfo.put("Page Orientation", getPageOrientation(pageSize.getWidth(),pageSize.getHeight())); + pageInfo.put("Standard Size", getPageSize(pageSize.getWidth(),pageSize.getHeight())); + + // Boxes + pageInfo.put("MediaBox", itextDoc.getPage(pageNum).getMediaBox().toString()); + pageInfo.put("CropBox", itextDoc.getPage(pageNum).getCropBox().toString()); + pageInfo.put("BleedBox", itextDoc.getPage(pageNum).getBleedBox().toString()); + pageInfo.put("TrimBox", itextDoc.getPage(pageNum).getTrimBox().toString()); + pageInfo.put("ArtBox", itextDoc.getPage(pageNum).getArtBox().toString()); + + // Content Extraction + PDFTextStripper textStripper = new PDFTextStripper(); + textStripper.setStartPage(pageNum -1); + textStripper.setEndPage(pageNum - 1); + String pageText = textStripper.getText(pdfBoxDoc); + + pageInfo.put("Text Characters Count", pageText.length()); // + + // Annotations + List annotations = itextDoc.getPage(pageNum).getAnnotations(); + + int subtypeCount = 0; + int contentsCount = 0; + + for (PdfAnnotation annotation : annotations) { + if(annotation.getSubtype() != null) { + subtypeCount++; // Increase subtype count + } + if(annotation.getContents() != null) { + contentsCount++; // Increase contents count + } + } + + ObjectNode annotationsObject = objectMapper.createObjectNode(); + annotationsObject.put("AnnotationsCount", annotations.size()); + annotationsObject.put("SubtypeCount", subtypeCount); + annotationsObject.put("ContentsCount", contentsCount); + pageInfo.set("Annotations", annotationsObject); + + // Images (simplified) + // This part is non-trivial as images can be embedded in multiple ways in a PDF. + // Here is a basic structure to recognize image XObjects on a page. + ArrayNode imagesArray = objectMapper.createArrayNode(); + PdfResources resources = itextDoc.getPage(pageNum).getResources(); + for (PdfName name : resources.getResourceNames()) { + PdfObject obj = resources.getResource(name); + if (obj instanceof PdfStream) { + PdfStream stream = (PdfStream) obj; + if (PdfName.Image.equals(stream.getAsName(PdfName.Subtype))) { + ObjectNode imageNode = objectMapper.createObjectNode(); + imageNode.put("Width", stream.getAsNumber(PdfName.Width).intValue()); + imageNode.put("Height", stream.getAsNumber(PdfName.Height).intValue()); + PdfObject colorSpace = stream.get(PdfName.ColorSpace); + if (colorSpace != null) { + imageNode.put("ColorSpace", colorSpace.toString()); + } + imagesArray.add(imageNode); + } + } + } + pageInfo.set("Images", imagesArray); + + + // Links + ArrayNode linksArray = objectMapper.createArrayNode(); + Set uniqueURIs = new HashSet<>(); // To store unique URIs + + for (PdfAnnotation annotation : annotations) { + if (annotation instanceof PdfLinkAnnotation) { + PdfLinkAnnotation linkAnnotation = (PdfLinkAnnotation) annotation; + if(linkAnnotation != null && linkAnnotation.getAction() != null) { + String uri = linkAnnotation.getAction().toString(); + uniqueURIs.add(uri); // Add to set to ensure uniqueness + } + } + } + + // Add unique URIs to linksArray + for (String uri : uniqueURIs) { + ObjectNode linkNode = objectMapper.createObjectNode(); + linkNode.put("URI", uri); + linksArray.add(linkNode); + } + pageInfo.set("Links", linksArray); + + // Fonts + ArrayNode fontsArray = objectMapper.createArrayNode(); + PdfDictionary fontDicts = resources.getResource(PdfName.Font); + Set uniqueSubtypes = new HashSet<>(); // To store unique subtypes + + // Map to store unique fonts and their counts + Map uniqueFontsMap = new HashMap<>(); + + if (fontDicts != null) { + for (PdfName key : fontDicts.keySet()) { + ObjectNode fontNode = objectMapper.createObjectNode(); // Create a new font node for each font + PdfDictionary font = fontDicts.getAsDictionary(key); + + boolean isEmbedded = font.containsKey(PdfName.FontFile) || + font.containsKey(PdfName.FontFile2) || + font.containsKey(PdfName.FontFile3); + fontNode.put("IsEmbedded", isEmbedded); + + if (font.containsKey(PdfName.Encoding)) { + String encoding = font.getAsName(PdfName.Encoding).toString(); + fontNode.put("Encoding", encoding); + } + + if (font.getAsString(PdfName.BaseFont) != null) { + fontNode.put("Name", font.getAsString(PdfName.BaseFont).toString()); + } + + String subtype = null; + if (font.containsKey(PdfName.Subtype)) { + subtype = font.getAsName(PdfName.Subtype).toString(); + uniqueSubtypes.add(subtype); // Add to set to ensure uniqueness + } + fontNode.put("Subtype", subtype); + + PdfDictionary fontDescriptor = font.getAsDictionary(PdfName.FontDescriptor); + if (fontDescriptor != null) { + if (fontDescriptor.containsKey(PdfName.ItalicAngle)) { + fontNode.put("ItalicAngle", fontDescriptor.getAsNumber(PdfName.ItalicAngle).floatValue()); + } + + if (fontDescriptor.containsKey(PdfName.Flags)) { + int flags = fontDescriptor.getAsNumber(PdfName.Flags).intValue(); + fontNode.put("IsItalic", (flags & 64) != 0); + fontNode.put("IsBold", (flags & 1 << 16) != 0); + fontNode.put("IsFixedPitch", (flags & 1) != 0); + fontNode.put("IsSerif", (flags & 2) != 0); + fontNode.put("IsSymbolic", (flags & 4) != 0); + fontNode.put("IsScript", (flags & 8) != 0); + fontNode.put("IsNonsymbolic", (flags & 16) != 0); + } + + if (fontDescriptor.containsKey(PdfName.FontFamily)) { + String fontFamily = fontDescriptor.getAsString(PdfName.FontFamily).toString(); + fontNode.put("FontFamily", fontFamily); + } + + if (fontDescriptor.containsKey(PdfName.FontStretch)) { + String fontStretch = fontDescriptor.getAsName(PdfName.FontStretch).toString(); + fontNode.put("FontStretch", fontStretch); + } + + if (fontDescriptor.containsKey(PdfName.FontBBox)) { + PdfArray bbox = fontDescriptor.getAsArray(PdfName.FontBBox); + fontNode.put("FontBoundingBox", bbox.toString()); + } + + if (fontDescriptor.containsKey(PdfName.FontWeight)) { + float fontWeight = fontDescriptor.getAsNumber(PdfName.FontWeight).floatValue(); + fontNode.put("FontWeight", fontWeight); + } + } + + if (font.containsKey(PdfName.ToUnicode)) { + fontNode.put("HasToUnicodeMap", true); + } + + if (fontNode.size() > 0) { + // Create a unique key for this font node based on its attributes + String uniqueKey = fontNode.toString(); + + // Increment count if this font exists, or initialize it if new + if (uniqueFontsMap.containsKey(uniqueKey)) { + ObjectNode existingFontNode = uniqueFontsMap.get(uniqueKey); + int count = existingFontNode.get("Count").asInt() + 1; + existingFontNode.put("Count", count); + } else { + fontNode.put("Count", 1); + uniqueFontsMap.put(uniqueKey, fontNode); + } + } + } + } + + // Add unique font entries to fontsArray + for (ObjectNode uniqueFontNode : uniqueFontsMap.values()) { + fontsArray.add(uniqueFontNode); + } + + pageInfo.set("Fonts", fontsArray); + + + + + // Access resources dictionary + PdfDictionary resourcesDict = itextDoc.getPage(pageNum).getResources().getPdfObject(); + + // Color Spaces & ICC Profiles + ArrayNode colorSpacesArray = objectMapper.createArrayNode(); + PdfDictionary colorSpaces = resourcesDict.getAsDictionary(PdfName.ColorSpace); + if (colorSpaces != null) { + for (PdfName name : colorSpaces.keySet()) { + PdfObject colorSpaceObject = colorSpaces.get(name); + if (colorSpaceObject instanceof PdfArray) { + PdfArray colorSpaceArray = (PdfArray) colorSpaceObject; + if (colorSpaceArray.size() > 1 && colorSpaceArray.get(0) instanceof PdfName && PdfName.ICCBased.equals(colorSpaceArray.get(0))) { + ObjectNode iccProfileNode = objectMapper.createObjectNode(); + PdfStream iccStream = (PdfStream) colorSpaceArray.get(1); + byte[] iccData = iccStream.getBytes(); + // TODO: Further decode and analyze the ICC data if needed + iccProfileNode.put("ICC Profile Length", iccData.length); + colorSpacesArray.add(iccProfileNode); + } + } + } + } + pageInfo.set("Color Spaces & ICC Profiles", colorSpacesArray); + + // Other XObjects + Map xObjectCountMap = new HashMap<>(); // To store the count for each type + PdfDictionary xObjects = resourcesDict.getAsDictionary(PdfName.XObject); + if (xObjects != null) { + for (PdfName name : xObjects.keySet()) { + PdfStream xObjectStream = xObjects.getAsStream(name); + String xObjectType = xObjectStream.getAsName(PdfName.Subtype).toString(); + + // Increment the count for this type in the map + xObjectCountMap.put(xObjectType, xObjectCountMap.getOrDefault(xObjectType, 0) + 1); + } + } + + // Add the count map to pageInfo (or wherever you want to store it) + ObjectNode xObjectCountNode = objectMapper.createObjectNode(); + for (Map.Entry entry : xObjectCountMap.entrySet()) { + xObjectCountNode.put(entry.getKey(), entry.getValue()); + } + pageInfo.set("XObjectCounts", xObjectCountNode); + + + + ArrayNode multimediaArray = objectMapper.createArrayNode(); + for (PdfAnnotation annotation : annotations) { + if (PdfName.RichMedia.equals(annotation.getSubtype())) { + ObjectNode multimediaNode = objectMapper.createObjectNode(); + // Extract details from the dictionary as needed + multimediaArray.add(multimediaNode); + } + } + pageInfo.set("Multimedia", multimediaArray); + + + + pageInfoParent.set("Page " + pageNum, pageInfo); + } + + + jsonOutput.set("BasicInfo", basicInfo); + jsonOutput.set("DocumentInfo", docInfoNode); + jsonOutput.set("Compliancy", compliancy); + jsonOutput.set("Encryption", encryption); + jsonOutput.set("Other", other); + jsonOutput.set("PerPageInfo", pageInfoParent); + + + + // Save JSON to file + String jsonString = objectMapper.writerWithDefaultPrettyPrinter().writeValueAsString(jsonOutput); + + + + return WebResponseUtils.bytesToWebResponse(jsonString.getBytes(StandardCharsets.UTF_8), "response.json", MediaType.APPLICATION_JSON); + + } catch (Exception e) { + e.printStackTrace(); + } + return null; + } + + private static void addOutlinesToArray(PdfOutline outline, ArrayNode arrayNode) { + if (outline == null) return; + ObjectNode outlineNode = objectMapper.createObjectNode(); + outlineNode.put("Title", outline.getTitle()); + // You can add other properties if needed + arrayNode.add(outlineNode); + + for (PdfOutline child : outline.getAllChildren()) { + addOutlinesToArray(child, arrayNode); + } + } + public String getPageOrientation(double width, double height) { + if (width > height) { + return "Landscape"; + } else if (height > width) { + return "Portrait"; + } else { + return "Square"; + } + } + public String getPageSize(double width, double height) { + // Common aspect ratios used for standard paper sizes + double[] aspectRatios = {4.0 / 3.0, 3.0 / 2.0, Math.sqrt(2.0), 16.0 / 9.0}; + + // Check if the page matches any common aspect ratio + for (double aspectRatio : aspectRatios) { + if (isCloseToAspectRatio(width, height, aspectRatio)) { + return "Standard"; + } + } + + // If not a standard aspect ratio, consider it as a custom size + return "Custom"; + } + private boolean isCloseToAspectRatio(double width, double height, double aspectRatio) { + // Calculate the aspect ratio of the page + double pageAspectRatio = width / height; + + // Compare the page aspect ratio with the common aspect ratio within a threshold + return Math.abs(pageAspectRatio - aspectRatio) <= 0.05; + } + + public boolean checkForStandard(PdfDocument document, String standardKeyword) { + // Check Output Intents + boolean foundInOutputIntents = checkOutputIntent(document, standardKeyword); + if (foundInOutputIntents) return true; + + // Check XMP Metadata (rudimentary) + try { + byte[] metadataBytes = document.getXmpMetadata(); + if (metadataBytes != null) { + XMPMeta xmpMeta = XMPMetaFactory.parseFromBuffer(metadataBytes); + String xmpString = xmpMeta.dumpObject(); + if (xmpString.contains(standardKeyword)) { + return true; + } + } + } catch (XMPException e) { + e.printStackTrace(); + } + + return false; + } + + + public boolean checkOutputIntent(PdfDocument document, String standard) { + PdfArray outputIntents = document.getCatalog().getPdfObject().getAsArray(PdfName.OutputIntents); + if (outputIntents != null && !outputIntents.isEmpty()) { + for (int i = 0; i < outputIntents.size(); i++) { + PdfDictionary outputIntentDict = outputIntents.getAsDictionary(i); + if (outputIntentDict != null) { + PdfString s = outputIntentDict.getAsString(PdfName.S); + if (s != null && s.toString().contains(standard)) { + return true; + } + } + } + } + return false; + } + + public ArrayNode exploreStructureTree(List nodes) { + ArrayNode elementsArray = objectMapper.createArrayNode(); + if (nodes != null) { + for (Object obj : nodes) { + if (obj instanceof PDStructureNode) { + PDStructureNode node = (PDStructureNode) obj; + ObjectNode elementNode = objectMapper.createObjectNode(); + + if (node instanceof PDStructureElement) { + PDStructureElement structureElement = (PDStructureElement) node; + elementNode.put("Type", structureElement.getStructureType()); + elementNode.put("Content", getContent(structureElement)); + + // Recursively explore child elements + ArrayNode childElements = exploreStructureTree(structureElement.getKids()); + if (childElements.size() > 0) { + elementNode.set("Children", childElements); + } + } + elementsArray.add(elementNode); + } + } + } + return elementsArray; + } + + + public String getContent(PDStructureElement structureElement) { + StringBuilder contentBuilder = new StringBuilder(); + + for (Object item : structureElement.getKids()) { + if (item instanceof COSString) { + COSString cosString = (COSString) item; + contentBuilder.append(cosString.getString()); + } else if (item instanceof PDStructureElement) { + // For simplicity, we're handling only COSString and PDStructureElement here + // but a more comprehensive method would handle other types too + contentBuilder.append(getContent((PDStructureElement) item)); + } + } + + return contentBuilder.toString(); + } + + + private String formatDate(Calendar calendar) { + if (calendar != null) { + SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); + return sdf.format(calendar.getTime()); + } else { + return null; + } + } + + private String getPageModeDescription(PdfName pageMode) { + return pageMode != null ? pageMode.toString().replaceFirst("/", "") : "Unknown"; + } +} 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 fa6df6ef..909be730 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 @@ -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") + @RequestParam(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") + @RequestParam( name = "password", required = false) @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") + @RequestParam( name = "keyLength", required = false) @Parameter(description = "The length of the encryption key", schema = @Schema(allowableValues = {"40", "128", "256"})) int keyLength, - @RequestParam(defaultValue = "false", name = "canAssembleDocument") + @RequestParam( name = "canAssembleDocument", required = false) @Parameter(description = "Whether the document assembly is allowed", example = "false") boolean canAssembleDocument, - @RequestParam(defaultValue = "false", name = "canExtractContent") + @RequestParam( name = "canExtractContent", required = false) @Parameter(description = "Whether content extraction for accessibility is allowed", example = "false") boolean canExtractContent, - @RequestParam(defaultValue = "false", name = "canExtractForAccessibility") + @RequestParam( name = "canExtractForAccessibility", required = false) @Parameter(description = "Whether content extraction for accessibility is allowed", example = "false") boolean canExtractForAccessibility, - @RequestParam(defaultValue = "false", name = "canFillInForm") + @RequestParam( name = "canFillInForm", required = false) @Parameter(description = "Whether form filling is allowed", example = "false") boolean canFillInForm, - @RequestParam(defaultValue = "false", name = "canModify") + @RequestParam( name = "canModify", required = false) @Parameter(description = "Whether the document modification is allowed", example = "false") boolean canModify, - @RequestParam(defaultValue = "false", name = "canModifyAnnotations") + @RequestParam( name = "canModifyAnnotations", required = false) @Parameter(description = "Whether modification of annotations is allowed", example = "false") boolean canModifyAnnotations, - @RequestParam(defaultValue = "false", name = "canPrint") + @RequestParam(name = "canPrint", required = false) @Parameter(description = "Whether printing of the document is allowed", example = "false") boolean canPrint, - @RequestParam(defaultValue = "false", name = "canPrintFaithful") + @RequestParam( name = "canPrintFaithful", required = false) @Parameter(description = "Whether faithful printing is allowed", example = "false") boolean canPrintFaithful ) throws IOException { diff --git a/src/main/java/stirling/software/SPDF/controller/api/security/SanitizeController.java b/src/main/java/stirling/software/SPDF/controller/api/security/SanitizeController.java index ccc19b09..f03dcec8 100644 --- a/src/main/java/stirling/software/SPDF/controller/api/security/SanitizeController.java +++ b/src/main/java/stirling/software/SPDF/controller/api/security/SanitizeController.java @@ -1,6 +1,7 @@ package stirling.software.SPDF.controller.api.security; import org.apache.pdfbox.cos.COSName; import org.apache.pdfbox.pdmodel.PDDocument; +import org.apache.pdfbox.pdmodel.PDDocumentCatalog; import org.apache.pdfbox.pdmodel.PDPage; import org.apache.pdfbox.pdmodel.PDResources; import org.apache.pdfbox.pdmodel.PDPageTree; @@ -21,7 +22,9 @@ import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.Parameter; import io.swagger.v3.oas.annotations.media.Schema; import stirling.software.SPDF.utils.WebResponseUtils; - +import org.apache.pdfbox.cos.COSDictionary; +import org.apache.pdfbox.cos.COSName; +import org.apache.pdfbox.cos.COSString; import java.io.IOException; import java.io.InputStream; @@ -75,8 +78,24 @@ public class SanitizeController { return WebResponseUtils.pdfDocToWebResponse(document, inputFile.getOriginalFilename().replaceFirst("[.][^.]+$", "") + "_sanitized.pdf"); } } - private void sanitizeJavaScript(PDDocument document) throws IOException { - for (PDPage page : document.getPages()) { + private void sanitizeJavaScript(PDDocument document) throws IOException { + // Get the root dictionary (catalog) of the PDF + PDDocumentCatalog catalog = document.getDocumentCatalog(); + + // Get the Names dictionary + COSDictionary namesDict = (COSDictionary) catalog.getCOSObject().getDictionaryObject(COSName.NAMES); + + if (namesDict != null) { + // Get the JavaScript dictionary + COSDictionary javaScriptDict = (COSDictionary) namesDict.getDictionaryObject(COSName.getPDFName("JavaScript")); + + if (javaScriptDict != null) { + // Remove the JavaScript dictionary + namesDict.removeItem(COSName.getPDFName("JavaScript")); + } + } + + for (PDPage page : document.getPages()) { for (PDAnnotation annotation : page.getAnnotations()) { if (annotation instanceof PDAnnotationWidget) { PDAnnotationWidget widget = (PDAnnotationWidget) annotation; @@ -89,13 +108,28 @@ public class SanitizeController { PDAcroForm acroForm = document.getDocumentCatalog().getAcroForm(); if (acroForm != null) { for (PDField field : acroForm.getFields()) { - if (field.getActions().getF() instanceof PDActionJavaScript) { - field.getActions().setF(null); - } + PDFormFieldAdditionalActions actions = field.getActions(); + if(actions != null) { + if (actions.getC() instanceof PDActionJavaScript) { + actions.setC(null); + } + if (actions.getF() instanceof PDActionJavaScript) { + actions.setF(null); + } + if (actions.getK() instanceof PDActionJavaScript) { + actions.setK(null); + } + if (actions.getV() instanceof PDActionJavaScript) { + actions.setV(null); + } + } } } } - } + } + + + private void sanitizeEmbeddedFiles(PDDocument document) { PDPageTree allPages = document.getPages(); diff --git a/src/main/java/stirling/software/SPDF/controller/api/security/WatermarkController.java b/src/main/java/stirling/software/SPDF/controller/api/security/WatermarkController.java index a8271207..f5655391 100644 --- a/src/main/java/stirling/software/SPDF/controller/api/security/WatermarkController.java +++ b/src/main/java/stirling/software/SPDF/controller/api/security/WatermarkController.java @@ -44,8 +44,8 @@ public class WatermarkController { @Operation(summary = "Add watermark to a PDF file", description = "This endpoint adds a watermark to a given PDF file. Users can specify the watermark type (text or image), rotation, opacity, width spacer, and height spacer. Input:PDF Output:PDF Type:SISO") public ResponseEntity addWatermark( @RequestPart(required = true, value = "fileInput") @Parameter(description = "The input PDF file to add a watermark") MultipartFile pdfFile, - @RequestPart(required = true) @Parameter(description = "The watermark type (text or image)") String watermarkType, - @RequestPart(required = false) @Parameter(description = "The watermark text") String watermarkText, + @RequestParam(required = true) @Parameter(description = "The watermark type (text or image)") String watermarkType, + @RequestParam(required = false) @Parameter(description = "The watermark text") String watermarkText, @RequestPart(required = false) @Parameter(description = "The watermark image") MultipartFile watermarkImage, @RequestParam(defaultValue = "roman", name = "alphabet") @Parameter(description = "The selected alphabet", 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 90429f1a..76e7be8f 100644 --- a/src/main/java/stirling/software/SPDF/controller/web/ConverterWebController.java +++ b/src/main/java/stirling/software/SPDF/controller/web/ConverterWebController.java @@ -25,7 +25,14 @@ public class ConverterWebController { model.addAttribute("currentPage", "html-to-pdf"); return "convert/html-to-pdf"; } - + @GetMapping("/markdown-to-pdf") + @Hidden + public String convertMarkdownToPdfForm(Model model) { + model.addAttribute("currentPage", "markdown-to-pdf"); + return "convert/markdown-to-pdf"; + } + + @GetMapping("/url-to-pdf") @Hidden public String convertURLToPdfForm(Model model) { 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 75d67401..4d6e991a 100644 --- a/src/main/java/stirling/software/SPDF/controller/web/GeneralWebController.java +++ b/src/main/java/stirling/software/SPDF/controller/web/GeneralWebController.java @@ -97,6 +97,20 @@ public class GeneralWebController { return "pdf-organizer"; } + @GetMapping("/extract-page") + @Hidden + public String extractPages(Model model) { + model.addAttribute("currentPage", "extract-page"); + return "extract-page"; + } + + @GetMapping("/pdf-to-single-page") + @Hidden + public String pdfToSinglePage(Model model) { + model.addAttribute("currentPage", "pdf-to-single-page"); + return "pdf-to-single-page"; + } + @GetMapping("/rotate-pdf") @Hidden public String rotatePdfForm(Model model) { diff --git a/src/main/java/stirling/software/SPDF/controller/web/MetricsController.java b/src/main/java/stirling/software/SPDF/controller/web/MetricsController.java index 70235df3..ab18b1b5 100644 --- a/src/main/java/stirling/software/SPDF/controller/web/MetricsController.java +++ b/src/main/java/stirling/software/SPDF/controller/web/MetricsController.java @@ -1,8 +1,16 @@ package stirling.software.SPDF.controller.web; +import java.time.Duration; +import java.time.LocalDateTime; +import java.util.Comparator; import java.util.HashMap; +import java.util.List; import java.util.Map; import java.util.Optional; +import java.util.stream.Collectors; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.http.HttpStatus; +import org.springframework.http.ResponseEntity; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestParam; @@ -14,6 +22,8 @@ import io.micrometer.core.instrument.MeterRegistry; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.Parameter; import io.swagger.v3.oas.annotations.tags.Tag; +import jakarta.annotation.PostConstruct; +import stirling.software.SPDF.config.StartupApplicationListener; @RestController @RequestMapping("/api/v1") @@ -22,6 +32,20 @@ public class MetricsController { private final MeterRegistry meterRegistry; + private boolean isEndpointEnabled; + + @PostConstruct + public void init() { + String isEndpointEnabled = System.getProperty("ENABLE_API_METRICS"); + if (isEndpointEnabled == null) { + isEndpointEnabled = System.getenv("ENABLE_API_METRICS"); + if (isEndpointEnabled == null) { + isEndpointEnabled = "true"; + } + } + this.isEndpointEnabled = "true".equalsIgnoreCase(isEndpointEnabled); + } + public MetricsController(MeterRegistry meterRegistry) { this.meterRegistry = meterRegistry; } @@ -29,18 +53,25 @@ public class MetricsController { @GetMapping("/status") @Operation(summary = "Application status and version", description = "This endpoint returns the status of the application and its version number.") - public Map getStatus() { + public ResponseEntity getStatus() { + if (!isEndpointEnabled) { + return ResponseEntity.status(HttpStatus.FORBIDDEN).body("This endpoint is disabled."); + } + Map status = new HashMap<>(); status.put("status", "UP"); status.put("version", getClass().getPackage().getImplementationVersion()); - return status; + return ResponseEntity.ok(status); } @GetMapping("/loads") @Operation(summary = "GET request count", description = "This endpoint returns the total count of GET requests or the count of GET requests for a specific endpoint.") - public Double getPageLoads(@RequestParam(required = false, name = "endpoint") @Parameter(description = "endpoint") Optional endpoint) { - try { + public ResponseEntity getPageLoads(@RequestParam(required = false, name = "endpoint") @Parameter(description = "endpoint") Optional endpoint) { + if (!isEndpointEnabled) { + return ResponseEntity.status(HttpStatus.FORBIDDEN).body("This endpoint is disabled."); + } + try { double count = 0.0; @@ -68,36 +99,165 @@ public class MetricsController { } } - return count; + return ResponseEntity.ok(count); } catch (Exception e) { - return -1.0; + return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).build(); } } + @GetMapping("/loads/all") + @Operation(summary = "GET requests count for all endpoints", + description = "This endpoint returns the count of GET requests for each endpoint.") + public ResponseEntity getAllEndpointLoads() { + if (!isEndpointEnabled) { + return ResponseEntity.status(HttpStatus.FORBIDDEN).body("This endpoint is disabled."); + } + try { + Map counts = new HashMap<>(); + + for (Meter meter : meterRegistry.getMeters()) { + if (meter.getId().getName().equals("http.requests")) { + String method = meter.getId().getTag("method"); + if (method != null && method.equals("GET")) { + String uri = meter.getId().getTag("uri"); + if (uri != null) { + double currentCount = counts.getOrDefault(uri, 0.0); + if (meter instanceof Counter) { + currentCount += ((Counter) meter).count(); + } + counts.put(uri, currentCount); + } + } + } + } + + List results = counts.entrySet().stream() + .map(entry -> new EndpointCount(entry.getKey(), entry.getValue())) + .sorted(Comparator.comparing(EndpointCount::getCount).reversed()) + .collect(Collectors.toList()); + + return ResponseEntity.ok(results); + } catch (Exception e) { + return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).build(); + } + } + + public class EndpointCount { + private String endpoint; + private double count; + + public EndpointCount(String endpoint, double count) { + this.endpoint = endpoint; + this.count = count; + } + public String getEndpoint() { + return endpoint; + } + public void setEndpoint(String endpoint) { + this.endpoint = endpoint; + } + public double getCount() { + return count; + } + public void setCount(double count) { + this.count = count; + } + + } + + @GetMapping("/requests") @Operation(summary = "POST request count", description = "This endpoint returns the total count of POST requests or the count of POST requests for a specific endpoint.") - public Double getTotalRequests(@RequestParam(required = false, name = "endpoint") @Parameter(description = "endpoint") Optional endpoint) { - try { - Counter counter; - if (endpoint.isPresent() && !endpoint.get().isBlank()) { - if(!endpoint.get().startsWith("/")) { - endpoint = Optional.of("/" + endpoint.get()); - } - - System.out.println("loads " + endpoint.get() + " vs " + meterRegistry.get("http.requests").tags("uri", endpoint.get()).toString()); - counter = meterRegistry.get("http.requests") - .tags("method", "POST", "uri", endpoint.get()).counter(); - } else { - counter = meterRegistry.get("http.requests") - .tags("method", "POST").counter(); - } - return counter.count(); - } catch (Exception e) { - e.printStackTrace(); - return 0.0; + public ResponseEntity getTotalRequests(@RequestParam(required = false, name = "endpoint") @Parameter(description = "endpoint") Optional endpoint) { + if (!isEndpointEnabled) { + return ResponseEntity.status(HttpStatus.FORBIDDEN).body("This endpoint is disabled."); + } + try { + double count = 0.0; + + for (Meter meter : meterRegistry.getMeters()) { + if (meter.getId().getName().equals("http.requests")) { + String method = meter.getId().getTag("method"); + if (method != null && method.equals("POST")) { + if (endpoint.isPresent() && !endpoint.get().isBlank()) { + if (!endpoint.get().startsWith("/")) { + endpoint = Optional.of("/" + endpoint.get()); + } + if (endpoint.get().equals(meter.getId().getTag("uri"))) { + if (meter instanceof Counter) { + count += ((Counter) meter).count(); + } + } + } else { + if (meter instanceof Counter) { + count += ((Counter) meter).count(); + } + } + } + } + } + return ResponseEntity.ok(count); + } catch (Exception e) { + return ResponseEntity.ok(-1); } - } + + @GetMapping("/requests/all") + @Operation(summary = "POST requests count for all endpoints", + description = "This endpoint returns the count of POST requests for each endpoint.") + public ResponseEntity getAllPostRequests() { + if (!isEndpointEnabled) { + return ResponseEntity.status(HttpStatus.FORBIDDEN).body("This endpoint is disabled."); + } + try { + Map counts = new HashMap<>(); + + for (Meter meter : meterRegistry.getMeters()) { + if (meter.getId().getName().equals("http.requests")) { + String method = meter.getId().getTag("method"); + if (method != null && method.equals("POST")) { + String uri = meter.getId().getTag("uri"); + if (uri != null) { + double currentCount = counts.getOrDefault(uri, 0.0); + if (meter instanceof Counter) { + currentCount += ((Counter) meter).count(); + } + counts.put(uri, currentCount); + } + } + } + } + + List results = counts.entrySet().stream() + .map(entry -> new EndpointCount(entry.getKey(), entry.getValue())) + .sorted(Comparator.comparing(EndpointCount::getCount).reversed()) + .collect(Collectors.toList()); + + return ResponseEntity.ok(results); + } catch (Exception e) { + return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).build(); + } + } + + + @GetMapping("/uptime") + public ResponseEntity getUptime() { + if (!isEndpointEnabled) { + return ResponseEntity.status(HttpStatus.FORBIDDEN).body("This endpoint is disabled."); + } + + LocalDateTime now = LocalDateTime.now(); + Duration uptime = Duration.between(StartupApplicationListener.startTime, now); + return ResponseEntity.ok(formatDuration(uptime)); + } + + private String formatDuration(Duration duration) { + long days = duration.toDays(); + long hours = duration.toHoursPart(); + long minutes = duration.toMinutesPart(); + long seconds = duration.toSecondsPart(); + return String.format("%dd %dh %dm %ds", days, hours, minutes, seconds); + } } diff --git a/src/main/java/stirling/software/SPDF/controller/web/OtherWebController.java b/src/main/java/stirling/software/SPDF/controller/web/OtherWebController.java index 8fa57d08..157f76e4 100644 --- a/src/main/java/stirling/software/SPDF/controller/web/OtherWebController.java +++ b/src/main/java/stirling/software/SPDF/controller/web/OtherWebController.java @@ -31,7 +31,15 @@ public class OtherWebController { modelAndView.addObject("currentPage", "extract-image-scans"); return modelAndView; } - + + @GetMapping("/show-javascript") + @Hidden + public String extractJavascriptForm(Model model) { + model.addAttribute("currentPage", "show-javascript"); + return "other/show-javascript"; + } + + @GetMapping("/add-page-numbers") @Hidden public String addPageNumbersForm(Model model) { 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 fe176f62..3857cc9e 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) { @@ -50,4 +52,11 @@ public class SecurityWebController { model.addAttribute("currentPage", "sanitize-pdf"); return "security/sanitize-pdf"; } + + @GetMapping("/get-info-on-pdf") + @Hidden + public String getInfo(Model model) { + model.addAttribute("currentPage", "get-info-on-pdf"); + return "security/get-info-on-pdf"; + } } diff --git a/src/main/java/stirling/software/SPDF/utils/FileToPdf.java b/src/main/java/stirling/software/SPDF/utils/FileToPdf.java new file mode 100644 index 00000000..9515a3ac --- /dev/null +++ b/src/main/java/stirling/software/SPDF/utils/FileToPdf.java @@ -0,0 +1,95 @@ +package stirling.software.SPDF.utils; + +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 stirling.software.SPDF.utils.ProcessExecutor.ProcessExecutorResult; + +public class FileToPdf { + public static byte[] convertHtmlToPdf(byte[] fileBytes, String fileName) throws IOException, InterruptedException { + + Path tempOutputFile = Files.createTempFile("output_", ".pdf"); + Path tempInputFile = null; + byte[] pdfBytes; + try { + if (fileName.endsWith(".html")) { + tempInputFile = Files.createTempFile("input_", ".html"); + Files.write(tempInputFile, fileBytes); + } else { + tempInputFile = unzipAndGetMainHtml(fileBytes); + } + + List command = new ArrayList<>(); + command.add("weasyprint"); + command.add(tempInputFile.toString()); + command.add(tempOutputFile.toString()); + ProcessExecutorResult returnCode; + if (fileName.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 (fileName.endsWith(".zip")) { + GeneralUtils.deleteDirectory(tempInputFile.getParent()); + } + } + + return pdfBytes; + } + + + private static Path unzipAndGetMainHtml(byte[] fileBytes) throws IOException { + Path tempDirectory = Files.createTempDirectory("unzipped_"); + try (ZipInputStream zipIn = new ZipInputStream(new ByteArrayInputStream(fileBytes))) { + 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/utils/PDFToFile.java b/src/main/java/stirling/software/SPDF/utils/PDFToFile.java index ffe1d93d..af658f79 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 f2a7ed55..fe5c6717 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; + } + + } - } diff --git a/src/main/java/stirling/software/SPDF/utils/WebResponseUtils.java b/src/main/java/stirling/software/SPDF/utils/WebResponseUtils.java index 59c0b056..09a395ba 100644 --- a/src/main/java/stirling/software/SPDF/utils/WebResponseUtils.java +++ b/src/main/java/stirling/software/SPDF/utils/WebResponseUtils.java @@ -12,6 +12,9 @@ import org.springframework.http.MediaType; import org.springframework.http.ResponseEntity; import org.springframework.web.multipart.MultipartFile; +import com.itextpdf.kernel.pdf.PdfDocument; +import com.itextpdf.kernel.pdf.PdfWriter; + public class WebResponseUtils { public static ResponseEntity boasToWebResponse(ByteArrayOutputStream baos, String docName) throws IOException { @@ -57,5 +60,19 @@ public class WebResponseUtils { return boasToWebResponse(baos, docName); } + + public static ResponseEntity pdfDocToWebResponse(PdfDocument document, String docName) throws IOException { + + // Open Byte Array and save document to it + ByteArrayOutputStream baos = new ByteArrayOutputStream(); + PdfWriter writer = new PdfWriter(baos); + PdfDocument newDocument = new PdfDocument(writer); + + document.copyPagesTo(1, document.getNumberOfPages(), newDocument); + newDocument.close(); + + return boasToWebResponse(baos, docName); + } + } diff --git a/src/main/resources/application.properties b/src/main/resources/application.properties index 06e4edec..c4118342 100644 --- a/src/main/resources/application.properties +++ b/src/main/resources/application.properties @@ -15,7 +15,10 @@ server.error.whitelabel.enabled=false server.error.include-stacktrace=always server.error.include-exception=true server.error.include-message=always -\ + +#logging.level.org.springframework.web=DEBUG + + server.servlet.session.tracking-modes=cookie server.servlet.context-path=${APP_ROOT_PATH:/} diff --git a/src/main/resources/messages_ar_AR.properties b/src/main/resources/messages_ar_AR.properties index 96a53cec..53a0fa44 100644 --- a/src/main/resources/messages_ar_AR.properties +++ b/src/main/resources/messages_ar_AR.properties @@ -71,296 +71,241 @@ 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 +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 ### -########################## 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 +home.MarkdownToPDF.title=Markdown to PDF +home.MarkdownToPDF.desc=Converts any Markdown file to PDF +MarkdownToPDF.tags=markup,web-content,transformation,convert + + +home.getPdfInfo.title=Get ALL Info on PDF +home.getPdfInfo.desc=Grabs any and all information possible on PDFs +getPdfInfo.tags=infomation,data,stats,statistics + + +home.extractPage.title=Extract page(s) +home.extractPage.desc=Extracts select pages from PDF +extractPage.tags=extract + + +home.PdfToSinglePage.title=PDF to Single Large Page +home.PdfToSinglePage.desc=Merges all PDF pages into one large single page +PdfToSinglePage.tags=single page + + +########################## +### TODO: Translate ### +########################## +home.showJS.title=Show Javascript +home.showJS.desc=Searches and displays any JS injected into a PDF +showJS.tags=JS + ########################### # # # WEB PAGES # # # ########################### +#showJS +########################## +### TODO: Translate ### +########################## +showJS.title=Show Javascript +showJS.header=Show Javascript +showJS.downloadJS=Download Javascript +showJS.submit=Show + + +#pdfToSinglePage +pdfToSinglePage.title=PDF To Single Page +pdfToSinglePage.header=PDF To Single Page +pdfToSinglePage.submit=Convert To Single Page + + +#pageExtracter +pageExtracter.title=Extract Pages +pageExtracter.header=Extract Pages +pageExtracter.submit=Extract + + +#getPdfInfo +getPdfInfo.title=Get Info on PDF +getPdfInfo.header=Get Info on PDF +getPdfInfo.submit=Get Info +getPdfInfo.downloadJson=Download JSON + + +#markdown-to-pdf +MarkdownToPDF.title=Markdown To PDF +MarkdownToPDF.header=Markdown To PDF +MarkdownToPDF.submit=Convert +MarkdownToPDF.help=Work in progress +MarkdownToPDF.credit=Uses WeasyPrint + + + #url-to-pdf URLToPDF.title=URL To PDF URLToPDF.header=URL To PDF diff --git a/src/main/resources/messages_ca_CA.properties b/src/main/resources/messages_ca_CA.properties index bec93536..6d653a9b 100644 --- a/src/main/resources/messages_ca_CA.properties +++ b/src/main/resources/messages_ca_CA.properties @@ -71,296 +71,241 @@ 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 +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 ### -########################## 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 +home.MarkdownToPDF.title=Markdown to PDF +home.MarkdownToPDF.desc=Converts any Markdown file to PDF +MarkdownToPDF.tags=markup,web-content,transformation,convert + + +home.getPdfInfo.title=Get ALL Info on PDF +home.getPdfInfo.desc=Grabs any and all information possible on PDFs +getPdfInfo.tags=infomation,data,stats,statistics + + +home.extractPage.title=Extract page(s) +home.extractPage.desc=Extracts select pages from PDF +extractPage.tags=extract + + +home.PdfToSinglePage.title=PDF to Single Large Page +home.PdfToSinglePage.desc=Merges all PDF pages into one large single page +PdfToSinglePage.tags=single page + + +########################## +### TODO: Translate ### +########################## +home.showJS.title=Show Javascript +home.showJS.desc=Searches and displays any JS injected into a PDF +showJS.tags=JS + ########################### # # # WEB PAGES # # # ########################### +#showJS +########################## +### TODO: Translate ### +########################## +showJS.title=Show Javascript +showJS.header=Show Javascript +showJS.downloadJS=Download Javascript +showJS.submit=Show + + +#pdfToSinglePage +pdfToSinglePage.title=PDF To Single Page +pdfToSinglePage.header=PDF To Single Page +pdfToSinglePage.submit=Convert To Single Page + + +#pageExtracter +pageExtracter.title=Extract Pages +pageExtracter.header=Extract Pages +pageExtracter.submit=Extract + + +#getPdfInfo +getPdfInfo.title=Get Info on PDF +getPdfInfo.header=Get Info on PDF +getPdfInfo.submit=Get Info +getPdfInfo.downloadJson=Download JSON + + +#markdown-to-pdf +MarkdownToPDF.title=Markdown To PDF +MarkdownToPDF.header=Markdown To PDF +MarkdownToPDF.submit=Convert +MarkdownToPDF.help=Work in progress +MarkdownToPDF.credit=Uses WeasyPrint + + + #url-to-pdf URLToPDF.title=URL To PDF URLToPDF.header=URL To PDF diff --git a/src/main/resources/messages_de_DE.properties b/src/main/resources/messages_de_DE.properties index 1ed74f91..1b5691bf 100644 --- a/src/main/resources/messages_de_DE.properties +++ b/src/main/resources/messages_de_DE.properties @@ -71,296 +71,241 @@ 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 +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 ### -########################## 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 +home.MarkdownToPDF.title=Markdown to PDF +home.MarkdownToPDF.desc=Converts any Markdown file to PDF +MarkdownToPDF.tags=markup,web-content,transformation,convert + + +home.getPdfInfo.title=Get ALL Info on PDF +home.getPdfInfo.desc=Grabs any and all information possible on PDFs +getPdfInfo.tags=infomation,data,stats,statistics + + +home.extractPage.title=Extract page(s) +home.extractPage.desc=Extracts select pages from PDF +extractPage.tags=extract + + +home.PdfToSinglePage.title=PDF to Single Large Page +home.PdfToSinglePage.desc=Merges all PDF pages into one large single page +PdfToSinglePage.tags=single page + + +########################## +### TODO: Translate ### +########################## +home.showJS.title=Show Javascript +home.showJS.desc=Searches and displays any JS injected into a PDF +showJS.tags=JS + ########################### # # # WEB PAGES # # # ########################### +#showJS +########################## +### TODO: Translate ### +########################## +showJS.title=Show Javascript +showJS.header=Show Javascript +showJS.downloadJS=Download Javascript +showJS.submit=Show + + +#pdfToSinglePage +pdfToSinglePage.title=PDF To Single Page +pdfToSinglePage.header=PDF To Single Page +pdfToSinglePage.submit=Convert To Single Page + + +#pageExtracter +pageExtracter.title=Extract Pages +pageExtracter.header=Extract Pages +pageExtracter.submit=Extract + + +#getPdfInfo +getPdfInfo.title=Get Info on PDF +getPdfInfo.header=Get Info on PDF +getPdfInfo.submit=Get Info +getPdfInfo.downloadJson=Download JSON + + +#markdown-to-pdf +MarkdownToPDF.title=Markdown To PDF +MarkdownToPDF.header=Markdown To PDF +MarkdownToPDF.submit=Convert +MarkdownToPDF.help=Work in progress +MarkdownToPDF.credit=Uses WeasyPrint + + + #url-to-pdf URLToPDF.title=URL To PDF URLToPDF.header=URL To PDF diff --git a/src/main/resources/messages_en_GB.properties b/src/main/resources/messages_en_GB.properties index 0d881b65..977260a5 100644 --- a/src/main/resources/messages_en_GB.properties +++ b/src/main/resources/messages_en_GB.properties @@ -236,11 +236,70 @@ home.HTMLToPDF.desc=Converts any HTML file or zip to PDF HTMLToPDF.tags=markup,web-content,transformation,convert +home.MarkdownToPDF.title=Markdown to PDF +home.MarkdownToPDF.desc=Converts any Markdown file to PDF +MarkdownToPDF.tags=markup,web-content,transformation,convert + + +home.getPdfInfo.title=Get ALL Info on PDF +home.getPdfInfo.desc=Grabs any and all information possible on PDFs +getPdfInfo.tags=infomation,data,stats,statistics + + +home.extractPage.title=Extract page(s) +home.extractPage.desc=Extracts select pages from PDF +extractPage.tags=extract + + +home.PdfToSinglePage.title=PDF to Single Large Page +home.PdfToSinglePage.desc=Merges all PDF pages into one large single page +PdfToSinglePage.tags=single page + + +home.showJS.title=Show Javascript +home.showJS.desc=Searches and displays any JS injected into a PDF +showJS.tags=JS + ########################### # # # WEB PAGES # # # ########################### +#showJS +showJS.title=Show Javascript +showJS.header=Show Javascript +showJS.downloadJS=Download Javascript +showJS.submit=Show + + +#pdfToSinglePage +pdfToSinglePage.title=PDF To Single Page +pdfToSinglePage.header=PDF To Single Page +pdfToSinglePage.submit=Convert To Single Page + + +#pageExtracter +pageExtracter.title=Extract Pages +pageExtracter.header=Extract Pages +pageExtracter.submit=Extract + + +#getPdfInfo +getPdfInfo.title=Get Info on PDF +getPdfInfo.header=Get Info on PDF +getPdfInfo.submit=Get Info +getPdfInfo.downloadJson=Download JSON + + +#markdown-to-pdf +MarkdownToPDF.title=Markdown To PDF +MarkdownToPDF.header=Markdown To PDF +MarkdownToPDF.submit=Convert +MarkdownToPDF.help=Work in progress +MarkdownToPDF.credit=Uses WeasyPrint + + + #url-to-pdf URLToPDF.title=URL To PDF URLToPDF.header=URL To PDF @@ -353,10 +412,10 @@ certSign.submit=Sign PDF #removeBlanks removeBlanks.title=Remove Blanks removeBlanks.header=Remove Blank Pages -removeBlanks.threshold=Threshold: -removeBlanks.thresholdDesc=Threshold for determining how white a white pixel must be +removeBlanks.threshold=Pixel Whiteness Threshold: +removeBlanks.thresholdDesc=Threshold for determining how white a white pixel must be to be classed as 'White'. 0 = Black, 255 pure white. removeBlanks.whitePercent=White Percent (%): -removeBlanks.whitePercentDesc=Percent of page that must be white to be removed +removeBlanks.whitePercentDesc=Percent of page that must be 'white' pixels to be removed removeBlanks.submit=Remove Blanks diff --git a/src/main/resources/messages_es_ES.properties b/src/main/resources/messages_es_ES.properties index 4e87240f..6f31beec 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,381 +58,326 @@ 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 -########################## -### TODO: Translate ### -########################## -rotate.tags=server side +home.rotate.desc=Rotar fácilmente sus PDFs +rotate.tags=lado del servidor 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 +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) -########################## -### TODO: Translate ### -########################## -addImage.tags=img,jpg,picture,photo +home.addImage.desc=Agregar una imagen en una ubicación establecida en el PDF (en desarrollo) +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 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 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 -########################## -### TODO: Translate ### -########################## -ocr.tags=recognition,text,image,scan,read,identify,detection,editable +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 +ocr.tags=reconocimiento,texto,imagen,escanear,leer,identificar,detección,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 +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 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 -########################## -### TODO: Translate ### -########################## -pipeline.tags=automate,sequence,scripted,batch-process +home.pipeline.title=Secuencia (Avanzado) +home.pipeline.desc=Ejecutar varias tareas a PDFs definiendo una secuencia de comandos +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 -########################## -### TODO: Translate ### -########################## -add-page-numbers.tags=paginate,label,organize,index +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 +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 -########################## -### TODO: Translate ### -########################## -auto-rename.tags=auto-detect,header-based,organize,relabel +home.auto-rename.title=Auto renombrar archivo PDF +home.auto-rename.desc=Auto renormbrar un archivo PDF según su encabezamiento detecetado +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 -########################## -### TODO: Translate ### -########################## -adjust-contrast.tags=color-correction,tune,modify,enhance +home.adjust-contrast.title=Ajustar Color/Contraste +home.adjust-contrast.desc=Ajustar Contraste, Saturación y Brillo de un PDF +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!) -########################## -### TODO: Translate ### -########################## -crop.tags=trim,shrink,edit,shape +home.crop.title=Recortar PDF +home.crop.desc=Recortar un PDF para reducir su tamaño (¡conservando el texto!) +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 -########################## -### TODO: Translate ### -########################## -autoSplitPDF.tags=QR-based,separate,scan-segment,organize +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 +autoSplitPDF.tags=Marcado por QR,separar,segmento de escaneo,organizar + +home.sanitizePdf.title=Desinfectar +home.sanitizePdf.desc=Eliminar scripts y otros elementos de los archivos PDF +sanitizePdf.tags=limpiar,asegurar,seguro,quitar amenazas + +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 + +home.HTMLToPDF.title=HTML a PDF +home.HTMLToPDF.desc=Convierte cualquier archivo HTML o ZIP a PDF +HTMLToPDF.tags=margen,contenido web,transformación,convertir + + +home.MarkdownToPDF.title=Markdown to PDF +home.MarkdownToPDF.desc=Converts any Markdown file to PDF +MarkdownToPDF.tags=markup,web-content,transformation,convert + + +home.getPdfInfo.title=Get ALL Info on PDF +home.getPdfInfo.desc=Grabs any and all information possible on PDFs +getPdfInfo.tags=infomation,data,stats,statistics + + +home.extractPage.title=Extract page(s) +home.extractPage.desc=Extracts select pages from PDF +extractPage.tags=extract + + +home.PdfToSinglePage.title=PDF to Single Large Page +home.PdfToSinglePage.desc=Merges all PDF pages into one large single page +PdfToSinglePage.tags=single page -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 - +home.showJS.title=Show Javascript +home.showJS.desc=Searches and displays any JS injected into a PDF +showJS.tags=JS ########################### # # # WEB PAGES # # # ########################### +#showJS +########################## +### TODO: Translate ### +########################## +showJS.title=Show Javascript +showJS.header=Show Javascript +showJS.downloadJS=Download Javascript +showJS.submit=Show + + +#pdfToSinglePage +pdfToSinglePage.title=PDF To Single Page +pdfToSinglePage.header=PDF To Single Page +pdfToSinglePage.submit=Convert To Single Page + + +#pageExtracter +pageExtracter.title=Extract Pages +pageExtracter.header=Extract Pages +pageExtracter.submit=Extract + + +#getPdfInfo +getPdfInfo.title=Get Info on PDF +getPdfInfo.header=Get Info on PDF +getPdfInfo.submit=Get Info +getPdfInfo.downloadJson=Download JSON + + +#markdown-to-pdf +MarkdownToPDF.title=Markdown To PDF +MarkdownToPDF.header=Markdown To PDF +MarkdownToPDF.submit=Convert +MarkdownToPDF.help=Work in progress +MarkdownToPDF.credit=Uses WeasyPrint + + + #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.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 +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.duplexMode=Modo Dúplex (Escaneado de ambas caras) +autoSplitPDF.dividerDownload1=Descargar 'Auto Splitter Divider (mínima).pdf' +autoSplitPDF.dividerDownload2=Descargar 'Auto Splitter Divider (con instrucciones).pdf' +autoSplitPDF.submit=Entregar #pipeline @@ -456,13 +401,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 diff --git a/src/main/resources/messages_eu_ES.properties b/src/main/resources/messages_eu_ES.properties index 96db8581..c1e6eba0 100644 --- a/src/main/resources/messages_eu_ES.properties +++ b/src/main/resources/messages_eu_ES.properties @@ -71,296 +71,241 @@ 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 +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 ### -########################## 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 +home.MarkdownToPDF.title=Markdown to PDF +home.MarkdownToPDF.desc=Converts any Markdown file to PDF +MarkdownToPDF.tags=markup,web-content,transformation,convert + + +home.getPdfInfo.title=Get ALL Info on PDF +home.getPdfInfo.desc=Grabs any and all information possible on PDFs +getPdfInfo.tags=infomation,data,stats,statistics + + +home.extractPage.title=Extract page(s) +home.extractPage.desc=Extracts select pages from PDF +extractPage.tags=extract + + +home.PdfToSinglePage.title=PDF to Single Large Page +home.PdfToSinglePage.desc=Merges all PDF pages into one large single page +PdfToSinglePage.tags=single page + + +########################## +### TODO: Translate ### +########################## +home.showJS.title=Show Javascript +home.showJS.desc=Searches and displays any JS injected into a PDF +showJS.tags=JS + ########################### # # # WEB PAGES # # # ########################### +#showJS +########################## +### TODO: Translate ### +########################## +showJS.title=Show Javascript +showJS.header=Show Javascript +showJS.downloadJS=Download Javascript +showJS.submit=Show + + +#pdfToSinglePage +pdfToSinglePage.title=PDF To Single Page +pdfToSinglePage.header=PDF To Single Page +pdfToSinglePage.submit=Convert To Single Page + + +#pageExtracter +pageExtracter.title=Extract Pages +pageExtracter.header=Extract Pages +pageExtracter.submit=Extract + + +#getPdfInfo +getPdfInfo.title=Get Info on PDF +getPdfInfo.header=Get Info on PDF +getPdfInfo.submit=Get Info +getPdfInfo.downloadJson=Download JSON + + +#markdown-to-pdf +MarkdownToPDF.title=Markdown To PDF +MarkdownToPDF.header=Markdown To PDF +MarkdownToPDF.submit=Convert +MarkdownToPDF.help=Work in progress +MarkdownToPDF.credit=Uses WeasyPrint + + + #url-to-pdf URLToPDF.title=URL To PDF URLToPDF.header=URL To PDF diff --git a/src/main/resources/messages_fr_FR.properties b/src/main/resources/messages_fr_FR.properties index 86eb1fc6..b26278f5 100644 --- a/src/main/resources/messages_fr_FR.properties +++ b/src/main/resources/messages_fr_FR.properties @@ -71,296 +71,241 @@ 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 +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 ### -########################## 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 +home.MarkdownToPDF.title=Markdown to PDF +home.MarkdownToPDF.desc=Converts any Markdown file to PDF +MarkdownToPDF.tags=markup,web-content,transformation,convert + + +home.getPdfInfo.title=Get ALL Info on PDF +home.getPdfInfo.desc=Grabs any and all information possible on PDFs +getPdfInfo.tags=infomation,data,stats,statistics + + +home.extractPage.title=Extract page(s) +home.extractPage.desc=Extracts select pages from PDF +extractPage.tags=extract + + +home.PdfToSinglePage.title=PDF to Single Large Page +home.PdfToSinglePage.desc=Merges all PDF pages into one large single page +PdfToSinglePage.tags=single page + + +########################## +### TODO: Translate ### +########################## +home.showJS.title=Show Javascript +home.showJS.desc=Searches and displays any JS injected into a PDF +showJS.tags=JS + ########################### # # # WEB PAGES # # # ########################### +#showJS +########################## +### TODO: Translate ### +########################## +showJS.title=Show Javascript +showJS.header=Show Javascript +showJS.downloadJS=Download Javascript +showJS.submit=Show + + +#pdfToSinglePage +pdfToSinglePage.title=PDF To Single Page +pdfToSinglePage.header=PDF To Single Page +pdfToSinglePage.submit=Convert To Single Page + + +#pageExtracter +pageExtracter.title=Extract Pages +pageExtracter.header=Extract Pages +pageExtracter.submit=Extract + + +#getPdfInfo +getPdfInfo.title=Get Info on PDF +getPdfInfo.header=Get Info on PDF +getPdfInfo.submit=Get Info +getPdfInfo.downloadJson=Download JSON + + +#markdown-to-pdf +MarkdownToPDF.title=Markdown To PDF +MarkdownToPDF.header=Markdown To PDF +MarkdownToPDF.submit=Convert +MarkdownToPDF.help=Work in progress +MarkdownToPDF.credit=Uses WeasyPrint + + + #url-to-pdf URLToPDF.title=URL To PDF URLToPDF.header=URL To PDF diff --git a/src/main/resources/messages_it_IT.properties b/src/main/resources/messages_it_IT.properties index e8d706b0..4e5cf304 100644 --- a/src/main/resources/messages_it_IT.properties +++ b/src/main/resources/messages_it_IT.properties @@ -71,296 +71,241 @@ 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 +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 ### -########################## 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 +home.MarkdownToPDF.title=Markdown to PDF +home.MarkdownToPDF.desc=Converts any Markdown file to PDF +MarkdownToPDF.tags=markup,web-content,transformation,convert + + +home.getPdfInfo.title=Get ALL Info on PDF +home.getPdfInfo.desc=Grabs any and all information possible on PDFs +getPdfInfo.tags=infomation,data,stats,statistics + + +home.extractPage.title=Extract page(s) +home.extractPage.desc=Extracts select pages from PDF +extractPage.tags=extract + + +home.PdfToSinglePage.title=PDF to Single Large Page +home.PdfToSinglePage.desc=Merges all PDF pages into one large single page +PdfToSinglePage.tags=single page + + +########################## +### TODO: Translate ### +########################## +home.showJS.title=Show Javascript +home.showJS.desc=Searches and displays any JS injected into a PDF +showJS.tags=JS + ########################### # # # WEB PAGES # # # ########################### +#showJS +########################## +### TODO: Translate ### +########################## +showJS.title=Show Javascript +showJS.header=Show Javascript +showJS.downloadJS=Download Javascript +showJS.submit=Show + + +#pdfToSinglePage +pdfToSinglePage.title=PDF To Single Page +pdfToSinglePage.header=PDF To Single Page +pdfToSinglePage.submit=Convert To Single Page + + +#pageExtracter +pageExtracter.title=Extract Pages +pageExtracter.header=Extract Pages +pageExtracter.submit=Extract + + +#getPdfInfo +getPdfInfo.title=Get Info on PDF +getPdfInfo.header=Get Info on PDF +getPdfInfo.submit=Get Info +getPdfInfo.downloadJson=Download JSON + + +#markdown-to-pdf +MarkdownToPDF.title=Markdown To PDF +MarkdownToPDF.header=Markdown To PDF +MarkdownToPDF.submit=Convert +MarkdownToPDF.help=Work in progress +MarkdownToPDF.credit=Uses WeasyPrint + + + #url-to-pdf URLToPDF.title=URL To PDF URLToPDF.header=URL To PDF diff --git a/src/main/resources/messages_ja_JP.properties b/src/main/resources/messages_ja_JP.properties index fe6086e7..4e49c578 100644 --- a/src/main/resources/messages_ja_JP.properties +++ b/src/main/resources/messages_ja_JP.properties @@ -26,9 +26,6 @@ text=テキスト font=フォント selectFillter=-- 選択 -- pageNum=ページ番号 -########################## -### TODO: Translate ### -########################## sizes.small=Small sizes.medium=Medium sizes.large=Large @@ -66,314 +63,250 @@ 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,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 +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を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 -########################## -### 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 -########################## -### 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 +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 +home.MarkdownToPDF.title=Markdown to PDF +home.MarkdownToPDF.desc=Converts any Markdown file to PDF +MarkdownToPDF.tags=markup,web-content,transformation,convert + + +home.getPdfInfo.title=Get ALL Info on PDF +home.getPdfInfo.desc=Grabs any and all information possible on PDFs +getPdfInfo.tags=infomation,data,stats,statistics + + +home.extractPage.title=Extract page(s) +home.extractPage.desc=Extracts select pages from PDF +extractPage.tags=extract + + +home.PdfToSinglePage.title=PDF to Single Large Page +home.PdfToSinglePage.desc=Merges all PDF pages into one large single page +PdfToSinglePage.tags=single page + + +########################## +### TODO: Translate ### +########################## +home.showJS.title=Show Javascript +home.showJS.desc=Searches and displays any JS injected into a PDF +showJS.tags=JS + ########################### # # # WEB PAGES # # # ########################### -#url-to-pdf +#showJS ########################## ### TODO: Translate ### ########################## +showJS.title=Show Javascript +showJS.header=Show Javascript +showJS.downloadJS=Download Javascript +showJS.submit=Show + + +#pdfToSinglePage +pdfToSinglePage.title=PDF To Single Page +pdfToSinglePage.header=PDF To Single Page +pdfToSinglePage.submit=Convert To Single Page + + +#pageExtracter +pageExtracter.title=Extract Pages +pageExtracter.header=Extract Pages +pageExtracter.submit=Extract + + +#getPdfInfo +getPdfInfo.title=Get Info on PDF +getPdfInfo.header=Get Info on PDF +getPdfInfo.submit=Get Info +getPdfInfo.downloadJson=Download JSON + + +#markdown-to-pdf +MarkdownToPDF.title=Markdown To PDF +MarkdownToPDF.header=Markdown To PDF +MarkdownToPDF.submit=Convert +MarkdownToPDF.help=Work in progress +MarkdownToPDF.credit=Uses WeasyPrint + + + +#url-to-pdf URLToPDF.title=URL To PDF URLToPDF.header=URL To PDF URLToPDF.submit=Convert @@ -381,9 +314,6 @@ 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 @@ -392,9 +322,6 @@ HTMLToPDF.credit=Uses WeasyPrint #sanitizePDF -########################## -### TODO: Translate ### -########################## sanitizePDF.title=Sanitize PDF sanitizePDF.header=Sanitize a PDF file sanitizePDF.selectText.1=Remove JavaScript actions @@ -406,9 +333,6 @@ sanitizePDF.submit=Sanitize PDF #addPageNumbers -########################## -### TODO: Translate ### -########################## addPageNumbers.title=Add Page Numbers addPageNumbers.header=Add Page Numbers addPageNumbers.selectText.1=Select PDF file: @@ -421,18 +345,12 @@ 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: @@ -442,18 +360,12 @@ 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. @@ -469,9 +381,6 @@ autoSplitPDF.submit=Submit #pipeline -########################## -### TODO: Translate ### -########################## pipeline.title=Pipeline diff --git a/src/main/resources/messages_ko_KR.properties b/src/main/resources/messages_ko_KR.properties index cd01f417..4c5a1e8c 100644 --- a/src/main/resources/messages_ko_KR.properties +++ b/src/main/resources/messages_ko_KR.properties @@ -71,296 +71,241 @@ 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 +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 ### -########################## 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 +home.MarkdownToPDF.title=Markdown to PDF +home.MarkdownToPDF.desc=Converts any Markdown file to PDF +MarkdownToPDF.tags=markup,web-content,transformation,convert + + +home.getPdfInfo.title=Get ALL Info on PDF +home.getPdfInfo.desc=Grabs any and all information possible on PDFs +getPdfInfo.tags=infomation,data,stats,statistics + + +home.extractPage.title=Extract page(s) +home.extractPage.desc=Extracts select pages from PDF +extractPage.tags=extract + + +home.PdfToSinglePage.title=PDF to Single Large Page +home.PdfToSinglePage.desc=Merges all PDF pages into one large single page +PdfToSinglePage.tags=single page + + +########################## +### TODO: Translate ### +########################## +home.showJS.title=Show Javascript +home.showJS.desc=Searches and displays any JS injected into a PDF +showJS.tags=JS + ########################### # # # WEB PAGES # # # ########################### +#showJS +########################## +### TODO: Translate ### +########################## +showJS.title=Show Javascript +showJS.header=Show Javascript +showJS.downloadJS=Download Javascript +showJS.submit=Show + + +#pdfToSinglePage +pdfToSinglePage.title=PDF To Single Page +pdfToSinglePage.header=PDF To Single Page +pdfToSinglePage.submit=Convert To Single Page + + +#pageExtracter +pageExtracter.title=Extract Pages +pageExtracter.header=Extract Pages +pageExtracter.submit=Extract + + +#getPdfInfo +getPdfInfo.title=Get Info on PDF +getPdfInfo.header=Get Info on PDF +getPdfInfo.submit=Get Info +getPdfInfo.downloadJson=Download JSON + + +#markdown-to-pdf +MarkdownToPDF.title=Markdown To PDF +MarkdownToPDF.header=Markdown To PDF +MarkdownToPDF.submit=Convert +MarkdownToPDF.help=Work in progress +MarkdownToPDF.credit=Uses WeasyPrint + + + #url-to-pdf URLToPDF.title=URL To PDF URLToPDF.header=URL To PDF diff --git a/src/main/resources/messages_pl_PL.properties b/src/main/resources/messages_pl_PL.properties index 7ea64167..2e04e80a 100644 --- a/src/main/resources/messages_pl_PL.properties +++ b/src/main/resources/messages_pl_PL.properties @@ -71,296 +71,241 @@ 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 +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 ### -########################## 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 +home.MarkdownToPDF.title=Markdown to PDF +home.MarkdownToPDF.desc=Converts any Markdown file to PDF +MarkdownToPDF.tags=markup,web-content,transformation,convert + + +home.getPdfInfo.title=Get ALL Info on PDF +home.getPdfInfo.desc=Grabs any and all information possible on PDFs +getPdfInfo.tags=infomation,data,stats,statistics + + +home.extractPage.title=Extract page(s) +home.extractPage.desc=Extracts select pages from PDF +extractPage.tags=extract + + +home.PdfToSinglePage.title=PDF to Single Large Page +home.PdfToSinglePage.desc=Merges all PDF pages into one large single page +PdfToSinglePage.tags=single page + + +########################## +### TODO: Translate ### +########################## +home.showJS.title=Show Javascript +home.showJS.desc=Searches and displays any JS injected into a PDF +showJS.tags=JS + ########################### # # # WEB PAGES # # # ########################### +#showJS +########################## +### TODO: Translate ### +########################## +showJS.title=Show Javascript +showJS.header=Show Javascript +showJS.downloadJS=Download Javascript +showJS.submit=Show + + +#pdfToSinglePage +pdfToSinglePage.title=PDF To Single Page +pdfToSinglePage.header=PDF To Single Page +pdfToSinglePage.submit=Convert To Single Page + + +#pageExtracter +pageExtracter.title=Extract Pages +pageExtracter.header=Extract Pages +pageExtracter.submit=Extract + + +#getPdfInfo +getPdfInfo.title=Get Info on PDF +getPdfInfo.header=Get Info on PDF +getPdfInfo.submit=Get Info +getPdfInfo.downloadJson=Download JSON + + +#markdown-to-pdf +MarkdownToPDF.title=Markdown To PDF +MarkdownToPDF.header=Markdown To PDF +MarkdownToPDF.submit=Convert +MarkdownToPDF.help=Work in progress +MarkdownToPDF.credit=Uses WeasyPrint + + + #url-to-pdf URLToPDF.title=URL To PDF URLToPDF.header=URL To PDF diff --git a/src/main/resources/messages_pt_BR.properties b/src/main/resources/messages_pt_BR.properties index 3b98b0e6..e615c730 100644 --- a/src/main/resources/messages_pt_BR.properties +++ b/src/main/resources/messages_pt_BR.properties @@ -71,296 +71,241 @@ 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 +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 ### -########################## 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 +home.MarkdownToPDF.title=Markdown to PDF +home.MarkdownToPDF.desc=Converts any Markdown file to PDF +MarkdownToPDF.tags=markup,web-content,transformation,convert + + +home.getPdfInfo.title=Get ALL Info on PDF +home.getPdfInfo.desc=Grabs any and all information possible on PDFs +getPdfInfo.tags=infomation,data,stats,statistics + + +home.extractPage.title=Extract page(s) +home.extractPage.desc=Extracts select pages from PDF +extractPage.tags=extract + + +home.PdfToSinglePage.title=PDF to Single Large Page +home.PdfToSinglePage.desc=Merges all PDF pages into one large single page +PdfToSinglePage.tags=single page + + +########################## +### TODO: Translate ### +########################## +home.showJS.title=Show Javascript +home.showJS.desc=Searches and displays any JS injected into a PDF +showJS.tags=JS + ########################### # # # WEB PAGES # # # ########################### +#showJS +########################## +### TODO: Translate ### +########################## +showJS.title=Show Javascript +showJS.header=Show Javascript +showJS.downloadJS=Download Javascript +showJS.submit=Show + + +#pdfToSinglePage +pdfToSinglePage.title=PDF To Single Page +pdfToSinglePage.header=PDF To Single Page +pdfToSinglePage.submit=Convert To Single Page + + +#pageExtracter +pageExtracter.title=Extract Pages +pageExtracter.header=Extract Pages +pageExtracter.submit=Extract + + +#getPdfInfo +getPdfInfo.title=Get Info on PDF +getPdfInfo.header=Get Info on PDF +getPdfInfo.submit=Get Info +getPdfInfo.downloadJson=Download JSON + + +#markdown-to-pdf +MarkdownToPDF.title=Markdown To PDF +MarkdownToPDF.header=Markdown To PDF +MarkdownToPDF.submit=Convert +MarkdownToPDF.help=Work in progress +MarkdownToPDF.credit=Uses WeasyPrint + + + #url-to-pdf URLToPDF.title=URL To PDF URLToPDF.header=URL To PDF diff --git a/src/main/resources/messages_ro_RO.properties b/src/main/resources/messages_ro_RO.properties index e66a6fc5..11a5c090 100644 --- a/src/main/resources/messages_ro_RO.properties +++ b/src/main/resources/messages_ro_RO.properties @@ -71,296 +71,241 @@ 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 +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 ### -########################## 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 +home.MarkdownToPDF.title=Markdown to PDF +home.MarkdownToPDF.desc=Converts any Markdown file to PDF +MarkdownToPDF.tags=markup,web-content,transformation,convert + + +home.getPdfInfo.title=Get ALL Info on PDF +home.getPdfInfo.desc=Grabs any and all information possible on PDFs +getPdfInfo.tags=infomation,data,stats,statistics + + +home.extractPage.title=Extract page(s) +home.extractPage.desc=Extracts select pages from PDF +extractPage.tags=extract + + +home.PdfToSinglePage.title=PDF to Single Large Page +home.PdfToSinglePage.desc=Merges all PDF pages into one large single page +PdfToSinglePage.tags=single page + + +########################## +### TODO: Translate ### +########################## +home.showJS.title=Show Javascript +home.showJS.desc=Searches and displays any JS injected into a PDF +showJS.tags=JS + ########################### # # # WEB PAGES # # # ########################### +#showJS +########################## +### TODO: Translate ### +########################## +showJS.title=Show Javascript +showJS.header=Show Javascript +showJS.downloadJS=Download Javascript +showJS.submit=Show + + +#pdfToSinglePage +pdfToSinglePage.title=PDF To Single Page +pdfToSinglePage.header=PDF To Single Page +pdfToSinglePage.submit=Convert To Single Page + + +#pageExtracter +pageExtracter.title=Extract Pages +pageExtracter.header=Extract Pages +pageExtracter.submit=Extract + + +#getPdfInfo +getPdfInfo.title=Get Info on PDF +getPdfInfo.header=Get Info on PDF +getPdfInfo.submit=Get Info +getPdfInfo.downloadJson=Download JSON + + +#markdown-to-pdf +MarkdownToPDF.title=Markdown To PDF +MarkdownToPDF.header=Markdown To PDF +MarkdownToPDF.submit=Convert +MarkdownToPDF.help=Work in progress +MarkdownToPDF.credit=Uses WeasyPrint + + + #url-to-pdf URLToPDF.title=URL To PDF URLToPDF.header=URL To PDF diff --git a/src/main/resources/messages_ru_RU.properties b/src/main/resources/messages_ru_RU.properties index 28b0a1e7..89be5d64 100644 --- a/src/main/resources/messages_ru_RU.properties +++ b/src/main/resources/messages_ru_RU.properties @@ -71,296 +71,241 @@ 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 +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 ### -########################## 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 +home.MarkdownToPDF.title=Markdown to PDF +home.MarkdownToPDF.desc=Converts any Markdown file to PDF +MarkdownToPDF.tags=markup,web-content,transformation,convert + + +home.getPdfInfo.title=Get ALL Info on PDF +home.getPdfInfo.desc=Grabs any and all information possible on PDFs +getPdfInfo.tags=infomation,data,stats,statistics + + +home.extractPage.title=Extract page(s) +home.extractPage.desc=Extracts select pages from PDF +extractPage.tags=extract + + +home.PdfToSinglePage.title=PDF to Single Large Page +home.PdfToSinglePage.desc=Merges all PDF pages into one large single page +PdfToSinglePage.tags=single page + + +########################## +### TODO: Translate ### +########################## +home.showJS.title=Show Javascript +home.showJS.desc=Searches and displays any JS injected into a PDF +showJS.tags=JS + ########################### # # # WEB PAGES # # # ########################### +#showJS +########################## +### TODO: Translate ### +########################## +showJS.title=Show Javascript +showJS.header=Show Javascript +showJS.downloadJS=Download Javascript +showJS.submit=Show + + +#pdfToSinglePage +pdfToSinglePage.title=PDF To Single Page +pdfToSinglePage.header=PDF To Single Page +pdfToSinglePage.submit=Convert To Single Page + + +#pageExtracter +pageExtracter.title=Extract Pages +pageExtracter.header=Extract Pages +pageExtracter.submit=Extract + + +#getPdfInfo +getPdfInfo.title=Get Info on PDF +getPdfInfo.header=Get Info on PDF +getPdfInfo.submit=Get Info +getPdfInfo.downloadJson=Download JSON + + +#markdown-to-pdf +MarkdownToPDF.title=Markdown To PDF +MarkdownToPDF.header=Markdown To PDF +MarkdownToPDF.submit=Convert +MarkdownToPDF.help=Work in progress +MarkdownToPDF.credit=Uses WeasyPrint + + + #url-to-pdf URLToPDF.title=URL To PDF URLToPDF.header=URL To PDF diff --git a/src/main/resources/messages_sv_SE.properties b/src/main/resources/messages_sv_SE.properties index 0e833124..06637e86 100644 --- a/src/main/resources/messages_sv_SE.properties +++ b/src/main/resources/messages_sv_SE.properties @@ -71,296 +71,241 @@ 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 +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 ### -########################## 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 +home.MarkdownToPDF.title=Markdown to PDF +home.MarkdownToPDF.desc=Converts any Markdown file to PDF +MarkdownToPDF.tags=markup,web-content,transformation,convert + + +home.getPdfInfo.title=Get ALL Info on PDF +home.getPdfInfo.desc=Grabs any and all information possible on PDFs +getPdfInfo.tags=infomation,data,stats,statistics + + +home.extractPage.title=Extract page(s) +home.extractPage.desc=Extracts select pages from PDF +extractPage.tags=extract + + +home.PdfToSinglePage.title=PDF to Single Large Page +home.PdfToSinglePage.desc=Merges all PDF pages into one large single page +PdfToSinglePage.tags=single page + + +########################## +### TODO: Translate ### +########################## +home.showJS.title=Show Javascript +home.showJS.desc=Searches and displays any JS injected into a PDF +showJS.tags=JS + ########################### # # # WEB PAGES # # # ########################### +#showJS +########################## +### TODO: Translate ### +########################## +showJS.title=Show Javascript +showJS.header=Show Javascript +showJS.downloadJS=Download Javascript +showJS.submit=Show + + +#pdfToSinglePage +pdfToSinglePage.title=PDF To Single Page +pdfToSinglePage.header=PDF To Single Page +pdfToSinglePage.submit=Convert To Single Page + + +#pageExtracter +pageExtracter.title=Extract Pages +pageExtracter.header=Extract Pages +pageExtracter.submit=Extract + + +#getPdfInfo +getPdfInfo.title=Get Info on PDF +getPdfInfo.header=Get Info on PDF +getPdfInfo.submit=Get Info +getPdfInfo.downloadJson=Download JSON + + +#markdown-to-pdf +MarkdownToPDF.title=Markdown To PDF +MarkdownToPDF.header=Markdown To PDF +MarkdownToPDF.submit=Convert +MarkdownToPDF.help=Work in progress +MarkdownToPDF.credit=Uses WeasyPrint + + + #url-to-pdf URLToPDF.title=URL To PDF URLToPDF.header=URL To PDF diff --git a/src/main/resources/messages_zh_CN.properties b/src/main/resources/messages_zh_CN.properties index d1b3b578..7ece8479 100644 --- a/src/main/resources/messages_zh_CN.properties +++ b/src/main/resources/messages_zh_CN.properties @@ -71,296 +71,241 @@ 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 +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 ### -########################## 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 +home.MarkdownToPDF.title=Markdown to PDF +home.MarkdownToPDF.desc=Converts any Markdown file to PDF +MarkdownToPDF.tags=markup,web-content,transformation,convert + + +home.getPdfInfo.title=Get ALL Info on PDF +home.getPdfInfo.desc=Grabs any and all information possible on PDFs +getPdfInfo.tags=infomation,data,stats,statistics + + +home.extractPage.title=Extract page(s) +home.extractPage.desc=Extracts select pages from PDF +extractPage.tags=extract + + +home.PdfToSinglePage.title=PDF to Single Large Page +home.PdfToSinglePage.desc=Merges all PDF pages into one large single page +PdfToSinglePage.tags=single page + + +########################## +### TODO: Translate ### +########################## +home.showJS.title=Show Javascript +home.showJS.desc=Searches and displays any JS injected into a PDF +showJS.tags=JS + ########################### # # # WEB PAGES # # # ########################### +#showJS +########################## +### TODO: Translate ### +########################## +showJS.title=Show Javascript +showJS.header=Show Javascript +showJS.downloadJS=Download Javascript +showJS.submit=Show + + +#pdfToSinglePage +pdfToSinglePage.title=PDF To Single Page +pdfToSinglePage.header=PDF To Single Page +pdfToSinglePage.submit=Convert To Single Page + + +#pageExtracter +pageExtracter.title=Extract Pages +pageExtracter.header=Extract Pages +pageExtracter.submit=Extract + + +#getPdfInfo +getPdfInfo.title=Get Info on PDF +getPdfInfo.header=Get Info on PDF +getPdfInfo.submit=Get Info +getPdfInfo.downloadJson=Download JSON + + +#markdown-to-pdf +MarkdownToPDF.title=Markdown To PDF +MarkdownToPDF.header=Markdown To PDF +MarkdownToPDF.submit=Convert +MarkdownToPDF.help=Work in progress +MarkdownToPDF.credit=Uses WeasyPrint + + + #url-to-pdf URLToPDF.title=URL To PDF URLToPDF.header=URL To PDF diff --git a/src/main/resources/static/css/prism.css b/src/main/resources/static/css/prism.css new file mode 100644 index 00000000..f8de88e3 --- /dev/null +++ b/src/main/resources/static/css/prism.css @@ -0,0 +1,3 @@ +/* PrismJS 1.29.0 +https://prismjs.com/download.html#themes=prism-coy&languages=clike+javascript */ +code[class*=language-],pre[class*=language-]{color:#000;background:0 0;font-family:Consolas,Monaco,'Andale Mono','Ubuntu Mono',monospace;font-size:1em;text-align:left;white-space:pre;word-spacing:normal;word-break:normal;word-wrap:normal;line-height:1.5;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-hyphens:none;-moz-hyphens:none;-ms-hyphens:none;hyphens:none}pre[class*=language-]{position:relative;margin:.5em 0;overflow:visible;padding:1px}pre[class*=language-]>code{position:relative;z-index:1;border-left:10px solid #358ccb;box-shadow:-1px 0 0 0 #358ccb,0 0 0 1px #dfdfdf;background-color:#fdfdfd;background-image:linear-gradient(transparent 50%,rgba(69,142,209,.04) 50%);background-size:3em 3em;background-origin:content-box;background-attachment:local}code[class*=language-]{max-height:inherit;height:inherit;padding:0 1em;display:block;overflow:auto}:not(pre)>code[class*=language-],pre[class*=language-]{background-color:#fdfdfd;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;margin-bottom:1em}:not(pre)>code[class*=language-]{position:relative;padding:.2em;border-radius:.3em;color:#c92c2c;border:1px solid rgba(0,0,0,.1);display:inline;white-space:normal}pre[class*=language-]:after,pre[class*=language-]:before{content:'';display:block;position:absolute;bottom:.75em;left:.18em;width:40%;height:20%;max-height:13em;box-shadow:0 13px 8px #979797;-webkit-transform:rotate(-2deg);-moz-transform:rotate(-2deg);-ms-transform:rotate(-2deg);-o-transform:rotate(-2deg);transform:rotate(-2deg)}pre[class*=language-]:after{right:.75em;left:auto;-webkit-transform:rotate(2deg);-moz-transform:rotate(2deg);-ms-transform:rotate(2deg);-o-transform:rotate(2deg);transform:rotate(2deg)}.token.block-comment,.token.cdata,.token.comment,.token.doctype,.token.prolog{color:#7d8b99}.token.punctuation{color:#5f6364}.token.boolean,.token.constant,.token.deleted,.token.function-name,.token.number,.token.property,.token.symbol,.token.tag{color:#c92c2c}.token.attr-name,.token.builtin,.token.char,.token.function,.token.inserted,.token.selector,.token.string{color:#2f9c0a}.token.entity,.token.operator,.token.url,.token.variable{color:#a67f59;background:rgba(255,255,255,.5)}.token.atrule,.token.attr-value,.token.class-name,.token.keyword{color:#1990b8}.token.important,.token.regex{color:#e90}.language-css .token.string,.style .token.string{color:#a67f59;background:rgba(255,255,255,.5)}.token.important{font-weight:400}.token.bold{font-weight:700}.token.italic{font-style:italic}.token.entity{cursor:help}.token.namespace{opacity:.7}@media screen and (max-width:767px){pre[class*=language-]:after,pre[class*=language-]:before{bottom:14px;box-shadow:none}}pre[class*=language-].line-numbers.line-numbers{padding-left:0}pre[class*=language-].line-numbers.line-numbers code{padding-left:3.8em}pre[class*=language-].line-numbers.line-numbers .line-numbers-rows{left:0}pre[class*=language-][data-line]{padding-top:0;padding-bottom:0;padding-left:0}pre[data-line] code{position:relative;padding-left:4em}pre .line-highlight{margin-top:0} diff --git a/src/main/resources/static/images/extract.svg b/src/main/resources/static/images/extract.svg new file mode 100644 index 00000000..d21f03eb --- /dev/null +++ b/src/main/resources/static/images/extract.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/src/main/resources/static/images/info.svg b/src/main/resources/static/images/info.svg new file mode 100644 index 00000000..8f48f86c --- /dev/null +++ b/src/main/resources/static/images/info.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/src/main/resources/static/images/js.svg b/src/main/resources/static/images/js.svg new file mode 100644 index 00000000..8b198bfc --- /dev/null +++ b/src/main/resources/static/images/js.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/src/main/resources/static/images/markdown.svg b/src/main/resources/static/images/markdown.svg new file mode 100644 index 00000000..ca5cd597 --- /dev/null +++ b/src/main/resources/static/images/markdown.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/src/main/resources/static/images/single-page.svg b/src/main/resources/static/images/single-page.svg new file mode 100644 index 00000000..4f57d79b --- /dev/null +++ b/src/main/resources/static/images/single-page.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/src/main/resources/static/js/downloader.js b/src/main/resources/static/js/downloader.js index d06d82dc..95cf436b 100644 --- a/src/main/resources/static/js/downloader.js +++ b/src/main/resources/static/js/downloader.js @@ -14,6 +14,13 @@ $(document).ready(function() { const url = this.action; const files = $('#fileInput-input')[0].files; const formData = new FormData(this); + + // Remove empty file entries + for (let [key, value] of formData.entries()) { + if (value instanceof File && !value.name) { + formData.delete(key); + } + } const override = $('#override').val() || ''; const originalButtonText = $('#submitBtn').text(); $('#submitBtn').text('Processing...'); @@ -168,8 +175,12 @@ async function submitMultiPdfForm(url, files) { } //Remove file to reuse parameters for other runs formData.delete('fileInput'); - - + // Remove empty file entries + for (let [key, value] of formData.entries()) { + if (value instanceof File && !value.name) { + formData.delete(key); + } + } const CONCURRENCY_LIMIT = 8; const chunks = []; for (let i = 0; i < Array.from(files).length; i += CONCURRENCY_LIMIT) { diff --git a/src/main/resources/static/js/fileInput.js b/src/main/resources/static/js/fileInput.js index 94b5294f..7825af8b 100644 --- a/src/main/resources/static/js/fileInput.js +++ b/src/main/resources/static/js/fileInput.js @@ -1,12 +1,19 @@ document.addEventListener('DOMContentLoaded', function() { + document.querySelectorAll('.custom-file-chooser').forEach(setupFileInput); +}); +function setupFileInput(chooser) { + const elementId = chooser.getAttribute('data-element-id'); + const filesSelected = chooser.getAttribute('data-files-selected'); + const pdfPrompt = chooser.getAttribute('data-pdf-prompt'); + + let allFiles = []; let overlay; let dragCounter = 0; const dragenterListener = function() { dragCounter++; if (!overlay) { - // Create and show the overlay overlay = document.createElement('div'); overlay.style.position = 'fixed'; overlay.style.top = 0; @@ -28,7 +35,6 @@ document.addEventListener('DOMContentLoaded', function() { const dragleaveListener = function() { dragCounter--; if (dragCounter === 0) { - // Hide and remove the overlay if (overlay) { overlay.remove(); overlay = null; @@ -37,27 +43,30 @@ document.addEventListener('DOMContentLoaded', function() { }; const dropListener = function(e) { + e.preventDefault(); const dt = e.dataTransfer; const files = dt.files; - // Access the file input element and assign dropped files - const fileInput = document.getElementById(elementID); - fileInput.files = files; + for (let i = 0; i < files.length; i++) { + allFiles.push(files[i]); + } + + const dataTransfer = new DataTransfer(); + allFiles.forEach(file => dataTransfer.items.add(file)); + + const fileInput = document.getElementById(elementId); + fileInput.files = dataTransfer.files; - // Hide and remove the overlay if (overlay) { overlay.remove(); overlay = null; } - // Reset drag counter dragCounter = 0; - //handleFileInputChange(fileInput); fileInput.dispatchEvent(new Event('change', { bubbles: true })); }; - // Prevent default behavior for drag events ['dragenter', 'dragover', 'dragleave', 'drop'].forEach(eventName => { document.body.addEventListener(eventName, preventDefaults, false); }); @@ -69,29 +78,27 @@ document.addEventListener('DOMContentLoaded', function() { document.body.addEventListener('dragenter', dragenterListener); document.body.addEventListener('dragleave', dragleaveListener); - // Add drop event listener document.body.addEventListener('drop', dropListener); -}); - -$("#"+elementID).on("change", function() { - handleFileInputChange(this); -}); - - -function handleFileInputChange(inputElement) { - const files = $(inputElement).get(0).files; - const fileNames = Array.from(files).map(f => f.name); - const selectedFilesContainer = $(inputElement).siblings(".selected-files"); - selectedFilesContainer.empty(); - fileNames.forEach(fileName => { - selectedFilesContainer.append("
" + fileName + "
"); + $("#" + elementId).on("change", function(e) { + allFiles = Array.from(e.target.files); + handleFileInputChange(this); }); - if (fileNames.length === 1) { - $(inputElement).siblings(".custom-file-label").addClass("selected").html(fileNames[0]); - } else if (fileNames.length > 1) { - $(inputElement).siblings(".custom-file-label").addClass("selected").html(fileNames.length + " " + filesSelected); - } else { - $(inputElement).siblings(".custom-file-label").addClass("selected").html(pdfPrompt); - } -} \ No newline at end of file + + function handleFileInputChange(inputElement) { + const files = allFiles; + const fileNames = files.map(f => f.name); + const selectedFilesContainer = $(inputElement).siblings(".selected-files"); + selectedFilesContainer.empty(); + fileNames.forEach(fileName => { + selectedFilesContainer.append("
" + fileName + "
"); + }); + if (fileNames.length === 1) { + $(inputElement).siblings(".custom-file-label").addClass("selected").html(fileNames[0]); + } else if (fileNames.length > 1) { + $(inputElement).siblings(".custom-file-label").addClass("selected").html(fileNames.length + " " + filesSelected); + } else { + $(inputElement).siblings(".custom-file-label").addClass("selected").html(pdfPrompt); + } + } +} diff --git a/src/main/resources/static/js/multitool/PdfContainer.js b/src/main/resources/static/js/multitool/PdfContainer.js index bd150ac6..45c92be1 100644 --- a/src/main/resources/static/js/multitool/PdfContainer.js +++ b/src/main/resources/static/js/multitool/PdfContainer.js @@ -10,6 +10,7 @@ class PdfContainer { this.pagesContainerWrapper = document.getElementById(wrapperId); this.movePageTo = this.movePageTo.bind(this); this.addPdfs = this.addPdfs.bind(this); + this.addPdfsFromFiles = this.addPdfsFromFiles.bind(this); this.rotateElement = this.rotateElement.bind(this); this.rotateAll = this.rotateAll.bind(this); this.exportPdf = this.exportPdf.bind(this); @@ -57,22 +58,25 @@ class PdfContainer { input.type = 'file'; input.multiple = true; input.setAttribute("accept", "application/pdf"); - input.onchange = async(e) => { const files = e.target.files; - this.fileName = files[0].name; - for (var i=0; i < files.length; i++) { - await this.addPdfFile(files[i], nextSiblingElement); - } - - document.querySelectorAll(".enable-on-file").forEach(element => { - element.disabled = false; - }); + this.addPdfsFromFiles(files, nextSiblingElement); } input.click(); } + async addPdfsFromFiles(files, nextSiblingElement) { + this.fileName = files[0].name; + for (var i=0; i < files.length; i++) { + await this.addPdfFile(files[i], nextSiblingElement); + } + + document.querySelectorAll(".enable-on-file").forEach(element => { + element.disabled = false; + }); + } + rotateElement(element, deg) { var lastTransform = element.style.rotate; if (!lastTransform) { diff --git a/src/main/resources/static/js/multitool/fileInput.js b/src/main/resources/static/js/multitool/fileInput.js new file mode 100644 index 00000000..1a76bd48 --- /dev/null +++ b/src/main/resources/static/js/multitool/fileInput.js @@ -0,0 +1,69 @@ +const addFileDragListener = (callback) => { + let overlay; + let dragCounter = 0; + + const dragenterListener = function() { + dragCounter++; + if (!overlay) { + // Create and show the overlay + overlay = document.createElement('div'); + overlay.style.position = 'fixed'; + overlay.style.top = 0; + overlay.style.left = 0; + overlay.style.width = '100%'; + overlay.style.height = '100%'; + overlay.style.background = 'rgba(0, 0, 0, 0.5)'; + overlay.style.color = '#fff'; + overlay.style.zIndex = '1000'; + overlay.style.display = 'flex'; + overlay.style.alignItems = 'center'; + overlay.style.justifyContent = 'center'; + overlay.style.pointerEvents = 'none'; + overlay.innerHTML = '

Drop files anywhere to upload

'; + document.getElementById('content-wrap').appendChild(overlay); + } + }; + + const dragleaveListener = function() { + dragCounter--; + if (dragCounter === 0) { + // Hide and remove the overlay + if (overlay) { + overlay.remove(); + overlay = null; + } + } + }; + + const dropListener = function(e) { + + const dt = e.dataTransfer; + const files = dt.files; + callback(files).catch((err) => { + console.error(err); + //maybe + }).finally(() => { + if (overlay) { + overlay.remove(); + overlay = null; + } + }); + }; + + // Prevent default behavior for drag events + ['dragenter', 'dragover', 'dragleave', 'drop'].forEach(eventName => { + document.body.addEventListener(eventName, preventDefaults, false); + }); + + function preventDefaults(e) { + e.preventDefault(); + e.stopPropagation(); + } + + document.body.addEventListener('dragenter', dragenterListener); + document.body.addEventListener('dragleave', dragleaveListener); + // Add drop event listener + document.body.addEventListener('drop', dropListener); +} + +export default addFileDragListener; \ No newline at end of file diff --git a/src/main/resources/static/js/thirdParty/prism.js b/src/main/resources/static/js/thirdParty/prism.js new file mode 100644 index 00000000..82b52765 --- /dev/null +++ b/src/main/resources/static/js/thirdParty/prism.js @@ -0,0 +1,5 @@ +/* PrismJS 1.29.0 +https://prismjs.com/download.html#themes=prism-coy&languages=clike+javascript */ +var _self="undefined"!=typeof window?window:"undefined"!=typeof WorkerGlobalScope&&self instanceof WorkerGlobalScope?self:{},Prism=function(e){var n=/(?:^|\s)lang(?:uage)?-([\w-]+)(?=\s|$)/i,t=0,r={},a={manual:e.Prism&&e.Prism.manual,disableWorkerMessageHandler:e.Prism&&e.Prism.disableWorkerMessageHandler,util:{encode:function e(n){return n instanceof i?new i(n.type,e(n.content),n.alias):Array.isArray(n)?n.map(e):n.replace(/&/g,"&").replace(/=g.reach);A+=w.value.length,w=w.next){var E=w.value;if(n.length>e.length)return;if(!(E instanceof i)){var P,L=1;if(y){if(!(P=l(b,A,e,m))||P.index>=e.length)break;var S=P.index,O=P.index+P[0].length,j=A;for(j+=w.value.length;S>=j;)j+=(w=w.next).value.length;if(A=j-=w.value.length,w.value instanceof i)continue;for(var C=w;C!==n.tail&&(jg.reach&&(g.reach=W);var z=w.prev;if(_&&(z=u(n,z,_),A+=_.length),c(n,z,L),w=u(n,z,new i(f,p?a.tokenize(N,p):N,k,N)),M&&u(n,w,M),L>1){var I={cause:f+","+d,reach:W};o(e,n,t,w.prev,A,I),g&&I.reach>g.reach&&(g.reach=I.reach)}}}}}}function s(){var e={value:null,prev:null,next:null},n={value:null,prev:e,next:null};e.next=n,this.head=e,this.tail=n,this.length=0}function u(e,n,t){var r=n.next,a={value:t,prev:n,next:r};return n.next=a,r.prev=a,e.length++,a}function c(e,n,t){for(var r=n.next,a=0;a"+i.content+""},!e.document)return e.addEventListener?(a.disableWorkerMessageHandler||e.addEventListener("message",(function(n){var t=JSON.parse(n.data),r=t.language,i=t.code,l=t.immediateClose;e.postMessage(a.highlight(i,a.languages[r],r)),l&&e.close()}),!1),a):a;var g=a.util.currentScript();function f(){a.manual||a.highlightAll()}if(g&&(a.filename=g.src,g.hasAttribute("data-manual")&&(a.manual=!0)),!a.manual){var h=document.readyState;"loading"===h||"interactive"===h&&g&&g.defer?document.addEventListener("DOMContentLoaded",f):window.requestAnimationFrame?window.requestAnimationFrame(f):window.setTimeout(f,16)}return a}(_self);"undefined"!=typeof module&&module.exports&&(module.exports=Prism),"undefined"!=typeof global&&(global.Prism=Prism); +Prism.languages.clike={comment:[{pattern:/(^|[^\\])\/\*[\s\S]*?(?:\*\/|$)/,lookbehind:!0,greedy:!0},{pattern:/(^|[^\\:])\/\/.*/,lookbehind:!0,greedy:!0}],string:{pattern:/(["'])(?:\\(?:\r\n|[\s\S])|(?!\1)[^\\\r\n])*\1/,greedy:!0},"class-name":{pattern:/(\b(?:class|extends|implements|instanceof|interface|new|trait)\s+|\bcatch\s+\()[\w.\\]+/i,lookbehind:!0,inside:{punctuation:/[.\\]/}},keyword:/\b(?:break|catch|continue|do|else|finally|for|function|if|in|instanceof|new|null|return|throw|try|while)\b/,boolean:/\b(?:false|true)\b/,function:/\b\w+(?=\()/,number:/\b0x[\da-f]+\b|(?:\b\d+(?:\.\d*)?|\B\.\d+)(?:e[+-]?\d+)?/i,operator:/[<>]=?|[!=]=?=?|--?|\+\+?|&&?|\|\|?|[?*/~^%]/,punctuation:/[{}[\];(),.:]/}; +Prism.languages.javascript=Prism.languages.extend("clike",{"class-name":[Prism.languages.clike["class-name"],{pattern:/(^|[^$\w\xA0-\uFFFF])(?!\s)[_$A-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\.(?:constructor|prototype))/,lookbehind:!0}],keyword:[{pattern:/((?:^|\})\s*)catch\b/,lookbehind:!0},{pattern:/(^|[^.]|\.\.\.\s*)\b(?:as|assert(?=\s*\{)|async(?=\s*(?:function\b|\(|[$\w\xA0-\uFFFF]|$))|await|break|case|class|const|continue|debugger|default|delete|do|else|enum|export|extends|finally(?=\s*(?:\{|$))|for|from(?=\s*(?:['"]|$))|function|(?:get|set)(?=\s*(?:[#\[$\w\xA0-\uFFFF]|$))|if|implements|import|in|instanceof|interface|let|new|null|of|package|private|protected|public|return|static|super|switch|this|throw|try|typeof|undefined|var|void|while|with|yield)\b/,lookbehind:!0}],function:/#?(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\s*(?:\.\s*(?:apply|bind|call)\s*)?\()/,number:{pattern:RegExp("(^|[^\\w$])(?:NaN|Infinity|0[bB][01]+(?:_[01]+)*n?|0[oO][0-7]+(?:_[0-7]+)*n?|0[xX][\\dA-Fa-f]+(?:_[\\dA-Fa-f]+)*n?|\\d+(?:_\\d+)*n|(?:\\d+(?:_\\d+)*(?:\\.(?:\\d+(?:_\\d+)*)?)?|\\.\\d+(?:_\\d+)*)(?:[Ee][+-]?\\d+(?:_\\d+)*)?)(?![\\w$])"),lookbehind:!0},operator:/--|\+\+|\*\*=?|=>|&&=?|\|\|=?|[!=]==|<<=?|>>>?=?|[-+*/%&|^!=<>]=?|\.{3}|\?\?=?|\?\.?|[~:]/}),Prism.languages.javascript["class-name"][0].pattern=/(\b(?:class|extends|implements|instanceof|interface|new)\s+)[\w.\\]+/,Prism.languages.insertBefore("javascript","keyword",{regex:{pattern:RegExp("((?:^|[^$\\w\\xA0-\\uFFFF.\"'\\])\\s]|\\b(?:return|yield))\\s*)/(?:(?:\\[(?:[^\\]\\\\\r\n]|\\\\.)*\\]|\\\\.|[^/\\\\\\[\r\n])+/[dgimyus]{0,7}|(?:\\[(?:[^[\\]\\\\\r\n]|\\\\.|\\[(?:[^[\\]\\\\\r\n]|\\\\.|\\[(?:[^[\\]\\\\\r\n]|\\\\.)*\\])*\\])*\\]|\\\\.|[^/\\\\\\[\r\n])+/[dgimyus]{0,7}v[dgimyus]{0,7})(?=(?:\\s|/\\*(?:[^*]|\\*(?!/))*\\*/)*(?:$|[\r\n,.;:})\\]]|//))"),lookbehind:!0,greedy:!0,inside:{"regex-source":{pattern:/^(\/)[\s\S]+(?=\/[a-z]*$)/,lookbehind:!0,alias:"language-regex",inside:Prism.languages.regex},"regex-delimiter":/^\/|\/$/,"regex-flags":/^[a-z]+$/}},"function-variable":{pattern:/#?(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\s*[=:]\s*(?:async\s*)?(?:\bfunction\b|(?:\((?:[^()]|\([^()]*\))*\)|(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*)\s*=>))/,alias:"function"},parameter:[{pattern:/(function(?:\s+(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*)?\s*\(\s*)(?!\s)(?:[^()\s]|\s+(?![\s)])|\([^()]*\))+(?=\s*\))/,lookbehind:!0,inside:Prism.languages.javascript},{pattern:/(^|[^$\w\xA0-\uFFFF])(?!\s)[_$a-z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\s*=>)/i,lookbehind:!0,inside:Prism.languages.javascript},{pattern:/(\(\s*)(?!\s)(?:[^()\s]|\s+(?![\s)])|\([^()]*\))+(?=\s*\)\s*=>)/,lookbehind:!0,inside:Prism.languages.javascript},{pattern:/((?:\b|\s|^)(?!(?:as|async|await|break|case|catch|class|const|continue|debugger|default|delete|do|else|enum|export|extends|finally|for|from|function|get|if|implements|import|in|instanceof|interface|let|new|null|of|package|private|protected|public|return|set|static|super|switch|this|throw|try|typeof|undefined|var|void|while|with|yield)(?![$\w\xA0-\uFFFF]))(?:(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*\s*)\(\s*|\]\s*\(\s*)(?!\s)(?:[^()\s]|\s+(?![\s)])|\([^()]*\))+(?=\s*\)\s*\{)/,lookbehind:!0,inside:Prism.languages.javascript}],constant:/\b[A-Z](?:[A-Z_]|\dx?)*\b/}),Prism.languages.insertBefore("javascript","string",{hashbang:{pattern:/^#!.*/,greedy:!0,alias:"comment"},"template-string":{pattern:/`(?:\\[\s\S]|\$\{(?:[^{}]|\{(?:[^{}]|\{[^}]*\})*\})+\}|(?!\$\{)[^\\`])*`/,greedy:!0,inside:{"template-punctuation":{pattern:/^`|`$/,alias:"string"},interpolation:{pattern:/((?:^|[^\\])(?:\\{2})*)\$\{(?:[^{}]|\{(?:[^{}]|\{[^}]*\})*\})+\}/,lookbehind:!0,inside:{"interpolation-punctuation":{pattern:/^\$\{|\}$/,alias:"punctuation"},rest:Prism.languages.javascript}},string:/[\s\S]+/}},"string-property":{pattern:/((?:^|[,{])[ \t]*)(["'])(?:\\(?:\r\n|[\s\S])|(?!\2)[^\\\r\n])*\2(?=\s*:)/m,lookbehind:!0,greedy:!0,alias:"property"}}),Prism.languages.insertBefore("javascript","operator",{"literal-property":{pattern:/((?:^|[,{])[ \t]*)(?!\s)[_$a-zA-Z\xA0-\uFFFF](?:(?!\s)[$\w\xA0-\uFFFF])*(?=\s*:)/m,lookbehind:!0,alias:"property"}}),Prism.languages.markup&&(Prism.languages.markup.tag.addInlined("script","javascript"),Prism.languages.markup.tag.addAttribute("on(?:abort|blur|change|click|composition(?:end|start|update)|dblclick|error|focus(?:in|out)?|key(?:down|up)|load|mouse(?:down|enter|leave|move|out|over|up)|reset|resize|scroll|select|slotchange|submit|unload|wheel)","javascript")),Prism.languages.js=Prism.languages.javascript; diff --git a/src/main/resources/templates/auto-split-pdf.html b/src/main/resources/templates/auto-split-pdf.html index 4f3045e0..d6f68fe1 100644 --- a/src/main/resources/templates/auto-split-pdf.html +++ b/src/main/resources/templates/auto-split-pdf.html @@ -22,7 +22,7 @@
  • -
    +

    diff --git a/src/main/resources/templates/convert/markdown-to-pdf.html b/src/main/resources/templates/convert/markdown-to-pdf.html new file mode 100644 index 00000000..4637d129 --- /dev/null +++ b/src/main/resources/templates/convert/markdown-to-pdf.html @@ -0,0 +1,30 @@ + + + + + + +
    +
    +
    +

    +
    +
    +
    +

    + +
    +
    + + + +

    +

    +
    +
    +
    +
    +
    +
    + + diff --git a/src/main/resources/templates/extract-page.html b/src/main/resources/templates/extract-page.html new file mode 100644 index 00000000..9dd1b9ed --- /dev/null +++ b/src/main/resources/templates/extract-page.html @@ -0,0 +1,33 @@ + + + + + + + +
    +
    +
    +

    +
    +
    +
    +

    +
    +
    + +
    + + +
    + + +
    +
    +
    +
    +
    +
    +
    + + \ No newline at end of file diff --git a/src/main/resources/templates/fragments/common.html b/src/main/resources/templates/fragments/common.html index eb079166..42477113 100644 --- a/src/main/resources/templates/fragments/common.html +++ b/src/main/resources/templates/fragments/common.html @@ -98,7 +98,10 @@ -
    +
    @@ -114,12 +117,7 @@
    - - + diff --git a/src/main/resources/templates/fragments/navbar.html b/src/main/resources/templates/fragments/navbar.html index 5b4b594a..ea253dab 100644 --- a/src/main/resources/templates/fragments/navbar.html +++ b/src/main/resources/templates/fragments/navbar.html @@ -40,7 +40,7 @@ --> -
    -
    + +
    +
    +
    + +
    +
    +
    + + \ No newline at end of file