Compare commits

...

77 Commits

Author SHA1 Message Date
Anthony Stirling
48be772703 Update build.gradle 2024-02-03 22:54:33 +00:00
Anthony Stirling
a9edb49723 Merge pull request #772 from Stirling-Tools/pixeebot/drip-2024-02-02-pixee-java/switch-literal-first
Switch order of literals to prevent NullPointerException
2024-02-02 00:31:13 +00:00
pixeebot[bot]
95471a2fba Switch order of literals to prevent NullPointerException 2024-02-02 00:29:18 +00:00
Anthony Stirling
36c277961f Merge pull request #771 from Stirling-Tools/pixeebot/drip-2024-02-02-pixee-java/upgrade-tempfile-to-nio
Modernize and secure temp file creation
2024-02-02 00:20:39 +00:00
pixeebot[bot]
734fff5618 Modernize and secure temp file creation 2024-02-02 00:15:46 +00:00
Anthony Stirling
16136b2f6f Merge pull request #769 from Stirling-Tools/pixeebot/drip-2024-02-01-pixee-java/sanitize-spring-multipart-filename
Sanitized user-provided file names in HTTP multipart uploads
2024-02-01 23:51:48 +00:00
pixeebot[bot]
c8dfe10a7c Sanitized user-provided file names in HTTP multipart uploads 2024-02-01 23:48:27 +00:00
Anthony Stirling
c8481fdbef Merge pull request #768 from Stirling-Tools/pixeebot/drip-2024-02-01-pixee-java/sandbox-url-creation
Sandboxed URL creation to prevent SSRF attacks
2024-02-01 23:37:41 +00:00
pixeebot[bot]
8e0c02a151 Sandboxed URL creation to prevent SSRF attacks 2024-02-01 23:35:05 +00:00
Anthony Stirling
271906097d Merge pull request #767 from Stirling-Tools/pixeebot/drip-2024-02-01-pixee-java/harden-process-creation
Introduced protections against system command injection
2024-02-01 23:22:59 +00:00
pixeebot[bot]
91caa2a097 Introduced protections against system command injection 2024-02-01 23:18:24 +00:00
Anthony Stirling
6105451e08 Merge pull request #766 from Stirling-Tools/pixeebot/drip-2024-02-01-pixee-java/limit-readline
Protect `readLine()` against DoS
2024-02-01 23:05:22 +00:00
pixeebot[bot]
450e090252 Protect readLine() against DoS 2024-02-01 23:01:04 +00:00
Anthony Stirling
86635f85b4 Merge pull request #764 from Stirling-Tools/pixeebot/drip-2024-02-01-pixee-java/harden-zip-entry-paths
Introduced protections against "zip slip"  attacks
2024-02-01 22:50:55 +00:00
Anthony Stirling
a7214a2171 Merge branch 'main' into pixeebot/drip-2024-02-01-pixee-java/harden-zip-entry-paths 2024-02-01 22:46:16 +00:00
Anthony Stirling
61cd473e6c Merge pull request #763 from Stirling-Tools/Frooodle-patch-1
Frooodle patch 1
2024-02-01 22:45:59 +00:00
Anthony Stirling
d67690d995 Update build.gradle 2024-02-01 22:43:25 +00:00
pixeebot[bot]
e20f4fe31a Introduced protections against "zip slip" attacks 2024-02-01 22:41:49 +00:00
Anthony Stirling
2deb40bb6d Update build.gradle 2024-02-01 22:41:13 +00:00
Anthony Stirling
bfee745cca Update build.gradle 2024-02-01 22:40:36 +00:00
Anthony Stirling
68d390e633 Merge pull request #707 from tkymmm/main
Update messages_ja_JP.properties
2024-02-01 09:23:28 +00:00
Eric
a884f1b3d4 Merge branch 'main' into main 2024-02-01 00:13:14 -05:00
Eric
cda8f7b27d Merge pull request #758 from Stirling-Tools/watermark_newline
feat: support '\n' literal in add watermark
2024-01-31 12:56:16 -05:00
Eric
d524fcc157 Merge branch 'main' into watermark_newline 2024-01-31 12:55:29 -05:00
Eric
e05e34f217 Merge pull request #754 from Stirling-Tools/fix_extract_image
fix: infinite recursion in `ImageFinder`
2024-01-31 12:55:07 -05:00
Eric
73bbb516d2 Merge branch 'main' into fix_extract_image 2024-01-31 12:51:47 -05:00
Anthony Stirling
c2aaa65228 Merge pull request #755 from ProvaTeams/Add-required-attribute-to-input-file
Add required attribute to input file
2024-01-31 17:37:45 +00:00
Anthony Stirling
91722af8b0 Merge branch 'main' into Add-required-attribute-to-input-file 2024-01-31 17:20:35 +00:00
Eric
71d33f6047 Merge pull request #760 from Stirling-Tools/pr_template
misc: update pull request template
2024-01-31 11:39:03 -05:00
sbplat
903faadff3 misc: update pull request template 2024-01-31 11:04:40 -05:00
ProvaTeams
55020d45f8 Using the flag logic 2024-01-31 14:09:16 +00:00
sbplat
2d37c707e2 feat: support '\n' literal in add watermark 2024-01-31 00:54:51 -05:00
ProvaTeams
b00f8c80ec Add required attribute to input file 2024-01-29 19:13:57 +01:00
sbplat
53afb865c5 refactor: replace ImageFinder with getAllImages using strategy behind ExtractImagesController 2024-01-29 11:23:58 -05:00
Anthony Stirling
6f3e317484 Merge pull request #736 from michelheusschen/update-dutch-translation
Update dutch translation
2024-01-29 08:18:43 +00:00
Michel Heusschen
e77d2847ea add new translations 2024-01-29 07:49:02 +01:00
Michel Heusschen
46abae9acc Merge branch 'main' of https://github.com/michelheusschen/Stirling-PDF into update-dutch-translation 2024-01-29 07:27:28 +01:00
Anthony Stirling
571320b9ba Merge pull request #703 from cloud-erik/main
Formating of language string in example
2024-01-28 20:23:21 +00:00
Anthony Stirling
07e9fcb6cc Merge pull request #737 from michelheusschen/fix/merge-tool-file-selection
fix: show only selected files for merge tool
2024-01-28 20:22:45 +00:00
Anthony Stirling
7a8719743d Merge pull request #751 from albanobattistella/patch-8
Update messages_it_IT.properties
2024-01-28 20:21:54 +00:00
albanobattistella
746f2d0949 Update messages_it_IT.properties 2024-01-28 21:18:57 +01:00
Anthony Stirling
3986858adb Update build.gradle 2024-01-28 20:11:41 +00:00
Anthony Stirling
589cb8d91f Add files via upload 2024-01-28 20:11:15 +00:00
Anthony Stirling
705c75e51d Merge pull request #749 from Stirling-Tools/Frooodle-patch-1
Auto split fix
2024-01-28 18:18:50 +00:00
Anthony Stirling
6acb593411 Update AutoSplitPdfController.java 2024-01-28 18:17:32 +00:00
Anthony Stirling
8060451713 Update AutoSplitPdfController.java 2024-01-28 18:16:59 +00:00
Anthony Stirling
6130f14d5a Merge pull request #748 from Stirling-Tools/pipelineFixes
Pipeline fixes
2024-01-28 17:48:48 +00:00
Anthony Stirling
0fbc461877 Merge branch 'main' into pipelineFixes 2024-01-28 17:41:17 +00:00
Anthony Stirling
89e461e4f6 formats 2024-01-28 17:39:07 +00:00
Anthony Stirling
ba4ad1aff9 langs 2024-01-28 17:37:02 +00:00
Anthony Stirling
be1904749b Add stamp, fix html, change accepts 2024-01-28 17:36:17 +00:00
Michel Heusschen
166fa0eb87 fix: show only selected files for merge tool 2024-01-23 16:06:57 +01:00
Michel Heusschen
9a06e7a3ca typo 2024-01-23 14:14:54 +01:00
Michel Heusschen
cb12af2d95 update Dutch (nl_NL) translation 2024-01-23 14:11:53 +01:00
Eric
46032b8ebb Merge pull request #719 from dhenry437/fix/multi-tool-filename
Multi-tool bug with dropping files
2024-01-22 14:28:07 -05:00
Anthony Stirling
4a6bd60466 Merge branch 'main' into fix/multi-tool-filename 2024-01-22 18:38:25 +00:00
Eric
f85c8ea5ec Merge pull request #730 from Stirling-Tools/fix-remove-blank-pages
fix: remove blank pages not handling EXIT_FAILURE code properly
2024-01-22 10:58:59 -05:00
sbplat
06ef09035d fix: remove blank pages not handling EXIT_FAILURE code properly 2024-01-22 10:39:29 -05:00
Anthony Stirling
13301e4606 Merge branch 'main' into fix/multi-tool-filename 2024-01-20 22:29:59 +00:00
Anthony Stirling
b59651a0fb Merge pull request #722 from phfuh/push
Update messages_de_DE.properties
2024-01-20 19:20:53 +00:00
Anthony Stirling
86b8d7f804 Merge pull request #723 from andrewdolphin/patch-1
Remove bootstrap css from view-pdf.html
2024-01-20 19:13:54 +00:00
andrewdolphin
e4dded3faa Remove bootstrap css from view-pdf.html that is causing issues when adding images 2024-01-19 10:31:05 +00:00
Anthony Stirling
75cf3ed0c1 Resolve wkhtml and formatting 2024-01-18 23:28:39 +00:00
Anthony Stirling
2fa68be36b pipeline fixes 2024-01-18 21:57:41 +00:00
phfuh
d09b252a4a Update messages_de_DE.properties
Translated the new entries, some corrections
2024-01-18 19:48:21 +01:00
sbplat
a5165b04cd fix(multi-tool): refactor fileInput.js into a class, fix filename variable typos, and update updateFilename logic for dropping files 2024-01-18 01:08:31 -05:00
Dan Henry
1bd17eded6 call updateFilenameInput on file drop 2024-01-18 12:08:32 +11:00
Dan Henry
18d289d3b7 Move filename input logic to its own function 2024-01-18 12:07:02 +11:00
Stirling-PDF-Bot
e43e6d18b9 Update 3rd Party Licenses 2024-01-17 23:52:12 +00:00
tkymmm
ec5a3c5948 Update messages_ja_JP.properties
Updated Japanese translation.
2024-01-15 10:16:46 +09:00
Stirling-PDF-Bot
89c0e721b8 Update 3rd Party Licenses 2024-01-15 00:13:30 +00:00
cloud-erik
c807d20590 Update docker-compose-latest-lite-security.yml
Exemple DEFAULTLOCALE formating
2024-01-14 10:32:34 +01:00
cloud-erik
686af16cf5 Update docker-compose-latest-lite.yml
Exemple DEFAULTLOCALE formating
2024-01-14 10:32:23 +01:00
cloud-erik
219dd7834f Update docker-compose-latest-security.yml
Exemple DEFAULTLOCALE formating
2024-01-14 10:32:12 +01:00
cloud-erik
1b83fda349 Update docker-compose-latest-ultra-lite-security.yml
Exemple DEFAULTLOCALE formating
2024-01-14 10:32:00 +01:00
cloud-erik
490acddc65 Update docker-compose-latest-ultra-lite.yml
Exemple DEFAULTLOCALE formating
2024-01-14 10:31:45 +01:00
cloud-erik
e69ed06b4f Update docker-compose-latest.yml
Exemple DEFAULTLOCALE formating
2024-01-14 10:29:21 +01:00
106 changed files with 2657 additions and 768 deletions

View File

