Compare commits
47 Commits
Frooodle-p
...
v0.27.0
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
908b409155 | ||
|
|
4ad716f281 | ||
|
|
148feda83f | ||
|
|
771b312ee8 | ||
|
|
00a0670954 | ||
|
|
39423c247c | ||
|
|
6d8d0bad56 | ||
|
|
a3374745f8 | ||
|
|
d65a637a46 | ||
|
|
d0bf385d69 | ||
|
|
bc35745768 | ||
|
|
e50391a44a | ||
|
|
96b080528b | ||
|
|
f35cbc4310 | ||
|
|
c09fc1541f | ||
|
|
dff53310a7 | ||
|
|
ec537c6fde | ||
|
|
ce70796fff | ||
|
|
7db7192d95 | ||
|
|
d00e7fe958 | ||
|
|
510f39ad41 | ||
|
|
950a0c4b21 | ||
|
|
e6793bd04a | ||
|
|
0f60974a57 | ||
|
|
0ed4c16dc0 | ||
|
|
ea6d4a293e | ||
|
|
191e79da18 | ||
|
|
c54c18b247 | ||
|
|
39cbb5e7d9 | ||
|
|
3df0474ed2 | ||
|
|
9ff2cb63d0 | ||
|
|
d8087d8c55 | ||
|
|
0dfb4d77c0 | ||
|
|
065f53e577 | ||
|
|
c899f605a9 | ||
|
|
47de0f84db | ||
|
|
543b96c033 | ||
|
|
c1126e57bd | ||
|
|
7c5077006d | ||
|
|
3e7889cee8 | ||
|
|
281047f42a | ||
|
|
07f85ea8b4 | ||
|
|
e07f73dce7 | ||
|
|
bfe38c71e8 | ||
|
|
072090d41b | ||
|
|
560936e182 | ||
|
|
6eb79e65fa |
2
.github/ISSUE_TEMPLATE/2-feature.yml
vendored
2
.github/ISSUE_TEMPLATE/2-feature.yml
vendored
@@ -1,6 +1,8 @@
|
||||
name: Feature Request
|
||||
description: Submit a new feature request.
|
||||
title: "[Feature Request]: "
|
||||
labels:
|
||||
- enhancement
|
||||
body:
|
||||
- type: markdown
|
||||
attributes:
|
||||
|
||||
39
.github/labeler-config.yml
vendored
39
.github/labeler-config.yml
vendored
@@ -1,20 +1,49 @@
|
||||
translation:
|
||||
Translation:
|
||||
- changed-files:
|
||||
- any-glob-to-any-file: 'src/main/resources/messages_*_*.properties'
|
||||
- any-glob-to-any-file: 'scripts/ignore_translation.toml'
|
||||
|
||||
Front End:
|
||||
- changed-files:
|
||||
- any-glob-to-any-file: 'src/main/resources/templates/**'
|
||||
- any-glob-to-any-file: 'src/main/resources/templates/**/*'
|
||||
- any-glob-to-any-file: 'src/main/resources/static/**/*'
|
||||
- any-glob-to-any-file: 'src/main/java/stirling/software/SPDF/controller/web/**'
|
||||
|
||||
java:
|
||||
Java:
|
||||
- changed-files:
|
||||
- any-glob-to-any-file: 'src/main/java/**/*.java'
|
||||
|
||||
documentation:
|
||||
Back End:
|
||||
- changed-files:
|
||||
- any-glob-to-any-file: 'src/main/java/stirling/software/SPDF/config/security/**/*'
|
||||
- any-glob-to-any-file: 'src/main/java/stirling/software/SPDF/config/model/provider/**/*'
|
||||
- any-glob-to-any-file: 'src/main/resources/settings.yml.template'
|
||||
- any-glob-to-any-file: 'src/main/resources/banner.txt'
|
||||
|
||||
Security:
|
||||
- changed-files:
|
||||
- any-glob-to-any-file: 'src/main/java/stirling/software/SPDF/config/security/**/*'
|
||||
- any-glob-to-any-file: 'src/main/java/stirling/software/SPDF/config/model/provider/**/*'
|
||||
- any-glob-to-any-file: 'src/main/java/stirling/software/SPDF/config/model/AuthenticationType.java'
|
||||
|
||||
API:
|
||||
- changed-files:
|
||||
- any-glob-to-any-file: 'src/main/java/stirling/software/SPDF/controller/web/MetricsController.java'
|
||||
- any-glob-to-any-file: 'src/main/java/stirling/software/SPDF/controller/api/**/*'
|
||||
|
||||
Documentation:
|
||||
- changed-files:
|
||||
- any-glob-to-any-file: '**/*.md'
|
||||
- any-glob-to-any-file: 'scripts/counter_translation.py'
|
||||
- any-glob-to-any-file: 'scripts/ignore_translation.toml'
|
||||
|
||||
docker:
|
||||
Docker:
|
||||
- changed-files:
|
||||
- any-glob-to-any-file: 'Dockerfile'
|
||||
- any-glob-to-any-file: 'Dockerfile-*'
|
||||
- any-glob-to-any-file: 'exampleYmlFiles/*.yml'
|
||||
|
||||
Test:
|
||||
- changed-files:
|
||||
- any-glob-to-any-file: 'cucumber/**/*'
|
||||
- any-glob-to-any-file: 'src/test**/*'
|
||||
|
||||
2
.github/labels.yml
vendored
2
.github/labels.yml
vendored
@@ -89,3 +89,5 @@
|
||||
- name: "Test"
|
||||
color: "FF9E1F"
|
||||
description: "Testing-related issues or pull requests"
|
||||
- name: "Stale"
|
||||
color: "000000"
|
||||
|
||||
1
.github/scripts/check_tabulator.py
vendored
1
.github/scripts/check_tabulator.py
vendored
@@ -1,4 +1,5 @@
|
||||
"""check_tabulator.py"""
|
||||
|
||||
import argparse
|
||||
import sys
|
||||
|
||||
|
||||
2
.github/workflows/sync_files.yml
vendored
2
.github/workflows/sync_files.yml
vendored
@@ -51,6 +51,7 @@ jobs:
|
||||
[1]: https://github.com/peter-evans/create-pull-request
|
||||
draft: false
|
||||
delete-branch: true
|
||||
labels: github-actions
|
||||
sync-readme:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
@@ -88,3 +89,4 @@ jobs:
|
||||
[1]: https://github.com/peter-evans/create-pull-request
|
||||
draft: false
|
||||
delete-branch: true
|
||||
labels: Documentation,Translation,github-actions
|
||||
|
||||
4
.github/workflows/test.yml
vendored
4
.github/workflows/test.yml
vendored
@@ -29,8 +29,8 @@ jobs:
|
||||
|
||||
- name: Install Docker Compose
|
||||
run: |
|
||||
sudo curl -SL "https://github.com/docker/compose/releases/download/v2.26.1/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
|
||||
# sudo chmod +x /usr/local/bin/docker-compose
|
||||
sudo curl -SL "https://github.com/docker/compose/releases/download/v2.29.1/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
|
||||
sudo chmod +x /usr/local/bin/docker-compose
|
||||
|
||||
- name: Set up Python
|
||||
uses: actions/setup-python@v4
|
||||
|
||||
45
.gitignore
vendored
45
.gitignore
vendored
@@ -1,5 +1,3 @@
|
||||
|
||||
|
||||
### Eclipse ###
|
||||
.metadata
|
||||
bin/
|
||||
@@ -22,7 +20,6 @@ customFiles/
|
||||
configs/
|
||||
watchedFolders/
|
||||
|
||||
|
||||
# Gradle
|
||||
.gradle
|
||||
.lock
|
||||
@@ -119,12 +116,48 @@ watchedFolders/
|
||||
*.db
|
||||
/build
|
||||
|
||||
/.vscode
|
||||
/.idea
|
||||
# Byte-compiled / optimized / DLL files
|
||||
__pycache__/
|
||||
*.py[cod]
|
||||
*.pyo
|
||||
|
||||
# Virtual environments
|
||||
.env*
|
||||
.venv*
|
||||
env*/
|
||||
venv*/
|
||||
ENV/
|
||||
env.bak/
|
||||
venv.bak/
|
||||
|
||||
# VS Code
|
||||
/.vscode/**/*
|
||||
!/.vscode/settings.json
|
||||
|
||||
# IntelliJ IDEA
|
||||
.idea/
|
||||
*.iml
|
||||
out/
|
||||
|
||||
# Ignore Mac DS_Store files
|
||||
.DS_Store
|
||||
**/.DS_Store
|
||||
|
||||
#cucumber
|
||||
# cucumber
|
||||
/cucumber/reports/**
|
||||
|
||||
# Certs
|
||||
*.p12
|
||||
*.pem
|
||||
*.crt
|
||||
*.cer
|
||||
*.der
|
||||
*.key
|
||||
*.csr
|
||||
|
||||
# cache
|
||||
.ruff_cache
|
||||
.mypy_cache
|
||||
.pytest_cache
|
||||
.ipynb_checkpoints
|
||||
|
||||
|
||||
53
.vscode/settings.json
vendored
Normal file
53
.vscode/settings.json
vendored
Normal file
@@ -0,0 +1,53 @@
|
||||
{
|
||||
"java.compile.nullAnalysis.mode": "automatic",
|
||||
"files.eol": "auto",
|
||||
"java.configuration.updateBuildConfiguration": "interactive",
|
||||
"black-formatter.args": ["--line-length", "127"],
|
||||
"flake8.args": ["--max-line-length", "127"],
|
||||
"pylint.args": ["max-line-length", "127"],
|
||||
"[java]": {
|
||||
"editor.tabSize": 4,
|
||||
"editor.detectIndentation": false,
|
||||
"editor.rulers": [127]
|
||||
},
|
||||
"[python]": {
|
||||
"editor.tabSize": 2,
|
||||
"editor.detectIndentation": false,
|
||||
"editor.rulers": [127]
|
||||
},
|
||||
"[gradle-build]": {
|
||||
"editor.tabSize": 4,
|
||||
"editor.detectIndentation": false,
|
||||
"editor.rulers": [127]
|
||||
},
|
||||
"[gradle]": {
|
||||
"editor.tabSize": 4,
|
||||
"editor.detectIndentation": false,
|
||||
"editor.rulers": [127]
|
||||
},
|
||||
"[html]": {
|
||||
"editor.tabSize": 2,
|
||||
"editor.rulers": [127],
|
||||
"files.trimFinalNewlines": false,
|
||||
"files.insertFinalNewline": false
|
||||
},
|
||||
"[javascript]": {
|
||||
"editor.tabSize": 2,
|
||||
"editor.rulers": [127]
|
||||
},
|
||||
"[yaml]": {
|
||||
"files.trimFinalNewlines": false,
|
||||
"files.insertFinalNewline": false
|
||||
},
|
||||
"diffEditor.maxComputationTime": 0,
|
||||
"editor.wordSegmenterLocales": null,
|
||||
"editor.guides.bracketPairs": "active",
|
||||
"editor.guides.bracketPairsHorizontal": "active",
|
||||
"files.insertFinalNewline": true,
|
||||
"files.trimFinalNewlines": true,
|
||||
"files.trimTrailingWhitespace": true,
|
||||
"editor.indentSize": "tabSize",
|
||||
"editor.stickyScroll.enabled": false,
|
||||
"editor.minimap.enabled": false,
|
||||
"editor.formatOnSave": true
|
||||
}
|
||||
@@ -1,5 +1,5 @@
|
||||
# Main stage
|
||||
FROM alpine:3.20.0
|
||||
FROM alpine:3.20.2
|
||||
|
||||
# Copy necessary files
|
||||
COPY scripts /scripts
|
||||
@@ -45,8 +45,8 @@ RUN echo "@testing https://dl-cdn.alpinelinux.org/alpine/edge/main" | tee -a /et
|
||||
# CV
|
||||
py3-opencv \
|
||||
# python3/pip
|
||||
python3 && \
|
||||
wget https://bootstrap.pypa.io/get-pip.py -qO - | python3 - --break-system-packages --no-cache-dir --upgrade && \
|
||||
python3 \
|
||||
py3-pip && \
|
||||
# uno unoconv and HTML
|
||||
pip install --break-system-packages --no-cache-dir --upgrade unoconv WeasyPrint && \
|
||||
mv /usr/share/tessdata /usr/share/tessdata-original && \
|
||||
|
||||
@@ -12,7 +12,7 @@ RUN DOCKER_ENABLE_SECURITY=true \
|
||||
./gradlew clean build
|
||||
|
||||
# Main stage
|
||||
FROM alpine:3.20.0
|
||||
FROM alpine:3.20.2
|
||||
|
||||
# Copy necessary files
|
||||
COPY scripts /scripts
|
||||
@@ -61,8 +61,8 @@ RUN echo "@testing https://dl-cdn.alpinelinux.org/alpine/edge/main" | tee -a /et
|
||||
# CV
|
||||
py3-opencv \
|
||||
# python3/pip
|
||||
python3 && \
|
||||
wget https://bootstrap.pypa.io/get-pip.py -qO - | python3 - --break-system-packages --no-cache-dir --upgrade && \
|
||||
python3 \
|
||||
py3-pip && \
|
||||
# uno unoconv and HTML
|
||||
pip install --break-system-packages --no-cache-dir --upgrade unoconv WeasyPrint && \
|
||||
mv /usr/share/tessdata /usr/share/tessdata-original && \
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
# use alpine
|
||||
FROM alpine:3.20.0
|
||||
FROM alpine:3.20.2
|
||||
|
||||
ARG VERSION_TAG
|
||||
|
||||
|
||||
63
README.md
63
README.md
@@ -165,43 +165,46 @@ Please view https://github.com/Stirling-Tools/Stirling-PDF/blob/main/HowToUseOCR
|
||||
|
||||
## Supported Languages
|
||||
|
||||
Stirling PDF currently supports 33!
|
||||
Stirling PDF currently supports 38!
|
||||
|
||||
| Language | Progress |
|
||||
| ------------------------------------------- | -------------------------------------- |
|
||||
| Arabic (العربية) (ar_AR) |  |
|
||||
| Basque (Euskara) (eu_ES) |  |
|
||||
| Bulgarian (Български) (bg_BG) |  |
|
||||
| Catalan (Català) (ca_CA) |  |
|
||||
| Croatian (Hrvatski) (hr_HR) |  |
|
||||
| Czech (Česky) (cs_CZ) |  |
|
||||
| Danish (Dansk) (da_DK) |  |
|
||||
| Dutch (Nederlands) (nl_NL) |  |
|
||||
| English (English) (en_GB) |  |
|
||||
| English (US) (en_US) |  |
|
||||
| Arabic (العربية) (ar_AR) |  |
|
||||
| German (Deutsch) (de_DE) |  |
|
||||
| French (Français) (fr_FR) |  |
|
||||
| Spanish (Español) (es_ES) |  |
|
||||
| Simplified Chinese (简体中文) (zh_CN) |  |
|
||||
| Traditional Chinese (繁體中文) (zh_TW) |  |
|
||||
| Catalan (Català) (ca_CA) |  |
|
||||
| Italian (Italiano) (it_IT) |  |
|
||||
| Swedish (Svenska) (sv_SE) |  |
|
||||
| Polish (Polski) (pl_PL) |  |
|
||||
| Romanian (Română) (ro_RO) |  |
|
||||
| Korean (한국어) (ko_KR) |  |
|
||||
| Portuguese Brazilian (Português) (pt_BR) |  |
|
||||
| Portuguese (Português) (pt_PT) |  |
|
||||
| Russian (Русский) (ru_RU) |  |
|
||||
| Basque (Euskara) (eu_ES) |  |
|
||||
| Japanese (日本語) (ja_JP) |  |
|
||||
| Dutch (Nederlands) (nl_NL) |  |
|
||||
| Greek (Ελληνικά) (el_GR) |  |
|
||||
| Turkish (Türkçe) (tr_TR) |  |
|
||||
| French (Français) (fr_FR) |  |
|
||||
| German (Deutsch) (de_DE) |  |
|
||||
| Greek (Ελληνικά) (el_GR) |  |
|
||||
| Hindi (हिंदी) (hi_IN) |  |
|
||||
| Hungarian (Magyar) (hu_HU) |  |
|
||||
| Indonesia (Bahasa Indonesia) (id_ID) |  |
|
||||
| Hindi (हिंदी) (hi_IN) |  |
|
||||
| Hungarian (Magyar) (hu_HU) |  |
|
||||
| Bulgarian (Български) (bg_BG) |  |
|
||||
| Irish (Gaeilge) (ga_IE) |  |
|
||||
| Italian (Italiano) (it_IT) |  |
|
||||
| Japanese (日本語) (ja_JP) |  |
|
||||
| Korean (한국어) (ko_KR) |  |
|
||||
| Norwegian (Norsk) (no_NB) |  |
|
||||
| Polish (Polski) (pl_PL) |  |
|
||||
| Portuguese (Português) (pt_PT) |  |
|
||||
| Portuguese Brazilian (Português) (pt_BR) |  |
|
||||
| Romanian (Română) (ro_RO) |  |
|
||||
| Russian (Русский) (ru_RU) |  |
|
||||
| Sebian Latin alphabet (Srpski) (sr_LATN_RS) |  |
|
||||
| Ukrainian (Українська) (uk_UA) |  |
|
||||
| Slovakian (Slovensky) (sk_SK) |  |
|
||||
| Czech (Česky) (cs_CZ) |  |
|
||||
| Croatian (Hrvatski) (hr_HR) |  |
|
||||
| Norwegian (Norsk) (no_NB) |  |
|
||||
| Thai (ไทย) (th_TH) |  |
|
||||
| Simplified Chinese (简体中文) (zh_CN) |  |
|
||||
| Slovakian (Slovensky) (sk_SK) |  |
|
||||
| Spanish (Español) (es_ES) |  |
|
||||
| Swedish (Svenska) (sv_SE) |  |
|
||||
| Thai (ไทย) (th_TH) |  |
|
||||
| Traditional Chinese (繁體中文) (zh_TW) |  |
|
||||
| Turkish (Türkçe) (tr_TR) |  |
|
||||
| Ukrainian (Українська) (uk_UA) |  |
|
||||
| Vietnamese (Tiếng Việt) (vi_VN) |  |
|
||||
|
||||
## Contributing (creating issues, translations, fixing bugs, etc.)
|
||||
|
||||
|
||||
27
build.gradle
27
build.gradle
@@ -1,7 +1,7 @@
|
||||
plugins {
|
||||
id "java"
|
||||
id "org.springframework.boot" version "3.3.0"
|
||||
id "io.spring.dependency-management" version "1.1.5"
|
||||
id "org.springframework.boot" version "3.3.2"
|
||||
id "io.spring.dependency-management" version "1.1.6"
|
||||
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"
|
||||
@@ -16,10 +16,12 @@ ext {
|
||||
}
|
||||
|
||||
group = "stirling.software"
|
||||
version = "0.26.2"
|
||||
version = "0.27.0"
|
||||
|
||||
// 17 is lowest but we support and recommend 21
|
||||
sourceCompatibility = "17"
|
||||
java {
|
||||
// 17 is lowest but we support and recommend 21
|
||||
sourceCompatibility = JavaVersion.VERSION_17
|
||||
}
|
||||
|
||||
repositories {
|
||||
mavenCentral()
|
||||
@@ -40,6 +42,7 @@ sourceSets {
|
||||
exclude "stirling/software/SPDF/controller/web/AccountWebController.java"
|
||||
exclude "stirling/software/SPDF/controller/web/DatabaseWebController.java"
|
||||
exclude "stirling/software/SPDF/model/ApiKeyAuthenticationToken.java"
|
||||
exclude "stirling/software/SPDF/model/AttemptCounter.java"
|
||||
exclude "stirling/software/SPDF/model/Authority.java"
|
||||
exclude "stirling/software/SPDF/model/PersistentLogin.java"
|
||||
exclude "stirling/software/SPDF/model/User.java"
|
||||
@@ -131,8 +134,8 @@ dependencies {
|
||||
implementation "org.apache.xmlgraphics:batik-all:1.17"
|
||||
|
||||
// TwelveMonkeys
|
||||
implementation "com.twelvemonkeys.imageio:imageio-batik:3.10.1"
|
||||
implementation "com.twelvemonkeys.imageio:imageio-bmp:3.10.1"
|
||||
implementation "com.twelvemonkeys.imageio:imageio-batik:3.11.0"
|
||||
implementation "com.twelvemonkeys.imageio:imageio-bmp:3.11.0"
|
||||
// implementation "com.twelvemonkeys.imageio:imageio-hdr:3.10.1"
|
||||
// implementation "com.twelvemonkeys.imageio:imageio-icns:3.10.1"
|
||||
// implementation "com.twelvemonkeys.imageio:imageio-iff:3.10.1"
|
||||
@@ -144,8 +147,8 @@ dependencies {
|
||||
// implementation "com.twelvemonkeys.imageio:imageio-sgi:3.10.1"
|
||||
// implementation "com.twelvemonkeys.imageio:imageio-tga:3.10.1"
|
||||
// implementation "com.twelvemonkeys.imageio:imageio-thumbsdb:3.10.1"
|
||||
implementation "com.twelvemonkeys.imageio:imageio-tiff:3.10.1"
|
||||
implementation "com.twelvemonkeys.imageio:imageio-webp:3.10.1"
|
||||
implementation "com.twelvemonkeys.imageio:imageio-tiff:3.11.0"
|
||||
implementation "com.twelvemonkeys.imageio:imageio-webp:3.11.0"
|
||||
// implementation "com.twelvemonkeys.imageio:imageio-xwd:3.10.1"
|
||||
|
||||
implementation "commons-io:commons-io:2.16.1"
|
||||
@@ -184,7 +187,7 @@ dependencies {
|
||||
compileOnly "org.projectlombok:lombok:1.18.32"
|
||||
annotationProcessor "org.projectlombok:lombok:1.18.32"
|
||||
|
||||
testImplementation 'org.mockito:mockito-inline:3.12.4'
|
||||
testImplementation 'org.mockito:mockito-inline:5.2.0'
|
||||
}
|
||||
|
||||
tasks.withType(JavaCompile).configureEach {
|
||||
@@ -195,7 +198,7 @@ compileJava {
|
||||
options.compilerArgs << "-parameters"
|
||||
}
|
||||
|
||||
task writeVersion {
|
||||
task writeVersion {
|
||||
def propsFile = file("src/main/resources/version.properties")
|
||||
def props = new Properties()
|
||||
props.setProperty("version", version)
|
||||
@@ -225,6 +228,6 @@ tasks.named("test") {
|
||||
useJUnitPlatform()
|
||||
}
|
||||
|
||||
task printVersion {
|
||||
task printVersion {
|
||||
println project.version
|
||||
}
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
apiVersion: v2
|
||||
appVersion: 0.26.2
|
||||
appVersion: 0.27.0
|
||||
description: locally hosted web application that allows you to perform various operations
|
||||
on PDF files
|
||||
home: https://github.com/Stirling-Tools/Stirling-PDF
|
||||
|
||||
@@ -62,8 +62,10 @@ spec:
|
||||
imagePullPolicy: {{ .Values.image.pullPolicy }}
|
||||
securityContext:
|
||||
{{- toYaml .Values.containerSecurityContext | nindent 10 }}
|
||||
{{- if .Values.envs }}
|
||||
env:
|
||||
- name: SYSTEM_ROOTURIPATH
|
||||
value: {{ .Values.rootPath}}
|
||||
{{- if .Values.envs }}
|
||||
{{ toYaml .Values.envs | indent 8 }}
|
||||
{{- end }}
|
||||
{{- if .Values.extraArgs }}
|
||||
@@ -75,13 +77,13 @@ spec:
|
||||
containerPort: 8080
|
||||
livenessProbe:
|
||||
httpGet:
|
||||
path: /
|
||||
path: {{ .Values.rootPath}}
|
||||
port: http
|
||||
{{ toYaml .Values.probes.livenessHttpGetConfig | indent 12 }}
|
||||
{{ toYaml .Values.probes.liveness | indent 10 }}
|
||||
readinessProbe:
|
||||
httpGet:
|
||||
path: /
|
||||
path: {{ .Values.rootPath}}
|
||||
port: http
|
||||
{{ toYaml .Values.probes.readinessHttpGetConfig | indent 12 }}
|
||||
{{ toYaml .Values.probes.readiness | indent 10 }}
|
||||
|
||||
@@ -15,6 +15,9 @@ secret:
|
||||
commonLabels: {}
|
||||
# team_name: dev
|
||||
|
||||
# rootpath for the application
|
||||
rootPath: /
|
||||
|
||||
envs: []
|
||||
# - name: UI_APP_NAME
|
||||
# value: "Stirling PDF"
|
||||
@@ -24,8 +27,6 @@ envs: []
|
||||
# value: "Stirling PDF"
|
||||
# - name: ALLOW_GOOGLE_VISIBILITY
|
||||
# value: "true"
|
||||
# - name: APP_ROOT_PATH
|
||||
# value: "/"
|
||||
# - name: APP_LOCALE
|
||||
# value: "en_GB"
|
||||
|
||||
|
||||
@@ -92,10 +92,10 @@ Feature: API Validation
|
||||
| threshold | 90 |
|
||||
| whitePercent | 99.9 |
|
||||
When I send the API request to the endpoint "/api/v1/misc/remove-blanks"
|
||||
Then the response content type should be "application/pdf"
|
||||
Then the response content type should be "application/octet-stream"
|
||||
And the response file should have extension ".zip"
|
||||
And the response ZIP should contain 1 files
|
||||
And the response file should have size greater than 0
|
||||
And the response PDF should contain 0 pages
|
||||
And the response status code should be 200
|
||||
|
||||
@positive @flatten
|
||||
Scenario: Flatten PDF
|
||||
|
||||
@@ -25,6 +25,11 @@ ignore = [
|
||||
'text',
|
||||
]
|
||||
|
||||
[da_DK]
|
||||
ignore = [
|
||||
'language.direction',
|
||||
]
|
||||
|
||||
[de_DE]
|
||||
ignore = [
|
||||
'AddStampRequest.alphabet',
|
||||
@@ -87,6 +92,11 @@ ignore = [
|
||||
'watermark.type.2',
|
||||
]
|
||||
|
||||
[ga_IE]
|
||||
ignore = [
|
||||
'language.direction',
|
||||
]
|
||||
|
||||
[hi_IN]
|
||||
ignore = [
|
||||
'language.direction',
|
||||
@@ -230,6 +240,14 @@ ignore = [
|
||||
'language.direction',
|
||||
]
|
||||
|
||||
[vi_VN]
|
||||
ignore = [
|
||||
'language.direction',
|
||||
'pipeline.title',
|
||||
'pipelineOptions.pipelineHeader',
|
||||
'showJS.tags',
|
||||
]
|
||||
|
||||
[zh_CN]
|
||||
ignore = [
|
||||
'language.direction',
|
||||
|
||||
@@ -45,7 +45,6 @@ public class SPdfApplication {
|
||||
// Check if the BROWSER_OPEN environment variable is set to true
|
||||
String browserOpenEnv = env.getProperty("BROWSER_OPEN");
|
||||
boolean browserOpen = browserOpenEnv != null && "true".equalsIgnoreCase(browserOpenEnv);
|
||||
|
||||
if (browserOpen) {
|
||||
try {
|
||||
String url = "http://localhost:" + getNonStaticPort();
|
||||
@@ -79,13 +78,14 @@ public class SPdfApplication {
|
||||
|
||||
// custom javs settings file
|
||||
if (Files.exists(Paths.get("configs/custom_settings.yml"))) {
|
||||
String existing = propertyFiles.getOrDefault("spring.config.additional-location", "");
|
||||
if (!existing.isEmpty()) {
|
||||
existing += ",";
|
||||
String existingLocation =
|
||||
propertyFiles.getOrDefault("spring.config.additional-location", "");
|
||||
if (!existingLocation.isEmpty()) {
|
||||
existingLocation += ",";
|
||||
}
|
||||
propertyFiles.put(
|
||||
"spring.config.additional-location",
|
||||
existing + "file:configs/custom_settings.yml");
|
||||
existingLocation + "file:configs/custom_settings.yml");
|
||||
} else {
|
||||
logger.warn("Custom configuration file 'configs/custom_settings.yml' does not exist.");
|
||||
}
|
||||
|
||||
@@ -32,25 +32,25 @@ public class CleanUrlInterceptor implements HandlerInterceptor {
|
||||
String queryString = request.getQueryString();
|
||||
if (queryString != null && !queryString.isEmpty()) {
|
||||
String requestURI = request.getRequestURI();
|
||||
Map<String, String> parameters = new HashMap<>();
|
||||
Map<String, String> allowedParameters = new HashMap<>();
|
||||
|
||||
// Keep only the allowed parameters
|
||||
String[] queryParameters = queryString.split("&");
|
||||
for (String param : queryParameters) {
|
||||
String[] keyValue = param.split("=");
|
||||
if (keyValue.length != 2) {
|
||||
String[] keyValuePair = param.split("=");
|
||||
if (keyValuePair.length != 2) {
|
||||
continue;
|
||||
}
|
||||
if (ALLOWED_PARAMS.contains(keyValue[0])) {
|
||||
parameters.put(keyValue[0], keyValue[1]);
|
||||
if (ALLOWED_PARAMS.contains(keyValuePair[0])) {
|
||||
allowedParameters.put(keyValuePair[0], keyValuePair[1]);
|
||||
}
|
||||
}
|
||||
|
||||
// If there are any parameters that are not allowed
|
||||
if (parameters.size() != queryParameters.length) {
|
||||
if (allowedParameters.size() != queryParameters.length) {
|
||||
// Construct new query string
|
||||
StringBuilder newQueryString = new StringBuilder();
|
||||
for (Map.Entry<String, String> entry : parameters.entrySet()) {
|
||||
for (Map.Entry<String, String> entry : allowedParameters.entrySet()) {
|
||||
if (newQueryString.length() > 0) {
|
||||
newQueryString.append("&");
|
||||
}
|
||||
|
||||
@@ -137,6 +137,7 @@ public class EndpointConfiguration {
|
||||
addEndpointToGroup("Other", "auto-rename");
|
||||
addEndpointToGroup("Other", "get-info-on-pdf");
|
||||
addEndpointToGroup("Other", "show-javascript");
|
||||
addEndpointToGroup("Other", "remove-image-pdf");
|
||||
|
||||
// CLI
|
||||
addEndpointToGroup("CLI", "compress-pdf");
|
||||
@@ -221,6 +222,7 @@ public class EndpointConfiguration {
|
||||
addEndpointToGroup("Java", "split-pdf-by-sections");
|
||||
addEndpointToGroup("Java", REMOVE_BLANKS);
|
||||
addEndpointToGroup("Java", "pdf-to-text");
|
||||
addEndpointToGroup("Java", "remove-image-pdf");
|
||||
|
||||
// Javascript
|
||||
addEndpointToGroup("Javascript", "pdf-organizer");
|
||||
|
||||
@@ -179,11 +179,12 @@ public class DatabaseBackupHelper implements DatabaseBackupInterface {
|
||||
}
|
||||
|
||||
private boolean executeDatabaseScript(Path scriptPath) {
|
||||
try (Connection conn = DriverManager.getConnection(url, "sa", "");
|
||||
Statement stmt = conn.createStatement()) {
|
||||
String query = "RUNSCRIPT from ?;";
|
||||
|
||||
String query = "RUNSCRIPT from '" + scriptPath.toString() + "';";
|
||||
stmt.execute(query);
|
||||
try (Connection conn = DriverManager.getConnection(url, "sa", "");
|
||||
PreparedStatement stmt = conn.prepareStatement(query)) {
|
||||
stmt.setString(1, scriptPath.toString());
|
||||
stmt.execute();
|
||||
log.info("Database import completed: {}", scriptPath);
|
||||
return true;
|
||||
} catch (SQLException e) {
|
||||
|
||||
@@ -0,0 +1,82 @@
|
||||
package stirling.software.SPDF.controller.api;
|
||||
|
||||
import java.io.ByteArrayOutputStream;
|
||||
import java.io.IOException;
|
||||
|
||||
import org.apache.pdfbox.Loader;
|
||||
import org.apache.pdfbox.pdmodel.PDDocument;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.http.ResponseEntity;
|
||||
import org.springframework.web.bind.annotation.*;
|
||||
import org.springframework.web.multipart.MultipartFile;
|
||||
|
||||
import io.swagger.v3.oas.annotations.Operation;
|
||||
|
||||
import stirling.software.SPDF.model.api.PDFFile;
|
||||
import stirling.software.SPDF.service.PdfImageRemovalService;
|
||||
import stirling.software.SPDF.utils.WebResponseUtils;
|
||||
|
||||
/**
|
||||
* Controller class for handling PDF image removal requests. Provides an endpoint to remove images
|
||||
* from a PDF file to reduce its size.
|
||||
*/
|
||||
@RestController
|
||||
@RequestMapping("/api/v1/general")
|
||||
public class PdfImageRemovalController {
|
||||
|
||||
// Service for removing images from PDFs
|
||||
@Autowired private PdfImageRemovalService pdfImageRemovalService;
|
||||
|
||||
/**
|
||||
* Constructor for dependency injection of PdfImageRemovalService.
|
||||
*
|
||||
* @param pdfImageRemovalService The service used for removing images from PDFs.
|
||||
*/
|
||||
public PdfImageRemovalController(PdfImageRemovalService pdfImageRemovalService) {
|
||||
this.pdfImageRemovalService = pdfImageRemovalService;
|
||||
}
|
||||
|
||||
/**
|
||||
* Endpoint to remove images from a PDF file.
|
||||
*
|
||||
* <p>This method processes the uploaded PDF file, removes all images, and returns the modified
|
||||
* PDF file with a new name indicating that images were removed.
|
||||
*
|
||||
* @param file The PDF file with images to be removed.
|
||||
* @return ResponseEntity containing the modified PDF file as byte array with appropriate
|
||||
* content type and filename.
|
||||
* @throws IOException If an error occurs while processing the PDF file.
|
||||
*/
|
||||
@PostMapping(consumes = "multipart/form-data", value = "/remove-image-pdf")
|
||||
@Operation(
|
||||
summary = "Remove images from file to reduce the file size.",
|
||||
description =
|
||||
"This endpoint remove images from file to reduce the file size.Input:PDF Output:PDF Type:MISO")
|
||||
public ResponseEntity<byte[]> removeImages(@ModelAttribute PDFFile file) throws IOException {
|
||||
|
||||
MultipartFile pdf = file.getFileInput();
|
||||
|
||||
// Convert the MultipartFile to a byte array
|
||||
byte[] pdfBytes = pdf.getBytes();
|
||||
|
||||
// Load the PDF document from the byte array
|
||||
PDDocument document = Loader.loadPDF(pdfBytes);
|
||||
|
||||
// Remove images from the PDF document using the service
|
||||
PDDocument modifiedDocument = pdfImageRemovalService.removeImagesFromPdf(document);
|
||||
|
||||
// Create a ByteArrayOutputStream to hold the modified PDF data
|
||||
ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
|
||||
|
||||
// Save the modified PDF document to the output stream
|
||||
modifiedDocument.save(outputStream);
|
||||
modifiedDocument.close();
|
||||
|
||||
// Generate a new filename for the modified PDF
|
||||
String mergedFileName =
|
||||
pdf.getOriginalFilename().replaceFirst("[.][^.]+$", "") + "_removed_images.pdf";
|
||||
|
||||
// Convert the byte array to a web response and return it
|
||||
return WebResponseUtils.bytesToWebResponse(outputStream.toByteArray(), mergedFileName);
|
||||
}
|
||||
}
|
||||
@@ -39,6 +39,12 @@ public class ConvertWebsiteToPDF {
|
||||
if (!URL.matches("^https?://.*") || !GeneralUtils.isValidURL(URL)) {
|
||||
throw new IllegalArgumentException("Invalid URL format provided.");
|
||||
}
|
||||
|
||||
// validate the URL is reachable
|
||||
if (!GeneralUtils.isURLReachable(URL)) {
|
||||
throw new IllegalArgumentException("URL is not reachable, please provide a valid URL.");
|
||||
}
|
||||
|
||||
Path tempOutputFile = null;
|
||||
byte[] pdfBytes;
|
||||
try {
|
||||
|
||||
@@ -1,12 +1,12 @@
|
||||
package stirling.software.SPDF.controller.api.misc;
|
||||
|
||||
import java.awt.image.BufferedImage;
|
||||
import java.io.ByteArrayOutputStream;
|
||||
import java.io.IOException;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collections;
|
||||
import java.util.List;
|
||||
import java.util.stream.Collectors;
|
||||
import java.util.stream.IntStream;
|
||||
import java.util.zip.ZipEntry;
|
||||
import java.util.zip.ZipOutputStream;
|
||||
|
||||
import org.apache.pdfbox.Loader;
|
||||
import org.apache.pdfbox.pdmodel.PDDocument;
|
||||
@@ -17,6 +17,7 @@ import org.apache.pdfbox.text.PDFTextStripper;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
import org.springframework.http.HttpStatus;
|
||||
import org.springframework.http.MediaType;
|
||||
import org.springframework.http.ResponseEntity;
|
||||
import org.springframework.web.bind.annotation.ModelAttribute;
|
||||
import org.springframework.web.bind.annotation.PostMapping;
|
||||
@@ -50,31 +51,31 @@ public class BlankPageController {
|
||||
int threshold = request.getThreshold();
|
||||
float whitePercent = request.getWhitePercent();
|
||||
|
||||
PDDocument document = null;
|
||||
try {
|
||||
document = Loader.loadPDF(inputFile.getBytes());
|
||||
try (PDDocument document = Loader.loadPDF(inputFile.getBytes())) {
|
||||
PDPageTree pages = document.getDocumentCatalog().getPages();
|
||||
PDFTextStripper textStripper = new PDFTextStripper();
|
||||
|
||||
List<Integer> pagesToKeepIndex = new ArrayList<>();
|
||||
List<PDPage> nonBlankPages = new ArrayList<>();
|
||||
List<PDPage> blankPages = new ArrayList<>();
|
||||
int pageIndex = 0;
|
||||
|
||||
PDFRenderer pdfRenderer = new PDFRenderer(document);
|
||||
pdfRenderer.setSubsamplingAllowed(true);
|
||||
for (PDPage page : pages) {
|
||||
logger.info("checking page " + pageIndex);
|
||||
logger.info("checking page {}", pageIndex);
|
||||
textStripper.setStartPage(pageIndex + 1);
|
||||
textStripper.setEndPage(pageIndex + 1);
|
||||
String pageText = textStripper.getText(document);
|
||||
boolean hasText = !pageText.trim().isEmpty();
|
||||
|
||||
Boolean blank = true;
|
||||
boolean blank = true;
|
||||
if (hasText) {
|
||||
logger.info("page " + pageIndex + " has text, not blank");
|
||||
logger.info("page {} has text, not blank", pageIndex);
|
||||
blank = false;
|
||||
} else {
|
||||
boolean hasImages = PdfUtils.hasImagesOnPage(page);
|
||||
if (hasImages) {
|
||||
logger.info("page " + pageIndex + " has image, running blank detection");
|
||||
logger.info("page {} has image, running blank detection", pageIndex);
|
||||
// Render image and save as temp file
|
||||
BufferedImage image = pdfRenderer.renderImageWithDPI(pageIndex, 30);
|
||||
blank = isBlankImage(image, threshold, whitePercent, threshold);
|
||||
@@ -82,34 +83,57 @@ public class BlankPageController {
|
||||
}
|
||||
|
||||
if (blank) {
|
||||
logger.info("Skipping, Image was blank for page #" + pageIndex);
|
||||
logger.info("Skipping, Image was blank for page #{}", pageIndex);
|
||||
blankPages.add(page);
|
||||
} else {
|
||||
logger.info("page " + pageIndex + " has image which is not blank");
|
||||
pagesToKeepIndex.add(pageIndex);
|
||||
logger.info("page {} has image which is not blank", pageIndex);
|
||||
nonBlankPages.add(page);
|
||||
}
|
||||
|
||||
pageIndex++;
|
||||
}
|
||||
// Remove pages not present in pagesToKeepIndex
|
||||
List<Integer> pageIndices =
|
||||
IntStream.range(0, pages.getCount()).boxed().collect(Collectors.toList());
|
||||
Collections.reverse(pageIndices); // Reverse to prevent index shifting during removal
|
||||
for (Integer i : pageIndices) {
|
||||
if (!pagesToKeepIndex.contains(i)) {
|
||||
pages.remove(i);
|
||||
}
|
||||
|
||||
ByteArrayOutputStream baos = new ByteArrayOutputStream();
|
||||
ZipOutputStream zos = new ZipOutputStream(baos);
|
||||
|
||||
String filename =
|
||||
Filenames.toSimpleFileName(inputFile.getOriginalFilename())
|
||||
.replaceFirst("[.][^.]+$", "");
|
||||
|
||||
if (!nonBlankPages.isEmpty()) {
|
||||
createZipEntry(zos, nonBlankPages, filename + "_nonBlankPages.pdf");
|
||||
} else {
|
||||
createZipEntry(zos, blankPages, filename + "_allBlankPages.pdf");
|
||||
}
|
||||
|
||||
return WebResponseUtils.pdfDocToWebResponse(
|
||||
document,
|
||||
Filenames.toSimpleFileName(inputFile.getOriginalFilename())
|
||||
.replaceFirst("[.][^.]+$", "")
|
||||
+ "_blanksRemoved.pdf");
|
||||
if (!nonBlankPages.isEmpty() && !blankPages.isEmpty()) {
|
||||
createZipEntry(zos, blankPages, filename + "_blankPages.pdf");
|
||||
}
|
||||
|
||||
zos.close();
|
||||
|
||||
logger.info("Returning ZIP file: {}", filename + "_processed.zip");
|
||||
return WebResponseUtils.boasToWebResponse(
|
||||
baos, filename + "_processed.zip", MediaType.APPLICATION_OCTET_STREAM);
|
||||
|
||||
} catch (IOException e) {
|
||||
logger.error("exception", e);
|
||||
return new ResponseEntity<>(HttpStatus.INTERNAL_SERVER_ERROR);
|
||||
} finally {
|
||||
if (document != null) document.close();
|
||||
}
|
||||
}
|
||||
|
||||
public void createZipEntry(ZipOutputStream zos, List<PDPage> pages, String entryName)
|
||||
throws IOException {
|
||||
try (PDDocument document = new PDDocument()) {
|
||||
|
||||
for (PDPage page : pages) {
|
||||
document.addPage(page);
|
||||
}
|
||||
|
||||
ZipEntry zipEntry = new ZipEntry(entryName);
|
||||
zos.putNextEntry(zipEntry);
|
||||
document.save(zos);
|
||||
zos.closeEntry();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -1,13 +1,16 @@
|
||||
package stirling.software.SPDF.controller.api.misc;
|
||||
|
||||
import java.awt.Graphics2D;
|
||||
import java.awt.Image;
|
||||
import java.awt.*;
|
||||
import java.awt.image.BufferedImage;
|
||||
import java.awt.image.RenderedImage;
|
||||
import java.io.ByteArrayOutputStream;
|
||||
import java.io.IOException;
|
||||
import java.util.HashSet;
|
||||
import java.util.Set;
|
||||
import java.util.concurrent.ExecutionException;
|
||||
import java.util.concurrent.ExecutorService;
|
||||
import java.util.concurrent.Executors;
|
||||
import java.util.concurrent.Future;
|
||||
import java.util.zip.Deflater;
|
||||
import java.util.zip.ZipEntry;
|
||||
import java.util.zip.ZipOutputStream;
|
||||
@@ -47,16 +50,19 @@ public class ExtractImagesController {
|
||||
@Operation(
|
||||
summary = "Extract images from a PDF file",
|
||||
description =
|
||||
"This endpoint extracts images from a given PDF file and returns them in a zip file. Users can specify the output image format. Input:PDF Output:IMAGE/ZIP Type:SIMO")
|
||||
"This endpoint extracts images from a given PDF file and returns them in a zip file. Users can specify the output image format. Input: PDF Output: IMAGE/ZIP Type: SIMO")
|
||||
public ResponseEntity<byte[]> extractImages(@ModelAttribute PDFWithImageFormatRequest request)
|
||||
throws IOException {
|
||||
throws IOException, InterruptedException, ExecutionException {
|
||||
MultipartFile file = request.getFileInput();
|
||||
String format = request.getFormat();
|
||||
|
||||
System.out.println(
|
||||
System.currentTimeMillis() + "file=" + file.getName() + ", format=" + format);
|
||||
System.currentTimeMillis() + " file=" + file.getName() + ", format=" + format);
|
||||
PDDocument document = Loader.loadPDF(file.getBytes());
|
||||
|
||||
// Determine if multithreading should be used based on PDF size or number of pages
|
||||
boolean useMultithreading = shouldUseMultithreading(file, document);
|
||||
|
||||
// Create ByteArrayOutputStream to write zip file to byte array
|
||||
ByteArrayOutputStream baos = new ByteArrayOutputStream();
|
||||
|
||||
@@ -66,71 +72,51 @@ public class ExtractImagesController {
|
||||
// Set compression level
|
||||
zos.setLevel(Deflater.BEST_COMPRESSION);
|
||||
|
||||
int imageIndex = 1;
|
||||
String filename =
|
||||
Filenames.toSimpleFileName(file.getOriginalFilename())
|
||||
.replaceFirst("[.][^.]+$", "");
|
||||
int pageNum = 0;
|
||||
Set<Integer> processedImages = new HashSet<>();
|
||||
// Iterate over each page
|
||||
for (PDPage page : document.getPages()) {
|
||||
++pageNum;
|
||||
// Extract images from page
|
||||
for (COSName name : page.getResources().getXObjectNames()) {
|
||||
if (page.getResources().isImageXObject(name)) {
|
||||
PDImageXObject image = (PDImageXObject) page.getResources().getXObject(name);
|
||||
int imageHash = image.hashCode();
|
||||
if (processedImages.contains(imageHash)) {
|
||||
continue; // Skip already processed images
|
||||
}
|
||||
processedImages.add(imageHash);
|
||||
|
||||
// Convert image to desired format
|
||||
RenderedImage renderedImage = image.getImage();
|
||||
BufferedImage bufferedImage = null;
|
||||
if ("png".equalsIgnoreCase(format)) {
|
||||
bufferedImage =
|
||||
new BufferedImage(
|
||||
renderedImage.getWidth(),
|
||||
renderedImage.getHeight(),
|
||||
BufferedImage.TYPE_INT_ARGB);
|
||||
} else if ("jpeg".equalsIgnoreCase(format) || "jpg".equalsIgnoreCase(format)) {
|
||||
bufferedImage =
|
||||
new BufferedImage(
|
||||
renderedImage.getWidth(),
|
||||
renderedImage.getHeight(),
|
||||
BufferedImage.TYPE_INT_RGB);
|
||||
} else if ("gif".equalsIgnoreCase(format)) {
|
||||
bufferedImage =
|
||||
new BufferedImage(
|
||||
renderedImage.getWidth(),
|
||||
renderedImage.getHeight(),
|
||||
BufferedImage.TYPE_BYTE_INDEXED);
|
||||
}
|
||||
if (useMultithreading) {
|
||||
// Executor service to handle multithreading
|
||||
ExecutorService executor =
|
||||
Executors.newFixedThreadPool(Runtime.getRuntime().availableProcessors());
|
||||
Set<Future<Void>> futures = new HashSet<>();
|
||||
|
||||
// Write image to zip file
|
||||
String imageName =
|
||||
filename + "_" + imageIndex + " (Page " + pageNum + ")." + format;
|
||||
ZipEntry zipEntry = new ZipEntry(imageName);
|
||||
zos.putNextEntry(zipEntry);
|
||||
// Iterate over each page
|
||||
for (int pgNum = 0; pgNum < document.getPages().getCount(); pgNum++) {
|
||||
PDPage page = document.getPage(pgNum);
|
||||
int pageNum = document.getPages().indexOf(page) + 1;
|
||||
// Submit a task for processing each page
|
||||
Future<Void> future =
|
||||
executor.submit(
|
||||
() -> {
|
||||
extractImagesFromPage(
|
||||
page, format, filename, pageNum, processedImages, zos);
|
||||
return null;
|
||||
});
|
||||
|
||||
Graphics2D g = bufferedImage.createGraphics();
|
||||
g.drawImage((Image) renderedImage, 0, 0, null);
|
||||
g.dispose();
|
||||
// Write image bytes to zip file
|
||||
ByteArrayOutputStream imageBaos = new ByteArrayOutputStream();
|
||||
ImageIO.write(bufferedImage, format, imageBaos);
|
||||
zos.write(imageBaos.toByteArray());
|
||||
futures.add(future);
|
||||
}
|
||||
|
||||
zos.closeEntry();
|
||||
imageIndex++;
|
||||
}
|
||||
// Wait for all tasks to complete
|
||||
for (Future<Void> future : futures) {
|
||||
future.get();
|
||||
}
|
||||
|
||||
// Close executor service
|
||||
executor.shutdown();
|
||||
} else {
|
||||
// Single-threaded extraction
|
||||
for (int pgNum = 0; pgNum < document.getPages().getCount(); pgNum++) {
|
||||
PDPage page = document.getPage(pgNum);
|
||||
extractImagesFromPage(page, format, filename, pgNum + 1, processedImages, zos);
|
||||
}
|
||||
}
|
||||
|
||||
// Close ZipOutputStream and PDDocument
|
||||
zos.close();
|
||||
// Close PDDocument and ZipOutputStream
|
||||
document.close();
|
||||
zos.close();
|
||||
|
||||
// Create ByteArrayResource from byte array
|
||||
byte[] zipContents = baos.toByteArray();
|
||||
@@ -138,4 +124,69 @@ public class ExtractImagesController {
|
||||
return WebResponseUtils.boasToWebResponse(
|
||||
baos, filename + "_extracted-images.zip", MediaType.APPLICATION_OCTET_STREAM);
|
||||
}
|
||||
|
||||
private boolean shouldUseMultithreading(MultipartFile file, PDDocument document) {
|
||||
// Criteria: Use multithreading if file size > 10MB or number of pages > 20
|
||||
long fileSizeInMB = file.getSize() / (1024 * 1024);
|
||||
int numberOfPages = document.getPages().getCount();
|
||||
return fileSizeInMB > 10 || numberOfPages > 20;
|
||||
}
|
||||
|
||||
private void extractImagesFromPage(
|
||||
PDPage page,
|
||||
String format,
|
||||
String filename,
|
||||
int pageNum,
|
||||
Set<Integer> processedImages,
|
||||
ZipOutputStream zos)
|
||||
throws IOException {
|
||||
for (COSName name : page.getResources().getXObjectNames()) {
|
||||
if (page.getResources().isImageXObject(name)) {
|
||||
PDImageXObject image = (PDImageXObject) page.getResources().getXObject(name);
|
||||
int imageHash = image.hashCode();
|
||||
synchronized (processedImages) {
|
||||
if (processedImages.contains(imageHash)) {
|
||||
continue; // Skip already processed images
|
||||
}
|
||||
processedImages.add(imageHash);
|
||||
}
|
||||
|
||||
RenderedImage renderedImage = image.getImage();
|
||||
|
||||
// Convert to standard RGB colorspace if needed
|
||||
BufferedImage bufferedImage = convertToRGB(renderedImage, format);
|
||||
|
||||
// Write image to zip file
|
||||
String imageName = filename + "_" + imageHash + " (Page " + pageNum + ")." + format;
|
||||
synchronized (zos) {
|
||||
zos.putNextEntry(new ZipEntry(imageName));
|
||||
ByteArrayOutputStream imageBaos = new ByteArrayOutputStream();
|
||||
ImageIO.write(bufferedImage, format, imageBaos);
|
||||
zos.write(imageBaos.toByteArray());
|
||||
zos.closeEntry();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private BufferedImage convertToRGB(RenderedImage renderedImage, String format) {
|
||||
int width = renderedImage.getWidth();
|
||||
int height = renderedImage.getHeight();
|
||||
BufferedImage rgbImage;
|
||||
|
||||
if ("png".equalsIgnoreCase(format)) {
|
||||
rgbImage = new BufferedImage(width, height, BufferedImage.TYPE_INT_ARGB);
|
||||
} else if ("jpeg".equalsIgnoreCase(format) || "jpg".equalsIgnoreCase(format)) {
|
||||
rgbImage = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);
|
||||
} else if ("gif".equalsIgnoreCase(format)) {
|
||||
rgbImage = new BufferedImage(width, height, BufferedImage.TYPE_BYTE_INDEXED);
|
||||
} else {
|
||||
rgbImage = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);
|
||||
}
|
||||
|
||||
Graphics2D g = rgbImage.createGraphics();
|
||||
g.drawImage((Image) renderedImage, 0, 0, null);
|
||||
g.dispose();
|
||||
return rgbImage;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,21 +1,14 @@
|
||||
package stirling.software.SPDF.controller.api.security;
|
||||
|
||||
import java.awt.Color;
|
||||
import java.awt.image.BufferedImage;
|
||||
import java.io.ByteArrayOutputStream;
|
||||
import java.io.IOException;
|
||||
import java.util.List;
|
||||
|
||||
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.PDPageContentStream.AppendMode;
|
||||
import org.apache.pdfbox.pdmodel.common.PDRectangle;
|
||||
import org.apache.pdfbox.pdmodel.graphics.image.LosslessFactory;
|
||||
import org.apache.pdfbox.pdmodel.graphics.image.PDImageXObject;
|
||||
import org.apache.pdfbox.rendering.ImageType;
|
||||
import org.apache.pdfbox.rendering.PDFRenderer;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
import org.springframework.http.ResponseEntity;
|
||||
@@ -32,6 +25,7 @@ import io.swagger.v3.oas.annotations.tags.Tag;
|
||||
import stirling.software.SPDF.model.PDFText;
|
||||
import stirling.software.SPDF.model.api.security.RedactPdfRequest;
|
||||
import stirling.software.SPDF.pdf.TextFinder;
|
||||
import stirling.software.SPDF.utils.PdfUtils;
|
||||
import stirling.software.SPDF.utils.WebResponseUtils;
|
||||
|
||||
@RestController
|
||||
@@ -81,22 +75,9 @@ public class RedactController {
|
||||
}
|
||||
|
||||
if (convertPDFToImage) {
|
||||
PDDocument imageDocument = new PDDocument();
|
||||
PDFRenderer pdfRenderer = new PDFRenderer(document);
|
||||
pdfRenderer.setSubsamplingAllowed(true);
|
||||
for (int page = 0; page < document.getNumberOfPages(); ++page) {
|
||||
BufferedImage bim = pdfRenderer.renderImageWithDPI(page, 300, ImageType.RGB);
|
||||
PDPage newPage = new PDPage(new PDRectangle(bim.getWidth(), bim.getHeight()));
|
||||
imageDocument.addPage(newPage);
|
||||
PDImageXObject pdImage = LosslessFactory.createFromImage(imageDocument, bim);
|
||||
PDPageContentStream contentStream =
|
||||
new PDPageContentStream(
|
||||
imageDocument, newPage, AppendMode.APPEND, true, true);
|
||||
contentStream.drawImage(pdImage, 0, 0);
|
||||
contentStream.close();
|
||||
}
|
||||
PDDocument convertedPdf = PdfUtils.convertPdfToPdfImage(document);
|
||||
document.close();
|
||||
document = imageDocument;
|
||||
document = convertedPdf;
|
||||
}
|
||||
|
||||
ByteArrayOutputStream baos = new ByteArrayOutputStream();
|
||||
|
||||
@@ -36,6 +36,7 @@ import io.swagger.v3.oas.annotations.Operation;
|
||||
import io.swagger.v3.oas.annotations.tags.Tag;
|
||||
|
||||
import stirling.software.SPDF.model.api.security.AddWatermarkRequest;
|
||||
import stirling.software.SPDF.utils.PdfUtils;
|
||||
import stirling.software.SPDF.utils.WebResponseUtils;
|
||||
|
||||
@RestController
|
||||
@@ -60,6 +61,7 @@ public class WatermarkController {
|
||||
float opacity = request.getOpacity();
|
||||
int widthSpacer = request.getWidthSpacer();
|
||||
int heightSpacer = request.getHeightSpacer();
|
||||
boolean convertPdfToImage = request.isConvertPDFToImage();
|
||||
|
||||
// Load the input PDF
|
||||
PDDocument document = Loader.loadPDF(pdfFile.getBytes());
|
||||
@@ -104,6 +106,12 @@ public class WatermarkController {
|
||||
contentStream.close();
|
||||
}
|
||||
|
||||
if (convertPdfToImage) {
|
||||
PDDocument convertedPdf = PdfUtils.convertPdfToPdfImage(document);
|
||||
document.close();
|
||||
document = convertedPdf;
|
||||
}
|
||||
|
||||
return WebResponseUtils.pdfDocToWebResponse(
|
||||
document,
|
||||
Filenames.toSimpleFileName(pdfFile.getOriginalFilename())
|
||||
|
||||
@@ -310,4 +310,11 @@ public class GeneralWebController {
|
||||
model.addAttribute("currentPage", "auto-split-pdf");
|
||||
return "auto-split-pdf";
|
||||
}
|
||||
|
||||
@GetMapping("/remove-image-pdf")
|
||||
@Hidden
|
||||
public String removeImagePdfForm(Model model) {
|
||||
model.addAttribute("currentPage", "remove-image-pdf");
|
||||
return "remove-image-pdf";
|
||||
}
|
||||
}
|
||||
|
||||
@@ -360,6 +360,8 @@ public class ApplicationProperties {
|
||||
+ useAsUsername
|
||||
+ ", provider="
|
||||
+ provider
|
||||
+ ", client="
|
||||
+ client
|
||||
+ ", scopes="
|
||||
+ scopes
|
||||
+ "]";
|
||||
|
||||
@@ -44,4 +44,7 @@ public class AddWatermarkRequest extends PDFFile {
|
||||
|
||||
@Schema(description = "The height spacer between watermark elements", example = "50")
|
||||
private int heightSpacer;
|
||||
|
||||
@Schema(description = "Convert the redacted PDF to an image", defaultValue = "false")
|
||||
private boolean convertPDFToImage;
|
||||
}
|
||||
|
||||
@@ -0,0 +1,41 @@
|
||||
package stirling.software.SPDF.service;
|
||||
|
||||
import java.io.IOException;
|
||||
|
||||
import org.apache.pdfbox.cos.COSName;
|
||||
import org.apache.pdfbox.pdmodel.PDDocument;
|
||||
import org.apache.pdfbox.pdmodel.PDPage;
|
||||
import org.apache.pdfbox.pdmodel.PDResources;
|
||||
import org.apache.pdfbox.pdmodel.graphics.PDXObject;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
/** Service class responsible for removing image objects from a PDF document. */
|
||||
@Service
|
||||
public class PdfImageRemovalService {
|
||||
|
||||
/**
|
||||
* Removes all image objects from the provided PDF document.
|
||||
*
|
||||
* This method iterates over each page in the document and removes any image XObjects found
|
||||
* in the page's resources.
|
||||
*
|
||||
* @param document The PDF document from which images will be removed.
|
||||
* @return The modified PDF document with images removed.
|
||||
* @throws IOException If an error occurs while processing the PDF document.
|
||||
*/
|
||||
public PDDocument removeImagesFromPdf(PDDocument document) throws IOException {
|
||||
// Iterate over each page in the PDF document
|
||||
for (PDPage page : document.getPages()) {
|
||||
PDResources resources = page.getResources();
|
||||
// Iterate over all XObject names in the page's resources
|
||||
for (COSName name : resources.getXObjectNames()) {
|
||||
// Check if the XObject is an image
|
||||
if (resources.isImageXObject(name)) {
|
||||
// Remove the image XObject by setting it to null
|
||||
resources.put(name, (PDXObject) null);
|
||||
}
|
||||
}
|
||||
}
|
||||
return document;
|
||||
}
|
||||
}
|
||||
@@ -13,6 +13,8 @@ import java.nio.file.SimpleFileVisitor;
|
||||
import java.nio.file.attribute.BasicFileAttributes;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import java.net.URL;
|
||||
import java.net.HttpURLConnection;
|
||||
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
@@ -71,6 +73,21 @@ public class GeneralUtils {
|
||||
} catch (MalformedURLException e) {
|
||||
return false;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
public static boolean isURLReachable(String urlStr) {
|
||||
try {
|
||||
URL url = new URL(urlStr);
|
||||
HttpURLConnection connection = (HttpURLConnection) url.openConnection();
|
||||
connection.setRequestMethod("HEAD");
|
||||
int responseCode = connection.getResponseCode();
|
||||
return (200 <= responseCode && responseCode <= 399);
|
||||
} catch (MalformedURLException e) {
|
||||
return false;
|
||||
} catch (IOException e) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
public static File multipartToFile(MultipartFile multipart) throws IOException {
|
||||
@@ -95,19 +112,16 @@ public class GeneralUtils {
|
||||
sizeStr = sizeStr.replace(",", ".").replace(" ", "");
|
||||
try {
|
||||
if (sizeStr.endsWith("KB")) {
|
||||
return (long)
|
||||
(Double.parseDouble(sizeStr.substring(0, sizeStr.length() - 2)) * 1024);
|
||||
return (long) (Double.parseDouble(sizeStr.substring(0, sizeStr.length() - 2)) * 1024);
|
||||
} else if (sizeStr.endsWith("MB")) {
|
||||
return (long)
|
||||
(Double.parseDouble(sizeStr.substring(0, sizeStr.length() - 2))
|
||||
* 1024
|
||||
* 1024);
|
||||
return (long) (Double.parseDouble(sizeStr.substring(0, sizeStr.length() - 2))
|
||||
* 1024
|
||||
* 1024);
|
||||
} else if (sizeStr.endsWith("GB")) {
|
||||
return (long)
|
||||
(Double.parseDouble(sizeStr.substring(0, sizeStr.length() - 2))
|
||||
* 1024
|
||||
* 1024
|
||||
* 1024);
|
||||
return (long) (Double.parseDouble(sizeStr.substring(0, sizeStr.length() - 2))
|
||||
* 1024
|
||||
* 1024
|
||||
* 1024);
|
||||
} else if (sizeStr.endsWith("B")) {
|
||||
return Long.parseLong(sizeStr.substring(0, sizeStr.length() - 1));
|
||||
} else {
|
||||
@@ -170,13 +184,15 @@ public class GeneralUtils {
|
||||
|
||||
int n = 0;
|
||||
while (true) {
|
||||
// Replace 'n' with the current value of n, correctly handling numbers before 'n'
|
||||
// Replace 'n' with the current value of n, correctly handling numbers before
|
||||
// 'n'
|
||||
String sanitizedExpression = insertMultiplicationBeforeN(expression, n);
|
||||
Double result = evaluator.evaluate(sanitizedExpression);
|
||||
|
||||
// Check if the result is null or not within bounds
|
||||
if (result == null || result <= 0 || result.intValue() > maxValue) {
|
||||
if (n != 0) break;
|
||||
if (n != 0)
|
||||
break;
|
||||
} else {
|
||||
results.add(result.intValue());
|
||||
}
|
||||
|
||||
@@ -341,6 +341,30 @@ public class PdfUtils {
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Converts a given Pdf file to PDF-Image.
|
||||
*
|
||||
* @param document to be converted. Note: the caller is responsible for closing the document
|
||||
* @return converted document to PDF-Image
|
||||
* @throws IOException if conversion fails
|
||||
*/
|
||||
public static PDDocument convertPdfToPdfImage(PDDocument document) throws IOException {
|
||||
PDDocument imageDocument = new PDDocument();
|
||||
PDFRenderer pdfRenderer = new PDFRenderer(document);
|
||||
pdfRenderer.setSubsamplingAllowed(true);
|
||||
for (int page = 0; page < document.getNumberOfPages(); ++page) {
|
||||
BufferedImage bim = pdfRenderer.renderImageWithDPI(page, 300, ImageType.RGB);
|
||||
PDPage newPage = new PDPage(new PDRectangle(bim.getWidth(), bim.getHeight()));
|
||||
imageDocument.addPage(newPage);
|
||||
PDImageXObject pdImage = LosslessFactory.createFromImage(imageDocument, bim);
|
||||
PDPageContentStream contentStream =
|
||||
new PDPageContentStream(imageDocument, newPage, AppendMode.APPEND, true, true);
|
||||
contentStream.drawImage(pdImage, 0, 0);
|
||||
contentStream.close();
|
||||
}
|
||||
return imageDocument;
|
||||
}
|
||||
|
||||
private static BufferedImage prepareImageForPdfToImage(
|
||||
int maxWidth, int height, String imageType) {
|
||||
BufferedImage combined;
|
||||
|
||||
@@ -461,6 +461,10 @@ home.BookToPDF.title=Book to PDF
|
||||
home.BookToPDF.desc=Converts Books/Comics formats to PDF using calibre
|
||||
BookToPDF.tags=Book,Comic,Calibre,Convert,manga,amazon,kindle
|
||||
|
||||
home.removeImagePdf.title=Remove image
|
||||
home.removeImagePdf.desc=Remove image from PDF to reduce file size
|
||||
removeImagePdf.tags=Remove Image,Page operations,Back end,server side
|
||||
|
||||
|
||||
###########################
|
||||
# #
|
||||
@@ -945,6 +949,7 @@ watermark.selectText.6=heightSpacer (مسافة بين كل علامة مائي
|
||||
watermark.selectText.7=التعتيم (0٪ - 100٪):
|
||||
watermark.selectText.8=Watermark Type:
|
||||
watermark.selectText.9=Watermark Image:
|
||||
watermark.selectText.10=Convert PDF to PDF-Image
|
||||
watermark.submit=إضافة علامة مائية
|
||||
watermark.type.1=نص
|
||||
watermark.type.2=صورة
|
||||
@@ -1125,3 +1130,9 @@ error.copyStack=Copy Stack Trace
|
||||
error.githubSubmit=GitHub - Submit a ticket
|
||||
error.discordSubmit=Discord - Submit Support post
|
||||
|
||||
|
||||
#remove-image
|
||||
removeImage.title=Remove image
|
||||
removeImage.header=Remove image
|
||||
removeImage.removeImage=Remove image
|
||||
removeImage.submit=Remove image
|
||||
|
||||
@@ -461,6 +461,10 @@ home.BookToPDF.title=Книга към PDF
|
||||
home.BookToPDF.desc=Преобразува формати на книги/комикси в PDF с помощта на calibre
|
||||
BookToPDF.tags=Книга,комикс,calibre,конвертиране,манга,Amazon,Kindle
|
||||
|
||||
home.removeImagePdf.title=Remove image
|
||||
home.removeImagePdf.desc=Remove image from PDF to reduce file size
|
||||
removeImagePdf.tags=Remove Image,Page operations,Back end,server side
|
||||
|
||||
|
||||
###########################
|
||||
# #
|
||||
@@ -945,6 +949,7 @@ watermark.selectText.6=дължинаSpacer (Разстояние между в
|
||||
watermark.selectText.7=Непрозрачност (0% - 100%):
|
||||
watermark.selectText.8=Тип воден знак:
|
||||
watermark.selectText.9=Изображение за воден знак:
|
||||
watermark.selectText.10=Convert PDF to PDF-Image
|
||||
watermark.submit=Добавяне на воден знак
|
||||
watermark.type.1=Текст
|
||||
watermark.type.2=Изображение
|
||||
@@ -1125,3 +1130,9 @@ error.copyStack=Копиране на проследяване на стека
|
||||
error.githubSubmit=GitHub - Изпратете запитване
|
||||
error.discordSubmit=Discord - Изпратете запитване за поддръжка
|
||||
|
||||
|
||||
#remove-image
|
||||
removeImage.title=Remove image
|
||||
removeImage.header=Remove image
|
||||
removeImage.removeImage=Remove image
|
||||
removeImage.submit=Remove image
|
||||
|
||||
@@ -461,6 +461,10 @@ home.BookToPDF.title=Book to PDF
|
||||
home.BookToPDF.desc=Converts Books/Comics formats to PDF using calibre
|
||||
BookToPDF.tags=Book,Comic,Calibre,Convert,manga,amazon,kindle
|
||||
|
||||
home.removeImagePdf.title=Remove image
|
||||
home.removeImagePdf.desc=Remove image from PDF to reduce file size
|
||||
removeImagePdf.tags=Remove Image,Page operations,Back end,server side
|
||||
|
||||
|
||||
###########################
|
||||
# #
|
||||
@@ -945,6 +949,7 @@ watermark.selectText.6=separació d'alçada (Espai vertical entre cada Marca d'A
|
||||
watermark.selectText.7=Opacitat (0% - 100%):
|
||||
watermark.selectText.8=Watermark Type:
|
||||
watermark.selectText.9=Watermark Image:
|
||||
watermark.selectText.10=Convert PDF to PDF-Image
|
||||
watermark.submit=Afegir Marca d'Aigua
|
||||
watermark.type.1=Text
|
||||
watermark.type.2=Image
|
||||
@@ -1125,3 +1130,9 @@ error.copyStack=Copy Stack Trace
|
||||
error.githubSubmit=GitHub - Submit a ticket
|
||||
error.discordSubmit=Discord - Submit Support post
|
||||
|
||||
|
||||
#remove-image
|
||||
removeImage.title=Remove image
|
||||
removeImage.header=Remove image
|
||||
removeImage.removeImage=Remove image
|
||||
removeImage.submit=Remove image
|
||||
|
||||
@@ -461,6 +461,10 @@ home.BookToPDF.title=Kniha na PDF
|
||||
home.BookToPDF.desc=Převádí formáty knih/komiksů do PDF pomocí calibre
|
||||
BookToPDF.tags=Kniha,Komiks,Calibre,Konvertovat,manga,amazon,kindle,epub,mobi,azw3,docx,rtf,txt,html,lit,fb2,pdb,lrf
|
||||
|
||||
home.removeImagePdf.title=Remove image
|
||||
home.removeImagePdf.desc=Remove image from PDF to reduce file size
|
||||
removeImagePdf.tags=Remove Image,Page operations,Back end,server side
|
||||
|
||||
|
||||
###########################
|
||||
# #
|
||||
@@ -945,6 +949,7 @@ watermark.selectText.6=Výška mezery (Mezera mezi každým vodoznakem svisle):
|
||||
watermark.selectText.7=Průhlednost (0% - 100%):
|
||||
watermark.selectText.8=Typ vodoznaku:
|
||||
watermark.selectText.9=Obrázek vodoznaku:
|
||||
watermark.selectText.10=Convert PDF to PDF-Image
|
||||
watermark.submit=Přidat vodoznak
|
||||
watermark.type.1=Text
|
||||
watermark.type.2=Obrázek
|
||||
@@ -1125,3 +1130,9 @@ error.copyStack=Kopírovat stopu zásobníku
|
||||
error.githubSubmit=GitHub - Odeslat požadavek
|
||||
error.discordSubmit=Discord - Odeslat příspěvek podpory
|
||||
|
||||
|
||||
#remove-image
|
||||
removeImage.title=Remove image
|
||||
removeImage.header=Remove image
|
||||
removeImage.removeImage=Remove image
|
||||
removeImage.submit=Remove image
|
||||
|
||||
1138
src/main/resources/messages_da_DK.properties
Normal file
1138
src/main/resources/messages_da_DK.properties
Normal file
File diff suppressed because it is too large
Load Diff
@@ -461,6 +461,10 @@ home.BookToPDF.title=Buch als PDF
|
||||
home.BookToPDF.desc=Konvertiert Buch-/Comic-Formate mithilfe von Calibre in PDF
|
||||
BookToPDF.tags=buch,comic,calibre,convert,manga,amazon,kindle
|
||||
|
||||
home.removeImagePdf.title=Remove image
|
||||
home.removeImagePdf.desc=Remove image from PDF to reduce file size
|
||||
removeImagePdf.tags=Remove Image,Page operations,Back end,server side
|
||||
|
||||
|
||||
###########################
|
||||
# #
|
||||
@@ -945,6 +949,7 @@ watermark.selectText.6=höheSpacer (vertikaler Abstand zwischen den einzelnen Wa
|
||||
watermark.selectText.7=Deckkraft (0% - 100 %):
|
||||
watermark.selectText.8=Wasserzeichen Typ:
|
||||
watermark.selectText.9=Wasserzeichen-Bild:
|
||||
watermark.selectText.10=Convert PDF to PDF-Image
|
||||
watermark.submit=Wasserzeichen hinzufügen
|
||||
watermark.type.1=Text
|
||||
watermark.type.2=Bild
|
||||
@@ -1125,3 +1130,9 @@ error.copyStack=Stack-Trace kopieren
|
||||
error.githubSubmit=GitHub - Ein Ticket einreichen
|
||||
error.discordSubmit=Discord - Unterstützungsbeitrag einreichen
|
||||
|
||||
|
||||
#remove-image
|
||||
removeImage.title=Remove image
|
||||
removeImage.header=Remove image
|
||||
removeImage.removeImage=Remove image
|
||||
removeImage.submit=Remove image
|
||||
|
||||
@@ -461,6 +461,10 @@ home.BookToPDF.title=Book σε PDF
|
||||
home.BookToPDF.desc=Μετατρέπει τις μορφές Books/Comics σε PDF χρησιμοποιώντας calibre
|
||||
BookToPDF.tags=Book,Comic,Calibre,Convert,manga,amazon,kindle
|
||||
|
||||
home.removeImagePdf.title=Remove image
|
||||
home.removeImagePdf.desc=Remove image from PDF to reduce file size
|
||||
removeImagePdf.tags=Remove Image,Page operations,Back end,server side
|
||||
|
||||
|
||||
###########################
|
||||
# #
|
||||
@@ -945,6 +949,7 @@ watermark.selectText.6=heightSpacer (Κενό μεταξύ κάθε υδατογ
|
||||
watermark.selectText.7=Αδιαφάνεια (Opacity) (0% - 100%):
|
||||
watermark.selectText.8=Τύπος Υδατογραφήματος:
|
||||
watermark.selectText.9=Εικόνα Υδατογραφήματος:
|
||||
watermark.selectText.10=Convert PDF to PDF-Image
|
||||
watermark.submit=Προσθήκη Υδατογραφήματος
|
||||
watermark.type.1=Κείμενο
|
||||
watermark.type.2=Εικόνα
|
||||
@@ -1125,3 +1130,9 @@ error.copyStack=Αντιγραφή Stack Trace
|
||||
error.githubSubmit=GitHub - Υποβάλετε ένα ticket
|
||||
error.discordSubmit=Discord - Υποβάλετε ένα Support post
|
||||
|
||||
|
||||
#remove-image
|
||||
removeImage.title=Remove image
|
||||
removeImage.header=Remove image
|
||||
removeImage.removeImage=Remove image
|
||||
removeImage.submit=Remove image
|
||||
|
||||
@@ -461,6 +461,10 @@ home.BookToPDF.title=Book to PDF
|
||||
home.BookToPDF.desc=Converts Books/Comics formats to PDF using calibre
|
||||
BookToPDF.tags=Book,Comic,Calibre,Convert,manga,amazon,kindle,epub,mobi,azw3,docx,rtf,txt,html,lit,fb2,pdb,lrf
|
||||
|
||||
home.removeImagePdf.title=Remove image
|
||||
home.removeImagePdf.desc=Remove image from PDF to reduce file size
|
||||
removeImagePdf.tags=Remove Image,Page operations,Back end,server side
|
||||
|
||||
|
||||
###########################
|
||||
# #
|
||||
@@ -945,6 +949,7 @@ watermark.selectText.6=heightSpacer (Space between each watermark vertically):
|
||||
watermark.selectText.7=Opacity (0% - 100%):
|
||||
watermark.selectText.8=Watermark Type:
|
||||
watermark.selectText.9=Watermark Image:
|
||||
watermark.selectText.10=Convert PDF to PDF-Image
|
||||
watermark.submit=Add Watermark
|
||||
watermark.type.1=Text
|
||||
watermark.type.2=Image
|
||||
@@ -1125,3 +1130,9 @@ error.copyStack=Copy Stack Trace
|
||||
error.githubSubmit=GitHub - Submit a ticket
|
||||
error.discordSubmit=Discord - Submit Support post
|
||||
|
||||
|
||||
#remove-image
|
||||
removeImage.title=Remove image
|
||||
removeImage.header=Remove image
|
||||
removeImage.removeImage=Remove image
|
||||
removeImage.submit=Remove image
|
||||
@@ -461,6 +461,10 @@ home.BookToPDF.title=Book to PDF
|
||||
home.BookToPDF.desc=Converts Books/Comics formats to PDF using calibre
|
||||
BookToPDF.tags=Book,Comic,Calibre,Convert,manga,amazon,kindle
|
||||
|
||||
home.removeImagePdf.title=Remove image
|
||||
home.removeImagePdf.desc=Remove image from PDF to reduce file size
|
||||
removeImagePdf.tags=Remove Image,Page operations,Back end,server side
|
||||
|
||||
|
||||
###########################
|
||||
# #
|
||||
@@ -945,6 +949,7 @@ watermark.selectText.6=heightSpacer (Space between each watermark vertically):
|
||||
watermark.selectText.7=Opacity (0% - 100%):
|
||||
watermark.selectText.8=Watermark Type:
|
||||
watermark.selectText.9=Watermark Image:
|
||||
watermark.selectText.10=Convert PDF to PDF-Image
|
||||
watermark.submit=Add Watermark
|
||||
watermark.type.1=Text
|
||||
watermark.type.2=Image
|
||||
@@ -1125,3 +1130,9 @@ error.copyStack=Copy Stack Trace
|
||||
error.githubSubmit=GitHub - Submit a ticket
|
||||
error.discordSubmit=Discord - Submit Support post
|
||||
|
||||
|
||||
#remove-image
|
||||
removeImage.title=Remove image
|
||||
removeImage.header=Remove image
|
||||
removeImage.removeImage=Remove image
|
||||
removeImage.submit=Remove image
|
||||
|
||||
@@ -60,11 +60,11 @@ deleteCurrentUserMessage=No puede eliminar el usuario que tiene la sesión actua
|
||||
deleteUsernameExistsMessage=El usuario no existe y no puede eliminarse.
|
||||
downgradeCurrentUserMessage=No se puede degradar el rol del usuario actual
|
||||
downgradeCurrentUserLongMessage=No se puede degradar el rol del usuario actual. Por lo tanto, el usuario actual no se mostrará.
|
||||
userAlreadyExistsOAuthMessage=The user already exists as an OAuth2 user.
|
||||
userAlreadyExistsWebMessage=The user already exists as an web user.
|
||||
userAlreadyExistsOAuthMessage=La usuario ya existe como usuario de OAuth2.
|
||||
userAlreadyExistsWebMessage=El usuario ya existe como usuario web.
|
||||
error=Error
|
||||
oops=Ups!
|
||||
help=Help
|
||||
help=Ayuda
|
||||
goHomepage=Ir a la página principal
|
||||
joinDiscord=Únase a nuestro servidor Discord
|
||||
seeDockerHub=Ver Docker Hub
|
||||
@@ -86,7 +86,7 @@ pipeline.defaultOption=Personalizar
|
||||
pipeline.submitButton=Enviar
|
||||
pipeline.help=Ayuda de Canalización
|
||||
pipeline.scanHelp=Ayuda de escaneado de carpetas
|
||||
pipeline.deletePrompt=Are you sure you want to delete pipeline
|
||||
pipeline.deletePrompt=¿Estás segura de que quieres eliminar la canalización?
|
||||
|
||||
######################
|
||||
# Pipeline Options #
|
||||
@@ -107,18 +107,18 @@ pipelineOptions.validateButton=Validar
|
||||
#############
|
||||
# NAVBAR #
|
||||
#############
|
||||
navbar.favorite=Favorites
|
||||
navbar.favorite=Favoritos
|
||||
navbar.darkmode=Modo oscuro
|
||||
navbar.language=Languages
|
||||
navbar.language=Idiomas
|
||||
navbar.settings=Configuración
|
||||
navbar.allTools=Tools
|
||||
navbar.multiTool=Multi Tools
|
||||
navbar.allTools=Herramientas
|
||||
navbar.multiTool=Multi herramientas
|
||||
navbar.sections.organize=Organize
|
||||
navbar.sections.convertTo=Convert to PDF
|
||||
navbar.sections.convertFrom=Convert from PDF
|
||||
navbar.sections.security=Sign & Security
|
||||
navbar.sections.advance=Advanced
|
||||
navbar.sections.edit=View & Edit
|
||||
navbar.sections.convertTo=Convertir a PDF
|
||||
navbar.sections.convertFrom=Convertir desde PDF
|
||||
navbar.sections.security=Señalización y seguridad
|
||||
navbar.sections.advance=Avanzado
|
||||
navbar.sections.edit=Ver y Editar
|
||||
|
||||
#############
|
||||
# SETTINGS #
|
||||
@@ -175,8 +175,8 @@ adminUserSettings.header=Configuración de control de usuario administrador
|
||||
adminUserSettings.admin=Administrador
|
||||
adminUserSettings.user=Usuario
|
||||
adminUserSettings.addUser=Añadir Nuevo Usuario
|
||||
adminUserSettings.deleteUser=Delete User
|
||||
adminUserSettings.confirmDeleteUser=Should the user be deleted?
|
||||
adminUserSettings.deleteUser=Eliminar Usuario
|
||||
adminUserSettings.confirmDeleteUser=¿Se debe eliminar al usuario?
|
||||
adminUserSettings.usernameInfo=El nombre de usuario solo puede contener letras, números y los siguientes caracteres especiales @._+- o debe ser una dirección de correo electrónico válida.
|
||||
adminUserSettings.roles=Roles
|
||||
adminUserSettings.role=Rol
|
||||
@@ -189,24 +189,24 @@ adminUserSettings.internalApiUser=Usuario interno de API
|
||||
adminUserSettings.forceChange=Forzar usuario a cambiar usuario/contraseña en el acceso
|
||||
adminUserSettings.submit=Guardar Usuario
|
||||
adminUserSettings.changeUserRole=Cambiar rol de usuario
|
||||
adminUserSettings.authenticated=Authenticated
|
||||
adminUserSettings.authenticated=Autenticado
|
||||
|
||||
|
||||
database.title=Database Import/Export
|
||||
database.header=Database Import/Export
|
||||
database.fileName=File Name
|
||||
database.creationDate=Creation Date
|
||||
database.fileSize=File Size
|
||||
database.deleteBackupFile=Delete Backup File
|
||||
database.importBackupFile=Import Backup File
|
||||
database.downloadBackupFile=Download Backup File
|
||||
database.info_1=When importing data, it is crucial to ensure the correct structure. If you are unsure of what you are doing, seek advice and support from a professional. An error in the structure can cause application malfunctions, up to and including the complete inability to run the application.
|
||||
database.info_2=The file name does not matter when uploading. It will be renamed afterward to follow the format backup_user_yyyyMMddHHmm.sql, ensuring a consistent naming convention.
|
||||
database.submit=Import Backup
|
||||
database.importIntoDatabaseSuccessed=Import into database successed
|
||||
database.fileNotFound=File not Found
|
||||
database.fileNullOrEmpty=File must not be null or empty
|
||||
database.failedImportFile=Failed Import File
|
||||
database.title=Base de Datos Importar/Exportar
|
||||
database.header=Base de Datos Importar/Exportar
|
||||
database.fileName=Nombre de Archivo
|
||||
database.creationDate=Fecha de creación
|
||||
database.fileSize=Tamaño de archivo
|
||||
database.deleteBackupFile=Eliminar archivo de copia de seguridad
|
||||
database.importBackupFile=Importar archivo de copia de seguridad
|
||||
database.downloadBackupFile=Descargar archivo de copia de seguridad
|
||||
database.info_1=Al importar datos, es fundamental garantizar la estructura correcta. Si no está seguro de lo que está haciendo, busque consejo y apoyo de un profesional. Un error en la estructura puede causar un mal funcionamiento de la aplicación, incluyendo la imposibilidad total de ejecutar la aplicación.
|
||||
database.info_2=El nombre del archivo no importa al cargarlo. Posteriormente se le cambiará el nombre para que siga el formato backup_user_yyyyMMddHHmm.sql, lo que garantiza una convención de nomenclatura coherente.
|
||||
database.submit=Importar Backup
|
||||
database.importIntoDatabaseSuccessed=Importación a la base de datos ha sido exitosa
|
||||
database.fileNotFound=Archivo no encontrado
|
||||
database.fileNullOrEmpty=El archivo no debe ser nulo o vacío.
|
||||
database.failedImportFile=Archivo de importación fallido
|
||||
|
||||
#############
|
||||
# HOME-PAGE #
|
||||
@@ -353,8 +353,8 @@ home.certSign.title=Firmar con certificado
|
||||
home.certSign.desc=Firmar un PDF con un Certificado/Clave (PEM/P12)
|
||||
certSign.tags=autentificar,PEM,P12,oficial,encriptar
|
||||
|
||||
home.removeCertSign.title=Remove Certificate Sign
|
||||
home.removeCertSign.desc=Remove certificate signature from PDF
|
||||
home.removeCertSign.title=Quitar signo de certificado
|
||||
home.removeCertSign.desc=Eliminar firma de certificado de PDF
|
||||
removeCertSign.tags=authenticate,PEM,P12,official,decrypt
|
||||
|
||||
home.pageLayout.title=Diseño de varias páginas
|
||||
@@ -461,6 +461,10 @@ home.BookToPDF.title=Libro a PDF
|
||||
home.BookToPDF.desc=Convierte formatos de Libro/Cómic a PDF usando Calibre
|
||||
BookToPDF.tags=Libro,Cómic,Calibre,Convertir,manga,Amazon,Kindle
|
||||
|
||||
home.removeImagePdf.title=Remove image
|
||||
home.removeImagePdf.desc=Remove image from PDF to reduce file size
|
||||
removeImagePdf.tags=Remove Image,Page operations,Back end,server side
|
||||
|
||||
|
||||
###########################
|
||||
# #
|
||||
@@ -476,13 +480,13 @@ login.invalid=Nombre de usuario o contraseña erróneos.
|
||||
login.locked=Su cuenta se ha bloqueado.
|
||||
login.signinTitle=Por favor, inicie sesión
|
||||
login.ssoSignIn=Iniciar sesión a través del inicio de sesión único
|
||||
login.oauth2AutoCreateDisabled=Usuario DE creación automática de OAUTH2 DESACTIVADO
|
||||
login.oauth2RequestNotFound=Authorization request not found
|
||||
login.oauth2InvalidUserInfoResponse=Invalid User Info Response
|
||||
login.oauth2AutoCreateDisabled=Usuario de creación automática de OAUTH2 DESACTIVADO
|
||||
login.oauth2RequestNotFound=Solicitud de autorización no encontrada
|
||||
login.oauth2InvalidUserInfoResponse=Respuesta de información de usuario no válida
|
||||
login.oauth2invalidRequest=Invalid Request
|
||||
login.oauth2AccessDenied=Access Denied
|
||||
login.oauth2InvalidTokenResponse=Invalid Token Response
|
||||
login.oauth2InvalidIdToken=Invalid Id Token
|
||||
login.oauth2InvalidTokenResponse=Respuesta de token no válida
|
||||
login.oauth2InvalidIdToken=Token de identificación no válido
|
||||
|
||||
|
||||
#auto-redact
|
||||
@@ -681,10 +685,10 @@ certSign.submit=Firmar PDF
|
||||
|
||||
|
||||
#removeCertSign
|
||||
removeCertSign.title=Remove Certificate Signature
|
||||
removeCertSign.header=Remove the digital certificate from the PDF
|
||||
removeCertSign.selectPDF=Select a PDF file:
|
||||
removeCertSign.submit=Remove Signature
|
||||
removeCertSign.title=Eliminar firma del certificado
|
||||
removeCertSign.header=Quitar el certificado digital del PDF
|
||||
removeCertSign.selectPDF=Seleccione un archivo PDF:
|
||||
removeCertSign.submit=Eliminar firma
|
||||
|
||||
|
||||
#removeBlanks
|
||||
@@ -706,8 +710,8 @@ removeAnnotations.submit=Eliminar
|
||||
#compare
|
||||
compare.title=Comparar
|
||||
compare.header=Comparar archivos PDF
|
||||
compare.highlightColor.1=Highlight Color 1:
|
||||
compare.highlightColor.2=Highlight Color 2:
|
||||
compare.highlightColor.1=Color resaltado 1:
|
||||
compare.highlightColor.2=Color resaltado 2:
|
||||
compare.document.1=Documento 1
|
||||
compare.document.2=Documento 2
|
||||
compare.submit=Comparar
|
||||
@@ -744,7 +748,7 @@ repair.submit=Reparar
|
||||
#flatten
|
||||
flatten.title=Aplanar
|
||||
flatten.header=Acoplar archivos PDF
|
||||
flatten.flattenOnlyForms=Flatten only forms
|
||||
flatten.flattenOnlyForms=Aplanar sólo formularios
|
||||
flatten.submit=Aplanar
|
||||
|
||||
|
||||
@@ -792,7 +796,7 @@ extractImages.submit=Extraer
|
||||
fileToPDF.title=Archivo a PDF
|
||||
fileToPDF.header=Convertir cualquier archivo a PDF
|
||||
fileToPDF.credit=Este servicio usa LibreOffice y Unoconv para la conversión de archivos
|
||||
fileToPDF.supportedFileTypesInfo=Supported File types
|
||||
fileToPDF.supportedFileTypesInfo=Tipos de archivos admitidos
|
||||
fileToPDF.supportedFileTypes=Los tipos de archivo soportados deben incluir los indicados a continuación; sin embargo, para una completa y acutualizada lista de formatos soportados, por favor consulte la documentación de LibreOffice
|
||||
fileToPDF.submit=Convertir a PDF
|
||||
|
||||
@@ -945,6 +949,7 @@ watermark.selectText.6=Alto (Espacio entre cada marca de agua verticalmente):
|
||||
watermark.selectText.7=Opacidad (0% - 100%):
|
||||
watermark.selectText.8=Tipo de marca de agua:
|
||||
watermark.selectText.9=Imagen de marca de agua:
|
||||
watermark.selectText.10=Convert PDF to PDF-Image
|
||||
watermark.submit=Añadir marca de agua
|
||||
watermark.type.1=Texto
|
||||
watermark.type.2=Imagen
|
||||
@@ -1000,8 +1005,8 @@ pdfToPDFA.header=PDF a PDF/A
|
||||
pdfToPDFA.credit=Este servicio usa OCRmyPDF para la conversión a PDF/A
|
||||
pdfToPDFA.submit=Convertir
|
||||
pdfToPDFA.tip=Actualmente no funciona para múltiples entrada a la vez
|
||||
pdfToPDFA.outputFormat=Output format
|
||||
pdfToPDFA.pdfWithDigitalSignature=The PDF contains a digital signature. This will be removed in the next step.
|
||||
pdfToPDFA.outputFormat=Formato de salida
|
||||
pdfToPDFA.pdfWithDigitalSignature=El PDF contiene una firma digital. Esto se eliminará en el siguiente paso.
|
||||
|
||||
|
||||
#PDFToWord
|
||||
@@ -1103,13 +1108,13 @@ licenses.version=Versión
|
||||
licenses.license=Licencia
|
||||
|
||||
#survey
|
||||
survey.nav=Survey
|
||||
survey.title=Stirling-PDF Survey
|
||||
survey.description=Stirling-PDF has no tracking so we want to hear from our users to improve Stirling-PDF!
|
||||
survey.please=Please consider taking our survey!
|
||||
survey.disabled=(Survey popup will be disabled in following updates but available at foot of page)
|
||||
survey.button=Take Survey
|
||||
survey.dontShowAgain=Don't show again
|
||||
survey.nav=Encuesta
|
||||
survey.title=Encuesta Stirling-PDF
|
||||
survey.description=Stirling-PDF no tiene seguimiento, por lo que queremos escuchar a nuestros usuarios para mejorar Stirling-PDF.
|
||||
survey.please=¡Considere realizar nuestra encuesta!
|
||||
survey.disabled=(La ventana emergente de la encuesta se desactivará en las siguientes actualizaciones, pero estará disponible al pie de la página.)
|
||||
survey.button=Realizar encuesta
|
||||
survey.dontShowAgain=No volver a mostrar
|
||||
|
||||
|
||||
#error
|
||||
@@ -1125,3 +1130,9 @@ error.copyStack=Mostrar seguimiento de pila
|
||||
error.githubSubmit=GitHub - Enviar un ticket
|
||||
error.discordSubmit=Discord - Enviar mensaje de soporte
|
||||
|
||||
|
||||
#remove-image
|
||||
removeImage.title=Remove image
|
||||
removeImage.header=Remove image
|
||||
removeImage.removeImage=Remove image
|
||||
removeImage.submit=Remove image
|
||||
|
||||
@@ -461,6 +461,10 @@ home.BookToPDF.title=Book to PDF
|
||||
home.BookToPDF.desc=Converts Books/Comics formats to PDF using calibre
|
||||
BookToPDF.tags=Book,Comic,Calibre,Convert,manga,amazon,kindle
|
||||
|
||||
home.removeImagePdf.title=Remove image
|
||||
home.removeImagePdf.desc=Remove image from PDF to reduce file size
|
||||
removeImagePdf.tags=Remove Image,Page operations,Back end,server side
|
||||
|
||||
|
||||
###########################
|
||||
# #
|
||||
@@ -945,6 +949,7 @@ watermark.selectText.6=Altuera (ur-marka bakoitzaren arteko espazioa bertikalean
|
||||
watermark.selectText.7=Opakutasuna (0% - 100%):
|
||||
watermark.selectText.8=Watermark Type:
|
||||
watermark.selectText.9=Watermark Image:
|
||||
watermark.selectText.10=Convert PDF to PDF-Image
|
||||
watermark.submit=Gehitu ur-marka
|
||||
watermark.type.1=Text
|
||||
watermark.type.2=Image
|
||||
@@ -1125,3 +1130,9 @@ error.copyStack=Copy Stack Trace
|
||||
error.githubSubmit=GitHub - Submit a ticket
|
||||
error.discordSubmit=Discord - Submit Support post
|
||||
|
||||
|
||||
#remove-image
|
||||
removeImage.title=Remove image
|
||||
removeImage.header=Remove image
|
||||
removeImage.removeImage=Remove image
|
||||
removeImage.submit=Remove image
|
||||
|
||||
@@ -461,6 +461,10 @@ home.BookToPDF.title=eBook vers PDF
|
||||
home.BookToPDF.desc=Convertit les formats de livres/bandes dessinées en PDF à l'aide de calibre
|
||||
BookToPDF.tags=Book,Comic,Calibre,Convert,manga,amazon,kindle
|
||||
|
||||
home.removeImagePdf.title=Remove image
|
||||
home.removeImagePdf.desc=Remove image from PDF to reduce file size
|
||||
removeImagePdf.tags=Remove Image,Page operations,Back end,server side
|
||||
|
||||
|
||||
###########################
|
||||
# #
|
||||
@@ -945,6 +949,7 @@ watermark.selectText.6=heightSpacer (espace entre chaque filigrane verticalement
|
||||
watermark.selectText.7=Opacité (de 0% à 100%)
|
||||
watermark.selectText.8=Type de filigrane
|
||||
watermark.selectText.9=Image du filigrane
|
||||
watermark.selectText.10=Convert PDF to PDF-Image
|
||||
watermark.submit=Ajouter un filigrane
|
||||
watermark.type.1=Text
|
||||
watermark.type.2=Image
|
||||
@@ -1125,3 +1130,9 @@ error.copyStack=Copier la Stack Trace
|
||||
error.githubSubmit=GitHub - Créer un ticket
|
||||
error.discordSubmit=Discord - Poster un message de demande d’assistance
|
||||
|
||||
|
||||
#remove-image
|
||||
removeImage.title=Remove image
|
||||
removeImage.header=Remove image
|
||||
removeImage.removeImage=Remove image
|
||||
removeImage.submit=Remove image
|
||||
|
||||
1138
src/main/resources/messages_ga_IE.properties
Normal file
1138
src/main/resources/messages_ga_IE.properties
Normal file
File diff suppressed because it is too large
Load Diff
@@ -461,6 +461,10 @@ home.BookToPDF.title=Book to PDF
|
||||
home.BookToPDF.desc=Converts Books/Comics formats to PDF using calibre
|
||||
BookToPDF.tags=Book,Comic,Calibre,Convert,manga,amazon,kindle
|
||||
|
||||
home.removeImagePdf.title=Remove image
|
||||
home.removeImagePdf.desc=Remove image from PDF to reduce file size
|
||||
removeImagePdf.tags=Remove Image,Page operations,Back end,server side
|
||||
|
||||
|
||||
###########################
|
||||
# #
|
||||
@@ -945,6 +949,7 @@ watermark.selectText.6=ऊंचाई स्पेसर (प्रत्ये
|
||||
watermark.selectText.7=अपारदर्शिता (0% - 100%):
|
||||
watermark.selectText.8=वॉटरमार्क प्रकार:
|
||||
watermark.selectText.9=वॉटरमार्क छवि:
|
||||
watermark.selectText.10=Convert PDF to PDF-Image
|
||||
watermark.submit=वॉटरमार्क जोड़ें
|
||||
watermark.type.1=Text
|
||||
watermark.type.2=Image
|
||||
@@ -1125,3 +1130,9 @@ error.copyStack=Copy Stack Trace
|
||||
error.githubSubmit=GitHub - Submit a ticket
|
||||
error.discordSubmit=Discord - Submit Support post
|
||||
|
||||
|
||||
#remove-image
|
||||
removeImage.title=Remove image
|
||||
removeImage.header=Remove image
|
||||
removeImage.removeImage=Remove image
|
||||
removeImage.submit=Remove image
|
||||
|
||||
@@ -461,6 +461,10 @@ home.BookToPDF.title=Book u PDF
|
||||
home.BookToPDF.desc=Pretvara format knjige/stripa u PDF format pomoću calibre
|
||||
BookToPDF.tags=Knjiga,Strip,Calibre,Pretvori,manga,amazon,kindle
|
||||
|
||||
home.removeImagePdf.title=Remove image
|
||||
home.removeImagePdf.desc=Remove image from PDF to reduce file size
|
||||
removeImagePdf.tags=Remove Image,Page operations,Back end,server side
|
||||
|
||||
|
||||
###########################
|
||||
# #
|
||||
@@ -945,6 +949,7 @@ watermark.selectText.6=Visina razmaka (Razmak između svakog vodenog žiga okomi
|
||||
watermark.selectText.7=Neprozirnost (0% - 100%):
|
||||
watermark.selectText.8=Vrsta vodenog žiga:
|
||||
watermark.selectText.9=Slika vodenog žiga:
|
||||
watermark.selectText.10=Convert PDF to PDF-Image
|
||||
watermark.submit=Dodaj vodeni žig
|
||||
watermark.type.1=Tekst
|
||||
watermark.type.2=Slika
|
||||
@@ -1125,3 +1130,9 @@ error.copyStack=Kopiraj Stack Trace
|
||||
error.githubSubmit=GitHub - Pošaljite ticket
|
||||
error.discordSubmit=Discord - Pošalji objavu podrške
|
||||
|
||||
|
||||
#remove-image
|
||||
removeImage.title=Remove image
|
||||
removeImage.header=Remove image
|
||||
removeImage.removeImage=Remove image
|
||||
removeImage.submit=Remove image
|
||||
|
||||
@@ -461,6 +461,10 @@ home.BookToPDF.title=Book to PDF
|
||||
home.BookToPDF.desc=Converts Books/Comics formats to PDF using calibre
|
||||
BookToPDF.tags=Book,Comic,Calibre,Convert,manga,amazon,kindle
|
||||
|
||||
home.removeImagePdf.title=Remove image
|
||||
home.removeImagePdf.desc=Remove image from PDF to reduce file size
|
||||
removeImagePdf.tags=Remove Image,Page operations,Back end,server side
|
||||
|
||||
|
||||
###########################
|
||||
# #
|
||||
@@ -945,6 +949,7 @@ watermark.selectText.6=heightSpacer (Hely a vízjelek között függőlegesen):
|
||||
watermark.selectText.7=Átlátszóság (0% - 100%):
|
||||
watermark.selectText.8=Vízjel típusa:
|
||||
watermark.selectText.9=Vízjel képe:
|
||||
watermark.selectText.10=Convert PDF to PDF-Image
|
||||
watermark.submit=Vízjel hozzáadása
|
||||
watermark.type.1=Text
|
||||
watermark.type.2=Image
|
||||
@@ -1125,3 +1130,9 @@ error.copyStack=Copy Stack Trace
|
||||
error.githubSubmit=GitHub - Submit a ticket
|
||||
error.discordSubmit=Discord - Submit Support post
|
||||
|
||||
|
||||
#remove-image
|
||||
removeImage.title=Remove image
|
||||
removeImage.header=Remove image
|
||||
removeImage.removeImage=Remove image
|
||||
removeImage.submit=Remove image
|
||||
|
||||
@@ -461,6 +461,10 @@ home.BookToPDF.title=Book to PDF
|
||||
home.BookToPDF.desc=Converts Books/Comics formats to PDF using calibre
|
||||
BookToPDF.tags=Book,Comic,Calibre,Convert,manga,amazon,kindle
|
||||
|
||||
home.removeImagePdf.title=Remove image
|
||||
home.removeImagePdf.desc=Remove image from PDF to reduce file size
|
||||
removeImagePdf.tags=Remove Image,Page operations,Back end,server side
|
||||
|
||||
|
||||
###########################
|
||||
# #
|
||||
@@ -945,6 +949,7 @@ watermark.selectText.6=heightSpacer (Spasi diantara setiap watermark vertikal):
|
||||
watermark.selectText.7=Opacity (0% - 100%):
|
||||
watermark.selectText.8=Tipe Watermark:
|
||||
watermark.selectText.9=Gambar Watermark:
|
||||
watermark.selectText.10=Convert PDF to PDF-Image
|
||||
watermark.submit=Tambahkan Watermark
|
||||
watermark.type.1=Text
|
||||
watermark.type.2=Image
|
||||
@@ -1125,3 +1130,9 @@ error.copyStack=Copy Stack Trace
|
||||
error.githubSubmit=GitHub - Submit a ticket
|
||||
error.discordSubmit=Discord - Submit Support post
|
||||
|
||||
|
||||
#remove-image
|
||||
removeImage.title=Remove image
|
||||
removeImage.header=Remove image
|
||||
removeImage.removeImage=Remove image
|
||||
removeImage.submit=Remove image
|
||||
|
||||
@@ -461,6 +461,10 @@ home.BookToPDF.title=Libro in PDF
|
||||
home.BookToPDF.desc=Converte i formati di libri/fumetti in PDF utilizzando Calibre
|
||||
BookToPDF.tags=Libro,fumetto,calibre,conversione,manga,amazon,kindle
|
||||
|
||||
home.removeImagePdf.title=Remove image
|
||||
home.removeImagePdf.desc=Remove image from PDF to reduce file size
|
||||
removeImagePdf.tags=Remove Image,Page operations,Back end,server side
|
||||
|
||||
|
||||
###########################
|
||||
# #
|
||||
@@ -706,8 +710,8 @@ removeAnnotations.submit=Rimuovi
|
||||
#compare
|
||||
compare.title=Compara
|
||||
compare.header=Compara PDF
|
||||
compare.highlightColor.1=Highlight Color 1:
|
||||
compare.highlightColor.2=Highlight Color 2:
|
||||
compare.highlightColor.1=Evidenzia colore 1:
|
||||
compare.highlightColor.2=Evidenzia colore 2:
|
||||
compare.document.1=Documento 1
|
||||
compare.document.2=Documento 2
|
||||
compare.submit=Compara
|
||||
@@ -945,6 +949,7 @@ watermark.selectText.6=spazio verticale (tra ogni filigrana):
|
||||
watermark.selectText.7=Opacità (0% - 100%):
|
||||
watermark.selectText.8=Tipo di filigrana:
|
||||
watermark.selectText.9=Immagine filigrana:
|
||||
watermark.selectText.10=Convert PDF to PDF-Image
|
||||
watermark.submit=Aggiungi Filigrana
|
||||
watermark.type.1=Testo
|
||||
watermark.type.2=Immagine
|
||||
@@ -1125,3 +1130,9 @@ error.copyStack=Copia traccia dello stack
|
||||
error.githubSubmit=GitHub: invia un ticket
|
||||
error.discordSubmit=Discord: invia post di supporto
|
||||
|
||||
|
||||
#remove-image
|
||||
removeImage.title=Rimuovere immagine
|
||||
removeImage.header=Rimuovi immagine
|
||||
removeImage.removeImage=Rimuovi immagine
|
||||
removeImage.submit=Rimuovi immagine
|
||||
|
||||
@@ -461,6 +461,10 @@ home.BookToPDF.title=PDFを書籍に変換
|
||||
home.BookToPDF.desc=calibreを使用してPDFを書籍/コミック形式に変換します
|
||||
BookToPDF.tags=Book,Comic,Calibre,Convert,manga,amazon,kindle
|
||||
|
||||
home.removeImagePdf.title=Remove image
|
||||
home.removeImagePdf.desc=Remove image from PDF to reduce file size
|
||||
removeImagePdf.tags=Remove Image,Page operations,Back end,server side
|
||||
|
||||
|
||||
###########################
|
||||
# #
|
||||
@@ -945,6 +949,7 @@ watermark.selectText.6=高さスペース (各透かし間の垂直方向のス
|
||||
watermark.selectText.7=不透明度 (0% - 100%):
|
||||
watermark.selectText.8=透かしの種類:
|
||||
watermark.selectText.9=透かしの画像:
|
||||
watermark.selectText.10=Convert PDF to PDF-Image
|
||||
watermark.submit=透かしを追加
|
||||
watermark.type.1=テキスト
|
||||
watermark.type.2=画像
|
||||
@@ -1125,3 +1130,9 @@ error.copyStack=スタックトレースをコピー
|
||||
error.githubSubmit=GitHub - チケットを提出
|
||||
error.discordSubmit=Discord - サポート投稿を提出
|
||||
|
||||
|
||||
#remove-image
|
||||
removeImage.title=Remove image
|
||||
removeImage.header=Remove image
|
||||
removeImage.removeImage=Remove image
|
||||
removeImage.submit=Remove image
|
||||
|
||||
@@ -461,6 +461,10 @@ home.BookToPDF.title=책을 PDF로
|
||||
home.BookToPDF.desc=구경을 사용하여 책/만화 형식을 PDF로 변환
|
||||
BookToPDF.tags=Book,Comic,Calibre,Convert,manga,amazon,kindle
|
||||
|
||||
home.removeImagePdf.title=Remove image
|
||||
home.removeImagePdf.desc=Remove image from PDF to reduce file size
|
||||
removeImagePdf.tags=Remove Image,Page operations,Back end,server side
|
||||
|
||||
|
||||
###########################
|
||||
# #
|
||||
@@ -945,6 +949,7 @@ watermark.selectText.6=세로 간격 (각 워터마크 사이의 세로 공간):
|
||||
watermark.selectText.7=투명도 (0% - 100%):
|
||||
watermark.selectText.8=워터마크 유형:
|
||||
watermark.selectText.9=워터마크 이미지:
|
||||
watermark.selectText.10=Convert PDF to PDF-Image
|
||||
watermark.submit=워터마크 추가
|
||||
watermark.type.1=텍스트
|
||||
watermark.type.2=이미지
|
||||
@@ -1125,3 +1130,9 @@ error.copyStack=스택 추적 복사
|
||||
error.githubSubmit=GitHub - 티켓 제출
|
||||
error.discordSubmit=Discord - 문의 게시
|
||||
|
||||
|
||||
#remove-image
|
||||
removeImage.title=Remove image
|
||||
removeImage.header=Remove image
|
||||
removeImage.removeImage=Remove image
|
||||
removeImage.submit=Remove image
|
||||
|
||||
@@ -461,6 +461,10 @@ home.BookToPDF.title=Boek naar PDF
|
||||
home.BookToPDF.desc=Converteert boek-/stripformaat naar PDF met gebruik van Calibre
|
||||
BookToPDF.tags=Boek,Strip,Comic,Calibre,Converteren,manga,amazon,kindle
|
||||
|
||||
home.removeImagePdf.title=Remove image
|
||||
home.removeImagePdf.desc=Remove image from PDF to reduce file size
|
||||
removeImagePdf.tags=Remove Image,Page operations,Back end,server side
|
||||
|
||||
|
||||
###########################
|
||||
# #
|
||||
@@ -945,6 +949,7 @@ watermark.selectText.6=hoogteSpacer (Ruimte tussen elk watermerk verticaal):
|
||||
watermark.selectText.7=Transparantie (0% - 100%):
|
||||
watermark.selectText.8=Type watermerk:
|
||||
watermark.selectText.9=Watermerk afbeelding:
|
||||
watermark.selectText.10=Convert PDF to PDF-Image
|
||||
watermark.submit=Watermerk toevoegen
|
||||
watermark.type.1=Text
|
||||
watermark.type.2=Image
|
||||
@@ -1125,3 +1130,9 @@ error.copyStack=Kopieer tracering
|
||||
error.githubSubmit=GitHub - Dien een ticket in
|
||||
error.discordSubmit=Discord - Maak een support post
|
||||
|
||||
|
||||
#remove-image
|
||||
removeImage.title=Remove image
|
||||
removeImage.header=Remove image
|
||||
removeImage.removeImage=Remove image
|
||||
removeImage.submit=Remove image
|
||||
|
||||
@@ -192,21 +192,21 @@ adminUserSettings.changeUserRole=Endre Brukerens Rolle
|
||||
adminUserSettings.authenticated=Autentisert
|
||||
|
||||
|
||||
database.title=Database Import/Export
|
||||
database.header=Database Import/Export
|
||||
database.fileName=File Name
|
||||
database.creationDate=Creation Date
|
||||
database.fileSize=File Size
|
||||
database.deleteBackupFile=Delete Backup File
|
||||
database.importBackupFile=Import Backup File
|
||||
database.downloadBackupFile=Download Backup File
|
||||
database.info_1=When importing data, it is crucial to ensure the correct structure. If you are unsure of what you are doing, seek advice and support from a professional. An error in the structure can cause application malfunctions, up to and including the complete inability to run the application.
|
||||
database.info_2=The file name does not matter when uploading. It will be renamed afterward to follow the format backup_user_yyyyMMddHHmm.sql, ensuring a consistent naming convention.
|
||||
database.submit=Import Backup
|
||||
database.importIntoDatabaseSuccessed=Import into database successed
|
||||
database.fileNotFound=File not Found
|
||||
database.fileNullOrEmpty=File must not be null or empty
|
||||
database.failedImportFile=Failed Import File
|
||||
database.title=Database Import/Eksport
|
||||
database.header=Database Import/Eksport
|
||||
database.fileName=Fil navn
|
||||
database.creationDate=Opprettelsesdato
|
||||
database.fileSize=Filstørrelse
|
||||
database.deleteBackupFile=Slett sikkerhetskopifil
|
||||
database.importBackupFile=Importer sikkerhetskopifil
|
||||
database.downloadBackupFile=Last ned sikkerhetskopifil
|
||||
database.info_1=Når du importerer data, er det avgjørende å sikre riktig struktur. Hvis du er usikker på hva du gjør, bør du søke råd og støtte fra en profesjonell. En feil i strukturen kan føre til applikasjonsfeil, inkludert fullstendig manglende evne til å kjøre applikasjonen.
|
||||
database.info_2=Filnavnet spiller ingen rolle ved opplasting. Det vil bli omdøpt etterpå for å følge formatet backup_user_yyyyMMddHHmm.sql, for å sikre en konsekvent navnekonvensjon.
|
||||
database.submit=Importer sikkerhetskopi
|
||||
database.importIntoDatabaseSuccessed=Import til database vellykket
|
||||
database.fileNotFound=Fil ikke funnet
|
||||
database.fileNullOrEmpty=Fil må ikke være tom eller null
|
||||
database.failedImportFile=Import av fil mislyktes
|
||||
|
||||
#############
|
||||
# HOME-PAGE #
|
||||
@@ -461,6 +461,10 @@ home.BookToPDF.title=Bok til PDF
|
||||
home.BookToPDF.desc=Konverter bøker/tegneserier til PDF ved hjelp av calibre
|
||||
BookToPDF.tags=Book,Comic,Calibre,Convert,manga,amazon,kindle,epub,mobi,azw3,docx,rtf,txt,html,lit,fb2,pdb,lrf
|
||||
|
||||
home.removeImagePdf.title=Remove image
|
||||
home.removeImagePdf.desc=Remove image from PDF to reduce file size
|
||||
removeImagePdf.tags=Remove Image,Page operations,Back end,server side
|
||||
|
||||
|
||||
###########################
|
||||
# #
|
||||
@@ -706,8 +710,8 @@ removeAnnotations.submit=Fjern
|
||||
#compare
|
||||
compare.title=Sammenlign
|
||||
compare.header=Sammenlign PDF-er
|
||||
compare.highlightColor.1=Highlight Color 1:
|
||||
compare.highlightColor.2=Highlight Color 2:
|
||||
compare.highlightColor.1=Uthevingsfarge 1:
|
||||
compare.highlightColor.2=Uthevingsfarge 2:
|
||||
compare.document.1=Dokument 1
|
||||
compare.document.2=Dokument 2
|
||||
compare.submit=Sammenlign
|
||||
@@ -945,6 +949,7 @@ watermark.selectText.6=Høydeavstand (Avstand mellom hvert vannmerke vertikalt):
|
||||
watermark.selectText.7=Opasitet (0% - 100%):
|
||||
watermark.selectText.8=Vannmerketype:
|
||||
watermark.selectText.9=Vannmerkebilde:
|
||||
watermark.selectText.10=Konverter PDF til PDF-Bilde
|
||||
watermark.submit=Legg til vannmerke
|
||||
watermark.type.1=Tekst
|
||||
watermark.type.2=Bilde
|
||||
@@ -1125,3 +1130,9 @@ error.copyStack=Kopier stakksporing
|
||||
error.githubSubmit=GitHub - Send inn en billett
|
||||
error.discordSubmit=Discord - Send inn støtteinnlegg
|
||||
|
||||
|
||||
#remove-image
|
||||
removeImage.title=Remove image
|
||||
removeImage.header=Remove image
|
||||
removeImage.removeImage=Remove image
|
||||
removeImage.submit=Remove image
|
||||
|
||||
@@ -38,13 +38,13 @@ delete=usuń
|
||||
username=nazwa użytkownika
|
||||
password=hasło
|
||||
welcome=Witaj
|
||||
property=własnośc
|
||||
property=własność
|
||||
black=czarny
|
||||
white=biały
|
||||
red=czerwony
|
||||
green=zielony
|
||||
blue=niebieski
|
||||
custom=Własny
|
||||
custom=Własny...
|
||||
WorkInProgess=Praca w toku, proszę zgłaszać błędy!
|
||||
poweredBy=Zasilany
|
||||
yes=tak
|
||||
@@ -93,7 +93,7 @@ pipeline.deletePrompt=Na pewno chcesz skasować automatyzacje
|
||||
######################
|
||||
pipelineOptions.header=Konfiguracja automatyzacji
|
||||
pipelineOptions.pipelineNameLabel=Nazwa automatyzacji
|
||||
pipelineOptions.saveSettings=Zapisz automatyzacje
|
||||
pipelineOptions.saveSettings=Zapisz ustawienia operacji
|
||||
pipelineOptions.pipelineNamePrompt=Podaj nazwę automatyzacji
|
||||
pipelineOptions.selectOperation=Wybierz operację
|
||||
pipelineOptions.addOperationButton=Dodaj operację
|
||||
@@ -125,7 +125,7 @@ navbar.sections.edit=Podgląd i edycja
|
||||
#############
|
||||
settings.title=Ustawienia
|
||||
settings.update=Dostępna aktualizacja
|
||||
settings.updateAvailable=Wersja {0} jest obecenia zainstalowana , dostępna jest nowa wersja({1}).
|
||||
settings.updateAvailable=Wersja {0} jest obecenia zainstalowana, dostępna jest nowa wersja ({1}).
|
||||
settings.appVersion=Wersja aplikacji:
|
||||
settings.downloadOption.title=Wybierz opcję pobierania (w przypadku pobierania pojedynczych plików innych niż ZIP):
|
||||
settings.downloadOption.1=Otwórz w tym samym oknie
|
||||
@@ -152,7 +152,7 @@ changeCreds.submit=Zapisz zmiany
|
||||
account.title=Ustawienia konta
|
||||
account.accountSettings=Ustawienia konta
|
||||
account.adminSettings=Admin - kontrola kont
|
||||
account.userControlSettings=Kontrola praw uzytkownika
|
||||
account.userControlSettings=Kontrola praw użytkownika
|
||||
account.changeUsername=Zmień nazwę użytkownika
|
||||
account.newUsername=Nowa nazwa użytkownika
|
||||
account.password=Potwierdź hasło
|
||||
@@ -172,41 +172,41 @@ account.syncToAccount=Wczytaj dane konta z przeglądarki
|
||||
|
||||
adminUserSettings.title=Ustawienia konta użytkownika
|
||||
adminUserSettings.header=Ustawienia praw administratora
|
||||
adminUserSettings.admin=administrator
|
||||
adminUserSettings.user=użytkownik
|
||||
adminUserSettings.addUser=dodaj nowego użytkownika
|
||||
adminUserSettings.deleteUser=usuń użytkownika
|
||||
adminUserSettings.confirmDeleteUser=Czy na pewno usunąć użytkownika ?
|
||||
adminUserSettings.admin=Administrator
|
||||
adminUserSettings.user=Użytkownik
|
||||
adminUserSettings.addUser=Dodaj nowego użytkownika
|
||||
adminUserSettings.deleteUser=Usuń użytkownika
|
||||
adminUserSettings.confirmDeleteUser=Czy na pewno usunąć użytkownika?
|
||||
adminUserSettings.usernameInfo=Niewłaściwa nazwa użytkownika - musi zawierać litery, cyfry i @._+- LUB być adresem email.
|
||||
adminUserSettings.roles=Role
|
||||
adminUserSettings.role=Rola
|
||||
adminUserSettings.actions=Akcje
|
||||
adminUserSettings.apiUser=Ograniczony Użytkownik API
|
||||
adminUserSettings.extraApiUser=Dodatkowy ograniczony Użytkownik API
|
||||
adminUserSettings.webOnlyUser=Uzytkownik tylko WEB
|
||||
adminUserSettings.webOnlyUser=Użytkownik tylko WEB
|
||||
adminUserSettings.demoUser=Użytkownik DEMO
|
||||
adminUserSettings.internalApiUser=Wenętrzny użytkownik API
|
||||
adminUserSettings.internalApiUser=Wewnętrzny użytkownik API
|
||||
adminUserSettings.forceChange=Wymuś zmianę hasło po zalogowaniu
|
||||
adminUserSettings.submit=Zapisz użytkownika
|
||||
adminUserSettings.changeUserRole=Zmień rolę użytkownika
|
||||
adminUserSettings.authenticated=Zalogowany
|
||||
|
||||
|
||||
database.title=Database Import/Export
|
||||
database.header=Database Import/Export
|
||||
database.fileName=File Name
|
||||
database.creationDate=Creation Date
|
||||
database.fileSize=File Size
|
||||
database.deleteBackupFile=Delete Backup File
|
||||
database.importBackupFile=Import Backup File
|
||||
database.downloadBackupFile=Download Backup File
|
||||
database.info_1=When importing data, it is crucial to ensure the correct structure. If you are unsure of what you are doing, seek advice and support from a professional. An error in the structure can cause application malfunctions, up to and including the complete inability to run the application.
|
||||
database.info_2=The file name does not matter when uploading. It will be renamed afterward to follow the format backup_user_yyyyMMddHHmm.sql, ensuring a consistent naming convention.
|
||||
database.submit=Import Backup
|
||||
database.importIntoDatabaseSuccessed=Import into database successed
|
||||
database.fileNotFound=File not Found
|
||||
database.fileNullOrEmpty=File must not be null or empty
|
||||
database.failedImportFile=Failed Import File
|
||||
database.title=Import/Eksport bazy danych
|
||||
database.header=Import/Eksport bazy danych
|
||||
database.fileName=Nazwa pliku
|
||||
database.creationDate=Data utworzenia
|
||||
database.fileSize=Rozmiar pliku
|
||||
database.deleteBackupFile=Usuń plik kopii zapasowej
|
||||
database.importBackupFile=Importuj plik kopii zapasowej
|
||||
database.downloadBackupFile=Pobierz plik kopii zapasowej
|
||||
database.info_1=Podczas importowania danych, ważne jest, aby upewnić się, że struktura jest poprawna. Jeśli nie jesteś pewien, co robisz, skontaktuj się z profesjonalistą. Błąd w strukturze może spowodować awarie aplikacji, aż do całkowitej niemożności jej uruchomienia.
|
||||
database.info_2=Nazwa pliku nie ma znaczenia podczas przesyłania. Zostanie on później przemianowany, aby przestrzegać formatu backup_user_yyyyMMddHHmm.sql, zapewniając spójną konwencję nazewnictwa.
|
||||
database.submit=Importuj kopię zapasową
|
||||
database.importIntoDatabaseSuccessed=Import do bazy danych zakończony sukcesem
|
||||
database.fileNotFound=Plik nie znaleziony
|
||||
database.fileNullOrEmpty=Plik nie może być pusty
|
||||
database.failedImportFile=Nie udało się zaimportować pliku
|
||||
|
||||
#############
|
||||
# HOME-PAGE #
|
||||
@@ -216,8 +216,8 @@ home.searchBar=Szukaj opcji ...
|
||||
|
||||
|
||||
home.viewPdf.title=Podejrzyj PDF
|
||||
home.viewPdf.desc=View, annotate, add text or images
|
||||
viewPdf.tags=view,read,annotate,text,image
|
||||
home.viewPdf.desc=Wyświetl, adnotuj, dodaj tekst lub obrazy
|
||||
viewPdf.tags=wyświetl,czytaj,adnotuj,tekst,obraz
|
||||
|
||||
home.multiTool.title=Multi narzędzie PDF
|
||||
home.multiTool.desc=Łącz, dziel, obracaj, zmieniaj kolejność i usuwaj strony
|
||||
@@ -250,7 +250,7 @@ pdfOrganiser.tags=duplex,even,odd,sort,move
|
||||
|
||||
|
||||
home.addImage.title=Dodaj obraz
|
||||
home.addImage.desc=Dodaje obraz w wybranym miejscu w dokumencie PDF (moduł w budowie)
|
||||
home.addImage.desc=Dodaje obraz w wybranym miejscu w dokumencie PDF
|
||||
addImage.tags=img,jpg,picture,photo
|
||||
|
||||
home.watermark.title=Dodaj znak wodny
|
||||
@@ -281,7 +281,7 @@ compressPdfs.tags=squish,small,tiny
|
||||
|
||||
home.changeMetadata.title=Zmień metadane
|
||||
home.changeMetadata.desc=Zmień/Usuń/Dodaj metadane w dokumencie PDF
|
||||
changeMetadata.tags==Title,author,date,creation,time,publisher,producer,stats
|
||||
changeMetadata.tags=Title,author,date,creation,time,publisher,producer,stats
|
||||
|
||||
home.fileToPDF.title=Konwertuj plik do PDF
|
||||
home.fileToPDF.desc=Konwertuj dowolny plik do dokumentu PDF (DOCX, PNG, XLS, PPT, TXT i więcej)
|
||||
@@ -304,7 +304,7 @@ home.PDFToWord.title=PDF na Word
|
||||
home.PDFToWord.desc=Konwertuj dokument PDF na formaty Word (DOC, DOCX i ODT)
|
||||
PDFToWord.tags=doc,docx,odt,word,transformation,format,conversion,office,microsoft,docfile
|
||||
|
||||
home.PDFToPresentation.title=PDF na Prezentację
|
||||
home.PDFToPresentation.title=PDF na Prezentację
|
||||
home.PDFToPresentation.desc=Konwertuj dokument PDF na formaty prezentacji (PPT, PPTX i ODP)
|
||||
PDFToPresentation.tags=slides,show,office,microsoft
|
||||
|
||||
@@ -326,7 +326,7 @@ home.ScannerImageSplit.desc=Podziel na wiele zdjęć z jednego zdjęcia/PDF
|
||||
ScannerImageSplit.tags=separate,auto-detect,scans,multi-photo,organize
|
||||
|
||||
home.sign.title=Podpis
|
||||
home.sign.desc=Dodaje podpis do dokument PDF za pomocą rysunku, tekstu lub obrazu
|
||||
home.sign.desc=Dodaje podpis do dokumentu PDF za pomocą rysunku, tekstu lub obrazu
|
||||
sign.tags=authorize,initials,drawn-signature,text-sign,image-signature
|
||||
|
||||
home.flatten.title=Spłaszcz
|
||||
@@ -370,7 +370,7 @@ home.pipeline.desc=Wykonaj wiele akcji na dokumentach PDF, tworząc automatyzacj
|
||||
pipeline.tags=automate,sequence,scripted,batch-process
|
||||
|
||||
home.add-page-numbers.title=Dodaj numery stron
|
||||
home.add-page-numbers.desc=Dodaj numbery strony w dokumencie PDF w podanej lokacji
|
||||
home.add-page-numbers.desc=Dodaj numery strony w dokumencie PDF w podanej lokalizacji
|
||||
add-page-numbers.tags=paginate,label,organize,index
|
||||
|
||||
home.auto-rename.title=Automatycznie zmień nazwę PDF
|
||||
@@ -382,7 +382,7 @@ home.adjust-contrast.desc=Zmień kolor/nasycenie/jasność w dokumencie PDF
|
||||
adjust-contrast.tags=color-correction,tune,modify,enhance
|
||||
|
||||
home.crop.title=Przytnij PDF
|
||||
home.crop.desc=Przytnij dokument PDF w celu zmiejszenia rozmiaru
|
||||
home.crop.desc=Przytnij dokument PDF w celu zmniejszenia rozmiaru
|
||||
crop.tags=trim,shrink,edit,shape
|
||||
|
||||
home.autoSplitPDF.title=Automatycznie podziel strony
|
||||
@@ -390,7 +390,7 @@ home.autoSplitPDF.desc=Automatycznie podziel dokument na strony
|
||||
autoSplitPDF.tags=QR-based,separate,scan-segment,organize
|
||||
|
||||
home.sanitizePdf.title=Dezynfekcja
|
||||
home.sanitizePdf.desc=Usuń skrupt i inne elementy z dokumentu PDF
|
||||
home.sanitizePdf.desc=Usuń skrypt i inne elementy z dokumentu PDF
|
||||
sanitizePdf.tags=clean,secure,safe,remove-threats
|
||||
|
||||
home.URLToPDF.title=Strona WWW do PDFa
|
||||
@@ -427,16 +427,16 @@ home.showJS.desc=Znajduje i pokazuje załączony kod JS w dokumencie PDF
|
||||
showJS.tags=JS
|
||||
|
||||
home.autoRedact.title=Zaciemnij
|
||||
home.autoRedact.desc=Zaciemnia dokument PDF bazująć na podanej wartości
|
||||
home.autoRedact.desc=Zaciemnia dokument PDF bazując na podanej wartości
|
||||
autoRedact.tags=Redact,Hide,black out,black,marker,hidden
|
||||
|
||||
home.tableExtraxt.title=PDF do CSV
|
||||
home.tableExtraxt.desc=Konwertuje table z PDF do pliku CSV
|
||||
home.tableExtraxt.desc=Konwertuje tabele z PDF do pliku CSV
|
||||
tableExtraxt.tags=CSV,Table Extraction,extract,convert
|
||||
|
||||
|
||||
home.autoSizeSplitPDF.title=Podziel (Rozmiar/Ilość stron)
|
||||
home.autoSizeSplitPDF.desc=Rozdziela dokument PDF na wiele dokumentów bazujać na podanym rozmiarze, ilości stron bądź ilości dokumentów
|
||||
home.autoSizeSplitPDF.desc=Rozdziela dokument PDF na wiele dokumentów bazując na podanym rozmiarze, ilości stron bądź ilości dokumentów
|
||||
autoSizeSplitPDF.tags=pdf,split,document,organization
|
||||
|
||||
|
||||
@@ -449,7 +449,7 @@ home.split-by-sections.desc=Podziel strony PDF w mniejsze sekcje
|
||||
split-by-sections.tags=Section Split, Divide, Customize
|
||||
|
||||
home.AddStampRequest.title=Dodaj pieczęć
|
||||
home.AddStampRequest.desc=Dodaj pieczęć tesktową/obrazową w wyznaczonej lokalizacji dokumentu
|
||||
home.AddStampRequest.desc=Dodaj pieczęć tekstową/obrazową w wyznaczonej lokalizacji dokumentu
|
||||
AddStampRequest.tags=Stamp, Add image, center image, Watermark, PDF, Embed, Customize
|
||||
|
||||
|
||||
@@ -461,6 +461,10 @@ home.BookToPDF.title=eBook do PDF
|
||||
home.BookToPDF.desc=Zapisuje ebooka do PDF za pomocą Calibre
|
||||
BookToPDF.tags=Book,Comic,Calibre,Convert,manga,amazon,kindle
|
||||
|
||||
home.removeImagePdf.title=Remove image
|
||||
home.removeImagePdf.desc=Remove image from PDF to reduce file size
|
||||
removeImagePdf.tags=Remove Image,Page operations,Back end,server side
|
||||
|
||||
|
||||
###########################
|
||||
# #
|
||||
@@ -481,8 +485,8 @@ login.oauth2RequestNotFound=Błąd logowania OAuth2
|
||||
login.oauth2InvalidUserInfoResponse=Niewłaściwe dane logowania
|
||||
login.oauth2invalidRequest=Nieprawidłowe żądanie
|
||||
login.oauth2AccessDenied=Brak dostępu
|
||||
login.oauth2InvalidTokenResponse=Nieprawidłowy odpowiedź na token
|
||||
login.oauth2InvalidIdToken=Nieprawidłowa wartośc tokenu
|
||||
login.oauth2InvalidTokenResponse=Nieprawidłowa odpowiedź na token
|
||||
login.oauth2InvalidIdToken=Nieprawidłowa wartość tokenu
|
||||
|
||||
|
||||
#auto-redact
|
||||
@@ -569,7 +573,7 @@ AddStampRequest.stampType=Typ pieczęci
|
||||
AddStampRequest.stampText=Tekst w pieczęci
|
||||
AddStampRequest.stampImage=Obraz w pieczęci
|
||||
AddStampRequest.alphabet=Alfabet
|
||||
AddStampRequest.fontSize=Rozmiar Czcionki/Obrazu
|
||||
AddStampRequest.fontSize=Rozmiar czcionki/obrazu
|
||||
AddStampRequest.rotation=Obrót
|
||||
AddStampRequest.opacity=Przeźroczystość
|
||||
AddStampRequest.position=Pozycja
|
||||
@@ -584,7 +588,7 @@ AddStampRequest.submit=Wyślij
|
||||
sanitizePDF.title=Dezynfekuj PDF
|
||||
sanitizePDF.header=Dezynfekuj dokument PDF
|
||||
sanitizePDF.selectText.1=Usuń elementy JavaScript
|
||||
sanitizePDF.selectText.2=Usuń załącznone pliki
|
||||
sanitizePDF.selectText.2=Usuń załączone pliki
|
||||
sanitizePDF.selectText.3=Usuń metadane
|
||||
sanitizePDF.selectText.4=Usuń linki
|
||||
sanitizePDF.selectText.5=Usuń czcionki
|
||||
@@ -601,23 +605,23 @@ addPageNumbers.selectText.4=Numer początkowy
|
||||
addPageNumbers.selectText.5=Ilość stron do ponumerowania
|
||||
addPageNumbers.selectText.6=Tekst własny
|
||||
addPageNumbers.customTextDesc=Tekst własny
|
||||
addPageNumbers.numberPagesDesc=Strony do numeracji, wszystkie (all),1-5, 2,5,9
|
||||
addPageNumbers.numberPagesDesc=Strony do numeracji, wszystkie (all), 1-5, 2, 5, 9
|
||||
addPageNumbers.customNumberDesc=Domyślnie do {n}, również akceptuje 'Strona {n} z {total},Teskt-{n},'{filename}-{n}
|
||||
addPageNumbers.submit=Dodaj numerację stron
|
||||
|
||||
|
||||
#auto-rename
|
||||
auto-rename.title=Automatczna zmiana nazwy
|
||||
auto-rename.header=Automatczna zmiana nazwy dokumentu PDF
|
||||
auto-rename.submit=Automatczna zmiana nazwy
|
||||
auto-rename.title=Automatyczna zmiana nazwy
|
||||
auto-rename.header=Automatyczna zmiana nazwy dokumentu PDF
|
||||
auto-rename.submit=Automatyczna zmiana nazwy
|
||||
|
||||
|
||||
#adjustContrast
|
||||
adjustContrast.title=Dopasuj kontrast
|
||||
adjustContrast.header=Dopasuj kontrast
|
||||
adjustContrast.contrast=kontrast:
|
||||
adjustContrast.brightness=jasność:
|
||||
adjustContrast.saturation=nasycenie:
|
||||
adjustContrast.contrast=Kontrast:
|
||||
adjustContrast.brightness=Jasność:
|
||||
adjustContrast.saturation=Nasycenie:
|
||||
adjustContrast.download=Pobierz
|
||||
|
||||
|
||||
@@ -630,11 +634,11 @@ crop.submit=Wyślij
|
||||
#autoSplitPDF
|
||||
autoSplitPDF.title=Automatycznie podziel PDF
|
||||
autoSplitPDF.header=Automatycznie podziel PDF
|
||||
autoSplitPDF.description=Drukuj, wstaw, skanuj, wyślij i pozwól nam automatycznie posortować dokumenty.
|
||||
autoSplitPDF.description=Drukuj, wstaw, skanuj, wyślij i pozwól nam automatycznie posortować dokumenty. Bez ręcznego sortowania.
|
||||
autoSplitPDF.selectText.1=Wydrukuj strony separacji z poniższych wzorów - (mogą być czarno-białe)
|
||||
autoSplitPDF.selectText.2=Skanuj wszystkie swoje dokumenty na raz, wstawiając stronę separator między nie.
|
||||
autoSplitPDF.selectText.3=Wyślij pojedyńczy duży plik PDF zawierający skan i pozwól Stirling zająć się resztą.
|
||||
autoSplitPDF.selectText.4=Strony separacji sa automatycznie wykrywane i usuwane, gwarantując ładny finalny dokument.
|
||||
autoSplitPDF.selectText.3=Wyślij pojedynczy duży plik PDF zawierający skan i pozwól Stirling PDF zająć się resztą.
|
||||
autoSplitPDF.selectText.4=Strony separacji są automatycznie wykrywane i usuwane, gwarantując ładny finalny dokument.
|
||||
autoSplitPDF.formPrompt=Wyślij dokument PDF zawierający strony podziału z Stirling PDF.
|
||||
autoSplitPDF.duplexMode=Skanowanie dwustronne
|
||||
autoSplitPDF.dividerDownload1=Pobierz 'Auto Splitter Divider (minimal).pdf'
|
||||
@@ -666,11 +670,11 @@ scalePages.submit=Wykonaj
|
||||
certSign.title=Podpisywanie certyfikatem
|
||||
certSign.header=Podpisz dokument PDF certyfikatem prywatnym (moduł w budowie)
|
||||
certSign.selectPDF=Wybierz dokument PDF do podpisania:
|
||||
certSign.jksNote=Notka: jeśli twój typ certyfikatu nie jest widoczny na liście , skonwertuj go do formatu Java Keystore (.jks) używając polecenia keytool. Następnie wybierz plik .JKS poniżej z listy.
|
||||
certSign.jksNote=Notka: jeśli twój typ certyfikatu nie jest widoczny na liście, skonwertuj go do formatu Java Keystore (.jks) używając polecenia keytool. Następnie wybierz plik .JKS poniżej z listy.
|
||||
certSign.selectKey=Wybierz plik klucza prywatnego (format PKCS#8, może to być .pem lub .der):
|
||||
certSign.selectCert=Wybierz plik certyfikatu (format X.509, może to być .pem lub .der):
|
||||
certSign.selectP12=Wybierz plik magazynu kluczy PKCS#12 (.p12 lub .pfx) (opcjonalnie, jeśli jest podany, powinien zawierać klucz prywatny i certyfikat):
|
||||
certSign.selectJKS=Wybierz plik Java Keystore(.jks lub .keystore):
|
||||
certSign.selectJKS=Wybierz plik Java Keystore (.jks lub .keystore):
|
||||
certSign.certType=Typ certyfikatu
|
||||
certSign.password=Wprowadź hasło do magazynu kluczy lub klucza prywatnego (jeśli istnieje):
|
||||
certSign.showSig=Wyświetl podpis
|
||||
@@ -792,7 +796,7 @@ extractImages.submit=Wyodrębnij
|
||||
fileToPDF.title=Plik na PDF
|
||||
fileToPDF.header=Konwertuj dowolny plik na dokument PDF
|
||||
fileToPDF.credit=Ta usługa używa LibreOffice i Unoconv do konwersji plików.
|
||||
fileToPDF.supportedFileTypesInfo=Supported File types
|
||||
fileToPDF.supportedFileTypesInfo=Obsługiwane typy plików
|
||||
fileToPDF.supportedFileTypes=Obsługiwane typy plików powinny być zgodne z poniższymi, jednak pełną zaktualizowaną listę obsługiwanych formatów można znaleźć w dokumentacji LibreOffice
|
||||
fileToPDF.submit=Konwertuj na PDF
|
||||
|
||||
@@ -803,7 +807,7 @@ compress.header=Kompresuj PDF
|
||||
compress.credit=Ta usługa używa Ghostscript do kompresji/optymalizacji PDF.
|
||||
compress.selectText.1=Tryb ręczny - Od 1 do 4
|
||||
compress.selectText.2=Poziom optymalizacji:
|
||||
compress.selectText.3=4 (Straszne dla obrazów tekstowych)
|
||||
compress.selectText.3=4 (Duże dla obrazów tekstowych)
|
||||
compress.selectText.4=Tryb automatyczny - Automatycznie dostosowuje jakość, aby uzyskać dokładny rozmiar pliku PDF
|
||||
compress.selectText.5=Oczekiwany rozmiar pliku PDF (np. 25 MB, 10,8 MB, 25 KB)
|
||||
compress.submit=Kompresuj
|
||||
@@ -820,9 +824,9 @@ addImage.submit=Dodaj obraz
|
||||
#merge
|
||||
merge.title=Połącz
|
||||
merge.header=Połącz wiele dokumentów PDF (2+)
|
||||
merge.sortByName=Sort by name
|
||||
merge.sortByDate=Sort by date
|
||||
merge.removeCertSign=Remove digital signature in the merged file?
|
||||
merge.sortByName=Sortuj po nazwie
|
||||
merge.sortByDate=Sortuj po dacie
|
||||
merge.removeCertSign=Usuń podpis cyfrowy w scalonym pliku?
|
||||
merge.submit=Połącz
|
||||
|
||||
|
||||
@@ -834,7 +838,7 @@ pdfOrganiser.mode=Tryb
|
||||
pdfOrganiser.mode.1=Własna kolejność stron
|
||||
pdfOrganiser.mode.2=Odwrotny
|
||||
pdfOrganiser.mode.3=Dwustronny
|
||||
pdfOrganiser.mode.4=Ksiązki
|
||||
pdfOrganiser.mode.4=Książki
|
||||
pdfOrganiser.mode.5=Spiętej książki
|
||||
pdfOrganiser.mode.6=Rozdziel parzyste-nieparzyste
|
||||
pdfOrganiser.mode.7=Usuń pierwszą
|
||||
@@ -916,7 +920,7 @@ addPassword.title=Dodaj hasło
|
||||
addPassword.header=Dodaj hasło (zaszyfruj)
|
||||
addPassword.selectText.1=Wybierz plik PDF do zaszyfrowania
|
||||
addPassword.selectText.2=Hasło
|
||||
addPassword.selectText.3=Długość hasła
|
||||
addPassword.selectText.3=Długość klucza szyfrowania
|
||||
addPassword.selectText.4=Wyższe wartości są silniejsze, ale niższe wartości zapewniają lepszą kompatybilność.
|
||||
addPassword.selectText.5=Uprawnienia do zmian
|
||||
addPassword.selectText.6=Zablokuj zmiany w dokumencie
|
||||
@@ -928,7 +932,7 @@ addPassword.selectText.11=Zablokuj modyfikacje adnotacji
|
||||
addPassword.selectText.12=Zablokuj drukowanie
|
||||
addPassword.selectText.13=Zablokuj drukowanie różnych formatów
|
||||
addPassword.selectText.14=Hasło właściciela
|
||||
addPassword.selectText.15=Ogranicza akcje które można wykonać na dokumencie, kiedy jest otwarty (nie wspierany przez wszystkie przeglądarki)
|
||||
addPassword.selectText.15=Ogranicza akcje, które można wykonać na dokumencie, kiedy jest otwarty (nie wspierany przez wszystkie przeglądarki)
|
||||
addPassword.selectText.16=Ogranicza otwarcie dokumentu
|
||||
addPassword.submit=Zablokuj
|
||||
|
||||
@@ -945,6 +949,7 @@ watermark.selectText.6=Odstęp w pionie (odstęp między każdym znakiem wodnym
|
||||
watermark.selectText.7=Nieprzezroczystość (0% - 100%):
|
||||
watermark.selectText.8=Typ znaku wodnego:
|
||||
watermark.selectText.9=Obraz znaku wodnego:
|
||||
watermark.selectText.10=Convert PDF to PDF-Image
|
||||
watermark.submit=Dodaj znak wodny
|
||||
watermark.type.1=Tekst
|
||||
watermark.type.2=Obraz
|
||||
@@ -1045,7 +1050,7 @@ PDFToXML.submit=Konwertuj
|
||||
PDFToCSV.title=PDF na CSV
|
||||
PDFToCSV.header=PDF na CSV
|
||||
PDFToCSV.prompt=Choose page to extract table
|
||||
PDFToCSV.submit=Wyci?g
|
||||
PDFToCSV.submit=Zatwierdź
|
||||
|
||||
#split-by-size-or-count
|
||||
split-by-size-or-count.title=Podziel PDF przez ilość stron bądź rozmiar
|
||||
@@ -1100,7 +1105,7 @@ licenses.title=Licencje stron trzecich
|
||||
licenses.header=Licencje stron trzecich
|
||||
licenses.module=Moduł
|
||||
licenses.version=Wersja
|
||||
licenses.license=Licencha
|
||||
licenses.license=Licencja
|
||||
|
||||
#survey
|
||||
survey.nav=Ankieta
|
||||
@@ -1125,3 +1130,9 @@ error.copyStack=Kopiuj Stack Trace
|
||||
error.githubSubmit=GitHub - wyślij zgłoszenie
|
||||
error.discordSubmit=Discord - wyślij posta z prośbą o pomoc
|
||||
|
||||
|
||||
#remove-image
|
||||
removeImage.title=Remove image
|
||||
removeImage.header=Remove image
|
||||
removeImage.removeImage=Remove image
|
||||
removeImage.submit=Remove image
|
||||
|
||||
@@ -461,6 +461,10 @@ home.BookToPDF.title=Book to PDF
|
||||
home.BookToPDF.desc=Converts Books/Comics formats to PDF using calibre
|
||||
BookToPDF.tags=Book,Comic,Calibre,Convert,manga,amazon,kindle
|
||||
|
||||
home.removeImagePdf.title=Remove image
|
||||
home.removeImagePdf.desc=Remove image from PDF to reduce file size
|
||||
removeImagePdf.tags=Remove Image,Page operations,Back end,server side
|
||||
|
||||
|
||||
###########################
|
||||
# #
|
||||
@@ -945,6 +949,7 @@ watermark.selectText.6=Espaçamento Vertical (heightSpacer)
|
||||
watermark.selectText.7=Opacidade (0% - 100%)
|
||||
watermark.selectText.8=Tipo de Marca d'Água
|
||||
watermark.selectText.9=Imagem da Marca d'Água
|
||||
watermark.selectText.10=Convert PDF to PDF-Image
|
||||
watermark.submit=Adicionar Marca d'Água
|
||||
watermark.type.1=Text
|
||||
watermark.type.2=Image
|
||||
@@ -1125,3 +1130,9 @@ error.copyStack=Copy Stack Trace
|
||||
error.githubSubmit=GitHub - Submit a ticket
|
||||
error.discordSubmit=Discord - Submit Support post
|
||||
|
||||
|
||||
#remove-image
|
||||
removeImage.title=Remove image
|
||||
removeImage.header=Remove image
|
||||
removeImage.removeImage=Remove image
|
||||
removeImage.submit=Remove image
|
||||
|
||||
@@ -461,6 +461,10 @@ home.BookToPDF.title=Book to PDF
|
||||
home.BookToPDF.desc=Converts Books/Comics formats to PDF using calibre
|
||||
BookToPDF.tags=Book,Comic,Calibre,Convert,manga,amazon,kindle
|
||||
|
||||
home.removeImagePdf.title=Remove image
|
||||
home.removeImagePdf.desc=Remove image from PDF to reduce file size
|
||||
removeImagePdf.tags=Remove Image,Page operations,Back end,server side
|
||||
|
||||
|
||||
###########################
|
||||
# #
|
||||
@@ -945,6 +949,7 @@ watermark.selectText.6=Espaçamento Vertical (heightSpacer)
|
||||
watermark.selectText.7=Opacidade (0% - 100%)
|
||||
watermark.selectText.8=Tipo de Marca d'Água
|
||||
watermark.selectText.9=Imagem da Marca d'Água
|
||||
watermark.selectText.10=Convert PDF to PDF-Image
|
||||
watermark.submit=Adicionar Marca d'Água
|
||||
watermark.type.1=Text
|
||||
watermark.type.2=Image
|
||||
@@ -1125,3 +1130,9 @@ error.copyStack=Copy Stack Trace
|
||||
error.githubSubmit=GitHub - Submit a ticket
|
||||
error.discordSubmit=Discord - Submit Support post
|
||||
|
||||
|
||||
#remove-image
|
||||
removeImage.title=Remove image
|
||||
removeImage.header=Remove image
|
||||
removeImage.removeImage=Remove image
|
||||
removeImage.submit=Remove image
|
||||
|
||||
@@ -461,6 +461,10 @@ home.BookToPDF.title=Book to PDF
|
||||
home.BookToPDF.desc=Converts Books/Comics formats to PDF using calibre
|
||||
BookToPDF.tags=Book,Comic,Calibre,Convert,manga,amazon,kindle
|
||||
|
||||
home.removeImagePdf.title=Remove image
|
||||
home.removeImagePdf.desc=Remove image from PDF to reduce file size
|
||||
removeImagePdf.tags=Remove Image,Page operations,Back end,server side
|
||||
|
||||
|
||||
###########################
|
||||
# #
|
||||
@@ -945,6 +949,7 @@ watermark.selectText.6=heightSpacer (Spațiu între fiecare filigran pe vertical
|
||||
watermark.selectText.7=Opacitate (0% - 100%):
|
||||
watermark.selectText.8=Watermark Type:
|
||||
watermark.selectText.9=Watermark Image:
|
||||
watermark.selectText.10=Convert PDF to PDF-Image
|
||||
watermark.submit=Adăugați Filigran
|
||||
watermark.type.1=Text
|
||||
watermark.type.2=Image
|
||||
@@ -1125,3 +1130,9 @@ error.copyStack=Copy Stack Trace
|
||||
error.githubSubmit=GitHub - Submit a ticket
|
||||
error.discordSubmit=Discord - Submit Support post
|
||||
|
||||
|
||||
#remove-image
|
||||
removeImage.title=Remove image
|
||||
removeImage.header=Remove image
|
||||
removeImage.removeImage=Remove image
|
||||
removeImage.submit=Remove image
|
||||
|
||||
@@ -461,6 +461,10 @@ home.BookToPDF.title=Книга в PDF
|
||||
home.BookToPDF.desc=Конвертирует форматы книги/комикса в PDF с помощью calibre
|
||||
BookToPDF.tags=Book,Comic,Calibre,Convert,manga,amazon,kindle
|
||||
|
||||
home.removeImagePdf.title=Remove image
|
||||
home.removeImagePdf.desc=Remove image from PDF to reduce file size
|
||||
removeImagePdf.tags=Remove Image,Page operations,Back end,server side
|
||||
|
||||
|
||||
###########################
|
||||
# #
|
||||
@@ -945,6 +949,7 @@ watermark.selectText.6=heightSpacer (пробел между каждым вод
|
||||
watermark.selectText.7=Непрозрачность (0% - 100%):
|
||||
watermark.selectText.8=Тип водяного знака:
|
||||
watermark.selectText.9=Изображение водяного знака:
|
||||
watermark.selectText.10=Convert PDF to PDF-Image
|
||||
watermark.submit=Добавить водяной знак
|
||||
watermark.type.1=Текст
|
||||
watermark.type.2=Изображение
|
||||
@@ -1125,3 +1130,9 @@ error.copyStack=Скопировать стек вызовов
|
||||
error.githubSubmit=GitHub - Отправить заявку
|
||||
error.discordSubmit=Discord - Отправить запрос в поддержку
|
||||
|
||||
|
||||
#remove-image
|
||||
removeImage.title=Remove image
|
||||
removeImage.header=Remove image
|
||||
removeImage.removeImage=Remove image
|
||||
removeImage.submit=Remove image
|
||||
|
||||
@@ -461,6 +461,10 @@ home.BookToPDF.title=Kniha do PDF
|
||||
home.BookToPDF.desc=Konvertuje formáty kníh/komiksov do PDF pomocou Calibre
|
||||
BookToPDF.tags=kniha, komiks, Calibre, konvertovať, manga, amazon, kindle
|
||||
|
||||
home.removeImagePdf.title=Remove image
|
||||
home.removeImagePdf.desc=Remove image from PDF to reduce file size
|
||||
removeImagePdf.tags=Remove Image,Page operations,Back end,server side
|
||||
|
||||
|
||||
###########################
|
||||
# #
|
||||
@@ -945,6 +949,7 @@ watermark.selectText.6=Výška medzery (Medzera medzi jednotlivými vodotlačami
|
||||
watermark.selectText.7=Priehľadnosť (0% - 100%):
|
||||
watermark.selectText.8=Typ vodotlače:
|
||||
watermark.selectText.9=Obrázok vodotlače:
|
||||
watermark.selectText.10=Convert PDF to PDF-Image
|
||||
watermark.submit=Pridať vodotlač
|
||||
watermark.type.1=Text
|
||||
watermark.type.2=Obrázok
|
||||
@@ -1125,3 +1130,9 @@ error.copyStack=Kopírovať sledovanie zásobníka
|
||||
error.githubSubmit=GitHub - Podajte tiket
|
||||
error.discordSubmit=Discord - Podajte príspevok na podporu
|
||||
|
||||
|
||||
#remove-image
|
||||
removeImage.title=Remove image
|
||||
removeImage.header=Remove image
|
||||
removeImage.removeImage=Remove image
|
||||
removeImage.submit=Remove image
|
||||
|
||||
@@ -461,6 +461,10 @@ home.BookToPDF.title=Book to PDF
|
||||
home.BookToPDF.desc=Converts Books/Comics formats to PDF using calibre
|
||||
BookToPDF.tags=Book,Comic,Calibre,Convert,manga,amazon,kindle
|
||||
|
||||
home.removeImagePdf.title=Remove image
|
||||
home.removeImagePdf.desc=Remove image from PDF to reduce file size
|
||||
removeImagePdf.tags=Remove Image,Page operations,Back end,server side
|
||||
|
||||
|
||||
###########################
|
||||
# #
|
||||
@@ -945,6 +949,7 @@ watermark.selectText.6=Visina razmaka (Razmak između svakog vodenog žiga verti
|
||||
watermark.selectText.7=Opačitost (0% - 100%):
|
||||
watermark.selectText.8=Tip vodenog žiga:
|
||||
watermark.selectText.9=Slika vodenog žiga:
|
||||
watermark.selectText.10=Convert PDF to PDF-Image
|
||||
watermark.submit=Dodaj vodeni žig
|
||||
watermark.type.1=Text
|
||||
watermark.type.2=Image
|
||||
@@ -1125,3 +1130,9 @@ error.copyStack=Copy Stack Trace
|
||||
error.githubSubmit=GitHub - Submit a ticket
|
||||
error.discordSubmit=Discord - Submit Support post
|
||||
|
||||
|
||||
#remove-image
|
||||
removeImage.title=Remove image
|
||||
removeImage.header=Remove image
|
||||
removeImage.removeImage=Remove image
|
||||
removeImage.submit=Remove image
|
||||
|
||||
@@ -461,6 +461,10 @@ home.BookToPDF.title=Book to PDF
|
||||
home.BookToPDF.desc=Converts Books/Comics formats to PDF using calibre
|
||||
BookToPDF.tags=Book,Comic,Calibre,Convert,manga,amazon,kindle
|
||||
|
||||
home.removeImagePdf.title=Remove image
|
||||
home.removeImagePdf.desc=Remove image from PDF to reduce file size
|
||||
removeImagePdf.tags=Remove Image,Page operations,Back end,server side
|
||||
|
||||
|
||||
###########################
|
||||
# #
|
||||
@@ -945,6 +949,7 @@ watermark.selectText.6=heightSpacer (mellanrum mellan varje vattenstämpel verti
|
||||
watermark.selectText.7=Opacitet (0% - 100%):
|
||||
watermark.selectText.8=Watermark Type:
|
||||
watermark.selectText.9=Watermark Image:
|
||||
watermark.selectText.10=Convert PDF to PDF-Image
|
||||
watermark.submit=Lägg till vattenstämpel
|
||||
watermark.type.1=Text
|
||||
watermark.type.2=Image
|
||||
@@ -1125,3 +1130,9 @@ error.copyStack=Copy Stack Trace
|
||||
error.githubSubmit=GitHub - Submit a ticket
|
||||
error.discordSubmit=Discord - Submit Support post
|
||||
|
||||
|
||||
#remove-image
|
||||
removeImage.title=Remove image
|
||||
removeImage.header=Remove image
|
||||
removeImage.removeImage=Remove image
|
||||
removeImage.submit=Remove image
|
||||
|
||||
@@ -461,6 +461,10 @@ home.BookToPDF.title=หนังสือเป็น PDF
|
||||
home.BookToPDF.desc=แปลงรูปแบบหนังสือ/การ์ตูนเป็น PDF โดยใช้ Calibre
|
||||
BookToPDF.tags=หนังสือ, การ์ตูน, Calibre, แปลง, มังงะ, amazon, kindle
|
||||
|
||||
home.removeImagePdf.title=Remove image
|
||||
home.removeImagePdf.desc=Remove image from PDF to reduce file size
|
||||
removeImagePdf.tags=Remove Image,Page operations,Back end,server side
|
||||
|
||||
|
||||
###########################
|
||||
# #
|
||||
@@ -945,6 +949,7 @@ watermark.selectText.6=ตัวเว้นระยะความสูง (
|
||||
watermark.selectText.7=ความทึบ (0% - 100%):
|
||||
watermark.selectText.8=ประเภทลายน้ำ:
|
||||
watermark.selectText.9=ภาพลายน้ำ:
|
||||
watermark.selectText.10=Convert PDF to PDF-Image
|
||||
watermark.submit=เพิ่มลายน้ำ
|
||||
watermark.type.1=ข้อความ
|
||||
watermark.type.2=ภาพ
|
||||
@@ -1125,3 +1130,9 @@ error.copyStack=คัดลอก Stack Trace
|
||||
error.githubSubmit=GitHub - ส่งตั๋ว
|
||||
error.discordSubmit=Discord - ส่งโพสต์การสนับสนุน
|
||||
|
||||
|
||||
#remove-image
|
||||
removeImage.title=Remove image
|
||||
removeImage.header=Remove image
|
||||
removeImage.removeImage=Remove image
|
||||
removeImage.submit=Remove image
|
||||
|
||||
@@ -461,6 +461,10 @@ home.BookToPDF.title=Kitaptan PDF'ye
|
||||
home.BookToPDF.desc=calibre kullanarak Kitap/Karikatür formatlarını PDF'ye dönüştürür
|
||||
BookToPDF.tags=Kitap,Çizgi Roman,Calibre,Dönüştür,manga,amazon,kindle,epub,mobi,azw3,docx,rtf,txt,html,lit,fb2,pdb,lrf
|
||||
|
||||
home.removeImagePdf.title=Remove image
|
||||
home.removeImagePdf.desc=Remove image from PDF to reduce file size
|
||||
removeImagePdf.tags=Remove Image,Page operations,Back end,server side
|
||||
|
||||
|
||||
###########################
|
||||
# #
|
||||
@@ -945,6 +949,7 @@ watermark.selectText.6=yükseklikBoşluk (Dikeyde her filigran arasında boşluk
|
||||
watermark.selectText.7=Opaklık (0% - 100%):
|
||||
watermark.selectText.8=Filigran Türü:
|
||||
watermark.selectText.9=Filigran Resmi:
|
||||
watermark.selectText.10=Convert PDF to PDF-Image
|
||||
watermark.submit=Filigran Ekle
|
||||
watermark.type.1=Metin
|
||||
watermark.type.2=Resim
|
||||
@@ -1125,3 +1130,9 @@ error.copyStack=Yığın İzini Kopyala
|
||||
error.githubSubmit=GitHub - Hata gönderin
|
||||
error.discordSubmit=Discord - Destek gönderisi gönderin
|
||||
|
||||
|
||||
#remove-image
|
||||
removeImage.title=Remove image
|
||||
removeImage.header=Remove image
|
||||
removeImage.removeImage=Remove image
|
||||
removeImage.submit=Remove image
|
||||
|
||||
@@ -461,6 +461,10 @@ home.BookToPDF.title=Книга у PDF
|
||||
home.BookToPDF.desc=Конвертує формати книги/комікса у PDF за допомогою calibre
|
||||
BookToPDF.tags=Book,Comic,Calibre,Convert,manga,amazon,kindle
|
||||
|
||||
home.removeImagePdf.title=Remove image
|
||||
home.removeImagePdf.desc=Remove image from PDF to reduce file size
|
||||
removeImagePdf.tags=Remove Image,Page operations,Back end,server side
|
||||
|
||||
|
||||
###########################
|
||||
# #
|
||||
@@ -945,6 +949,7 @@ watermark.selectText.6=heightSpacer (проміжок між кожним вод
|
||||
watermark.selectText.7=Непрозорість (0% - 100%):
|
||||
watermark.selectText.8=Тип водяного знаку:
|
||||
watermark.selectText.9=Зображення водяного знаку:
|
||||
watermark.selectText.10=Convert PDF to PDF-Image
|
||||
watermark.submit=Додати водяний знак
|
||||
watermark.type.1=Текст
|
||||
watermark.type.2=Зображення
|
||||
@@ -1125,3 +1130,9 @@ error.copyStack=Скопіювати стек викликів
|
||||
error.githubSubmit=GitHub - Надіслати запит
|
||||
error.discordSubmit=Discord - Надіслати повідомлення підтримки
|
||||
|
||||
|
||||
#remove-image
|
||||
removeImage.title=Remove image
|
||||
removeImage.header=Remove image
|
||||
removeImage.removeImage=Remove image
|
||||
removeImage.submit=Remove image
|
||||
|
||||
1138
src/main/resources/messages_vi_VN.properties
Normal file
1138
src/main/resources/messages_vi_VN.properties
Normal file
File diff suppressed because it is too large
Load Diff
@@ -192,21 +192,21 @@ adminUserSettings.changeUserRole=更改用户角色
|
||||
adminUserSettings.authenticated=已验证
|
||||
|
||||
|
||||
database.title=Database Import/Export
|
||||
database.header=Database Import/Export
|
||||
database.fileName=File Name
|
||||
database.creationDate=Creation Date
|
||||
database.fileSize=File Size
|
||||
database.deleteBackupFile=Delete Backup File
|
||||
database.importBackupFile=Import Backup File
|
||||
database.downloadBackupFile=Download Backup File
|
||||
database.info_1=When importing data, it is crucial to ensure the correct structure. If you are unsure of what you are doing, seek advice and support from a professional. An error in the structure can cause application malfunctions, up to and including the complete inability to run the application.
|
||||
database.info_2=The file name does not matter when uploading. It will be renamed afterward to follow the format backup_user_yyyyMMddHHmm.sql, ensuring a consistent naming convention.
|
||||
database.submit=Import Backup
|
||||
database.importIntoDatabaseSuccessed=Import into database successed
|
||||
database.fileNotFound=File not Found
|
||||
database.fileNullOrEmpty=File must not be null or empty
|
||||
database.failedImportFile=Failed Import File
|
||||
database.title=数据库 导入/导出
|
||||
database.header=数据库 导入/导出
|
||||
database.fileName=文件名
|
||||
database.creationDate=创建时间
|
||||
database.fileSize=文件大小
|
||||
database.deleteBackupFile=删除备份文件
|
||||
database.importBackupFile=导入备份文件
|
||||
database.downloadBackupFile=下载备份文件
|
||||
database.info_1=导入数据时,确保结构正确至关重要。如果您不确定自己在做什么,请寻求专业人士的建议和支持。结构错误会导致应用程序故障,甚至完全无法运行应用程序。
|
||||
database.info_2=上传文件时,文件名并不重要。上传后,文件名将重命名为 backup_user_yyyyMMddHHmm.sql,以确保命名规范的一致性。
|
||||
database.submit=导入备份
|
||||
database.importIntoDatabaseSuccessed=导入数据库成功
|
||||
database.fileNotFound=未找到文件
|
||||
database.fileNullOrEmpty=文件不能为空
|
||||
database.failedImportFile=导入文件失败
|
||||
|
||||
#############
|
||||
# HOME-PAGE #
|
||||
@@ -461,6 +461,10 @@ home.BookToPDF.title=电子书转PDF
|
||||
home.BookToPDF.desc=使用Calibre将电子书/漫画转换成PDF
|
||||
BookToPDF.tags=电子书、漫画、Calibre、转换、日本漫画、亚马逊、kindle
|
||||
|
||||
home.removeImagePdf.title=Remove image
|
||||
home.removeImagePdf.desc=Remove image from PDF to reduce file size
|
||||
removeImagePdf.tags=Remove Image,Page operations,Back end,server side
|
||||
|
||||
|
||||
###########################
|
||||
# #
|
||||
@@ -945,6 +949,7 @@ watermark.selectText.6=垂直间距(每个水印之间的垂直距离):
|
||||
watermark.selectText.7=透明度(0% - 100%):
|
||||
watermark.selectText.8=水印类型:
|
||||
watermark.selectText.9=水印图片:
|
||||
watermark.selectText.10=Convert PDF to PDF-Image
|
||||
watermark.submit=添加水印
|
||||
watermark.type.1=文字
|
||||
watermark.type.2=图片
|
||||
@@ -1125,3 +1130,9 @@ error.copyStack=复制堆栈跟踪
|
||||
error.githubSubmit=GitHub - 提交工单
|
||||
error.discordSubmit=Discord - 提交支持帖子
|
||||
|
||||
|
||||
#remove-image
|
||||
removeImage.title=Remove image
|
||||
removeImage.header=Remove image
|
||||
removeImage.removeImage=Remove image
|
||||
removeImage.submit=Remove image
|
||||
|
||||
@@ -9,7 +9,7 @@ multiPdfPrompt=選擇多個 PDF 檔案
|
||||
multiPdfDropPrompt=選擇(或拖放)所有需要的 PDF 檔案
|
||||
imgPrompt=選擇圖片
|
||||
genericSubmit=送出
|
||||
processTimeWarning=警告:此過程可能需要長達一分鐘,具體取決於檔案大小
|
||||
processTimeWarning=警告:此過程可能長達一分鐘,具體取決於檔案大小
|
||||
pageOrderPrompt=自訂頁面順序(輸入以逗號分隔的頁碼或函式,如 2n+1):
|
||||
pageSelectionPrompt=自訂頁面選擇(輸入以逗號分隔的頁碼 1、5、6 或 2n+1 等函數的清單):
|
||||
goToPage=前往
|
||||
@@ -66,7 +66,7 @@ error=錯誤
|
||||
oops=哎呀!
|
||||
help=幫助
|
||||
goHomepage=前往首頁
|
||||
joinDiscord=加入我們的 Discord 服務器
|
||||
joinDiscord=加入我們的 Discord 伺服器
|
||||
seeDockerHub=查看 Docker Hub
|
||||
visitGithub=訪問 GitHub 存儲庫
|
||||
donate=捐贈
|
||||
@@ -108,7 +108,7 @@ pipelineOptions.validateButton=驗證
|
||||
# NAVBAR #
|
||||
#############
|
||||
navbar.favorite=我的最愛
|
||||
navbar.darkmode=暗黑模式
|
||||
navbar.darkmode=深色模式
|
||||
navbar.language=語言
|
||||
navbar.settings=設定
|
||||
navbar.allTools=工具
|
||||
@@ -125,7 +125,7 @@ navbar.sections.edit=檢視與編輯
|
||||
#############
|
||||
settings.title=設定
|
||||
settings.update=有更新可用
|
||||
settings.updateAvailable=當前版本為 {0}。歡迎您更新至最新版 ({1})。。
|
||||
settings.updateAvailable=當前版本為 {0}。歡迎你更新至最新版 ({1})。。
|
||||
settings.appVersion=應用版本:
|
||||
settings.downloadOption.title=選擇下載選項(對於單一檔案非壓縮下載):
|
||||
settings.downloadOption.1=在同一視窗中開啟
|
||||
@@ -139,8 +139,8 @@ settings.cacheInputs.name=輸入檔案下載
|
||||
settings.cacheInputs.help=開啟記住先前的輸入,做為日後使用
|
||||
|
||||
changeCreds.title=變更憑證
|
||||
changeCreds.header=更新您的帳戶詳細資訊
|
||||
changeCreds.changePassword=您使用的是預設登錄認證。請輸入新密碼
|
||||
changeCreds.header=更新你的帳戶詳細資訊
|
||||
changeCreds.changePassword=你使用的是預設登錄認證。請輸入新密碼
|
||||
changeCreds.newUsername=新使用者名稱
|
||||
changeCreds.oldPassword=目前密碼
|
||||
changeCreds.newPassword=新密碼
|
||||
@@ -161,7 +161,7 @@ account.newPassword=新密碼
|
||||
account.changePassword=修改密碼
|
||||
account.confirmNewPassword=確認新密碼
|
||||
account.signOut=登出
|
||||
account.yourApiKey=您的 API 金鑰
|
||||
account.yourApiKey=你的 API 金鑰
|
||||
account.syncTitle=將瀏覽器設定與帳戶同步
|
||||
account.settingsCompare=設定比較:
|
||||
account.property=屬性
|
||||
@@ -192,26 +192,26 @@ adminUserSettings.changeUserRole=更改使用者身份
|
||||
adminUserSettings.authenticated=已驗證
|
||||
|
||||
|
||||
database.title=Database Import/Export
|
||||
database.header=Database Import/Export
|
||||
database.fileName=File Name
|
||||
database.creationDate=Creation Date
|
||||
database.fileSize=File Size
|
||||
database.deleteBackupFile=Delete Backup File
|
||||
database.importBackupFile=Import Backup File
|
||||
database.downloadBackupFile=Download Backup File
|
||||
database.info_1=When importing data, it is crucial to ensure the correct structure. If you are unsure of what you are doing, seek advice and support from a professional. An error in the structure can cause application malfunctions, up to and including the complete inability to run the application.
|
||||
database.info_2=The file name does not matter when uploading. It will be renamed afterward to follow the format backup_user_yyyyMMddHHmm.sql, ensuring a consistent naming convention.
|
||||
database.submit=Import Backup
|
||||
database.importIntoDatabaseSuccessed=Import into database successed
|
||||
database.fileNotFound=File not Found
|
||||
database.fileNullOrEmpty=File must not be null or empty
|
||||
database.failedImportFile=Failed Import File
|
||||
database.title=資料庫匯入/匯出
|
||||
database.header=資料庫匯入/匯出
|
||||
database.fileName=檔案名稱
|
||||
database.creationDate=建立日期
|
||||
database.fileSize=檔案大小
|
||||
database.deleteBackupFile=刪除備份檔案
|
||||
database.importBackupFile=匯入備份檔案
|
||||
database.downloadBackupFile=下載備份檔案
|
||||
database.info_1=在匯入資料時,確保正確的結構是至關重要的。如果你不確定自己在做什麼,請尋求專業人士的建議和支持。結構錯誤可能會導致應用程式故障,甚至完全無法運行。
|
||||
database.info_2=上傳時檔案名稱無關緊要。上傳後將重新命名為 backup_user_yyyyMMddHHmm.sql 格式,以確保命名規範一致。
|
||||
database.submit=匯入備份
|
||||
database.importIntoDatabaseSuccessed=成功匯入資料庫
|
||||
database.fileNotFound=檔案未找到
|
||||
database.fileNullOrEmpty=檔案不能為空或空白
|
||||
database.failedImportFile=匯入檔案失敗
|
||||
|
||||
#############
|
||||
# HOME-PAGE #
|
||||
#############
|
||||
home.desc=您的本地主機一站式 PDF 需求解決方案。
|
||||
home.desc=你的本地主機一站式 PDF 需求解決方案。
|
||||
home.searchBar=搜尋功能...
|
||||
|
||||
|
||||
@@ -232,7 +232,7 @@ home.split.desc=將 PDF 分割為多個文件
|
||||
split.tags=頁面操作,劃分,多頁,剪下,伺服器端
|
||||
|
||||
home.rotate.title=旋轉
|
||||
home.rotate.desc=輕鬆旋轉您的 PDF。
|
||||
home.rotate.desc=輕鬆旋轉你的 PDF。
|
||||
rotate.tags=伺服器端
|
||||
|
||||
|
||||
@@ -254,24 +254,24 @@ home.addImage.desc=在 PDF 的指定位置新增圖片
|
||||
addImage.tags=img,jpg,圖片,照片
|
||||
|
||||
home.watermark.title=新增浮水印
|
||||
home.watermark.desc=在您的 PDF 檔案中新增自訂浮水印。
|
||||
home.watermark.desc=在你的 PDF 檔案中新增自訂浮水印。
|
||||
watermark.tags=文字,重複,標籤,自有,版權,商標,img,jpg,圖片,照片
|
||||
|
||||
home.permissions.title=修改權限
|
||||
home.permissions.desc=修改您的 PDF 檔案權限
|
||||
home.permissions.desc=修改你的 PDF 檔案權限
|
||||
permissions.tags=讀取,寫入,編輯,列印
|
||||
|
||||
|
||||
home.removePages.title=移除
|
||||
home.removePages.desc=從您的 PDF 檔案中刪除不需要的頁面。
|
||||
home.removePages.desc=從你的 PDF 檔案中刪除不需要的頁面。
|
||||
removePages.tags=移除頁面,刪除頁面
|
||||
|
||||
home.addPassword.title=新增密碼
|
||||
home.addPassword.desc=用密碼加密您的 PDF 檔案。
|
||||
home.addPassword.desc=用密碼加密你的 PDF 檔案。
|
||||
addPassword.tags=安全,安全性
|
||||
|
||||
home.removePassword.title=移除密碼
|
||||
home.removePassword.desc=從您的 PDF 檔案中移除密碼保護。
|
||||
home.removePassword.desc=從你的 PDF 檔案中移除密碼保護。
|
||||
removePassword.tags=安全,解密,安全性,取消密碼,刪除密碼
|
||||
|
||||
home.compressPdfs.title=壓縮
|
||||
@@ -461,6 +461,10 @@ home.BookToPDF.title=電子書轉 PDF
|
||||
home.BookToPDF.desc=使用 calibre 將書籍/漫畫格式轉換為 PDF
|
||||
BookToPDF.tags=電子書,漫畫,Calibre,轉換,日本漫畫,亞馬遜,kindle
|
||||
|
||||
home.removeImagePdf.title=Remove image
|
||||
home.removeImagePdf.desc=Remove image from PDF to reduce file size
|
||||
removeImagePdf.tags=Remove Image,Page operations,Back end,server side
|
||||
|
||||
|
||||
###########################
|
||||
# #
|
||||
@@ -473,7 +477,7 @@ login.header=登入
|
||||
login.signin=登入
|
||||
login.rememberme=記住我
|
||||
login.invalid=使用者名稱或密碼無效。
|
||||
login.locked=您的帳戶已被鎖定。
|
||||
login.locked=你的帳戶已被鎖定。
|
||||
login.signinTitle=請登入
|
||||
login.ssoSignIn=透過織網單一簽入
|
||||
login.oauth2AutoCreateDisabled=OAuth 2.0 自動建立使用者已停用
|
||||
@@ -664,15 +668,15 @@ scalePages.submit=送出
|
||||
|
||||
#certSign
|
||||
certSign.title=憑證簽章
|
||||
certSign.header=使用您的憑證簽章(進行中)
|
||||
certSign.header=使用你的憑證簽章(進行中)
|
||||
certSign.selectPDF=選擇要簽章的 PDF 檔案:
|
||||
certSign.jksNote=注意:如果您的證書類型未在下面列出,請使用 keytool 命令行工具將其轉換為 Java Keystore (.jks) 檔。 然後,選擇下面的 .jks 文件選項。
|
||||
certSign.selectKey=選擇您的私鑰文件(PKCS#8 格式,可能是 .pem 或 .der):
|
||||
certSign.selectCert=選擇您的憑證文件(X.509 格式,可能是 .pem 或 .der):
|
||||
certSign.selectP12=選擇您的 PKCS#12 金鑰庫文件(.p12 或 .pfx)(可選,如果提供,它應包含您的私鑰和憑證):
|
||||
certSign.jksNote=注意:如果你的證書類型未在下面列出,請使用 keytool 命令行工具將其轉換為 Java Keystore (.jks) 檔。 然後,選擇下面的 .jks 文件選項。
|
||||
certSign.selectKey=選擇你的私鑰文件(PKCS#8 格式,可能是 .pem 或 .der):
|
||||
certSign.selectCert=選擇你的憑證文件(X.509 格式,可能是 .pem 或 .der):
|
||||
certSign.selectP12=選擇你的 PKCS#12 金鑰庫文件(.p12 或 .pfx)(可選,如果提供,它應包含你的私鑰和憑證):
|
||||
certSign.selectJKS=選擇你的 Java Keystore 檔 (.jks 或 .keystore):
|
||||
certSign.certType=憑證類型
|
||||
certSign.password=輸入您的金鑰庫或私鑰密碼(如果有):
|
||||
certSign.password=輸入你的金鑰庫或私鑰密碼(如果有):
|
||||
certSign.showSig=顯示簽章
|
||||
certSign.reason=原因
|
||||
certSign.location=位置
|
||||
@@ -871,7 +875,7 @@ rotate.submit=旋轉
|
||||
#split-pdfs
|
||||
split.title=分割 PDF
|
||||
split.header=分割 PDF
|
||||
split.desc.1=您選擇的數字是您希望進行分割的頁碼
|
||||
split.desc.1=你選擇的數字是你希望進行分割的頁碼
|
||||
split.desc.2=因此,選擇 1,3,7-9 將會將一個 10 頁的文件分割為 6 個單獨的 PDF,包括:
|
||||
split.desc.3=文件 #1:頁面 1
|
||||
split.desc.4=文件 #2:頁面 2 和 3
|
||||
@@ -945,6 +949,7 @@ watermark.selectText.6=heightSpacer(每個浮水印之間的垂直間距):
|
||||
watermark.selectText.7=不透明度(0% - 100%):
|
||||
watermark.selectText.8=浮水印類型:
|
||||
watermark.selectText.9=浮水印影像:
|
||||
watermark.selectText.10=Convert PDF to PDF-Image
|
||||
watermark.submit=新增浮水印
|
||||
watermark.type.1=文字
|
||||
watermark.type.2=圖片
|
||||
@@ -978,7 +983,7 @@ removePassword.submit=移除
|
||||
#changeMetadata
|
||||
changeMetadata.title=標題:
|
||||
changeMetadata.header=變更中繼資料
|
||||
changeMetadata.selectText.1=請編輯您希望變更的變數
|
||||
changeMetadata.selectText.1=請編輯你希望變更的變數
|
||||
changeMetadata.selectText.2=刪除所有中繼資料
|
||||
changeMetadata.selectText.3=顯示自訂中繼資料:
|
||||
changeMetadata.author=作者:
|
||||
@@ -1103,13 +1108,13 @@ licenses.version=版本
|
||||
licenses.license=許可證
|
||||
|
||||
#survey
|
||||
survey.nav=Survey
|
||||
survey.title=Stirling-PDF Survey
|
||||
survey.description=Stirling-PDF has no tracking so we want to hear from our users to improve Stirling-PDF!
|
||||
survey.please=Please consider taking our survey!
|
||||
survey.disabled=(Survey popup will be disabled in following updates but available at foot of page)
|
||||
survey.button=Take Survey
|
||||
survey.dontShowAgain=Don't show again
|
||||
survey.nav=問卷調查
|
||||
survey.title=Stirling-PDF 問卷調查
|
||||
survey.description=Stirling-PDF 沒有追蹤功能,所以我們希望聽取用戶的意見來改進 Stirling-PDF!
|
||||
survey.please=請考慮參加我們的問卷調查!
|
||||
survey.disabled=(問卷調查彈出窗口將在後續更新中停用,但仍可在頁腳處使用)
|
||||
survey.button=參加問卷調查
|
||||
survey.dontShowAgain=不要再次顯示
|
||||
|
||||
|
||||
#error
|
||||
@@ -1125,3 +1130,9 @@ error.copyStack=複製堆疊追蹤
|
||||
error.githubSubmit=GitHub - 提交工單
|
||||
error.discordSubmit=Discord - 提交支援帖子
|
||||
|
||||
|
||||
#remove-image
|
||||
removeImage.title=Remove image
|
||||
removeImage.header=Remove image
|
||||
removeImage.removeImage=Remove image
|
||||
removeImage.submit=Remove image
|
||||
|
||||
@@ -24,56 +24,56 @@
|
||||
{
|
||||
"moduleName": "com.fasterxml.jackson.core:jackson-annotations",
|
||||
"moduleUrl": "https://github.com/FasterXML/jackson",
|
||||
"moduleVersion": "2.17.1",
|
||||
"moduleVersion": "2.17.2",
|
||||
"moduleLicense": "The Apache Software License, Version 2.0",
|
||||
"moduleLicenseUrl": "https://www.apache.org/licenses/LICENSE-2.0.txt"
|
||||
},
|
||||
{
|
||||
"moduleName": "com.fasterxml.jackson.core:jackson-core",
|
||||
"moduleUrl": "https://github.com/FasterXML/jackson-core",
|
||||
"moduleVersion": "2.17.1",
|
||||
"moduleVersion": "2.17.2",
|
||||
"moduleLicense": "The Apache Software License, Version 2.0",
|
||||
"moduleLicenseUrl": "https://www.apache.org/licenses/LICENSE-2.0.txt"
|
||||
},
|
||||
{
|
||||
"moduleName": "com.fasterxml.jackson.core:jackson-databind",
|
||||
"moduleUrl": "https://github.com/FasterXML/jackson",
|
||||
"moduleVersion": "2.17.1",
|
||||
"moduleVersion": "2.17.2",
|
||||
"moduleLicense": "The Apache Software License, Version 2.0",
|
||||
"moduleLicenseUrl": "https://www.apache.org/licenses/LICENSE-2.0.txt"
|
||||
},
|
||||
{
|
||||
"moduleName": "com.fasterxml.jackson.dataformat:jackson-dataformat-yaml",
|
||||
"moduleUrl": "https://github.com/FasterXML/jackson-dataformats-text",
|
||||
"moduleVersion": "2.17.1",
|
||||
"moduleVersion": "2.17.2",
|
||||
"moduleLicense": "The Apache Software License, Version 2.0",
|
||||
"moduleLicenseUrl": "https://www.apache.org/licenses/LICENSE-2.0.txt"
|
||||
},
|
||||
{
|
||||
"moduleName": "com.fasterxml.jackson.datatype:jackson-datatype-jdk8",
|
||||
"moduleUrl": "https://github.com/FasterXML/jackson-modules-java8/jackson-datatype-jdk8",
|
||||
"moduleVersion": "2.17.1",
|
||||
"moduleVersion": "2.17.2",
|
||||
"moduleLicense": "The Apache Software License, Version 2.0",
|
||||
"moduleLicenseUrl": "http://www.apache.org/licenses/LICENSE-2.0.txt"
|
||||
},
|
||||
{
|
||||
"moduleName": "com.fasterxml.jackson.datatype:jackson-datatype-jsr310",
|
||||
"moduleUrl": "https://github.com/FasterXML/jackson-modules-java8/jackson-datatype-jsr310",
|
||||
"moduleVersion": "2.17.1",
|
||||
"moduleVersion": "2.17.2",
|
||||
"moduleLicense": "The Apache Software License, Version 2.0",
|
||||
"moduleLicenseUrl": "http://www.apache.org/licenses/LICENSE-2.0.txt"
|
||||
},
|
||||
{
|
||||
"moduleName": "com.fasterxml.jackson.module:jackson-module-parameter-names",
|
||||
"moduleUrl": "https://github.com/FasterXML/jackson-modules-java8/jackson-module-parameter-names",
|
||||
"moduleVersion": "2.17.1",
|
||||
"moduleVersion": "2.17.2",
|
||||
"moduleLicense": "The Apache Software License, Version 2.0",
|
||||
"moduleLicenseUrl": "http://www.apache.org/licenses/LICENSE-2.0.txt"
|
||||
},
|
||||
{
|
||||
"moduleName": "com.fasterxml.jackson:jackson-bom",
|
||||
"moduleUrl": "https://github.com/FasterXML/jackson-bom",
|
||||
"moduleVersion": "2.17.1",
|
||||
"moduleVersion": "2.17.2",
|
||||
"moduleLicense": "The Apache Software License, Version 2.0",
|
||||
"moduleLicenseUrl": "http://www.apache.org/licenses/LICENSE-2.0.txt"
|
||||
},
|
||||
@@ -194,13 +194,13 @@
|
||||
},
|
||||
{
|
||||
"moduleName": "com.twelvemonkeys.imageio:imageio-batik",
|
||||
"moduleVersion": "3.10.1",
|
||||
"moduleVersion": "3.11.0",
|
||||
"moduleLicense": "The BSD License",
|
||||
"moduleLicenseUrl": "https://github.com/haraldk/TwelveMonkeys#license"
|
||||
},
|
||||
{
|
||||
"moduleName": "com.twelvemonkeys.imageio:imageio-bmp",
|
||||
"moduleVersion": "3.10.1",
|
||||
"moduleVersion": "3.11.0",
|
||||
"moduleLicense": "The BSD License",
|
||||
"moduleLicenseUrl": "https://github.com/haraldk/TwelveMonkeys#license"
|
||||
},
|
||||
@@ -224,13 +224,13 @@
|
||||
},
|
||||
{
|
||||
"moduleName": "com.twelvemonkeys.imageio:imageio-tiff",
|
||||
"moduleVersion": "3.10.1",
|
||||
"moduleVersion": "3.11.0",
|
||||
"moduleLicense": "The BSD License",
|
||||
"moduleLicenseUrl": "https://github.com/haraldk/TwelveMonkeys#license"
|
||||
},
|
||||
{
|
||||
"moduleName": "com.twelvemonkeys.imageio:imageio-webp",
|
||||
"moduleVersion": "3.10.1",
|
||||
"moduleVersion": "3.11.0",
|
||||
"moduleLicense": "The BSD License",
|
||||
"moduleLicenseUrl": "https://github.com/haraldk/TwelveMonkeys#license"
|
||||
},
|
||||
@@ -279,7 +279,7 @@
|
||||
{
|
||||
"moduleName": "io.micrometer:micrometer-commons",
|
||||
"moduleUrl": "https://github.com/micrometer-metrics/micrometer",
|
||||
"moduleVersion": "1.13.0",
|
||||
"moduleVersion": "1.13.2",
|
||||
"moduleLicense": "The Apache Software License, Version 2.0",
|
||||
"moduleLicenseUrl": "http://www.apache.org/licenses/LICENSE-2.0.txt"
|
||||
},
|
||||
@@ -293,14 +293,14 @@
|
||||
{
|
||||
"moduleName": "io.micrometer:micrometer-jakarta9",
|
||||
"moduleUrl": "https://github.com/micrometer-metrics/micrometer",
|
||||
"moduleVersion": "1.13.0",
|
||||
"moduleVersion": "1.13.2",
|
||||
"moduleLicense": "The Apache Software License, Version 2.0",
|
||||
"moduleLicenseUrl": "http://www.apache.org/licenses/LICENSE-2.0.txt"
|
||||
},
|
||||
{
|
||||
"moduleName": "io.micrometer:micrometer-observation",
|
||||
"moduleUrl": "https://github.com/micrometer-metrics/micrometer",
|
||||
"moduleVersion": "1.13.0",
|
||||
"moduleVersion": "1.13.2",
|
||||
"moduleLicense": "The Apache Software License, Version 2.0",
|
||||
"moduleLicenseUrl": "http://www.apache.org/licenses/LICENSE-2.0.txt"
|
||||
},
|
||||
@@ -424,7 +424,7 @@
|
||||
},
|
||||
{
|
||||
"moduleName": "net.bytebuddy:byte-buddy",
|
||||
"moduleVersion": "1.14.16",
|
||||
"moduleVersion": "1.14.18",
|
||||
"moduleLicense": "Apache License, Version 2.0",
|
||||
"moduleLicenseUrl": "https://www.apache.org/licenses/LICENSE-2.0.txt"
|
||||
},
|
||||
@@ -513,7 +513,7 @@
|
||||
{
|
||||
"moduleName": "org.apache.tomcat.embed:tomcat-embed-el",
|
||||
"moduleUrl": "https://tomcat.apache.org/",
|
||||
"moduleVersion": "10.1.24",
|
||||
"moduleVersion": "10.1.26",
|
||||
"moduleLicense": "Apache License, Version 2.0",
|
||||
"moduleLicenseUrl": "http://www.apache.org/licenses/LICENSE-2.0.txt"
|
||||
},
|
||||
@@ -533,7 +533,7 @@
|
||||
{
|
||||
"moduleName": "org.aspectj:aspectjweaver",
|
||||
"moduleUrl": "https://www.eclipse.org/aspectj/",
|
||||
"moduleVersion": "1.9.22",
|
||||
"moduleVersion": "1.9.22.1",
|
||||
"moduleLicense": "Eclipse Public License - v 2.0",
|
||||
"moduleLicenseUrl": "https://www.eclipse.org/org/documents/epl-2.0/EPL-2.0.txt"
|
||||
},
|
||||
@@ -587,182 +587,182 @@
|
||||
{
|
||||
"moduleName": "org.eclipse.jetty.ee10.websocket:jetty-ee10-websocket-jakarta-client",
|
||||
"moduleUrl": "https://eclipse.dev/jetty/",
|
||||
"moduleVersion": "12.0.9",
|
||||
"moduleVersion": "12.0.11",
|
||||
"moduleLicense": "Eclipse Public License - Version 2.0",
|
||||
"moduleLicenseUrl": "https://www.eclipse.org/legal/epl-2.0/"
|
||||
},
|
||||
{
|
||||
"moduleName": "org.eclipse.jetty.ee10.websocket:jetty-ee10-websocket-jakarta-common",
|
||||
"moduleUrl": "https://eclipse.dev/jetty/",
|
||||
"moduleVersion": "12.0.9",
|
||||
"moduleVersion": "12.0.11",
|
||||
"moduleLicense": "Eclipse Public License - Version 2.0",
|
||||
"moduleLicenseUrl": "https://www.eclipse.org/legal/epl-2.0/"
|
||||
},
|
||||
{
|
||||
"moduleName": "org.eclipse.jetty.ee10.websocket:jetty-ee10-websocket-jakarta-server",
|
||||
"moduleUrl": "https://eclipse.dev/jetty/",
|
||||
"moduleVersion": "12.0.9",
|
||||
"moduleVersion": "12.0.11",
|
||||
"moduleLicense": "Eclipse Public License - Version 2.0",
|
||||
"moduleLicenseUrl": "https://www.eclipse.org/legal/epl-2.0/"
|
||||
},
|
||||
{
|
||||
"moduleName": "org.eclipse.jetty.ee10.websocket:jetty-ee10-websocket-jetty-server",
|
||||
"moduleUrl": "https://eclipse.dev/jetty/",
|
||||
"moduleVersion": "12.0.9",
|
||||
"moduleVersion": "12.0.11",
|
||||
"moduleLicense": "Eclipse Public License - Version 2.0",
|
||||
"moduleLicenseUrl": "https://www.eclipse.org/legal/epl-2.0/"
|
||||
},
|
||||
{
|
||||
"moduleName": "org.eclipse.jetty.ee10.websocket:jetty-ee10-websocket-servlet",
|
||||
"moduleUrl": "https://eclipse.dev/jetty/",
|
||||
"moduleVersion": "12.0.9",
|
||||
"moduleVersion": "12.0.11",
|
||||
"moduleLicense": "Eclipse Public License - Version 2.0",
|
||||
"moduleLicenseUrl": "https://www.eclipse.org/legal/epl-2.0/"
|
||||
},
|
||||
{
|
||||
"moduleName": "org.eclipse.jetty.ee10:jetty-ee10-annotations",
|
||||
"moduleUrl": "https://eclipse.dev/jetty/",
|
||||
"moduleVersion": "12.0.9",
|
||||
"moduleVersion": "12.0.11",
|
||||
"moduleLicense": "Eclipse Public License - Version 2.0",
|
||||
"moduleLicenseUrl": "https://www.eclipse.org/legal/epl-2.0/"
|
||||
},
|
||||
{
|
||||
"moduleName": "org.eclipse.jetty.ee10:jetty-ee10-plus",
|
||||
"moduleUrl": "https://eclipse.dev/jetty/",
|
||||
"moduleVersion": "12.0.9",
|
||||
"moduleVersion": "12.0.11",
|
||||
"moduleLicense": "Eclipse Public License - Version 2.0",
|
||||
"moduleLicenseUrl": "https://www.eclipse.org/legal/epl-2.0/"
|
||||
},
|
||||
{
|
||||
"moduleName": "org.eclipse.jetty.ee10:jetty-ee10-servlet",
|
||||
"moduleUrl": "https://eclipse.dev/jetty/",
|
||||
"moduleVersion": "12.0.9",
|
||||
"moduleVersion": "12.0.11",
|
||||
"moduleLicense": "Eclipse Public License - Version 2.0",
|
||||
"moduleLicenseUrl": "https://www.eclipse.org/legal/epl-2.0/"
|
||||
},
|
||||
{
|
||||
"moduleName": "org.eclipse.jetty.ee10:jetty-ee10-servlets",
|
||||
"moduleUrl": "https://eclipse.dev/jetty/",
|
||||
"moduleVersion": "12.0.9",
|
||||
"moduleVersion": "12.0.11",
|
||||
"moduleLicense": "Eclipse Public License - Version 2.0",
|
||||
"moduleLicenseUrl": "https://www.eclipse.org/legal/epl-2.0/"
|
||||
},
|
||||
{
|
||||
"moduleName": "org.eclipse.jetty.ee10:jetty-ee10-webapp",
|
||||
"moduleUrl": "https://eclipse.dev/jetty/",
|
||||
"moduleVersion": "12.0.9",
|
||||
"moduleVersion": "12.0.11",
|
||||
"moduleLicense": "Eclipse Public License - Version 2.0",
|
||||
"moduleLicenseUrl": "https://www.eclipse.org/legal/epl-2.0/"
|
||||
},
|
||||
{
|
||||
"moduleName": "org.eclipse.jetty.websocket:jetty-websocket-core-client",
|
||||
"moduleUrl": "https://eclipse.dev/jetty/",
|
||||
"moduleVersion": "12.0.9",
|
||||
"moduleVersion": "12.0.11",
|
||||
"moduleLicense": "Eclipse Public License - Version 2.0",
|
||||
"moduleLicenseUrl": "https://www.eclipse.org/legal/epl-2.0/"
|
||||
},
|
||||
{
|
||||
"moduleName": "org.eclipse.jetty.websocket:jetty-websocket-core-common",
|
||||
"moduleUrl": "https://eclipse.dev/jetty/",
|
||||
"moduleVersion": "12.0.9",
|
||||
"moduleVersion": "12.0.11",
|
||||
"moduleLicense": "Eclipse Public License - Version 2.0",
|
||||
"moduleLicenseUrl": "https://www.eclipse.org/legal/epl-2.0/"
|
||||
},
|
||||
{
|
||||
"moduleName": "org.eclipse.jetty.websocket:jetty-websocket-core-server",
|
||||
"moduleUrl": "https://eclipse.dev/jetty/",
|
||||
"moduleVersion": "12.0.9",
|
||||
"moduleVersion": "12.0.11",
|
||||
"moduleLicense": "Eclipse Public License - Version 2.0",
|
||||
"moduleLicenseUrl": "https://www.eclipse.org/legal/epl-2.0/"
|
||||
},
|
||||
{
|
||||
"moduleName": "org.eclipse.jetty.websocket:jetty-websocket-jetty-api",
|
||||
"moduleUrl": "https://eclipse.dev/jetty/",
|
||||
"moduleVersion": "12.0.9",
|
||||
"moduleVersion": "12.0.11",
|
||||
"moduleLicense": "Eclipse Public License - Version 2.0",
|
||||
"moduleLicenseUrl": "https://www.eclipse.org/legal/epl-2.0/"
|
||||
},
|
||||
{
|
||||
"moduleName": "org.eclipse.jetty.websocket:jetty-websocket-jetty-common",
|
||||
"moduleUrl": "https://eclipse.dev/jetty/",
|
||||
"moduleVersion": "12.0.9",
|
||||
"moduleVersion": "12.0.11",
|
||||
"moduleLicense": "Eclipse Public License - Version 2.0",
|
||||
"moduleLicenseUrl": "https://www.eclipse.org/legal/epl-2.0/"
|
||||
},
|
||||
{
|
||||
"moduleName": "org.eclipse.jetty:jetty-alpn-client",
|
||||
"moduleUrl": "https://eclipse.dev/jetty/",
|
||||
"moduleVersion": "12.0.9",
|
||||
"moduleVersion": "12.0.11",
|
||||
"moduleLicense": "Eclipse Public License - Version 2.0",
|
||||
"moduleLicenseUrl": "https://www.eclipse.org/legal/epl-2.0/"
|
||||
},
|
||||
{
|
||||
"moduleName": "org.eclipse.jetty:jetty-client",
|
||||
"moduleUrl": "https://eclipse.dev/jetty/",
|
||||
"moduleVersion": "12.0.9",
|
||||
"moduleVersion": "12.0.11",
|
||||
"moduleLicense": "Eclipse Public License - Version 2.0",
|
||||
"moduleLicenseUrl": "https://www.eclipse.org/legal/epl-2.0/"
|
||||
},
|
||||
{
|
||||
"moduleName": "org.eclipse.jetty:jetty-ee",
|
||||
"moduleUrl": "https://eclipse.dev/jetty/",
|
||||
"moduleVersion": "12.0.9",
|
||||
"moduleVersion": "12.0.11",
|
||||
"moduleLicense": "Eclipse Public License - Version 2.0",
|
||||
"moduleLicenseUrl": "https://www.eclipse.org/legal/epl-2.0/"
|
||||
},
|
||||
{
|
||||
"moduleName": "org.eclipse.jetty:jetty-http",
|
||||
"moduleUrl": "https://eclipse.dev/jetty/",
|
||||
"moduleVersion": "12.0.9",
|
||||
"moduleVersion": "12.0.11",
|
||||
"moduleLicense": "Eclipse Public License - Version 2.0",
|
||||
"moduleLicenseUrl": "https://www.eclipse.org/legal/epl-2.0/"
|
||||
},
|
||||
{
|
||||
"moduleName": "org.eclipse.jetty:jetty-io",
|
||||
"moduleUrl": "https://eclipse.dev/jetty/",
|
||||
"moduleVersion": "12.0.9",
|
||||
"moduleVersion": "12.0.11",
|
||||
"moduleLicense": "Eclipse Public License - Version 2.0",
|
||||
"moduleLicenseUrl": "https://www.eclipse.org/legal/epl-2.0/"
|
||||
},
|
||||
{
|
||||
"moduleName": "org.eclipse.jetty:jetty-plus",
|
||||
"moduleUrl": "https://eclipse.dev/jetty/",
|
||||
"moduleVersion": "12.0.9",
|
||||
"moduleVersion": "12.0.11",
|
||||
"moduleLicense": "Eclipse Public License - Version 2.0",
|
||||
"moduleLicenseUrl": "https://www.eclipse.org/legal/epl-2.0/"
|
||||
},
|
||||
{
|
||||
"moduleName": "org.eclipse.jetty:jetty-security",
|
||||
"moduleUrl": "https://eclipse.dev/jetty/",
|
||||
"moduleVersion": "12.0.9",
|
||||
"moduleVersion": "12.0.11",
|
||||
"moduleLicense": "Eclipse Public License - Version 2.0",
|
||||
"moduleLicenseUrl": "https://www.eclipse.org/legal/epl-2.0/"
|
||||
},
|
||||
{
|
||||
"moduleName": "org.eclipse.jetty:jetty-server",
|
||||
"moduleUrl": "https://eclipse.dev/jetty/",
|
||||
"moduleVersion": "12.0.9",
|
||||
"moduleVersion": "12.0.11",
|
||||
"moduleLicense": "Eclipse Public License - Version 2.0",
|
||||
"moduleLicenseUrl": "https://www.eclipse.org/legal/epl-2.0/"
|
||||
},
|
||||
{
|
||||
"moduleName": "org.eclipse.jetty:jetty-session",
|
||||
"moduleUrl": "https://eclipse.dev/jetty/",
|
||||
"moduleVersion": "12.0.9",
|
||||
"moduleVersion": "12.0.11",
|
||||
"moduleLicense": "Eclipse Public License - Version 2.0",
|
||||
"moduleLicenseUrl": "https://www.eclipse.org/legal/epl-2.0/"
|
||||
},
|
||||
{
|
||||
"moduleName": "org.eclipse.jetty:jetty-util",
|
||||
"moduleUrl": "https://eclipse.dev/jetty/",
|
||||
"moduleVersion": "12.0.9",
|
||||
"moduleVersion": "12.0.11",
|
||||
"moduleLicense": "Eclipse Public License - Version 2.0",
|
||||
"moduleLicenseUrl": "https://www.eclipse.org/legal/epl-2.0/"
|
||||
},
|
||||
{
|
||||
"moduleName": "org.eclipse.jetty:jetty-xml",
|
||||
"moduleUrl": "https://eclipse.dev/jetty/",
|
||||
"moduleVersion": "12.0.9",
|
||||
"moduleVersion": "12.0.11",
|
||||
"moduleLicense": "Eclipse Public License - Version 2.0",
|
||||
"moduleLicenseUrl": "https://www.eclipse.org/legal/epl-2.0/"
|
||||
},
|
||||
@@ -878,28 +878,28 @@
|
||||
{
|
||||
"moduleName": "org.springframework.boot:spring-boot",
|
||||
"moduleUrl": "https://spring.io/projects/spring-boot",
|
||||
"moduleVersion": "3.3.0",
|
||||
"moduleVersion": "3.3.2",
|
||||
"moduleLicense": "Apache License, Version 2.0",
|
||||
"moduleLicenseUrl": "https://www.apache.org/licenses/LICENSE-2.0"
|
||||
},
|
||||
{
|
||||
"moduleName": "org.springframework.boot:spring-boot-actuator",
|
||||
"moduleUrl": "https://spring.io/projects/spring-boot",
|
||||
"moduleVersion": "3.3.0",
|
||||
"moduleVersion": "3.3.2",
|
||||
"moduleLicense": "Apache License, Version 2.0",
|
||||
"moduleLicenseUrl": "https://www.apache.org/licenses/LICENSE-2.0"
|
||||
},
|
||||
{
|
||||
"moduleName": "org.springframework.boot:spring-boot-actuator-autoconfigure",
|
||||
"moduleUrl": "https://spring.io/projects/spring-boot",
|
||||
"moduleVersion": "3.3.0",
|
||||
"moduleVersion": "3.3.2",
|
||||
"moduleLicense": "Apache License, Version 2.0",
|
||||
"moduleLicenseUrl": "https://www.apache.org/licenses/LICENSE-2.0"
|
||||
},
|
||||
{
|
||||
"moduleName": "org.springframework.boot:spring-boot-autoconfigure",
|
||||
"moduleUrl": "https://spring.io/projects/spring-boot",
|
||||
"moduleVersion": "3.3.0",
|
||||
"moduleVersion": "3.3.2",
|
||||
"moduleLicense": "Apache License, Version 2.0",
|
||||
"moduleLicenseUrl": "https://www.apache.org/licenses/LICENSE-2.0"
|
||||
},
|
||||
@@ -913,7 +913,7 @@
|
||||
{
|
||||
"moduleName": "org.springframework.boot:spring-boot-starter",
|
||||
"moduleUrl": "https://spring.io/projects/spring-boot",
|
||||
"moduleVersion": "3.3.0",
|
||||
"moduleVersion": "3.3.2",
|
||||
"moduleLicense": "Apache License, Version 2.0",
|
||||
"moduleLicenseUrl": "https://www.apache.org/licenses/LICENSE-2.0"
|
||||
},
|
||||
@@ -927,7 +927,7 @@
|
||||
{
|
||||
"moduleName": "org.springframework.boot:spring-boot-starter-aop",
|
||||
"moduleUrl": "https://spring.io/projects/spring-boot",
|
||||
"moduleVersion": "3.3.0",
|
||||
"moduleVersion": "3.3.2",
|
||||
"moduleLicense": "Apache License, Version 2.0",
|
||||
"moduleLicenseUrl": "https://www.apache.org/licenses/LICENSE-2.0"
|
||||
},
|
||||
@@ -941,7 +941,7 @@
|
||||
{
|
||||
"moduleName": "org.springframework.boot:spring-boot-starter-jdbc",
|
||||
"moduleUrl": "https://spring.io/projects/spring-boot",
|
||||
"moduleVersion": "3.3.0",
|
||||
"moduleVersion": "3.3.2",
|
||||
"moduleLicense": "Apache License, Version 2.0",
|
||||
"moduleLicenseUrl": "https://www.apache.org/licenses/LICENSE-2.0"
|
||||
},
|
||||
@@ -955,14 +955,14 @@
|
||||
{
|
||||
"moduleName": "org.springframework.boot:spring-boot-starter-json",
|
||||
"moduleUrl": "https://spring.io/projects/spring-boot",
|
||||
"moduleVersion": "3.3.0",
|
||||
"moduleVersion": "3.3.2",
|
||||
"moduleLicense": "Apache License, Version 2.0",
|
||||
"moduleLicenseUrl": "https://www.apache.org/licenses/LICENSE-2.0"
|
||||
},
|
||||
{
|
||||
"moduleName": "org.springframework.boot:spring-boot-starter-logging",
|
||||
"moduleUrl": "https://spring.io/projects/spring-boot",
|
||||
"moduleVersion": "3.3.0",
|
||||
"moduleVersion": "3.3.2",
|
||||
"moduleLicense": "Apache License, Version 2.0",
|
||||
"moduleLicenseUrl": "https://www.apache.org/licenses/LICENSE-2.0"
|
||||
},
|
||||
@@ -997,140 +997,140 @@
|
||||
{
|
||||
"moduleName": "org.springframework.data:spring-data-commons",
|
||||
"moduleUrl": "https://spring.io/projects/spring-data",
|
||||
"moduleVersion": "3.3.0",
|
||||
"moduleVersion": "3.3.2",
|
||||
"moduleLicense": "Apache License, Version 2.0",
|
||||
"moduleLicenseUrl": "https://www.apache.org/licenses/LICENSE-2.0"
|
||||
},
|
||||
{
|
||||
"moduleName": "org.springframework.data:spring-data-jpa",
|
||||
"moduleUrl": "https://projects.spring.io/spring-data-jpa",
|
||||
"moduleVersion": "3.3.0",
|
||||
"moduleVersion": "3.3.2",
|
||||
"moduleLicense": "Apache License, Version 2.0",
|
||||
"moduleLicenseUrl": "https://www.apache.org/licenses/LICENSE-2.0"
|
||||
},
|
||||
{
|
||||
"moduleName": "org.springframework.security:spring-security-config",
|
||||
"moduleUrl": "https://spring.io/projects/spring-security",
|
||||
"moduleVersion": "6.3.0",
|
||||
"moduleVersion": "6.3.1",
|
||||
"moduleLicense": "Apache License, Version 2.0",
|
||||
"moduleLicenseUrl": "https://www.apache.org/licenses/LICENSE-2.0"
|
||||
},
|
||||
{
|
||||
"moduleName": "org.springframework.security:spring-security-core",
|
||||
"moduleUrl": "https://spring.io/projects/spring-security",
|
||||
"moduleVersion": "6.3.0",
|
||||
"moduleVersion": "6.3.1",
|
||||
"moduleLicense": "Apache License, Version 2.0",
|
||||
"moduleLicenseUrl": "https://www.apache.org/licenses/LICENSE-2.0"
|
||||
},
|
||||
{
|
||||
"moduleName": "org.springframework.security:spring-security-crypto",
|
||||
"moduleUrl": "https://spring.io/projects/spring-security",
|
||||
"moduleVersion": "6.3.0",
|
||||
"moduleVersion": "6.3.1",
|
||||
"moduleLicense": "Apache License, Version 2.0",
|
||||
"moduleLicenseUrl": "https://www.apache.org/licenses/LICENSE-2.0"
|
||||
},
|
||||
{
|
||||
"moduleName": "org.springframework.security:spring-security-oauth2-client",
|
||||
"moduleUrl": "https://spring.io/projects/spring-security",
|
||||
"moduleVersion": "6.3.0",
|
||||
"moduleVersion": "6.3.1",
|
||||
"moduleLicense": "Apache License, Version 2.0",
|
||||
"moduleLicenseUrl": "https://www.apache.org/licenses/LICENSE-2.0"
|
||||
},
|
||||
{
|
||||
"moduleName": "org.springframework.security:spring-security-oauth2-core",
|
||||
"moduleUrl": "https://spring.io/projects/spring-security",
|
||||
"moduleVersion": "6.3.0",
|
||||
"moduleVersion": "6.3.1",
|
||||
"moduleLicense": "Apache License, Version 2.0",
|
||||
"moduleLicenseUrl": "https://www.apache.org/licenses/LICENSE-2.0"
|
||||
},
|
||||
{
|
||||
"moduleName": "org.springframework.security:spring-security-oauth2-jose",
|
||||
"moduleUrl": "https://spring.io/projects/spring-security",
|
||||
"moduleVersion": "6.3.0",
|
||||
"moduleVersion": "6.3.1",
|
||||
"moduleLicense": "Apache License, Version 2.0",
|
||||
"moduleLicenseUrl": "https://www.apache.org/licenses/LICENSE-2.0"
|
||||
},
|
||||
{
|
||||
"moduleName": "org.springframework.security:spring-security-web",
|
||||
"moduleUrl": "https://spring.io/projects/spring-security",
|
||||
"moduleVersion": "6.3.0",
|
||||
"moduleVersion": "6.3.1",
|
||||
"moduleLicense": "Apache License, Version 2.0",
|
||||
"moduleLicenseUrl": "https://www.apache.org/licenses/LICENSE-2.0"
|
||||
},
|
||||
{
|
||||
"moduleName": "org.springframework:spring-aop",
|
||||
"moduleUrl": "https://github.com/spring-projects/spring-framework",
|
||||
"moduleVersion": "6.1.8",
|
||||
"moduleVersion": "6.1.11",
|
||||
"moduleLicense": "Apache License, Version 2.0",
|
||||
"moduleLicenseUrl": "https://www.apache.org/licenses/LICENSE-2.0"
|
||||
},
|
||||
{
|
||||
"moduleName": "org.springframework:spring-aspects",
|
||||
"moduleUrl": "https://github.com/spring-projects/spring-framework",
|
||||
"moduleVersion": "6.1.8",
|
||||
"moduleVersion": "6.1.11",
|
||||
"moduleLicense": "Apache License, Version 2.0",
|
||||
"moduleLicenseUrl": "https://www.apache.org/licenses/LICENSE-2.0"
|
||||
},
|
||||
{
|
||||
"moduleName": "org.springframework:spring-beans",
|
||||
"moduleUrl": "https://github.com/spring-projects/spring-framework",
|
||||
"moduleVersion": "6.1.8",
|
||||
"moduleVersion": "6.1.11",
|
||||
"moduleLicense": "Apache License, Version 2.0",
|
||||
"moduleLicenseUrl": "https://www.apache.org/licenses/LICENSE-2.0"
|
||||
},
|
||||
{
|
||||
"moduleName": "org.springframework:spring-context",
|
||||
"moduleUrl": "https://github.com/spring-projects/spring-framework",
|
||||
"moduleVersion": "6.1.8",
|
||||
"moduleVersion": "6.1.11",
|
||||
"moduleLicense": "Apache License, Version 2.0",
|
||||
"moduleLicenseUrl": "https://www.apache.org/licenses/LICENSE-2.0"
|
||||
},
|
||||
{
|
||||
"moduleName": "org.springframework:spring-core",
|
||||
"moduleUrl": "https://github.com/spring-projects/spring-framework",
|
||||
"moduleVersion": "6.1.8",
|
||||
"moduleVersion": "6.1.11",
|
||||
"moduleLicense": "Apache License, Version 2.0",
|
||||
"moduleLicenseUrl": "https://www.apache.org/licenses/LICENSE-2.0"
|
||||
},
|
||||
{
|
||||
"moduleName": "org.springframework:spring-expression",
|
||||
"moduleUrl": "https://github.com/spring-projects/spring-framework",
|
||||
"moduleVersion": "6.1.8",
|
||||
"moduleVersion": "6.1.11",
|
||||
"moduleLicense": "Apache License, Version 2.0",
|
||||
"moduleLicenseUrl": "https://www.apache.org/licenses/LICENSE-2.0"
|
||||
},
|
||||
{
|
||||
"moduleName": "org.springframework:spring-jcl",
|
||||
"moduleUrl": "https://github.com/spring-projects/spring-framework",
|
||||
"moduleVersion": "6.1.8",
|
||||
"moduleVersion": "6.1.11",
|
||||
"moduleLicense": "Apache License, Version 2.0",
|
||||
"moduleLicenseUrl": "https://www.apache.org/licenses/LICENSE-2.0"
|
||||
},
|
||||
{
|
||||
"moduleName": "org.springframework:spring-jdbc",
|
||||
"moduleUrl": "https://github.com/spring-projects/spring-framework",
|
||||
"moduleVersion": "6.1.8",
|
||||
"moduleVersion": "6.1.11",
|
||||
"moduleLicense": "Apache License, Version 2.0",
|
||||
"moduleLicenseUrl": "https://www.apache.org/licenses/LICENSE-2.0"
|
||||
},
|
||||
{
|
||||
"moduleName": "org.springframework:spring-orm",
|
||||
"moduleUrl": "https://github.com/spring-projects/spring-framework",
|
||||
"moduleVersion": "6.1.8",
|
||||
"moduleVersion": "6.1.11",
|
||||
"moduleLicense": "Apache License, Version 2.0",
|
||||
"moduleLicenseUrl": "https://www.apache.org/licenses/LICENSE-2.0"
|
||||
},
|
||||
{
|
||||
"moduleName": "org.springframework:spring-tx",
|
||||
"moduleUrl": "https://github.com/spring-projects/spring-framework",
|
||||
"moduleVersion": "6.1.8",
|
||||
"moduleVersion": "6.1.11",
|
||||
"moduleLicense": "Apache License, Version 2.0",
|
||||
"moduleLicenseUrl": "https://www.apache.org/licenses/LICENSE-2.0"
|
||||
},
|
||||
{
|
||||
"moduleName": "org.springframework:spring-web",
|
||||
"moduleUrl": "https://github.com/spring-projects/spring-framework",
|
||||
"moduleVersion": "6.1.8",
|
||||
"moduleVersion": "6.1.11",
|
||||
"moduleLicense": "Apache License, Version 2.0",
|
||||
"moduleLicenseUrl": "https://www.apache.org/licenses/LICENSE-2.0"
|
||||
},
|
||||
|
||||
22
src/main/resources/static/css/removeImage.css
Normal file
22
src/main/resources/static/css/removeImage.css
Normal file
@@ -0,0 +1,22 @@
|
||||
.filename {
|
||||
flex-grow: 1;
|
||||
white-space: nowrap;
|
||||
overflow: hidden;
|
||||
text-overflow: ellipsis;
|
||||
margin-right: 10px;
|
||||
}
|
||||
|
||||
.arrows {
|
||||
flex-shrink: 0;
|
||||
display: flex;
|
||||
justify-content: flex-end;
|
||||
}
|
||||
.arrows .btn {
|
||||
margin: 0 3px;
|
||||
}
|
||||
|
||||
.move-up span,
|
||||
.move-down span {
|
||||
font-weight: bold;
|
||||
font-size: 1.2em;
|
||||
}
|
||||
5
src/main/resources/static/images/flags/dk.svg
Normal file
5
src/main/resources/static/images/flags/dk.svg
Normal file
@@ -0,0 +1,5 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" id="flag-icons-dk" viewBox="0 0 640 480">
|
||||
<path fill="#c8102e" d="M0 0h640.1v480H0z"/>
|
||||
<path fill="#fff" d="M205.7 0h68.6v480h-68.6z"/>
|
||||
<path fill="#fff" d="M0 205.7h640.1v68.6H0z"/>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 236 B |
7
src/main/resources/static/images/flags/ie.svg
Normal file
7
src/main/resources/static/images/flags/ie.svg
Normal file
@@ -0,0 +1,7 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" id="flag-icons-ie" viewBox="0 0 640 480">
|
||||
<g fill-rule="evenodd" stroke-width="1pt">
|
||||
<path fill="#fff" d="M0 0h640v480H0z"/>
|
||||
<path fill="#009A49" d="M0 0h213.3v480H0z"/>
|
||||
<path fill="#FF7900" d="M426.7 0H640v480H426.7z"/>
|
||||
</g>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 289 B |
11
src/main/resources/static/images/flags/vn.svg
Normal file
11
src/main/resources/static/images/flags/vn.svg
Normal file
@@ -0,0 +1,11 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" id="flag-icons-vn" viewBox="0 0 640 480">
|
||||
<defs>
|
||||
<clipPath id="vn-a">
|
||||
<path fill-opacity=".7" d="M-85.3 0h682.6v512H-85.3z"/>
|
||||
</clipPath>
|
||||
</defs>
|
||||
<g fill-rule="evenodd" clip-path="url(#vn-a)" transform="translate(80)scale(.9375)">
|
||||
<path fill="#da251d" d="M-128 0h768v512h-768z"/>
|
||||
<path fill="#ff0" d="M349.6 381 260 314.3l-89 67.3L204 272l-89-67.7 110.1-1 34.2-109.4L294 203l110.1.1-88.5 68.4 33.9 109.6z"/>
|
||||
</g>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 490 B |
@@ -4,6 +4,7 @@
|
||||
<a class="dropdown-item lang_dropdown-item" href="" data-bs-language-code="ca_CA"> <img th:src="@{'/images/flags/es-ct.svg'}" alt="icon" width="20" height="15"> Català</a>
|
||||
<a class="dropdown-item lang_dropdown-item" href="" data-bs-language-code="zh_CN"> <img th:src="@{'/images/flags/cn.svg'}" alt="icon" width="20" height="15"> 简体中文</a>
|
||||
<a class="dropdown-item lang_dropdown-item" href="" data-bs-language-code="zh_TW"> <img th:src="@{'/images/flags/tw.svg'}" alt="icon" width="20" height="15"> 繁體中文</a>
|
||||
<a class="dropdown-item lang_dropdown-item" href="" data-bs-language-code="da_DK"> <img th:src="@{'/images/flags/dk.svg'}" alt="icon" width="20" height="15"> Dansk</a>
|
||||
<a class="dropdown-item lang_dropdown-item" href="" data-bs-language-code="de_DE"> <img th:src="@{'/images/flags/de.svg'}" alt="icon" width="20" height="15"> Deutsch</a>
|
||||
<a class="dropdown-item lang_dropdown-item" href="" data-bs-language-code="en_GB"> <img th:src="@{'/images/flags/gb.svg'}" alt="icon" width="20" height="15"> English (GB)</a>
|
||||
<a class="dropdown-item lang_dropdown-item" href="" data-bs-language-code="en_US"> <img th:src="@{'/images/flags/us.svg'}" alt="icon" width="20" height="15"> English (US)</a>
|
||||
@@ -11,6 +12,7 @@
|
||||
<a class="dropdown-item lang_dropdown-item" href="" data-bs-language-code="es_ES"> <img th:src="@{'/images/flags/es.svg'}" alt="icon" width="20" height="15"> Español</a>
|
||||
<a class="dropdown-item lang_dropdown-item" href="" data-bs-language-code="fr_FR"> <img th:src="@{'/images/flags/fr.svg'}" alt="icon" width="20" height="15"> Français</a>
|
||||
<a class="dropdown-item lang_dropdown-item" href="" data-bs-language-code="id_ID"> <img th:src="@{'/images/flags/id.svg'}" alt="icon" width="20" height="15"> Indonesia</a>
|
||||
<a class="dropdown-item lang_dropdown-item" href="" data-bs-language-code="id_ID"> <img th:src="@{'/images/flags/ie.svg'}" alt="icon" width="20" height="15"> Irish</a>
|
||||
<a class="dropdown-item lang_dropdown-item" href="" data-bs-language-code="it_IT"> <img th:src="@{'/images/flags/it.svg'}" alt="icon" width="20" height="15"> Italiano</a>
|
||||
<a class="dropdown-item lang_dropdown-item" href="" data-bs-language-code="nl_NL"> <img th:src="@{'/images/flags/nl.svg'}" alt="icon" width="20" height="15"> Nederlands</a>
|
||||
<a class="dropdown-item lang_dropdown-item" href="" data-bs-language-code="pl_PL"> <img th:src="@{'/images/flags/pl.svg'}" alt="icon" width="20" height="15"> Polski</a>
|
||||
@@ -32,4 +34,5 @@
|
||||
<a class="dropdown-item lang_dropdown-item" href="" data-bs-language-code="hr_HR"> <img th:src="@{'/images/flags/hr.svg'}" alt="icon" width="20" height="15"> Hrvatski</a>
|
||||
<a class="dropdown-item lang_dropdown-item" href="" data-bs-language-code="no_NB"> <img th:src="@{'/images/flags/no.svg'}" alt="icon" width="20" height="15"> Norsk</a>
|
||||
<a class="dropdown-item lang_dropdown-item" href="" data-bs-language-code="th_TH"> <img th:src="@{'/images/flags/th.svg'}" alt="icon" width="20" height="15"> ไทย</a>
|
||||
<a class="dropdown-item lang_dropdown-item" href="" data-bs-language-code="vi_VN"> <img th:src="@{'/images/flags/vn.svg'}" alt="icon" width="20" height="15"> Tiếng Việt</a>
|
||||
</th:block>
|
||||
|
||||
@@ -195,6 +195,9 @@
|
||||
<div
|
||||
th:replace="~{fragments/navbarEntry :: navbarEntry ('get-info-on-pdf', 'info', 'home.getPdfInfo.title', 'home.getPdfInfo.desc', 'getPdfInfo.tags', 'other')}">
|
||||
</div>
|
||||
<div
|
||||
th:replace="~{fragments/navbarEntry :: navbarEntry ('remove-image-pdf','remove_selection', 'home.removeImagePdf.title', 'home.removeImagePdf.desc', 'removeImagePdf.tags', 'other')}">
|
||||
</div>
|
||||
</div>
|
||||
<!-- Advance menu items -->
|
||||
<div class="col-lg-2 col-sm-6 py px-xl-1 px-2">
|
||||
|
||||
@@ -229,6 +229,9 @@
|
||||
<div
|
||||
th:replace="~{fragments/card :: card(id='stamp', cardTitle=#{home.AddStampRequest.title}, cardText=#{home.AddStampRequest.desc}, cardLink='stamp', toolIcon='approval', tags=#{AddStampRequest.tags}, toolGroup='security')}">
|
||||
</div>
|
||||
<div
|
||||
th:replace="~{fragments/card :: card(id='remove-image-pdf', cardTitle=#{home.removeImagePdf.title}, cardText=#{home.removeImagePdf.desc}, cardLink='remove-image-pdf', toolIcon='remove_selection', tags=#{removeImagePdf.tags}, toolGroup='other')}">
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
36
src/main/resources/templates/remove-image-pdf.html
Normal file
36
src/main/resources/templates/remove-image-pdf.html
Normal file
@@ -0,0 +1,36 @@
|
||||
<!DOCTYPE html>
|
||||
<html th:lang="${#locale.language}" th:dir="#{language.direction}" th:data-language="${#locale.toString()}"
|
||||
xmlns:th="https://www.thymeleaf.org">
|
||||
<head>
|
||||
<th:block
|
||||
th:insert="~{fragments/common :: head(title=#{removeImage.title}, header=#{removeImage.header})}"></th:block>
|
||||
<link rel="stylesheet" th:href="@{'/css/removeImage.css'}">
|
||||
</head>
|
||||
|
||||
<body>
|
||||
<th:block th:insert="~{fragments/common :: game}"></th:block>
|
||||
<div id="page-container">
|
||||
<div id="content-wrap">
|
||||
<th:block th:insert="~{fragments/navbar.html :: navbar}"></th:block>
|
||||
<br><br>
|
||||
<div class="container">
|
||||
<div class="row justify-content-center">
|
||||
<div class="col-md-6 bg-card">
|
||||
<div class="tool-header">
|
||||
<span class="material-symbols-rounded tool-header-icon word">remove_selection</span>
|
||||
<span class="tool-header-text" th:text="#{removeImage.header}"></span>
|
||||
</div>
|
||||
<form action="api/v1/general/remove-image-pdf" method="post" enctype="multipart/form-data">
|
||||
<div th:replace="~{fragments/common :: fileSelector(name='fileInput', multiple=false, accept='application/pdf')}"></div>
|
||||
|
||||
<br>
|
||||
<button type="submit" id="submitBtn" class="btn btn-primary" th:text="#{removeImage.submit}"></button>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<th:block th:insert="~{fragments/footer.html :: footer}"></th:block>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
@@ -104,6 +104,10 @@
|
||||
<label for="heightSpacer" th:text="#{watermark.selectText.6}"></label>
|
||||
<input type="text" id="heightSpacer" name="heightSpacer" class="form-control" value="50">
|
||||
</div>
|
||||
<div class="mb-3 form-check">
|
||||
<input type="checkbox" id="convertPDFToImage" name="convertPDFToImage">
|
||||
<label for="convertPDFToImage" th:text="#{watermark.selectText.10}"></label>
|
||||
</div>
|
||||
<div class="mb-3 text-center">
|
||||
<input type="submit" id="submitBtn" th:value="#{watermark.submit}" class="btn btn-primary">
|
||||
</div>
|
||||
|
||||
@@ -1,10 +1,11 @@
|
||||
package stirling.software.SPDF.utils;
|
||||
package stirling.software.SPDF;
|
||||
|
||||
import static org.junit.jupiter.api.Assertions.*;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.nio.file.Files;
|
||||
import java.nio.file.Path;
|
||||
import java.nio.file.Paths;
|
||||
|
||||
import org.junit.jupiter.api.BeforeEach;
|
||||
import org.junit.jupiter.api.Test;
|
||||
@@ -14,7 +15,6 @@ import org.mockito.Mock;
|
||||
import org.mockito.junit.jupiter.MockitoExtension;
|
||||
import org.springframework.core.env.Environment;
|
||||
|
||||
import stirling.software.SPDF.SPdfApplication;
|
||||
import stirling.software.SPDF.model.ApplicationProperties;
|
||||
|
||||
@ExtendWith(MockitoExtension.class)
|
||||
@@ -43,12 +43,43 @@ public class SPdfApplicationTest {
|
||||
|
||||
@Test
|
||||
public void testMainApplicationStartup() throws IOException, InterruptedException {
|
||||
// Setup mock environment for the main method
|
||||
Path configPath = Path.of("test/configs");
|
||||
Path settingsPath = Paths.get("test/configs/settings.yml");
|
||||
Path customSettingsPath = Paths.get("test/configs/custom_settings.yml");
|
||||
Path staticPath = Path.of("test/customFiles/static/");
|
||||
Path templatesPath = Path.of("test/customFiles/templates/");
|
||||
|
||||
// Ensure the files do not exist for the test
|
||||
if (Files.exists(settingsPath)) {
|
||||
Files.delete(settingsPath);
|
||||
}
|
||||
if (Files.exists(customSettingsPath)) {
|
||||
Files.delete(customSettingsPath);
|
||||
}
|
||||
if (Files.exists(staticPath)) {
|
||||
Files.delete(staticPath);
|
||||
}
|
||||
if (Files.exists(templatesPath)) {
|
||||
Files.delete(templatesPath);
|
||||
}
|
||||
|
||||
// Ensure the directories are created for testing
|
||||
Files.createDirectories(configPath);
|
||||
Files.createDirectories(staticPath);
|
||||
Files.createDirectories(templatesPath);
|
||||
|
||||
Files.createFile(settingsPath);
|
||||
Files.createFile(customSettingsPath);
|
||||
|
||||
// Run the main method
|
||||
SPdfApplication.main(new String[]{});
|
||||
|
||||
// Verify that the directories were created
|
||||
assertTrue(Files.exists(Path.of("customFiles/static/")));
|
||||
assertTrue(Files.exists(Path.of("customFiles/templates/")));
|
||||
assertTrue(Files.exists(settingsPath));
|
||||
assertTrue(Files.exists(customSettingsPath));
|
||||
assertTrue(Files.exists(staticPath));
|
||||
assertTrue(Files.exists(templatesPath));
|
||||
}
|
||||
|
||||
@Test
|
||||
@@ -0,0 +1,41 @@
|
||||
package stirling.software.SPDF.controller.api.converters;
|
||||
|
||||
import org.junit.jupiter.api.Test;
|
||||
import org.springframework.http.ResponseEntity;
|
||||
|
||||
import stirling.software.SPDF.model.api.converters.UrlToPdfRequest;
|
||||
import static org.junit.jupiter.api.Assertions.*;
|
||||
|
||||
public class ConvertWebsiteToPdfTest {
|
||||
@Test
|
||||
public void test_exemption_is_thrown_when_invalid_url_format_provided() {
|
||||
|
||||
String invalid_format_Url = "invalid-url";
|
||||
// Arrange
|
||||
ConvertWebsiteToPDF convertWebsiteToPDF = new ConvertWebsiteToPDF();
|
||||
UrlToPdfRequest request = new UrlToPdfRequest();
|
||||
request.setUrlInput(invalid_format_Url);
|
||||
// Act
|
||||
IllegalArgumentException thrown = assertThrows(IllegalArgumentException.class, () -> {
|
||||
convertWebsiteToPDF.urlToPdf(request);
|
||||
});
|
||||
// Assert
|
||||
assertEquals("Invalid URL format provided.", thrown.getMessage());
|
||||
}
|
||||
|
||||
@Test
|
||||
public void test_exemption_is_thrown_when_url_is_not_reachable() {
|
||||
|
||||
String unreachable_Url = "https://www.googleeeexyz.com";
|
||||
// Arrange
|
||||
ConvertWebsiteToPDF convertWebsiteToPDF = new ConvertWebsiteToPDF();
|
||||
UrlToPdfRequest request = new UrlToPdfRequest();
|
||||
request.setUrlInput(unreachable_Url);
|
||||
// Act
|
||||
IllegalArgumentException thrown = assertThrows(IllegalArgumentException.class, () -> {
|
||||
convertWebsiteToPDF.urlToPdf(request);
|
||||
});
|
||||
// Assert
|
||||
assertEquals("URL is not reachable, please provide a valid URL.", thrown.getMessage());
|
||||
}
|
||||
}
|
||||
@@ -13,7 +13,7 @@ public class FileToPdfTest {
|
||||
@Test
|
||||
public void testConvertHtmlToPdf() {
|
||||
HTMLToPdfRequest request = new HTMLToPdfRequest();
|
||||
byte[] fileBytes = new byte[10]; // Sample file bytes
|
||||
byte[] fileBytes = new byte[0]; // Sample file bytes
|
||||
String fileName = "test.html"; // Sample file name
|
||||
boolean htmlFormatsInstalled = true; // Sample boolean value
|
||||
|
||||
|
||||
Reference in New Issue
Block a user