@@ -1,4 +1,18 @@
# License Agreement for Contributions
By submitting this pull request, I acknowledge and agree that my contributions will be included in Stirling-PDF and that they can be relicensed in the future under MPL 2.0 (Mozilla Public License Version 2.0) license.
# Description
Please provide a summary of the changes, including relevant motivation and context.
Closes #(issue_number)
## Checklist:
- [ ] I have read the [Contribution Guidelines](https://github.com/Stirling-Tools/Stirling-PDF/blob/main/CONTRIBUTING.md)
- [ ] I have performed a self-review of my own code
- [ ] I have commented my code, particularly in hard-to-understand areas
- [ ] My changes generate no new warnings
## Contributor License Agreement
By submitting this pull request, I acknowledge and agree that my contributions will be included in Stirling-PDF and that they can be relicensed in the future under the MPL 2.0 (Mozilla Public License Version 2.0) license.
(This does not change the general open-source nature of Stirling-PDF, simply moving from one license to another license)

View File

@@ -1,3 +0,0 @@
# License Agreement for Contributions
By submitting this pull request, I acknowledge and agree that my contributions will be included in Stirling-PDF and that they can be relicensed in the future under MPL 2.0 (Mozilla Public License Version 2.0) license.
(This does not change the open-source nature of Stirling-PDF, simply moving from one license to another license)

View File

@@ -1,18 +1,18 @@
plugins {
id 'java'
id 'org.springframework.boot' version '3.2.1'
id 'org.springframework.boot' version '3.2.2'
id 'io.spring.dependency-management' version '1.1.3'
id 'org.springdoc.openapi-gradle-plugin' version '1.8.0'
id "io.swagger.swaggerhub" version "1.3.2"
id 'edu.sc.seis.launch4j' version '3.0.5'
id 'com.diffplug.spotless' version '6.23.3'
id 'com.diffplug.spotless' version '6.25.0'
id 'com.github.jk1.dependency-license-report' version '2.5'
}
import com.github.jk1.license.render.*
group = 'stirling.software'
version = '0.20.0'
version = '0.20.2'
sourceCompatibility = '17'
repositories {
@@ -91,20 +91,22 @@ dependencies {
implementation 'ch.qos.logback:logback-core:1.4.14'
implementation 'org.springframework:spring-webmvc:6.1.2'
implementation("io.github.pixee:java-security-toolkit:1.1.2")
implementation 'org.yaml:snakeyaml:2.2'
implementation 'org.springframework.boot:spring-boot-starter-web:3.2.1'
implementation 'org.springframework.boot:spring-boot-starter-thymeleaf:3.2.1'
implementation 'org.springframework.boot:spring-boot-starter-web:3.2.2'
implementation 'org.springframework.boot:spring-boot-starter-thymeleaf:3.2.2'
if (System.getenv('DOCKER_ENABLE_SECURITY') != 'false') {
implementation 'org.springframework.boot:spring-boot-starter-security:3.2.1'
implementation 'org.springframework.boot:spring-boot-starter-security:3.2.2'
implementation 'org.thymeleaf.extras:thymeleaf-extras-springsecurity5:3.1.2.RELEASE'
implementation "org.springframework.boot:spring-boot-starter-data-jpa:3.2.1"
implementation "org.springframework.boot:spring-boot-starter-data-jpa:3.2.2"
//2.2.x requires rebuild of DB file.. need migration path
implementation "com.h2database:h2:2.1.214"
}
testImplementation 'org.springframework.boot:spring-boot-starter-test:3.2.1'
testImplementation 'org.springframework.boot:spring-boot-starter-test:3.2.2'
// Batik
implementation 'org.apache.xmlgraphics:batik-all:1.17'
@@ -147,8 +149,8 @@ dependencies {
implementation 'org.bouncycastle:bcprov-jdk18on:1.77'
implementation 'org.bouncycastle:bcpkix-jdk18on:1.77'
implementation 'org.springframework.boot:spring-boot-starter-actuator'
implementation 'io.micrometer:micrometer-core'
implementation 'org.springframework.boot:spring-boot-starter-actuator:3.2.2'
implementation 'io.micrometer:micrometer-core:1.12.2'
implementation group: 'com.google.zxing', name: 'core', version: '3.5.2'
// https://mvnrepository.com/artifact/org.commonmark/commonmark
implementation 'org.commonmark:commonmark:0.21.0'
@@ -156,7 +158,7 @@ dependencies {
// https://mvnrepository.com/artifact/com.github.vladimir-bukhtoyarov/bucket4j-core
implementation 'com.github.vladimir-bukhtoyarov:bucket4j-core:7.6.0'
developmentOnly("org.springframework.boot:spring-boot-devtools")
developmentOnly("org.springframework.boot:spring-boot-devtools:3.2.2")
compileOnly 'org.projectlombok:lombok:1.18.30'
annotationProcessor 'org.projectlombok:lombok:1.18.28'
}

View File

@@ -21,7 +21,7 @@ services:
environment:
DOCKER_ENABLE_SECURITY: "true"
SECURITY_ENABLELOGIN: "true"
SYSTEM_DEFAULTLOCALE: en_US
SYSTEM_DEFAULTLOCALE: en-US
UI_APPNAME: Stirling-PDF-Lite
UI_HOMEDESCRIPTION: Demo site for Stirling-PDF-Lite Latest with Security
UI_APPNAMENAVBAR: Stirling-PDF-Lite Latest

View File

@@ -20,7 +20,7 @@ services:
environment:
DOCKER_ENABLE_SECURITY: "false"
SECURITY_ENABLELOGIN: "false"
SYSTEM_DEFAULTLOCALE: en_US
SYSTEM_DEFAULTLOCALE: en-US
UI_APPNAME: Stirling-PDF-Lite
UI_HOMEDESCRIPTION: Demo site for Stirling-PDF-Lite Latest
UI_APPNAMENAVBAR: Stirling-PDF-Lite Latest

View File

@@ -21,7 +21,7 @@ services:
environment:
DOCKER_ENABLE_SECURITY: "true"
SECURITY_ENABLELOGIN: "true"
SYSTEM_DEFAULTLOCALE: en_US
SYSTEM_DEFAULTLOCALE: en-US
UI_APPNAME: Stirling-PDF
UI_HOMEDESCRIPTION: Demo site for Stirling-PDF Latest with Security
UI_APPNAMENAVBAR: Stirling-PDF Latest

View File

@@ -21,7 +21,7 @@ services:
environment:
DOCKER_ENABLE_SECURITY: "true"
SECURITY_ENABLELOGIN: "true"
SYSTEM_DEFAULTLOCALE: en_US
SYSTEM_DEFAULTLOCALE: en-US
UI_APPNAME: Stirling-PDF-Lite
UI_HOMEDESCRIPTION: Demo site for Stirling-PDF-Lite Latest with Security
UI_APPNAMENAVBAR: Stirling-PDF-Lite Latest

View File

@@ -20,7 +20,7 @@ services:
environment:
DOCKER_ENABLE_SECURITY: "false"
SECURITY_ENABLELOGIN: "false"
SYSTEM_DEFAULTLOCALE: en_US
SYSTEM_DEFAULTLOCALE: en-US
UI_APPNAME: Stirling-PDF-Ultra-lite
UI_HOMEDESCRIPTION: Demo site for Stirling-PDF-Ultra-lite Latest
UI_APPNAMENAVBAR: Stirling-PDF-Ultra-lite Latest

View File

@@ -21,7 +21,7 @@ services:
environment:
DOCKER_ENABLE_SECURITY: "false"
SECURITY_ENABLELOGIN: "false"
SYSTEM_DEFAULTLOCALE: en_US
SYSTEM_DEFAULTLOCALE: en-US
UI_APPNAME: Stirling-PDF
UI_HOMEDESCRIPTION: Demo site for Stirling-PDF Latest
UI_APPNAMENAVBAR: Stirling-PDF Latest

View File

@@ -16,7 +16,7 @@ public class PropSync {
Map<String, String> enProps = linesToProps(enLines);
for (File file : files) {
if (!file.getName().equals("messages_en_GB.properties")) {
if (!"messages_en_GB.properties".equals(file.getName())) {
System.out.println("Processing file: " + file.getName());
List<String> lines;
try {

View File

@@ -1,5 +1,6 @@
package stirling.software.SPDF;
import io.github.pixee.security.SystemCommand;
import java.io.IOException;
import java.net.InetSocketAddress;
import java.net.Socket;
@@ -44,7 +45,7 @@ public class LibreOfficeListener {
}
// Start the listener process
process = Runtime.getRuntime().exec("unoconv --listener");
process = SystemCommand.runCommand(Runtime.getRuntime(), "unoconv --listener");
lastActivityTime = System.currentTimeMillis();
// Start a background thread to monitor the activity timeout

View File

@@ -1,5 +1,6 @@
package stirling.software.SPDF;
import io.github.pixee.security.SystemCommand;
import java.nio.file.Files;
import java.nio.file.Paths;
import java.util.Collections;
@@ -24,7 +25,7 @@ public class SPdfApplication {
public void init() {
// Check if the BROWSER_OPEN environment variable is set to true
String browserOpenEnv = env.getProperty("BROWSER_OPEN");
boolean browserOpen = browserOpenEnv != null && browserOpenEnv.equalsIgnoreCase("true");
boolean browserOpen = browserOpenEnv != null && "true".equalsIgnoreCase(browserOpenEnv);
if (browserOpen) {
try {
@@ -34,7 +35,7 @@ public class SPdfApplication {
Runtime rt = Runtime.getRuntime();
if (os.contains("win")) {
// For Windows
rt.exec("rundll32 url.dll,FileProtocolHandler " + url);
SystemCommand.runCommand(rt, "rundll32 url.dll,FileProtocolHandler " + url);
}
} catch (Exception e) {
e.printStackTrace();

View File

@@ -84,7 +84,7 @@ public class ConfigInitializer
for (String line : templateLines) {
String key = extractKey.apply(line);
if (line.trim().equalsIgnoreCase("AutomaticallyGenerated:")) {
if ("AutomaticallyGenerated:".equalsIgnoreCase(line.trim())) {
insideAutoGenerated = true;
mergedLines.add(line);
continue;

View File

@@ -115,4 +115,4 @@ public class UserAuthenticationFilter extends OncePerRequestFilter {
return false;
}
}
}

View File

@@ -1,5 +1,6 @@
package stirling.software.SPDF.controller.api;
import io.github.pixee.security.Filenames;
import java.awt.Color;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
@@ -136,6 +137,6 @@ public class MultiPageLayoutController {
byte[] result = baos.toByteArray();
return WebResponseUtils.bytesToWebResponse(
result,
file.getOriginalFilename().replaceFirst("[.][^.]+$", "") + "_layoutChanged.pdf");
Filenames.toSimpleFileName(file.getOriginalFilename()).replaceFirst("[.][^.]+$", "") + "_layoutChanged.pdf");
}
}

View File

@@ -1,8 +1,10 @@
package stirling.software.SPDF.controller.api;
import io.github.pixee.security.Filenames;
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.IOException;
import java.nio.file.Files;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
@@ -75,7 +77,7 @@ public class PdfOverlayController {
overlay.overlay(overlayGuide).save(outputStream);
byte[] data = outputStream.toByteArray();
String outputFilename =
baseFile.getOriginalFilename().replaceFirst("[.][^.]+$", "")
Filenames.toSimpleFileName(baseFile.getOriginalFilename()).replaceFirst("[.][^.]+$", "")
+ "_overlayed.pdf"; // Remove file extension and append .pdf
return WebResponseUtils.bytesToWebResponse(
@@ -135,7 +137,7 @@ public class PdfOverlayController {
try (PDDocument overlayPdf = Loader.loadPDF(overlayFiles[overlayFileIndex])) {
PDDocument singlePageDocument = new PDDocument();
singlePageDocument.addPage(overlayPdf.getPage(pageCountInCurrentOverlay));
File tempFile = File.createTempFile("overlay-page-", ".pdf");
File tempFile = Files.createTempFile("overlay-page-", ".pdf").toFile();
singlePageDocument.save(tempFile);
singlePageDocument.close();

View File

@@ -1,5 +1,6 @@
package stirling.software.SPDF.controller.api;
import io.github.pixee.security.Filenames;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
@@ -57,7 +58,7 @@ public class RearrangePagesPDFController {
}
return WebResponseUtils.pdfDocToWebResponse(
document,
pdfFile.getOriginalFilename().replaceFirst("[.][^.]+$", "") + "_removed_pages.pdf");
Filenames.toSimpleFileName(pdfFile.getOriginalFilename()).replaceFirst("[.][^.]+$", "") + "_removed_pages.pdf");
}
private List<Integer> removeFirst(int totalPages) {
@@ -211,7 +212,7 @@ public class RearrangePagesPDFController {
return WebResponseUtils.pdfDocToWebResponse(
document,
pdfFile.getOriginalFilename().replaceFirst("[.][^.]+$", "")
Filenames.toSimpleFileName(pdfFile.getOriginalFilename()).replaceFirst("[.][^.]+$", "")
+ "_rearranged.pdf");
} catch (IOException e) {
logger.error("Failed rearranging documents", e);

View File

@@ -1,5 +1,6 @@
package stirling.software.SPDF.controller.api;
import io.github.pixee.security.Filenames;
import java.io.IOException;
import org.apache.pdfbox.Loader;
@@ -49,6 +50,6 @@ public class RotationController {
return WebResponseUtils.pdfDocToWebResponse(
document,
pdfFile.getOriginalFilename().replaceFirst("[.][^.]+$", "") + "_rotated.pdf");
Filenames.toSimpleFileName(pdfFile.getOriginalFilename()).replaceFirst("[.][^.]+$", "") + "_rotated.pdf");
}
}

View File

@@ -1,5 +1,6 @@
package stirling.software.SPDF.controller.api;
import io.github.pixee.security.Filenames;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.util.HashMap;
@@ -112,6 +113,6 @@ public class ScalePagesController {
return WebResponseUtils.bytesToWebResponse(
baos.toByteArray(),
file.getOriginalFilename().replaceFirst("[.][^.]+$", "") + "_scaled.pdf");
Filenames.toSimpleFileName(file.getOriginalFilename()).replaceFirst("[.][^.]+$", "") + "_scaled.pdf");
}
}

View File

@@ -1,5 +1,6 @@
package stirling.software.SPDF.controller.api;
import io.github.pixee.security.Filenames;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.nio.file.Files;
@@ -83,7 +84,7 @@ public class SplitPDFController {
Path zipFile = Files.createTempFile("split_documents", ".zip");
String filename = file.getOriginalFilename().replaceFirst("[.][^.]+$", "");
String filename = Filenames.toSimpleFileName(file.getOriginalFilename()).replaceFirst("[.][^.]+$", "");
try (ZipOutputStream zipOut = new ZipOutputStream(Files.newOutputStream(zipFile))) {
// loop through the split documents and write them to the zip file
for (int i = 0; i < splitDocumentsBoas.size(); i++) {

View File

@@ -1,5 +1,6 @@
package stirling.software.SPDF.controller.api;
import io.github.pixee.security.Filenames;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.nio.file.Files;
@@ -64,7 +65,7 @@ public class SplitPdfBySectionsController {
sourceDocument.close();
Path zipFile = Files.createTempFile("split_documents", ".zip");
String filename = file.getOriginalFilename().replaceFirst("[.][^.]+$", "");
String filename = Filenames.toSimpleFileName(file.getOriginalFilename()).replaceFirst("[.][^.]+$", "");
byte[] data;
try (ZipOutputStream zipOut = new ZipOutputStream(Files.newOutputStream(zipFile))) {
@@ -121,8 +122,8 @@ public class SplitPdfBySectionsController {
subDoc, subPage, AppendMode.APPEND, true, true)) {
// Set clipping area and position
float translateX = -subPageWidth * i;
//float translateY = height - subPageHeight * (verticalDivisions - j);
// float translateY = height - subPageHeight * (verticalDivisions - j);
float translateY = -subPageHeight * (verticalDivisions - 1 - j);
contentStream.saveGraphicsState();

View File

@@ -1,5 +1,6 @@
package stirling.software.SPDF.controller.api;
import io.github.pixee.security.Filenames;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.nio.file.Files;
@@ -120,7 +121,7 @@ public class SplitPdfBySizeController {
sourceDocument.close();
Path zipFile = Files.createTempFile("split_documents", ".zip");
String filename = file.getOriginalFilename().replaceFirst("[.][^.]+$", "");
String filename = Filenames.toSimpleFileName(file.getOriginalFilename()).replaceFirst("[.][^.]+$", "");
byte[] data;
try (ZipOutputStream zipOut = new ZipOutputStream(Files.newOutputStream(zipFile))) {

View File

@@ -1,5 +1,6 @@
package stirling.software.SPDF.controller.api.converters;
import io.github.pixee.security.Filenames;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.http.ResponseEntity;
@@ -43,7 +44,7 @@ public class ConvertBookToPDFController {
throw new IllegalArgumentException("Please provide a file for conversion.");
}
String originalFilename = fileInput.getOriginalFilename();
String originalFilename = Filenames.toSimpleFileName(fileInput.getOriginalFilename());
if (originalFilename != null) {
String originalFilenameLower = originalFilename.toLowerCase();

View File

@@ -1,5 +1,6 @@
package stirling.software.SPDF.controller.api.converters;
import io.github.pixee.security.Filenames;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.http.ResponseEntity;
@@ -12,7 +13,7 @@ import org.springframework.web.multipart.MultipartFile;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.tags.Tag;
import stirling.software.SPDF.model.api.GeneralFile;
import stirling.software.SPDF.model.api.converters.HTMLToPdfRequest;
import stirling.software.SPDF.utils.FileToPdf;
import stirling.software.SPDF.utils.WebResponseUtils;
@@ -30,7 +31,8 @@ public class ConvertHtmlToPDF {
summary = "Convert an HTML or ZIP (containing HTML and CSS) to PDF",
description =
"This endpoint takes an HTML or ZIP file input and converts it to a PDF format.")
public ResponseEntity<byte[]> HtmlToPdf(@ModelAttribute GeneralFile request) throws Exception {
public ResponseEntity<byte[]> HtmlToPdf(@ModelAttribute HTMLToPdfRequest request)
throws Exception {
MultipartFile fileInput = request.getFileInput();
if (fileInput == null) {
@@ -38,14 +40,14 @@ public class ConvertHtmlToPDF {
"Please provide an HTML or ZIP file for conversion.");
}
String originalFilename = fileInput.getOriginalFilename();
String originalFilename = Filenames.toSimpleFileName(fileInput.getOriginalFilename());
if (originalFilename == null
|| (!originalFilename.endsWith(".html") && !originalFilename.endsWith(".zip"))) {
throw new IllegalArgumentException("File must be either .html or .zip format.");
}
byte[] pdfBytes =
FileToPdf.convertHtmlToPdf(
fileInput.getBytes(), originalFilename, htmlFormatsInstalled);
request, fileInput.getBytes(), originalFilename, htmlFormatsInstalled);
String outputFilename =
originalFilename.replaceFirst("[.][^.]+$", "")

View File

@@ -1,5 +1,6 @@
package stirling.software.SPDF.controller.api.converters;
import io.github.pixee.security.Filenames;
import java.io.IOException;
import java.net.URLConnection;
@@ -54,9 +55,9 @@ public class ConvertImgPDFController {
colorTypeResult = ImageType.BINARY;
}
// returns bytes for image
boolean singleImage = singleOrMultiple.equals("single");
boolean singleImage = "single".equals(singleOrMultiple);
byte[] result = null;
String filename = file.getOriginalFilename().replaceFirst("[.][^.]+$", "");
String filename = Filenames.toSimpleFileName(file.getOriginalFilename()).replaceFirst("[.][^.]+$", "");
try {
result =
PdfUtils.convertFromPdf(
@@ -96,7 +97,7 @@ public class ConvertImgPDFController {
@Operation(
summary = "Convert images to a PDF file",
description =
"This endpoint converts one or more images to a PDF file. Users can specify whether to stretch the images to fit the PDF page, and whether to automatically rotate the images. Input:Image Output:PDF Type:SISO?")
"This endpoint converts one or more images to a PDF file. Users can specify whether to stretch the images to fit the PDF page, and whether to automatically rotate the images. Input:Image Output:PDF Type:MISO")
public ResponseEntity<byte[]> convertToPdf(@ModelAttribute ConvertToPdfRequest request)
throws IOException {
MultipartFile[] file = request.getFileInput();
@@ -113,6 +114,6 @@ public class ConvertImgPDFController {
private String getMediaType(String imageFormat) {
String mimeType = URLConnection.guessContentTypeFromName("." + imageFormat);
return mimeType.equals("null") ? "application/octet-stream" : mimeType;
return "null".equals(mimeType) ? "application/octet-stream" : mimeType;
}
}

View File

@@ -1,5 +1,6 @@
package stirling.software.SPDF.controller.api.converters;
import io.github.pixee.security.Filenames;
import java.util.List;
import java.util.Map;
@@ -39,7 +40,7 @@ public class ConvertMarkdownToPdf {
@Operation(
summary = "Convert a Markdown file to PDF",
description =
"This endpoint takes a Markdown file input, converts it to HTML, and then to PDF format.")
"This endpoint takes a Markdown file input, converts it to HTML, and then to PDF format. Input:MARKDOWN Output:PDF Type:SISO")
public ResponseEntity<byte[]> markdownToPdf(@ModelAttribute GeneralFile request)
throws Exception {
MultipartFile fileInput = request.getFileInput();
@@ -48,7 +49,7 @@ public class ConvertMarkdownToPdf {
throw new IllegalArgumentException("Please provide a Markdown file for conversion.");
}
String originalFilename = fileInput.getOriginalFilename();
String originalFilename = Filenames.toSimpleFileName(fileInput.getOriginalFilename());
if (originalFilename == null || !originalFilename.endsWith(".md")) {
throw new IllegalArgumentException("File must be in .md format.");
}
@@ -68,7 +69,7 @@ public class ConvertMarkdownToPdf {
byte[] pdfBytes =
FileToPdf.convertHtmlToPdf(
htmlContent.getBytes(), "converted.html", htmlFormatsInstalled);
null, htmlContent.getBytes(), "converted.html", htmlFormatsInstalled);
String outputFilename =
originalFilename.replaceFirst("[.][^.]+$", "")

View File

@@ -1,5 +1,6 @@
package stirling.software.SPDF.controller.api.converters;
import io.github.pixee.security.Filenames;
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;
@@ -31,7 +32,7 @@ public class ConvertOfficeController {
public byte[] convertToPdf(MultipartFile inputFile) throws IOException, InterruptedException {
// Check for valid file extension
String originalFilename = inputFile.getOriginalFilename();
String originalFilename = Filenames.toSimpleFileName(inputFile.getOriginalFilename());
if (originalFilename == null
|| !isValidFileExtension(FilenameUtils.getExtension(originalFilename))) {
throw new IllegalArgumentException("Invalid file extension");
@@ -89,7 +90,7 @@ public class ConvertOfficeController {
byte[] pdfByteArray = convertToPdf(inputFile);
return WebResponseUtils.bytesToWebResponse(
pdfByteArray,
inputFile.getOriginalFilename().replaceFirst("[.][^.]+$", "")
Filenames.toSimpleFileName(inputFile.getOriginalFilename()).replaceFirst("[.][^.]+$", "")
+ "_convertedToPDF.pdf");
}
}

View File

@@ -1,5 +1,6 @@
package stirling.software.SPDF.controller.api.converters;
import io.github.pixee.security.Filenames;
import java.nio.file.Files;
import java.nio.file.Path;
import java.util.ArrayList;
@@ -92,7 +93,7 @@ public class ConvertPDFToBookController {
}
String outputFilename =
fileInput.getOriginalFilename().replaceFirst("[.][^.]+$", "")
Filenames.toSimpleFileName(fileInput.getOriginalFilename()).replaceFirst("[.][^.]+$", "")
+ "."
+ outputFormat; // Remove file extension and append .pdf

View File

@@ -1,5 +1,6 @@
package stirling.software.SPDF.controller.api.converters;
import io.github.pixee.security.Filenames;
import java.nio.file.Files;
import java.nio.file.Path;
import java.util.ArrayList;
@@ -63,7 +64,7 @@ public class ConvertPDFToPDFA {
// Return the optimized PDF as a response
String outputFilename =
inputFile.getOriginalFilename().replaceFirst("[.][^.]+$", "") + "_PDFA.pdf";
Filenames.toSimpleFileName(inputFile.getOriginalFilename()).replaceFirst("[.][^.]+$", "") + "_PDFA.pdf";
return WebResponseUtils.bytesToWebResponse(pdfBytes, outputFilename);
}
}

View File

@@ -1,5 +1,6 @@
package stirling.software.SPDF.controller.api.filters;
import io.github.pixee.security.Filenames;
import java.io.IOException;
import org.apache.pdfbox.Loader;
@@ -43,7 +44,7 @@ public class FilterController {
PDDocument pdfDocument = Loader.loadPDF(inputFile.getBytes());
if (PdfUtils.hasText(pdfDocument, pageNumber, text))
return WebResponseUtils.pdfDocToWebResponse(
pdfDocument, inputFile.getOriginalFilename());
pdfDocument, Filenames.toSimpleFileName(inputFile.getOriginalFilename()));
return null;
}
@@ -60,7 +61,7 @@ public class FilterController {
PDDocument pdfDocument = Loader.loadPDF(inputFile.getBytes());
if (PdfUtils.hasImages(pdfDocument, pageNumber))
return WebResponseUtils.pdfDocToWebResponse(
pdfDocument, inputFile.getOriginalFilename());
pdfDocument, Filenames.toSimpleFileName(inputFile.getOriginalFilename()));
return null;
}

View File

@@ -1,5 +1,6 @@
package stirling.software.SPDF.controller.api.misc;
import io.github.pixee.security.Filenames;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Comparator;
@@ -133,7 +134,7 @@ public class AutoRenameController {
return WebResponseUtils.pdfDocToWebResponse(document, header + ".pdf");
} else {
logger.info("File has no good title to be found");
return WebResponseUtils.pdfDocToWebResponse(document, file.getOriginalFilename());
return WebResponseUtils.pdfDocToWebResponse(document, Filenames.toSimpleFileName(file.getOriginalFilename()));
}
}
}

View File

@@ -1,5 +1,6 @@
package stirling.software.SPDF.controller.api.misc;
import io.github.pixee.security.Filenames;
import java.awt.image.BufferedImage;
import java.awt.image.DataBufferByte;
import java.awt.image.DataBufferInt;
@@ -43,6 +44,7 @@ import stirling.software.SPDF.utils.WebResponseUtils;
public class AutoSplitPdfController {
private static final String QR_CONTENT = "https://github.com/Stirling-Tools/Stirling-PDF";
private static final String QR_CONTENT_OLD = "https://github.com/Frooodle/Stirling-PDF";
@PostMapping(value = "/auto-split-pdf", consumes = "multipart/form-data")
@Operation(
@@ -63,12 +65,13 @@ public class AutoSplitPdfController {
for (int page = 0; page < document.getNumberOfPages(); ++page) {
BufferedImage bim = pdfRenderer.renderImageWithDPI(page, 150);
String result = decodeQRCode(bim);
if (QR_CONTENT.equals(result) && page != 0) {
if ((QR_CONTENT.equals(result) || QR_CONTENT_OLD.equals(result)) && page != 0) {
splitDocuments.add(new PDDocument());
}
if (!splitDocuments.isEmpty() && !QR_CONTENT.equals(result)) {
if (!splitDocuments.isEmpty()
&& !QR_CONTENT.equals(result)
&& !QR_CONTENT_OLD.equals(result)) {
splitDocuments.get(splitDocuments.size() - 1).addPage(document.getPage(page));
} else if (page == 0) {
PDDocument firstDocument = new PDDocument();
@@ -77,7 +80,7 @@ public class AutoSplitPdfController {
}
// If duplexMode is true and current page is a divider, then skip next page
if (duplexMode && QR_CONTENT.equals(result)) {
if (duplexMode && (QR_CONTENT.equals(result) || QR_CONTENT_OLD.equals(result))) {
page++;
}
}
@@ -95,7 +98,7 @@ public class AutoSplitPdfController {
document.close();
Path zipFile = Files.createTempFile("split_documents", ".zip");
String filename = file.getOriginalFilename().replaceFirst("[.][^.]+$", "");
String filename = Filenames.toSimpleFileName(file.getOriginalFilename()).replaceFirst("[.][^.]+$", "");
byte[] data;
try (ZipOutputStream zipOut = new ZipOutputStream(Files.newOutputStream(zipFile))) {

View File

@@ -1,5 +1,6 @@
package stirling.software.SPDF.controller.api.misc;
import io.github.pixee.security.Filenames;
import java.awt.image.BufferedImage;
import java.io.IOException;
import java.nio.file.Files;
@@ -33,7 +34,6 @@ import io.swagger.v3.oas.annotations.tags.Tag;
import stirling.software.SPDF.model.api.misc.RemoveBlankPagesRequest;
import stirling.software.SPDF.utils.PdfUtils;
import stirling.software.SPDF.utils.ProcessExecutor;
import stirling.software.SPDF.utils.ProcessExecutor.ProcessExecutorResult;
import stirling.software.SPDF.utils.WebResponseUtils;
@RestController
@@ -85,7 +85,7 @@ public class BlankPageController {
List<String> command =
new ArrayList<>(
Arrays.asList(
"python3",
"python",
System.getProperty("user.dir")
+ "/scripts/detect-blank-pages.py",
tempFile.toString(),
@@ -94,18 +94,25 @@ public class BlankPageController {
"--white_percent",
String.valueOf(whitePercent)));
Boolean blank = false;
// Run CLI command
ProcessExecutorResult returnCode =
ProcessExecutor.getInstance(ProcessExecutor.Processes.PYTHON_OPENCV)
.runCommandWithOutputHandling(command);
try {
ProcessExecutor.getInstance(ProcessExecutor.Processes.PYTHON_OPENCV)
.runCommandWithOutputHandling(command);
} catch (IOException e) {
// From detect-blank-pages.py
// Return code 1: The image is considered blank.
// Return code 0: The image is not considered blank.
// Since the process returned with a failure code, it should be blank.
blank = true;
}
// does contain data
if (returnCode.getRc() == 0) {
if (blank) {
System.out.println("Skipping, Image was blank for page #" + pageIndex);
} else {
System.out.println(
"page " + pageIndex + " has image which is not blank");
pagesToKeepIndex.add(pageIndex);
} else {
System.out.println("Skipping, Image was blank for page #" + pageIndex);
}
}
}
@@ -125,7 +132,7 @@ public class BlankPageController {
return WebResponseUtils.pdfDocToWebResponse(
document,
inputFile.getOriginalFilename().replaceFirst("[.][^.]+$", "")
Filenames.toSimpleFileName(inputFile.getOriginalFilename()).replaceFirst("[.][^.]+$", "")
+ "_blanksRemoved.pdf");
} catch (IOException e) {
e.printStackTrace();

View File

@@ -1,5 +1,6 @@
package stirling.software.SPDF.controller.api.misc;
import io.github.pixee.security.Filenames;
import java.awt.Image;
import java.awt.image.BufferedImage;
import java.io.ByteArrayInputStream;
@@ -264,7 +265,7 @@ public class CompressController {
// Return the optimized PDF as a response
String outputFilename =
inputFile.getOriginalFilename().replaceFirst("[.][^.]+$", "") + "_Optimized.pdf";
Filenames.toSimpleFileName(inputFile.getOriginalFilename()).replaceFirst("[.][^.]+$", "") + "_Optimized.pdf";
return WebResponseUtils.bytesToWebResponse(pdfBytes, outputFilename);
}
}

View File

@@ -74,7 +74,7 @@ public class ExtractImageScansController {
List<String> images = new ArrayList<>();
// Check if input file is a PDF
if (extension.equalsIgnoreCase("pdf")) {
if ("pdf".equalsIgnoreCase(extension)) {
// Load PDF document
try (PDDocument document = Loader.loadPDF(form.getFileInput().getBytes())) {
PDFRenderer pdfRenderer = new PDFRenderer(document);

View File

@@ -1,5 +1,6 @@
package stirling.software.SPDF.controller.api.misc;
import io.github.pixee.security.Filenames;
import java.awt.Graphics2D;
import java.awt.Image;
import java.awt.image.BufferedImage;
@@ -66,7 +67,7 @@ public class ExtractImagesController {
zos.setLevel(Deflater.BEST_COMPRESSION);
int imageIndex = 1;
String filename = file.getOriginalFilename().replaceFirst("[.][^.]+$", "");
String filename = Filenames.toSimpleFileName(file.getOriginalFilename()).replaceFirst("[.][^.]+$", "");
int pageNum = 0;
Set<Integer> processedImages = new HashSet<>();
// Iterate over each page
@@ -85,19 +86,19 @@ public class ExtractImagesController {
// Convert image to desired format
RenderedImage renderedImage = image.getImage();
BufferedImage bufferedImage = null;
if (format.equalsIgnoreCase("png")) {
if ("png".equalsIgnoreCase(format)) {
bufferedImage =
new BufferedImage(
renderedImage.getWidth(),
renderedImage.getHeight(),
BufferedImage.TYPE_INT_ARGB);
} else if (format.equalsIgnoreCase("jpeg") || format.equalsIgnoreCase("jpg")) {
} else if ("jpeg".equalsIgnoreCase(format) || "jpg".equalsIgnoreCase(format)) {
bufferedImage =
new BufferedImage(
renderedImage.getWidth(),
renderedImage.getHeight(),
BufferedImage.TYPE_INT_RGB);
} else if (format.equalsIgnoreCase("gif")) {
} else if ("gif".equalsIgnoreCase(format)) {
bufferedImage =
new BufferedImage(
renderedImage.getWidth(),

View File

@@ -1,5 +1,6 @@
package stirling.software.SPDF.controller.api.misc;
import io.github.pixee.security.Filenames;
import java.awt.Color;
import java.awt.geom.AffineTransform;
import java.awt.image.AffineTransformOp;
@@ -29,7 +30,6 @@ import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.multipart.MultipartFile;
@@ -50,7 +50,7 @@ public class FakeScanControllerWIP {
// TODO
@Hidden
@PostMapping(consumes = "multipart/form-data", value = "/fakeScan")
// @PostMapping(consumes = "multipart/form-data", value = "/fakeScan")
@Operation(
summary = "Repair a PDF file",
description =
@@ -142,7 +142,7 @@ public class FakeScanControllerWIP {
// Return the optimized PDF as a response
String outputFilename =
inputFile.getOriginalFilename().replaceFirst("[.][^.]+$", "") + "_scanned.pdf";
Filenames.toSimpleFileName(inputFile.getOriginalFilename()).replaceFirst("[.][^.]+$", "") + "_scanned.pdf";
return WebResponseUtils.boasToWebResponse(baos, outputFilename);
}
}

View File

@@ -1,5 +1,6 @@
package stirling.software.SPDF.controller.api.misc;
import io.github.pixee.security.Filenames;
import java.io.IOException;
import java.text.ParseException;
import java.text.SimpleDateFormat;
@@ -109,15 +110,15 @@ public class MetadataController {
for (Entry<String, String> entry : allRequestParams.entrySet()) {
String key = entry.getKey();
// Check if the key is a standard metadata key
if (!key.equalsIgnoreCase("Author")
&& !key.equalsIgnoreCase("CreationDate")
&& !key.equalsIgnoreCase("Creator")
&& !key.equalsIgnoreCase("Keywords")
&& !key.equalsIgnoreCase("modificationDate")
&& !key.equalsIgnoreCase("Producer")
&& !key.equalsIgnoreCase("Subject")
&& !key.equalsIgnoreCase("Title")
&& !key.equalsIgnoreCase("Trapped")
if (!"Author".equalsIgnoreCase(key)
&& !"CreationDate".equalsIgnoreCase(key)
&& !"Creator".equalsIgnoreCase(key)
&& !"Keywords".equalsIgnoreCase(key)
&& !"modificationDate".equalsIgnoreCase(key)
&& !"Producer".equalsIgnoreCase(key)
&& !"Subject".equalsIgnoreCase(key)
&& !"Title".equalsIgnoreCase(key)
&& !"Trapped".equalsIgnoreCase(key)
&& !key.contains("customKey")
&& !key.contains("customValue")) {
info.setCustomMetadataValue(key, entry.getValue());
@@ -164,6 +165,6 @@ public class MetadataController {
document.setDocumentInformation(info);
return WebResponseUtils.pdfDocToWebResponse(
document,
pdfFile.getOriginalFilename().replaceFirst("[.][^.]+$", "") + "_metadata.pdf");
Filenames.toSimpleFileName(pdfFile.getOriginalFilename()).replaceFirst("[.][^.]+$", "") + "_metadata.pdf");
}
}

View File

@@ -1,5 +1,6 @@
package stirling.software.SPDF.controller.api.misc;
import io.github.pixee.security.Filenames;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
@@ -74,7 +75,7 @@ public class OCRController {
throw new IOException("Please select at least one language.");
}
if (!ocrRenderType.equals("hocr") && !ocrRenderType.equals("sandwich")) {
if (!"hocr".equals(ocrRenderType) && !"sandwich".equals(ocrRenderType)) {
throw new IOException("ocrRenderType wrong");
}
@@ -127,7 +128,7 @@ public class OCRController {
if (cleanFinal != null && cleanFinal) {
command.add("--clean-final");
}
if (ocrType != null && !ocrType.equals("")) {
if (ocrType != null && !"".equals(ocrType)) {
if ("skip-text".equals(ocrType)) {
command.add("--skip-text");
} else if ("force-ocr".equals(ocrType)) {
@@ -182,12 +183,12 @@ public class OCRController {
// Return the OCR processed PDF as a response
String outputFilename =
inputFile.getOriginalFilename().replaceFirst("[.][^.]+$", "") + "_OCR.pdf";
Filenames.toSimpleFileName(inputFile.getOriginalFilename()).replaceFirst("[.][^.]+$", "") + "_OCR.pdf";
if (sidecar != null && sidecar) {
// Create a zip file containing both the PDF and the text file
String outputZipFilename =
inputFile.getOriginalFilename().replaceFirst("[.][^.]+$", "") + "_OCR.zip";
Filenames.toSimpleFileName(inputFile.getOriginalFilename()).replaceFirst("[.][^.]+$", "") + "_OCR.zip";
Path tempZipFile = Files.createTempFile("output_", ".zip");
try (ZipOutputStream zipOut =

View File

@@ -1,5 +1,6 @@
package stirling.software.SPDF.controller.api.misc;
import io.github.pixee.security.Filenames;
import java.io.IOException;
import org.slf4j.Logger;
@@ -30,7 +31,7 @@ public class OverlayImageController {
@Operation(
summary = "Overlay image onto a PDF file",
description =
"This endpoint overlays an image onto a PDF file at the specified coordinates. The image can be overlaid on every page of the PDF if specified. Input:PDF/IMAGE Output:PDF Type:MF-SISO")
"This endpoint overlays an image onto a PDF file at the specified coordinates. The image can be overlaid on every page of the PDF if specified. Input:PDF/IMAGE Output:PDF Type:SISO")
public ResponseEntity<byte[]> overlayImage(@ModelAttribute OverlayImageRequest request) {
MultipartFile pdfFile = request.getFileInput();
MultipartFile imageFile = request.getImageFile();
@@ -44,7 +45,7 @@ public class OverlayImageController {
return WebResponseUtils.bytesToWebResponse(
result,
pdfFile.getOriginalFilename().replaceFirst("[.][^.]+$", "") + "_overlayed.pdf");
Filenames.toSimpleFileName(pdfFile.getOriginalFilename()).replaceFirst("[.][^.]+$", "") + "_overlayed.pdf");
} catch (IOException e) {
logger.error("Failed to add image to PDF", e);
return new ResponseEntity<>(HttpStatus.BAD_REQUEST);

View File

@@ -1,5 +1,6 @@
package stirling.software.SPDF.controller.api.misc;
import io.github.pixee.security.Filenames;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.util.List;
@@ -93,7 +94,7 @@ public class PageNumbersController {
.replace("{total}", String.valueOf(document.getNumberOfPages()))
.replace(
"{filename}",
file.getOriginalFilename()
Filenames.toSimpleFileName(file.getOriginalFilename())
.replaceFirst("[.][^.]+$", ""))
: String.valueOf(pageNumber);
@@ -145,7 +146,7 @@ public class PageNumbersController {
return WebResponseUtils.bytesToWebResponse(
baos.toByteArray(),
file.getOriginalFilename().replaceFirst("[.][^.]+$", "") + "_numbersAdded.pdf",
Filenames.toSimpleFileName(file.getOriginalFilename()).replaceFirst("[.][^.]+$", "") + "_numbersAdded.pdf",
MediaType.APPLICATION_PDF);
}
}

View File

@@ -1,5 +1,6 @@
package stirling.software.SPDF.controller.api.misc;
import io.github.pixee.security.Filenames;
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;
@@ -65,7 +66,7 @@ public class RepairController {
// Return the optimized PDF as a response
String outputFilename =
inputFile.getOriginalFilename().replaceFirst("[.][^.]+$", "") + "_repaired.pdf";
Filenames.toSimpleFileName(inputFile.getOriginalFilename()).replaceFirst("[.][^.]+$", "") + "_repaired.pdf";
return WebResponseUtils.bytesToWebResponse(pdfBytes, outputFilename);
}
}

View File

@@ -1,5 +1,6 @@
package stirling.software.SPDF.controller.api.misc;
import io.github.pixee.security.Filenames;
import java.nio.charset.StandardCharsets;
import java.util.Map;
@@ -54,7 +55,7 @@ public class ShowJavascript {
script +=
"// File: "
+ inputFile.getOriginalFilename()
+ Filenames.toSimpleFileName(inputFile.getOriginalFilename())
+ ", Script: "
+ name
+ "\n"

View File

@@ -0,0 +1,313 @@
package stirling.software.SPDF.controller.api.misc;
import io.github.pixee.security.Filenames;
import java.awt.Color;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.nio.file.Files;
import javax.imageio.ImageIO;
import org.apache.commons.io.IOUtils;
import org.apache.pdfbox.Loader;
import org.apache.pdfbox.pdmodel.PDDocument;
import org.apache.pdfbox.pdmodel.PDPage;
import org.apache.pdfbox.pdmodel.PDPageContentStream;
import org.apache.pdfbox.pdmodel.common.PDRectangle;
import org.apache.pdfbox.pdmodel.font.PDFont;
import org.apache.pdfbox.pdmodel.font.PDType0Font;
import org.apache.pdfbox.pdmodel.font.PDType1Font;
import org.apache.pdfbox.pdmodel.font.Standard14Fonts;
import org.apache.pdfbox.pdmodel.graphics.image.LosslessFactory;
import org.apache.pdfbox.pdmodel.graphics.image.PDImageXObject;
import org.apache.pdfbox.pdmodel.graphics.state.PDExtendedGraphicsState;
import org.apache.pdfbox.util.Matrix;
import org.springframework.core.io.ClassPathResource;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.multipart.MultipartFile;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.tags.Tag;
import stirling.software.SPDF.model.api.misc.AddStampRequest;
import stirling.software.SPDF.utils.WebResponseUtils;
@RestController
@RequestMapping("/api/v1/misc")
@Tag(name = "Misc", description = "Miscellaneous APIs")
public class StampController {
@PostMapping(consumes = "multipart/form-data", value = "/add-stamp")
@Operation(
summary = "Add stamp to a PDF file",
description =
"This endpoint adds a stamp to a given PDF file. Users can specify the watermark type (text or image), rotation, opacity, width spacer, and height spacer. Input:PDF Output:PDF Type:SISO")
public ResponseEntity<byte[]> addStamp(@ModelAttribute AddStampRequest request)
throws IOException, Exception {
MultipartFile pdfFile = request.getFileInput();
String watermarkType = request.getStampType();
String watermarkText = request.getStampText();
MultipartFile watermarkImage = request.getStampImage();
String alphabet = request.getAlphabet();
float fontSize = request.getFontSize();
float rotation = request.getRotation();
float opacity = request.getOpacity();
int position = request.getPosition(); // Updated to use 1-9 positioning logic
float overrideX = request.getOverrideX(); // New field for X override
float overrideY = request.getOverrideY(); // New field for Y override
String customColor = request.getCustomColor();
float marginFactor;
switch (request.getCustomMargin().toLowerCase()) {
case "small":
marginFactor = 0.02f;
break;
case "medium":
marginFactor = 0.035f;
break;
case "large":
marginFactor = 0.05f;
break;
case "x-large":
marginFactor = 0.075f;
break;
default:
marginFactor = 0.035f;
break;
}
// Load the input PDF
PDDocument document = Loader.loadPDF(pdfFile.getBytes());
for (PDPage page : document.getPages()) {
PDPageContentStream contentStream =
new PDPageContentStream(
document, page, PDPageContentStream.AppendMode.APPEND, true, true);
PDExtendedGraphicsState graphicsState = new PDExtendedGraphicsState();
graphicsState.setNonStrokingAlphaConstant(opacity);
contentStream.setGraphicsStateParameters(graphicsState);
if ("text".equalsIgnoreCase(watermarkType)) {
addTextStamp(
contentStream,
watermarkText,
document,
page,
rotation,
position,
fontSize,
alphabet,
overrideX,
overrideY,
marginFactor,
customColor);
} else if ("image".equalsIgnoreCase(watermarkType)) {
addImageStamp(
contentStream,
watermarkImage,
document,
page,
rotation,
position,
fontSize,
overrideX,
overrideY,
marginFactor);
}
contentStream.close();
}
return WebResponseUtils.pdfDocToWebResponse(
document,
Filenames.toSimpleFileName(pdfFile.getOriginalFilename()).replaceFirst("[.][^.]+$", "") + "_watermarked.pdf");
}
private void addTextStamp(
PDPageContentStream contentStream,
String watermarkText,
PDDocument document,
PDPage page,
float rotation,
int position, // 1-9 positioning logic
float fontSize,
String alphabet,
float overrideX, // X override
float overrideY,
float marginFactor,
String colorString) // Y override
throws IOException {
String resourceDir = "";
PDFont font = new PDType1Font(Standard14Fonts.FontName.HELVETICA);
switch (alphabet) {
case "arabic":
resourceDir = "static/fonts/NotoSansArabic-Regular.ttf";
break;
case "japanese":
resourceDir = "static/fonts/Meiryo.ttf";
break;
case "korean":
resourceDir = "static/fonts/malgun.ttf";
break;
case "chinese":
resourceDir = "static/fonts/SimSun.ttf";
break;
case "roman":
default:
resourceDir = "static/fonts/NotoSans-Regular.ttf";
break;
}
if (!"".equals(resourceDir)) {
ClassPathResource classPathResource = new ClassPathResource(resourceDir);
String fileExtension = resourceDir.substring(resourceDir.lastIndexOf("."));
File tempFile = Files.createTempFile("NotoSansFont", fileExtension).toFile();
try (InputStream is = classPathResource.getInputStream();
FileOutputStream os = new FileOutputStream(tempFile)) {
IOUtils.copy(is, os);
}
font = PDType0Font.load(document, tempFile);
tempFile.deleteOnExit();
}
contentStream.setFont(font, fontSize);
Color redactColor;
try {
if (!colorString.startsWith("#")) {
colorString = "#" + colorString;
}
redactColor = Color.decode(colorString);
} catch (NumberFormatException e) {
redactColor = Color.LIGHT_GRAY;
}
contentStream.setNonStrokingColor(redactColor);
PDRectangle pageSize = page.getMediaBox();
float x, y;
if (overrideX >= 0 && overrideY >= 0) {
// Use override values if provided
x = overrideX;
y = overrideY;
} else {
x =
calculatePositionX(
pageSize,
position,
fontSize,
font,
fontSize,
watermarkText,
marginFactor);
y = calculatePositionY(pageSize, position, fontSize, marginFactor);
}
contentStream.beginText();
contentStream.setTextMatrix(Matrix.getRotateInstance(Math.toRadians(rotation), x, y));
contentStream.showText(watermarkText);
contentStream.endText();
}
private void addImageStamp(
PDPageContentStream contentStream,
MultipartFile watermarkImage,
PDDocument document,
PDPage page,
float rotation,
int position, // 1-9 positioning logic
float fontSize,
float overrideX,
float overrideY,
float marginFactor)
throws IOException {
// Load the watermark image
BufferedImage image = ImageIO.read(watermarkImage.getInputStream());
// Compute width based on original aspect ratio
float aspectRatio = (float) image.getWidth() / (float) image.getHeight();
// Desired physical height (in PDF points)
float desiredPhysicalHeight = fontSize;
// Desired physical width based on the aspect ratio
float desiredPhysicalWidth = desiredPhysicalHeight * aspectRatio;
// Convert the BufferedImage to PDImageXObject
PDImageXObject xobject = LosslessFactory.createFromImage(document, image);
PDRectangle pageSize = page.getMediaBox();
float x, y;
if (overrideX >= 0 && overrideY >= 0) {
// Use override values if provided
x = overrideX;
y = overrideY;
} else {
x =
calculatePositionX(
pageSize, position, desiredPhysicalWidth, null, 0, null, marginFactor);
y = calculatePositionY(pageSize, position, fontSize, marginFactor);
}
contentStream.saveGraphicsState();
contentStream.transform(Matrix.getTranslateInstance(x, y));
contentStream.transform(Matrix.getRotateInstance(Math.toRadians(rotation), 0, 0));
contentStream.drawImage(xobject, 0, 0, desiredPhysicalWidth, desiredPhysicalHeight);
contentStream.restoreGraphicsState();
}
private float calculatePositionX(
PDRectangle pageSize,
int position,
float contentWidth,
PDFont font,
float fontSize,
String text,
float marginFactor)
throws IOException {
float actualWidth =
(text != null) ? calculateTextWidth(text, font, fontSize) : contentWidth;
switch (position % 3) {
case 1: // Left
return pageSize.getLowerLeftX() + marginFactor * pageSize.getWidth();
case 2: // Center
return (pageSize.getWidth() - actualWidth) / 2;
case 0: // Right
return pageSize.getUpperRightX() - actualWidth - marginFactor * pageSize.getWidth();
default:
return 0;
}
}
private float calculateTextWidth(String text, PDFont font, float fontSize) throws IOException {
return font.getStringWidth(text) / 1000 * fontSize;
}
private float calculatePositionY(
PDRectangle pageSize, int position, float height, float marginFactor) {
switch ((position - 1) / 3) {
case 0: // Top
return pageSize.getUpperRightY() - height - marginFactor * pageSize.getHeight();
case 1: // Middle
return (pageSize.getHeight() - height) / 2;
case 2: // Bottom
return pageSize.getLowerLeftY() + marginFactor * pageSize.getHeight();
default:
return 0;
}
}
}

View File

@@ -1,6 +1,8 @@
package stirling.software.SPDF.controller.api.pipeline;
import java.util.Arrays;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
@@ -39,6 +41,57 @@ public class ApiDocService {
return "http://localhost:" + port + contextPath + "/v1/api-docs";
}
Map<String, List<String>> outputToFileTypes = new HashMap<>();
public List getExtensionTypes(boolean output, String operationName) {
if (outputToFileTypes.size() == 0) {
outputToFileTypes.put("PDF", Arrays.asList("pdf"));
outputToFileTypes.put(
"IMAGE",
Arrays.asList(
"png", "jpg", "jpeg", "gif", "webp", "bmp", "tif", "tiff", "svg", "psd",
"ai", "eps"));
outputToFileTypes.put(
"ZIP",
Arrays.asList("zip", "rar", "7z", "tar", "gz", "bz2", "xz", "lz", "lzma", "z"));
outputToFileTypes.put("WORD", Arrays.asList("doc", "docx", "odt", "rtf"));
outputToFileTypes.put("CSV", Arrays.asList("csv"));
outputToFileTypes.put("JS", Arrays.asList("js", "jsx"));
outputToFileTypes.put("HTML", Arrays.asList("html", "htm", "xhtml"));
outputToFileTypes.put("JSON", Arrays.asList("json"));
outputToFileTypes.put("TXT", Arrays.asList("txt", "text", "md", "markdown"));
outputToFileTypes.put("PPT", Arrays.asList("ppt", "pptx", "odp"));
outputToFileTypes.put("XML", Arrays.asList("xml", "xsd", "xsl"));
outputToFileTypes.put(
"BOOK", Arrays.asList("epub", "mobi", "azw3", "fb2", "txt", "docx"));
// type.
}
if (apiDocsJsonRootNode == null || apiDocumentation.size() == 0) {
loadApiDocumentation();
}
if (!apiDocumentation.containsKey(operationName)) {
return null;
}
ApiEndpoint endpoint = apiDocumentation.get(operationName);
String description = endpoint.getDescription();
Pattern pattern = null;
if (output) {
pattern = Pattern.compile("Output:(\\w+)");
} else {
pattern = Pattern.compile("Input:(\\w+)");
}
Matcher matcher = pattern.matcher(description);
while (matcher.find()) {
String type = matcher.group(1).toUpperCase();
if (outputToFileTypes.containsKey(type)) {
return outputToFileTypes.get(type);
}
}
return null;
}
@Autowired(required = false)
private UserServiceInterface userService;

View File

@@ -1,5 +1,7 @@
package stirling.software.SPDF.controller.api.pipeline;
import io.github.pixee.security.Filenames;
import io.github.pixee.security.ZipSecurity;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.File;
@@ -11,6 +13,7 @@ import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
@@ -82,15 +85,11 @@ public class PipelineProcessor {
operation,
isMultiInputOperation);
Map<String, Object> parameters = pipelineOperation.getParameters();
String inputFileExtension = "";
// TODO
// if (operationNode.has("inputFileType")) {
// inputFileExtension = operationNode.get("inputFileType").asText();
// } else {
inputFileExtension = ".pdf";
// }
final String finalInputFileExtension = inputFileExtension;
List<String> inputFileTypes = apiDocService.getExtensionTypes(false, operation);
if (inputFileTypes == null) {
inputFileTypes = new ArrayList<String>(Arrays.asList("ALL"));
}
// List outputFileTypes = apiDocService.getExtensionTypes(true, operation);
String url = getBaseUrl() + operation;
@@ -98,38 +97,42 @@ public class PipelineProcessor {
if (!isMultiInputOperation) {
for (Resource file : outputFiles) {
boolean hasInputFileType = false;
if (file.getFilename().endsWith(inputFileExtension)) {
hasInputFileType = true;
MultiValueMap<String, Object> body = new LinkedMultiValueMap<>();
body.add("fileInput", file);
for (String extension : inputFileTypes) {
if ("ALL".equals(extension) || file.getFilename().endsWith(extension)) {
hasInputFileType = true;
MultiValueMap<String, Object> body = new LinkedMultiValueMap<>();
body.add("fileInput", file);
for (Entry<String, Object> entry : parameters.entrySet()) {
body.add(entry.getKey(), entry.getValue());
for (Entry<String, Object> entry : parameters.entrySet()) {
body.add(entry.getKey(), entry.getValue());
}
ResponseEntity<byte[]> response = sendWebRequest(url, body);
// If the operation is filter and the response body is null or empty,
// skip
// this
// file
if (operation.startsWith("filter-")
&& (response.getBody() == null
|| response.getBody().length == 0)) {
logger.info("Skipping file due to failing {}", operation);
continue;
}
if (!response.getStatusCode().equals(HttpStatus.OK)) {
logPrintStream.println("Error: " + response.getBody());
hasErrors = true;
continue;
}
processOutputFiles(operation, response, newOutputFiles);
}
ResponseEntity<byte[]> response = sendWebRequest(url, body);
// If the operation is filter and the response body is null or empty, skip
// this
// file
if (operation.startsWith("filter-")
&& (response.getBody() == null || response.getBody().length == 0)) {
logger.info("Skipping file due to failing {}", operation);
continue;
}
if (!response.getStatusCode().equals(HttpStatus.OK)) {
logPrintStream.println("Error: " + response.getBody());
hasErrors = true;
continue;
}
processOutputFiles(operation, file.getFilename(), response, newOutputFiles);
}
if (!hasInputFileType) {
logPrintStream.println(
"No files with extension "
+ inputFileExtension
+ String.join(", ", inputFileTypes)
+ " found for operation "
+ operation);
hasErrors = true;
@@ -138,13 +141,19 @@ public class PipelineProcessor {
} else {
// Filter and collect all files that match the inputFileExtension
List<Resource> matchingFiles =
outputFiles.stream()
.filter(
file ->
file.getFilename()
.endsWith(finalInputFileExtension))
.collect(Collectors.toList());
List<Resource> matchingFiles;
if (inputFileTypes.contains("ALL")) {
matchingFiles = new ArrayList<>(outputFiles);
} else {
final List<String> finalinputFileTypes = inputFileTypes;
matchingFiles =
outputFiles.stream()
.filter(
file ->
finalinputFileTypes.stream()
.anyMatch(file.getFilename()::endsWith))
.collect(Collectors.toList());
}
// Check if there are matching files
if (!matchingFiles.isEmpty()) {
@@ -164,11 +173,7 @@ public class PipelineProcessor {
// Handle the response
if (response.getStatusCode().equals(HttpStatus.OK)) {
processOutputFiles(
operation,
matchingFiles.get(0).getFilename(),
response,
newOutputFiles);
processOutputFiles(operation, response, newOutputFiles);
} else {
// Log error if the response status is not OK
logPrintStream.println(
@@ -178,7 +183,7 @@ public class PipelineProcessor {
} else {
logPrintStream.println(
"No files with extension "
+ inputFileExtension
+ String.join(", ", inputFileTypes)
+ " found for multi-input operation "
+ operation);
hasErrors = true;
@@ -211,11 +216,29 @@ public class PipelineProcessor {
return restTemplate.exchange(url, HttpMethod.POST, entity, byte[].class);
}
public static String removeTrailingNaming(String filename) {
// Splitting filename into name and extension
int dotIndex = filename.lastIndexOf(".");
if (dotIndex == -1) {
// No extension found
return filename;
}
String name = filename.substring(0, dotIndex);
String extension = filename.substring(dotIndex);
// Finding the last underscore
int underscoreIndex = name.lastIndexOf("_");
if (underscoreIndex == -1) {
// No underscore found
return filename;
}
// Removing the last part and reattaching the extension
return name.substring(0, underscoreIndex) + extension;
}
private List<Resource> processOutputFiles(
String operation,
String fileName,
ResponseEntity<byte[]> response,
List<Resource> newOutputFiles)
String operation, ResponseEntity<byte[]> response, List<Resource> newOutputFiles)
throws IOException {
// Define filename
String newFilename;
@@ -227,7 +250,7 @@ public class PipelineProcessor {
newFilename = extractFilename(response);
} else {
// Otherwise, keep the original filename.
newFilename = fileName;
newFilename = removeTrailingNaming(extractFilename(response));
}
// Check if the response body is a zip file
@@ -312,7 +335,7 @@ public class PipelineProcessor {
new ByteArrayResource(file.getBytes()) {
@Override
public String getFilename() {
return file.getOriginalFilename();
return Filenames.toSimpleFileName(file.getOriginalFilename());
}
};
outputFiles.add(fileResource);
@@ -335,7 +358,7 @@ public class PipelineProcessor {
List<Resource> unzippedFiles = new ArrayList<>();
try (ByteArrayInputStream bais = new ByteArrayInputStream(data);
ZipInputStream zis = new ZipInputStream(bais)) {
ZipInputStream zis = ZipSecurity.createHardenedInputStream(bais)) {
ZipEntry entry;
while ((entry = zis.getNextEntry()) != null) {

View File

@@ -1,5 +1,6 @@
package stirling.software.SPDF.controller.api.security;
import io.github.pixee.security.Filenames;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
@@ -74,7 +75,7 @@ public class CertSignController {
@Operation(
summary = "Sign PDF with a Digital Certificate",
description =
"This endpoint accepts a PDF file, a digital certificate and related information to sign the PDF. It then returns the digitally signed PDF file. Input:PDF Output:PDF Type:MF-SISO")
"This endpoint accepts a PDF file, a digital certificate and related information to sign the PDF. It then returns the digitally signed PDF file. Input:PDF Output:PDF Type:SISO")
public ResponseEntity<byte[]> signPDFWithCert(@ModelAttribute SignPDFWithCertRequest request)
throws Exception {
MultipartFile pdf = request.getFileInput();
@@ -123,7 +124,7 @@ public class CertSignController {
ByteArrayOutputStream baos = new ByteArrayOutputStream();
sign(pdf.getBytes(), baos, createSignature, name, location, reason);
return WebResponseUtils.boasToWebResponse(
baos, pdf.getOriginalFilename().replaceFirst("[.][^.]+$", "") + "_signed.pdf");
baos, Filenames.toSimpleFileName(pdf.getOriginalFilename()).replaceFirst("[.][^.]+$", "") + "_signed.pdf");
}
private static void sign(

View File

@@ -1,5 +1,6 @@
package stirling.software.SPDF.controller.api.security;
import io.github.pixee.security.Filenames;
import java.io.IOException;
import org.apache.pdfbox.Loader;
@@ -43,7 +44,7 @@ public class PasswordController {
document.setAllSecurityToBeRemoved(true);
return WebResponseUtils.pdfDocToWebResponse(
document,
fileInput.getOriginalFilename().replaceFirst("[.][^.]+$", "")
Filenames.toSimpleFileName(fileInput.getOriginalFilename()).replaceFirst("[.][^.]+$", "")
+ "_password_removed.pdf");
}
@@ -88,10 +89,10 @@ public class PasswordController {
if ("".equals(ownerPassword) && "".equals(password))
return WebResponseUtils.pdfDocToWebResponse(
document,
fileInput.getOriginalFilename().replaceFirst("[.][^.]+$", "")
Filenames.toSimpleFileName(fileInput.getOriginalFilename()).replaceFirst("[.][^.]+$", "")
+ "_permissions.pdf");
return WebResponseUtils.pdfDocToWebResponse(
document,
fileInput.getOriginalFilename().replaceFirst("[.][^.]+$", "") + "_passworded.pdf");
Filenames.toSimpleFileName(fileInput.getOriginalFilename()).replaceFirst("[.][^.]+$", "") + "_passworded.pdf");
}
}

View File

@@ -1,5 +1,6 @@
package stirling.software.SPDF.controller.api.security;
import io.github.pixee.security.Filenames;
import java.awt.Color;
import java.awt.image.BufferedImage;
import java.io.ByteArrayOutputStream;
@@ -104,7 +105,7 @@ public class RedactController {
byte[] pdfContent = baos.toByteArray();
return WebResponseUtils.bytesToWebResponse(
pdfContent,
file.getOriginalFilename().replaceFirst("[.][^.]+$", "") + "_redacted.pdf");
Filenames.toSimpleFileName(file.getOriginalFilename()).replaceFirst("[.][^.]+$", "") + "_redacted.pdf");
}
private void redactFoundText(

View File

@@ -1,5 +1,6 @@
package stirling.software.SPDF.controller.api.security;
import io.github.pixee.security.Filenames;
import java.io.IOException;
import org.apache.pdfbox.Loader;
@@ -76,7 +77,7 @@ public class SanitizeController {
return WebResponseUtils.pdfDocToWebResponse(
document,
inputFile.getOriginalFilename().replaceFirst("[.][^.]+$", "")
Filenames.toSimpleFileName(inputFile.getOriginalFilename()).replaceFirst("[.][^.]+$", "")
+ "_sanitized.pdf");
}
}

View File

@@ -1,11 +1,13 @@
package stirling.software.SPDF.controller.api.security;
import io.github.pixee.security.Filenames;
import java.awt.Color;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.nio.file.Files;
import javax.imageio.ImageIO;
@@ -75,7 +77,7 @@ public class WatermarkController {
graphicsState.setNonStrokingAlphaConstant(opacity);
contentStream.setGraphicsStateParameters(graphicsState);
if (watermarkType.equalsIgnoreCase("text")) {
if ("text".equalsIgnoreCase(watermarkType)) {
addTextWatermark(
contentStream,
watermarkText,
@@ -86,7 +88,7 @@ public class WatermarkController {
heightSpacer,
fontSize,
alphabet);
} else if (watermarkType.equalsIgnoreCase("image")) {
} else if ("image".equalsIgnoreCase(watermarkType)) {
addImageWatermark(
contentStream,
watermarkImage,
@@ -104,7 +106,7 @@ public class WatermarkController {
return WebResponseUtils.pdfDocToWebResponse(
document,
pdfFile.getOriginalFilename().replaceFirst("[.][^.]+$", "") + "_watermarked.pdf");
Filenames.toSimpleFileName(pdfFile.getOriginalFilename()).replaceFirst("[.][^.]+$", "") + "_watermarked.pdf");
}
private void addTextWatermark(
@@ -139,10 +141,10 @@ public class WatermarkController {
break;
}
if (!resourceDir.equals("")) {
if (!"".equals(resourceDir)) {
ClassPathResource classPathResource = new ClassPathResource(resourceDir);
String fileExtension = resourceDir.substring(resourceDir.lastIndexOf("."));
File tempFile = File.createTempFile("NotoSansFont", fileExtension);
File tempFile = Files.createTempFile("NotoSansFont", fileExtension).toFile();
try (InputStream is = classPathResource.getInputStream();
FileOutputStream os = new FileOutputStream(tempFile)) {
IOUtils.copy(is, os);
@@ -155,9 +157,16 @@ public class WatermarkController {
contentStream.setFont(font, fontSize);
contentStream.setNonStrokingColor(Color.LIGHT_GRAY);
String[] textLines = watermarkText.split("\\\\n");
float maxLineWidth = 0;
for (int i = 0; i < textLines.length; ++i) {
maxLineWidth = Math.max(maxLineWidth, font.getStringWidth(textLines[i]));
}
// Set size and location of text watermark
float watermarkWidth = widthSpacer + font.getStringWidth(watermarkText) * fontSize / 1000;
float watermarkHeight = heightSpacer + fontSize;
float watermarkWidth = widthSpacer + maxLineWidth * fontSize / 1000;
float watermarkHeight = heightSpacer + fontSize * textLines.length;
float pageWidth = page.getMediaBox().getWidth();
float pageHeight = page.getMediaBox().getHeight();
int watermarkRows = (int) (pageHeight / watermarkHeight + 1);
@@ -172,7 +181,12 @@ public class WatermarkController {
(float) Math.toRadians(rotation),
j * watermarkWidth,
i * watermarkHeight));
contentStream.showText(watermarkText);
for (int k = 0; k < textLines.length; ++k) {
contentStream.showText(textLines[k]);
contentStream.newLineAtOffset(0, -fontSize);
}
contentStream.endText();
}
}

View File

@@ -84,7 +84,7 @@ public class MetricsController {
for (Meter meter : meterRegistry.getMeters()) {
if (meter.getId().getName().equals("http.requests")) {
String method = meter.getId().getTag("method");
if (method != null && method.equals("GET")) {
if (method != null && "GET".equals(method)) {
if (endpoint.isPresent() && !endpoint.get().isBlank()) {
if (!endpoint.get().startsWith("/")) {
@@ -129,7 +129,7 @@ public class MetricsController {
for (Meter meter : meterRegistry.getMeters()) {
if (meter.getId().getName().equals("http.requests")) {
String method = meter.getId().getTag("method");
if (method != null && method.equals("GET")) {
if (method != null && "GET".equals(method)) {
String uri = meter.getId().getTag("uri");
if (uri != null) {
double currentCount = counts.getOrDefault(uri, 0.0);
@@ -197,7 +197,7 @@ public class MetricsController {
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 (method != null && "POST".equals(method)) {
if (endpoint.isPresent() && !endpoint.get().isBlank()) {
if (!endpoint.get().startsWith("/")) {
endpoint = Optional.of("/" + endpoint.get());
@@ -235,7 +235,7 @@ public class MetricsController {
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 (method != null && "POST".equals(method)) {
String uri = meter.getId().getTag("uri");
if (uri != null) {
double currentCount = counts.getOrDefault(uri, 0.0);

View File

@@ -39,6 +39,13 @@ public class OtherWebController {
return "misc/show-javascript";
}
@GetMapping("/stamp")
@Hidden
public String stampForm(Model model) {
model.addAttribute("currentPage", "stamp");
return "misc/stamp";
}
@GetMapping("/add-page-numbers")
@Hidden
public String addPageNumbersForm(Model model) {

View File

@@ -0,0 +1,52 @@
package stirling.software.SPDF.model.api.converters;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import lombok.EqualsAndHashCode;
import stirling.software.SPDF.model.api.PDFFile;
@Data
@EqualsAndHashCode(callSuper = true)
public class HTMLToPdfRequest extends PDFFile {
@Schema(
description = "Zoom level for displaying the website. Default is '1'.",
defaultValue = "1")
private float zoom;
@Schema(description = "Width of the page in centimeters.")
private Float pageWidth;
@Schema(description = "Height of the page in centimeters.")
private Float pageHeight;
@Schema(description = "Top margin of the page in millimeters.")
private Float marginTop;
@Schema(description = "Bottom margin of the page in millimeters.")
private Float marginBottom;
@Schema(description = "Left margin of the page in millimeters.")
private Float marginLeft;
@Schema(description = "Right margin of the page in millimeters.")
private Float marginRight;
@Schema(
description = "Enable or disable rendering of website background.",
allowableValues = {"Yes", "No"})
private String printBackground;
@Schema(
description =
"Enable or disable the default header. The default header includes the name of the page on the left and the page number on the right.",
allowableValues = {"Yes", "No"})
private String defaultHeader;
@Schema(
description = "Change the CSS media type of the page. Defaults to 'print'.",
allowableValues = {"none", "print", "screen"},
defaultValue = "print")
private String cssMediaType;
}

View File

@@ -0,0 +1,68 @@
package stirling.software.SPDF.model.api.misc;
import org.springframework.web.multipart.MultipartFile;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import lombok.EqualsAndHashCode;
import stirling.software.SPDF.model.api.PDFFile;
@Data
@EqualsAndHashCode(callSuper = true)
public class AddStampRequest extends PDFFile {
@Schema(
description = "The stamp type (text or image)",
allowableValues = {"text", "image"},
required = true)
private String stampType;
@Schema(description = "The stamp text")
private String stampText;
@Schema(description = "The stamp image")
private MultipartFile stampImage;
@Schema(
description = "The selected alphabet",
allowableValues = {"roman", "arabic", "japanese", "korean", "chinese"},
defaultValue = "roman")
private String alphabet = "roman";
@Schema(description = "The font size of the stamp text", example = "30")
private float fontSize = 30;
@Schema(description = "The rotation of the stamp in degrees", example = "0")
private float rotation = 0;
@Schema(description = "The opacity of the stamp (0.0 - 1.0)", example = "0.5")
private float opacity;
@Schema(
description =
"Position for stamp placement based on a 1-9 grid (1: bottom-left, 2: bottom-center, ..., 9: top-right)",
example = "1")
private int position;
@Schema(
description =
"Override X coordinate for stamp placement. If set, it will override the position-based calculation. Negative value means no override.",
example = "-1")
private float overrideX = -1; // Default to -1 indicating no override
@Schema(
description =
"Override Y coordinate for stamp placement. If set, it will override the position-based calculation. Negative value means no override.",
example = "-1")
private float overrideY = -1; // Default to -1 indicating no override
@Schema(
description = "Specifies the margin size for the stamp.",
allowableValues = {"small", "medium", "large", "x-large"},
defaultValue = "medium")
private String customMargin = "medium";
@Schema(description = "The color for stamp", defaultValue = "#d3d3d3")
private String customColor = "#d3d3d3";
}

View File

@@ -1,131 +0,0 @@
package stirling.software.SPDF.pdf;
import java.awt.geom.Point2D;
import java.io.IOException;
import java.util.List;
import org.apache.pdfbox.contentstream.operator.Operator;
import org.apache.pdfbox.contentstream.operator.OperatorName;
import org.apache.pdfbox.cos.COSBase;
import org.apache.pdfbox.cos.COSName;
import org.apache.pdfbox.pdmodel.PDPage;
import org.apache.pdfbox.pdmodel.graphics.PDXObject;
import org.apache.pdfbox.pdmodel.graphics.form.PDFormXObject;
import org.apache.pdfbox.pdmodel.graphics.image.PDImage;
import org.apache.pdfbox.pdmodel.graphics.image.PDImageXObject;
public class ImageFinder extends org.apache.pdfbox.contentstream.PDFGraphicsStreamEngine {
private boolean hasImages = false;
public ImageFinder(PDPage page) {
super(page);
}
public boolean hasImages() {
return hasImages;
}
@Override
protected void processOperator(Operator operator, List<COSBase> operands) throws IOException {
String operation = operator.getName();
if (operation.equals(OperatorName.DRAW_OBJECT)) {
COSBase base = operands.get(0);
if (base instanceof COSName) {
COSName objectName = (COSName) base;
PDXObject xobject = getResources().getXObject(objectName);
if (xobject instanceof PDImageXObject) {
hasImages = true;
} else if (xobject instanceof PDFormXObject) {
PDFormXObject form = (PDFormXObject) xobject;
ImageFinder innerFinder = new ImageFinder(getPage());
innerFinder.processPage(getPage());
if (innerFinder.hasImages()) {
hasImages = true;
}
}
}
}
super.processOperator(operator, operands);
}
@Override
public void appendRectangle(Point2D p0, Point2D p1, Point2D p2, Point2D p3) throws IOException {
// TODO Auto-generated method stub
}
@Override
public void drawImage(PDImage pdImage) throws IOException {
// TODO Auto-generated method stub
}
@Override
public void clip(int windingRule) throws IOException {
// TODO Auto-generated method stub
}
@Override
public void moveTo(float x, float y) throws IOException {
// TODO Auto-generated method stub
}
@Override
public void lineTo(float x, float y) throws IOException {
// TODO Auto-generated method stub
}
@Override
public void curveTo(float x1, float y1, float x2, float y2, float x3, float y3)
throws IOException {
// TODO Auto-generated method stub
}
@Override
public Point2D getCurrentPoint() throws IOException {
// TODO Auto-generated method stub
return null;
}
@Override
public void closePath() throws IOException {
// TODO Auto-generated method stub
}
@Override
public void endPath() throws IOException {
// TODO Auto-generated method stub
}
@Override
public void strokePath() throws IOException {
// TODO Auto-generated method stub
}
@Override
public void fillPath(int windingRule) throws IOException {
// TODO Auto-generated method stub
}
@Override
public void fillAndStrokePath(int windingRule) throws IOException {
// TODO Auto-generated method stub
}
@Override
public void shadingFill(COSName shadingName) throws IOException {
// TODO Auto-generated method stub
}
// ... rest of the overridden methods
}

View File

@@ -1,7 +1,9 @@
package stirling.software.SPDF.utils;
import io.github.pixee.security.ZipSecurity;
import java.io.ByteArrayInputStream;
import java.io.IOException;
import java.nio.charset.StandardCharsets;
import java.nio.file.Files;
import java.nio.file.Path;
import java.util.ArrayList;
@@ -11,12 +13,16 @@ import java.util.stream.Stream;
import java.util.zip.ZipEntry;
import java.util.zip.ZipInputStream;
import stirling.software.SPDF.model.api.converters.HTMLToPdfRequest;
import stirling.software.SPDF.utils.ProcessExecutor.ProcessExecutorResult;
public class FileToPdf {
public static byte[] convertHtmlToPdf(
byte[] fileBytes, String fileName, boolean htmlFormatsInstalled)
HTMLToPdfRequest request,
byte[] fileBytes,
String fileName,
boolean htmlFormatsInstalled)
throws IOException, InterruptedException {
Path tempOutputFile = Files.createTempFile("output_", ".pdf");
@@ -36,6 +42,65 @@ public class FileToPdf {
} else {
command.add("wkhtmltopdf");
command.add("--enable-local-file-access");
command.add("--load-error-handling");
command.add("ignore");
command.add("--load-media-error-handling");
command.add("ignore");
command.add("--zoom");
command.add(String.valueOf(request.getZoom()));
// if custom zoom add zoom style direct to html
// https://github.com/wkhtmltopdf/wkhtmltopdf/issues/4900
if (request.getZoom() != 1.0) {
String htmlContent = new String(Files.readAllBytes(tempInputFile));
String zoomStyle = "<style>body { zoom: " + request.getZoom() + "; }</style>";
// Check for <head> tag, add style tag to associated tag
if (htmlContent.contains("<head>")) {
htmlContent = htmlContent.replace("<head>", "<head>" + zoomStyle);
} else if (htmlContent.contains("<html>")) {
// If no <head> tag, but <html> tag exists
htmlContent = htmlContent.replace("<html>", "<html>" + zoomStyle);
} else {
// If neither <head> nor <html> tags exist
htmlContent = zoomStyle + htmlContent;
}
// rewrite new html to file
Files.write(tempInputFile, htmlContent.getBytes(StandardCharsets.UTF_8));
}
if (request.getPageWidth() != null) {
command.add("--page-width");
command.add(request.getPageWidth() + "cm");
}
if (request.getPageHeight() != null) {
command.add("--page-height");
command.add(request.getPageHeight() + "cm");
}
if (request.getMarginTop() != null) {
command.add("--margin-top");
command.add(request.getMarginTop() + "mm");
}
// Repeat similar pattern for marginBottom, marginLeft, marginRight
if ("Yes".equalsIgnoreCase(request.getPrintBackground())) {
command.add("--background");
} else {
command.add("--no-background");
}
if ("Yes".equalsIgnoreCase(request.getDefaultHeader())) {
command.add("--default-header");
}
if ("print".equalsIgnoreCase(request.getCssMediaType())) {
command.add("--print-media-type");
} else if ("screen".equalsIgnoreCase(request.getCssMediaType())) {
command.add("--no-print-media-type");
}
}
command.add(tempInputFile.toString());
@@ -59,7 +124,13 @@ public class FileToPdf {
}
pdfBytes = Files.readAllBytes(tempOutputFile);
} catch (IOException e) {
pdfBytes = Files.readAllBytes(tempOutputFile);
if (pdfBytes.length < 1) {
throw e;
}
} finally {
// Clean up temporary files
Files.delete(tempOutputFile);
Files.delete(tempInputFile);
@@ -74,7 +145,7 @@ public class FileToPdf {
private static Path unzipAndGetMainHtml(byte[] fileBytes) throws IOException {
Path tempDirectory = Files.createTempDirectory("unzipped_");
try (ZipInputStream zipIn = new ZipInputStream(new ByteArrayInputStream(fileBytes))) {
try (ZipInputStream zipIn = ZipSecurity.createHardenedInputStream(new ByteArrayInputStream(fileBytes))) {
ZipEntry entry = zipIn.getNextEntry();
while (entry != null) {
Path filePath = tempDirectory.resolve(entry.getName());
@@ -102,7 +173,7 @@ public class FileToPdf {
// Prioritize 'index.html' if it exists, otherwise use the first .html file
for (Path htmlFile : htmlFiles) {
if (htmlFile.getFileName().toString().equals("index.html")) {
if ("index.html".equals(htmlFile.getFileName().toString())) {
return htmlFile;
}
}
@@ -130,7 +201,6 @@ public class FileToPdf {
command.add("ebook-convert");
command.add(tempInputFile.toString());
command.add(tempOutputFile.toString());
ProcessExecutorResult returnCode =
ProcessExecutor.getInstance(ProcessExecutor.Processes.CALIBRE)
.runCommandWithOutputHandling(command);

View File

@@ -1,5 +1,7 @@
package stirling.software.SPDF.utils;
import io.github.pixee.security.HostValidator;
import io.github.pixee.security.Urls;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
@@ -20,7 +22,7 @@ import org.springframework.web.multipart.MultipartFile;
public class GeneralUtils {
public static File convertMultipartFileToFile(MultipartFile multipartFile) throws IOException {
File tempFile = File.createTempFile("temp", null);
File tempFile = Files.createTempFile("temp", null).toFile();
try (FileOutputStream os = new FileOutputStream(tempFile)) {
os.write(multipartFile.getBytes());
}
@@ -57,7 +59,7 @@ public class GeneralUtils {
public static boolean isValidURL(String urlStr) {
try {
new URL(urlStr);
Urls.create(urlStr, Urls.HTTP_PROTOCOLS, HostValidator.DENY_COMMON_INFRASTRUCTURE_TARGETS);
return true;
} catch (MalformedURLException e) {
return false;
@@ -120,7 +122,7 @@ public class GeneralUtils {
// loop through the page order array
for (String element : pageOrderArr) {
if (element.equalsIgnoreCase("all")) {
if ("all".equalsIgnoreCase(element)) {
for (int i = 0; i < totalPages; i++) {
newPageOrder.add(i);
}
@@ -135,11 +137,11 @@ public class GeneralUtils {
if (element.contains("n")) {
String[] parts = element.split("n");
if (!parts[0].equals("") && parts[0] != null) {
if (!"".equals(parts[0]) && parts[0] != null) {
coefficient = Integer.parseInt(parts[0]);
coefficientExists = true;
}
if (parts.length > 1 && !parts[1].equals("") && parts[1] != null) {
if (parts.length > 1 && !"".equals(parts[1]) && parts[1] != null) {
constant = Integer.parseInt(parts[1]);
constantExists = true;
}

View File

@@ -1,5 +1,6 @@
package stirling.software.SPDF.utils;
import io.github.pixee.security.Filenames;
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileInputStream;
@@ -32,7 +33,7 @@ public class PDFToFile {
}
// Get the original PDF file name without the extension
String originalPdfFileName = inputFile.getOriginalFilename();
String originalPdfFileName = Filenames.toSimpleFileName(inputFile.getOriginalFilename());
String pdfBaseName = originalPdfFileName.substring(0, originalPdfFileName.lastIndexOf('.'));
// Validate output format
@@ -87,7 +88,7 @@ public class PDFToFile {
if (outputFiles.size() == 1) {
// Return single output file
File outputFile = outputFiles.get(0);
if (outputFormat.equals("txt:Text")) {
if ("txt:Text".equals(outputFormat)) {
outputFormat = "txt";
}
fileName = pdfBaseName + "." + outputFormat;

View File

@@ -1,9 +1,12 @@
package stirling.software.SPDF.utils;
import io.github.pixee.security.Filenames;
import java.awt.Graphics;
import java.awt.image.BufferedImage;
import java.awt.image.RenderedImage;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import java.util.zip.ZipEntry;
import java.util.zip.ZipOutputStream;
@@ -16,11 +19,15 @@ import javax.imageio.ImageWriter;
import javax.imageio.stream.ImageOutputStream;
import org.apache.pdfbox.Loader;
import org.apache.pdfbox.cos.COSName;
import org.apache.pdfbox.pdmodel.PDDocument;
import org.apache.pdfbox.pdmodel.PDPage;
import org.apache.pdfbox.pdmodel.PDPageContentStream;
import org.apache.pdfbox.pdmodel.PDPageContentStream.AppendMode;
import org.apache.pdfbox.pdmodel.PDResources;
import org.apache.pdfbox.pdmodel.common.PDRectangle;
import org.apache.pdfbox.pdmodel.graphics.PDXObject;
import org.apache.pdfbox.pdmodel.graphics.form.PDFormXObject;
import org.apache.pdfbox.pdmodel.graphics.image.JPEGFactory;
import org.apache.pdfbox.pdmodel.graphics.image.LosslessFactory;
import org.apache.pdfbox.pdmodel.graphics.image.PDImageXObject;
@@ -31,8 +38,6 @@ import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.web.multipart.MultipartFile;
import stirling.software.SPDF.pdf.ImageFinder;
public class PdfUtils {
private static final Logger logger = LoggerFactory.getLogger(PdfUtils.class);
@@ -62,6 +67,23 @@ public class PdfUtils {
}
}
public static List<RenderedImage> getAllImages(PDResources resources) throws IOException {
List<RenderedImage> images = new ArrayList<>();
for (COSName name : resources.getXObjectNames()) {
PDXObject object = resources.getXObject(name);
if (object instanceof PDImageXObject) {
images.add(((PDImageXObject) object).getImage());
} else if (object instanceof PDFormXObject) {
images.addAll(getAllImages(((PDFormXObject) object).getResources()));
}
}
return images;
}
public static boolean hasImages(PDDocument document, String pagesToCheck) throws IOException {
String[] pageOrderArr = pagesToCheck.split(",");
List<Integer> pageList =
@@ -94,9 +116,7 @@ public class PdfUtils {
}
public static boolean hasImagesOnPage(PDPage page) throws IOException {
ImageFinder imageFinder = new ImageFinder(page);
imageFinder.processPage(page);
return imageFinder.hasImages();
return getAllImages(page.getResources()).size() > 0;
}
public static boolean hasTextOnPage(PDPage page, String phrase) throws IOException {
@@ -113,7 +133,7 @@ public class PdfUtils {
PDFTextStripper textStripper = new PDFTextStripper();
String pdfText = "";
if (pagesToCheck == null || pagesToCheck.equals("all")) {
if (pagesToCheck == null || "all".equals(pagesToCheck)) {
pdfText = textStripper.getText(pdfDocument);
} else {
// remove whitespaces
@@ -199,8 +219,8 @@ public class PdfUtils {
ByteArrayOutputStream baos = new ByteArrayOutputStream();
if (singleImage) {
if (imageType.toLowerCase().equals("tiff")
|| imageType.toLowerCase().equals("tif")) {
if ("tiff".equals(imageType.toLowerCase())
|| "tif".equals(imageType.toLowerCase())) {
// Write the images to the output stream as a TIFF with multiple frames
ImageWriter writer = ImageIO.getImageWritersByFormatName("tiff").next();
ImageWriteParam param = writer.getDefaultWriteParam();
@@ -280,7 +300,7 @@ public class PdfUtils {
try (PDDocument doc = new PDDocument()) {
for (MultipartFile file : files) {
String contentType = file.getContentType();
String originalFilename = file.getOriginalFilename();
String originalFilename = Filenames.toSimpleFileName(file.getOriginalFilename());
if (originalFilename != null
&& (originalFilename.toLowerCase().endsWith(".tiff")
|| originalFilename.toLowerCase().endsWith(".tif"))) {
@@ -301,7 +321,7 @@ public class PdfUtils {
ImageProcessingUtils.convertColorType(image, colorType);
// Use JPEGFactory if it's JPEG since JPEG is lossy
PDImageXObject pdImage =
(contentType != null && contentType.equals("image/jpeg"))
(contentType != null && "image/jpeg".equals(contentType))
? JPEGFactory.createFromImage(doc, convertedImage)
: LosslessFactory.createFromImage(doc, convertedImage);
addImageToDocument(doc, pdImage, fitOption, autoRotate);

View File

@@ -1,5 +1,6 @@
package stirling.software.SPDF.utils;
import io.github.pixee.security.BoundedLineReader;
import java.io.BufferedReader;
import java.io.File;
import java.io.IOException;
@@ -109,7 +110,7 @@ public class ProcessExecutor {
process.getErrorStream(),
StandardCharsets.UTF_8))) {
String line;
while ((line = errorReader.readLine()) != null) {
while ((line = BoundedLineReader.readLine(errorReader, 5_000_000)) != null) {
errorLines.add(line);
if (liveUpdates) logger.info(line);
}
@@ -130,7 +131,7 @@ public class ProcessExecutor {
process.getInputStream(),
StandardCharsets.UTF_8))) {
String line;
while ((line = outputReader.readLine()) != null) {
while ((line = BoundedLineReader.readLine(outputReader, 5_000_000)) != null) {
outputLines.add(line);
if (liveUpdates) logger.info(line);
}

View File

@@ -1,5 +1,6 @@
package stirling.software.SPDF.utils;
import io.github.pixee.security.Filenames;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.net.URLEncoder;
@@ -26,7 +27,7 @@ public class WebResponseUtils {
public static ResponseEntity<byte[]> multiPartFileToWebResponse(MultipartFile file)
throws IOException {
String fileName = file.getOriginalFilename();
String fileName = Filenames.toSimpleFileName(file.getOriginalFilename());
MediaType mediaType = MediaType.parseMediaType(file.getContentType());
byte[] bytes = file.getBytes();

View File

@@ -44,7 +44,8 @@ blue=Blue
custom=Custom...
WorkInProgess=Work in progress, May not work or be buggy, Please report any ploblems!
poweredBy=Powered by
yes=Yes
no=No
changedCredsMessage=Credentials changed!
notAuthenticatedMessage=User not authenticated.
userNotFoundMessage=User not found.
@@ -68,6 +69,7 @@ pipelineOptions.header=Pipeline Configuration
pipelineOptions.pipelineNameLabel=Pipeline Name
pipelineOptions.saveSettings=Save Operation Settings
pipelineOptions.pipelineNamePrompt=Enter pipeline name here
pipelineOptions.selectOperation=Select Operation
pipelineOptions.addOperationButton=Add operation
pipelineOptions.pipelineHeader=Pipeline:
pipelineOptions.saveButton=Download
@@ -384,6 +386,11 @@ home.split-by-sections.title=Split PDF by Sections
home.split-by-sections.desc=Divide each page of a PDF into smaller horizontal and vertical sections
split-by-sections.tags=Section Split, Divide, Customize
home.AddStampRequest.title=Add Stamp to PDF
home.AddStampRequest.desc=Add text or add image stamps at set locations
AddStampRequest.tags=Stamp, Add image, center image, Watermark, PDF, Embed, Customize
###########################
# #
# WEB PAGES #
@@ -459,8 +466,38 @@ HTMLToPDF.header=HTML To PDF
HTMLToPDF.help=Accepts HTML files and ZIPs containing html/css/images etc required
HTMLToPDF.submit=Convert
HTMLToPDF.credit=Uses WeasyPrint
HTMLToPDF.zoom=Zoom level for displaying the website.
HTMLToPDF.pageWidth=Width of the page in centimeters. (Blank to default)
HTMLToPDF.pageHeight=Height of the page in centimeters. (Blank to default)
HTMLToPDF.marginTop=Top margin of the page in millimeters. (Blank to default)
HTMLToPDF.marginBottom=Bottom margin of the page in millimeters. (Blank to default)
HTMLToPDF.marginLeft=Left margin of the page in millimeters. (Blank to default)
HTMLToPDF.marginRight=Right margin of the page in millimeters. (Blank to default)
HTMLToPDF.printBackground=Render the background of websites.
HTMLToPDF.defaultHeader=Enable Default Header (Name and page number)
HTMLToPDF.cssMediaType=Change the CSS media type of the page.
HTMLToPDF.none=None
HTMLToPDF.print=Print
HTMLToPDF.screen=Screen
#AddStampRequest
AddStampRequest.header=Stamp PDF
AddStampRequest.title=Stamp PDF
AddStampRequest.stampType=Stamp Type
AddStampRequest.stampText=Stamp Text
AddStampRequest.stampImage=Stamp Image
AddStampRequest.alphabet=Alphabet
AddStampRequest.fontSize=Font/Image Size
AddStampRequest.rotation=Rotation
AddStampRequest.opacity=Opacity
AddStampRequest.position=Position
AddStampRequest.overrideX=Override X Coordinate
AddStampRequest.overrideY=Override Y Coordinate
AddStampRequest.customMargin=Custom Margin
AddStampRequest.customColor=Custom Text Color
AddStampRequest.submit=Submit
#sanitizePDF
sanitizePDF.title=Sanitize PDF
sanitizePDF.header=Sanitize a PDF file

View File

@@ -44,7 +44,8 @@ blue=Синьо
custom=Персонализиране...
WorkInProgess=Work in progress, May not work or be buggy, Please report any ploblems!
poweredBy=Powered by
yes=Yes
no=No
changedCredsMessage=Идентификационните данни са променени!
notAuthenticatedMessage=Потребителят не е автентикиран.
userNotFoundMessage=Потребителят не е намерен
@@ -68,6 +69,7 @@ pipelineOptions.header=Pipeline Configuration
pipelineOptions.pipelineNameLabel=Pipeline Name
pipelineOptions.saveSettings=Save Operation Settings
pipelineOptions.pipelineNamePrompt=Enter pipeline name here
pipelineOptions.selectOperation=Select Operation
pipelineOptions.addOperationButton=Add operation
pipelineOptions.pipelineHeader=Pipeline:
pipelineOptions.saveButton=Download
@@ -384,6 +386,11 @@ home.split-by-sections.title=Split PDF by Sections
home.split-by-sections.desc=Divide each page of a PDF into smaller horizontal and vertical sections
split-by-sections.tags=Section Split, Divide, Customize
home.AddStampRequest.title=Add Stamp to PDF
home.AddStampRequest.desc=Add text or add image stamps at set locations
AddStampRequest.tags=Stamp, Add image, center image, Watermark, PDF, Embed, Customize
###########################
# #
# WEB PAGES #
@@ -459,8 +466,38 @@ HTMLToPDF.header=HTML към PDF
HTMLToPDF.help=Приема HTML файлове и ZIP файлове, съдържащи html/css/изображения и т.н
HTMLToPDF.submit=Преобразуване
HTMLToPDF.credit=Използва WeasyPrint
HTMLToPDF.zoom=Zoom level for displaying the website.
HTMLToPDF.pageWidth=Width of the page in centimeters. (Blank to default)
HTMLToPDF.pageHeight=Height of the page in centimeters. (Blank to default)
HTMLToPDF.marginTop=Top margin of the page in millimeters. (Blank to default)
HTMLToPDF.marginBottom=Bottom margin of the page in millimeters. (Blank to default)
HTMLToPDF.marginLeft=Left margin of the page in millimeters. (Blank to default)
HTMLToPDF.marginRight=Right margin of the page in millimeters. (Blank to default)
HTMLToPDF.printBackground=Render the background of websites.
HTMLToPDF.defaultHeader=Enable Default Header (Name and page number)
HTMLToPDF.cssMediaType=Change the CSS media type of the page.
HTMLToPDF.none=None
HTMLToPDF.print=Print
HTMLToPDF.screen=Screen
#AddStampRequest
AddStampRequest.header=Stamp PDF
AddStampRequest.title=Stamp PDF
AddStampRequest.stampType=Stamp Type
AddStampRequest.stampText=Stamp Text
AddStampRequest.stampImage=Stamp Image
AddStampRequest.alphabet=Alphabet
AddStampRequest.fontSize=Font/Image Size
AddStampRequest.rotation=Rotation
AddStampRequest.opacity=Opacity
AddStampRequest.position=Position
AddStampRequest.overrideX=Override X Coordinate
AddStampRequest.overrideY=Override Y Coordinate
AddStampRequest.customMargin=Custom Margin
AddStampRequest.customColor=Custom Text Color
AddStampRequest.submit=Submit
#sanitizePDF
sanitizePDF.title=Дезинфектирай PDF
sanitizePDF.header=Дезинфектира PDF файл

View File

@@ -44,7 +44,8 @@ blue=Blau
custom=Personalitzat...
WorkInProgess=Work in progress, May not work or be buggy, Please report any ploblems!
poweredBy=Powered by
yes=Yes
no=No
changedCredsMessage=Credentials changed!
notAuthenticatedMessage=User not authenticated.
userNotFoundMessage=User not found.
@@ -68,6 +69,7 @@ pipelineOptions.header=Pipeline Configuration
pipelineOptions.pipelineNameLabel=Pipeline Name
pipelineOptions.saveSettings=Save Operation Settings
pipelineOptions.pipelineNamePrompt=Enter pipeline name here
pipelineOptions.selectOperation=Select Operation
pipelineOptions.addOperationButton=Add operation
pipelineOptions.pipelineHeader=Pipeline:
pipelineOptions.saveButton=Download
@@ -384,6 +386,11 @@ home.split-by-sections.title=Split PDF by Sections
home.split-by-sections.desc=Divide each page of a PDF into smaller horizontal and vertical sections
split-by-sections.tags=Section Split, Divide, Customize
home.AddStampRequest.title=Add Stamp to PDF
home.AddStampRequest.desc=Add text or add image stamps at set locations
AddStampRequest.tags=Stamp, Add image, center image, Watermark, PDF, Embed, Customize
###########################
# #
# WEB PAGES #
@@ -459,8 +466,38 @@ HTMLToPDF.header=HTML To PDF
HTMLToPDF.help=Accepts HTML files and ZIPs containing html/css/images etc required
HTMLToPDF.submit=Convert
HTMLToPDF.credit=Uses WeasyPrint
HTMLToPDF.zoom=Zoom level for displaying the website.
HTMLToPDF.pageWidth=Width of the page in centimeters. (Blank to default)
HTMLToPDF.pageHeight=Height of the page in centimeters. (Blank to default)
HTMLToPDF.marginTop=Top margin of the page in millimeters. (Blank to default)
HTMLToPDF.marginBottom=Bottom margin of the page in millimeters. (Blank to default)
HTMLToPDF.marginLeft=Left margin of the page in millimeters. (Blank to default)
HTMLToPDF.marginRight=Right margin of the page in millimeters. (Blank to default)
HTMLToPDF.printBackground=Render the background of websites.
HTMLToPDF.defaultHeader=Enable Default Header (Name and page number)
HTMLToPDF.cssMediaType=Change the CSS media type of the page.
HTMLToPDF.none=None
HTMLToPDF.print=Print
HTMLToPDF.screen=Screen
#AddStampRequest
AddStampRequest.header=Stamp PDF
AddStampRequest.title=Stamp PDF
AddStampRequest.stampType=Stamp Type
AddStampRequest.stampText=Stamp Text
AddStampRequest.stampImage=Stamp Image
AddStampRequest.alphabet=Alphabet
AddStampRequest.fontSize=Font/Image Size
AddStampRequest.rotation=Rotation
AddStampRequest.opacity=Opacity
AddStampRequest.position=Position
AddStampRequest.overrideX=Override X Coordinate
AddStampRequest.overrideY=Override Y Coordinate
AddStampRequest.customMargin=Custom Margin
AddStampRequest.customColor=Custom Text Color
AddStampRequest.submit=Submit
#sanitizePDF
sanitizePDF.title=Sanitize PDF
sanitizePDF.header=Sanitize a PDF file

View File

@@ -1,4 +1,4 @@
###########
###########
# Generic #
###########
# the direction that the language is written (ltr=left to right, rtl = right to left)
@@ -44,7 +44,8 @@ blue=Blau
custom=benutzerdefiniert...
WorkInProgess=Work in progress, May not work or be buggy, Please report any ploblems!
poweredBy=Powered by
yes=Yes
no=No
changedCredsMessage=Anmeldedaten geändert!
notAuthenticatedMessage=Benutzer nicht authentifiziert.
userNotFoundMessage=Benutzer nicht gefunden.
@@ -68,6 +69,7 @@ pipelineOptions.header=Pipeline Configuration
pipelineOptions.pipelineNameLabel=Pipeline Name
pipelineOptions.saveSettings=Save Operation Settings
pipelineOptions.pipelineNamePrompt=Enter pipeline name here
pipelineOptions.selectOperation=Select Operation
pipelineOptions.addOperationButton=Add operation
pipelineOptions.pipelineHeader=Pipeline:
pipelineOptions.saveButton=Download
@@ -340,22 +342,22 @@ HTMLToPDF.tags=markup,web-content,transformation,convert
home.MarkdownToPDF.title=Markdown zu PDF
home.MarkdownToPDF.desc=Konvertiert jede Markdown-Datei zu PDF
MarkdownToPDF.tags=markup,web-content,transformation,convert
MarkdownToPDF.tags=markup,web-content,transformation,konvertieren
home.getPdfInfo.title=Alle Informationen anzeigen
home.getPdfInfo.desc=Erfasst alle möglichen Informationen in einer PDF
getPdfInfo.tags=infomation,data,stats,statistics
getPdfInfo.tags=infomation,daten,statistik
home.extractPage.title=Seite(n) extrahieren
home.extractPage.desc=Extrahiert ausgewählte Seiten aus einer PDF
extractPage.tags=extract
extractPage.tags=extrahieren
home.PdfToSinglePage.title=PDF zu einer Seite zusammenfassen
home.PdfToSinglePage.desc=Fügt alle PDF-Seiten zu einer einzigen großen Seite zusammen
PdfToSinglePage.tags=single page
PdfToSinglePage.tags=einzelseite
home.showJS.title=Javascript anzeigen
@@ -363,26 +365,31 @@ home.showJS.desc=Alle Javascript Funktionen in einer PDF anzeigen
showJS.tags=JS
home.autoRedact.title=Automatisch zensieren/schwärzen
home.autoRedact.desc=Automatisches zensierten (Schwärzen) von Text in einer PDF-Datei basierend auf dem eingegebenen Text
showJS.tags=JS
home.autoRedact.desc=Automatisches Zensieren (Schwärzen) von Text in einer PDF-Datei basierend auf dem eingegebenen Text
showJS.tags=zensieren,schwärzen
home.tableExtraxt.title=Tabelle extrahieren
home.tableExtraxt.desc=Tabelle aus PDF in CSV extrahieren
tableExtraxt.tags=CSV
home.autoSizeSplitPDF.title=Auto Split by Size/Count
home.autoSizeSplitPDF.desc=Split a single PDF into multiple documents based on size, page count, or document count
autoSizeSplitPDF.tags=pdf,split,document,organization
home.autoSizeSplitPDF.title=Teilen nach Größe/Anzahl
home.autoSizeSplitPDF.desc=Teilen Sie ein einzelnes PDF basierend auf Größe, Seitenanzahl oder Dokumentanzahl in mehrere Dokumente auf
autoSizeSplitPDF.tags=pdf,teilen,dokument,organisation
home.overlay-pdfs.title=Overlay PDFs
home.overlay-pdfs.desc=Overlays PDFs on-top of another PDF
overlay-pdfs.tags=Overlay
home.overlay-pdfs.title=PDF mit Overlay versehen
home.overlay-pdfs.desc=Überlagert eine PDF über eine andere PDF
overlay-pdfs.tags=overlay,überlagern
home.split-by-sections.title=PDF in Abschnitte teilen
home.split-by-sections.desc=Teilen Sie jede Seite einer PDF-Datei in kleinere horizontale und vertikale Abschnitte auf
split-by-sections.tags=abschnitte,teilen,bearbeiten
home.AddStampRequest.title=Add Stamp to PDF
home.AddStampRequest.desc=Add text or add image stamps at set locations
AddStampRequest.tags=Stamp, Add image, center image, Watermark, PDF, Embed, Customize
home.split-by-sections.title=Split PDF by Sections
home.split-by-sections.desc=Divide each page of a PDF into smaller horizontal and vertical sections
split-by-sections.tags=Section Split, Divide, Customize
###########################
# #
@@ -408,7 +415,7 @@ autoRedact.useRegexLabel=Regex verwenden
autoRedact.wholeWordSearchLabel=Ganzes Wort suchen
autoRedact.customPaddingLabel=Benutzerdefinierte Extra-Padding
autoRedact.convertPDFToImageLabel=PDF in PDF-Bild konvertieren (zum Entfernen von Text hinter dem Kasten)
autoRedact.submitButton=zensieren
autoRedact.submitButton=Zensieren
#showJS
@@ -459,8 +466,38 @@ HTMLToPDF.header=HTML zu PDF
HTMLToPDF.help=Akzeptiert HTML-Dateien und ZIPs mit html/css/images etc.
HTMLToPDF.submit=Konvertieren
HTMLToPDF.credit=Verwendet WeasyPrint
HTMLToPDF.zoom=Zoom level for displaying the website.
HTMLToPDF.pageWidth=Width of the page in centimeters. (Blank to default)
HTMLToPDF.pageHeight=Height of the page in centimeters. (Blank to default)
HTMLToPDF.marginTop=Top margin of the page in millimeters. (Blank to default)
HTMLToPDF.marginBottom=Bottom margin of the page in millimeters. (Blank to default)
HTMLToPDF.marginLeft=Left margin of the page in millimeters. (Blank to default)
HTMLToPDF.marginRight=Right margin of the page in millimeters. (Blank to default)
HTMLToPDF.printBackground=Render the background of websites.
HTMLToPDF.defaultHeader=Enable Default Header (Name and page number)
HTMLToPDF.cssMediaType=Change the CSS media type of the page.
HTMLToPDF.none=None
HTMLToPDF.print=Print
HTMLToPDF.screen=Screen
#AddStampRequest
AddStampRequest.header=Stamp PDF
AddStampRequest.title=Stamp PDF
AddStampRequest.stampType=Stamp Type
AddStampRequest.stampText=Stamp Text
AddStampRequest.stampImage=Stamp Image
AddStampRequest.alphabet=Alphabet
AddStampRequest.fontSize=Font/Image Size
AddStampRequest.rotation=Rotation
AddStampRequest.opacity=Opacity
AddStampRequest.position=Position
AddStampRequest.overrideX=Override X Coordinate
AddStampRequest.overrideY=Override Y Coordinate
AddStampRequest.customMargin=Custom Margin
AddStampRequest.customColor=Custom Text Color
AddStampRequest.submit=Submit
#sanitizePDF
sanitizePDF.title=PDF Bereinigen
sanitizePDF.header=PDF Bereinigen
@@ -572,9 +609,9 @@ removeBlanks.submit=Leere Seiten entfernen
#removeAnnotations
removeAnnotations.title=Remove Annotations
removeAnnotations.header=Remove Annotations
removeAnnotations.submit=Remove
removeAnnotations.title=Kommentare entfernen
removeAnnotations.header=Kommentare entfernen
removeAnnotations.submit=Entfernen
#compare
@@ -591,7 +628,7 @@ sign.header=PDFs signieren
sign.upload=Bild hochladen
sign.draw=Signatur zeichnen
sign.text=Texteingabe
sign.clear=Klar
sign.clear=Leeren
sign.add=Signieren
@@ -883,44 +920,44 @@ PDFToXML.submit=Konvertieren
#PDFToCSV
PDFToCSV.title=PDF zu CSV
PDFToCSV.header=PDF zu CSV
PDFToCSV.prompt=Choose page to extract table
PDFToCSV.submit=Extrakt
PDFToCSV.prompt=Seite mit der zu extrahierenden Tabelle wählen
PDFToCSV.submit=Extrahieren
#split-by-size-or-count
split-by-size-or-count.header=Split PDF by Size or Count
split-by-size-or-count.type.label=Select Split Type
split-by-size-or-count.type.size=By Size
split-by-size-or-count.type.pageCount=By Page Count
split-by-size-or-count.type.docCount=By Document Count
split-by-size-or-count.value.label=Enter Value
split-by-size-or-count.value.placeholder=Enter size (e.g., 2MB or 3KB) or count (e.g., 5)
split-by-size-or-count.submit=Submit
split-by-size-or-count.header=PDF nach Größe oder Anzahl teilen
split-by-size-or-count.type.label=Teil-Modus wählen
split-by-size-or-count.type.size=Nach Größe
split-by-size-or-count.type.pageCount=Nach Anzahl Seiten
split-by-size-or-count.type.docCount=Nach Anzahl Dokumenten
split-by-size-or-count.value.label=Wert eingeben
split-by-size-or-count.value.placeholder=Größe eingeben (z. B.: 2MB oder 3KB) oder Anzahl (z. B.: 5)
split-by-size-or-count.submit=Erstellen
#overlay-pdfs
overlay-pdfs.header=Overlay PDF Files
overlay-pdfs.baseFile.label=Select Base PDF File
overlay-pdfs.overlayFiles.label=Select Overlay PDF Files
overlay-pdfs.mode.label=Select Overlay Mode
overlay-pdfs.mode.sequential=Sequential Overlay
overlay-pdfs.mode.interleaved=Interleaved Overlay
overlay-pdfs.mode.fixedRepeat=Fixed Repeat Overlay
overlay-pdfs.counts.label=Overlay Counts (for Fixed Repeat Mode)
overlay-pdfs.counts.placeholder=Enter comma-separated counts (e.g., 2,3,1)
overlay-pdfs.position.label=Select Overlay Position
overlay-pdfs.position.foreground=Foreground
overlay-pdfs.position.background=Background
overlay-pdfs.submit=Submit
overlay-pdfs.header=PDF mit Overlay versehen
overlay-pdfs.baseFile.label=Basis-PDF-Datei auswählen
overlay-pdfs.overlayFiles.label=Overlay-PDF-Datei auswählen
overlay-pdfs.mode.label=Overlay-Modus auswählen
overlay-pdfs.mode.sequential=Sequentielles Overlay
overlay-pdfs.mode.interleaved=Verschachteltes Overlay
overlay-pdfs.mode.fixedRepeat=Feste-Wiederholung Overlay
overlay-pdfs.counts.label=Overlay Anzahl (für Feste-Wiederholung)
overlay-pdfs.counts.placeholder=Komma-separierte Anzahl eingeben (z. B.: 2,3,1)
overlay-pdfs.position.label=Overlay Position auswählen
overlay-pdfs.position.foreground=Vordergrund
overlay-pdfs.position.background=Hintergrund
overlay-pdfs.submit=Erstellen
#split-by-sections
split-by-sections.title=Split PDF by Sections
split-by-sections.header=Split PDF into Sections
split-by-sections.horizontal.label=Horizontal Divisions
split-by-sections.vertical.label=Vertical Divisions
split-by-sections.horizontal.placeholder=Enter number of horizontal divisions
split-by-sections.vertical.placeholder=Enter number of vertical divisions
split-by-sections.submit=Split PDF
split-by-sections.title=PDF in Abschnitte teilen
split-by-sections.header=PDF in Abschnitte teilen
split-by-sections.horizontal.label=Horizontale Teiler
split-by-sections.vertical.label=Vertikale Teiler
split-by-sections.horizontal.placeholder=Anzahl horizontaler Teiler eingeben
split-by-sections.vertical.placeholder=Anzahl vertikaler Teiler eingeben
split-by-sections.submit=PDF teilen
#licenses
@@ -931,4 +968,3 @@ licenses.module=Module
licenses.version=Version
licenses.license=License

View File

@@ -44,7 +44,8 @@ blue=\u039C\u03C0\u03BB\u03AD
custom=\u03A0\u03C1\u03BF\u03C3\u03B1\u03C1\u03BC\u03BF\u03B3\u03AE...
WorkInProgess=Work in progress, May not work or be buggy, Please report any ploblems!
poweredBy=Powered by
yes=Yes
no=No
changedCredsMessage=\u03A4\u03B1 \u03B4\u03B9\u03B1\u03C0\u03B9\u03C3\u03C4\u03B5\u03C5\u03C4\u03AE\u03C1\u03B9\u03B1 \u03AD\u03C7\u03BF\u03C5\u03BD \u03B1\u03BB\u03BB\u03AC\u03BE\u03B5\u03B9!
notAuthenticatedMessage=\u039F \u03C7\u03C1\u03AE\u03C3\u03C4\u03B7\u03C2 \u03B4\u03B5\u03BD \u03AD\u03C7\u03B5\u03B9 \u03B1\u03C5\u03B8\u03B5\u03BD\u03C4\u03B9\u03BA\u03BF\u03C0\u03BF\u03B9\u03B7\u03B8\u03B5\u03AF.
userNotFoundMessage=\u039F \u03C7\u03C1\u03AE\u03C3\u03C4\u03B7\u03C2 \u03B4\u03B5\u03BD \u03B2\u03C1\u03AD\u03B8\u03B7\u03BA\u03B5.
@@ -68,6 +69,7 @@ pipelineOptions.header=Pipeline Configuration
pipelineOptions.pipelineNameLabel=Pipeline Name
pipelineOptions.saveSettings=Save Operation Settings
pipelineOptions.pipelineNamePrompt=Enter pipeline name here
pipelineOptions.selectOperation=Select Operation
pipelineOptions.addOperationButton=Add operation
pipelineOptions.pipelineHeader=Pipeline:
pipelineOptions.saveButton=Download
@@ -384,6 +386,11 @@ home.split-by-sections.title=Split PDF by Sections
home.split-by-sections.desc=Divide each page of a PDF into smaller horizontal and vertical sections
split-by-sections.tags=Section Split, Divide, Customize
home.AddStampRequest.title=Add Stamp to PDF
home.AddStampRequest.desc=Add text or add image stamps at set locations
AddStampRequest.tags=Stamp, Add image, center image, Watermark, PDF, Embed, Customize
###########################
# #
# WEB PAGES #
@@ -459,8 +466,38 @@ HTMLToPDF.header=HTML \u03C3\u03B5 PDF
HTMLToPDF.help=\u0394\u03AD\u03C7\u03B5\u03C4\u03B1\u03B9 \u03B1\u03C1\u03C7\u03B5\u03AF\u03B1 \u03C4\u03CD\u03C0\u03BF\u03C5 HTML \u03BA\u03B1\u03B9 \u03C4\u03CD\u03C0\u03BF\u03C5 ZIP \u03C0\u03BF\u03C5 \u03C0\u03B5\u03C1\u03B9\u03AD\u03C7\u03BF\u03C5\u03BD html/css/\u03B5\u03B9\u03BA\u03CC\u03BD\u03B5\u03C2 \u03BA.\u03BB\u03C0. \u03C0\u03BF\u03C5 \u03B1\u03C0\u03B1\u03B9\u03C4\u03BF\u03CD\u03BD\u03C4\u03B1\u03B9
HTMLToPDF.submit=\u039C\u03B5\u03C4\u03B1\u03C4\u03C1\u03BF\u03C0\u03AE
HTMLToPDF.credit=\u03A7\u03C1\u03B7\u03C3\u03B9\u03BC\u03BF\u03C0\u03BF\u03B9\u03B5\u03AF WeasyPrint
HTMLToPDF.zoom=Zoom level for displaying the website.
HTMLToPDF.pageWidth=Width of the page in centimeters. (Blank to default)
HTMLToPDF.pageHeight=Height of the page in centimeters. (Blank to default)
HTMLToPDF.marginTop=Top margin of the page in millimeters. (Blank to default)
HTMLToPDF.marginBottom=Bottom margin of the page in millimeters. (Blank to default)
HTMLToPDF.marginLeft=Left margin of the page in millimeters. (Blank to default)
HTMLToPDF.marginRight=Right margin of the page in millimeters. (Blank to default)
HTMLToPDF.printBackground=Render the background of websites.
HTMLToPDF.defaultHeader=Enable Default Header (Name and page number)
HTMLToPDF.cssMediaType=Change the CSS media type of the page.
HTMLToPDF.none=None
HTMLToPDF.print=Print
HTMLToPDF.screen=Screen
#AddStampRequest
AddStampRequest.header=Stamp PDF
AddStampRequest.title=Stamp PDF
AddStampRequest.stampType=Stamp Type
AddStampRequest.stampText=Stamp Text
AddStampRequest.stampImage=Stamp Image
AddStampRequest.alphabet=Alphabet
AddStampRequest.fontSize=Font/Image Size
AddStampRequest.rotation=Rotation
AddStampRequest.opacity=Opacity
AddStampRequest.position=Position
AddStampRequest.overrideX=Override X Coordinate
AddStampRequest.overrideY=Override Y Coordinate
AddStampRequest.customMargin=Custom Margin
AddStampRequest.customColor=Custom Text Color
AddStampRequest.submit=Submit
#sanitizePDF
sanitizePDF.title=\u0391\u03C0\u03BF\u03BB\u03CD\u03BC\u03B1\u03BD\u03C3\u03B7 PDF
sanitizePDF.header=\u0391\u03C0\u03BF\u03BB\u03CD\u03BC\u03B1\u03BD\u03C3\u03B7 \u03B5\u03BD\u03CC\u03C2 PDF \u03B1\u03C1\u03C7\u03B5\u03AF\u03BF\u03C5

View File

@@ -44,7 +44,8 @@ blue=Blue
custom=Custom...
WorkInProgess=Work in progress, May not work or be buggy, Please report any ploblems!
poweredBy=Powered by
yes=Yes
no=No
changedCredsMessage=Credentials changed!
notAuthenticatedMessage=User not authenticated.
userNotFoundMessage=User not found.
@@ -385,6 +386,11 @@ home.split-by-sections.title=Split PDF by Sections
home.split-by-sections.desc=Divide each page of a PDF into smaller horizontal and vertical sections
split-by-sections.tags=Section Split, Divide, Customize
home.AddStampRequest.title=Add Stamp to PDF
home.AddStampRequest.desc=Add text or add image stamps at set locations
AddStampRequest.tags=Stamp, Add image, center image, Watermark, PDF, Embed, Customize
###########################
# #
# WEB PAGES #
@@ -460,8 +466,38 @@ HTMLToPDF.header=HTML To PDF
HTMLToPDF.help=Accepts HTML files and ZIPs containing html/css/images etc required
HTMLToPDF.submit=Convert
HTMLToPDF.credit=Uses WeasyPrint
HTMLToPDF.zoom=Zoom level for displaying the website.
HTMLToPDF.pageWidth=Width of the page in centimeters. (Blank to default)
HTMLToPDF.pageHeight=Height of the page in centimeters. (Blank to default)
HTMLToPDF.marginTop=Top margin of the page in millimeters. (Blank to default)
HTMLToPDF.marginBottom=Bottom margin of the page in millimeters. (Blank to default)
HTMLToPDF.marginLeft=Left margin of the page in millimeters. (Blank to default)
HTMLToPDF.marginRight=Right margin of the page in millimeters. (Blank to default)
HTMLToPDF.printBackground=Render the background of websites.
HTMLToPDF.defaultHeader=Enable Default Header (Name and page number)
HTMLToPDF.cssMediaType=Change the CSS media type of the page.
HTMLToPDF.none=None
HTMLToPDF.print=Print
HTMLToPDF.screen=Screen
#AddStampRequest
AddStampRequest.header=Stamp PDF
AddStampRequest.title=Stamp PDF
AddStampRequest.stampType=Stamp Type
AddStampRequest.stampText=Stamp Text
AddStampRequest.stampImage=Stamp Image
AddStampRequest.alphabet=Alphabet
AddStampRequest.fontSize=Font/Image Size
AddStampRequest.rotation=Rotation
AddStampRequest.opacity=Opacity
AddStampRequest.position=Position
AddStampRequest.overrideX=Override X Coordinate
AddStampRequest.overrideY=Override Y Coordinate
AddStampRequest.customMargin=Custom Margin
AddStampRequest.customColor=Custom Text Color
AddStampRequest.submit=Submit
#sanitizePDF
sanitizePDF.title=Sanitize PDF
sanitizePDF.header=Sanitize a PDF file

View File

@@ -44,7 +44,8 @@ blue=Blue
custom=Custom...
WorkInProgess=Work in progress, May not work or be buggy, Please report any ploblems!
poweredBy=Powered by
yes=Yes
no=No
changedCredsMessage=Credentials changed!
notAuthenticatedMessage=User not authenticated.
userNotFoundMessage=User not found.
@@ -68,6 +69,7 @@ pipelineOptions.header=Pipeline Configuration
pipelineOptions.pipelineNameLabel=Pipeline Name
pipelineOptions.saveSettings=Save Operation Settings
pipelineOptions.pipelineNamePrompt=Enter pipeline name here
pipelineOptions.selectOperation=Select Operation
pipelineOptions.addOperationButton=Add operation
pipelineOptions.pipelineHeader=Pipeline:
pipelineOptions.saveButton=Download
@@ -384,6 +386,11 @@ home.split-by-sections.title=Split PDF by Sections
home.split-by-sections.desc=Divide each page of a PDF into smaller horizontal and vertical sections
split-by-sections.tags=Section Split, Divide, Customize
home.AddStampRequest.title=Add Stamp to PDF
home.AddStampRequest.desc=Add text or add image stamps at set locations
AddStampRequest.tags=Stamp, Add image, center image, Watermark, PDF, Embed, Customize
###########################
# #
# WEB PAGES #
@@ -459,8 +466,38 @@ HTMLToPDF.header=HTML To PDF
HTMLToPDF.help=Accepts HTML files and ZIPs containing html/css/images etc required
HTMLToPDF.submit=Convert
HTMLToPDF.credit=Uses WeasyPrint
HTMLToPDF.zoom=Zoom level for displaying the website.
HTMLToPDF.pageWidth=Width of the page in centimeters. (Blank to default)
HTMLToPDF.pageHeight=Height of the page in centimeters. (Blank to default)
HTMLToPDF.marginTop=Top margin of the page in millimeters. (Blank to default)
HTMLToPDF.marginBottom=Bottom margin of the page in millimeters. (Blank to default)
HTMLToPDF.marginLeft=Left margin of the page in millimeters. (Blank to default)
HTMLToPDF.marginRight=Right margin of the page in millimeters. (Blank to default)
HTMLToPDF.printBackground=Render the background of websites.
HTMLToPDF.defaultHeader=Enable Default Header (Name and page number)
HTMLToPDF.cssMediaType=Change the CSS media type of the page.
HTMLToPDF.none=None
HTMLToPDF.print=Print
HTMLToPDF.screen=Screen
#AddStampRequest
AddStampRequest.header=Stamp PDF
AddStampRequest.title=Stamp PDF
AddStampRequest.stampType=Stamp Type
AddStampRequest.stampText=Stamp Text
AddStampRequest.stampImage=Stamp Image
AddStampRequest.alphabet=Alphabet
AddStampRequest.fontSize=Font/Image Size
AddStampRequest.rotation=Rotation
AddStampRequest.opacity=Opacity
AddStampRequest.position=Position
AddStampRequest.overrideX=Override X Coordinate
AddStampRequest.overrideY=Override Y Coordinate
AddStampRequest.customMargin=Custom Margin
AddStampRequest.customColor=Custom Text Color
AddStampRequest.submit=Submit
#sanitizePDF
sanitizePDF.title=Sanitize PDF
sanitizePDF.header=Sanitize a PDF file

View File

@@ -44,7 +44,8 @@ blue=Azul
custom=Personalizado...
WorkInProgess=Work in progress, May not work or be buggy, Please report any ploblems!
poweredBy=Powered by
yes=Yes
no=No
changedCredsMessage=Se cambiaron las credenciales!
notAuthenticatedMessage=Usuario no autentificado.
userNotFoundMessage=Usuario no encontrado.
@@ -68,6 +69,7 @@ pipelineOptions.header=Pipeline Configuration
pipelineOptions.pipelineNameLabel=Pipeline Name
pipelineOptions.saveSettings=Save Operation Settings
pipelineOptions.pipelineNamePrompt=Enter pipeline name here
pipelineOptions.selectOperation=Select Operation
pipelineOptions.addOperationButton=Add operation
pipelineOptions.pipelineHeader=Pipeline:
pipelineOptions.saveButton=Download
@@ -384,6 +386,11 @@ home.split-by-sections.title=Dividir PDF por Secciones
home.split-by-sections.desc=Dividir cada página de un PDF en secciones verticales y horizontales más pequeñas
split-by-sections.tags=Dividir sección, Dividir, Personalizar
home.AddStampRequest.title=Add Stamp to PDF
home.AddStampRequest.desc=Add text or add image stamps at set locations
AddStampRequest.tags=Stamp, Add image, center image, Watermark, PDF, Embed, Customize
###########################
# #
# WEB PAGES #
@@ -459,8 +466,38 @@ HTMLToPDF.header=HTML a PDF
HTMLToPDF.help=Acepta archivos HTML y ZIPs conteniendo los html/css/imágenes, etc, requeridas
HTMLToPDF.submit=Convertir
HTMLToPDF.credit=Utiliza WeasyPrint
HTMLToPDF.zoom=Zoom level for displaying the website.
HTMLToPDF.pageWidth=Width of the page in centimeters. (Blank to default)
HTMLToPDF.pageHeight=Height of the page in centimeters. (Blank to default)
HTMLToPDF.marginTop=Top margin of the page in millimeters. (Blank to default)
HTMLToPDF.marginBottom=Bottom margin of the page in millimeters. (Blank to default)
HTMLToPDF.marginLeft=Left margin of the page in millimeters. (Blank to default)
HTMLToPDF.marginRight=Right margin of the page in millimeters. (Blank to default)
HTMLToPDF.printBackground=Render the background of websites.
HTMLToPDF.defaultHeader=Enable Default Header (Name and page number)
HTMLToPDF.cssMediaType=Change the CSS media type of the page.
HTMLToPDF.none=None
HTMLToPDF.print=Print
HTMLToPDF.screen=Screen
#AddStampRequest
AddStampRequest.header=Stamp PDF
AddStampRequest.title=Stamp PDF
AddStampRequest.stampType=Stamp Type
AddStampRequest.stampText=Stamp Text
AddStampRequest.stampImage=Stamp Image
AddStampRequest.alphabet=Alphabet
AddStampRequest.fontSize=Font/Image Size
AddStampRequest.rotation=Rotation
AddStampRequest.opacity=Opacity
AddStampRequest.position=Position
AddStampRequest.overrideX=Override X Coordinate
AddStampRequest.overrideY=Override Y Coordinate
AddStampRequest.customMargin=Custom Margin
AddStampRequest.customColor=Custom Text Color
AddStampRequest.submit=Submit
#sanitizePDF
sanitizePDF.title=Desinfectar archivo PDF
sanitizePDF.header=Desinfectar un archivo PDF

View File

@@ -44,7 +44,8 @@ blue=Urdina
custom=Pertsonalizatu...
WorkInProgess=Work in progress, May not work or be buggy, Please report any ploblems!
poweredBy=Powered by
yes=Yes
no=No
changedCredsMessage=Credentials changed!
notAuthenticatedMessage=User not authenticated.
userNotFoundMessage=User not found.
@@ -68,6 +69,7 @@ pipelineOptions.header=Pipeline Configuration
pipelineOptions.pipelineNameLabel=Pipeline Name
pipelineOptions.saveSettings=Save Operation Settings
pipelineOptions.pipelineNamePrompt=Enter pipeline name here
pipelineOptions.selectOperation=Select Operation
pipelineOptions.addOperationButton=Add operation
pipelineOptions.pipelineHeader=Pipeline:
pipelineOptions.saveButton=Download
@@ -384,6 +386,11 @@ home.split-by-sections.title=Split PDF by Sections
home.split-by-sections.desc=Divide each page of a PDF into smaller horizontal and vertical sections
split-by-sections.tags=Section Split, Divide, Customize
home.AddStampRequest.title=Add Stamp to PDF
home.AddStampRequest.desc=Add text or add image stamps at set locations
AddStampRequest.tags=Stamp, Add image, center image, Watermark, PDF, Embed, Customize
###########################
# #
# WEB PAGES #
@@ -459,8 +466,38 @@ HTMLToPDF.header=HTML bat PDF-ra
HTMLToPDF.help=Html/css/images etab dituen HTML eta Zip fitxategiak onartzen ditu
HTMLToPDF.submit=Bihurtu
HTMLToPDF.credit=WeasyPrint darabil
HTMLToPDF.zoom=Zoom level for displaying the website.
HTMLToPDF.pageWidth=Width of the page in centimeters. (Blank to default)
HTMLToPDF.pageHeight=Height of the page in centimeters. (Blank to default)
HTMLToPDF.marginTop=Top margin of the page in millimeters. (Blank to default)
HTMLToPDF.marginBottom=Bottom margin of the page in millimeters. (Blank to default)
HTMLToPDF.marginLeft=Left margin of the page in millimeters. (Blank to default)
HTMLToPDF.marginRight=Right margin of the page in millimeters. (Blank to default)
HTMLToPDF.printBackground=Render the background of websites.
HTMLToPDF.defaultHeader=Enable Default Header (Name and page number)
HTMLToPDF.cssMediaType=Change the CSS media type of the page.
HTMLToPDF.none=None
HTMLToPDF.print=Print
HTMLToPDF.screen=Screen
#AddStampRequest
AddStampRequest.header=Stamp PDF
AddStampRequest.title=Stamp PDF
AddStampRequest.stampType=Stamp Type
AddStampRequest.stampText=Stamp Text
AddStampRequest.stampImage=Stamp Image
AddStampRequest.alphabet=Alphabet
AddStampRequest.fontSize=Font/Image Size
AddStampRequest.rotation=Rotation
AddStampRequest.opacity=Opacity
AddStampRequest.position=Position
AddStampRequest.overrideX=Override X Coordinate
AddStampRequest.overrideY=Override Y Coordinate
AddStampRequest.customMargin=Custom Margin
AddStampRequest.customColor=Custom Text Color
AddStampRequest.submit=Submit
#sanitizePDF
sanitizePDF.title=PDF-a desinfektatu
sanitizePDF.header=PDF fitxategi bat desinfektatu

View File

@@ -44,7 +44,8 @@ blue=Bleu
custom=Personnalisé\u2026
WorkInProgess=Work in progress, May not work or be buggy, Please report any ploblems!
poweredBy=Powered by
yes=Yes
no=No
changedCredsMessage=Les identifiants ont été mis à jour\u00a0!
notAuthenticatedMessage=Utilisateur non authentifié.
userNotFoundMessage=Utilisateur non trouvé.
@@ -68,6 +69,7 @@ pipelineOptions.header=Pipeline Configuration
pipelineOptions.pipelineNameLabel=Pipeline Name
pipelineOptions.saveSettings=Save Operation Settings
pipelineOptions.pipelineNamePrompt=Enter pipeline name here
pipelineOptions.selectOperation=Select Operation
pipelineOptions.addOperationButton=Add operation
pipelineOptions.pipelineHeader=Pipeline:
pipelineOptions.saveButton=Download
@@ -384,6 +386,11 @@ home.split-by-sections.title=Split PDF by Sections
home.split-by-sections.desc=Divide each page of a PDF into smaller horizontal and vertical sections
split-by-sections.tags=Section Split, Divide, Customize
home.AddStampRequest.title=Add Stamp to PDF
home.AddStampRequest.desc=Add text or add image stamps at set locations
AddStampRequest.tags=Stamp, Add image, center image, Watermark, PDF, Embed, Customize
###########################
# #
# WEB PAGES #
@@ -459,8 +466,38 @@ HTMLToPDF.header=HTML en PDF
HTMLToPDF.help=Accepte les fichiers HTML et les ZIP contenant du HTML, du CSS, des images, etc. (requis).
HTMLToPDF.submit=Convertir
HTMLToPDF.credit=Utilise WeasyPrint.
HTMLToPDF.zoom=Zoom level for displaying the website.
HTMLToPDF.pageWidth=Width of the page in centimeters. (Blank to default)
HTMLToPDF.pageHeight=Height of the page in centimeters. (Blank to default)
HTMLToPDF.marginTop=Top margin of the page in millimeters. (Blank to default)
HTMLToPDF.marginBottom=Bottom margin of the page in millimeters. (Blank to default)
HTMLToPDF.marginLeft=Left margin of the page in millimeters. (Blank to default)
HTMLToPDF.marginRight=Right margin of the page in millimeters. (Blank to default)
HTMLToPDF.printBackground=Render the background of websites.
HTMLToPDF.defaultHeader=Enable Default Header (Name and page number)
HTMLToPDF.cssMediaType=Change the CSS media type of the page.
HTMLToPDF.none=None
HTMLToPDF.print=Print
HTMLToPDF.screen=Screen
#AddStampRequest
AddStampRequest.header=Stamp PDF
AddStampRequest.title=Stamp PDF
AddStampRequest.stampType=Stamp Type
AddStampRequest.stampText=Stamp Text
AddStampRequest.stampImage=Stamp Image
AddStampRequest.alphabet=Alphabet
AddStampRequest.fontSize=Font/Image Size
AddStampRequest.rotation=Rotation
AddStampRequest.opacity=Opacity
AddStampRequest.position=Position
AddStampRequest.overrideX=Override X Coordinate
AddStampRequest.overrideY=Override Y Coordinate
AddStampRequest.customMargin=Custom Margin
AddStampRequest.customColor=Custom Text Color
AddStampRequest.submit=Submit
#sanitizePDF
sanitizePDF.title=Assainir
sanitizePDF.header=Assainir

View File

@@ -44,7 +44,8 @@ blue=नीला
custom=कस्टम...
WorkInProgess=Work in progress, May not work or be buggy, Please report any ploblems!
poweredBy=Powered by
yes=Yes
no=No
changedCredsMessage=क्रेडेंशियल्स बदल दी गईं!
notAuthenticatedMessage=उपयोगकर्ता प्रमाणित नहीं है।
userNotFoundMessage=उपयोगकर्ता नहीं मिला।
@@ -68,6 +69,7 @@ pipelineOptions.header=Pipeline Configuration
pipelineOptions.pipelineNameLabel=Pipeline Name
pipelineOptions.saveSettings=Save Operation Settings
pipelineOptions.pipelineNamePrompt=Enter pipeline name here
pipelineOptions.selectOperation=Select Operation
pipelineOptions.addOperationButton=Add operation
pipelineOptions.pipelineHeader=Pipeline:
pipelineOptions.saveButton=Download
@@ -384,6 +386,11 @@ home.split-by-sections.title=खंडों से पीडीएफ़ वि
home.split-by-sections.desc=पीडीएफ़ के प्रत्येक पृष्ठ को छोटे से छोटे क्षैतिज और ऊर्ध्वाधर खंडों में विभाजित करें
split-by-sections.tags=खंड विभाजन, विभाजित करें, अनुकूलित
home.AddStampRequest.title=Add Stamp to PDF
home.AddStampRequest.desc=Add text or add image stamps at set locations
AddStampRequest.tags=Stamp, Add image, center image, Watermark, PDF, Embed, Customize
###########################
# #
# WEB PAGES #
@@ -459,8 +466,38 @@ HTMLToPDF.header=HTML से पीडीएफ़
HTMLToPDF.help=HTML फ़ाइलों और html/css/images आदि को आत्मसात करने वाले ZIPs को स्वीकार करता है
HTMLToPDF.submit=रूपांतरित करें
HTMLToPDF.credit=WeasyPrint का प्रयोग होता है
HTMLToPDF.zoom=Zoom level for displaying the website.
HTMLToPDF.pageWidth=Width of the page in centimeters. (Blank to default)
HTMLToPDF.pageHeight=Height of the page in centimeters. (Blank to default)
HTMLToPDF.marginTop=Top margin of the page in millimeters. (Blank to default)
HTMLToPDF.marginBottom=Bottom margin of the page in millimeters. (Blank to default)
HTMLToPDF.marginLeft=Left margin of the page in millimeters. (Blank to default)
HTMLToPDF.marginRight=Right margin of the page in millimeters. (Blank to default)
HTMLToPDF.printBackground=Render the background of websites.
HTMLToPDF.defaultHeader=Enable Default Header (Name and page number)
HTMLToPDF.cssMediaType=Change the CSS media type of the page.
HTMLToPDF.none=None
HTMLToPDF.print=Print
HTMLToPDF.screen=Screen
#AddStampRequest
AddStampRequest.header=Stamp PDF
AddStampRequest.title=Stamp PDF
AddStampRequest.stampType=Stamp Type
AddStampRequest.stampText=Stamp Text
AddStampRequest.stampImage=Stamp Image
AddStampRequest.alphabet=Alphabet
AddStampRequest.fontSize=Font/Image Size
AddStampRequest.rotation=Rotation
AddStampRequest.opacity=Opacity
AddStampRequest.position=Position
AddStampRequest.overrideX=Override X Coordinate
AddStampRequest.overrideY=Override Y Coordinate
AddStampRequest.customMargin=Custom Margin
AddStampRequest.customColor=Custom Text Color
AddStampRequest.submit=Submit
#sanitizePDF
sanitizePDF.title=पीडीएफ़ को सफाई करें
sanitizePDF.header=एक पीडीएफ़ फ़ाइल को सफाई करें

View File

@@ -44,7 +44,8 @@ blue=Kék
custom=Egyedi...
WorkInProgess=Work in progress, May not work or be buggy, Please report any ploblems!
poweredBy=Powered by
yes=Yes
no=No
changedCredsMessage=A hitelek megváltoztak!
notAuthenticatedMessage=Felhasználó nincs hitelesítve.
userNotFoundMessage=A felhasználó nem található.
@@ -68,6 +69,7 @@ pipelineOptions.header=Pipeline Configuration
pipelineOptions.pipelineNameLabel=Pipeline Name
pipelineOptions.saveSettings=Save Operation Settings
pipelineOptions.pipelineNamePrompt=Enter pipeline name here
pipelineOptions.selectOperation=Select Operation
pipelineOptions.addOperationButton=Add operation
pipelineOptions.pipelineHeader=Pipeline:
pipelineOptions.saveButton=Download
@@ -384,6 +386,11 @@ home.split-by-sections.title=PDF Szakaszokra osztása
home.split-by-sections.desc=Minden oldal felosztása kisebb vízszintes és függőleges szakaszokra
split-by-sections.tags=Szakasz elosztás, felosztás, testreszabás
home.AddStampRequest.title=Add Stamp to PDF
home.AddStampRequest.desc=Add text or add image stamps at set locations
AddStampRequest.tags=Stamp, Add image, center image, Watermark, PDF, Embed, Customize
###########################
# #
# WEB PAGES #
@@ -459,8 +466,38 @@ HTMLToPDF.header=HTML >> PDF
HTMLToPDF.help=Elfogad HTML fájlokat és ZIP-fájlokat, amelyek tartalmaznak html/css/képeket stb.
HTMLToPDF.submit=Átalakítás
HTMLToPDF.credit=WeasyPrint alkalmazása
HTMLToPDF.zoom=Zoom level for displaying the website.
HTMLToPDF.pageWidth=Width of the page in centimeters. (Blank to default)
HTMLToPDF.pageHeight=Height of the page in centimeters. (Blank to default)
HTMLToPDF.marginTop=Top margin of the page in millimeters. (Blank to default)
HTMLToPDF.marginBottom=Bottom margin of the page in millimeters. (Blank to default)
HTMLToPDF.marginLeft=Left margin of the page in millimeters. (Blank to default)
HTMLToPDF.marginRight=Right margin of the page in millimeters. (Blank to default)
HTMLToPDF.printBackground=Render the background of websites.
HTMLToPDF.defaultHeader=Enable Default Header (Name and page number)
HTMLToPDF.cssMediaType=Change the CSS media type of the page.
HTMLToPDF.none=None
HTMLToPDF.print=Print
HTMLToPDF.screen=Screen
#AddStampRequest
AddStampRequest.header=Stamp PDF
AddStampRequest.title=Stamp PDF
AddStampRequest.stampType=Stamp Type
AddStampRequest.stampText=Stamp Text
AddStampRequest.stampImage=Stamp Image
AddStampRequest.alphabet=Alphabet
AddStampRequest.fontSize=Font/Image Size
AddStampRequest.rotation=Rotation
AddStampRequest.opacity=Opacity
AddStampRequest.position=Position
AddStampRequest.overrideX=Override X Coordinate
AddStampRequest.overrideY=Override Y Coordinate
AddStampRequest.customMargin=Custom Margin
AddStampRequest.customColor=Custom Text Color
AddStampRequest.submit=Submit
#sanitizePDF
sanitizePDF.title=PDF tisztítása
sanitizePDF.header=PDF fájl megtisztítása

View File

@@ -44,7 +44,8 @@ blue=Biru
custom=Kustom...
WorkInProgess=Work in progress, May not work or be buggy, Please report any ploblems!
poweredBy=Powered by
yes=Yes
no=No
changedCredsMessage=Kredensial berubah!!
notAuthenticatedMessage=Pengguna tidak ter-autentikasi.
userNotFoundMessage=Pengguna tidak ditemukan.
@@ -68,6 +69,7 @@ pipelineOptions.header=Pipeline Configuration
pipelineOptions.pipelineNameLabel=Pipeline Name
pipelineOptions.saveSettings=Save Operation Settings
pipelineOptions.pipelineNamePrompt=Enter pipeline name here
pipelineOptions.selectOperation=Select Operation
pipelineOptions.addOperationButton=Add operation
pipelineOptions.pipelineHeader=Pipeline:
pipelineOptions.saveButton=Download
@@ -384,6 +386,11 @@ home.split-by-sections.title=Membagi PDF berdasarkan Bagian
home.split-by-sections.desc=Membagi setiap halaman PDF menjadi beberapa bagian horizontal dan vertikal yang lebih kecil
split-by-sections.tags=Membagi Bagian, Membagi, Menyesuaikan
home.AddStampRequest.title=Add Stamp to PDF
home.AddStampRequest.desc=Add text or add image stamps at set locations
AddStampRequest.tags=Stamp, Add image, center image, Watermark, PDF, Embed, Customize
###########################
# #
# WEB PAGES #
@@ -459,8 +466,38 @@ HTMLToPDF.header=HTML Ke PDF
HTMLToPDF.help=Menerima berkas HTML dan ZIP yang berisi html / css / gambar, dll yang diperlukan
HTMLToPDF.submit=Konversi
HTMLToPDF.credit=Menggunakan WeasyPrint
HTMLToPDF.zoom=Zoom level for displaying the website.
HTMLToPDF.pageWidth=Width of the page in centimeters. (Blank to default)
HTMLToPDF.pageHeight=Height of the page in centimeters. (Blank to default)
HTMLToPDF.marginTop=Top margin of the page in millimeters. (Blank to default)
HTMLToPDF.marginBottom=Bottom margin of the page in millimeters. (Blank to default)
HTMLToPDF.marginLeft=Left margin of the page in millimeters. (Blank to default)
HTMLToPDF.marginRight=Right margin of the page in millimeters. (Blank to default)
HTMLToPDF.printBackground=Render the background of websites.
HTMLToPDF.defaultHeader=Enable Default Header (Name and page number)
HTMLToPDF.cssMediaType=Change the CSS media type of the page.
HTMLToPDF.none=None
HTMLToPDF.print=Print
HTMLToPDF.screen=Screen
#AddStampRequest
AddStampRequest.header=Stamp PDF
AddStampRequest.title=Stamp PDF
AddStampRequest.stampType=Stamp Type
AddStampRequest.stampText=Stamp Text
AddStampRequest.stampImage=Stamp Image
AddStampRequest.alphabet=Alphabet
AddStampRequest.fontSize=Font/Image Size
AddStampRequest.rotation=Rotation
AddStampRequest.opacity=Opacity
AddStampRequest.position=Position
AddStampRequest.overrideX=Override X Coordinate
AddStampRequest.overrideY=Override Y Coordinate
AddStampRequest.customMargin=Custom Margin
AddStampRequest.customColor=Custom Text Color
AddStampRequest.submit=Submit
#sanitizePDF
sanitizePDF.title=Bersihkan PDF
sanitizePDF.header=Membersihkan berkas PDF

View File

@@ -44,7 +44,8 @@ blue=Blu
custom=Personalizzato
WorkInProgess=Lavori in corso, potrebbe non funzionare o essere difettoso, segnalare eventuali problemi!
poweredBy=Alimentato da
yes=Si
no=No
changedCredsMessage=Credenziali cambiate!
notAuthenticatedMessage=Utente non autenticato.
userNotFoundMessage=Utente non trovato.
@@ -68,6 +69,7 @@ pipelineOptions.header=Configurazione Pipeline
pipelineOptions.pipelineNameLabel=Nome della Pipeline
pipelineOptions.saveSettings=Salva Impostazioni
pipelineOptions.pipelineNamePrompt=Inserisci qui il nome della pipeline
pipelineOptions.selectOperation=Seleziona operazione
pipelineOptions.addOperationButton=Aggiungi operazione
pipelineOptions.pipelineHeader=Pipeline:
pipelineOptions.saveButton=Download
@@ -234,7 +236,7 @@ ocr.tags=riconoscimento,testo,immagine,scansione,lettura,identificazione,rilevam
home.extractImages.title=Estrai immagini
home.extractImages.desc=Estrai tutte le immagini da un PDF e salvale come zip.
extractImages.tags=picture,photo,save,archive,zip,capture,grab
extractImages.tags=immagine,photo,save,archive,zip,capture,grab
home.pdfToPDFA.title=Converti in PDF/A
home.pdfToPDFA.desc=Converti un PDF nel formato PDF/A per archiviazione a lungo termine.
@@ -311,7 +313,7 @@ add-page-numbers.tags=impaginare,etichettare,organizzare,indicizzare
home.auto-rename.title=Rinomina automaticamente il file PDF
home.auto-rename.desc=Rinomina automaticamente un file PDF in base all'intestazione rilevata
auto-rename.tags=arilevamento automatico,basato su intestazione,organizzazione,rietichettatura
auto-rename.tags=rilevamento automatico,basato su intestazione,organizzazione,rietichettatura
home.adjust-contrast.title=Regola colori/contrasto
home.adjust-contrast.desc=Regola contrasto, saturazione e luminosità di un PDF
@@ -384,6 +386,11 @@ home.split-by-sections.title=Dividi PDF per sezioni
home.split-by-sections.desc=Dividi ciascuna pagina di un PDF in sezioni orizzontali e verticali più piccole
split-by-sections.tags=Dividi sezione, dividi, personalizza
home.AddStampRequest.title=Aggiungi timbro al PDF
home.AddStampRequest.desc=Aggiungi testo o aggiungi timbri immagine nelle posizioni prestabilite
AddStampRequest.tags=Timbro, Aggiungi immagine, Centra immagine, Filigrana, PDF, Incorpora, Personalizza
###########################
# #
# WEB PAGES #
@@ -459,8 +466,38 @@ HTMLToPDF.header=HTML a PDF
HTMLToPDF.help=Accetta file HTML e ZIP contenenti html/css/immagini ecc. richiesti
HTMLToPDF.submit=Converti
HTMLToPDF.credit=Utilizza WeasyPrint
HTMLToPDF.zoom=Livello di zoom per la visualizzazione del sito web.
HTMLToPDF.pageWidth=Larghezza della pagina in centimetri. (Vuoto per impostazione predefinita)
HTMLToPDF.pageHeight=Altezza della pagina in centimetri. (Vuoto per impostazione predefinita)
HTMLToPDF.marginTop=Margine superiore della pagina in millimetri. (Vuoto per impostazione predefinita)
HTMLToPDF.marginBottom=Margine inferiore della pagina in millimetri. (Vuoto per impostazione predefinita)
HTMLToPDF.marginLeft=Margine sinistro della pagina in millimetri. (Vuoto per impostazione predefinita)
HTMLToPDF.marginRight=Margine destro della pagina in millimetri. (Vuoto per impostazione predefinita)
HTMLToPDF.printBackground=Rendering dello sfondo dei siti Web.
HTMLToPDF.defaultHeader=Abilita intestazione predefinita (nome e numero di pagina)
HTMLToPDF.cssMediaType=Cambia il tipo di supporto CSS della pagina.
HTMLToPDF.none=Nessuno
HTMLToPDF.print=Stampa
HTMLToPDF.screen=Schermo
#AddStampRequest
AddStampRequest.header=Timbro PDF
AddStampRequest.title=Timbro PDF
AddStampRequest.stampType=Tipo di timbro
AddStampRequest.stampText=Testo del timbro
AddStampRequest.stampImage=Immagine del timbro
AddStampRequest.alphabet=Alfabeto
AddStampRequest.fontSize=Dimensione carattere/immagine
AddStampRequest.rotation=Rotazione
AddStampRequest.opacity=Opacità
AddStampRequest.position=Posizione
AddStampRequest.overrideX=Sostituisci la coordinata X
AddStampRequest.overrideY=Sostituisci la coordinata Y
AddStampRequest.customMargin=Margine personalizzato
AddStampRequest.customColor=Colore testo personalizzato
AddStampRequest.submit=Invia
#sanitizePDF
sanitizePDF.title=Pulire PDF
sanitizePDF.header=Pulisci un file PDF

View File

@@ -44,7 +44,8 @@ blue=青
custom=カスタム...
WorkInProgess=Work in progress, May not work or be buggy, Please report any ploblems!
poweredBy=Powered by
yes=Yes
no=No
changedCredsMessage=資格情報が変更されました!
notAuthenticatedMessage=ユーザーが認証されていません。
userNotFoundMessage=ユーザーが見つかりません。
@@ -55,23 +56,24 @@ usernameExistsMessage=新しいユーザー名はすでに存在します。
###############
# Pipeline #
###############
pipeline.header=Pipeline Menu (Alpha)
pipeline.header=パイプラインメニュー (Alpha)
pipeline.uploadButton=Upload Custom
pipeline.configureButton=Configure
pipeline.defaultOption=Custom
pipeline.submitButton=Submit
pipeline.configureButton=設定
pipeline.defaultOption=カスタム
pipeline.submitButton=送信
######################
# Pipeline Options #
######################
pipelineOptions.header=Pipeline Configuration
pipelineOptions.pipelineNameLabel=Pipeline Name
pipelineOptions.saveSettings=Save Operation Settings
pipelineOptions.pipelineNamePrompt=Enter pipeline name here
pipelineOptions.addOperationButton=Add operation
pipelineOptions.pipelineHeader=Pipeline:
pipelineOptions.saveButton=Download
pipelineOptions.validateButton=Validate
pipelineOptions.header=パイプライン設定
pipelineOptions.pipelineNameLabel=パイプライン名
pipelineOptions.saveSettings=動作設定の保存
pipelineOptions.pipelineNamePrompt=ここにパイプライン名を入力
pipelineOptions.selectOperation=Select Operation
pipelineOptions.addOperationButton=動作の追加
pipelineOptions.pipelineHeader=パイプライン:
pipelineOptions.saveButton=ダウンロード
pipelineOptions.validateButton=検証
@@ -281,8 +283,8 @@ home.removeBlanks.title=空白ページの削除
home.removeBlanks.desc=ドキュメントから空白ページを検出して削除します。
removeBlanks.tags=cleanup,streamline,non-content,organize
home.removeAnnotations.title=Remove Annotations
home.removeAnnotations.desc=Removes all comments/annotations from a PDF
home.removeAnnotations.title=注釈の削除
home.removeAnnotations.desc=PDFからすべてのコメント・注釈を削除します。
removeAnnotations.tags=comments,highlight,notes,markup,remove
home.compare.title=比較
@@ -366,24 +368,29 @@ home.autoRedact.title=自動塗りつぶし
home.autoRedact.desc=入力したテキストに基づいてPDF内のテキストを自動で塗りつぶし(黒塗り)します。
showJS.tags=JS
home.tableExtraxt.title=PDF to CSV
home.tableExtraxt.desc=Extracts Tables from a PDF converting it to CSV
home.tableExtraxt.title=PDFをCSVに変換
home.tableExtraxt.desc=PDFから表を抽出しCSVに変換します。
tableExtraxt.tags=CSV,Table Extraction,extract,convert
home.autoSizeSplitPDF.title=Auto Split by Size/Count
home.autoSizeSplitPDF.desc=Split a single PDF into multiple documents based on size, page count, or document count
home.autoSizeSplitPDF.title=サイズ・数による自動分割
home.autoSizeSplitPDF.desc=サイズ・ページ数またはドキュメント数に基づいて、1つのPDFを複数のドキュメントに分割します。
autoSizeSplitPDF.tags=pdf,split,document,organization
home.overlay-pdfs.title=Overlay PDFs
home.overlay-pdfs.desc=Overlays PDFs on-top of another PDF
home.overlay-pdfs.title=PDFのオーバーレイ
home.overlay-pdfs.desc=PDFの上に別のPDFを重ねます。
overlay-pdfs.tags=Overlay
home.split-by-sections.title=Split PDF by Sections
home.split-by-sections.desc=Divide each page of a PDF into smaller horizontal and vertical sections
home.split-by-sections.title=PDFをセクションで分割
home.split-by-sections.desc=PDFの各ページを縦横に分割します。
split-by-sections.tags=Section Split, Divide, Customize
home.AddStampRequest.title=Add Stamp to PDF
home.AddStampRequest.desc=Add text or add image stamps at set locations
AddStampRequest.tags=Stamp, Add image, center image, Watermark, PDF, Embed, Customize
###########################
# #
# WEB PAGES #
@@ -459,8 +466,38 @@ HTMLToPDF.header=HTMLをPDFに変換
HTMLToPDF.help=HTMLファイルと必要なhtml/css/画像などを含むZIPを受け入れます
HTMLToPDF.submit=変換
HTMLToPDF.credit=WeasyPrintを使用
HTMLToPDF.zoom=Zoom level for displaying the website.
HTMLToPDF.pageWidth=Width of the page in centimeters. (Blank to default)
HTMLToPDF.pageHeight=Height of the page in centimeters. (Blank to default)
HTMLToPDF.marginTop=Top margin of the page in millimeters. (Blank to default)
HTMLToPDF.marginBottom=Bottom margin of the page in millimeters. (Blank to default)
HTMLToPDF.marginLeft=Left margin of the page in millimeters. (Blank to default)
HTMLToPDF.marginRight=Right margin of the page in millimeters. (Blank to default)
HTMLToPDF.printBackground=Render the background of websites.
HTMLToPDF.defaultHeader=Enable Default Header (Name and page number)
HTMLToPDF.cssMediaType=Change the CSS media type of the page.
HTMLToPDF.none=None
HTMLToPDF.print=Print
HTMLToPDF.screen=Screen
#AddStampRequest
AddStampRequest.header=Stamp PDF
AddStampRequest.title=Stamp PDF
AddStampRequest.stampType=Stamp Type
AddStampRequest.stampText=Stamp Text
AddStampRequest.stampImage=Stamp Image
AddStampRequest.alphabet=Alphabet
AddStampRequest.fontSize=Font/Image Size
AddStampRequest.rotation=Rotation
AddStampRequest.opacity=Opacity
AddStampRequest.position=Position
AddStampRequest.overrideX=Override X Coordinate
AddStampRequest.overrideY=Override Y Coordinate
AddStampRequest.customMargin=Custom Margin
AddStampRequest.customColor=Custom Text Color
AddStampRequest.submit=Submit
#sanitizePDF
sanitizePDF.title=PDFをサニタイズ
sanitizePDF.header=PDFファイルをサニタイズ
@@ -572,8 +609,8 @@ removeBlanks.submit=空白ページの削除
#removeAnnotations
removeAnnotations.title=Remove Annotations
removeAnnotations.header=Remove Annotations
removeAnnotations.title=注釈の削除
removeAnnotations.header=注釈の削除
removeAnnotations.submit=Remove
@@ -881,54 +918,53 @@ PDFToXML.credit=本サービスはファイル変換にLibreOfficeを使用し
PDFToXML.submit=変換
#PDFToCSV
PDFToCSV.title=PDF??CSV?
PDFToCSV.header=PDF??CSV?
PDFToCSV.prompt=Choose page to extract table
PDFToCSV.submit=????
PDFToCSV.title=PDFCSVに変換
PDFToCSV.header=PDFCSVに変換
PDFToCSV.prompt=表を抽出するページを選択
PDFToCSV.submit=変換
#split-by-size-or-count
split-by-size-or-count.header=Split PDF by Size or Count
split-by-size-or-count.type.label=Select Split Type
split-by-size-or-count.type.size=By Size
split-by-size-or-count.type.pageCount=By Page Count
split-by-size-or-count.type.docCount=By Document Count
split-by-size-or-count.value.label=Enter Value
split-by-size-or-count.value.placeholder=Enter size (e.g., 2MB or 3KB) or count (e.g., 5)
split-by-size-or-count.submit=Submit
split-by-size-or-count.header=サイズまたは数で分割
split-by-size-or-count.type.label=分割タイプの選択
split-by-size-or-count.type.size=サイズ
split-by-size-or-count.type.pageCount=ページ数
split-by-size-or-count.type.docCount=ドキュメント数
split-by-size-or-count.value.label=値の入力
split-by-size-or-count.value.placeholder=サイズ (例、2MB または 3KB) または数値 (例、5) を入力
split-by-size-or-count.submit=分割
#overlay-pdfs
overlay-pdfs.header=Overlay PDF Files
overlay-pdfs.baseFile.label=Select Base PDF File
overlay-pdfs.overlayFiles.label=Select Overlay PDF Files
overlay-pdfs.mode.label=Select Overlay Mode
overlay-pdfs.mode.sequential=Sequential Overlay
overlay-pdfs.mode.interleaved=Interleaved Overlay
overlay-pdfs.mode.fixedRepeat=Fixed Repeat Overlay
overlay-pdfs.counts.label=Overlay Counts (for Fixed Repeat Mode)
overlay-pdfs.counts.placeholder=Enter comma-separated counts (e.g., 2,3,1)
overlay-pdfs.position.label=Select Overlay Position
overlay-pdfs.position.foreground=Foreground
overlay-pdfs.position.background=Background
overlay-pdfs.submit=Submit
overlay-pdfs.header=PDFのオーバーレイ
overlay-pdfs.baseFile.label=ベースのPDFを選択
overlay-pdfs.overlayFiles.label=重ねるPDFを選択
overlay-pdfs.mode.label=オーバーレイモードの選択
overlay-pdfs.mode.sequential=シーケンシャル・オーバーレイ
overlay-pdfs.mode.interleaved=インターリーブ・オーバーレイ
overlay-pdfs.mode.fixedRepeat=固定リピート・オーバーレイ
overlay-pdfs.counts.label=オーバーレイ回数 (固定リピートモード用)
overlay-pdfs.counts.placeholder=カンマ区切りでカウントを入力 (例、2,3,1)
overlay-pdfs.position.label=重ね位置の選択
overlay-pdfs.position.foreground=前面
overlay-pdfs.position.background=背面
overlay-pdfs.submit=重ねる
#split-by-sections
split-by-sections.title=Split PDF by Sections
split-by-sections.header=Split PDF into Sections
split-by-sections.horizontal.label=Horizontal Divisions
split-by-sections.vertical.label=Vertical Divisions
split-by-sections.horizontal.placeholder=Enter number of horizontal divisions
split-by-sections.vertical.placeholder=Enter number of vertical divisions
split-by-sections.submit=Split PDF
split-by-sections.title=セクションごとにPDFを分割する
split-by-sections.header=PDFをセクションに分割
split-by-sections.horizontal.label=水平方向
split-by-sections.vertical.label=垂直方向
split-by-sections.horizontal.placeholder=水平方向の分割数を選択
split-by-sections.vertical.placeholder=垂直方向の分割数を選択
split-by-sections.submit=分割
#licenses
licenses.nav=Licenses
licenses.title=3rd Party Licenses
licenses.header=3rd Party Licenses
licenses.module=Module
licenses.version=Version
licenses.license=License
licenses.nav=ライセンス
licenses.title=サードパーティライセンス
licenses.header=サードパーティライセンス
licenses.module=モジュール
licenses.version=バージョン
licenses.license=ライセンス

View File

@@ -44,7 +44,8 @@ blue=Blue
custom=Custom...
WorkInProgess=Work in progress, May not work or be buggy, Please report any ploblems!
poweredBy=Powered by
yes=Yes
no=No
changedCredsMessage=계정 정보 변경 성공!
notAuthenticatedMessage=User not authenticated.
userNotFoundMessage=사용자를 찾을 수 없습니다.
@@ -68,6 +69,7 @@ pipelineOptions.header=Pipeline Configuration
pipelineOptions.pipelineNameLabel=Pipeline Name
pipelineOptions.saveSettings=Save Operation Settings
pipelineOptions.pipelineNamePrompt=Enter pipeline name here
pipelineOptions.selectOperation=Select Operation
pipelineOptions.addOperationButton=Add operation
pipelineOptions.pipelineHeader=Pipeline:
pipelineOptions.saveButton=Download
@@ -384,6 +386,11 @@ home.split-by-sections.title=Split PDF by Sections
home.split-by-sections.desc=Divide each page of a PDF into smaller horizontal and vertical sections
split-by-sections.tags=Section Split, Divide, Customize
home.AddStampRequest.title=Add Stamp to PDF
home.AddStampRequest.desc=Add text or add image stamps at set locations
AddStampRequest.tags=Stamp, Add image, center image, Watermark, PDF, Embed, Customize
###########################
# #
# WEB PAGES #
@@ -459,8 +466,38 @@ HTMLToPDF.header=HTML 파일을 PDF 문서로 변환
HTMLToPDF.help=HTML 파일, 또는 html/css/이미지 등을 포함한 ZIP 파일을 받습니다.
HTMLToPDF.submit=변환
HTMLToPDF.credit=이 기능은 WeasyPrint를 사용합니다.
HTMLToPDF.zoom=Zoom level for displaying the website.
HTMLToPDF.pageWidth=Width of the page in centimeters. (Blank to default)
HTMLToPDF.pageHeight=Height of the page in centimeters. (Blank to default)
HTMLToPDF.marginTop=Top margin of the page in millimeters. (Blank to default)
HTMLToPDF.marginBottom=Bottom margin of the page in millimeters. (Blank to default)
HTMLToPDF.marginLeft=Left margin of the page in millimeters. (Blank to default)
HTMLToPDF.marginRight=Right margin of the page in millimeters. (Blank to default)
HTMLToPDF.printBackground=Render the background of websites.
HTMLToPDF.defaultHeader=Enable Default Header (Name and page number)
HTMLToPDF.cssMediaType=Change the CSS media type of the page.
HTMLToPDF.none=None
HTMLToPDF.print=Print
HTMLToPDF.screen=Screen
#AddStampRequest
AddStampRequest.header=Stamp PDF
AddStampRequest.title=Stamp PDF
AddStampRequest.stampType=Stamp Type
AddStampRequest.stampText=Stamp Text
AddStampRequest.stampImage=Stamp Image
AddStampRequest.alphabet=Alphabet
AddStampRequest.fontSize=Font/Image Size
AddStampRequest.rotation=Rotation
AddStampRequest.opacity=Opacity
AddStampRequest.position=Position
AddStampRequest.overrideX=Override X Coordinate
AddStampRequest.overrideY=Override Y Coordinate
AddStampRequest.customMargin=Custom Margin
AddStampRequest.customColor=Custom Text Color
AddStampRequest.submit=Submit
#sanitizePDF
sanitizePDF.title=PDF 정제
sanitizePDF.header=PDF 문서 정제

View File

@@ -4,7 +4,7 @@
# the direction that the language is written (ltr=left to right, rtl = right to left)
language.direction=ltr
pdfPrompt=Selecteer PDF(s)
pdfPrompt=Selecteer PDF('s)
multiPdfPrompt=Selecteer PDFs (2+)
multiPdfDropPrompt=Selecteer (of sleep & zet neer) alle PDFs die je nodig hebt
imgPrompt=Selecteer afbeelding(en)
@@ -29,49 +29,51 @@ pageNum=Paginanummer
sizes.small=Klein
sizes.medium=Medium
sizes.large=Groot
sizes.x-large=Extra Groot
error.pdfPassword=Het PDF document is beveiligd met een wachtwoord en het wachtwoord is niet ingevoerd of was onjuist
sizes.x-large=Extra groot
error.pdfPassword=Het PDF document is beveiligd met een wachtwoord en het wachtwoord is niet ingevoerd of is onjuist
delete=Verwijderen
username=Gebruikersnaam
password=Wachtwoord
welcome=Welkom
property=Property
black=Black
white=White
red=Red
green=Green
blue=Blue
custom=Custom...
WorkInProgess=Work in progress, May not work or be buggy, Please report any ploblems!
poweredBy=Powered by
changedCredsMessage=Credentials changed!
notAuthenticatedMessage=User not authenticated.
userNotFoundMessage=User not found.
incorrectPasswordMessage=Current password is incorrect.
usernameExistsMessage=New Username already exists.
property=Eigenschap
black=Zwart
white=Wit
red=Rood
green=Groen
blue=Blauw
custom=Aangepast...
WorkInProgess=Werk in uitvoering. Werkt mogelijk niet of bevat fouten. Meld eventuele problemen!
poweredBy=Mogelijk gemaakt door
yes=Ja
no=Nee
changedCredsMessage=Inloggegevens gewijzigd!
notAuthenticatedMessage=Gebruiker niet ingelogd.
userNotFoundMessage=Gebruiker niet gevonden.
incorrectPasswordMessage=Huidige wachtwoord is onjuist.
usernameExistsMessage=Nieuwe gebruikersnaam bestaat al.
###############
# Pipeline #
###############
pipeline.header=Pipeline Menu (Alpha)
pipeline.uploadButton=Upload Custom
pipeline.configureButton=Configure
pipeline.defaultOption=Custom
pipeline.submitButton=Submit
pipeline.header=Pijplijn menu (Alpha)
pipeline.uploadButton=Aangepast uploaden
pipeline.configureButton=Configureren
pipeline.defaultOption=Aangepast
pipeline.submitButton=Opslaan
######################
# Pipeline Options #
######################
pipelineOptions.header=Pipeline Configuration
pipelineOptions.pipelineNameLabel=Pipeline Name
pipelineOptions.saveSettings=Save Operation Settings
pipelineOptions.pipelineNamePrompt=Enter pipeline name here
pipelineOptions.addOperationButton=Add operation
pipelineOptions.pipelineHeader=Pipeline:
pipelineOptions.saveButton=Download
pipelineOptions.validateButton=Validate
pipelineOptions.header=Pijplijn onfiguratie
pipelineOptions.pipelineNameLabel=Pijplijn naam
pipelineOptions.saveSettings=Instellingen voor bewerking opslaan
pipelineOptions.pipelineNamePrompt=Voer hier de naam van de pijplijn in
pipelineOptions.selectOperation=Selecteer bewerking
pipelineOptions.addOperationButton=Bewerking toevoegen
pipelineOptions.pipelineHeader=Pijplijn:
pipelineOptions.saveButton=Downloaden
pipelineOptions.validateButton=Valideren
@@ -83,7 +85,7 @@ navbar.convert=Converteren
navbar.security=Beveiliging
navbar.other=Overige
navbar.darkmode=Donkere modus
navbar.pageOps=Pagina operaties
navbar.pageOps=Pagina bewerkingen
navbar.settings=Instellingen
#############
@@ -96,20 +98,20 @@ settings.downloadOption.title=Kies download optie (Voor enkelvoudige bestanddown
settings.downloadOption.1=Open in hetzelfde venster
settings.downloadOption.2=Open in nieuw venster
settings.downloadOption.3=Download bestand
settings.zipThreshold=Zip bestanden wanneer het aantal gedownloade bestanden overschrijdt
settings.zipThreshold=Bestanden zippen wanneer het aantal gedownloade bestanden meer is dan
settings.signOut=Uitloggen
settings.accountSettings=Account instellingen
changeCreds.title=Change Credentials
changeCreds.header=Update Your Account Details
changeCreds.changeUserAndPassword=You are using default login credentials. Please enter a new password (and username if wanted)
changeCreds.newUsername=New Username
changeCreds.oldPassword=Current Password
changeCreds.newPassword=New Password
changeCreds.confirmNewPassword=Confirm New Password
changeCreds.submit=Submit Changes
changeCreds.title=Inloggegevens wijzigen
changeCreds.header=Werk je accountgegevens bij
changeCreds.changeUserAndPassword=Je gebruikt de standaard inloggegevens. Voer een nieuw wachtwoord in (en eventueel een gebruikersnaam)
changeCreds.newUsername=Nieuwe gebruikersnaam
changeCreds.oldPassword=Huidige wachtwoord
changeCreds.newPassword=Nieuw wachtwoord
changeCreds.confirmNewPassword=Bevestig nieuw wachtwoord
changeCreds.submit=Wijzigingen opslaan
@@ -129,13 +131,13 @@ account.yourApiKey=Jouw API sleutel
account.syncTitle=Synchroniseer browserinstellingen met account
account.settingsCompare=Instellingen vergelijking:
account.property=Eigenschap
account.webBrowserSettings=Web Browser instelling
account.webBrowserSettings=Webbrowser instelling
account.syncToBrowser=Synchroniseer account -> browser
account.syncToAccount=Synchroniseer account <- browser
adminUserSettings.title=Gebruikerscontrole instellingen
adminUserSettings.header=Beheer Gebruikerscontrole instellingen
adminUserSettings.title=Gebruikersbeheer
adminUserSettings.header=Beheer gebruikers
adminUserSettings.admin=Beheerder
adminUserSettings.user=Gebruiker
adminUserSettings.addUser=Voeg nieuwe gebruiker toe
@@ -144,35 +146,35 @@ adminUserSettings.role=Rol
adminUserSettings.actions=Acties
adminUserSettings.apiUser=Beperkte API gebruiker
adminUserSettings.webOnlyUser=Alleen web gebruiker
adminUserSettings.demoUser=Demo User (No custom settings)
adminUserSettings.forceChange=Force user to change username/password on login
adminUserSettings.submit=Sla gebruiker op
adminUserSettings.demoUser=Demogebruiker (geen aangepaste instellingen)
adminUserSettings.forceChange=Forceer gebruiker om gebruikersnaam/wachtwoord te wijzigen bij inloggen
adminUserSettings.submit=Gebruiker opslaan
#############
# HOME-PAGE #
#############
home.desc=Jouw lokaal gehoste one-stop-shop voor al je PDF-behoeften.
home.searchBar=Search for features...
home.searchBar=Zoeken naar functies...
home.viewPdf.title=View PDF
home.viewPdf.desc=View, annotate, add text or images
viewPdf.tags=view,read,annotate,text,image
home.viewPdf.title=PDF bekijken
home.viewPdf.desc=Bekijk, annoteer, voeg tekst of afbeeldingen toe
viewPdf.tags=bekijken,lezen,annoteren,tekst,afbeelding
home.multiTool.title=PDF Multitool
home.multiTool.desc=Samenvoegen, draaien, herschikken en pagina''s verwijderen
home.multiTool.title=PDF multitool
home.multiTool.desc=Pagina's samenvoegen, draaien, herschikken en verwijderen
multiTool.tags=Multitool,Multi bewerking,UI,klik sleep,voorkant,clientzijde,interactief,beweegbaar,verplaats
home.merge.title=Samenvoegen
home.merge.desc=Voeg eenvoudig meerdere PDF''s samen tot één.
merge.tags=samenvoegen,Pagina operaties,Serverkant
home.merge.desc=Voeg eenvoudig meerdere PDF's samen tot één.
merge.tags=samenvoegen,Pagina bewerkingen,Serverkant
home.split.title=Splitsen
home.split.desc=Splits PDF''s in meerdere documenten
split.tags=Pagina operaties,verdelen,meerdere pagina''s,knippen,serverzijde
home.split.desc=Splits PDF's in meerdere documenten
split.tags=Pagina bewerkingen,verdelen,meerdere pagina's,knippen,serverzijde
home.rotate.title=Roteren
home.rotate.desc=Roteer eenvoudig je PDF''s.
home.rotate.desc=Roteer eenvoudig je PDF's.
rotate.tags=serverzijde
@@ -185,7 +187,7 @@ home.pdfToImage.desc=Converteer een PDF naar een afbeelding. (PNG, JPEG, GIF)
pdfToImage.tags=conversie,img,jpg,foto
home.pdfOrganiser.title=Organiseren
home.pdfOrganiser.desc=Verwijder/Herschik pagina''s in een volgorde naar keus
home.pdfOrganiser.desc=Verwijder/herschik pagina's in een volgorde naar keus
pdfOrganiser.tags=duplex,even oneven,sorteren,verplaatsen
@@ -203,8 +205,8 @@ permissions.tags=lezen,schrijven,bewerken,printen
home.removePages.title=Verwijderen
home.removePages.desc=Verwijder ongewenste pagina''s uit je PDF-document.
removePages.tags=Pagina''s verwijderen
home.removePages.desc=Verwijder ongewenste pagina's uit je PDF-document.
removePages.tags=Pagina's verwijderen
home.addPassword.title=Wachtwoord toevoegen
home.addPassword.desc=Versleutel je PDF-document met een wachtwoord.
@@ -220,7 +222,7 @@ compressPdfs.tags=comprimeren,klein
home.changeMetadata.title=Metadata wijzigen
home.changeMetadata.desc=Wijzig/Verwijder/Voeg metadata toe van een PDF-document
home.changeMetadata.desc=Wijzig/verwijder/voeg metadata toe van een PDF-document
changeMetadata.tags=Titel,auteur,datum,creatie,tijd,uitgever,producent,statistieken
home.fileToPDF.title=Bestand naar PDF converteren
@@ -261,8 +263,8 @@ home.PDFToXML.title=PDF naar XML
home.PDFToXML.desc=Converteer PDF naar XML formaat
PDFToXML.tags=data-extractie,gestructureerd,code
home.ScannerImageSplit.title=Detecteer/Split gescande foto''s
home.ScannerImageSplit.desc=Splits meerdere foto''s van binnen een foto/PDF
home.ScannerImageSplit.title=Detecteer/Split gescande foto's
home.ScannerImageSplit.desc=Splits meerdere foto's van binnen een foto/PDF
ScannerImageSplit.tags=scheiden,auto-detecteren,scans,meer-foto,organiseren
home.sign.title=Ondertekenen
@@ -277,16 +279,16 @@ home.repair.title=Repareren
home.repair.desc=Probeert een corrupt/beschadigd PDF te herstellen
repair.tags=repareren,herstellen,correctie,terughalen
home.removeBlanks.title=Verwijder lege pagina''s
home.removeBlanks.desc=Detecteert en verwijdert lege pagina''s uit een document
home.removeBlanks.title=Verwijder lege pagina's
home.removeBlanks.desc=Detecteert en verwijdert lege pagina's uit een document
removeBlanks.tags=opruimen,stroomlijnen,geen-inhoud,organiseren
home.removeAnnotations.title=Remove Annotations
home.removeAnnotations.desc=Removes all comments/annotations from a PDF
removeAnnotations.tags=comments,highlight,notes,markup,remove
home.removeAnnotations.title=Annotaties verwijderen
home.removeAnnotations.desc=Verwijdert alle opmerkingen/annotaties uit een PDF
removeAnnotations.tags=opmerkingen,highlight,notities,opmaak,verwijderen
home.compare.title=Vergelijken
home.compare.desc=Vergelijkt en toont de verschillen tussen 2 PDF-documenten
home.compare.desc=Vergelijkt en toont de verschillen tussen twee PDF-documenten
compare.tags=onderscheiden,contrasteren,veranderingen,analyse
home.certSign.title=Ondertekenen met certificaat
@@ -294,7 +296,7 @@ home.certSign.desc=Ondertekent een PDF met een certificaat/sleutel (PEM/P12)
certSign.tags=authenticeren,PEM,P12,officieel,versleutelen
home.pageLayout.title=Multi-pagina indeling
home.pageLayout.desc=Voeg meerdere pagina''s van een PDF-document samen op één pagina
home.pageLayout.desc=Voeg meerdere pagina's van een PDF-document samen op één pagina
pageLayout.tags=samenvoegen,composiet,enkel-zicht,organiseren
home.scalePages.title=Aanpassen paginaformaat/schaal
@@ -302,7 +304,7 @@ home.scalePages.desc=Wijzig de grootte/schaal van een pagina en/of de inhoud erv
scalePages.tags=resize,aanpassen,dimensie,aanpassen
home.pipeline.title=Pijplijn (Geavanceerd)
home.pipeline.desc=Voer meerdere acties uit op PDF''s door pipelinescripts te definiëren
home.pipeline.desc=Voer meerdere acties uit op PDF's door pipelinescripts te definiëren
pipeline.tags=automatiseren,volgorde,gescrript,batch-verwerking
home.add-page-numbers.title=Paginanummers toevoegen
@@ -313,15 +315,15 @@ home.auto-rename.title=Automatisch hernoemen PDF-bestand
home.auto-rename.desc=Hernoemt automatisch een PDF-bestand op basis van de gedetecteerde header
auto-rename.tags=auto-detecteren,op-header-gebaseerd,organiseren,herlabelen
home.adjust-contrast.title=Kleuren/Contrast aanpassen
home.adjust-contrast.desc=Pas Contrast, Verzadiging en Helderheid van een PDF aan
home.adjust-contrast.title=Kleuren/contrast aanpassen
home.adjust-contrast.desc=Pas contrast, verzadiging en helderheid van een PDF aan
adjust-contrast.tags=kleur-correctie,afstemmen,aanpassen,verbeteren
home.crop.title=PDF bijsnijden
home.crop.desc=Snijd een PDF bij om de grootte te verkleinen (behoudt tekst!)
crop.tags=trimmen,verkleinen,bewerken,vorm
home.autoSplitPDF.title=Automatisch splitsen pagina''s
home.autoSplitPDF.title=Automatisch splitsen pagina's
home.autoSplitPDF.desc=Automatisch splitsen van gescande PDF met fysieke gescande paginasplitter QR-code
autoSplitPDF.tags=QR-gebaseerd,scheiden,scan-segment,organiseren
@@ -329,7 +331,7 @@ home.sanitizePdf.title=Opschonen
home.sanitizePdf.desc=Verwijder scripts en andere elementen uit PDF-bestanden
sanitizePdf.tags=schoonmaken,veilig,veilig,bedreigingen verwijderen
home.URLToPDF.title=URL/Website naar PDF
home.URLToPDF.title=URL/website naar PDF
home.URLToPDF.desc=Zet http(s)URL om naar PDF
URLToPDF.tags=web-capture,pagina opslaan,web-naar-doc,archief
@@ -344,17 +346,17 @@ MarkdownToPDF.tags=markup,web-inhoud,transformatie,omzetten
home.getPdfInfo.title=Haal ALLE informatie op over PDF
home.getPdfInfo.desc=Haalt alle mogelijke informatie op van PDF''s
home.getPdfInfo.desc=Haalt alle mogelijke informatie op van PDF's
getPdfInfo.tags=informatie,data,statistieken
home.extractPage.title=Pagina(''s) extraheren
home.extractPage.desc=Extraheert geselecteerde pagina''s uit PDF
home.extractPage.title=Pagina('s) extraheren
home.extractPage.desc=Extraheert geselecteerde pagina's uit PDF
extractPage.tags=extraheren
home.PdfToSinglePage.title=PDF naar één grote pagina
home.PdfToSinglePage.desc=Voegt alle PDF-pagina''s samen tot één grote pagina
home.PdfToSinglePage.desc=Voegt alle PDF-pagina's samen tot één grote pagina
PdfToSinglePage.tags=één pagina
@@ -362,27 +364,32 @@ home.showJS.title=Toon Javascript
home.showJS.desc=Zoekt en toont ieder script dat in een PDF is geïnjecteerd
showJS.tags=JS
home.autoRedact.title=Auto Redact
home.autoRedact.desc=Auto Redacts(Blacks out) text in a PDF based on input text
home.autoRedact.title=Automatisch censureren
home.autoRedact.desc=Automatisch censureren (onherkenbaar maken) van tekst in een PDF op basis van ingevoerde tekst
showJS.tags=JS
home.tableExtraxt.title=PDF to CSV
home.tableExtraxt.desc=Extracts Tables from a PDF converting it to CSV
tableExtraxt.tags=CSV,Table Extraction,extract,convert
home.tableExtraxt.title=PDF naar CSV
home.tableExtraxt.desc=Haalt tabellen uit een PDF en converteert ze naar CSV
tableExtraxt.tags=CSV,tabel extractie,extractie,converteren
home.autoSizeSplitPDF.title=Auto Split by Size/Count
home.autoSizeSplitPDF.desc=Split a single PDF into multiple documents based on size, page count, or document count
autoSizeSplitPDF.tags=pdf,split,document,organization
home.autoSizeSplitPDF.title=Automatisch splitsen op grootte/aantal
home.autoSizeSplitPDF.desc=Splits een enkele PDF in meerdere documenten op basis van grootte, aantal pagina's of aantal documenten
autoSizeSplitPDF.tags=pdf,splitsen,document,organiseren
home.overlay-pdfs.title=Overlay PDFs
home.overlay-pdfs.desc=Overlays PDFs on-top of another PDF
overlay-pdfs.tags=Overlay
home.overlay-pdfs.title=PDF's overlappen
home.overlay-pdfs.desc=Plaatst PDF's over een andere PDF heen
overlay-pdfs.tags=Overlappen
home.split-by-sections.title=PDF in secties splitsen
home.split-by-sections.desc=Verdeel elke pagina van een PDF in kleinere horizontale en verticale secties
split-by-sections.tags=Sectie splitsen, Verdelen, Aanpassen
home.AddStampRequest.title=Stempel toevoegen aan PDF
home.AddStampRequest.desc=Voeg tekst of afbeeldingsstempels toe op vaste locaties
AddStampRequest.tags=Stempel, Afbeelding toevoegen, afbeelding centreren, watermerk, PDF, Insluiten, Aanpassen
home.split-by-sections.title=Split PDF by Sections
home.split-by-sections.desc=Divide each page of a PDF into smaller horizontal and vertical sections
split-by-sections.tags=Section Split, Divide, Customize
###########################
# #
@@ -390,25 +397,25 @@ split-by-sections.tags=Section Split, Divide, Customize
# #
###########################
#login
login.title=Sign in
login.signin=Sign in
login.rememberme=Remember me
login.invalid=Invalid username or password.
login.locked=Your account has been locked.
login.signinTitle=Please sign in
login.title=Inloggen
login.signin=Inloggen
login.rememberme=Onthoud mij
login.invalid=Ongeldige gebruikersnaam of wachtwoord.
login.locked=Je account is geblokkeerd.
login.signinTitle=Gelieve in te loggen
#auto-redact
autoRedact.title=Auto Redact
autoRedact.header=Auto Redact
autoRedact.colorLabel=Colour
autoRedact.textsToRedactLabel=Text to Redact (line-separated)
autoRedact.textsToRedactPlaceholder=e.g. \nConfidential \nTop-Secret
autoRedact.useRegexLabel=Use Regex
autoRedact.wholeWordSearchLabel=Whole Word Search
autoRedact.customPaddingLabel=Custom Extra Padding
autoRedact.convertPDFToImageLabel=Convert PDF to PDF-Image (Used to remove text behind the box)
autoRedact.submitButton=Submit
autoRedact.title=Automatisch censureren
autoRedact.header=Automatisch censureren
autoRedact.colorLabel=Kleur
autoRedact.textsToRedactLabel=Tekst om te censureren (gescheiden door regels)
autoRedact.textsToRedactPlaceholder=bijv.\Vertrouwelijk \nTopgeheim
autoRedact.useRegexLabel=Gebruik regex
autoRedact.wholeWordSearchLabel=Zoeken op hele woorden
autoRedact.customPaddingLabel=Aangepaste extra ruimtevulling
autoRedact.convertPDFToImageLabel=Converteer PDF naar PDF-afbeelding (wordt gebruikt om tekst achter het vak te verwijderen)
autoRedact.submitButton=Indienen
#showJS
@@ -425,8 +432,8 @@ pdfToSinglePage.submit=Converteren naar enkele pagina
#pageExtracter
pageExtracter.title=Pagina''s extraheren
pageExtracter.header=Pagina''s extraheren
pageExtracter.title=Pagina's extraheren
pageExtracter.header=Pagina's extraheren
pageExtracter.submit=Extraheren
@@ -456,11 +463,41 @@ URLToPDF.credit=Gebruikt WeasyPrint
#html-to-pdf
HTMLToPDF.title=HTML naar PDF
HTMLToPDF.header=HTML naar PDF
HTMLToPDF.help=Accepteert HTML-bestanden en ZIP''s die html/css/afbeeldingen etc. bevatten
HTMLToPDF.help=Accepteert HTML-bestanden en ZIP's die html/css/afbeeldingen etc. bevatten
HTMLToPDF.submit=Converteren
HTMLToPDF.credit=Gebruikt WeasyPrint
HTMLToPDF.zoom=Zoom level for displaying the website.
HTMLToPDF.pageWidth=Breedte van de pagina in centimeters. (leeg voor standaard)
HTMLToPDF.pageHeight=Hoogte van de pagina in centimeters. (leeg voor standaard)
HTMLToPDF.marginTop=Marge bovenaan de pagina in millimeters. (leeg voor standaard)
HTMLToPDF.marginBottom=Marge onderaan de pagina in millimeters. (leeg voor standaard)
HTMLToPDF.marginLeft=Marge links van de pagina in millimeters. (leeg voor standaard)
HTMLToPDF.marginRight=Marge rechts van de pagina in millimeters. (leeg voor standaard)
HTMLToPDF.printBackground=De achtergrond van websites weergeven.
HTMLToPDF.defaultHeader=Standaard koptekst weergeven (naam en paginanummer)
HTMLToPDF.cssMediaType=Wijzig het CSS-mediatype van de pagina.
HTMLToPDF.none=Geen
HTMLToPDF.print=Print
HTMLToPDF.screen=Screen
#AddStampRequest
AddStampRequest.header=Stempel PDF
AddStampRequest.title=Stempel PDF
AddStampRequest.stampType=Soort stempel
AddStampRequest.stampText=Stempel tekst
AddStampRequest.stampImage=Stempel afbeelding
AddStampRequest.alphabet=Alfabet
AddStampRequest.fontSize=Tekst/afbeelding grootte
AddStampRequest.rotation=Rotatie
AddStampRequest.opacity=Transparantie
AddStampRequest.position=Positie
AddStampRequest.overrideX=X coördinaat overschrijven
AddStampRequest.overrideY=Y coördinaat overschrijven
AddStampRequest.customMargin=Aangepate marge
AddStampRequest.customColor=Aangepaste tekstkleur
AddStampRequest.submit=Indienen
#sanitizePDF
sanitizePDF.title=PDF opschonen
sanitizePDF.header=Een PDF-bestand opschonen
@@ -479,11 +516,11 @@ addPageNumbers.selectText.1=Selecteer PDF-bestand:
addPageNumbers.selectText.2=Margegrootte
addPageNumbers.selectText.3=Positie
addPageNumbers.selectText.4=Startnummer
addPageNumbers.selectText.5=Pagina''s om te nummeren
addPageNumbers.selectText.5=Pagina's om te nummeren
addPageNumbers.selectText.6=Aangepaste tekst
addPageNumbers.customTextDesc=Custom Text
addPageNumbers.numberPagesDesc=Which pages to number, default 'all', also accepts 1-5 or 2,5,9 etc
addPageNumbers.customNumberDesc=Defaults to {n}, also accepts 'Page {n} of {total}', 'Text-{n}', '{filename}-{n}
addPageNumbers.customTextDesc=Aangepaste tekst
addPageNumbers.numberPagesDesc=Welke pagina's genummerd moeten worden, standaard 'all', accepteert ook 1-5 of 2,5,9 etc
addPageNumbers.customNumberDesc=Standaard {n}, accepteert ook 'Pagina {n} van {total}', 'Tekst-{n}', '{filename}-{n}
addPageNumbers.submit=Paginanummers toevoegen
@@ -515,7 +552,7 @@ autoSplitPDF.description=Print, Voeg in, Scan, upload, en laat ons je documenten
autoSplitPDF.selectText.1=Print enkele scheidingsbladen van hieronder (Zwart-wit is prima).
autoSplitPDF.selectText.2=Scan al je documenten tegelijk door het scheidingsblad ertussen te plaatsen.
autoSplitPDF.selectText.3=Upload het enkele grote gescande PDF-bestand en laat Stirling PDF de rest afhandelen.
autoSplitPDF.selectText.4=Scheidingspagina''s worden automatisch gedetecteerd en verwijderd, wat een net einddocument garandeert.
autoSplitPDF.selectText.4=Scheidingspagina's worden automatisch gedetecteerd en verwijderd, wat een net einddocument garandeert.
autoSplitPDF.formPrompt=Dien PDF in met Stirling-PDF Pagina-scheiders:
autoSplitPDF.duplexMode=Duplex Modus (voor- en achterkant scannen)
autoSplitPDF.dividerDownload1=Download 'Auto Splitter Divider (minimal).pdf'
@@ -530,8 +567,8 @@ pipeline.title=Pijplijn
#pageLayout
pageLayout.title=Meerdere pagina indeling
pageLayout.header=Meerdere pagina indeling
pageLayout.pagesPerSheet=Pagina''s per vel:
pageLayout.addBorder=Add Borders
pageLayout.pagesPerSheet=Pagina's per vel:
pageLayout.addBorder=Randen toevoegen
pageLayout.submit=Indienen
@@ -562,24 +599,24 @@ certSign.submit=PDF ondertekenen
#removeBlanks
removeBlanks.title=Verwijder blanco''s
removeBlanks.header=Verwijder lege pagina''s
removeBlanks.title=Verwijder blanco's
removeBlanks.header=Verwijder lege pagina's
removeBlanks.threshold=Pixel witheid drempel:
removeBlanks.thresholdDesc=Drempel voor het bepalen hoe wit een witte pixel moet zijn om als ''Wit'' te worden geclassificeerd. 0 = Zwart, 255 zuiver wit.
removeBlanks.thresholdDesc=Drempel voor het bepalen hoe wit een witte pixel moet zijn om als 'Wit' te worden geclassificeerd. 0 = Zwart, 255 zuiver wit.
removeBlanks.whitePercent=Wit percentage (%):
removeBlanks.whitePercentDesc=Percentage van de pagina dat ''witte'' pixels moet zijn om verwijderd te worden
removeBlanks.submit=Blanco''s verwijderen
removeBlanks.whitePercentDesc=Percentage van de pagina dat 'witte' pixels moet zijn om verwijderd te worden
removeBlanks.submit=Blanco's verwijderen
#removeAnnotations
removeAnnotations.title=Remove Annotations
removeAnnotations.header=Remove Annotations
removeAnnotations.submit=Remove
removeAnnotations.title=Verwijder annotaties
removeAnnotations.header=Verwijder annotaties
removeAnnotations.submit=Verwijderen
#compare
compare.title=Vergelijken
compare.header=PDF''s vergelijken
compare.header=PDF's vergelijken
compare.document.1=Document 1
compare.document.2=Document 2
compare.submit=Vergelijken
@@ -587,7 +624,7 @@ compare.submit=Vergelijken
#sign
sign.title=Ondertekenen
sign.header=PDF''s ondertekenen
sign.header=PDF's ondertekenen
sign.upload=Upload afbeelding
sign.draw=Handtekening tekenen
sign.text=Tekstinvoer
@@ -597,13 +634,13 @@ sign.add=Toevoegen
#repair
repair.title=Repareren
repair.header=PDF''s repareren
repair.header=PDF's repareren
repair.submit=Repareren
#flatten
flatten.title=Afvlakken
flatten.header=PDF''s afvlakken
flatten.header=PDF's afvlakken
flatten.submit=Afvlakken
@@ -624,12 +661,12 @@ ScannerImageSplit.selectText.10=Stelt de grootte van de toegevoegde en verwijder
ocr.title=OCR / Scan opruimen
ocr.header=Scans opruimen / OCR (Optical Character Recognition)
ocr.selectText.1=Selecteer talen die binnen de PDF gedetecteerd moeten worden (De vermelde zijn de momenteel gedetecteerde):
ocr.selectText.2=Produceer tekstbestand met OCR-tekst naast de OCR''d PDF
ocr.selectText.3=Corrigeer pagina''s die onder een scheve hoek zijn gescand door ze terug te draaien
ocr.selectText.2=Produceer tekstbestand met OCR-tekst naast de OCR'd PDF
ocr.selectText.3=Corrigeer pagina's die onder een scheve hoek zijn gescand door ze terug te draaien
ocr.selectText.4=Maak de pagina schoon, zodat het minder waarschijnlijk is dat OCR tekst in achtergrondruis vindt. (Geen uitvoerverandering)
ocr.selectText.5=Maak de pagina schoon zodat OCR waarschijnlijk geen tekst in achtergrondruis vindt, behoudt opruiming in uitvoer.
ocr.selectText.6=Negeert pagina''s met interactieve tekst, OCR''s alleen pagina''s die afbeeldingen zijn
ocr.selectText.7=Forceer OCR, zal elke pagina OCR''en en alle originele tekstelementen verwijderen
ocr.selectText.6=Negeert pagina's met interactieve tekst, OCR's alleen pagina's die afbeeldingen zijn
ocr.selectText.7=Forceer OCR, zal elke pagina OCR'en en alle originele tekstelementen verwijderen
ocr.selectText.8=Normaal (Zal een fout geven als de PDF tekst bevat)
ocr.selectText.9=Aanvullende instellingen
ocr.selectText.10=OCR-modus
@@ -677,7 +714,7 @@ addImage.submit=Afbeelding toevoegen
#merge
merge.title=Samenvoegen
merge.header=Meerdere PDF''s samenvoegen (2+)
merge.header=Meerdere PDF's samenvoegen (2+)
merge.sortByName=Sorteer op naam
merge.sortByDate=Sorteer op datum
merge.submit=Samenvoegen
@@ -686,7 +723,7 @@ merge.submit=Samenvoegen
#pdfOrganiser
pdfOrganiser.title=Pagina organisator
pdfOrganiser.header=PDF pagina organisator
pdfOrganiser.submit=Pagina''s herschikken
pdfOrganiser.submit=Pagina's herschikken
#multiTool
@@ -694,14 +731,14 @@ multiTool.title=PDF Multitool
multiTool.header=PDF Multitool
#view pdf
viewPdf.title=View PDF
viewPdf.header=View PDF
viewPdf.title=PDF bekijken
viewPdf.header=PDF bekijken
#pageRemover
pageRemover.title=Pagina verwijderaar
pageRemover.header=PDF pagina verwijderaar
pageRemover.pagesToDelete=Te verwijderen pagina''s (Voer een door komma''s gescheiden lijst met paginanummers in):
pageRemover.submit=Pagina''s verwijderen
pageRemover.pagesToDelete=Te verwijderen pagina's (Voer een door komma's gescheiden lijst met paginanummers in):
pageRemover.submit=Pagina's verwijderen
#rotate
@@ -715,14 +752,14 @@ rotate.submit=Roteren
split.title=PDF splitsen
split.header=PDF splitsen
split.desc.1=De nummers die je kiest zijn de paginanummers waarop je een splitsing wilt uitvoeren
split.desc.2=Als zodanig selecteren van 1,3,7-8 zou een 10 pagina''s tellend document splitsen in 6 aparte PDF''s met:
split.desc.2=Als zodanig selecteren van 1,3,7-8 zou een 10 pagina's tellend document splitsen in 6 aparte PDF's met:
split.desc.3=Document #1: Pagina 1
split.desc.4=Document #2: Pagina 2 en 3
split.desc.5=Document #3: Pagina 4, 5 en 6
split.desc.6=Document #4: Pagina 7
split.desc.7=Document #5: Pagina 8
split.desc.8=Document #6: Pagina 9 en 10
split.splitPages=Voer pagina''s in om op te splitsen:
split.splitPages=Voer pagina's in om op te splitsen:
split.submit=Splitsen
@@ -730,14 +767,14 @@ split.submit=Splitsen
imageToPDF.title=Afbeelding naar PDF
imageToPDF.header=Afbeelding naar PDF
imageToPDF.submit=Omzetten
imageToPDF.selectLabel=Image Fit Options
imageToPDF.fillPage=Fill Page
imageToPDF.fitDocumentToImage=Fit Page to Image
imageToPDF.maintainAspectRatio=Maintain Aspect Ratios
imageToPDF.selectLabel=Opties voor afbeelding passend maken
imageToPDF.fillPage=Pagina vullen
imageToPDF.fitDocumentToImage=Pagina passend maken voor afbeelding
imageToPDF.maintainAspectRatio=Beeldverhoudingen behouden
imageToPDF.selectText.2=PDF automatisch draaien
imageToPDF.selectText.3=Meervoudige bestandslogica (Alleen ingeschakeld bij werken met meerdere afbeeldingen)
imageToPDF.selectText.4=Voeg samen in één PDF
imageToPDF.selectText.5=Zet om naar afzonderlijke PDF''s
imageToPDF.selectText.5=Zet om naar afzonderlijke PDF's
#pdfToImage
@@ -745,7 +782,7 @@ pdfToImage.title=PDF naar afbeelding
pdfToImage.header=PDF naar afbeelding
pdfToImage.selectText=Afbeeldingsformaat
pdfToImage.singleOrMultiple=Resultaattype van pagina naar afbeelding
pdfToImage.single=Eén grote afbeelding die alle pagina''s combineert
pdfToImage.single=Eén grote afbeelding die alle pagina's combineert
pdfToImage.multi=Meerdere afbeeldingen, één afbeelding per pagina
pdfToImage.colorType=Kleurtype
pdfToImage.color=Kleur
@@ -887,48 +924,48 @@ PDFToCSV.prompt=Choose page to extract table
PDFToCSV.submit=Extract
#split-by-size-or-count
split-by-size-or-count.header=Split PDF by Size or Count
split-by-size-or-count.type.label=Select Split Type
split-by-size-or-count.type.size=By Size
split-by-size-or-count.type.pageCount=By Page Count
split-by-size-or-count.type.docCount=By Document Count
split-by-size-or-count.value.label=Enter Value
split-by-size-or-count.value.placeholder=Enter size (e.g., 2MB or 3KB) or count (e.g., 5)
split-by-size-or-count.submit=Submit
split-by-size-or-count.header=PDF splitsen op grootte of aantal
split-by-size-or-count.type.label=Selecteer splits type
split-by-size-or-count.type.size=Op grootte
split-by-size-or-count.type.pageCount=Op pagina aantal
split-by-size-or-count.type.docCount=Op document aantal
split-by-size-or-count.value.label=Voer waarde in
split-by-size-or-count.value.placeholder=Voer grootte (bijv., 2MB of 3KB) of aantal (bijv., 5)
split-by-size-or-count.submit=Indienen
#overlay-pdfs
overlay-pdfs.header=Overlay PDF Files
overlay-pdfs.baseFile.label=Select Base PDF File
overlay-pdfs.overlayFiles.label=Select Overlay PDF Files
overlay-pdfs.mode.label=Select Overlay Mode
overlay-pdfs.mode.sequential=Sequential Overlay
overlay-pdfs.mode.interleaved=Interleaved Overlay
overlay-pdfs.mode.fixedRepeat=Fixed Repeat Overlay
overlay-pdfs.counts.label=Overlay Counts (for Fixed Repeat Mode)
overlay-pdfs.counts.placeholder=Enter comma-separated counts (e.g., 2,3,1)
overlay-pdfs.position.label=Select Overlay Position
overlay-pdfs.position.foreground=Foreground
overlay-pdfs.position.background=Background
overlay-pdfs.submit=Submit
overlay-pdfs.header=PDF bestanden overlappen
overlay-pdfs.baseFile.label=Selecteer basis PDF-bestand
overlay-pdfs.overlayFiles.label=Selecteer overlappende PDF-bestanden
overlay-pdfs.mode.label=Selecteer overlappingsmodus
overlay-pdfs.mode.sequential=Sequentieel overlappen
overlay-pdfs.mode.interleaved=Geïnterlinieerd overlappen
overlay-pdfs.mode.fixedRepeat=Overlappen met vaste herhaling
overlay-pdfs.counts.label=Aantal keren overlappen (voor vaste herhalings modus)
overlay-pdfs.counts.placeholder=Voer door komma's gescheiden aantallen in (bijv., 2,3,1)
overlay-pdfs.position.label=Selecteer overlappingspositie
overlay-pdfs.position.foreground=Voorgrond
overlay-pdfs.position.background=Achtergrond
overlay-pdfs.submit=Indienen
#split-by-sections
split-by-sections.title=Split PDF by Sections
split-by-sections.header=Split PDF into Sections
split-by-sections.horizontal.label=Horizontal Divisions
split-by-sections.vertical.label=Vertical Divisions
split-by-sections.horizontal.placeholder=Enter number of horizontal divisions
split-by-sections.vertical.placeholder=Enter number of vertical divisions
split-by-sections.submit=Split PDF
split-by-sections.title=PDF in secties splitsen
split-by-sections.header=PDF in secties splitsen
split-by-sections.horizontal.label=Horizontale secties
split-by-sections.vertical.label=Verticale secties
split-by-sections.horizontal.placeholder=Voer het aantal horizontale secties in
split-by-sections.vertical.placeholder=Voer het aantal verticale secties in
split-by-sections.submit=PDF splitsen
#licenses
licenses.nav=Licenses
licenses.title=3rd Party Licenses
licenses.header=3rd Party Licenses
licenses.nav=Licensies
licenses.title=Licensies van derden
licenses.header=Licensies van derden
licenses.module=Module
licenses.version=Version
licenses.license=License
licenses.version=Versie
licenses.license=Licensie

View File

@@ -44,7 +44,8 @@ blue=Blue
custom=Custom...
WorkInProgess=Work in progress, May not work or be buggy, Please report any ploblems!
poweredBy=Powered by
yes=Yes
no=No
changedCredsMessage=Credentials changed!
notAuthenticatedMessage=User not authenticated.
userNotFoundMessage=User not found.
@@ -68,6 +69,7 @@ pipelineOptions.header=Pipeline Configuration
pipelineOptions.pipelineNameLabel=Pipeline Name
pipelineOptions.saveSettings=Save Operation Settings
pipelineOptions.pipelineNamePrompt=Enter pipeline name here
pipelineOptions.selectOperation=Select Operation
pipelineOptions.addOperationButton=Add operation
pipelineOptions.pipelineHeader=Pipeline:
pipelineOptions.saveButton=Download
@@ -384,6 +386,11 @@ home.split-by-sections.title=Split PDF by Sections
home.split-by-sections.desc=Divide each page of a PDF into smaller horizontal and vertical sections
split-by-sections.tags=Section Split, Divide, Customize
home.AddStampRequest.title=Add Stamp to PDF
home.AddStampRequest.desc=Add text or add image stamps at set locations
AddStampRequest.tags=Stamp, Add image, center image, Watermark, PDF, Embed, Customize
###########################
# #
# WEB PAGES #
@@ -459,8 +466,38 @@ HTMLToPDF.header=HTML To PDF
HTMLToPDF.help=Accepts HTML files and ZIPs containing html/css/images etc required
HTMLToPDF.submit=Convert
HTMLToPDF.credit=Uses WeasyPrint
HTMLToPDF.zoom=Zoom level for displaying the website.
HTMLToPDF.pageWidth=Width of the page in centimeters. (Blank to default)
HTMLToPDF.pageHeight=Height of the page in centimeters. (Blank to default)
HTMLToPDF.marginTop=Top margin of the page in millimeters. (Blank to default)
HTMLToPDF.marginBottom=Bottom margin of the page in millimeters. (Blank to default)
HTMLToPDF.marginLeft=Left margin of the page in millimeters. (Blank to default)
HTMLToPDF.marginRight=Right margin of the page in millimeters. (Blank to default)
HTMLToPDF.printBackground=Render the background of websites.
HTMLToPDF.defaultHeader=Enable Default Header (Name and page number)
HTMLToPDF.cssMediaType=Change the CSS media type of the page.
HTMLToPDF.none=None
HTMLToPDF.print=Print
HTMLToPDF.screen=Screen
#AddStampRequest
AddStampRequest.header=Stamp PDF
AddStampRequest.title=Stamp PDF
AddStampRequest.stampType=Stamp Type
AddStampRequest.stampText=Stamp Text
AddStampRequest.stampImage=Stamp Image
AddStampRequest.alphabet=Alphabet
AddStampRequest.fontSize=Font/Image Size
AddStampRequest.rotation=Rotation
AddStampRequest.opacity=Opacity
AddStampRequest.position=Position
AddStampRequest.overrideX=Override X Coordinate
AddStampRequest.overrideY=Override Y Coordinate
AddStampRequest.customMargin=Custom Margin
AddStampRequest.customColor=Custom Text Color
AddStampRequest.submit=Submit
#sanitizePDF
sanitizePDF.title=Sanitize PDF
sanitizePDF.header=Sanitize a PDF file

View File

@@ -44,7 +44,8 @@ blue=Blue
custom=Custom...
WorkInProgess=Work in progress, May not work or be buggy, Please report any ploblems!
poweredBy=Powered by
yes=Yes
no=No
changedCredsMessage=Credentials changed!
notAuthenticatedMessage=User not authenticated.
userNotFoundMessage=User not found.
@@ -68,6 +69,7 @@ pipelineOptions.header=Pipeline Configuration
pipelineOptions.pipelineNameLabel=Pipeline Name
pipelineOptions.saveSettings=Save Operation Settings
pipelineOptions.pipelineNamePrompt=Enter pipeline name here
pipelineOptions.selectOperation=Select Operation
pipelineOptions.addOperationButton=Add operation
pipelineOptions.pipelineHeader=Pipeline:
pipelineOptions.saveButton=Download
@@ -384,6 +386,11 @@ home.split-by-sections.title=Split PDF by Sections
home.split-by-sections.desc=Divide each page of a PDF into smaller horizontal and vertical sections
split-by-sections.tags=Section Split, Divide, Customize
home.AddStampRequest.title=Add Stamp to PDF
home.AddStampRequest.desc=Add text or add image stamps at set locations
AddStampRequest.tags=Stamp, Add image, center image, Watermark, PDF, Embed, Customize
###########################
# #
# WEB PAGES #
@@ -459,8 +466,38 @@ HTMLToPDF.header=HTML para PDF
HTMLToPDF.help=Aceita arquivos HTML e ZIPs contendo html/css/imagens etc necessários
HTMLToPDF.submit=Converter
HTMLToPDF.credit=Usa o WeasyPrint
HTMLToPDF.zoom=Zoom level for displaying the website.
HTMLToPDF.pageWidth=Width of the page in centimeters. (Blank to default)
HTMLToPDF.pageHeight=Height of the page in centimeters. (Blank to default)
HTMLToPDF.marginTop=Top margin of the page in millimeters. (Blank to default)
HTMLToPDF.marginBottom=Bottom margin of the page in millimeters. (Blank to default)
HTMLToPDF.marginLeft=Left margin of the page in millimeters. (Blank to default)
HTMLToPDF.marginRight=Right margin of the page in millimeters. (Blank to default)
HTMLToPDF.printBackground=Render the background of websites.
HTMLToPDF.defaultHeader=Enable Default Header (Name and page number)
HTMLToPDF.cssMediaType=Change the CSS media type of the page.
HTMLToPDF.none=None
HTMLToPDF.print=Print
HTMLToPDF.screen=Screen
#AddStampRequest
AddStampRequest.header=Stamp PDF
AddStampRequest.title=Stamp PDF
AddStampRequest.stampType=Stamp Type
AddStampRequest.stampText=Stamp Text
AddStampRequest.stampImage=Stamp Image
AddStampRequest.alphabet=Alphabet
AddStampRequest.fontSize=Font/Image Size
AddStampRequest.rotation=Rotation
AddStampRequest.opacity=Opacity
AddStampRequest.position=Position
AddStampRequest.overrideX=Override X Coordinate
AddStampRequest.overrideY=Override Y Coordinate
AddStampRequest.customMargin=Custom Margin
AddStampRequest.customColor=Custom Text Color
AddStampRequest.submit=Submit
#sanitizePDF
sanitizePDF.title=Sanitizar PDF
sanitizePDF.header=Sanitizar um arquivo PDF

View File

@@ -44,7 +44,8 @@ blue=Blue
custom=Custom...
WorkInProgess=Work in progress, May not work or be buggy, Please report any ploblems!
poweredBy=Powered by
yes=Yes
no=No
changedCredsMessage=Credentials changed!
notAuthenticatedMessage=User not authenticated.
userNotFoundMessage=User not found.
@@ -68,6 +69,7 @@ pipelineOptions.header=Pipeline Configuration
pipelineOptions.pipelineNameLabel=Pipeline Name
pipelineOptions.saveSettings=Save Operation Settings
pipelineOptions.pipelineNamePrompt=Enter pipeline name here
pipelineOptions.selectOperation=Select Operation
pipelineOptions.addOperationButton=Add operation
pipelineOptions.pipelineHeader=Pipeline:
pipelineOptions.saveButton=Download
@@ -384,6 +386,11 @@ home.split-by-sections.title=Split PDF by Sections
home.split-by-sections.desc=Divide each page of a PDF into smaller horizontal and vertical sections
split-by-sections.tags=Section Split, Divide, Customize
home.AddStampRequest.title=Add Stamp to PDF
home.AddStampRequest.desc=Add text or add image stamps at set locations
AddStampRequest.tags=Stamp, Add image, center image, Watermark, PDF, Embed, Customize
###########################
# #
# WEB PAGES #
@@ -459,8 +466,38 @@ HTMLToPDF.header=HTML To PDF
HTMLToPDF.help=Accepts HTML files and ZIPs containing html/css/images etc required
HTMLToPDF.submit=Convert
HTMLToPDF.credit=Uses WeasyPrint
HTMLToPDF.zoom=Zoom level for displaying the website.
HTMLToPDF.pageWidth=Width of the page in centimeters. (Blank to default)
HTMLToPDF.pageHeight=Height of the page in centimeters. (Blank to default)
HTMLToPDF.marginTop=Top margin of the page in millimeters. (Blank to default)
HTMLToPDF.marginBottom=Bottom margin of the page in millimeters. (Blank to default)
HTMLToPDF.marginLeft=Left margin of the page in millimeters. (Blank to default)
HTMLToPDF.marginRight=Right margin of the page in millimeters. (Blank to default)
HTMLToPDF.printBackground=Render the background of websites.
HTMLToPDF.defaultHeader=Enable Default Header (Name and page number)
HTMLToPDF.cssMediaType=Change the CSS media type of the page.
HTMLToPDF.none=None
HTMLToPDF.print=Print
HTMLToPDF.screen=Screen
#AddStampRequest
AddStampRequest.header=Stamp PDF
AddStampRequest.title=Stamp PDF
AddStampRequest.stampType=Stamp Type
AddStampRequest.stampText=Stamp Text
AddStampRequest.stampImage=Stamp Image
AddStampRequest.alphabet=Alphabet
AddStampRequest.fontSize=Font/Image Size
AddStampRequest.rotation=Rotation
AddStampRequest.opacity=Opacity
AddStampRequest.position=Position
AddStampRequest.overrideX=Override X Coordinate
AddStampRequest.overrideY=Override Y Coordinate
AddStampRequest.customMargin=Custom Margin
AddStampRequest.customColor=Custom Text Color
AddStampRequest.submit=Submit
#sanitizePDF
sanitizePDF.title=Sanitize PDF
sanitizePDF.header=Sanitize a PDF file

View File

@@ -44,7 +44,8 @@ blue=Blue
custom=Custom...
WorkInProgess=Work in progress, May not work or be buggy, Please report any ploblems!
poweredBy=Powered by
yes=Yes
no=No
changedCredsMessage=Credentials changed!
notAuthenticatedMessage=User not authenticated.
userNotFoundMessage=User not found.
@@ -68,6 +69,7 @@ pipelineOptions.header=Pipeline Configuration
pipelineOptions.pipelineNameLabel=Pipeline Name
pipelineOptions.saveSettings=Save Operation Settings
pipelineOptions.pipelineNamePrompt=Enter pipeline name here
pipelineOptions.selectOperation=Select Operation
pipelineOptions.addOperationButton=Add operation
pipelineOptions.pipelineHeader=Pipeline:
pipelineOptions.saveButton=Download
@@ -384,6 +386,11 @@ home.split-by-sections.title=Split PDF by Sections
home.split-by-sections.desc=Divide each page of a PDF into smaller horizontal and vertical sections
split-by-sections.tags=Section Split, Divide, Customize
home.AddStampRequest.title=Add Stamp to PDF
home.AddStampRequest.desc=Add text or add image stamps at set locations
AddStampRequest.tags=Stamp, Add image, center image, Watermark, PDF, Embed, Customize
###########################
# #
# WEB PAGES #
@@ -459,8 +466,38 @@ HTMLToPDF.header=HTML в PDF
HTMLToPDF.help=Принимает файлы HTML и ZIP-файлы, содержащие html/css/изображения и т. д.
HTMLToPDF.submit=Конвертировать
HTMLToPDF.credit=Использует WeasyPrint
HTMLToPDF.zoom=Zoom level for displaying the website.
HTMLToPDF.pageWidth=Width of the page in centimeters. (Blank to default)
HTMLToPDF.pageHeight=Height of the page in centimeters. (Blank to default)
HTMLToPDF.marginTop=Top margin of the page in millimeters. (Blank to default)
HTMLToPDF.marginBottom=Bottom margin of the page in millimeters. (Blank to default)
HTMLToPDF.marginLeft=Left margin of the page in millimeters. (Blank to default)
HTMLToPDF.marginRight=Right margin of the page in millimeters. (Blank to default)
HTMLToPDF.printBackground=Render the background of websites.
HTMLToPDF.defaultHeader=Enable Default Header (Name and page number)
HTMLToPDF.cssMediaType=Change the CSS media type of the page.
HTMLToPDF.none=None
HTMLToPDF.print=Print
HTMLToPDF.screen=Screen
#AddStampRequest
AddStampRequest.header=Stamp PDF
AddStampRequest.title=Stamp PDF
AddStampRequest.stampType=Stamp Type
AddStampRequest.stampText=Stamp Text
AddStampRequest.stampImage=Stamp Image
AddStampRequest.alphabet=Alphabet
AddStampRequest.fontSize=Font/Image Size
AddStampRequest.rotation=Rotation
AddStampRequest.opacity=Opacity
AddStampRequest.position=Position
AddStampRequest.overrideX=Override X Coordinate
AddStampRequest.overrideY=Override Y Coordinate
AddStampRequest.customMargin=Custom Margin
AddStampRequest.customColor=Custom Text Color
AddStampRequest.submit=Submit
#sanitizePDF
sanitizePDF.title=Дезинфицировать PDF
sanitizePDF.header=Дезинфицировать PDF файл

View File

@@ -44,7 +44,8 @@ blue=Plavo
custom=Prilagođeno...
WorkInProgess=Radovi u toku, možda neće raditi ili će biti grešaka, molimo prijavite sve probleme !
poweredBy=Powered by
yes=Yes
no=No
changedCredsMessage=Podaci za prijavu uspešno promenjeni!
notAuthenticatedMessage=Korisnik nije autentifikovan.
userNotFoundMessage=Korisnik nije pronađen.
@@ -68,6 +69,7 @@ pipelineOptions.header=Konfiguracija Pipeline-a
pipelineOptions.pipelineNameLabel=Ime Pipeline-a
pipelineOptions.saveSettings=Sačuvaj podešavanja
pipelineOptions.pipelineNamePrompt=Unesite ime pipeline-a ovde
pipelineOptions.selectOperation=Select Operation
pipelineOptions.addOperationButton=Dodaj operaciju
pipelineOptions.pipelineHeader=Pipeline:
pipelineOptions.saveButton=Preuzmi
@@ -384,6 +386,11 @@ home.split-by-sections.title=Deljenje PDF-a po Odeljcima
home.split-by-sections.desc=Deljenje svake stranice PDF-a na manje horizontalne i vertikalne odeljke
split-by-sections.tags=Deljenje odeljaka,Deljenje,Podešavanje
home.AddStampRequest.title=Add Stamp to PDF
home.AddStampRequest.desc=Add text or add image stamps at set locations
AddStampRequest.tags=Stamp, Add image, center image, Watermark, PDF, Embed, Customize
###########################
# #
# WEB PAGES #
@@ -459,8 +466,38 @@ HTMLToPDF.header=HTML u PDF
HTMLToPDF.help=Prihvata HTML fajlove i ZIP-ove koji sadrže html/css/slike itd. potrebno
HTMLToPDF.submit=Konvertuj
HTMLToPDF.credit=Koristi WeasyPrint
HTMLToPDF.zoom=Zoom level for displaying the website.
HTMLToPDF.pageWidth=Width of the page in centimeters. (Blank to default)
HTMLToPDF.pageHeight=Height of the page in centimeters. (Blank to default)
HTMLToPDF.marginTop=Top margin of the page in millimeters. (Blank to default)
HTMLToPDF.marginBottom=Bottom margin of the page in millimeters. (Blank to default)
HTMLToPDF.marginLeft=Left margin of the page in millimeters. (Blank to default)
HTMLToPDF.marginRight=Right margin of the page in millimeters. (Blank to default)
HTMLToPDF.printBackground=Render the background of websites.
HTMLToPDF.defaultHeader=Enable Default Header (Name and page number)
HTMLToPDF.cssMediaType=Change the CSS media type of the page.
HTMLToPDF.none=None
HTMLToPDF.print=Print
HTMLToPDF.screen=Screen
#AddStampRequest
AddStampRequest.header=Stamp PDF
AddStampRequest.title=Stamp PDF
AddStampRequest.stampType=Stamp Type
AddStampRequest.stampText=Stamp Text
AddStampRequest.stampImage=Stamp Image
AddStampRequest.alphabet=Alphabet
AddStampRequest.fontSize=Font/Image Size
AddStampRequest.rotation=Rotation
AddStampRequest.opacity=Opacity
AddStampRequest.position=Position
AddStampRequest.overrideX=Override X Coordinate
AddStampRequest.overrideY=Override Y Coordinate
AddStampRequest.customMargin=Custom Margin
AddStampRequest.customColor=Custom Text Color
AddStampRequest.submit=Submit
#sanitizePDF
sanitizePDF.title=Sanitizacija PDF-a
sanitizePDF.header=Sanitizacija PDF fajla

View File

@@ -44,7 +44,8 @@ blue=Blue
custom=Custom...
WorkInProgess=Work in progress, May not work or be buggy, Please report any ploblems!
poweredBy=Powered by
yes=Yes
no=No
changedCredsMessage=Credentials changed!
notAuthenticatedMessage=User not authenticated.
userNotFoundMessage=User not found.
@@ -68,6 +69,7 @@ pipelineOptions.header=Pipeline Configuration
pipelineOptions.pipelineNameLabel=Pipeline Name
pipelineOptions.saveSettings=Save Operation Settings
pipelineOptions.pipelineNamePrompt=Enter pipeline name here
pipelineOptions.selectOperation=Select Operation
pipelineOptions.addOperationButton=Add operation
pipelineOptions.pipelineHeader=Pipeline:
pipelineOptions.saveButton=Download
@@ -384,6 +386,11 @@ home.split-by-sections.title=Split PDF by Sections
home.split-by-sections.desc=Divide each page of a PDF into smaller horizontal and vertical sections
split-by-sections.tags=Section Split, Divide, Customize
home.AddStampRequest.title=Add Stamp to PDF
home.AddStampRequest.desc=Add text or add image stamps at set locations
AddStampRequest.tags=Stamp, Add image, center image, Watermark, PDF, Embed, Customize
###########################
# #
# WEB PAGES #
@@ -459,8 +466,38 @@ HTMLToPDF.header=HTML To PDF
HTMLToPDF.help=Accepts HTML files and ZIPs containing html/css/images etc required
HTMLToPDF.submit=Convert
HTMLToPDF.credit=Uses WeasyPrint
HTMLToPDF.zoom=Zoom level for displaying the website.
HTMLToPDF.pageWidth=Width of the page in centimeters. (Blank to default)
HTMLToPDF.pageHeight=Height of the page in centimeters. (Blank to default)
HTMLToPDF.marginTop=Top margin of the page in millimeters. (Blank to default)
HTMLToPDF.marginBottom=Bottom margin of the page in millimeters. (Blank to default)
HTMLToPDF.marginLeft=Left margin of the page in millimeters. (Blank to default)
HTMLToPDF.marginRight=Right margin of the page in millimeters. (Blank to default)
HTMLToPDF.printBackground=Render the background of websites.
HTMLToPDF.defaultHeader=Enable Default Header (Name and page number)
HTMLToPDF.cssMediaType=Change the CSS media type of the page.
HTMLToPDF.none=None
HTMLToPDF.print=Print
HTMLToPDF.screen=Screen
#AddStampRequest
AddStampRequest.header=Stamp PDF
AddStampRequest.title=Stamp PDF
AddStampRequest.stampType=Stamp Type
AddStampRequest.stampText=Stamp Text
AddStampRequest.stampImage=Stamp Image
AddStampRequest.alphabet=Alphabet
AddStampRequest.fontSize=Font/Image Size
AddStampRequest.rotation=Rotation
AddStampRequest.opacity=Opacity
AddStampRequest.position=Position
AddStampRequest.overrideX=Override X Coordinate
AddStampRequest.overrideY=Override Y Coordinate
AddStampRequest.customMargin=Custom Margin
AddStampRequest.customColor=Custom Text Color
AddStampRequest.submit=Submit
#sanitizePDF
sanitizePDF.title=Sanitize PDF
sanitizePDF.header=Sanitize a PDF file

View File

@@ -44,7 +44,8 @@ blue=Mavi
custom=Özel
WorkInProgess=Work in progress, May not work or be buggy, Please report any ploblems!
poweredBy=Powered by
yes=Yes
no=No
changedCredsMessage=Bilgiler değiştirildi!
notAuthenticatedMessage=Kullanıcı doğrulanmadı.
userNotFoundMessage=Kullanıcı bulunamadı.
@@ -68,6 +69,7 @@ pipelineOptions.header=Pipeline Configuration
pipelineOptions.pipelineNameLabel=Pipeline Name
pipelineOptions.saveSettings=Save Operation Settings
pipelineOptions.pipelineNamePrompt=Enter pipeline name here
pipelineOptions.selectOperation=Select Operation
pipelineOptions.addOperationButton=Add operation
pipelineOptions.pipelineHeader=Pipeline:
pipelineOptions.saveButton=Download
@@ -384,6 +386,11 @@ home.split-by-sections.title=Split PDF by Sections
home.split-by-sections.desc=Divide each page of a PDF into smaller horizontal and vertical sections
split-by-sections.tags=Section Split, Divide, Customize
home.AddStampRequest.title=Add Stamp to PDF
home.AddStampRequest.desc=Add text or add image stamps at set locations
AddStampRequest.tags=Stamp, Add image, center image, Watermark, PDF, Embed, Customize
###########################
# #
# WEB PAGES #
@@ -459,8 +466,38 @@ HTMLToPDF.header=HTML'den PDF'e
HTMLToPDF.help=HTML dosyalarını ve html/css/görsel vb. içeren ZIP'leri kabul eder
HTMLToPDF.submit=Dönüştür
HTMLToPDF.credit=WeasyPrint Kullanıyor
HTMLToPDF.zoom=Zoom level for displaying the website.
HTMLToPDF.pageWidth=Width of the page in centimeters. (Blank to default)
HTMLToPDF.pageHeight=Height of the page in centimeters. (Blank to default)
HTMLToPDF.marginTop=Top margin of the page in millimeters. (Blank to default)
HTMLToPDF.marginBottom=Bottom margin of the page in millimeters. (Blank to default)
HTMLToPDF.marginLeft=Left margin of the page in millimeters. (Blank to default)
HTMLToPDF.marginRight=Right margin of the page in millimeters. (Blank to default)
HTMLToPDF.printBackground=Render the background of websites.
HTMLToPDF.defaultHeader=Enable Default Header (Name and page number)
HTMLToPDF.cssMediaType=Change the CSS media type of the page.
HTMLToPDF.none=None
HTMLToPDF.print=Print
HTMLToPDF.screen=Screen
#AddStampRequest
AddStampRequest.header=Stamp PDF
AddStampRequest.title=Stamp PDF
AddStampRequest.stampType=Stamp Type
AddStampRequest.stampText=Stamp Text
AddStampRequest.stampImage=Stamp Image
AddStampRequest.alphabet=Alphabet
AddStampRequest.fontSize=Font/Image Size
AddStampRequest.rotation=Rotation
AddStampRequest.opacity=Opacity
AddStampRequest.position=Position
AddStampRequest.overrideX=Override X Coordinate
AddStampRequest.overrideY=Override Y Coordinate
AddStampRequest.customMargin=Custom Margin
AddStampRequest.customColor=Custom Text Color
AddStampRequest.submit=Submit
#sanitizePDF
sanitizePDF.title=PDF'i Temizle
sanitizePDF.header=PDF dosyasını temizle

View File

@@ -44,7 +44,8 @@ blue=Blue
custom=Custom...
WorkInProgess=Work in progress, May not work or be buggy, Please report any ploblems!
poweredBy=Powered by
yes=Yes
no=No
changedCredsMessage=凭证已更改!
notAuthenticatedMessage=用户未经过身份验证。
userNotFoundMessage=未找到用户。
@@ -68,6 +69,7 @@ pipelineOptions.header=Pipeline Configuration
pipelineOptions.pipelineNameLabel=Pipeline Name
pipelineOptions.saveSettings=Save Operation Settings
pipelineOptions.pipelineNamePrompt=Enter pipeline name here
pipelineOptions.selectOperation=Select Operation
pipelineOptions.addOperationButton=Add operation
pipelineOptions.pipelineHeader=Pipeline:
pipelineOptions.saveButton=Download
@@ -384,6 +386,11 @@ home.split-by-sections.title=拆分PDF成小块
home.split-by-sections.desc=将PDF的每一页分割成更小的水平和垂直的部分
split-by-sections.tags=章节拆分、分割、自定义
home.AddStampRequest.title=Add Stamp to PDF
home.AddStampRequest.desc=Add text or add image stamps at set locations
AddStampRequest.tags=Stamp, Add image, center image, Watermark, PDF, Embed, Customize
###########################
# #
# WEB PAGES #
@@ -459,8 +466,38 @@ HTMLToPDF.header=HTML转PDF
HTMLToPDF.help=接受HTML文件和包含所需的html/css/images等的ZIP文件
HTMLToPDF.submit=转换
HTMLToPDF.credit=使用WeasyPrint
HTMLToPDF.zoom=Zoom level for displaying the website.
HTMLToPDF.pageWidth=Width of the page in centimeters. (Blank to default)
HTMLToPDF.pageHeight=Height of the page in centimeters. (Blank to default)
HTMLToPDF.marginTop=Top margin of the page in millimeters. (Blank to default)
HTMLToPDF.marginBottom=Bottom margin of the page in millimeters. (Blank to default)
HTMLToPDF.marginLeft=Left margin of the page in millimeters. (Blank to default)
HTMLToPDF.marginRight=Right margin of the page in millimeters. (Blank to default)
HTMLToPDF.printBackground=Render the background of websites.
HTMLToPDF.defaultHeader=Enable Default Header (Name and page number)
HTMLToPDF.cssMediaType=Change the CSS media type of the page.
HTMLToPDF.none=None
HTMLToPDF.print=Print
HTMLToPDF.screen=Screen
#AddStampRequest
AddStampRequest.header=Stamp PDF
AddStampRequest.title=Stamp PDF
AddStampRequest.stampType=Stamp Type
AddStampRequest.stampText=Stamp Text
AddStampRequest.stampImage=Stamp Image
AddStampRequest.alphabet=Alphabet
AddStampRequest.fontSize=Font/Image Size
AddStampRequest.rotation=Rotation
AddStampRequest.opacity=Opacity
AddStampRequest.position=Position
AddStampRequest.overrideX=Override X Coordinate
AddStampRequest.overrideY=Override Y Coordinate
AddStampRequest.customMargin=Custom Margin
AddStampRequest.customColor=Custom Text Color
AddStampRequest.submit=Submit
#sanitizePDF
sanitizePDF.title=清理PDF
sanitizePDF.header=清理PDF文件

View File

@@ -44,7 +44,8 @@ blue=藍色
custom=自訂...
WorkInProgess=Work in progress, May not work or be buggy, Please report any ploblems!
poweredBy=Powered by
yes=Yes
no=No
changedCredsMessage=憑證已變更!
notAuthenticatedMessage=使用者未認證。
userNotFoundMessage=找不到使用者。
@@ -68,6 +69,7 @@ pipelineOptions.header=Pipeline Configuration
pipelineOptions.pipelineNameLabel=Pipeline Name
pipelineOptions.saveSettings=Save Operation Settings
pipelineOptions.pipelineNamePrompt=Enter pipeline name here
pipelineOptions.selectOperation=Select Operation
pipelineOptions.addOperationButton=Add operation
pipelineOptions.pipelineHeader=Pipeline:
pipelineOptions.saveButton=Download
@@ -384,6 +386,11 @@ home.split-by-sections.title=依區段分割 PDF
home.split-by-sections.desc=將 PDF 的每一頁分割為較小的水平和垂直區段
split-by-sections.tags=區段分割, 劃分, 自訂
home.AddStampRequest.title=Add Stamp to PDF
home.AddStampRequest.desc=Add text or add image stamps at set locations
AddStampRequest.tags=Stamp, Add image, center image, Watermark, PDF, Embed, Customize
###########################
# #
# WEB PAGES #
@@ -459,8 +466,38 @@ HTMLToPDF.header=HTML 轉 PDF
HTMLToPDF.help=接受 HTML 文件和包含所需 html/css/images 等的 ZIP
HTMLToPDF.submit=轉換
HTMLToPDF.credit=使用 WeasyPrint
HTMLToPDF.zoom=Zoom level for displaying the website.
HTMLToPDF.pageWidth=Width of the page in centimeters. (Blank to default)
HTMLToPDF.pageHeight=Height of the page in centimeters. (Blank to default)
HTMLToPDF.marginTop=Top margin of the page in millimeters. (Blank to default)
HTMLToPDF.marginBottom=Bottom margin of the page in millimeters. (Blank to default)
HTMLToPDF.marginLeft=Left margin of the page in millimeters. (Blank to default)
HTMLToPDF.marginRight=Right margin of the page in millimeters. (Blank to default)
HTMLToPDF.printBackground=Render the background of websites.
HTMLToPDF.defaultHeader=Enable Default Header (Name and page number)
HTMLToPDF.cssMediaType=Change the CSS media type of the page.
HTMLToPDF.none=None
HTMLToPDF.print=Print
HTMLToPDF.screen=Screen
#AddStampRequest
AddStampRequest.header=Stamp PDF
AddStampRequest.title=Stamp PDF
AddStampRequest.stampType=Stamp Type
AddStampRequest.stampText=Stamp Text
AddStampRequest.stampImage=Stamp Image
AddStampRequest.alphabet=Alphabet
AddStampRequest.fontSize=Font/Image Size
AddStampRequest.rotation=Rotation
AddStampRequest.opacity=Opacity
AddStampRequest.position=Position
AddStampRequest.overrideX=Override X Coordinate
AddStampRequest.overrideY=Override Y Coordinate
AddStampRequest.customMargin=Custom Margin
AddStampRequest.customColor=Custom Text Color
AddStampRequest.submit=Submit
#sanitizePDF
sanitizePDF.title=清理 PDF
sanitizePDF.header=清理 PDF 檔案

View File

@@ -357,22 +357,29 @@
{
"moduleName": "org.apache.pdfbox:fontbox",
"moduleUrl": "https://pdfbox.apache.org",
"moduleVersion": "2.0.30",
"moduleLicense": "Apache License, Version 2.0",
"moduleVersion": "3.0.1",
"moduleLicense": "Apache-2.0",
"moduleLicenseUrl": "https://www.apache.org/licenses/LICENSE-2.0.txt"
},
{
"moduleName": "org.apache.pdfbox:pdfbox",
"moduleUrl": "https://pdfbox.apache.org",
"moduleVersion": "2.0.30",
"moduleLicense": "Apache License, Version 2.0",
"moduleVersion": "3.0.1",
"moduleLicense": "Apache-2.0",
"moduleLicenseUrl": "https://www.apache.org/licenses/LICENSE-2.0.txt"
},
{
"moduleName": "org.apache.pdfbox:pdfbox-io",
"moduleUrl": "https://pdfbox.apache.org",
"moduleVersion": "3.0.1",
"moduleLicense": "Apache-2.0",
"moduleLicenseUrl": "https://www.apache.org/licenses/LICENSE-2.0.txt"
},
{
"moduleName": "org.apache.pdfbox:xmpbox",
"moduleUrl": "https://pdfbox.apache.org",
"moduleVersion": "2.0.30",
"moduleLicense": "Apache License, Version 2.0",
"moduleVersion": "3.0.1",
"moduleLicense": "Apache-2.0",
"moduleLicenseUrl": "https://www.apache.org/licenses/LICENSE-2.0.txt"
},
{
@@ -450,6 +457,12 @@
"moduleLicense": "BSD 2-Clause License",
"moduleLicenseUrl": "https://opensource.org/licenses/BSD-2-Clause"
},
{
"moduleName": "org.commonmark:commonmark-ext-gfm-tables",
"moduleVersion": "0.21.0",
"moduleLicense": "BSD 2-Clause License",
"moduleLicenseUrl": "https://opensource.org/licenses/BSD-2-Clause"
},
{
"moduleName": "org.eclipse.angus:angus-activation",
"moduleUrl": "https://www.eclipse.org",
@@ -506,6 +519,52 @@
"moduleLicense": "Public Domain",
"moduleLicenseUrl": "http://repository.jboss.org/licenses/cc0-1.0.txt"
},
{
"moduleName": "org.junit.jupiter:junit-jupiter",
"moduleUrl": "https://junit.org/junit5/",
"moduleVersion": "5.10.1",
"moduleLicense": "Eclipse Public License v2.0",
"moduleLicenseUrl": "https://www.eclipse.org/legal/epl-v20.html"
},
{
"moduleName": "org.junit.jupiter:junit-jupiter-api",
"moduleUrl": "https://junit.org/junit5/",
"moduleVersion": "5.10.1",
"moduleLicense": "Eclipse Public License v2.0",
"moduleLicenseUrl": "https://www.eclipse.org/legal/epl-v20.html"
},
{
"moduleName": "org.junit.jupiter:junit-jupiter-engine",
"moduleUrl": "https://junit.org/junit5/",
"moduleVersion": "5.10.1",
"moduleLicense": "Eclipse Public License v2.0",
"moduleLicenseUrl": "https://www.eclipse.org/legal/epl-v20.html"
},
{
"moduleName": "org.junit.jupiter:junit-jupiter-params",
"moduleUrl": "https://junit.org/junit5/",
"moduleVersion": "5.10.1",
"moduleLicense": "Eclipse Public License v2.0",
"moduleLicenseUrl": "https://www.eclipse.org/legal/epl-v20.html"
},
{
"moduleName": "org.junit.platform:junit-platform-commons",
"moduleUrl": "https://junit.org/junit5/",
"moduleVersion": "1.10.1",
"moduleLicense": "Eclipse Public License v2.0",
"moduleLicenseUrl": "https://www.eclipse.org/legal/epl-v20.html"
},
{
"moduleName": "org.junit.platform:junit-platform-engine",
"moduleUrl": "https://junit.org/junit5/",
"moduleVersion": "1.10.1",
"moduleLicense": "Eclipse Public License v2.0",
"moduleLicenseUrl": "https://www.eclipse.org/legal/epl-v20.html"
},
{
"moduleName": "org.junit:junit-bom",
"moduleVersion": "5.10.1"
},
{
"moduleName": "org.latencyutils:LatencyUtils",
"moduleUrl": "http://latencyutils.github.io/LatencyUtils/",
@@ -513,6 +572,13 @@
"moduleLicense": "Public Domain, per Creative Commons CC0",
"moduleLicenseUrl": "http://creativecommons.org/publicdomain/zero/1.0/"
},
{
"moduleName": "org.opentest4j:opentest4j",
"moduleUrl": "https://github.com/ota4j-team/opentest4j",
"moduleVersion": "1.3.0",
"moduleLicense": "The Apache License, Version 2.0",
"moduleLicenseUrl": "https://www.apache.org/licenses/LICENSE-2.0.txt"
},
{
"moduleName": "org.slf4j:jul-to-slf4j",
"moduleUrl": "http://www.slf4j.org",

View File

@@ -0,0 +1,4 @@
<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="currentColor" class="bi bi-postage-heart" viewBox="0 0 16 16">
<path d="M3.5 1a1 1 0 0 0 1-1h1a1 1 0 0 0 2 0h1a1 1 0 0 0 2 0h1a1 1 0 1 0 2 0H15v1a1 1 0 1 0 0 2v1a1 1 0 1 0 0 2v1a1 1 0 1 0 0 2v1a1 1 0 1 0 0 2v1a1 1 0 1 0 0 2v1h-1.5a1 1 0 1 0-2 0h-1a1 1 0 1 0-2 0h-1a1 1 0 1 0-2 0h-1a1 1 0 1 0-2 0H1v-1a1 1 0 1 0 0-2v-1a1 1 0 1 0 0-2V9a1 1 0 1 0 0-2V6a1 1 0 0 0 0-2V3a1 1 0 0 0 0-2V0h1.5a1 1 0 0 0 1 1M3 3v10a1 1 0 0 0 1 1h8a1 1 0 0 0 1-1V3a1 1 0 0 0-1-1H4a1 1 0 0 0-1 1"/>
<path d="M8 11C2.175 7.236 6.336 4.31 8 5.982 9.664 4.309 13.825 7.236 8 11"/>
</svg>

After

Width:  |  Height:  |  Size: 630 B

View File

@@ -1,7 +1,20 @@
document.addEventListener('DOMContentLoaded', function() {
setLanguageForDropdown('.lang_dropdown-item');
const defaultLocale = document.documentElement.lang || 'en_GB';
const storedLocale = localStorage.getItem('languageCode') || defaultLocale;
// Detect the browser's preferred language
let browserLang = navigator.language || navigator.userLanguage;
// Convert to a format consistent with your language codes (e.g., en-GB, fr-FR)
browserLang = browserLang.replace('-', '_');
// Check if the dropdown contains the browser's language
const dropdownLangExists = document.querySelector(`.lang_dropdown-item[data-language-code="${browserLang}"]`);
// Set the default language to browser's language or 'en_GB' if not found in the dropdown
const defaultLocale = dropdownLangExists ? browserLang : 'en_GB';
const storedLocale = localStorage.getItem('languageCode') || defaultLocale;
const dropdownItems = document.querySelectorAll('.lang_dropdown-item');
for (let i = 0; i < dropdownItems.length; i++) {

View File

@@ -8,11 +8,18 @@ document.getElementById("fileInput-input").addEventListener("change", function()
displayFiles(files);
});
/**
* @param {FileList} files
*/
function displayFiles(files) {
var list = document.getElementById("selectedFiles");
const list = document.getElementById("selectedFiles");
for (var i = 0; i < files.length; i++) {
var item = document.createElement("li");
while (list.firstChild) {
list.removeChild(list.firstChild);
}
for (let i = 0; i < files.length; i++) {
const item = document.createElement("li");
item.className = "list-group-item";
item.innerHTML = `
<div class="d-flex justify-content-between align-items-center w-100">

View File

@@ -26,6 +26,7 @@ class PdfContainer {
movePageTo: this.movePageTo,
addPdfs: this.addPdfs,
rotateElement: this.rotateElement,
updateFilename: this.updateFilename
})
})
@@ -38,7 +39,7 @@ class PdfContainer {
filenameInput.onkeyup = this.updateFilename;
filenameInput.onkeydown = this.preventIllegalChars;
filenameInput.disabled = true;
filenameInput.disabled = false;
filenameInput.innerText = "";
downloadBtn.disabled = true;
}
@@ -59,7 +60,7 @@ class PdfContainer {
const vector = (endIndex !== -1 && startIndex > endIndex)
? 0-width
: width;
this.pagesContainerWrapper.scroll({
left: this.pagesContainerWrapper.scrollLeft + vector,
})
@@ -73,30 +74,9 @@ class PdfContainer {
input.setAttribute("accept", "application/pdf");
input.onchange = async(e) => {
const files = e.target.files;
if (files.length > 0) {
const filenameInput = document.getElementById('filename-input');
const pagesContainer = document.getElementById('pages-container');
const downloadBtn = document.getElementById('export-button');
filenameInput.disabled = false;
if (pagesContainer.childElementCount === 0) {
filenameInput.value = "";
this.filename = null;
downloadBtn.disabled = true;
} else {
this.filename = filenameInput.value;
}
if (this.filename === null || this.filename === undefined) {
filenameInput.value = files[0].name;
} else {
filenameInput.value = this.filename;
}
}
this.addPdfsFromFiles(files, nextSiblingElement);
this.updateFilename(files ? files[0].name : "");
}
input.click();
@@ -197,7 +177,7 @@ class PdfContainer {
return pdfDoc;
}
rotateAll(deg) {
for (var i=0; i<this.pagesContainer.childNodes.length; i++) {
@@ -215,13 +195,13 @@ class PdfContainer {
if (!img) continue;
const pages = await pdfDoc.copyPages(img.doc, [img.pageIdx])
const page = pages[0];
const rotation = img.style.rotate;
if (rotation) {
const rotationAngle = parseInt(rotation.replace(/[^\d-]/g, ''));
page.setRotation(PDFLib.degrees(page.getRotation().angle + rotationAngle))
}
pdfDoc.addPage(page);
}
const pdfBytes = await pdfDoc.save();
@@ -242,12 +222,12 @@ class PdfContainer {
}
filenameInput.value = inputArr.join('');
this.filename = filenameInput.value;
this.fileName = filenameInput.value;
}
if (!filenameInput.value.includes('.pdf')) {
filenameInput.value = filenameInput.value + '.pdf';
this.filename = filenameInput.value;
this.fileName = filenameInput.value;
}
if (downloadOption === 'sameWindow') {
@@ -263,7 +243,7 @@ class PdfContainer {
this.downloadLink.href = url;
// downloadLink.download = this.fileName ? this.fileName : 'managed.pdf';
// downloadLink.download = this.fileName;
this.downloadLink.setAttribute('download', this.filename ? this.fileName : 'managed.pdf');
this.downloadLink.setAttribute('download', this.fileName ? this.fileName : 'managed.pdf');
this.downloadLink.setAttribute('target', '_blank');
this.downloadLink.onclick = this.setDownloadAttribute;
this.downloadLink.click();
@@ -271,20 +251,23 @@ class PdfContainer {
}
setDownloadAttribute() {
this.downloadLink.setAttribute("download", this.filename ? this.filename : 'managed.pdf');
this.downloadLink.setAttribute("download", this.fileName ? this.fileName : 'managed.pdf');
}
updateFilename() {
const filenameInput = document.getElementById('filename-input');
updateFilename(fileName = "") {
const filenameInput = document.getElementById('filename-input');
const pagesContainer = document.getElementById('pages-container');
const downloadBtn = document.getElementById('export-button');
if (filenameInput.value === "") {
downloadBtn.disabled = true;
return;
downloadBtn.disabled = pagesContainer.childElementCount === 0
if (!this.fileName) {
this.fileName = fileName;
}
downloadBtn.disabled = false;
this.filename = filenameInput.value;
if (!filenameInput.value) {
filenameInput.value = this.fileName;
}
}
preventIllegalChars(e) {

View File

@@ -1,69 +1,94 @@
const addFileDragListener = (callback) => {
let overlay;
let dragCounter = 0;
class FileDragManager {
overlay;
dragCounter;
updateFilename;
const dragenterListener = function() {
dragCounter++;
if (!overlay) {
constructor(cb = null) {
this.dragCounter = 0;
this.setCallback(cb);
// Prevent default behavior for drag events
['dragenter', 'dragover', 'dragleave', 'drop'].forEach(eventName => {
document.body.addEventListener(eventName, preventDefaults, false);
});
function preventDefaults(e) {
e.preventDefault();
e.stopPropagation();
}
this.dragenterListener = this.dragenterListener.bind(this);
this.dragleaveListener = this.dragleaveListener.bind(this);
this.dropListener = this.dropListener.bind(this);
document.body.addEventListener('dragenter', this.dragenterListener);
document.body.addEventListener('dragleave', this.dragleaveListener);
// Add drop event listener
document.body.addEventListener('drop', this.dropListener);
}
setActions({ updateFilename }) {
this.updateFilename = updateFilename;
}
setCallback(cb) {
if (cb) {
this.callback = cb;
} else {
this.callback = (files) => console.warn("FileDragManager not set");
}
}
dragenterListener() {
this.dragCounter++;
if (!this.overlay) {
// Create and show the overlay
overlay = document.createElement('div');
overlay.style.position = 'fixed';
overlay.style.top = 0;
overlay.style.left = 0;
overlay.style.width = '100%';
overlay.style.height = '100%';
overlay.style.background = 'rgba(0, 0, 0, 0.5)';
overlay.style.color = '#fff';
overlay.style.zIndex = '1000';
overlay.style.display = 'flex';
overlay.style.alignItems = 'center';
overlay.style.justifyContent = 'center';
overlay.style.pointerEvents = 'none';
overlay.innerHTML = '<p>Drop files anywhere to upload</p>';
document.getElementById('content-wrap').appendChild(overlay);
this.overlay = document.createElement('div');
this.overlay.style.position = 'fixed';
this.overlay.style.top = 0;
this.overlay.style.left = 0;
this.overlay.style.width = '100%';
this.overlay.style.height = '100%';
this.overlay.style.background = 'rgba(0, 0, 0, 0.5)';
this.overlay.style.color = '#fff';
this.overlay.style.zIndex = '1000';
this.overlay.style.display = 'flex';
this.overlay.style.alignItems = 'center';
this.overlay.style.justifyContent = 'center';
this.overlay.style.pointerEvents = 'none';
this.overlay.innerHTML = '<p>Drop files anywhere to upload</p>';
document.getElementById('content-wrap').appendChild(this.overlay);
}
};
const dragleaveListener = function() {
dragCounter--;
if (dragCounter === 0) {
dragleaveListener() {
this.dragCounter--;
if (this.dragCounter === 0) {
// Hide and remove the overlay
if (overlay) {
overlay.remove();
overlay = null;
if (this.overlay) {
this.overlay.remove();
this.overlay = null;
}
}
};
const dropListener = function(e) {
dropListener(e) {
const dt = e.dataTransfer;
const files = dt.files;
callback(files).catch((err) => {
this.callback(files).catch((err) => {
console.error(err);
//maybe
}).finally(() => {
if (overlay) {
overlay.remove();
overlay = null;
// Hide and remove the overlay
if (this.overlay) {
this.overlay.remove();
this.overlay = null;
}
this.updateFilename(files ? files[0].name : "");
});
};
// Prevent default behavior for drag events
['dragenter', 'dragover', 'dragleave', 'drop'].forEach(eventName => {
document.body.addEventListener(eventName, preventDefaults, false);
});
function preventDefaults(e) {
e.preventDefault();
e.stopPropagation();
}
document.body.addEventListener('dragenter', dragenterListener);
document.body.addEventListener('dragleave', dragleaveListener);
// Add drop event listener
document.body.addEventListener('drop', dropListener);
}
export default addFileDragListener;
export default FileDragManager;

View File

@@ -24,7 +24,7 @@
</ul>
<form method="post" enctype="multipart/form-data" th:action="@{api/v1/misc/auto-split-pdf}">
<p th:text="#{autoSplitPDF.formPrompt}"></p>
<div th:replace="~{fragments/common :: fileSelector(name='fileInput', multiple=false)}"></div>
<div th:replace="~{fragments/common :: fileSelector(name='fileInput', multiple=false, accept='application/pdf')}"></div>
<div class="form-check">
<input type="checkbox" class="form-check-input" name="duplexMode" id="duplexMode">
<label class="ms-3" for="duplexMode" th:text=#{autoSplitPDF.duplexMode}></label>

View File

@@ -10,10 +10,73 @@
<div th:insert="~{fragments/navbar.html :: navbar}"></div>
<br> <br>
<div class="container">
<div class="row justify-content-center">
<div class="row justify-content-center">
<div class="mb-3">
<h2 th:text="#{HTMLToPDF.header}"></h2>
<form method="post" enctype="multipart/form-data" th:action="@{api/v1/convert/html/pdf}">
<form method="post" enctype="multipart/form-data" th:action="@{api/v1/convert/html/pdf}">
<div th:replace="~{fragments/common :: fileSelector(name='fileInput', multiple=false, accept='text/html,application/zip' )}"></div>
<div class="mb-3">
<label for="zoom" th:text="#{HTMLToPDF.zoom}" class="form-label"></label>
<input type="number" step="0.1" class="form-control" id="zoom" name="zoom" value="1" />
</div>
<div class="mb-3">
<label for="pageWidth" th:text="#{HTMLToPDF.pageWidth}" class="form-label"></label>
<input type="number" class="form-control" id="pageWidth" name="pageWidth" />
</div>
<div class="mb-3">
<label for="pageHeight" th:text="#{HTMLToPDF.pageHeight}" class="form-label"></label>
<input type="number" class="form-control" id="pageHeight" name="pageHeight" />
</div>
<div class="mb-3">
<label for="marginTop" th:text="#{HTMLToPDF.marginTop}" class="form-label"></label>
<input type="number" class="form-control" id="marginTop" name="marginTop" />
</div>
<div class="mb-3">
<label for="marginBottom" th:text="#{HTMLToPDF.marginBottom}" class="form-label"></label>
<input type="number" class="form-control" id="marginBottom" name="marginBottom" />
</div>
<div class="mb-3">
<label for="marginLeft" th:text="#{HTMLToPDF.marginLeft}" class="form-label"></label>
<input type="number" class="form-control" id="marginLeft" name="marginLeft" />
</div>
<div class="mb-3">
<label for="marginRight" th:text="#{HTMLToPDF.marginRight}" class="form-label"></label>
<input type="number" class="form-control" id="marginRight" name="marginRight" />
</div>
<div class="mb-3">
<label th:text="#{HTMLToPDF.printBackground}" class="form-label"></label>
<select class="form-select" name="printBackground">
<option value="Yes" th:text="#{yes}">Yes</option>
<option value="No" th:text="#{no}">No</option>
</select>
</div>
<div class="mb-3">
<label th:text="#{HTMLToPDF.defaultHeader}" class="form-label"></label>
<select class="form-select" name="defaultHeader">
<option value="No" th:text="#{no}">No</option>
<option value="Yes" th:text="#{yes}">Yes</option>
</select>
</div>
<div class="mb-3">
<label th:text="#{HTMLToPDF.cssMediaType}" class="form-label"></label>
<select class="form-select" name="cssMediaType">
<option value="screen" th:text="#{HTMLToPDF.screen}">Screen</option>
<option value="none" th:text="#{HTMLToPDF.none}">None</option>
<option value="print" th:text="#{HTMLToPDF.print}">Print</option>
</select>
</div>
<br>
<button type="submit" id="submitBtn" class="btn btn-primary" th:text="#{HTMLToPDF.submit}"></button>

View File

@@ -13,7 +13,7 @@
<div class="col-md-6">
<h2 th:text="#{MarkdownToPDF.header}"></h2>
<form method="post" enctype="multipart/form-data" th:action="@{api/v1/convert/markdown/pdf}">
<div th:replace="~{fragments/common :: fileSelector(name='fileInput', multiple=false)}"></div>
<div th:replace="~{fragments/common :: fileSelector(name='fileInput', multiple=false, accept='text/markdown')}"></div>
<br>
<button type="submit" id="submitBtn" class="btn btn-primary" th:text="#{MarkdownToPDF.submit}"></button>

View File

@@ -120,7 +120,7 @@
data-bs-files-selected=#{filesSelected},
data-bs-pdf-prompt=#{pdfPrompt}">
<div class="mb-3">
<input type="file" class="form-control" th:name="${name}" th:id="${name}+'-input'" th:accept="${accept}" multiple th:classappend="${notRequired ? '' : 'required'}">
<input type="file" class="form-control" th:name="${name}" th:id="${name}+'-input'" th:accept="${accept}" multiple th:required="${notRequired} ? null : 'required'">
</div>
<div class="selected-files"></div>
</div>

View File

@@ -133,6 +133,7 @@
<div th:replace="~{fragments/navbarEntry :: navbarEntry ('auto-rename', 'images/fonts.svg', 'home.auto-rename.title', 'home.auto-rename.desc', 'auto-rename.tags')}"></div>
<div th:replace="~{fragments/navbarEntry :: navbarEntry ('get-info-on-pdf', 'images/info.svg', 'home.getPdfInfo.title', 'home.getPdfInfo.desc', 'getPdfInfo.tags')}"></div>
<div th:replace="~{fragments/navbarEntry :: navbarEntry ('show-javascript', 'images/js.svg', 'home.showJS.title', 'home.showJS.desc', 'showJS.tags')}"></div>
<div th:replace="~{fragments/navbarEntry :: navbarEntry ('stamp', 'images/stamp.svg', 'home.AddStampRequest.title', 'home.AddStampRequest.desc', 'AddStampRequest.tags')}"></div>
</div>
</li>

View File

@@ -101,8 +101,10 @@
<div th:replace="~{fragments/card :: card(id='split-pdf-by-sections', cardTitle=#{home.split-by-sections.title}, cardText=#{home.split-by-sections.desc}, cardLink='split-pdf-by-sections', svgPath='images/layout-split.svg')}"></div>
<div th:replace="~{fragments/card :: card(id='book-to-pdf', cardTitle=#{home.BookToPDF.title}, cardText=#{home.BookToPDF.desc}, cardLink='book-to-pdf', svgPath='images/book.svg')}"></div>
<div th:replace="~{fragments/card :: card(id='pdf-to-book', cardTitle=#{home.PDFToBook.title}, cardText=#{home.PDFToBook.desc}, cardLink='pdf-to-book', svgPath='images/book.svg')}"></div>
<div th:replace="~{fragments/card :: card(id='stamp', cardTitle=#{home.AddStampRequest.title}, cardText=#{home.AddStampRequest.desc}, cardLink='stamp', svgPath='images/stamp.svg')}"></div>
</div>
</div> </div>

Some files were not shown because too many files have changed in this diff Show More