Compare commits

..

2 Commits

Author SHA1 Message Date
Anthony Stirling
e0c83adc9f fix docker merge 2025-02-07 12:55:39 +00:00
Anthony Stirling
1eee6ee356 use libreoffice for pdfa 2025-02-06 15:55:22 +00:00
152 changed files with 1205 additions and 1615 deletions

View File

@@ -37,7 +37,7 @@ jobs:
steps:
- name: Harden Runner
uses: step-security/harden-runner@4d991eb9b905ef189e4c376166672c3f2f230481 # v2.11.0
uses: step-security/harden-runner@cb605e52c26070c328afc4562f0b4ada7618a84e # v2.10.4
with:
egress-policy: audit
@@ -82,7 +82,7 @@ jobs:
steps:
- name: Harden Runner
uses: step-security/harden-runner@4d991eb9b905ef189e4c376166672c3f2f230481 # v2.11.0
uses: step-security/harden-runner@cb605e52c26070c328afc4562f0b4ada7618a84e # v2.10.4
with:
egress-policy: audit
@@ -103,10 +103,9 @@ jobs:
run: ./gradlew clean build
env:
DOCKER_ENABLE_SECURITY: false
STIRLING_PDF_DESKTOP_UI: false
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@f7ce87c1d6bead3e36075b2ce75da1f6cc28aaca # v3.9.0
uses: docker/setup-buildx-action@6524bf65af31da8d45b59e8c27de4bd072b392f5 # v3.8.0
- name: Get version number
id: versionNumber

View File

@@ -21,7 +21,7 @@ jobs:
steps:
- name: Harden Runner
uses: step-security/harden-runner@4d991eb9b905ef189e4c376166672c3f2f230481 # v2.11.0
uses: step-security/harden-runner@cb605e52c26070c328afc4562f0b4ada7618a84e # v2.10.4
with:
egress-policy: audit

View File

@@ -13,7 +13,7 @@ jobs:
pull-requests: write
steps:
- name: Harden Runner
uses: step-security/harden-runner@4d991eb9b905ef189e4c376166672c3f2f230481 # v2.11.0
uses: step-security/harden-runner@cb605e52c26070c328afc4562f0b4ada7618a84e # v2.10.4
with:
egress-policy: audit

View File

@@ -24,7 +24,7 @@ jobs:
steps:
- name: Harden Runner
uses: step-security/harden-runner@4d991eb9b905ef189e4c376166672c3f2f230481 # v2.11.0
uses: step-security/harden-runner@cb605e52c26070c328afc4562f0b4ada7618a84e # v2.10.4
with:
egress-policy: audit
@@ -62,7 +62,7 @@ jobs:
runs-on: ubuntu-latest
steps:
- name: Harden Runner
uses: step-security/harden-runner@4d991eb9b905ef189e4c376166672c3f2f230481 # v2.11.0
uses: step-security/harden-runner@cb605e52c26070c328afc4562f0b4ada7618a84e # v2.10.4
with:
egress-policy: audit
@@ -106,7 +106,7 @@ jobs:
steps:
- name: Harden Runner
uses: step-security/harden-runner@4d991eb9b905ef189e4c376166672c3f2f230481 # v2.11.0
uses: step-security/harden-runner@cb605e52c26070c328afc4562f0b4ada7618a84e # v2.10.4
with:
egress-policy: audit
@@ -120,7 +120,7 @@ jobs:
distribution: "adopt"
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@f7ce87c1d6bead3e36075b2ce75da1f6cc28aaca # v3.9.0
uses: docker/setup-buildx-action@6524bf65af31da8d45b59e8c27de4bd072b392f5 # v3.8.0
- name: Install Docker Compose
run: |

View File

@@ -18,7 +18,7 @@ jobs:
pull-requests: write
steps:
- name: Harden Runner
uses: step-security/harden-runner@4d991eb9b905ef189e4c376166672c3f2f230481 # v2.11.0
uses: step-security/harden-runner@cb605e52c26070c328afc4562f0b4ada7618a84e # v2.10.4
with:
egress-policy: audit

View File

@@ -17,7 +17,7 @@ jobs:
runs-on: ubuntu-latest
steps:
- name: Harden Runner
uses: step-security/harden-runner@4d991eb9b905ef189e4c376166672c3f2f230481 # v2.11.0
uses: step-security/harden-runner@cb605e52c26070c328afc4562f0b4ada7618a84e # v2.10.4
with:
egress-policy: audit

View File

@@ -18,13 +18,13 @@ jobs:
pull-requests: write
steps:
- name: Harden Runner
uses: step-security/harden-runner@4d991eb9b905ef189e4c376166672c3f2f230481 # v2.11.0
uses: step-security/harden-runner@cb605e52c26070c328afc4562f0b4ada7618a84e # v2.10.4
with:
egress-policy: audit
- name: Generate GitHub App Token
id: generate-token
uses: actions/create-github-app-token@67e27a7eb7db372a1c61a7f9bdab8699e9ee57f7 # v1.11.3
uses: actions/create-github-app-token@136412a57a7081aa63c935a2cc2918f76c34f514 # v1.11.2
with:
app-id: ${{ secrets.GH_APP_ID }}
private-key: ${{ secrets.GH_APP_PRIVATE_KEY }}

View File

@@ -15,7 +15,7 @@ jobs:
issues: write
steps:
- name: Harden Runner
uses: step-security/harden-runner@4d991eb9b905ef189e4c376166672c3f2f230481 # v2.11.0
uses: step-security/harden-runner@cb605e52c26070c328afc4562f0b4ada7618a84e # v2.10.4
with:
egress-policy: audit

View File

@@ -16,7 +16,7 @@ jobs:
versionMac: ${{ steps.versionNumberMac.outputs.versionNumberMac }}
steps:
- name: Harden Runner
uses: step-security/harden-runner@4d991eb9b905ef189e4c376166672c3f2f230481 # v2.11.0
uses: step-security/harden-runner@cb605e52c26070c328afc4562f0b4ada7618a84e # v2.10.4
with:
egress-policy: audit
@@ -51,7 +51,7 @@ jobs:
file_suffix: ""
steps:
- name: Harden Runner
uses: step-security/harden-runner@4d991eb9b905ef189e4c376166672c3f2f230481 # v2.11.0
uses: step-security/harden-runner@cb605e52c26070c328afc4562f0b4ada7618a84e # v2.10.4
with:
egress-policy: audit
@@ -101,7 +101,7 @@ jobs:
file_suffix: ""
steps:
- name: Harden Runner
uses: step-security/harden-runner@4d991eb9b905ef189e4c376166672c3f2f230481 # v2.11.0
uses: step-security/harden-runner@cb605e52c26070c328afc4562f0b4ada7618a84e # v2.10.4
with:
egress-policy: audit
@@ -139,7 +139,7 @@ jobs:
contents: write
steps:
- name: Harden Runner
uses: step-security/harden-runner@4d991eb9b905ef189e4c376166672c3f2f230481 # v2.11.0
uses: step-security/harden-runner@cb605e52c26070c328afc4562f0b4ada7618a84e # v2.10.4
with:
egress-policy: audit
@@ -210,7 +210,7 @@ jobs:
runs-on: ubuntu-latest
steps:
- name: Harden Runner
uses: step-security/harden-runner@4d991eb9b905ef189e4c376166672c3f2f230481 # v2.11.0
uses: step-security/harden-runner@cb605e52c26070c328afc4562f0b4ada7618a84e # v2.10.4
with:
egress-policy: audit
@@ -224,7 +224,7 @@ jobs:
- name: Install Cosign
if: matrix.os == 'windows-latest'
uses: sigstore/cosign-installer@c56c2d3e59e4281cc41dea2217323ba5694b171e # v3.8.0
uses: sigstore/cosign-installer@dc72c7d5c4d10cd6bcb8cf6e3fd625a9e5e537da # v3.7.0
- name: Generate key pair
if: matrix.os == 'windows-latest'
@@ -271,7 +271,7 @@ jobs:
contents: write
steps:
- name: Harden Runner
uses: step-security/harden-runner@4d991eb9b905ef189e4c376166672c3f2f230481 # v2.11.0
uses: step-security/harden-runner@cb605e52c26070c328afc4562f0b4ada7618a84e # v2.10.4
with:
egress-policy: audit

View File

@@ -16,13 +16,13 @@ jobs:
pull-requests: write
steps:
- name: Harden Runner
uses: step-security/harden-runner@4d991eb9b905ef189e4c376166672c3f2f230481 # v2.11.0
uses: step-security/harden-runner@cb605e52c26070c328afc4562f0b4ada7618a84e # v2.10.4
with:
egress-policy: audit
- name: Generate GitHub App Token
id: generate-token
uses: actions/create-github-app-token@67e27a7eb7db372a1c61a7f9bdab8699e9ee57f7 # v1.11.3
uses: actions/create-github-app-token@136412a57a7081aa63c935a2cc2918f76c34f514 # v1.11.2
with:
app-id: ${{ secrets.GH_APP_ID }}
private-key: ${{ secrets.GH_APP_PRIVATE_KEY }}

View File

@@ -18,7 +18,7 @@ jobs:
id-token: write
steps:
- name: Harden Runner
uses: step-security/harden-runner@4d991eb9b905ef189e4c376166672c3f2f230481 # v2.11.0
uses: step-security/harden-runner@cb605e52c26070c328afc4562f0b4ada7618a84e # v2.10.4
with:
egress-policy: audit
@@ -38,17 +38,16 @@ jobs:
run: ./gradlew clean build
env:
DOCKER_ENABLE_SECURITY: false
STIRLING_PDF_DESKTOP_UI: false
- name: Install cosign
if: github.ref == 'refs/heads/master'
uses: sigstore/cosign-installer@c56c2d3e59e4281cc41dea2217323ba5694b171e # v3.8.0
uses: sigstore/cosign-installer@dc72c7d5c4d10cd6bcb8cf6e3fd625a9e5e537da # v3.7.0
with:
cosign-release: "v2.4.1"
- name: Set up Docker Buildx
id: buildx
uses: docker/setup-buildx-action@f7ce87c1d6bead3e36075b2ce75da1f6cc28aaca # v3.9.0
uses: docker/setup-buildx-action@6524bf65af31da8d45b59e8c27de4bd072b392f5 # v3.8.0
- name: Get version number
id: versionNumber
@@ -68,7 +67,7 @@ jobs:
password: ${{ github.token }}
- name: Set up QEMU
uses: docker/setup-qemu-action@4574d27a4764455b42196d70a065bc6853246a25 # v3.4.0
uses: docker/setup-qemu-action@53851d14592bedcffcf25ea515637cff71ef929a # v3.3.0
- name: Convert repository owner to lowercase
id: repoowner

View File

@@ -23,7 +23,7 @@ jobs:
version: ${{ steps.versionNumber.outputs.versionNumber }}
steps:
- name: Harden Runner
uses: step-security/harden-runner@4d991eb9b905ef189e4c376166672c3f2f230481 # v2.11.0
uses: step-security/harden-runner@cb605e52c26070c328afc4562f0b4ada7618a84e # v2.10.4
with:
egress-policy: audit
@@ -83,7 +83,7 @@ jobs:
file_suffix: ""
steps:
- name: Harden Runner
uses: step-security/harden-runner@4d991eb9b905ef189e4c376166672c3f2f230481 # v2.11.0
uses: step-security/harden-runner@cb605e52c26070c328afc4562f0b4ada7618a84e # v2.10.4
with:
egress-policy: audit
@@ -95,7 +95,7 @@ jobs:
run: ls -R
- name: Install Cosign
uses: sigstore/cosign-installer@c56c2d3e59e4281cc41dea2217323ba5694b171e # v3.8.0
uses: sigstore/cosign-installer@dc72c7d5c4d10cd6bcb8cf6e3fd625a9e5e537da # v3.7.0
- name: Generate key pair
run: cosign generate-key-pair
@@ -161,7 +161,7 @@ jobs:
file_suffix: ""
steps:
- name: Harden Runner
uses: step-security/harden-runner@4d991eb9b905ef189e4c376166672c3f2f230481 # v2.11.0
uses: step-security/harden-runner@cb605e52c26070c328afc4562f0b4ada7618a84e # v2.10.4
with:
egress-policy: audit

View File

@@ -34,7 +34,7 @@ jobs:
steps:
- name: Harden Runner
uses: step-security/harden-runner@4d991eb9b905ef189e4c376166672c3f2f230481 # v2.11.0
uses: step-security/harden-runner@cb605e52c26070c328afc4562f0b4ada7618a84e # v2.10.4
with:
egress-policy: audit
@@ -74,6 +74,6 @@ jobs:
# Upload the results to GitHub's code scanning dashboard.
- name: "Upload to code-scanning"
uses: github/codeql-action/upload-sarif@9e8d0789d4a0fa9ceb6b1738f7e269594bdd67f0 # v3.28.9
uses: github/codeql-action/upload-sarif@dd746615b3b9d728a6a37ca2045b68ca76d4841a # v3.28.8
with:
sarif_file: results.sarif

View File

@@ -1,33 +1,35 @@
name: Run Sonarqube
on:
push:
branches:
- master
pull_request_target:
branches:
- main
pull_request:
branches: [ "main" ]
workflow_dispatch:
permissions:
pull-requests: read
actions: read
name: Run Sonarqube
jobs:
sonarqube:
runs-on: ubuntu-latest
steps:
- name: Harden Runner
uses: step-security/harden-runner@4d991eb9b905ef189e4c376166672c3f2f230481 # v2.11.0
uses: step-security/harden-runner@cb605e52c26070c328afc4562f0b4ada7618a84e # v2.10.4
with:
egress-policy: audit
- uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
with:
fetch-depth: 0
fetch-depth: 0
- name: Setup Gradle
uses: gradle/actions/setup-gradle@94baf225fe0a508e581a564467443d0e2379123b # v4.3.0
- name: Set up JDK
uses: actions/setup-java@99b8673ff64fbf99d8d325f52d9a5bdedb8483e9 # v4.2.1
with:
java-version: '17'
distribution: 'temurin'
- name: Build and analyze with Gradle
env:
@@ -40,13 +42,12 @@ jobs:
-Dsonar.projectKey=Stirling-Tools_Stirling-PDF \
-Dsonar.organization=stirling-tools \
-Dsonar.host.url=https://sonarcloud.io \
-Dsonar.login=${SONAR_TOKEN} \
-Dsonar.log.level=DEBUG \
--info
- name: Upload Problems Report on Failure
if: failure()
uses: actions/upload-artifact@65c4c4a1ddee5b72f698fdd19549f0f0fb45cf08 # v4.6.0
uses: actions/upload-artifact@5d5d22a31266ced268874388b861e4b58bb5c2f3 # v4.3.1
with:
name: gradle-problems-report
path: build/reports/problems/problems-report.html
@@ -54,7 +55,7 @@ jobs:
- name: Upload Sonar Logs on Failure
if: failure()
uses: actions/upload-artifact@65c4c4a1ddee5b72f698fdd19549f0f0fb45cf08 # v4.6.0
uses: actions/upload-artifact@5d5d22a31266ced268874388b861e4b58bb5c2f3 # v4.3.1
with:
name: sonar-logs
path: |

View File

@@ -16,7 +16,7 @@ jobs:
pull-requests: write
steps:
- name: Harden Runner
uses: step-security/harden-runner@4d991eb9b905ef189e4c376166672c3f2f230481 # v2.11.0
uses: step-security/harden-runner@cb605e52c26070c328afc4562f0b4ada7618a84e # v2.10.4
with:
egress-policy: audit

View File

@@ -14,7 +14,7 @@ jobs:
runs-on: ubuntu-latest
steps:
- name: Harden Runner
uses: step-security/harden-runner@4d991eb9b905ef189e4c376166672c3f2f230481 # v2.11.0
uses: step-security/harden-runner@cb605e52c26070c328afc4562f0b4ada7618a84e # v2.10.4
with:
egress-policy: audit

View File

@@ -24,13 +24,13 @@ jobs:
committer: ${{ steps.committer.outputs.committer }}
steps:
- name: Harden Runner
uses: step-security/harden-runner@4d991eb9b905ef189e4c376166672c3f2f230481 # v2.11.0
uses: step-security/harden-runner@cb605e52c26070c328afc4562f0b4ada7618a84e # v2.10.4
with:
egress-policy: audit
- name: Generate GitHub App Token
id: generate-token
uses: actions/create-github-app-token@67e27a7eb7db372a1c61a7f9bdab8699e9ee57f7 # v1.11.3
uses: actions/create-github-app-token@136412a57a7081aa63c935a2cc2918f76c34f514 # v1.11.2
with:
app-id: ${{ secrets.GH_APP_ID }}
private-key: ${{ secrets.GH_APP_PRIVATE_KEY }}
@@ -57,13 +57,13 @@ jobs:
runs-on: ubuntu-latest
steps:
- name: Harden Runner
uses: step-security/harden-runner@4d991eb9b905ef189e4c376166672c3f2f230481 # v2.11.0
uses: step-security/harden-runner@cb605e52c26070c328afc4562f0b4ada7618a84e # v2.10.4
with:
egress-policy: audit
- name: Generate GitHub App Token
id: generate-token
uses: actions/create-github-app-token@67e27a7eb7db372a1c61a7f9bdab8699e9ee57f7 # v1.11.3
uses: actions/create-github-app-token@136412a57a7081aa63c935a2cc2918f76c34f514 # v1.11.2
with:
app-id: ${{ vars.GH_APP_ID }}
private-key: ${{ secrets.GH_APP_PRIVATE_KEY }}

View File

@@ -12,7 +12,7 @@ jobs:
runs-on: ubuntu-latest
steps:
- name: Harden Runner
uses: step-security/harden-runner@4d991eb9b905ef189e4c376166672c3f2f230481 # v2.11.0
uses: step-security/harden-runner@cb605e52c26070c328afc4562f0b4ada7618a84e # v2.10.4
with:
egress-policy: audit
@@ -31,7 +31,7 @@ jobs:
DOCKER_ENABLE_SECURITY: false
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@f7ce87c1d6bead3e36075b2ce75da1f6cc28aaca # v3.9.0
uses: docker/setup-buildx-action@6524bf65af31da8d45b59e8c27de4bd072b392f5 # v3.8.0
- name: Get version number
id: versionNumber
@@ -105,7 +105,7 @@ jobs:
steps:
- name: Harden Runner
uses: step-security/harden-runner@4d991eb9b905ef189e4c376166672c3f2f230481 # v2.11.0
uses: step-security/harden-runner@cb605e52c26070c328afc4562f0b4ada7618a84e # v2.10.4
with:
egress-policy: audit
@@ -134,7 +134,7 @@ jobs:
steps:
- name: Harden Runner
uses: step-security/harden-runner@4d991eb9b905ef189e4c376166672c3f2f230481 # v2.11.0
uses: step-security/harden-runner@cb605e52c26070c328afc4562f0b4ada7618a84e # v2.10.4
with:
egress-policy: audit

View File

@@ -9,6 +9,7 @@
// "ms-vscode-remote.vscode-remote-extensionpack", // Remote Development Pack for SSH, WSL, and Containers
"Oracle.oracle-java", // Oracle Java extension with additional features for Java development
"redhat.java", // Java support by Red Hat with IntelliSense, debugging, and code navigation
"shengchen.vscode-checkstyle", // Checkstyle integration for Java code quality checks
"streetsidesoftware.code-spell-checker", // Spell checker for code to avoid typos
"vmware.vscode-boot-dev-pack", // Developer tools for Spring Boot by VMware
"vmware.vscode-spring-boot", // Spring Boot tools by VMware for enhanced Spring development

121
.vscode/settings.json vendored
View File

@@ -2,147 +2,54 @@
"java.compile.nullAnalysis.mode": "automatic",
"files.eol": "auto",
"java.configuration.updateBuildConfiguration": "interactive",
"black-formatter.args": [
"--line-length",
"127"
],
"flake8.args": [
"--max-line-length",
"127"
],
"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
],
"editor.defaultFormatter": "josevseb.google-java-format-for-vs-code"
"editor.rulers": [127]
},
"[python]": {
"editor.tabSize": 2,
"editor.detectIndentation": false,
"editor.rulers": [
127
]
"editor.rulers": [127]
},
"[gradle-build]": {
"editor.tabSize": 4,
"editor.detectIndentation": false,
"editor.rulers": [
127
]
"editor.rulers": [127]
},
"[gradle]": {
"editor.tabSize": 4,
"editor.detectIndentation": false,
"editor.rulers": [
127
]
"editor.rulers": [127]
},
"[html]": {
"editor.tabSize": 2,
"editor.rulers": [
127
],
"editor.rulers": [127],
"files.trimFinalNewlines": false,
"files.insertFinalNewline": false
},
"[javascript]": {
"editor.tabSize": 2,
"editor.rulers": [
127
]
"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,
"files.autoSave": "onFocusChange",
"files.autoSaveWhenNoErrors": true,
"diffEditor.maxComputationTime": 0,
"editor.wordSegmenterLocales": "",
"editor.guides.bracketPairs": "active",
"editor.guides.bracketPairsHorizontal": "active",
"editor.indentSize": "tabSize",
"editor.stickyScroll.enabled": false,
"editor.minimap.enabled": false,
"editor.formatOnSave": true,
"editor.insertSpaces": true,
"java.format.enabled": true,
"java.format.settings.profile": "GoogleStyle",
"java.format.settings.google.version": "1.25.2",
"java.format.settings.google.mode": "jar-file",
"java.format.settings.google.extra": "--aosp --skip-sorting-imports --skip-javadoc-formatting",
// (DE) Aktiviert Kommentare im Java-Format.
// (EN) Enables comments in Java formatting.
// "java.format.comments.enabled": true,
// (DE) Generiert automatisch Kommentare im Code.
// (EN) Automatically generates comments in code.
// "java.codeGeneration.generateComments": true,
// https://github.com/redhat-developer/vscode-java/blob/master/document/_java.learnMoreAboutCleanUps.md#java-clean-ups
"java.saveActions.cleanup": true,
"java.cleanup.actions": [
"invertEquals", // Inverts calls to Object.equals(Object) and String.equalsIgnoreCase(String) to avoid useless null pointer exception.
"instanceofPatternMatch" // Replaces instanceof checks with pattern matching.
],
// (DE) Aktiviert die Code-Vervollständigung für Java.
// (EN) Enables code completion for Java.
"java.completion.engine": "dom",
"java.completion.enabled": true,
"java.completion.importOrder": [
"java",
"javax",
"org",
"com",
"net",
"io",
"jakarta",
"lombok",
"me",
"stirling",
],
"java.project.resourceFilters": [
".devcontainer/",
".git/",
".github/",
".gradle/",
".venv/",
".venv*/",
".vscode/",
"bin/",
"build/",
"configs/",
"customFiles/",
"docs/",
"exampleYmlFiles",
"gradle/",
"images/",
"logs/",
"pipeline/",
"scripts/",
"testings/",
".git-blame-ignore-revs",
".gitattributes",
".gitignore",
".pre-commit-config.yaml",
],
// Enables signature help in Java.
"java.signatureHelp.enabled": true,
// Enables detailed signature help descriptions.
"java.signatureHelp.description.enabled": true,
// Downloads sources for Maven dependencies.
"java.maven.downloadSources": true,
// Enables Gradle project import.
"java.import.gradle.enabled": true,
// Downloads sources for Eclipse projects.
"java.eclipse.downloadSources": true,
// Enables import of the Gradle wrapper.
"java.import.gradle.wrapper.enabled": true,
"spring.initializr.defaultLanguage": "Java",
"spring.initializr.defaultGroupId": "stirling.software.SPDF",
"spring.initializr.defaultArtifactId": "SPDF",
"cSpell.enabled": false,
"java.format.settings.google.extra": "--aosp --skip-sorting-imports"
}

View File

@@ -1,5 +1,5 @@
# Main stage
FROM alpine:3.21.3@sha256:a8560b36e8b8210634f77d9f7f9efd7ffa463e380b75e2e74aff4511df3ef88c
FROM alpine:3.21.2@sha256:56fa17d2a7e7f168a043a2712e63aed1f8543aeafdcee47c58dcffe38ed51099
# Copy necessary files
COPY scripts /scripts
@@ -35,56 +35,47 @@ ENV DOCKER_ENABLE_SECURITY=false \
HOME=/home/stirlingpdfuser \
PUID=1000 \
PGID=1000 \
UMASK=022 \
PYTHONPATH=/usr/lib/libreoffice/program:/opt/venv/lib/python3.12/site-packages \
UNO_PATH=/usr/lib/libreoffice/program \
URE_BOOTSTRAP=file:///usr/lib/libreoffice/program/fundamentalrc
UMASK=022
# JDK for app
RUN echo "@main https://dl-cdn.alpinelinux.org/alpine/edge/main" | tee -a /etc/apk/repositories && \
echo "@community https://dl-cdn.alpinelinux.org/alpine/edge/community" | tee -a /etc/apk/repositories && \
RUN echo "@testing https://dl-cdn.alpinelinux.org/alpine/edge/main" | tee -a /etc/apk/repositories && \
echo "@testing https://dl-cdn.alpinelinux.org/alpine/edge/community" | tee -a /etc/apk/repositories && \
echo "@testing https://dl-cdn.alpinelinux.org/alpine/edge/testing" | tee -a /etc/apk/repositories && \
apk upgrade --no-cache -a && \
apk add --no-cache \
ca-certificates \
tzdata \
tini \
bash \
curl \
qpdf \
shadow \
su-exec \
openssl \
openssl-dev \
openjdk21-jre \
# Doc conversion
gcompat \
libc6-compat \
libreoffice \
# pdftohtml
poppler-utils \
# OCR MY PDF (unpaper for descew and other advanced features)
tesseract-ocr-data-eng \
# CV
py3-opencv \
python3 \
py3-pip \
py3-pillow@testing \
py3-pdf2image@testing && \
python3 -m venv /opt/venv && \
export PATH="/opt/venv/bin:$PATH" && \
pip install --upgrade pip && \
pip install --no-cache-dir --upgrade unoserver weasyprint && \
ln -s /usr/lib/libreoffice/program/uno.py /opt/venv/lib/python3.12/site-packages/ && \
ln -s /usr/lib/libreoffice/program/unohelper.py /opt/venv/lib/python3.12/site-packages/ && \
ln -s /usr/lib/libreoffice/program /opt/venv/lib/python3.12/site-packages/LibreOffice && \
ca-certificates \
tzdata \
tini \
bash \
curl \
qpdf \
shadow \
su-exec \
openssl \
openssl-dev \
openjdk21-jre \
# Doc conversion
gcompat \
libc6-compat \
libreoffice \
# pdftohtml
poppler-utils \
# OCR MY PDF (unpaper for descew and other advanced features)
tesseract-ocr-data-eng \
# CV
py3-opencv \
# python3/pip
python3 \
py3-pip && \
# uno unoconv and HTML
pip install --break-system-packages --no-cache-dir --upgrade unoconv WeasyPrint pdf2image pillow && \
mv /usr/share/tessdata /usr/share/tessdata-original && \
mkdir -p $HOME /configs /logs /customFiles /pipeline/watchedFolders /pipeline/finishedFolders && \
fc-cache -f -v && \
chmod +x /scripts/* && \
chmod +x /scripts/init.sh && \
# User permissions
# User permissions
addgroup -S stirlingpdfgroup && adduser -S stirlingpdfuser -G stirlingpdfgroup && \
chown -R stirlingpdfuser:stirlingpdfgroup $HOME /scripts /usr/share/fonts/opentype/noto /configs /customFiles /pipeline && \
chown stirlingpdfuser:stirlingpdfgroup /app.jar
@@ -93,4 +84,4 @@ EXPOSE 8080/tcp
# Set user and run command
ENTRYPOINT ["tini", "--", "/scripts/init.sh"]
CMD ["sh", "-c", "java -Dfile.encoding=UTF-8 -jar /app.jar & /opt/venv/bin/unoserver --port 2003 --interface 0.0.0.0"]
CMD ["java", "-Dfile.encoding=UTF-8", "-jar", "/app.jar"]

View File

@@ -9,11 +9,10 @@ COPY . .
# Build the application with DOCKER_ENABLE_SECURITY=false
RUN DOCKER_ENABLE_SECURITY=true \
STIRLING_PDF_DESKTOP_UI=false \
./gradlew clean build
# Main stage
FROM alpine:3.21.3@sha256:a8560b36e8b8210634f77d9f7f9efd7ffa463e380b75e2e74aff4511df3ef88c
FROM alpine:3.21.2@sha256:56fa17d2a7e7f168a043a2712e63aed1f8543aeafdcee47c58dcffe38ed51099
# Copy necessary files
COPY scripts /scripts
@@ -38,15 +37,12 @@ ENV DOCKER_ENABLE_SECURITY=false \
PGID=1000 \
UMASK=022 \
FAT_DOCKER=true \
INSTALL_BOOK_AND_ADVANCED_HTML_OPS=false \
PYTHONPATH=/usr/lib/libreoffice/program:/opt/venv/lib/python3.12/site-packages \
UNO_PATH=/usr/lib/libreoffice/program \
URE_BOOTSTRAP=file:///usr/lib/libreoffice/program/fundamentalrc
INSTALL_BOOK_AND_ADVANCED_HTML_OPS=false
# JDK for app
RUN echo "@main https://dl-cdn.alpinelinux.org/alpine/edge/main" | tee -a /etc/apk/repositories && \
echo "@community https://dl-cdn.alpinelinux.org/alpine/edge/community" | tee -a /etc/apk/repositories && \
RUN echo "@testing https://dl-cdn.alpinelinux.org/alpine/edge/main" | tee -a /etc/apk/repositories && \
echo "@testing https://dl-cdn.alpinelinux.org/alpine/edge/community" | tee -a /etc/apk/repositories && \
echo "@testing https://dl-cdn.alpinelinux.org/alpine/edge/testing" | tee -a /etc/apk/repositories && \
apk upgrade --no-cache -a && \
apk add --no-cache \
@@ -69,21 +65,14 @@ RUN echo "@main https://dl-cdn.alpinelinux.org/alpine/edge/main" | tee -a /etc/a
# OCR MY PDF (unpaper for descew and other advanced featues)
qpdf \
tesseract-ocr-data-eng \
font-terminus font-dejavu font-noto font-noto-cjk font-awesome font-noto-extra \
# CV
py3-opencv \
python3 \
py3-pip \
py3-pillow@testing \
py3-pdf2image@testing && \
python3 -m venv /opt/venv && \
export PATH="/opt/venv/bin:$PATH" && \
pip install --upgrade pip && \
pip install --no-cache-dir --upgrade unoserver weasyprint && \
ln -s /usr/lib/libreoffice/program/uno.py /opt/venv/lib/python3.12/site-packages/ && \
ln -s /usr/lib/libreoffice/program/unohelper.py /opt/venv/lib/python3.12/site-packages/ && \
ln -s /usr/lib/libreoffice/program /opt/venv/lib/python3.12/site-packages/LibreOffice && \
# python3/pip
python3 \
py3-pip && \
# uno unoconv and HTML
pip install --break-system-packages --no-cache-dir --upgrade unoconv WeasyPrint pdf2image pillow && \
mv /usr/share/tessdata /usr/share/tessdata-original && \
mkdir -p $HOME /configs /logs /customFiles /pipeline/watchedFolders /pipeline/finishedFolders && \
fc-cache -f -v && \
@@ -95,6 +84,7 @@ RUN echo "@main https://dl-cdn.alpinelinux.org/alpine/edge/main" | tee -a /etc/a
chown stirlingpdfuser:stirlingpdfgroup /app.jar
EXPOSE 8080/tcp
# Set user and run command
ENTRYPOINT ["tini", "--", "/scripts/init.sh"]
CMD ["sh", "-c", "java -Dfile.encoding=UTF-8 -jar /app.jar & /opt/venv/bin/unoserver --port 2003 --interface 0.0.0.0"]
CMD ["java", "-Dfile.encoding=UTF-8", "-jar", "/app.jar"]

View File

@@ -1,5 +1,5 @@
# use alpine
FROM alpine:3.21.3@sha256:a8560b36e8b8210634f77d9f7f9efd7ffa463e380b75e2e74aff4511df3ef88c
FROM alpine:3.21.2@sha256:56fa17d2a7e7f168a043a2712e63aed1f8543aeafdcee47c58dcffe38ed51099
ARG VERSION_TAG

View File

@@ -11,12 +11,14 @@ Fork Stirling-PDF and create a new branch out of `main`.
Then add a reference to the language in the navbar by adding a new language entry to the dropdown:
- Edit the file: [languages.html](https://github.com/Stirling-Tools/Stirling-PDF/blob/main/src/main/resources/templates/fragments/languages.html)
- Add a flag SVG file to: [flags directory](https://github.com/Stirling-Tools/Stirling-PDF/tree/main/src/main/resources/static/images/flags)
Any SVG flags are fine; most of the current ones were sourced from [here](https://flagicons.lipis.dev/). If your language isn't represented by a flag, choose a similar one, such as Saudi Arabia's flag for Arabic.
For example, to add Polish, you would add:
```html
<div th:replace="~{fragments/languageEntry :: languageEntry ('pl_PL', 'Polski')}" ></div>
<a th:if="${#lists.isEmpty(@languages) or #lists.contains(@languages, 'pl_PL')}" 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>
```
The `data-bs-language-code` is the code used to reference the file in the next step.

View File

@@ -3,6 +3,7 @@
[![Docker Pulls](https://img.shields.io/docker/pulls/frooodle/s-pdf)](https://hub.docker.com/r/frooodle/s-pdf)
[![Discord](https://img.shields.io/discord/1068636748814483718?label=Discord)](https://discord.gg/HYmhKj45pU)
[![Docker Image Version (tag latest semver)](https://img.shields.io/docker/v/frooodle/s-pdf/latest)](https://github.com/Stirling-Tools/Stirling-PDF/)
[![OpenSSF Scorecard](https://api.scorecard.dev/projects/github.com/Stirling-Tools/Stirling-PDF/badge)](https://scorecard.dev/viewer/?uri=github.com/Stirling-Tools/Stirling-PDF)
[![GitHub Repo stars](https://img.shields.io/github/stars/stirling-tools/stirling-pdf?style=social)](https://github.com/Stirling-Tools/stirling-pdf)
@@ -119,39 +120,39 @@ Stirling-PDF currently supports 39 languages!
| Arabic (العربية) (ar_AR) | ![89%](https://geps.dev/progress/89) |
| Azerbaijani (Azərbaycan Dili) (az_AZ) | ![88%](https://geps.dev/progress/88) |
| Basque (Euskara) (eu_ES) | ![51%](https://geps.dev/progress/51) |
| Bulgarian (Български) (bg_BG) | ![99%](https://geps.dev/progress/99) |
| Bulgarian (Български) (bg_BG) | ![85%](https://geps.dev/progress/85) |
| Catalan (Català) (ca_CA) | ![80%](https://geps.dev/progress/80) |
| Croatian (Hrvatski) (hr_HR) | ![86%](https://geps.dev/progress/86) |
| Czech (Česky) (cs_CZ) | ![97%](https://geps.dev/progress/97) |
| Croatian (Hrvatski) (hr_HR) | ![87%](https://geps.dev/progress/87) |
| Czech (Česky) (cs_CZ) | ![98%](https://geps.dev/progress/98) |
| Danish (Dansk) (da_DK) | ![85%](https://geps.dev/progress/85) |
| Dutch (Nederlands) (nl_NL) | ![85%](https://geps.dev/progress/85) |
| English (English) (en_GB) | ![100%](https://geps.dev/progress/100) |
| English (US) (en_US) | ![100%](https://geps.dev/progress/100) |
| French (Français) (fr_FR) | ![96%](https://geps.dev/progress/96) |
| German (Deutsch) (de_DE) | ![99%](https://geps.dev/progress/99) |
| Greek (Ελληνικά) (el_GR) | ![97%](https://geps.dev/progress/97) |
| Greek (Ελληνικά) (el_GR) | ![98%](https://geps.dev/progress/98) |
| Hindi (हिंदी) (hi_IN) | ![98%](https://geps.dev/progress/98) |
| Hungarian (Magyar) (hu_HU) | ![95%](https://geps.dev/progress/95) |
| Indonesian (Bahasa Indonesia) (id_ID) | ![86%](https://geps.dev/progress/86) |
| Irish (Gaeilge) (ga_IE) | ![98%](https://geps.dev/progress/98) |
| Italian (Italiano) (it_IT) | ![99%](https://geps.dev/progress/99) |
| Japanese (日本語) (ja_JP) | ![92%](https://geps.dev/progress/92) |
| Korean (한국어) (ko_KR) | ![98%](https://geps.dev/progress/98) |
| Norwegian (Norsk) (no_NB) | ![78%](https://geps.dev/progress/78) |
| Japanese (日本語) (ja_JP) | ![93%](https://geps.dev/progress/93) |
| Korean (한국어) (ko_KR) | ![99%](https://geps.dev/progress/99) |
| Norwegian (Norsk) (no_NB) | ![79%](https://geps.dev/progress/79) |
| Persian (فارسی) (fa_IR) | ![94%](https://geps.dev/progress/94) |
| Polish (Polski) (pl_PL) | ![85%](https://geps.dev/progress/85) |
| Polish (Polski) (pl_PL) | ![86%](https://geps.dev/progress/86) |
| Portuguese (Português) (pt_PT) | ![97%](https://geps.dev/progress/97) |
| Portuguese Brazilian (Português) (pt_BR) | ![98%](https://geps.dev/progress/98) |
| Romanian (Română) (ro_RO) | ![80%](https://geps.dev/progress/80) |
| Russian (Русский) (ru_RU) | ![97%](https://geps.dev/progress/97) |
| Serbian Latin alphabet (Srpski) (sr_LATN_RS) | ![63%](https://geps.dev/progress/63) |
| Simplified Chinese (简体中文) (zh_CN) | ![99%](https://geps.dev/progress/99) |
| Portuguese Brazilian (Português) (pt_BR) | ![97%](https://geps.dev/progress/97) |
| Romanian (Română) (ro_RO) | ![81%](https://geps.dev/progress/81) |
| Russian (Русский) (ru_RU) | ![98%](https://geps.dev/progress/98) |
| Serbian Latin alphabet (Srpski) (sr_LATN_RS) | ![64%](https://geps.dev/progress/64) |
| Simplified Chinese (简体中文) (zh_CN) | ![89%](https://geps.dev/progress/89) |
| Slovakian (Slovensky) (sk_SK) | ![74%](https://geps.dev/progress/74) |
| Slovenian (Slovenščina) (sl_SI) | ![96%](https://geps.dev/progress/96) |
| Spanish (Español) (es_ES) | ![86%](https://geps.dev/progress/86) |
| Swedish (Svenska) (sv_SE) | ![92%](https://geps.dev/progress/92) |
| Thai (ไทย) (th_TH) | ![85%](https://geps.dev/progress/85) |
| Tibetan (བོད་ཡིག་) (zh_BO) | ![94%](https://geps.dev/progress/94) |
| Slovenian (Slovenščina) (sl_SI) | ![97%](https://geps.dev/progress/97) |
| Spanish (Español) (es_ES) | ![87%](https://geps.dev/progress/87) |
| Swedish (Svenska) (sv_SE) | ![87%](https://geps.dev/progress/87) |
| Thai (ไทย) (th_TH) | ![86%](https://geps.dev/progress/86) |
| Tibetan (བོད་ཡིག་) (zh_BO) | ![95%](https://geps.dev/progress/95) |
| Traditional Chinese (繁體中文) (zh_TW) | ![98%](https://geps.dev/progress/98) |
| Turkish (Türkçe) (tr_TR) | ![82%](https://geps.dev/progress/82) |
| Ukrainian (Українська) (uk_UA) | ![72%](https://geps.dev/progress/72) |

View File

@@ -15,8 +15,9 @@ plugins {
import com.github.jk1.license.render.*
ext {
springBootVersion = "3.4.2"
springBootVersion = "3.4.1"
pdfboxVersion = "3.0.4"
logbackVersion = "1.5.7"
imageioVersion = "3.12.0"
lombokVersion = "1.18.36"
bouncycastleVersion = "1.80"
@@ -25,7 +26,7 @@ ext {
}
group = "stirling.software"
version = "0.42.0"
version = "0.40.2"
java {
// 17 is lowest but we support and recommend 21
@@ -260,7 +261,7 @@ spotless {
googleJavaFormat("1.25.2").aosp().reorderImports(false)
importOrder("java", "javax", "org", "com", "net", "io", "jakarta", "lombok", "me", "stirling")
importOrder("java", "javax", "org", "com", "net", "io")
toggleOffOn()
trimTrailingWhitespace()
leadingTabsToSpaces()
@@ -272,7 +273,7 @@ sonar {
properties {
property "sonar.projectKey", "Stirling-Tools_Stirling-PDF"
property "sonar.organization", "stirling-tools"
property "sonar.exclusions", "**/build-wrapper-dump.json, src/main/java/org/apache/**, src/main/resources/static/pdfjs/**, src/main/resources/static/pdfjs-legacy/**, src/main/resources/static/js/thirdParty/**"
property "sonar.coverage.exclusions", "src/main/java/org/apache/**, src/main/resources/static/pdfjs/**, src/main/resources/static/pdfjs-legacy/**, src/main/resources/static/js/thirdParty/**"
property "sonar.cpd.exclusions", "src/main/java/org/apache/**, src/main/resources/static/pdfjs/**, src/main/resources/static/pdfjs-legacy/**, src/main/resources/static/js/thirdParty/**"
@@ -293,27 +294,14 @@ configurations.all {
}
dependencies {
//tmp for security bumps
implementation 'ch.qos.logback:logback-core:1.5.15'
implementation 'ch.qos.logback:logback-classic:1.5.15'
// Exclude vulnerable BouncyCastle version used in tableau
configurations.all {
exclude group: 'org.bouncycastle', module: 'bcpkix-jdk15on'
exclude group: 'org.bouncycastle', module: 'bcutil-jdk15on'
exclude group: 'org.bouncycastle', module: 'bcmail-jdk15on'
}
if (System.getenv("STIRLING_PDF_DESKTOP_UI") != "false") {
implementation 'org.apache.commons:commons-compress:1.26.0'
implementation "me.friwi:jcefmaven:127.3.1"
implementation "org.openjfx:javafx-controls:21"
implementation "org.openjfx:javafx-swing:21"
}
//security updates
implementation "org.springframework:spring-webmvc:6.2.3"
implementation "org.springframework:spring-webmvc:6.2.2"
implementation("io.github.pixee:java-security-toolkit:1.2.1")
@@ -332,8 +320,8 @@ dependencies {
implementation "org.springframework.boot:spring-boot-starter-data-jpa:$springBootVersion"
implementation "org.springframework.boot:spring-boot-starter-oauth2-client:$springBootVersion"
implementation "org.springframework.session:spring-session-core:3.4.1"
implementation "org.springframework:spring-jdbc:6.2.3"
implementation "org.springframework.session:spring-session-core:$springBootVersion"
implementation "org.springframework:spring-jdbc:6.2.2"
implementation 'com.unboundid.product.scim2:scim2-sdk-client:2.3.5'
// Don't upgrade h2database
@@ -408,7 +396,7 @@ dependencies {
implementation "org.bouncycastle:bcprov-jdk18on:$bouncycastleVersion"
implementation "org.bouncycastle:bcpkix-jdk18on:$bouncycastleVersion"
implementation "org.springframework.boot:spring-boot-starter-actuator:$springBootVersion"
implementation "io.micrometer:micrometer-core:1.14.4"
implementation "io.micrometer:micrometer-core:1.14.3"
implementation group: "com.google.zxing", name: "core", version: "3.5.3"
// https://mvnrepository.com/artifact/org.commonmark/commonmark
implementation "org.commonmark:commonmark:0.24.0"

BIN
docs/stirling-pdf.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 50 KiB

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 9.4 KiB

View File

@@ -41,7 +41,6 @@ import me.friwi.jcefmaven.MavenCefAppHandlerAdapter;
import me.friwi.jcefmaven.impl.progress.ConsoleProgressHandler;
import stirling.software.SPDF.UI.WebBrowser;
import stirling.software.SPDF.config.InstallationPathConfig;
import stirling.software.SPDF.utils.UIScaling;
@Component
@Slf4j
@@ -216,7 +215,7 @@ public class DesktopBrowser implements WebBrowser {
}
});
frame.setSize(UIScaling.scaleWidth(1280), UIScaling.scaleHeight(800));
frame.setSize(1280, 768);
frame.setLocationRelativeTo(null);
loadIcon();
@@ -265,9 +264,7 @@ public class DesktopBrowser implements WebBrowser {
frame.setOpacity(1.0f);
frame.setUndecorated(false);
frame.pack();
frame.setSize(
UIScaling.scaleWidth(1280),
UIScaling.scaleHeight(800));
frame.setSize(1280, 800);
frame.setLocationRelativeTo(null);
log.debug("Frame reconfigured");

View File

@@ -1,20 +1,12 @@
package stirling.software.SPDF.UI.impl;
import java.awt.*;
import java.io.BufferedReader;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.util.HashSet;
import java.util.Set;
import java.util.concurrent.TimeUnit;
import javax.imageio.ImageIO;
import javax.swing.*;
import io.github.pixee.security.BoundedLineReader;
import lombok.extern.slf4j.Slf4j;
import stirling.software.SPDF.utils.UIScaling;
@Slf4j
public class LoadingWindow extends JDialog {
@@ -24,13 +16,6 @@ public class LoadingWindow extends JDialog {
private final JLabel brandLabel;
private long startTime;
private Timer stuckTimer;
private long stuckThreshold = 4000;
private long timeAt90Percent = -1;
private volatile Process explorerProcess;
private static final boolean IS_WINDOWS =
System.getProperty("os.name").toLowerCase().contains("win");
public LoadingWindow(Frame parent, String initialUrl) {
super(parent, "Initializing Stirling-PDF", true);
startTime = System.currentTimeMillis();
@@ -56,12 +41,12 @@ public class LoadingWindow extends JDialog {
if (is != null) {
Image img = ImageIO.read(is);
if (img != null) {
Image scaledImg = UIScaling.scaleIcon(img, 48, 48);
Image scaledImg = img.getScaledInstance(48, 48, Image.SCALE_SMOOTH);
JLabel iconLabel = new JLabel(new ImageIcon(scaledImg));
iconLabel.setHorizontalAlignment(SwingConstants.CENTER);
gbc.gridy = 0;
mainPanel.add(iconLabel, gbc);
log.info("Icon loaded and scaled successfully");
log.debug("Icon loaded and scaled successfully");
}
}
}
@@ -98,8 +83,7 @@ public class LoadingWindow extends JDialog {
setUndecorated(false);
// Set size and position
setSize(UIScaling.scaleWidth(400), UIScaling.scaleHeight(200));
setSize(400, 200);
setLocationRelativeTo(parent);
setAlwaysOnTop(true);
setProgress(0);
@@ -110,163 +94,6 @@ public class LoadingWindow extends JDialog {
System.currentTimeMillis() - startTime);
}
private void checkAndRefreshExplorer() {
if (!IS_WINDOWS) {
return;
}
if (timeAt90Percent == -1) {
timeAt90Percent = System.currentTimeMillis();
stuckTimer =
new Timer(
1000,
e -> {
long currentTime = System.currentTimeMillis();
if (currentTime - timeAt90Percent > stuckThreshold) {
try {
log.debug(
"Attempting Windows explorer refresh due to 90% stuck state");
String currentDir = System.getProperty("user.dir");
// Store current explorer PIDs before we start new one
Set<String> existingPids = new HashSet<>();
ProcessBuilder listExplorer =
new ProcessBuilder(
"cmd",
"/c",
"wmic",
"process",
"where",
"name='explorer.exe'",
"get",
"ProcessId",
"/format:csv");
Process process = listExplorer.start();
BufferedReader reader =
new BufferedReader(
new InputStreamReader(
process.getInputStream()));
String line;
while ((line =
BoundedLineReader.readLine(
reader, 5_000_000))
!= null) {
if (line.matches(".*\\d+.*")) { // Contains numbers
String[] parts = line.trim().split(",");
if (parts.length >= 2) {
existingPids.add(
parts[parts.length - 1].trim());
}
}
}
process.waitFor(2, TimeUnit.SECONDS);
// Start new explorer
ProcessBuilder pb =
new ProcessBuilder(
"cmd",
"/c",
"start",
"/min",
"/b",
"explorer.exe",
currentDir);
pb.redirectErrorStream(true);
explorerProcess = pb.start();
// Schedule cleanup
Timer cleanupTimer =
new Timer(
2000,
cleanup -> {
try {
// Find new explorer processes
ProcessBuilder findNewExplorer =
new ProcessBuilder(
"cmd",
"/c",
"wmic",
"process",
"where",
"name='explorer.exe'",
"get",
"ProcessId",
"/format:csv");
Process newProcess =
findNewExplorer.start();
BufferedReader newReader =
new BufferedReader(
new InputStreamReader(
newProcess
.getInputStream()));
String newLine;
while ((newLine =
BoundedLineReader
.readLine(
newReader,
5_000_000))
!= null) {
if (newLine.matches(
".*\\d+.*")) {
String[] parts =
newLine.trim()
.split(",");
if (parts.length >= 2) {
String pid =
parts[
parts.length
- 1]
.trim();
if (!existingPids
.contains(
pid)) {
log.debug(
"Found new explorer.exe with PID: "
+ pid);
ProcessBuilder
killProcess =
new ProcessBuilder(
"taskkill",
"/PID",
pid,
"/F");
killProcess
.redirectErrorStream(
true);
Process killResult =
killProcess
.start();
killResult.waitFor(
2,
TimeUnit
.SECONDS);
log.debug(
"Explorer process terminated: "
+ pid);
}
}
}
}
newProcess.waitFor(
2, TimeUnit.SECONDS);
} catch (Exception ex) {
log.error(
"Error cleaning up Windows explorer process",
ex);
}
});
cleanupTimer.setRepeats(false);
cleanupTimer.start();
stuckTimer.stop();
} catch (Exception ex) {
log.error("Error refreshing Windows explorer", ex);
}
}
});
stuckTimer.setRepeats(true);
stuckTimer.start();
}
}
public void setProgress(final int progress) {
SwingUtilities.invokeLater(
() -> {
@@ -288,23 +115,11 @@ public class LoadingWindow extends JDialog {
// Add thread state logging
Thread currentThread = Thread.currentThread();
log.info(
log.debug(
"Current thread state - Name: {}, State: {}, Priority: {}",
currentThread.getName(),
currentThread.getState(),
currentThread.getPriority());
if (validProgress >= 90 && validProgress < 95) {
checkAndRefreshExplorer();
} else {
// Reset the timer if we move past 95%
if (validProgress >= 95) {
if (stuckTimer != null) {
stuckTimer.stop();
}
timeAt90Percent = -1;
}
}
}
progressBar.setValue(validProgress);
@@ -330,7 +145,7 @@ public class LoadingWindow extends JDialog {
statusLabel.setText(validStatus);
// Log UI state when status changes
log.info(
log.debug(
"UI State - Window visible: {}, Progress: {}%, Status: {}",
isVisible(), progressBar.getValue(), validStatus);

View File

@@ -21,9 +21,9 @@ public class ExternalAppDepConfig {
{
put("soffice", List.of("LibreOffice"));
put("/opt/venv/bin/weasyprint", List.of("Weasyprint"));
put("weasyprint", List.of("Weasyprint"));
put("pdftohtml", List.of("Pdftohtml"));
put("/opt/venv/bin/unoconvert", List.of("Unoconv"));
put("unoconv", List.of("Unoconv"));
put("qpdf", List.of("qpdf"));
put("tesseract", List.of("tesseract"));
}
@@ -101,9 +101,9 @@ public class ExternalAppDepConfig {
checkDependencyAndDisableGroup("tesseract");
checkDependencyAndDisableGroup("soffice");
checkDependencyAndDisableGroup("qpdf");
checkDependencyAndDisableGroup("/opt/venv/bin/weasyprint");
checkDependencyAndDisableGroup("weasyprint");
checkDependencyAndDisableGroup("pdftohtml");
checkDependencyAndDisableGroup("/opt/venv/bin/unoconvert");
checkDependencyAndDisableGroup("unoconv");
// Special handling for Python/OpenCV dependencies
boolean pythonAvailable = isCommandAvailable("python3") || isCommandAvailable("python");
if (!pythonAvailable) {

View File

@@ -139,9 +139,6 @@ public class UserService implements UserServiceInterface {
User user =
findByUsernameIgnoreCase(username)
.orElseThrow(() -> new UsernameNotFoundException("User not found"));
if(user.getApiKey() == null || user.getApiKey().length() == 0) {
user = addApiKeyToUser(username);
}
return user.getApiKey();
}

View File

@@ -174,38 +174,7 @@ public class RearrangePagesPDFController {
return newPageOrderZeroBased;
}
private List<Integer> duplicate(int totalPages, String pageOrder) {
List<Integer> newPageOrder = new ArrayList<>();
int duplicateCount;
try {
// Parse the duplicate count from pageOrder
duplicateCount =
pageOrder != null && !pageOrder.isEmpty()
? Integer.parseInt(pageOrder.trim())
: 2; // Default to 2 if not specified
} catch (NumberFormatException e) {
log.error("Invalid duplicate count specified", e);
duplicateCount = 2; // Default to 2 if invalid input
}
// Validate duplicate count
if (duplicateCount < 1) {
duplicateCount = 2; // Default to 2 if invalid input
}
// For each page in the document
for (int pageNum = 0; pageNum < totalPages; pageNum++) {
// Add the current page index duplicateCount times
for (int dupCount = 0; dupCount < duplicateCount; dupCount++) {
newPageOrder.add(pageNum);
}
}
return newPageOrder;
}
private List<Integer> processSortTypes(String sortTypes, int totalPages, String pageOrder) {
private List<Integer> processSortTypes(String sortTypes, int totalPages) {
try {
SortTypes mode = SortTypes.valueOf(sortTypes.toUpperCase());
switch (mode) {
@@ -227,8 +196,6 @@ public class RearrangePagesPDFController {
return removeLast(totalPages);
case REMOVE_FIRST_AND_LAST:
return removeFirstAndLast(totalPages);
case DUPLICATE:
return duplicate(totalPages, pageOrder);
default:
throw new IllegalArgumentException("Unsupported custom mode");
}
@@ -256,10 +223,8 @@ public class RearrangePagesPDFController {
String[] pageOrderArr = pageOrder != null ? pageOrder.split(",") : new String[0];
int totalPages = document.getNumberOfPages();
List<Integer> newPageOrder;
if (sortType != null
&& sortType.length() > 0
&& !"custom".equals(sortType.toLowerCase())) {
newPageOrder = processSortTypes(sortType, totalPages, pageOrder);
if (sortType != null && sortType.length() > 0) {
newPageOrder = processSortTypes(sortType, totalPages);
} else {
newPageOrder = GeneralUtils.parsePageList(pageOrderArr, totalPages, false);
}

View File

@@ -100,8 +100,6 @@ public class SplitPdfBySectionsController {
if (sectionNum == horiz * verti) pageNum++;
}
zipOut.finish();
data = Files.readAllBytes(zipFile);
return WebResponseUtils.bytesToWebResponse(
data, filename + "_split.zip", MediaType.APPLICATION_OCTET_STREAM);

View File

@@ -61,13 +61,13 @@ public class ConvertOfficeController {
List<String> command =
new ArrayList<>(
Arrays.asList(
"/opt/venv/bin/unoconvert",
"--port",
"2003",
"--convert-to",
"unoconv",
"-vvv",
"-f",
"pdf",
tempInputFile.toString(),
tempOutputFile.toString()));
"-o",
tempOutputFile.toString(),
tempInputFile.toString()));
ProcessExecutorResult returnCode =
ProcessExecutor.getInstance(ProcessExecutor.Processes.LIBRE_OFFICE)
.runCommandWithOutputHandling(command);

View File

@@ -65,7 +65,7 @@ public class ConvertWebsiteToPDF {
// Prepare the WeasyPrint command
List<String> command = new ArrayList<>();
command.add("/opt/venv/bin/weasyprint");
command.add("weasyprint");
command.add(URL);
command.add(tempOutputFile.toString());

View File

@@ -1,14 +1,7 @@
package stirling.software.SPDF.controller.api.converters;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.StringWriter;
import java.nio.charset.StandardCharsets;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.zip.ZipEntry;
import java.util.zip.ZipOutputStream;
import org.apache.commons.csv.CSVFormat;
import org.apache.commons.csv.QuoteMode;
@@ -25,18 +18,18 @@ import org.springframework.web.bind.annotation.RestController;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.tags.Tag;
import lombok.extern.slf4j.Slf4j;
import stirling.software.SPDF.model.api.PDFWithPageNums;
import stirling.software.SPDF.model.api.extract.PDFFilePage;
import stirling.software.SPDF.pdf.FlexibleCSVWriter;
import technology.tabula.ObjectExtractor;
import technology.tabula.Page;
import technology.tabula.Table;
import technology.tabula.extractors.SpreadsheetExtractionAlgorithm;
import technology.tabula.writers.Writer;
@RestController
@RequestMapping("/api/v1/convert")
@Tag(name = "Convert", description = "Convert APIs")
@Slf4j
public class ExtractCSVController {
@PostMapping(value = "/pdf/csv", consumes = "multipart/form-data")
@@ -44,80 +37,31 @@ public class ExtractCSVController {
summary = "Extracts a CSV document from a PDF",
description =
"This operation takes an input PDF file and returns CSV file of whole page. Input:PDF Output:CSV Type:SISO")
public ResponseEntity<?> pdfToCsv(@ModelAttribute PDFWithPageNums form) throws Exception {
String baseName = getBaseName(form.getFileInput().getOriginalFilename());
List<CsvEntry> csvEntries = new ArrayList<>();
public ResponseEntity<String> PdfToCsv(@ModelAttribute PDFFilePage form) throws Exception {
StringWriter writer = new StringWriter();
try (PDDocument document = Loader.loadPDF(form.getFileInput().getBytes())) {
List<Integer> pages = form.getPageNumbersList(document, true);
CSVFormat format =
CSVFormat.EXCEL.builder().setEscape('"').setQuoteMode(QuoteMode.ALL).build();
Writer csvWriter = new FlexibleCSVWriter(format);
SpreadsheetExtractionAlgorithm sea = new SpreadsheetExtractionAlgorithm();
CSVFormat format = CSVFormat.EXCEL.builder()
.setEscape('"')
.setQuoteMode(QuoteMode.ALL)
.build();
for (int pageNum : pages) {
try (ObjectExtractor extractor = new ObjectExtractor(document)) {
log.info("{}",pageNum);
Page page = extractor.extract(pageNum);
List<Table> tables = sea.extract(page);
for (int i = 0; i < tables.size(); i++) {
StringWriter sw = new StringWriter();
FlexibleCSVWriter csvWriter = new FlexibleCSVWriter(format);
csvWriter.write(sw, Collections.singletonList(tables.get(i)));
String entryName = generateEntryName(baseName, pageNum, i + 1);
csvEntries.add(new CsvEntry(entryName, sw.toString()));
}
}
}
if (csvEntries.isEmpty()) {
return ResponseEntity.noContent().build();
} else if (csvEntries.size() == 1) {
return createCsvResponse(csvEntries.get(0), baseName);
} else {
return createZipResponse(csvEntries, baseName);
try (ObjectExtractor extractor = new ObjectExtractor(document)) {
Page page = extractor.extract(form.getPageId());
List<Table> tables = sea.extract(page);
csvWriter.write(writer, tables);
}
}
}
private ResponseEntity<byte[]> createZipResponse(List<CsvEntry> entries, String baseName) throws IOException {
ByteArrayOutputStream baos = new ByteArrayOutputStream();
try (ZipOutputStream zipOut = new ZipOutputStream(baos)) {
for (CsvEntry entry : entries) {
ZipEntry zipEntry = new ZipEntry(entry.filename());
zipOut.putNextEntry(zipEntry);
zipOut.write(entry.content().getBytes(StandardCharsets.UTF_8));
zipOut.closeEntry();
}
}
HttpHeaders headers = new HttpHeaders();
headers.setContentDisposition(ContentDisposition.builder("attachment")
.filename(baseName + "_extracted.zip").build());
headers.setContentType(MediaType.parseMediaType("application/zip"));
return ResponseEntity.ok().headers(headers).body(baos.toByteArray());
}
private ResponseEntity<String> createCsvResponse(CsvEntry entry, String baseName) {
HttpHeaders headers = new HttpHeaders();
headers.setContentDisposition(ContentDisposition.builder("attachment")
.filename(baseName + "_extracted.csv").build());
headers.setContentDisposition(
ContentDisposition.builder("attachment")
.filename(
form.getFileInput()
.getOriginalFilename()
.replaceFirst("[.][^.]+$", "")
+ "_extracted.csv")
.build());
headers.setContentType(MediaType.parseMediaType("text/csv"));
return ResponseEntity.ok().headers(headers).body(entry.content());
}
private String generateEntryName(String baseName, int pageNum, int tableIndex) {
return String.format("%s_p%d_t%d.csv", baseName, pageNum, tableIndex);
return ResponseEntity.ok().headers(headers).body(writer.toString());
}
private String getBaseName(String filename) {
return filename.replaceFirst("[.][^.]+$", "");
}
private record CsvEntry(String filename, String content) {}
}

View File

@@ -8,9 +8,7 @@ import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;
import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
import java.util.zip.ZipEntry;
import java.util.zip.ZipOutputStream;
@@ -43,12 +41,8 @@ import stirling.software.SPDF.utils.WebResponseUtils;
@Tag(name = "Misc", description = "Miscellaneous APIs")
public class AutoSplitPdfController {
private static final Set<String> VALID_QR_CONTENTS =
new HashSet<>(
Set.of(
"https://github.com/Stirling-Tools/Stirling-PDF",
"https://github.com/Frooodle/Stirling-PDF",
"https://stirlingpdf.com"));
private static final String QR_CONTENT = "https://github.com/Stirling-Tools/Stirling-PDF";
private static final String QR_CONTENT_OLD = "https://github.com/Frooodle/Stirling-PDF";
private final CustomPDDocumentFactory pdfDocumentFactory;
@@ -126,14 +120,13 @@ public class AutoSplitPdfController {
for (int page = 0; page < document.getNumberOfPages(); ++page) {
BufferedImage bim = pdfRenderer.renderImageWithDPI(page, 150);
String result = decodeQRCode(bim);
boolean isValidQrCode = VALID_QR_CONTENTS.contains(result);
log.debug("detected qr code {}, code is vale={}", result, isValidQrCode);
if (isValidQrCode && page != 0) {
if ((QR_CONTENT.equals(result) || QR_CONTENT_OLD.equals(result)) && page != 0) {
splitDocuments.add(new PDDocument());
}
if (!splitDocuments.isEmpty() && !isValidQrCode) {
if (!splitDocuments.isEmpty()
&& !QR_CONTENT.equals(result)
&& !QR_CONTENT_OLD.equals(result)) {
splitDocuments.get(splitDocuments.size() - 1).addPage(document.getPage(page));
} else if (page == 0) {
PDDocument firstDocument = new PDDocument();
@@ -142,7 +135,7 @@ public class AutoSplitPdfController {
}
// If duplexMode is true and current page is a divider, then skip next page
if (duplexMode && isValidQrCode) {
if (duplexMode && (QR_CONTENT.equals(result) || QR_CONTENT_OLD.equals(result))) {
page++;
}
}
@@ -175,9 +168,6 @@ public class AutoSplitPdfController {
return WebResponseUtils.bytesToWebResponse(
data, filename + ".zip", MediaType.APPLICATION_OCTET_STREAM);
} catch (Exception e) {
log.error("Error in auto split", e);
throw e;
} finally {
// Clean up resources
if (document != null) {

View File

@@ -5,7 +5,6 @@ import java.awt.image.BufferedImage;
import java.io.ByteArrayOutputStream;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.StandardCopyOption;
import java.util.ArrayList;
import java.util.List;
@@ -95,9 +94,7 @@ public class CompressController {
}
}
}
Path tempOutput = Files.createTempFile("output_", ".pdf");
doc.save(tempOutput.toString());
Files.move(tempOutput, pdfFile, StandardCopyOption.REPLACE_EXISTING);
doc.save(pdfFile.toString());
}
}
@@ -191,7 +188,7 @@ public class CompressController {
optimizeLevel =
incrementOptimizeLevel(
optimizeLevel, outputFileSize, expectedOutputSize);
if (autoMode && optimizeLevel >= 9) {
if (autoMode && optimizeLevel > 9) {
log.info("Maximum compression level reached in auto mode");
sizeMet = true;
}

View File

@@ -52,7 +52,7 @@ 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 PDFExtractImagesRequest request)
throws IOException, InterruptedException, ExecutionException {
MultipartFile file = request.getFileInput();

View File

@@ -46,7 +46,7 @@ public class FlattenController {
@Operation(
summary = "Flatten PDF form fields or full page",
description =
"Flattening just PDF form fields or converting each page to images to make text unselectable. Input:PDF, Output:PDF. Type:SISO")
"Flattening just PDF form fields or converting each page to images to make text unselectable. Input: PDF, Output: PDF. Type: SISO")
public ResponseEntity<byte[]> flatten(@ModelAttribute FlattenRequest request) throws Exception {
MultipartFile file = request.getFileInput();

View File

@@ -8,7 +8,7 @@ import java.util.*;
import java.util.stream.Collectors;
import java.util.zip.ZipEntry;
import java.util.zip.ZipOutputStream;
import io.swagger.v3.oas.annotations.Operation;
import javax.imageio.ImageIO;
import org.apache.pdfbox.multipdf.PDFMergerUtility;
@@ -26,7 +26,6 @@ import org.springframework.web.multipart.MultipartFile;
import io.github.pixee.security.BoundedLineReader;
import io.github.pixee.security.Filenames;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.tags.Tag;
import lombok.extern.slf4j.Slf4j;
@@ -66,10 +65,9 @@ public class OCRController {
}
@PostMapping(consumes = "multipart/form-data", value = "/ocr-pdf")
@Operation(
summary = "Process PDF files with OCR using Tesseract",
description =
"Takes a PDF file as input, performs OCR using specified languages and OCR type (skip-text/force-ocr), and returns the processed PDF. Input:PDF Output:PDF Type:SISO")
@Operation(
summary = "Process PDF files with OCR using Tesseract",
description = "Takes a PDF file as input, performs OCR using specified languages and OCR type (skip-text/force-ocr), and returns the processed PDF. Input:PDF Output:PDF Type:SISO")
public ResponseEntity<byte[]> processPdfWithOCR(
@ModelAttribute ProcessPdfWithOcrRequest request)
throws IOException, InterruptedException {

View File

@@ -25,7 +25,6 @@ import io.swagger.v3.oas.annotations.tags.Tag;
import lombok.extern.slf4j.Slf4j;
import stirling.software.SPDF.model.PipelineConfig;
import stirling.software.SPDF.model.PipelineResult;
import stirling.software.SPDF.model.api.HandleDataRequest;
import stirling.software.SPDF.utils.WebResponseUtils;
@@ -59,8 +58,7 @@ public class PipelineController {
if (inputFiles == null || inputFiles.size() == 0) {
return null;
}
PipelineResult result = processor.runPipelineAgainstFiles(inputFiles, config);
List<Resource> outputFiles = result.getOutputFiles();
List<Resource> outputFiles = processor.runPipelineAgainstFiles(inputFiles, config);
if (outputFiles != null && outputFiles.size() == 1) {
// If there is only one file, return it directly
Resource singleFile = outputFiles.get(0);

View File

@@ -27,7 +27,6 @@ import lombok.extern.slf4j.Slf4j;
import stirling.software.SPDF.config.InstallationPathConfig;
import stirling.software.SPDF.model.PipelineConfig;
import stirling.software.SPDF.model.PipelineOperation;
import stirling.software.SPDF.model.PipelineResult;
import stirling.software.SPDF.utils.FileMonitor;
@Service
@@ -144,64 +143,19 @@ public class PipelineDirectoryProcessor {
private File[] collectFilesForProcessing(Path dir, Path jsonFile, PipelineOperation operation)
throws IOException {
List<String> inputExtensions =
apiDocService.getExtensionTypes(false, operation.getOperation());
log.info(
"Allowed extensions for operation {}: {}",
operation.getOperation(),
inputExtensions);
boolean allowAllFiles = inputExtensions.contains("ALL");
try (Stream<Path> paths = Files.list(dir)) {
File[] files =
paths.filter(
path -> {
if (Files.isDirectory(path)) {
return false;
}
if (path.equals(jsonFile)) {
return false;
}
// Get file extension
String filename = path.getFileName().toString();
String extension =
filename.contains(".")
? filename.substring(
filename.lastIndexOf(".")
+ 1)
.toLowerCase()
: "";
// Check against allowed extensions
boolean isAllowed =
allowAllFiles
|| inputExtensions.contains(extension);
if (!isAllowed) {
log.info(
"Skipping file with unsupported extension: {} ({})",
filename,
extension);
}
return isAllowed;
})
.filter(
path -> {
boolean isReady =
fileMonitor.isFileReadyForProcessing(path);
if (!isReady) {
log.info(
"File not ready for processing (locked/created last 5s): {}",
path);
}
return isReady;
})
.map(Path::toFile)
.toArray(File[]::new);
log.info("Collected {} files for processing", files.length);
return files;
if ("automated".equals(operation.getParameters().get("fileInput"))) {
return paths.filter(
path ->
!Files.isDirectory(path)
&& !path.equals(jsonFile)
&& fileMonitor.isFileReadyForProcessing(path))
.map(Path::toFile)
.toArray(File[]::new);
} else {
String fileInput = (String) operation.getParameters().get("fileInput");
return new File[] {new File(fileInput)};
}
}
}
@@ -244,37 +198,19 @@ public class PipelineDirectoryProcessor {
try {
List<Resource> inputFiles =
processor.generateInputFiles(filesToProcess.toArray(new File[0]));
if (inputFiles == null || inputFiles.isEmpty()) {
if (inputFiles == null || inputFiles.size() == 0) {
return;
}
PipelineResult result = processor.runPipelineAgainstFiles(inputFiles, config);
if (result.isHasErrors()) {
log.error("Errors occurred during processing, retaining original files");
moveToErrorDirectory(filesToProcess, dir);
} else {
moveAndRenameFiles(result.getOutputFiles(), config, dir);
deleteOriginalFiles(filesToProcess, processingDir);
}
List<Resource> outputFiles = processor.runPipelineAgainstFiles(inputFiles, config);
if (outputFiles == null) return;
moveAndRenameFiles(outputFiles, config, dir);
deleteOriginalFiles(filesToProcess, processingDir);
} catch (Exception e) {
log.error("Error during processing", e);
log.error("error during processing", e);
moveFilesBack(filesToProcess, processingDir);
}
}
private void moveToErrorDirectory(List<File> files, Path originalDir) throws IOException {
Path errorDir = originalDir.resolve("error");
if (!Files.exists(errorDir)) {
Files.createDirectories(errorDir);
}
for (File file : files) {
Path target = errorDir.resolve(file.getName());
Files.move(file.toPath(), target);
log.info("Moved failed file to error directory for investigation: {}", target);
}
}
private void moveAndRenameFiles(List<Resource> resources, PipelineConfig config, Path dir)
throws IOException {
for (Resource resource : resources) {

View File

@@ -33,7 +33,6 @@ import lombok.extern.slf4j.Slf4j;
import stirling.software.SPDF.SPDFApplication;
import stirling.software.SPDF.model.PipelineConfig;
import stirling.software.SPDF.model.PipelineOperation;
import stirling.software.SPDF.model.PipelineResult;
import stirling.software.SPDF.model.Role;
@Service
@@ -85,10 +84,8 @@ public class PipelineProcessor {
return "http://localhost:" + port + contextPath + "/";
}
PipelineResult runPipelineAgainstFiles(List<Resource> outputFiles, PipelineConfig config)
List<Resource> runPipelineAgainstFiles(List<Resource> outputFiles, PipelineConfig config)
throws Exception {
PipelineResult result = new PipelineResult();
ByteArrayOutputStream logStream = new ByteArrayOutputStream();
PrintStream logPrintStream = new PrintStream(logStream);
boolean hasErrors = false;
@@ -133,8 +130,7 @@ public class PipelineProcessor {
if (operation.startsWith("filter-")
&& (response.getBody() == null
|| response.getBody().length == 0)) {
result.setFiltersApplied(true);
log.info("Skipping file due to filtering {}", operation);
log.info("Skipping file due to failing {}", operation);
continue;
}
if (!response.getStatusCode().equals(HttpStatus.OK)) {
@@ -212,10 +208,7 @@ public class PipelineProcessor {
if (hasErrors) {
log.error("Errors occurred during processing. Log: {}", logStream.toString());
}
result.setHasErrors(hasErrors);
result.setFiltersApplied(hasErrors);
result.setOutputFiles(outputFiles);
return result;
return outputFiles;
}
private ResponseEntity<byte[]> sendWebRequest(String url, MultiValueMap<String, Object> body) {

View File

@@ -40,7 +40,8 @@ public class RemoveCertSignController {
@Operation(
summary = "Remove digital signature from PDF",
description =
"This endpoint accepts a PDF file and returns the PDF file without the digital signature. Input:PDF, Output:PDF Type:SISO")
"This endpoint accepts a PDF file and returns the PDF file without the digital signature."
+ " Input: PDF, Output: PDF")
public ResponseEntity<byte[]> removeCertSignPDF(@ModelAttribute PDFFile request)
throws Exception {
MultipartFile pdf = request.getFileInput();

View File

@@ -1,14 +0,0 @@
package stirling.software.SPDF.model;
import java.util.List;
import org.springframework.core.io.Resource;
import lombok.Data;
@Data
public class PipelineResult {
private List<Resource> outputFiles;
private boolean hasErrors;
private boolean filtersApplied;
}

View File

@@ -1,7 +1,6 @@
package stirling.software.SPDF.model;
public enum SortTypes {
CUSTOM,
REVERSE_ORDER,
DUPLEX_SORT,
BOOKLET_SORT,
@@ -11,5 +10,4 @@ public enum SortTypes {
REMOVE_FIRST,
REMOVE_LAST,
REMOVE_FIRST_AND_LAST,
DUPLICATE
}

View File

@@ -8,7 +8,6 @@ import org.apache.pdfbox.pdmodel.PDDocument;
import io.swagger.v3.oas.annotations.Hidden;
import io.swagger.v3.oas.annotations.media.Schema;
import io.swagger.v3.oas.annotations.media.Schema.RequiredMode;
import lombok.Data;
import lombok.EqualsAndHashCode;
@@ -26,9 +25,7 @@ public class PDFWithPageNums extends PDFFile {
description =
"The pages to select, Supports ranges (e.g., '1,3,5-9'), or 'all' or functions in the"
+ " format 'an+b' where 'a' is the multiplier of the page number 'n', and 'b' is a"
+ " constant (e.g., '2n+1', '3n', '6n-5')\"",
defaultValue = "all",
requiredMode = RequiredMode.NOT_REQUIRED)
+ " constant (e.g., '2n+1', '3n', '6n-5')\"")
private String pageNumbers;
@Hidden
@@ -44,9 +41,9 @@ public class PDFWithPageNums extends PDFFile {
}
@Hidden
public List<Integer> getPageNumbersList(PDDocument doc, boolean oneBased) {
public List<Integer> getPageNumbersList(PDDocument doc, boolean zeroCount) {
int pageCount = 0;
pageCount = doc.getNumberOfPages();
return GeneralUtils.parsePageList(pageNumbers, pageCount, oneBased);
return GeneralUtils.parsePageList(pageNumbers, pageCount, zeroCount);
}
}

View File

@@ -0,0 +1,15 @@
package stirling.software.SPDF.model.api.extract;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import lombok.EqualsAndHashCode;
import stirling.software.SPDF.model.api.PDFFile;
@Data
@EqualsAndHashCode(callSuper = true)
public class PDFFilePage extends PDFFile {
@Schema(description = "Number of chosen page", type = "number")
private int pageId;
}

View File

@@ -15,8 +15,6 @@ public class RearrangePagesRequest extends PDFWithPageNums {
implementation = SortTypes.class,
description =
"The custom mode for page rearrangement. Valid values are:\n"
+ "CUSTOM: Uses order defined in PageNums "
+ "DUPLICATE: Duplicate pages n times (if Page order defined as 4, then duplicates each page 4 times)"
+ "REVERSE_ORDER: Reverses the order of all pages.\n"
+ "DUPLEX_SORT: Sorts pages as if all fronts were scanned then all backs in reverse (1, n, 2, n-1, ...). "
+ "BOOKLET_SORT: Arranges pages for booklet printing (last, first, second, second last, ...).\n"

View File

@@ -1,7 +1,6 @@
package stirling.software.SPDF.model.api.misc;
import io.swagger.v3.oas.annotations.media.Schema;
import io.swagger.v3.oas.annotations.media.Schema.RequiredMode;
import lombok.Data;
import lombok.EqualsAndHashCode;
@@ -12,49 +11,24 @@ import stirling.software.SPDF.model.api.PDFWithPageNums;
public class AddPageNumbersRequest extends PDFWithPageNums {
@Schema(
description = "Custom margin: small/medium/large/x-large",
allowableValues = {"small", "medium", "large", "x-large"},
defaultValue = "medium",
requiredMode = RequiredMode.NOT_REQUIRED)
description = "Custom margin: small/medium/large",
allowableValues = {"small", "medium", "large"})
private String customMargin;
@Schema(
description = "Font size for page numbers",
minimum = "1",
requiredMode = RequiredMode.REQUIRED)
private float fontSize;
@Schema(
description = "Font type for page numbers",
allowableValues = {"helvetica", "courier", "times"},
requiredMode = RequiredMode.REQUIRED)
private String fontType;
@Schema(
description =
"Position: 1-9 representing positions on the page (1=top-left, 5=center, 9=bottom-right)",
minimum = "1",
maximum = "9",
requiredMode = RequiredMode.REQUIRED)
@Schema(description = "Position: 1 of 9 positions", minimum = "1", maximum = "9")
private int position;
@Schema(
description = "Starting number for page numbering",
minimum = "1",
requiredMode = RequiredMode.REQUIRED)
@Schema(description = "Starting number", minimum = "1")
private int startingNumber;
@Schema(
description = "Which pages to number (e.g. '1,3-5,7' or 'all')",
defaultValue = "all",
requiredMode = RequiredMode.NOT_REQUIRED)
@Schema(description = "Which pages to number, default all")
private String pagesToNumber;
@Schema(
description =
"Custom text pattern. Available variables: {n}=current page number, {total}=total pages, {filename}=original filename",
example = "Page {n} of {total}",
defaultValue = "{n}",
requiredMode = RequiredMode.NOT_REQUIRED)
"Custom text: defaults to just number but can have things like \"Page {n} of {p}\"")
private String customText;
}

View File

@@ -50,7 +50,7 @@ public class FileToPdf {
List<String> command = new ArrayList<>();
if (!htmlFormatsInstalled) {
command.add("/opt/venv/bin/weasyprint");
command.add("weasyprint");
command.add("-e");
command.add("utf-8");
command.add("-v");

View File

@@ -210,7 +210,8 @@ public class GeneralUtils {
result.addAll(handlePart(page, totalPages, offset));
}
}
return result;
return new ArrayList<>(
new java.util.LinkedHashSet<>(result)); // Remove duplicates and maintain order
}
public static List<Integer> evaluateNFunc(String expression, int maxValue) {

View File

@@ -1,67 +0,0 @@
package stirling.software.SPDF.utils;
import java.awt.*;
import javax.swing.*;
public class UIScaling {
private static final double BASE_RESOLUTION_WIDTH = 1920.0;
private static final double BASE_RESOLUTION_HEIGHT = 1080.0;
public static double getWidthScaleFactor() {
Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();
return screenSize.getWidth() / BASE_RESOLUTION_WIDTH;
}
public static double getHeightScaleFactor() {
Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();
return screenSize.getHeight() / BASE_RESOLUTION_HEIGHT;
}
public static int scaleWidth(int value) {
return (int) Math.round(value * getWidthScaleFactor());
}
public static int scaleHeight(int value) {
return (int) Math.round(value * getHeightScaleFactor());
}
public static Dimension scale(Dimension dim) {
return new Dimension(scaleWidth(dim.width), scaleHeight(dim.height));
}
public static Insets scale(Insets insets) {
return new Insets(
scaleHeight(insets.top),
scaleWidth(insets.left),
scaleHeight(insets.bottom),
scaleWidth(insets.right));
}
public static Font scaleFont(Font font) {
// For fonts, we'll use the smaller scale factor to ensure readability
double scaleFactor = Math.min(getWidthScaleFactor(), getHeightScaleFactor());
return font.deriveFont((float) (font.getSize() * scaleFactor));
}
// Utility method for aspect ratio aware icon scaling
public static Image scaleIcon(Image icon, int targetWidth, int targetHeight) {
if (icon == null) return null;
double widthScale = getWidthScaleFactor();
double heightScale = getHeightScaleFactor();
int scaledWidth = (int) Math.round(targetWidth * widthScale);
int scaledHeight = (int) Math.round(targetHeight * heightScale);
// Maintain aspect ratio for icons
double aspectRatio = (double) icon.getWidth(null) / icon.getHeight(null);
if (scaledWidth / scaledHeight > aspectRatio) {
scaledWidth = (int) (scaledHeight * aspectRatio);
} else {
scaledHeight = (int) (scaledWidth / aspectRatio);
}
return icon.getScaledInstance(scaledWidth, scaledHeight, Image.SCALE_SMOOTH);
}
}

View File

@@ -30,69 +30,52 @@ public class InvertFullColorStrategy extends ReplaceAndInvertColorStrategy {
@Override
public InputStreamResource replace() throws IOException {
File file = null;
try {
// Create a temporary file, with the original filename from the multipart file
file = Files.createTempFile("temp", getFileInput().getOriginalFilename()).toFile();
// Create a temporary file, with the original filename from the multipart file
File file = Files.createTempFile("temp", getFileInput().getOriginalFilename()).toFile();
// Transfer the content of the multipart file to the file
getFileInput().transferTo(file);
// Transfer the content of the multipart file to the file
getFileInput().transferTo(file);
// Load the uploaded PDF
PDDocument document = Loader.loadPDF(file);
// Load the uploaded PDF
PDDocument document = Loader.loadPDF(file);
// Render each page and invert colors
PDFRenderer pdfRenderer = new PDFRenderer(document);
for (int page = 0; page < document.getNumberOfPages(); page++) {
BufferedImage image =
pdfRenderer.renderImageWithDPI(page, 300); // Render page at 300 DPI
// Render each page and invert colors
PDFRenderer pdfRenderer = new PDFRenderer(document);
for (int page = 0; page < document.getNumberOfPages(); page++) {
BufferedImage image =
pdfRenderer.renderImageWithDPI(page, 300); // Render page at 300 DPI
// Invert the colors
invertImageColors(image);
// Invert the colors
invertImageColors(image);
// Create a new PDPage from the inverted image
PDPage pdPage = document.getPage(page);
File tempImageFile = null;
try {
tempImageFile = convertToBufferedImageTpFile(image);
PDImageXObject pdImage =
PDImageXObject.createFromFileByContent(tempImageFile, document);
// Create a new PDPage from the inverted image
PDPage pdPage = document.getPage(page);
PDImageXObject pdImage =
PDImageXObject.createFromFileByContent(
convertToBufferedImageTpFile(image), document);
PDPageContentStream contentStream =
new PDPageContentStream(
document,
pdPage,
PDPageContentStream.AppendMode.OVERWRITE,
true);
contentStream.drawImage(
pdImage,
0,
0,
pdPage.getMediaBox().getWidth(),
pdPage.getMediaBox().getHeight());
contentStream.close();
} finally {
if (tempImageFile != null && tempImageFile.exists()) {
Files.delete(tempImageFile.toPath());
}
}
}
// Save the modified PDF to a ByteArrayOutputStream
ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
document.save(byteArrayOutputStream);
document.close();
// Prepare the modified PDF for download
ByteArrayInputStream inputStream =
new ByteArrayInputStream(byteArrayOutputStream.toByteArray());
InputStreamResource resource = new InputStreamResource(inputStream);
return resource;
} finally {
if (file != null && file.exists()) {
Files.delete(file.toPath());
}
PDPageContentStream contentStream =
new PDPageContentStream(
document, pdPage, PDPageContentStream.AppendMode.OVERWRITE, true);
contentStream.drawImage(
pdImage,
0,
0,
pdPage.getMediaBox().getWidth(),
pdPage.getMediaBox().getHeight());
contentStream.close();
}
// Save the modified PDF to a ByteArrayOutputStream
ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
document.save(byteArrayOutputStream);
document.close();
// Prepare the modified PDF for download
ByteArrayInputStream inputStream =
new ByteArrayInputStream(byteArrayOutputStream.toByteArray());
InputStreamResource resource = new InputStreamResource(inputStream);
return resource;
}
// Method to invert image colors
@@ -115,7 +98,7 @@ public class InvertFullColorStrategy extends ReplaceAndInvertColorStrategy {
// Helper method to convert BufferedImage to InputStream
private File convertToBufferedImageTpFile(BufferedImage image) throws IOException {
File file = File.createTempFile("image", ".png");
File file = new File("image.png");
ImageIO.write(image, "png", file);
return file;
}

View File

@@ -262,7 +262,7 @@ home.desc=متجرك الشامل المستضاف محليًا لجميع اح
home.searchBar=البحث عن الميزات...
home.viewPdf.title=View/Edit PDF
home.viewPdf.title=عرض PDF
home.viewPdf.desc=عرض وتعليق وإضافة نص أو صور
viewPdf.tags=عرض,قراءة,تعليق,نص,صورة
@@ -623,7 +623,6 @@ redact.showAttatchments=Show Attachments
redact.showLayers=Show Layers (double-click to reset all layers to the default state)
redact.colourPicker=Colour Picker
redact.findCurrentOutlineItem=Find current outline item
redact.applyChanges=Apply Changes
#showJS
showJS.title=إظهار جافا سكريبت
@@ -769,6 +768,7 @@ autoSplitPDF.selectText.3=ارفع ملف PDF الممسوح ضوئيًا الك
autoSplitPDF.selectText.4=يتم اكتشاف صفحات الفاصل تلقائيًا وإزالتها، مما يضمن مستندًا نهائيًا نظيفًا.
autoSplitPDF.formPrompt=أرسل ملف PDF يحتوي على فواصل صفحات Stirling-PDF:
autoSplitPDF.duplexMode=وضع الطباعة على الوجهين (المسح الضوئي للوجه الأمامي والخلفي)
autoSplitPDF.dividerDownload1=تنزيل 'فاصل التقسيم التلقائي (الحد الأدنى).pdf'
autoSplitPDF.dividerDownload2=تنزيل 'فاصل التقسيم التلقائي (مع التعليمات).pdf'
autoSplitPDF.submit=إرسال
@@ -992,7 +992,6 @@ pdfOrganiser.mode.7=إزالة الأول
pdfOrganiser.mode.8=إزالة الأخير
pdfOrganiser.mode.9=إزالة
pdfOrganiser.mode.10=دمج فردي-زوجي
pdfOrganiser.mode.11=Duplicate all pages
pdfOrganiser.placeholder=(مثال: 1,3,2 أو 4-8,2,10-12 أو 2n-1)
@@ -1035,7 +1034,7 @@ decrypt.success=File decrypted successfully.
multiTool-advert.message=هذه الميزة متوفرة في <a href="{0}">صفحة الأدوات المتعددة</a> لدينا. اطلع عليها للحصول على واجهة مستخدم محسّنة لكل صفحة وميزات إضافية!
#view pdf
viewPdf.title=View/Edit PDF
viewPdf.title=عرض PDF
viewPdf.header=عرض PDF
#pageRemover
@@ -1186,7 +1185,7 @@ changeMetadata.submit=تغيير
#pdfToPDFA
pdfToPDFA.title=PDF إلى PDF/A
pdfToPDFA.header=PDF إلى PDF/A
pdfToPDFA.credit=تستخدم هذه الخدمة libreoffice لتحويل PDF/A.
pdfToPDFA.credit=تستخدم هذه الخدمة qpdf لتحويل PDF/A.
pdfToPDFA.submit=تحويل
pdfToPDFA.tip=لا يعمل حاليًا لمدخلات متعددة في وقت واحد
pdfToPDFA.outputFormat=تنسيق الإخراج

View File

@@ -262,7 +262,7 @@ home.desc=Bütün PDF ehtiyaclarınız üçün lokal-host edilən biraddımlıq
home.searchBar=Xüsusiyyətləri axtar...
home.viewPdf.title=View/Edit PDF
home.viewPdf.title=PDF-ə bax
home.viewPdf.desc=Bax, sitat götür, mətn və ya şəkil əlavə et
viewPdf.tags=bax,oxu,sitat götür,mətn,şəkil
@@ -623,7 +623,6 @@ redact.showAttatchments=Show Attachments
redact.showLayers=Show Layers (double-click to reset all layers to the default state)
redact.colourPicker=Colour Picker
redact.findCurrentOutlineItem=Find current outline item
redact.applyChanges=Apply Changes
#showJS
showJS.title=Javascripti Göstər
@@ -769,6 +768,7 @@ autoSplitPDF.selectText.3=Tək böyük skan edilmiş PDF faylını yükləyin v
autoSplitPDF.selectText.4=Ayırıcı səhifələr avtomatik aşkarlanır və silinir, səliqəli yekun sənədə zəmanət verir.
autoSplitPDF.formPrompt=Stirling-PDF ə Səhifə bölücüləri olan PDF-i təqdim edin:
autoSplitPDF.duplexMode=Dupleks rejimi (Ön və arxa skanlama)
autoSplitPDF.dividerDownload1='Auto Splitter Divider (minimal).pdf'-ı yükləyin
autoSplitPDF.dividerDownload2='Auto Splitter Divider (with instructions).pdf'-ı yükləyin
autoSplitPDF.submit=Təsdiq edin
@@ -992,7 +992,6 @@ pdfOrganiser.mode.7=Birincini Sil
pdfOrganiser.mode.8=Sonuncunu Sil
pdfOrganiser.mode.9=Birinci və Sonuncunu Sil
pdfOrganiser.mode.10=Tək-Cüt Birləşdirmə
pdfOrganiser.mode.11=Duplicate all pages
pdfOrganiser.placeholder=(məs., 1,3,2 və ya 4-8,2,10-12 və ya 2n-1)
@@ -1035,7 +1034,7 @@ decrypt.success=File decrypted successfully.
multiTool-advert.message=Bu xüsusiyyət bizim <a href="{0}">multi-alət səhifə</a>mizdə də mövcuddur. Əlavə xüsusiyyətlər və səhifə-səhifə interfeys üçün sınaqdan keçirin!
#view pdf
viewPdf.title=View/Edit PDF
viewPdf.title=PDF-ə baxın
viewPdf.header=PDF-ə baxın
#pageRemover
@@ -1186,7 +1185,7 @@ changeMetadata.submit=Dəyiş
#pdfToPDFA
pdfToPDFA.title=PDF-i PDF/A-ya
pdfToPDFA.header=PDF-i PDF/A-ya
pdfToPDFA.credit=Bu Servis PDF/A Çevirmək Üçün libreoffice İşlədir
pdfToPDFA.credit=Bu Servis PDF/A Çevirmək Üçün ghostscript İşlədir
pdfToPDFA.submit=Çevir
pdfToPDFA.tip=Hazırda Birdən Çox Giriş Üçün İşləmir
pdfToPDFA.outputFormat=Çıxış Formatı

View File

@@ -79,10 +79,10 @@ info=Информация
pro=Pro
page=Страница
pages=Страници
loading=Зареждане на...
addToDoc=Добавяне към документ
reset=Нулиране
apply=Приложи
loading=Loading...
addToDoc=Add to Document
reset=Reset
apply=Apply
legal.privacy=Политика за поверителност
legal.terms=Правила и условия
@@ -138,13 +138,13 @@ analytics.settings=Можете да промените настройките
# NAVBAR #
#############
navbar.favorite=Любими
navbar.recent=Нови и наскоро актуализирани
navbar.recent=New and recently updated
navbar.darkmode=Тъмна тема
navbar.language=Езици
navbar.settings=Настройки
navbar.allTools=Инструменти
navbar.multiTool=Мулти инструменти
navbar.search=Търсене
navbar.search=Search
navbar.sections.organize=Организирайте
navbar.sections.convertTo=Преобразуване в PDF
navbar.sections.convertFrom=Преобразуване от PDF
@@ -240,20 +240,20 @@ database.creationDate=Дата на създаване
database.fileSize=Размер на файла
database.deleteBackupFile=Изтриване на архивен файл
database.importBackupFile=Импортиране на архивен файл
database.createBackupFile=Създаване на файл с резервно копие
database.createBackupFile=Create Backup File
database.downloadBackupFile=Изтеглете архивен файл
database.info_1=Когато импортирате данни, е от решаващо значение да осигурите правилната структура. Ако не сте сигурни в това, което правите, потърсете съвет и подкрепа от професионалист. Грешка в структурата може да причини неизправност на приложението, включително пълна невъзможност за стартиране на приложението.
database.info_2=Името на файла няма значение при качване. След това ще бъде преименуван, за да следва формата backup_user_yyyyMMddHHmm.sql, осигурявайки последователна конвенция за именуване.
database.submit=Импортиране на резервно копие
database.importIntoDatabaseSuccessed=Импортирането в базата данни бе успешно
database.backupCreated=Успешно архивиране на базата данни
database.backupCreated=Database backup successful
database.fileNotFound=Файлът не е намерен
database.fileNullOrEmpty=Файлът не трябва да е нулев или празен
database.failedImportFile=Неуспешно импортиране на файл
database.notSupported=Тази функция не е налична за вашата връзка с база данни.
database.notSupported=This function is not available for your database connection.
session.expired=Вашата сесия е изтекла. Моля, опреснете страницата и опитайте отново.
session.refreshPage=Презареждане на страницата
session.refreshPage=Refresh Page
#############
# HOME-PAGE #
@@ -262,18 +262,18 @@ home.desc=Вашето локално хоствано обслужване на
home.searchBar=Търсене на функции...
home.viewPdf.title=Преглед/Редактиране PDF
home.viewPdf.title=Преглед на PDF
home.viewPdf.desc=Преглеждайте, коментирайте, добавяйте текст или изображения
viewPdf.tags=преглед,четене,анотиране,текст,изображение
home.setFavorites=Задаване на предпочитани
home.hideFavorites=Скриване на предпочитани
home.showFavorites=Покажи предпочитани
home.legacyHomepage=Стара начална страница
home.newHomePage=Опитайте новата ни начална страница!
home.alphabetical=По азбучен ред
home.globalPopularity=Световна популярност
home.sortBy=Сортиране по:
home.setFavorites=Set Favourites
home.hideFavorites=Hide Favourites
home.showFavorites=Show Favourites
home.legacyHomepage=Old homepage
home.newHomePage=Try our new homepage!
home.alphabetical=Alphabetical
home.globalPopularity=Global Popularity
home.sortBy=Sort by:
home.multiTool.title=PDF Мулти инструмент
home.multiTool.desc=Обединяване, завъртане, пренареждане и премахване на страници
@@ -462,9 +462,9 @@ home.MarkdownToPDF.title=Markdown към PDF
home.MarkdownToPDF.desc=Преобразува всеки Markdown файл към PDF
MarkdownToPDF.tags=маркиране,уеб-съдържание,трансформация,преобразуване
home.PDFToMarkdown.title=PDF към Markdown
home.PDFToMarkdown.desc=Преобразува всеки PDF файл в Markdown
PDFToMarkdown.tags=маркиране, уеб-съдържание, трансформация, конвертиране, MD
home.PDFToMarkdown.title=PDF to Markdown
home.PDFToMarkdown.desc=Converts any PDF to Markdown
PDFToMarkdown.tags=markup,web-content,transformation,convert,md
home.getPdfInfo.title=Вземете ЦЯЛАТА информация от PDF
home.getPdfInfo.desc=Взима всяка възможна информация от PDF файлове
@@ -489,11 +489,11 @@ home.autoRedact.title=Автоматично редактиране
home.autoRedact.desc=Автоматично редактира (зачернява) текст в PDF въз основа на въведен текст
autoRedact.tags=Редактиране,Скриване,затъмняване,черен,маркер,скрит
home.redact.title=Ръчно редактиране
home.redact.desc=Редактиране на PDF файл въз основа на избран текст, нарисувани форми и/или избрана страница(и)
redact.tags=Редактиране, скриване, затъмнение, черно, маркер, скрито, ръчно
home.redact.title=Manual Redaction
home.redact.desc=Redacts a PDF based on selected text, drawn shapes and/or selected page(s)
redact.tags=Redact,Hide,black out,black,marker,hidden,manual
home.tableExtraxt.title=PDF към CSV
home.tableExtraxt.title=PDF в CSV
home.tableExtraxt.desc=Извлича таблици от PDF, като ги конвертира в CSV
tableExtraxt.tags=CSV,извличане на таблица,извличане,конвертиране
@@ -533,9 +533,9 @@ home.splitPdfByChapters.title=Разделете PDF по глави
home.splitPdfByChapters.desc=Разделете PDF на множество файлове въз основа на неговата структура на глави.
splitPdfByChapters.tags=разделяне, глави, отметки, организиране
home.validateSignature.title=Валидиране на PDF подпис
home.validateSignature.desc=Проверка на цифрови подписи и сертификати в PDF документи
validateSignature.tags=подпис,проверка,валидиране,pdf,сертификат,цифров подпис,валидиране на подпис,валидиране на сертификат
home.validateSignature.title=Validate PDF Signature
home.validateSignature.desc=Verify digital signatures and certificates in PDF documents
validateSignature.tags=signature,verify,validate,pdf,certificate,digital signature,Validate Signature,Validate certificate
#replace-invert-color
replace-color.title=Замени-инвертиране-на-цвят
@@ -580,7 +580,7 @@ login.oauth2invalidRequest=Невалидна заявка
login.oauth2AccessDenied=Отказан достъп
login.oauth2InvalidTokenResponse=Невалиден отговор на токена
login.oauth2InvalidIdToken=Невалиден токен за идентификатор
login.relyingPartyRegistrationNotFound=Не е открита регистрация на доверяваща се страна
login.relyingPartyRegistrationNotFound=No relying party registration found
login.userIsDisabled=Потребителят е деактивиран, влизането в момента е блокирано с това потребителско име. Моля, свържете се с администратора.
login.alreadyLoggedIn=Вече сте влезли в
login.alreadyLoggedIn2=устройства. Моля, излезте от устройствата и опитайте отново.
@@ -599,31 +599,30 @@ autoRedact.convertPDFToImageLabel=Преобразуване на PDF към PDF
autoRedact.submitButton=Изпращане
#redact
redact.title=Ръчно редактиране
redact.header=Ръчно редактиране
redact.submit=Редактиране
redact.textBasedRedaction=Редактиране на базата на текст
redact.pageBasedRedaction=Редактиране на базата на страници
redact.convertPDFToImageLabel=Конвертиране на PDF в PDF-изображение (използва се за премахване на текста зад полето)
redact.pageRedactionNumbers.title=Страници
redact.pageRedactionNumbers.placeholder=(напр. 1,2,8 или 4,7,12-16 или 2n-1)
redact.redactionColor.title=Цвят на редактиране
redact.export=Експорт
redact.upload=Качване
redact.boxRedaction=Редактиране на рисунката в квадратчето
redact.zoom=Увеличаване
redact.zoomIn=Увеличаване на мащаба
redact.zoomOut=Намаляване на мащаба
redact.nextPage=Следваща страница
redact.previousPage=Предишна страница
redact.toggleSidebar=Превключване на страничната лента
redact.showThumbnails=Показване на миниатюри
redact.showDocumentOutline=Показване на контура на документа (кликнете два пъти, за да разгънете/свиете всички елементи)
redact.showAttatchments=Показване на прикачени файлове
redact.showLayers=Показване на слоеве (щракнете два пъти, за да върнете всички слоеве в състояние по подразбиране)
redact.colourPicker=Избор на цвят
redact.findCurrentOutlineItem=Намиране на текущия елемент от контура
redact.applyChanges=Прилагане на промените
redact.title=Manual Redaction
redact.header=Manual Redaction
redact.submit=Redact
redact.textBasedRedaction=Text based Redaction
redact.pageBasedRedaction=Page-based Redaction
redact.convertPDFToImageLabel=Convert PDF to PDF-Image (Used to remove text behind the box)
redact.pageRedactionNumbers.title=Pages
redact.pageRedactionNumbers.placeholder=(e.g. 1,2,8 or 4,7,12-16 or 2n-1)
redact.redactionColor.title=Redaction Color
redact.export=Export
redact.upload=Upload
redact.boxRedaction=Box draw redaction
redact.zoom=Zoom
redact.zoomIn=Zoom in
redact.zoomOut=Zoom out
redact.nextPage=Next Page
redact.previousPage=Previous Page
redact.toggleSidebar=Toggle Sidebar
redact.showThumbnails=Show Thumbnails
redact.showDocumentOutline=Show Document Outline (double-click to expand/collapse all items)
redact.showAttatchments=Show Attachments
redact.showLayers=Show Layers (double-click to reset all layers to the default state)
redact.colourPicker=Colour Picker
redact.findCurrentOutlineItem=Find current outline item
#showJS
showJS.title=Покажи Javascript
@@ -661,9 +660,9 @@ MarkdownToPDF.credit=Използва WeasyPrint
#pdf-to-markdown
PDFToMarkdown.title=PDF към Markdown
PDFToMarkdown.header=PDF към Markdown
PDFToMarkdown.submit=Преобразуване
PDFToMarkdown.title=PDF To Markdown
PDFToMarkdown.header=PDF To Markdown
PDFToMarkdown.submit=Convert
#url-to-pdf
@@ -769,6 +768,7 @@ autoSplitPDF.selectText.3=Качете единствения голям ска
autoSplitPDF.selectText.4=Разделителните страници се откриват и премахват автоматично, което гарантира чист краен документ.
autoSplitPDF.formPrompt=Изпратете PDF, съдържащ разделители на страници на Stirling-PDF:
autoSplitPDF.duplexMode=Дуплексен режим (сканиране отпред и отзад)
autoSplitPDF.dividerDownload1=Изтеглете 'Автоматичен сплитер разделител (минимален).pdf'
autoSplitPDF.dividerDownload2=Изтеглете 'Автоматичен сплитер разделител (с инструкции).pdf'
autoSplitPDF.submit=Подайте
@@ -809,7 +809,7 @@ certSign.showSig=Показване на подпис
certSign.reason=Причина
certSign.location=Местоположение
certSign.name=Име
certSign.showLogo=Покажи лого
certSign.showLogo=Show Logo
certSign.submit=Подпишете PDF
@@ -844,9 +844,9 @@ compare.highlightColor.2=Цвят на маркирането 2:
compare.document.1=Документ 1
compare.document.2=Документ 2
compare.submit=Сравнявай
compare.complex.message=Един или и двата предоставени документа са големи файлове, точността на сравнението може да бъде намалена.
compare.large.file.message=Един или и двата предоставени документа са твърде големи за обработка
compare.no.text.message=Един или и двата избрани PDF файла нямат текстово съдържание. Моля, изберете PDF файлове с текст за сравнение.
compare.complex.message=One or both of the provided documents are large files, accuracy of comparison may be reduced
compare.large.file.message=One or Both of the provided documents are too large to process
compare.no.text.message=One or both of the selected PDFs have no text content. Please choose PDFs with text for comparison.
#BookToPDF
BookToPDF.title=Книги и комикси в PDF
@@ -869,18 +869,18 @@ sign.draw=Начертайте подпис
sign.text=Въвеждане на текст
sign.clear=Изчисти
sign.add=Добави
sign.saved=Съхранени подписи
sign.save=Запазване на подпис
sign.personalSigs=Лични подписи
sign.sharedSigs=Споделени подписи
sign.noSavedSigs=Не са намерени запазени подписи
sign.addToAll=Дибави към всички страници
sign.delete=Изтрий
sign.first=Първа страница
sign.last=Последна страница
sign.next=Следваща страница
sign.previous=Предишна стараница
sign.maintainRatio=Превключване за поддържане на съотношението на страните
sign.saved=Saved Signatures
sign.save=Save Signature
sign.personalSigs=Personal Signatures
sign.sharedSigs=Shared Signatures
sign.noSavedSigs=No saved signatures found
sign.addToAll=Add to all pages
sign.delete=Delete
sign.first=First page
sign.last=Last page
sign.next=Next page
sign.previous=Previous page
sign.maintainRatio=Toggle maintain aspect ratio
#repair
@@ -952,7 +952,7 @@ compress.title=Компресиране
compress.header=Компресиране на PDF
compress.credit=Тази услуга използва qpdf за PDF компресиране/оптимизиране.
compress.selectText.1=Ръчен режим - от 1 до 5
compress.selectText.1.1=При нива на оптимизация от 6 до 9, в допълнение към общото компресиране на PDF, резолюцията на изображението се намалява, за да се намали допълнително размерът на файла. По-високите нива водят до по-силна компресия на изображенията (до 50% от оригиналния размер), като се постига по-голямо намаляване на размера, но с потенциална загуба на качество на изображенията.
compress.selectText.1.1=In optimization levels 6 to 9, in addition to general PDF compression, image resolution is scaled down to further reduce file size. Higher levels result in stronger image compression (up to 50% of the original size), achieving greater size reduction but with potential quality loss in images.
compress.selectText.2=Ниво на оптимизация:
compress.selectText.3=4 (Ужасно за текстови изображения)
compress.selectText.4=Автоматичен режим - Автоматично настройва качеството, за да получи PDF с точен размер
@@ -992,7 +992,6 @@ pdfOrganiser.mode.7=Премахни първо
pdfOrganiser.mode.8=Премахване на последния
pdfOrganiser.mode.9=Премахване на първия и последния
pdfOrganiser.mode.10=Обединяване на четно и нечетно
pdfOrganiser.mode.11=Дублиране на всички страници
pdfOrganiser.placeholder=(напр. 1,3,2 или 4-8,2,10-12 или 2n-1)
@@ -1000,42 +999,42 @@ pdfOrganiser.placeholder=(напр. 1,3,2 или 4-8,2,10-12 или 2n-1)
multiTool.title=PDF Мулти инструмент
multiTool.header=PDF Мулти инструмент
multiTool.uploadPrompts=Име на файл
multiTool.selectAll=Изберете всички
multiTool.deselectAll=Отмяна на избора на всички
multiTool.selectPages=Избор на страница
multiTool.selectedPages=Избрани страници
multiTool.page=Страница
multiTool.deleteSelected=Изтриване на избраното
multiTool.downloadAll=Експорт
multiTool.downloadSelected=Избрано за експортиране
multiTool.selectAll=Select All
multiTool.deselectAll=Deselect All
multiTool.selectPages=Page Select
multiTool.selectedPages=Selected Pages
multiTool.page=Page
multiTool.deleteSelected=Delete Selected
multiTool.downloadAll=Export
multiTool.downloadSelected=Export Selected
multiTool.insertPageBreak=Вмъкване на прекъсване на страница
multiTool.addFile=Добавяне на файл
multiTool.rotateLeft=Завъртете наляво
multiTool.rotateRight=Завъртете надясно
multiTool.split=Разделяне
multiTool.moveLeft=Преместване наляво
multiTool.moveRight=Преместване надясно
multiTool.delete=Изтрий
multiTool.dragDropMessage=Избран(и) страница(/и)
multiTool.undo=Отмяна на
multiTool.redo=Повтори
multiTool.insertPageBreak=Insert Page Break
multiTool.addFile=Add File
multiTool.rotateLeft=Rotate Left
multiTool.rotateRight=Rotate Right
multiTool.split=Split
multiTool.moveLeft=Move Left
multiTool.moveRight=Move Right
multiTool.delete=Delete
multiTool.dragDropMessage=Page(s) Selected
multiTool.undo=Undo
multiTool.redo=Redo
#decrypt
decrypt.passwordPrompt=Този файл е защитен с парола. Моля, въведете паролата:
decrypt.cancelled=Операцията за PDF е отменена: {0}
decrypt.noPassword=Не е предоставена парола за шифрирания PDF: {0}
decrypt.invalidPassword=Моля, опитайте отново с правилната парола.
decrypt.invalidPasswordHeader=Неправилна парола или неподдържано криптиране за PDF: {0}
decrypt.unexpectedError=Възникна грешка при обработката на файла. Моля, опитайте отново.
decrypt.serverError=Грешка в работата на сървъра повреме на дешифриране: {0}
decrypt.success=Файлът е успешно дешифриран.
decrypt.passwordPrompt=This file is password-protected. Please enter the password:
decrypt.cancelled=Operation cancelled for PDF: {0}
decrypt.noPassword=No password provided for encrypted PDF: {0}
decrypt.invalidPassword=Please try again with the correct password.
decrypt.invalidPasswordHeader=Incorrect password or unsupported encryption for PDF: {0}
decrypt.unexpectedError=There was an error processing the file. Please try again.
decrypt.serverError=Server error while decrypting: {0}
decrypt.success=File decrypted successfully.
#multiTool-advert
multiTool-advert.message=Тази функция е налична и в нашата <a href="{0}">страница с множество инструменти</a>. Проверете го за подобрен потребителски интерфейс страница по страница и допълнителни функции!
multiTool-advert.message=This feature is also available in our <a href="{0}">multi-tool page</a>. Check it out for enhanced page-by-page UI and additional features!
#view pdf
viewPdf.title=Преглед/Редактиране на PDF
viewPdf.title=Преглед на PDF
viewPdf.header=Преглед на PDF
#pageRemover
@@ -1186,7 +1185,7 @@ changeMetadata.submit=Промени
#pdfToPDFA
pdfToPDFA.title=PDF към PDF/A
pdfToPDFA.header=PDF към PDF/A
pdfToPDFA.credit=Тази услуга използва libreoffice за PDF/A преобразуване.
pdfToPDFA.credit=Тази услуга използва qpdf за PDF/A преобразуване.
pdfToPDFA.submit=Преобразуване
pdfToPDFA.tip=В момента не работи за няколко входа наведнъж
pdfToPDFA.outputFormat=Изходен формат
@@ -1336,51 +1335,51 @@ splitByChapters.desc.4=Разрешаване на дубликати: Ако е
splitByChapters.submit=Разделяне на PDF
#File Chooser
fileChooser.click=Щракнете
fileChooser.or=или
fileChooser.dragAndDrop=Влачете и пуснете
fileChooser.dragAndDropPDF=Влачете и пуснете PDF файл
fileChooser.dragAndDropImage=Влачете и пуснете изображение
fileChooser.hoveredDragAndDrop=Влачете и пуснете файл(ове) тук
fileChooser.click=Click
fileChooser.or=or
fileChooser.dragAndDrop=Drag & Drop
fileChooser.dragAndDropPDF=Drag & Drop PDF file
fileChooser.dragAndDropImage=Drag & Drop Image file
fileChooser.hoveredDragAndDrop=Drag & Drop file(s) here
#release notes
releases.footer=Версии
releases.title=Бележки към версиите
releases.header=Бележки към версиите
releases.current.version=Текуща версия
releases.note=Бележките към изданието са налични само на английски език
releases.footer=Releases
releases.title=Release Notes
releases.header=Release Notes
releases.current.version=Current Release
releases.note=Release notes are only available in English
#Validate Signature
validateSignature.title=Удостоверяване на PDF подписи
validateSignature.header=Потвърждаване на цифрови подписи
validateSignature.selectPDF=Изберете подписания PDF файл
validateSignature.submit=Потвърждаване на подписите
validateSignature.results=Резултати от валидирането
validateSignature.status=Статус
validateSignature.signer=Подписващ
validateSignature.date=Дата
validateSignature.reason=Причина
validateSignature.location=Местоположение
validateSignature.noSignatures=В този документ не са открити цифрови подписи
validateSignature.status.valid=Валиден
validateSignature.status.invalid=Невалиден
validateSignature.chain.invalid=Удостоверяването на веригата на сертификата е неуспешно - не може да се провери самоличността на подписващия
validateSignature.trust.invalid=Сертификатът не е в хранилището за доверие - източникът не може да бъде проверен
validateSignature.cert.expired=Сертификатът е изтекъл
validateSignature.cert.revoked=Сертификатът е отменен
validateSignature.signature.info=Информация за подписа
validateSignature.signature=Подпис
validateSignature.signature.mathValid=Подписът е математически валиден, НО:
validateSignature.selectCustomCert=Файл със сертификат X.509 по поръчка (по избор)
validateSignature.cert.info=Подробности за сертификата
validateSignature.cert.issuer=Издател
validateSignature.cert.subject=Тема
validateSignature.cert.serialNumber=Сериен номер
validateSignature.cert.validFrom=Валиден от
validateSignature.cert.validUntil=Валиден до
validateSignature.cert.algorithm=Алгоритъм
validateSignature.cert.keySize=Размер на ключ
validateSignature.cert.version=Версия
validateSignature.cert.keyUsage=Предназначение на ключа за използване
validateSignature.cert.selfSigned=Самостоятелно подписан
validateSignature.cert.bits=битове
validateSignature.title=Validate PDF Signatures
validateSignature.header=Validate Digital Signatures
validateSignature.selectPDF=Select signed PDF file
validateSignature.submit=Validate Signatures
validateSignature.results=Validation Results
validateSignature.status=Status
validateSignature.signer=Signer
validateSignature.date=Date
validateSignature.reason=Reason
validateSignature.location=Location
validateSignature.noSignatures=No digital signatures found in this document
validateSignature.status.valid=Valid
validateSignature.status.invalid=Invalid
validateSignature.chain.invalid=Certificate chain validation failed - cannot verify signer's identity
validateSignature.trust.invalid=Certificate not in trust store - source cannot be verified
validateSignature.cert.expired=Certificate has expired
validateSignature.cert.revoked=Certificate has been revoked
validateSignature.signature.info=Signature Information
validateSignature.signature=Signature
validateSignature.signature.mathValid=Signature is mathematically valid BUT:
validateSignature.selectCustomCert=Custom Certificate File X.509 (Optional)
validateSignature.cert.info=Certificate Details
validateSignature.cert.issuer=Issuer
validateSignature.cert.subject=Subject
validateSignature.cert.serialNumber=Serial Number
validateSignature.cert.validFrom=Valid From
validateSignature.cert.validUntil=Valid Until
validateSignature.cert.algorithm=Algorithm
validateSignature.cert.keySize=Key Size
validateSignature.cert.version=Version
validateSignature.cert.keyUsage=Key Usage
validateSignature.cert.selfSigned=Self-Signed
validateSignature.cert.bits=bits

View File

@@ -262,7 +262,7 @@ home.desc=L'eina allotjada localment per a necessitats de PDF.
home.searchBar=Cerca funcions...
home.viewPdf.title=View/Edit PDF
home.viewPdf.title=Visualitza PDF
home.viewPdf.desc=Visualitza, anota, afegeix text o imatges
viewPdf.tags=view,read,annotate,text,image
@@ -623,7 +623,6 @@ redact.showAttatchments=Show Attachments
redact.showLayers=Show Layers (double-click to reset all layers to the default state)
redact.colourPicker=Colour Picker
redact.findCurrentOutlineItem=Find current outline item
redact.applyChanges=Apply Changes
#showJS
showJS.title=Mostra Javascript
@@ -769,6 +768,7 @@ autoSplitPDF.selectText.3=Puja el fitxer PDF escanejat gran i deixa que Stirling
autoSplitPDF.selectText.4=Les pàgines divisòries es detecten i eliminen automàticament, garantint un document final ordenat.
autoSplitPDF.formPrompt=Envia un PDF que contingui les pàgines divisòries de Stirling-PDF:
autoSplitPDF.duplexMode=Mode Dúplex (Escaneig de davant i darrere)
autoSplitPDF.dividerDownload1=Descarrega 'Divisor Automàtic (mínim).pdf'
autoSplitPDF.dividerDownload2=Descarrega 'Divisor Automàtic (amb instruccions).pdf'
autoSplitPDF.submit=Envia
@@ -992,7 +992,6 @@ pdfOrganiser.mode.7=Eliminar Primer
pdfOrganiser.mode.8=Eliminar Últim
pdfOrganiser.mode.9=Eliminar Primer i Últim
pdfOrganiser.mode.10=Fusionar Parells-Senars
pdfOrganiser.mode.11=Duplicate all pages
pdfOrganiser.placeholder=(p. ex. 1,3,2 o 4-8,2,10-12 o 2n-1)
@@ -1035,7 +1034,7 @@ decrypt.success=File decrypted successfully.
multiTool-advert.message=This feature is also available in our <a href="{0}">multi-tool page</a>. Check it out for enhanced page-by-page UI and additional features!
#view pdf
viewPdf.title=View/Edit PDF
viewPdf.title=Visualitza PDF
viewPdf.header=Visualitza PDF
#pageRemover
@@ -1186,7 +1185,7 @@ changeMetadata.submit=Canvia
#pdfToPDFA
pdfToPDFA.title=PDF a PDF/A
pdfToPDFA.header=PDF a PDF/A
pdfToPDFA.credit=Utilitza libreoffice per a la conversió a PDF/A
pdfToPDFA.credit=Utilitza qpdf per a la conversió a PDF/A
pdfToPDFA.submit=Converteix
pdfToPDFA.tip=Actualment no funciona per a múltiples entrades al mateix temps
pdfToPDFA.outputFormat=Format de sortida

View File

@@ -262,7 +262,7 @@ home.desc=Vaše lokálně hostované řešení pro všechny vaše potřeby PDF.
home.searchBar=Hledat funkce...
home.viewPdf.title=View/Edit PDF
home.viewPdf.title=Zobrazit PDF
home.viewPdf.desc=Zobrazit, anotovat, přidat text nebo obrázky
viewPdf.tags=zobrazit,číst,anotovat,text,obrázek
@@ -623,7 +623,6 @@ redact.showAttatchments=Zobrazit přílohy
redact.showLayers=Zobrazit vrstvy (dvojklik pro obnovení všech vrstev do výchozího stavu)
redact.colourPicker=Výběr barvy
redact.findCurrentOutlineItem=Najít aktuální položku osnovy
redact.applyChanges=Apply Changes
#showJS
showJS.title=Zobrazit Javascript
@@ -769,6 +768,7 @@ autoSplitPDF.selectText.3=Nahrajte jediný velký naskenovaný PDF soubor a nech
autoSplitPDF.selectText.4=Oddělovací stránky jsou automaticky detekovány a odstraněny, což zaručuje čistý finální dokument.
autoSplitPDF.formPrompt=Odeslat PDF obsahující Stirling-PDF oddělovače stránek:
autoSplitPDF.duplexMode=Duplexní režim (skenování přední a zadní strany)
autoSplitPDF.dividerDownload1=Stáhnout 'Automatický oddělovač (minimální).pdf'
autoSplitPDF.dividerDownload2=Stáhnout 'Automatický oddělovač (s instrukcemi).pdf'
autoSplitPDF.submit=Odeslat
@@ -992,7 +992,6 @@ pdfOrganiser.mode.7=Odstranit první
pdfOrganiser.mode.8=Odstranit poslední
pdfOrganiser.mode.9=Odstranit první a poslední
pdfOrganiser.mode.10=Sloučení sudé-liché
pdfOrganiser.mode.11=Duplicate all pages
pdfOrganiser.placeholder=(např. 1,3,2 nebo 4-8,2,10-12 nebo 2n-1)
@@ -1035,7 +1034,7 @@ decrypt.success=Soubor byl úspěšně dešifrován.
multiTool-advert.message=Tato funkce je také k dispozici na naší <a href="{0}">stránce multi-nástroje</a>. Podívejte se na ni pro vylepšené rozhraní pro práci se stránkami a další funkce!
#view pdf
viewPdf.title=View/Edit PDF
viewPdf.title=Zobrazit PDF
viewPdf.header=Zobrazit PDF
#pageRemover
@@ -1186,7 +1185,7 @@ changeMetadata.submit=Změnit
#pdfToPDFA
pdfToPDFA.title=PDF na PDF/A
pdfToPDFA.header=PDF na PDF/A
pdfToPDFA.credit=Tato služba používá libreoffice pro konverzi do PDF/A
pdfToPDFA.credit=Tato služba používá qpdf pro konverzi do PDF/A
pdfToPDFA.submit=Převést
pdfToPDFA.tip=Momentálně nefunguje pro více vstupů najednou
pdfToPDFA.outputFormat=Výstupní formát

View File

@@ -262,7 +262,7 @@ home.desc=Dit lokalt hostede one-stop-shop for alle dine PDF-behov.
home.searchBar=Søg efter funktioner...
home.viewPdf.title=View/Edit PDF
home.viewPdf.title=Se PDF
home.viewPdf.desc=Se, annotér, tilføj tekst eller billeder
viewPdf.tags=se,læs,annotér,tekst,billede
@@ -623,7 +623,6 @@ redact.showAttatchments=Show Attachments
redact.showLayers=Show Layers (double-click to reset all layers to the default state)
redact.colourPicker=Colour Picker
redact.findCurrentOutlineItem=Find current outline item
redact.applyChanges=Apply Changes
#showJS
showJS.title=Vis Javascript
@@ -769,6 +768,7 @@ autoSplitPDF.selectText.3=Upload den enkelte store scannede PDF-fil og lad Stirl
autoSplitPDF.selectText.4=Skillesider detekteres automatisk og fjernes, hvilket garanterer et pænt endeligt dokument.
autoSplitPDF.formPrompt=Indsend PDF indeholdende Stirling-PDF Sideopdelere:
autoSplitPDF.duplexMode=Duplex-tilstand (For- og bagside scanning)
autoSplitPDF.dividerDownload1=Download 'Auto Splitter Divider (minimal).pdf'
autoSplitPDF.dividerDownload2=Download 'Auto Splitter Divider (med instruktioner).pdf'
autoSplitPDF.submit=Indsend
@@ -992,7 +992,6 @@ pdfOrganiser.mode.7=Fjern Første
pdfOrganiser.mode.8=Fjern Sidste
pdfOrganiser.mode.9=Fjern Første og Sidste
pdfOrganiser.mode.10=Ulige-Lige Sammenføjning
pdfOrganiser.mode.11=Duplicate all pages
pdfOrganiser.placeholder=(f.eks. 1,3,2 eller 4-8,2,10-12 eller 2n-1)
@@ -1035,7 +1034,7 @@ decrypt.success=File decrypted successfully.
multiTool-advert.message=This feature is also available in our <a href="{0}">multi-tool page</a>. Check it out for enhanced page-by-page UI and additional features!
#view pdf
viewPdf.title=View/Edit PDF
viewPdf.title=Se PDF
viewPdf.header=Se PDF
#pageRemover
@@ -1186,7 +1185,7 @@ changeMetadata.submit=Ændre
#pdfToPDFA
pdfToPDFA.title=PDF Til PDF/A
pdfToPDFA.header=PDF Til PDF/A
pdfToPDFA.credit=Denne tjeneste bruger libreoffice til PDF/A-konvertering
pdfToPDFA.credit=Denne tjeneste bruger qpdf til PDF/A-konvertering
pdfToPDFA.submit=Konvertér
pdfToPDFA.tip=Fungerer i øjeblikket ikke for flere input på én gang
pdfToPDFA.outputFormat=Outputformat

View File

@@ -262,7 +262,7 @@ home.desc=Ihr lokal gehosteter One-Stop-Shop für alle Ihre PDF-Anforderungen.
home.searchBar=Suche nach Funktionen...
home.viewPdf.title=View/Edit PDF
home.viewPdf.title=PDF anzeigen
home.viewPdf.desc=Anzeigen, Kommentieren, Text oder Bilder hinzufügen
viewPdf.tags=anzeigen,lesen,kommentieren,text,bild
@@ -623,7 +623,6 @@ redact.showAttatchments=Zeige Anhänge
redact.showLayers=Ebenen anzeigen (Doppelklick, um alle Ebenen auf den Standardzustand zurückzusetzen)
redact.colourPicker=Farbauswahl
redact.findCurrentOutlineItem=Aktuell gewähltes Element finden
redact.applyChanges=Apply Changes
#showJS
showJS.title=Javascript anzeigen
@@ -769,6 +768,7 @@ autoSplitPDF.selectText.3=Laden Sie die einzelne große gescannte PDF-Datei hoch
autoSplitPDF.selectText.4=Trennseiten werden automatisch erkannt und entfernt, so dass ein sauberes Enddokument garantiert ist.
autoSplitPDF.formPrompt=PDF mit Stirling-PDF Seitentrennern hochladen:
autoSplitPDF.duplexMode=Duplex-Modus (Scannen von Vorder- und Rückseite)
autoSplitPDF.dividerDownload1=Herunterladen 'Auto Splitter Divider (minimal).pdf'
autoSplitPDF.dividerDownload2=Download 'Auto Splitter Divider (mit Anleitung).pdf'
autoSplitPDF.submit=Aufteilen
@@ -992,7 +992,6 @@ pdfOrganiser.mode.7=Erste entfernen
pdfOrganiser.mode.8=Letzte entfernen
pdfOrganiser.mode.9=Erste und letzte entfernen
pdfOrganiser.mode.10=Ungerade-Gerade-Zusammenführung
pdfOrganiser.mode.11=Duplicate all pages
pdfOrganiser.placeholder=(z.B. 1,3,2 oder 4-8,2,10-12 oder 2n-1)
@@ -1035,7 +1034,7 @@ decrypt.success=Datei erfolgreich entschlüsselt.
multiTool-advert.message=Diese Funktion ist auch auf unserer <a href="{0}">PDF-Multitool-Seite</a> verfügbar. Probieren Sie sie aus, denn sie bietet eine verbesserte Benutzeroberfläche und zusätzliche Funktionen!
#view pdf
viewPdf.title=View/Edit PDF
viewPdf.title=PDF anzeigen
viewPdf.header=PDF anzeigen
#pageRemover
@@ -1186,7 +1185,7 @@ changeMetadata.submit=Ändern
#pdfToPDFA
pdfToPDFA.title=PDF zu PDF/A
pdfToPDFA.header=PDF zu PDF/A
pdfToPDFA.credit=Dieser Dienst verwendet libreoffice für die PDF/A-Konvertierung
pdfToPDFA.credit=Dieser Dienst verwendet qpdf für die PDF/A-Konvertierung
pdfToPDFA.submit=Konvertieren
pdfToPDFA.tip=Dieser Dienst kann nur einzelne Eingangsdateien verarbeiten.
pdfToPDFA.outputFormat=Ausgabeformat

View File

@@ -262,7 +262,7 @@ home.desc=Ο τοπικά φιλοξενούμενος προορισμός σα
home.searchBar=Αναζήτηση λειτουργιών...
home.viewPdf.title=View/Edit PDF
home.viewPdf.title=Προβολή PDF
home.viewPdf.desc=Προβολή, σχολιασμός, προσθήκη κειμένου ή εικόνων
viewPdf.tags=προβολή,ανάγνωση,σχολιασμός,κείμενο,εικόνα
@@ -623,7 +623,6 @@ redact.showAttatchments=Εμφάνιση συνημμένων
redact.showLayers=Εμφάνιση επιπέδων (διπλό κλικ για επαναφορά όλων των επιπέδων στην προεπιλεγμένη κατάσταση)
redact.colourPicker=Επιλογέας χρώματος
redact.findCurrentOutlineItem=Εύρεση τρέχοντος στοιχείου περιγράμματος
redact.applyChanges=Apply Changes
#showJS
showJS.title=Εμφάνιση Javascript
@@ -769,6 +768,7 @@ autoSplitPDF.selectText.3=Μεταφορτώστε το ενιαίο μεγάλ
autoSplitPDF.selectText.4=Οι σελίδες διαχωρισμού ανιχνεύονται και αφαιρούνται αυτόματα, εξασφαλίζοντας ένα καθαρό τελικό έγγραφο.
autoSplitPDF.formPrompt=Υποβολή PDF που περιέχει διαχωριστές σελίδων Stirling-PDF:
autoSplitPDF.duplexMode=Λειτουργία διπλής όψης (Σάρωση μπρος και πίσω)
autoSplitPDF.dividerDownload1=Λήψη 'Αυτόματος διαχωριστής (ελάχιστος).pdf'
autoSplitPDF.dividerDownload2=Λήψη 'Αυτόματος διαχωριστής (με οδηγίες).pdf'
autoSplitPDF.submit=Υποβολή
@@ -992,7 +992,6 @@ pdfOrganiser.mode.7=Αφαίρεση πρώτης
pdfOrganiser.mode.8=Αφαίρεση τελευταίας
pdfOrganiser.mode.9=Αφαίρεση πρώτης και τελευταίας
pdfOrganiser.mode.10=Συγχώνευση μονών-ζυγών
pdfOrganiser.mode.11=Duplicate all pages
pdfOrganiser.placeholder=(π.χ. 1,3,2 ή 4-8,2,10-12 ή 2n-1)
@@ -1035,7 +1034,7 @@ decrypt.success=Το αρχείο αποκρυπτογραφήθηκε με επ
multiTool-advert.message=Αυτή η λειτουργία είναι επίσης διαθέσιμη στη <a href="{0}">σελίδα πολυεργαλείου</a> μας. Δείτε την για βελτιωμένο περιβάλλον χρήστη σελίδα-προς-σελίδα και επιπλέον λειτουργίες!
#view pdf
viewPdf.title=View/Edit PDF
viewPdf.title=Προβολή PDF
viewPdf.header=Προβολή PDF
#pageRemover
@@ -1186,7 +1185,7 @@ changeMetadata.submit=Αλλαγή
#pdfToPDFA
pdfToPDFA.title=PDF σε PDF/A
pdfToPDFA.header=PDF σε PDF/A
pdfToPDFA.credit=Αυτή η υπηρεσία χρησιμοποιεί libreoffice για μετατροπή PDF/A
pdfToPDFA.credit=Αυτή η υπηρεσία χρησιμοποιεί qpdf για μετατροπή PDF/A
pdfToPDFA.submit=Μετατροπή
pdfToPDFA.tip=Προς το παρόν δεν λειτουργεί για πολλαπλές εισόδους ταυτόχρονα
pdfToPDFA.outputFormat=Μορφή εξόδου

View File

@@ -262,9 +262,9 @@ home.desc=Your locally hosted one-stop-shop for all your PDF needs.
home.searchBar=Search for features...
home.viewPdf.title=View/Edit PDF
home.viewPdf.desc=View, annotate, draw, add text or images
viewPdf.tags=view,read,annotate,text,image,highlight,edit
home.viewPdf.title=View PDF
home.viewPdf.desc=View, annotate, add text or images
viewPdf.tags=view,read,annotate,text,image
home.setFavorites=Set Favourites
home.hideFavorites=Hide Favourites
@@ -623,7 +623,6 @@ redact.showAttatchments=Show Attachments
redact.showLayers=Show Layers (double-click to reset all layers to the default state)
redact.colourPicker=Colour Picker
redact.findCurrentOutlineItem=Find current outline item
redact.applyChanges=Apply Changes
#showJS
showJS.title=Show Javascript
@@ -769,6 +768,7 @@ autoSplitPDF.selectText.3=Upload the single large scanned PDF file and let Stirl
autoSplitPDF.selectText.4=Divider pages are automatically detected and removed, guaranteeing a neat final document.
autoSplitPDF.formPrompt=Submit PDF containing Stirling-PDF Page dividers:
autoSplitPDF.duplexMode=Duplex Mode (Front and back scanning)
autoSplitPDF.dividerDownload1=Download 'Auto Splitter Divider (minimal).pdf'
autoSplitPDF.dividerDownload2=Download 'Auto Splitter Divider (with instructions).pdf'
autoSplitPDF.submit=Submit
@@ -992,7 +992,6 @@ pdfOrganiser.mode.7=Remove First
pdfOrganiser.mode.8=Remove Last
pdfOrganiser.mode.9=Remove First and Last
pdfOrganiser.mode.10=Odd-Even Merge
pdfOrganiser.mode.11=Duplicate all pages
pdfOrganiser.placeholder=(e.g. 1,3,2 or 4-8,2,10-12 or 2n-1)
@@ -1035,7 +1034,7 @@ decrypt.success=File decrypted successfully.
multiTool-advert.message=This feature is also available in our <a href="{0}">multi-tool page</a>. Check it out for enhanced page-by-page UI and additional features!
#view pdf
viewPdf.title=View/Edit PDF
viewPdf.title=View PDF
viewPdf.header=View PDF
#pageRemover

View File

@@ -262,9 +262,9 @@ home.desc=Your locally hosted one-stop-shop for all your PDF needs.
home.searchBar=Search for features...
home.viewPdf.title=View/Edit PDF
home.viewPdf.desc=View, annotate, draw, add text or images
viewPdf.tags=view,read,annotate,text,image,highlight,edit
home.viewPdf.title=View PDF
home.viewPdf.desc=View, annotate, add text or images
viewPdf.tags=view,read,annotate,text,image
home.setFavorites=Set Favourites
home.hideFavorites=Hide Favourites
@@ -623,7 +623,6 @@ redact.showAttatchments=Show Attachments
redact.showLayers=Show Layers (double-click to reset all layers to the default state)
redact.colourPicker=Colour Picker
redact.findCurrentOutlineItem=Find current outline item
redact.applyChanges=Apply Changes
#showJS
showJS.title=Show Javascript
@@ -769,6 +768,7 @@ autoSplitPDF.selectText.3=Upload the single large scanned PDF file and let Stirl
autoSplitPDF.selectText.4=Divider pages are automatically detected and removed, guaranteeing a neat final document.
autoSplitPDF.formPrompt=Submit PDF containing Stirling-PDF Page dividers:
autoSplitPDF.duplexMode=Duplex Mode (Front and back scanning)
autoSplitPDF.dividerDownload1=Download 'Auto Splitter Divider (minimal).pdf'
autoSplitPDF.dividerDownload2=Download 'Auto Splitter Divider (with instructions).pdf'
autoSplitPDF.submit=Submit
@@ -992,7 +992,6 @@ pdfOrganiser.mode.7=Remove First
pdfOrganiser.mode.8=Remove Last
pdfOrganiser.mode.9=Remove First and Last
pdfOrganiser.mode.10=Odd-Even Merge
pdfOrganiser.mode.11=Duplicate all pages
pdfOrganiser.placeholder=(e.g. 1,3,2 or 4-8,2,10-12 or 2n-1)
@@ -1035,7 +1034,7 @@ decrypt.success=File decrypted successfully.
multiTool-advert.message=This feature is also available in our <a href="{0}">multi-tool page</a>. Check it out for enhanced page-by-page UI and additional features!
#view pdf
viewPdf.title=View/Edit PDF
viewPdf.title=View PDF
viewPdf.header=View PDF
#pageRemover

View File

@@ -262,7 +262,7 @@ home.desc=Su ventanilla única autohospedada para todas sus necesidades PDF
home.searchBar=Buscar características...
home.viewPdf.title=View/Edit PDF
home.viewPdf.title=Ver PDF
home.viewPdf.desc=Ver, anotar, añadir texto o imágenes
viewPdf.tags=ver,leer,anotar,texto,imagen
@@ -623,7 +623,6 @@ redact.showAttatchments=Show Attachments
redact.showLayers=Show Layers (double-click to reset all layers to the default state)
redact.colourPicker=Colour Picker
redact.findCurrentOutlineItem=Find current outline item
redact.applyChanges=Apply Changes
#showJS
showJS.title=Mostrar Javascript
@@ -769,6 +768,7 @@ autoSplitPDF.selectText.3=Cargue un único archivo PDF escaneado de gran tamaño
autoSplitPDF.selectText.4=Las páginas divisorias son automáticamente detectadas y eliminadas, garantizando un buen documento final.
autoSplitPDF.formPrompt=Entregar PDF conteniendo divisores de página de Stirling-PDF:
autoSplitPDF.duplexMode=Modo Dúplex (Escaneado de ambas caras)
autoSplitPDF.dividerDownload1=Descargar 'Divisor automático (mínima).pdf'
autoSplitPDF.dividerDownload2=Descargar 'Divisor automático (con instrucciones).pdf'
autoSplitPDF.submit=Entregar
@@ -992,7 +992,6 @@ pdfOrganiser.mode.7=Quitar primera
pdfOrganiser.mode.8=Quitar última
pdfOrganiser.mode.9=Quitar primera y última
pdfOrganiser.mode.10=Unir impar-par
pdfOrganiser.mode.11=Duplicate all pages
pdfOrganiser.placeholder=(por ej., 1,3,2 o 4-8,2,10-12 o 2n-1)
@@ -1035,7 +1034,7 @@ decrypt.success=File decrypted successfully.
multiTool-advert.message=This feature is also available in our <a href="{0}">multi-tool page</a>. Check it out for enhanced page-by-page UI and additional features!
#view pdf
viewPdf.title=View/Edit PDF
viewPdf.title=Ver PDF
viewPdf.header=Ver PDF
#pageRemover
@@ -1186,7 +1185,7 @@ changeMetadata.submit=Cambiar
#pdfToPDFA
pdfToPDFA.title=PDF a PDF/A
pdfToPDFA.header=PDF a PDF/A
pdfToPDFA.credit=Este servicio usa libreoffice para la conversión a PDF/A
pdfToPDFA.credit=Este servicio usa qpdf para la conversión a PDF/A
pdfToPDFA.submit=Convertir
pdfToPDFA.tip=Actualmente no funciona para múltiples entrada a la vez
pdfToPDFA.outputFormat=Formato de salida

View File

@@ -262,7 +262,7 @@ home.desc=Zure leihatila bakarra autoostatatua zure PDF behar guztietarako
home.searchBar=Search for features...
home.viewPdf.title=View/Edit PDF
home.viewPdf.title=View PDF
home.viewPdf.desc=View, annotate, add text or images
viewPdf.tags=view,read,annotate,text,image
@@ -623,7 +623,6 @@ redact.showAttatchments=Show Attachments
redact.showLayers=Show Layers (double-click to reset all layers to the default state)
redact.colourPicker=Colour Picker
redact.findCurrentOutlineItem=Find current outline item
redact.applyChanges=Apply Changes
#showJS
showJS.title=Javascript erakutsi
@@ -769,6 +768,7 @@ autoSplitPDF.selectText.3=Igo eskaneatutako PDF artxibo handia, eta utzi Stirlin
autoSplitPDF.selectText.4=Orrialde zatitzaileak automatikoki detektatu eta kentzen dira, eta azken dokumentu ordenatua bermatzen da.
autoSplitPDF.formPrompt=Submit PDF containing Stirling-PDF Page dividers:
autoSplitPDF.duplexMode=Duplex Mode (Front and back scanning)Duplex modua (aurreko eta atzeko azterketa)
autoSplitPDF.dividerDownload1=Deskargatu 'Auto Splitter Divider (minimal).pdf'
autoSplitPDF.dividerDownload2=Deskargatu 'Auto Splitter Divider (with instructions).pdf'
autoSplitPDF.submit=Bidali
@@ -992,7 +992,6 @@ pdfOrganiser.mode.7=Remove First
pdfOrganiser.mode.8=Remove Last
pdfOrganiser.mode.9=Remove First and Last
pdfOrganiser.mode.10=Odd-Even Merge
pdfOrganiser.mode.11=Duplicate all pages
pdfOrganiser.placeholder=(e.g. 1,3,2 or 4-8,2,10-12 or 2n-1)
@@ -1035,7 +1034,7 @@ decrypt.success=File decrypted successfully.
multiTool-advert.message=This feature is also available in our <a href="{0}">multi-tool page</a>. Check it out for enhanced page-by-page UI and additional features!
#view pdf
viewPdf.title=View/Edit PDF
viewPdf.title=View PDF
viewPdf.header=View PDF
#pageRemover
@@ -1186,7 +1185,7 @@ changeMetadata.submit=Aldatu
#pdfToPDFA
pdfToPDFA.title=PDFa PDF/A bihurtu
pdfToPDFA.header=PDFa PDF/A bihurtu
pdfToPDFA.credit=Zerbitzu honek libreoffice erabiltzen du PDFak PDF/A bihurtzeko
pdfToPDFA.credit=Zerbitzu honek qpdf erabiltzen du PDFak PDF/A bihurtzeko
pdfToPDFA.submit=Bihurtu
pdfToPDFA.tip=Currently does not work for multiple inputs at once
pdfToPDFA.outputFormat=Output format

View File

@@ -262,7 +262,7 @@ home.desc=مغازه‌ همه‌کاره میزبانی‌شده به صورت
home.searchBar=جستجو برای ویژگی‌ها...
home.viewPdf.title=View/Edit PDF
home.viewPdf.title=مشاهده PDF
home.viewPdf.desc=مشاهده، حاشیه‌نویسی، افزودن متن یا تصاویر
viewPdf.tags=مشاهده،خواندن،حاشیه‌نویسی،متن،تصویر
@@ -623,7 +623,6 @@ redact.showAttatchments=Show Attachments
redact.showLayers=Show Layers (double-click to reset all layers to the default state)
redact.colourPicker=Colour Picker
redact.findCurrentOutlineItem=Find current outline item
redact.applyChanges=Apply Changes
#showJS
showJS.title=نمایش جاوااسکریپت
@@ -769,6 +768,7 @@ autoSplitPDF.selectText.3=فایل PDF بزرگ اسکن شده را بارگذ
autoSplitPDF.selectText.4=صفحات جداکننده به طور خودکار تشخیص داده و حذف می‌شوند، تضمین‌کننده یک سند نهایی منظم.
autoSplitPDF.formPrompt=PDF حاوی جداکننده‌های Stirling-PDF را ارسال کنید:
autoSplitPDF.duplexMode=حالت دوبلکس (اسکن جلو و عقب)
autoSplitPDF.dividerDownload1=دانلود 'Auto Splitter Divider (minimal).pdf'
autoSplitPDF.dividerDownload2=دانلود 'Auto Splitter Divider (with instructions).pdf'
autoSplitPDF.submit=ارسال
@@ -992,7 +992,6 @@ pdfOrganiser.mode.7=حذف اولین
pdfOrganiser.mode.8=حذف آخرین
pdfOrganiser.mode.9=حذف اول و آخر
pdfOrganiser.mode.10=ادغام فرد-زوج
pdfOrganiser.mode.11=Duplicate all pages
pdfOrganiser.placeholder=(مثال: ۱,۳,۲ یا ۴-۸,۲,۱۰-۱۲ یا 2n-1)
@@ -1035,7 +1034,7 @@ decrypt.success=File decrypted successfully.
multiTool-advert.message=این ویژگی همچنین در <a href="{0}">صفحه ابزار چندگانه ما</a> موجود است. برای رابط کاربری صفحه به صفحه پیشرفته و ویژگی‌های اضافی بررسی کنید!
#view pdf
viewPdf.title=View/Edit PDF
viewPdf.title=مشاهده PDF
viewPdf.header=مشاهده PDF
#pageRemover
@@ -1186,7 +1185,7 @@ changeMetadata.submit=تغییر
#pdfToPDFA
pdfToPDFA.title=PDF به PDF/A
pdfToPDFA.header=PDF به PDF/A
pdfToPDFA.credit=این سرویس از libreoffice برای تبدیل PDF/A استفاده می‌کند
pdfToPDFA.credit=این سرویس از qpdf برای تبدیل PDF/A استفاده می‌کند
pdfToPDFA.submit=تبدیل
pdfToPDFA.tip=در حال حاضر برای چندین ورودی به طور همزمان کار نمی‌کند
pdfToPDFA.outputFormat=فرمت خروجی

View File

@@ -138,7 +138,7 @@ analytics.settings=Vous pouvez modifier les paramètres des analyses dans le fic
# NAVBAR #
#############
navbar.favorite=Favoris
navbar.recent=Nouveau et mise à jour
navbar.recent=New and recently updated
navbar.darkmode=Mode sombre
navbar.language=Langues
navbar.settings=Paramètres
@@ -262,18 +262,18 @@ home.desc=Votre application Web hébergée localement pour répondre à tous vos
home.searchBar=Rechercher des fonctionnalités...
home.viewPdf.title=View/Edit PDF
home.viewPdf.title=Visionner le PDF
home.viewPdf.desc=Visionner, annoter, ajouter du texte ou des images.
viewPdf.tags=visualiser,lire,annoter,texte,image
home.setFavorites=Ajouter des favoris
home.hideFavorites=Cacher les favoris
home.showFavorites=Montrer les favoris
home.legacyHomepage=Ancienne Homepage
home.newHomePage=Essayez notre nouvelle Homepage !
home.alphabetical=Alphabétique
home.globalPopularity=Popularité globale
home.sortBy=Trier par :
home.setFavorites=Set Favourites
home.hideFavorites=Hide Favourites
home.showFavorites=Show Favourites
home.legacyHomepage=Old homepage
home.newHomePage=Try our new homepage!
home.alphabetical=Alphabetical
home.globalPopularity=Global Popularity
home.sortBy=Sort by:
home.multiTool.title=Outil multifonction PDF
home.multiTool.desc=Fusionnez, faites pivoter, réorganisez et supprimez des pages.
@@ -485,13 +485,13 @@ home.showJS.title=Afficher le JavaScript
home.showJS.desc=Recherche et affiche tout JavaScript injecté dans un PDF.
showJS.tags=JS
home.autoRedact.title=Censure automatique
home.autoRedact.desc=Censurer automatiquement les informations sensibles d'un PDF.
autoRedact.tags=caviarder,rédiger,censurer,redact,auto
home.autoRedact.title=Caviarder automatiquement
home.autoRedact.desc=Caviardez automatiquement les informations sensibles d'un PDF.
autoRedact.tags=caviarder,redact,auto
home.redact.title=Censure manuelle
home.redact.desc=Censurer un PDF en fonction de texte sélectionné, formes dessinées et/ou des pages sélectionnées.
redact.tags=Redact,Hide,black out,black,marker,hidden,manual,caviarder,rédiger,censurer
home.redact.title=Rédaction manuelle
home.redact.desc=Rédiger un PDF en fonction de texte sélectionné, formes dessinées et/ou des pages sélectionnées.
redact.tags=Redact,Hide,black out,black,marker,hidden,manual
home.tableExtraxt.title=PDF en CSV
home.tableExtraxt.desc=Extrait les tableaux d'un PDF et les transforme en CSV.
@@ -623,7 +623,6 @@ redact.showAttatchments=Montrer les éléments attachés
redact.showLayers=Montrer les calques (double-click pour réinitialiser tous les calques à l'état par défaut)
redact.colourPicker=Sélection de couleur
redact.findCurrentOutlineItem=Trouver l'élément de contour courrant
redact.applyChanges=Apply Changes
#showJS
showJS.title=Afficher le JavaScript
@@ -769,6 +768,7 @@ autoSplitPDF.selectText.3=Téléchargez le fichier PDF numérisé et laissez Sti
autoSplitPDF.selectText.4=Les feuilles de séparation sont automatiquement détectées et supprimées, garantissant un document final soigné.
autoSplitPDF.formPrompt=PDF contenant des feuilles de séparation de Stirling PDF :
autoSplitPDF.duplexMode=Mode recto-verso
autoSplitPDF.dividerDownload1=Auto Splitter Divider (minimal).pdf
autoSplitPDF.dividerDownload2=Auto Splitter Divider (with instructions).pdf
autoSplitPDF.submit=Séparer
@@ -992,7 +992,6 @@ pdfOrganiser.mode.7=Supprimer le premier
pdfOrganiser.mode.8=Supprimer le dernier
pdfOrganiser.mode.9=Supprimer le premier et le dernier
pdfOrganiser.mode.10=Méger Impair-Pair
pdfOrganiser.mode.11=Duplicate all pages
pdfOrganiser.placeholder=(par exemple 1,3,2 ou 4-8,2,10-12 ou 2n-1)
@@ -1035,7 +1034,7 @@ decrypt.success=Fichier déchiffré avec succès.
multiTool-advert.message=Cette fonctionnalité est aussi disponible dans la <a href="{0}">page de l'outil multifonction</a>. Allez-y pour une interface page par page améliorée et des fonctionnalités additionnelles !
#view pdf
viewPdf.title=View/Edit PDF
viewPdf.title=Visualiser un PDF
viewPdf.header=Visualiser un PDF
#pageRemover
@@ -1186,7 +1185,7 @@ changeMetadata.submit=Modifier
#pdfToPDFA
pdfToPDFA.title=PDF en PDF/A
pdfToPDFA.header=PDF en PDF/A
pdfToPDFA.credit=Ce service utilise libreoffice pour la conversion en PDF/A.
pdfToPDFA.credit=Ce service utilise qpdf pour la conversion en PDF/A.
pdfToPDFA.submit=Convertir
pdfToPDFA.tip=Ne fonctionne actuellement pas pour plusieurs entrées à la fois
pdfToPDFA.outputFormat=Format de sortie

View File

@@ -262,7 +262,7 @@ home.desc=Do shiopa ilfhreastail arna óstáil go háitiúil do do riachtanais P
home.searchBar=Cuardaigh gnéithe...
home.viewPdf.title=View/Edit PDF
home.viewPdf.title=Féach PDF
home.viewPdf.desc=Féach ar, nótáil, cuir téacs nó íomhánna leis
viewPdf.tags=amharc, léamh, anótáil, téacs, íomhá
@@ -623,7 +623,6 @@ redact.showAttatchments=Taispeáin Ceangaltáin
redact.showLayers=Taispeáin Sraitheanna (cliceáil faoi dhó chun gach sraith a athshocrú go dtí an staid réamhshocraithe)
redact.colourPicker=Roghnóir Dathanna
redact.findCurrentOutlineItem=Faigh imlíne reatha
redact.applyChanges=Apply Changes
#showJS
showJS.title=Taispeáin Javascript
@@ -769,6 +768,7 @@ autoSplitPDF.selectText.3=Uaslódáil an comhad PDF mór scanta amháin agus lig
autoSplitPDF.selectText.4=Déantar leathanaigh roinnteoirí a bhrath agus a bhaint go huathoibríoch, rud a ráthaíonn doiciméad deiridh néata.
autoSplitPDF.formPrompt=Cuir PDF isteach ina bhfuil roinnteoirí Leathanaigh Stirling-PDF:
autoSplitPDF.duplexMode=Mód Duplex (scanadh tosaigh agus cúil)
autoSplitPDF.dividerDownload1=Íoslódáil 'Auto Scoilteoir Roinnteoir (íosmhéid).pdf'
autoSplitPDF.dividerDownload2=Íoslódáil 'Auto Splitter Divider (le treoracha).pdf'
autoSplitPDF.submit=Cuir isteach
@@ -992,7 +992,6 @@ pdfOrganiser.mode.7=Bain Ar dtús
pdfOrganiser.mode.8=Bain Last
pdfOrganiser.mode.9=Bain An Chéad agus an Deireadh
pdfOrganiser.mode.10=Corr-Fiú Cumaisc
pdfOrganiser.mode.11=Duplicate all pages
pdfOrganiser.placeholder=(m.sh. 1,3,2 nó 4-8,2,10-12 nó 2n-1)
@@ -1035,7 +1034,7 @@ decrypt.success=D'éirigh le díchriptiú an chomhaid.
multiTool-advert.message=Tá an ghné seo ar fáil inár <a href="{0}">leathanach il-uirlisí</a> freisin. Seiceáil é le haghaidh Chomhéadain leathanach ar leathanach feabhsaithe agus gnéithe breise!
#view pdf
viewPdf.title=View/Edit PDF
viewPdf.title=Féach PDF
viewPdf.header=Féach PDF
#pageRemover
@@ -1186,7 +1185,7 @@ changeMetadata.submit=Athrú
#pdfToPDFA
pdfToPDFA.title=PDF Go PDF/A
pdfToPDFA.header=PDF Go PDF/A
pdfToPDFA.credit=Úsáideann an tseirbhís seo libreoffice chun PDF/A a thiontú
pdfToPDFA.credit=Úsáideann an tseirbhís seo qpdf chun PDF/A a thiontú
pdfToPDFA.submit=Tiontaigh
pdfToPDFA.tip=Faoi láthair ní oibríonn sé le haghaidh ionchuir iolracha ag an am céanna
pdfToPDFA.outputFormat=Formáid aschuir

View File

@@ -262,7 +262,7 @@ home.desc=आपकी सभी PDF आवश्यकताओं के ल
home.searchBar=सुविधाएं खोजें...
home.viewPdf.title=View/Edit PDF
home.viewPdf.title=PDF देखें
home.viewPdf.desc=देखें, टिप्पणी करें, टेक्स्ट या छवियां जोड़ें
viewPdf.tags=देखें,पढ़ें,टिप्पणी,टेक्स्ट,छवि
@@ -623,7 +623,6 @@ redact.showAttatchments=अटैचमेंट दिखाएं
redact.showLayers=लेयर्स दिखाएं (सभी लेयर्स को डिफ़ॉल्ट स्थिति में रीसेट करने के लिए डबल-क्लिक करें)
redact.colourPicker=रंग चयनकर्ता
redact.findCurrentOutlineItem=वर्तमान आउटलाइन आइटम खोजें
redact.applyChanges=Apply Changes
#showJS
showJS.title=जावास्क्रिप्ट दिखाएं
@@ -769,6 +768,7 @@ autoSplitPDF.selectText.3=एक बड़ी स्कैन की गई PDF
autoSplitPDF.selectText.4=विभाजक पृष्ठ स्वचालित रूप से पहचाने जाते हैं और हटा दिए जाते हैं, एक साफ अंतिम दस्तावेज़ सुनिश्चित करते हैं।
autoSplitPDF.formPrompt=Stirling-PDF पृष्ठ विभाजक वाली PDF जमा करें:
autoSplitPDF.duplexMode=डुप्लेक्स मोड (सामने और पीछे स्कैनिंग)
autoSplitPDF.dividerDownload1='स्वतः विभाजक (न्यूनतम).pdf' डाउनलोड करें
autoSplitPDF.dividerDownload2='स्वतः विभाजक (निर्देशों के साथ).pdf' डाउनलोड करें
autoSplitPDF.submit=जमा करें
@@ -992,7 +992,6 @@ pdfOrganiser.mode.7=प्रथम हटाएं
pdfOrganiser.mode.8=अंतिम हटाएं
pdfOrganiser.mode.9=प्रथम और अंतिम हटाएं
pdfOrganiser.mode.10=विषम-सम मर्ज
pdfOrganiser.mode.11=Duplicate all pages
pdfOrganiser.placeholder=(जैसे 1,3,2 या 4-8,2,10-12 या 2n-1)
@@ -1035,7 +1034,7 @@ decrypt.success=फ़ाइल सफलतापूर्वक डिक्
multiTool-advert.message=यह सुविधा हमारे <a href="{0}">मल्टी-टूल पृष्ठ</a> में भी उपलब्ध है। बेहतर पृष्ठ-दर-पृष्ठ UI और अतिरिक्त सुविधाओं के लिए इसे देखें!
#view pdf
viewPdf.title=View/Edit PDF
viewPdf.title=PDF देखें
viewPdf.header=PDF देखें
#pageRemover
@@ -1186,7 +1185,7 @@ changeMetadata.submit=बदलें
#pdfToPDFA
pdfToPDFA.title=PDF से PDF/A
pdfToPDFA.header=PDF से PDF/A
pdfToPDFA.credit=यह सेवा PDF/A रूपांतरण के लिए libreoffice का उपयोग करती है
pdfToPDFA.credit=यह सेवा PDF/A रूपांतरण के लिए qpdf का उपयोग करती है
pdfToPDFA.submit=बदलें
pdfToPDFA.tip=वर्तमान में एक बार में कई इनपुट के लिए काम नहीं करता
pdfToPDFA.outputFormat=आउटपुट प्रारूप

View File

@@ -262,7 +262,7 @@ home.desc=Sve na jednom mjestu za sve vaše PDF potrebe.
home.searchBar=Pretraži funkcije...
home.viewPdf.title=View/Edit PDF
home.viewPdf.title=Pregledaj PDF
home.viewPdf.desc=Pregledaj, komentiraj, dodaj tekst ili slike
viewPdf.tags=pregled,čitanje,komentiranje,tekst,slika
@@ -623,7 +623,6 @@ redact.showAttatchments=Show Attachments
redact.showLayers=Show Layers (double-click to reset all layers to the default state)
redact.colourPicker=Colour Picker
redact.findCurrentOutlineItem=Find current outline item
redact.applyChanges=Apply Changes
#showJS
showJS.title=Prikaži Javascript
@@ -769,6 +768,7 @@ autoSplitPDF.selectText.3=Prenesite jednu veliku skeniranu PDF datoteku i pustit
autoSplitPDF.selectText.4=Razdjelne stranice automatski se otkrivaju i uklanjaju, jamčeći uredan konačni dokument.
autoSplitPDF.formPrompt=Pošaljite PDF koji sadrži naše razdjelnike stranica:
autoSplitPDF.duplexMode=Obostrani način rada (skeniranje s prednje i stražnje strane)
autoSplitPDF.dividerDownload1=Preuzmite 'Auto Splitter Divider (minimalan).pdf'
autoSplitPDF.dividerDownload2=Preuzmite 'Auto Splitter Divider (s uputama).pdf'
autoSplitPDF.submit=Potvrdi
@@ -992,7 +992,6 @@ pdfOrganiser.mode.7=Ukloni Prvu
pdfOrganiser.mode.8=Ukloni Zadnju
pdfOrganiser.mode.9=Ukloni Prvu i Zadnju
pdfOrganiser.mode.10=Neparno-parna kombinacija
pdfOrganiser.mode.11=Duplicate all pages
pdfOrganiser.placeholder=(npr. 1,3,2 ili 4-8,2,10-12 ili 2n-1)
@@ -1035,7 +1034,7 @@ decrypt.success=File decrypted successfully.
multiTool-advert.message=This feature is also available in our <a href="{0}">multi-tool page</a>. Check it out for enhanced page-by-page UI and additional features!
#view pdf
viewPdf.title=View/Edit PDF
viewPdf.title=Pogledaj
viewPdf.header=Pogledaj PDF
#pageRemover
@@ -1186,7 +1185,7 @@ changeMetadata.submit=Promijeniti
#pdfToPDFA
pdfToPDFA.title=PDF u PDF/A
pdfToPDFA.header=PDF u PDF/A
pdfToPDFA.credit=Ova usluga koristi libreoffice za PDF/A pretvorbu
pdfToPDFA.credit=Ova usluga koristi qpdf za PDF/A pretvorbu
pdfToPDFA.submit=Pretvoriti
pdfToPDFA.tip=Trenutno ne radi za više unosa odjednom
pdfToPDFA.outputFormat=Izlazni format

View File

@@ -262,7 +262,7 @@ home.desc=Az Ön helyi PDF-szükségleteinek teljes körű megoldása.
home.searchBar=Funkciók keresése...
home.viewPdf.title=View/Edit PDF
home.viewPdf.title=PDF megtekintése
home.viewPdf.desc=Megtekintés, jegyzetelés, szöveg vagy képek hozzáadása
viewPdf.tags=megtekintés,olvasás,jegyzetelés,szöveg,kép
@@ -623,7 +623,6 @@ redact.showAttatchments=Show Attachments
redact.showLayers=Show Layers (double-click to reset all layers to the default state)
redact.colourPicker=Colour Picker
redact.findCurrentOutlineItem=Find current outline item
redact.applyChanges=Apply Changes
#showJS
showJS.title=JavaScript megjelenítése
@@ -769,6 +768,7 @@ autoSplitPDF.selectText.3=Töltse fel az egyetlen nagy szkennelt PDF fájlt, és
autoSplitPDF.selectText.4=Az elválasztólapokat automatikusan felismeri és eltávolítja, garantálva a rendezett végeredményt.
autoSplitPDF.formPrompt=Töltse fel a Stirling-PDF oldalelválasztókat tartalmazó PDF-et:
autoSplitPDF.duplexMode=Duplex mód (Elő- és hátoldali szkennelés)
autoSplitPDF.dividerDownload1='Automatikus elválasztó (minimális).pdf' letöltése
autoSplitPDF.dividerDownload2='Automatikus elválasztó (utasításokkal).pdf' letöltése
autoSplitPDF.submit=Küldés
@@ -992,7 +992,6 @@ pdfOrganiser.mode.7=Első oldal eltávolítása
pdfOrganiser.mode.8=Utolsó oldal eltávolítása
pdfOrganiser.mode.9=Első és utolsó oldal eltávolítása
pdfOrganiser.mode.10=Páros-páratlan egyesítés
pdfOrganiser.mode.11=Duplicate all pages
pdfOrganiser.placeholder=(pl. 1,3,2 vagy 4-8,2,10-12 vagy 2n-1)
@@ -1035,7 +1034,7 @@ decrypt.success=A fájl visszafejtése sikeres.
multiTool-advert.message=Ez a funkció elérhető a <a href="{0}">többfunkciós eszköz oldalon</a> is. Nézze meg a fejlett oldalankénti felületet és további funkciókat!
#view pdf
viewPdf.title=View/Edit PDF
viewPdf.title=PDF megtekintése
viewPdf.header=PDF megtekintése
#pageRemover
@@ -1186,7 +1185,7 @@ changeMetadata.submit=Módosítás
#pdfToPDFA
pdfToPDFA.title=PDF konvertálása PDF/A formátumba
pdfToPDFA.header=PDF konvertálása PDF/A formátumba
pdfToPDFA.credit=Ez a szolgáltatás a libreoffice használatával végzi a PDF/A konverziót
pdfToPDFA.credit=Ez a szolgáltatás a qpdf használatával végzi a PDF/A konverziót
pdfToPDFA.submit=Konvertálás
pdfToPDFA.tip=Jelenleg nem támogatja a több fájl egyidejű feldolgozását
pdfToPDFA.outputFormat=Kimeneti formátum

View File

@@ -262,7 +262,7 @@ home.desc=Semua kebutuhan PDF Anda, langsung dari komputer lokal Anda.
home.searchBar=Mencari fitur...
home.viewPdf.title=View/Edit PDF
home.viewPdf.title=Lihat PDF
home.viewPdf.desc=Melihat, membuat anotasi, menambahkan teks atau gambar
viewPdf.tags=melihat,membaca,membuat anotasi,teks,gambar
@@ -623,7 +623,6 @@ redact.showAttatchments=Show Attachments
redact.showLayers=Show Layers (double-click to reset all layers to the default state)
redact.colourPicker=Colour Picker
redact.findCurrentOutlineItem=Find current outline item
redact.applyChanges=Apply Changes
#showJS
showJS.title=Tampilkan Javascript
@@ -769,6 +768,7 @@ autoSplitPDF.selectText.3=Unggah satu berkas PDF besar yang dipindai dan biarkan
autoSplitPDF.selectText.4=Halaman pembatas secara otomatis terdeteksi dan dihapus, menjamin dokumen akhir yang rapi.
autoSplitPDF.formPrompt=Kirimkan PDF yang berisi pembagi Halaman Stirling-PDF:
autoSplitPDF.duplexMode=Mode Dupleks (Pemindaian depan dan belakang)
autoSplitPDF.dividerDownload1=Unduh 'Pembagi Pembagi Otomatis (minimal).pdf'
autoSplitPDF.dividerDownload2=Unduh 'Pembagi Pembagi Otomatis (dengan instruksi).pdf'
autoSplitPDF.submit=Kirim
@@ -992,7 +992,6 @@ pdfOrganiser.mode.7=Hapus Pertama
pdfOrganiser.mode.8=Hapus Terakhir
pdfOrganiser.mode.9=Hapus Pertama dan Terakhir
pdfOrganiser.mode.10=Penggabungan Genap-Ganjil
pdfOrganiser.mode.11=Duplicate all pages
pdfOrganiser.placeholder=(misalnya 1,3,2 atau 4-8,2,10-12 atau 2n-1)
@@ -1035,7 +1034,7 @@ decrypt.success=File decrypted successfully.
multiTool-advert.message=This feature is also available in our <a href="{0}">multi-tool page</a>. Check it out for enhanced page-by-page UI and additional features!
#view pdf
viewPdf.title=View/Edit PDF
viewPdf.title=Lihat PDF
viewPdf.header=Lihat PDF
#pageRemover
@@ -1186,7 +1185,7 @@ changeMetadata.submit=Ganti
#pdfToPDFA
pdfToPDFA.title=PDF Ke PDF/A
pdfToPDFA.header=PDF ke PDF/A
pdfToPDFA.credit=Layanan ini menggunakan libreoffice untuk konversi PDF/A.
pdfToPDFA.credit=Layanan ini menggunakan qpdf untuk konversi PDF/A.
pdfToPDFA.submit=Konversi
pdfToPDFA.tip=Saat ini tidak dapat digunakan untuk beberapa input sekaligus
pdfToPDFA.outputFormat=Format keluaran

View File

@@ -262,7 +262,7 @@ home.desc=La tua pagina auto-gestita per modificare qualsiasi PDF.
home.searchBar=Cerca funzionalità...
home.viewPdf.title=View/Edit PDF
home.viewPdf.title=Visualizza PDF
home.viewPdf.desc=Visualizza, annota, aggiungi testo o immagini
viewPdf.tags=visualizzare,leggere,annotare,testo,immagine
@@ -272,8 +272,8 @@ home.showFavorites=Mostra preferiti
home.legacyHomepage=Vecchia homepage
home.newHomePage=Prova la nostra nuova homepage!
home.alphabetical=Alfabetico
home.globalPopularity=Popolarità
home.sortBy=Ordinamento:
home.globalPopularity=Popolarità globale
home.sortBy=Ordina per:
home.multiTool.title=Multifunzione PDF
home.multiTool.desc=Unisci, Ruota, Riordina, e Rimuovi pagine
@@ -623,7 +623,6 @@ redact.showAttatchments=Mostra allegati
redact.showLayers=Mostra livelli (fare doppio clic per ripristinare tutti i livelli allo stato predefinito)
redact.colourPicker=Selettore colore
redact.findCurrentOutlineItem=Trova l'elemento di contorno corrente
redact.applyChanges=Applica modifiche
#showJS
showJS.title=Mostra Javascript
@@ -769,6 +768,7 @@ autoSplitPDF.selectText.3=Carica il singolo file PDF scansionato di grandi dimen
autoSplitPDF.selectText.4=Le pagine divisorie vengono rilevate e rimosse automaticamente, garantendo un documento finale ordinato.
autoSplitPDF.formPrompt=Invia PDF contenente divisori di pagina Stirling-PDF:
autoSplitPDF.duplexMode=Modalità duplex (scansione fronte e retro)
autoSplitPDF.dividerDownload1=Scarica 'Divisore automatico (minimo).pdf'
autoSplitPDF.dividerDownload2=Scarica 'Divisore automatico (con istruzioni).pdf'
autoSplitPDF.submit=Invia
@@ -926,7 +926,7 @@ ocr.selectText.10=Modalità OCR
ocr.selectText.11=Rimuovi immagini dopo la scansione (Rimuove TUTTE le immagini, utile solo come parte del processo di conversione)
ocr.selectText.12=Modalità di rendering (avanzato)
ocr.help=Per favore leggi la documentazione su come usare il programma per altri linguaggi e/o uso non in Docker
ocr.credit=Questo servizio utilizza Qpdf e Tesseract per l'OCR.
ocr.credit=Questo servizio utilizza qpdf e Tesseract per l'OCR.
ocr.submit=Scansiona testo nel PDF con OCR
@@ -992,7 +992,6 @@ pdfOrganiser.mode.7=Rimuovi prima
pdfOrganiser.mode.8=Rimuovi ultima
pdfOrganiser.mode.9=Rimuovi la prima e l'ultima
pdfOrganiser.mode.10=Unione pari-dispari
pdfOrganiser.mode.11=Duplica tutte le pagine
pdfOrganiser.placeholder=(ad es. 1,3,2 o 4-8,2,10-12 o 2n-1)
@@ -1035,7 +1034,7 @@ decrypt.success=File decrittografato con successo.
multiTool-advert.message=Questa funzione è disponibile anche nella nostra <a href="{0}">pagina multi-strumento</a>. Scoprila per un'interfaccia utente pagina per pagina migliorata e funzionalità aggiuntive!
#view pdf
viewPdf.title=Visualizza/Modifica PDF
viewPdf.title=Visualizza PDF
viewPdf.header=Visualizza PDF
#pageRemover
@@ -1186,7 +1185,7 @@ changeMetadata.submit=Cambia proprietà
#pdfToPDFA
pdfToPDFA.title=Da PDF a PDF/A
pdfToPDFA.header=Da PDF a PDF/A
pdfToPDFA.credit=Questo servizio utilizza libreoffice per la conversione in PDF/A.
pdfToPDFA.credit=Questo servizio utilizza qpdf per la conversione in PDF/A.
pdfToPDFA.submit=Converti
pdfToPDFA.tip=Attualmente non funziona per più input contemporaneamente
pdfToPDFA.outputFormat=Formato di output

View File

@@ -262,7 +262,7 @@ home.desc=PDFのあらゆるニーズに対応するローカルホスティン
home.searchBar=機能検索...
home.viewPdf.title=View/Edit PDF
home.viewPdf.title=PDFを表示
home.viewPdf.desc=表示、注釈、テキストや画像の追加
viewPdf.tags=view,read,annotate,text,image
@@ -623,7 +623,6 @@ redact.showAttatchments=添付ファイルを表示
redact.showLayers=レイヤーを表示(ダブルクリックするとすべてのレイヤーがデフォルトの状態にリセットされます)
redact.colourPicker=カラー選択
redact.findCurrentOutlineItem=現在のアウトライン項目を検索
redact.applyChanges=Apply Changes
#showJS
showJS.title=Javascriptを表示
@@ -769,6 +768,7 @@ autoSplitPDF.selectText.3=スキャンしたPDFファイルをアップロード
autoSplitPDF.selectText.4=仕切りページは自動的に検出、削除されるので、最終的な文書はきれいに仕上がります。
autoSplitPDF.formPrompt=Stirling-PDF仕切り用紙を含むPDFを送信:
autoSplitPDF.duplexMode=両面モード (表裏スキャン)
autoSplitPDF.dividerDownload1=ダウンロード '自動仕切り用紙 (最小).pdf'
autoSplitPDF.dividerDownload2=ダウンロード '自動仕切り用紙 (手順書付き).pdf'
autoSplitPDF.submit=送信
@@ -992,7 +992,6 @@ pdfOrganiser.mode.7=最初に削除
pdfOrganiser.mode.8=最後を削除
pdfOrganiser.mode.9=最初と最後を削除
pdfOrganiser.mode.10=奇数-偶数の結合
pdfOrganiser.mode.11=Duplicate all pages
pdfOrganiser.placeholder=(例:1,3,2または4-8,2,10-12または2n-1)
@@ -1035,7 +1034,7 @@ decrypt.success=ファイルの暗号化が正常に完了しました。
multiTool-advert.message=この機能は、<a href="{0}">マルチツール</a>でもご利用いただけます。強化されたページごとのUIと追加機能についてはこちらをご覧ください。
#view pdf
viewPdf.title=View/Edit PDF
viewPdf.title=PDFを表示
viewPdf.header=PDFを表示
#pageRemover
@@ -1186,7 +1185,7 @@ changeMetadata.submit=変更
#pdfToPDFA
pdfToPDFA.title=PDFをPDF/Aに変換
pdfToPDFA.header=PDFをPDF/Aに変換
pdfToPDFA.credit=本サービスはPDF/Aの変換にlibreofficeを使用しています。
pdfToPDFA.credit=本サービスはPDF/Aの変換にqpdfを使用しています。
pdfToPDFA.submit=変換
pdfToPDFA.tip=現在、一度に複数の入力に対して機能しません
pdfToPDFA.outputFormat=出力形式

View File

@@ -262,7 +262,7 @@ home.desc=PDF 관련 모든 작업을 위한 로컬 호스팅 원스톱 솔루
home.searchBar=기능 검색...
home.viewPdf.title=View/Edit PDF
home.viewPdf.title=PDF 보기
home.viewPdf.desc=보기, 주석 달기, 텍스트 또는 이미지 추가
viewPdf.tags=보기,읽기,주석,텍스트,이미지
@@ -623,7 +623,6 @@ redact.showAttatchments=첨부 파일 보기
redact.showLayers=레이어 보기 (더블클릭하여 모든 레이어를 기본 상태로 재설정)
redact.colourPicker=색상 선택기
redact.findCurrentOutlineItem=현재 개요 항목 찾기
redact.applyChanges=Apply Changes
#showJS
showJS.title=JavaScript 보기
@@ -769,6 +768,7 @@ autoSplitPDF.selectText.3=스캔한 단일 PDF 파일을 업로드하고 나머
autoSplitPDF.selectText.4=구분자 페이지는 자동으로 감지되고 제거되어 깔끔한 최종 문서를 보장합니다.
autoSplitPDF.formPrompt=Stirling-PDF 페이지 구분자가 포함된 PDF 제출:
autoSplitPDF.duplexMode=양면 모드 (앞뒷면 스캔)
autoSplitPDF.dividerDownload1='자동 분할 구분자 (최소)' PDF 다운로드
autoSplitPDF.dividerDownload2='자동 분할 구분자 (설명 포함)' PDF 다운로드
autoSplitPDF.submit=제출
@@ -992,7 +992,6 @@ pdfOrganiser.mode.7=첫 페이지 제거
pdfOrganiser.mode.8=마지막 페이지 제거
pdfOrganiser.mode.9=첫 페이지와 마지막 페이지 제거
pdfOrganiser.mode.10=홀수-짝수 병합
pdfOrganiser.mode.11=Duplicate all pages
pdfOrganiser.placeholder=(예: 1,3,2 또는 4-8,2,10-12 또는 2n-1)
@@ -1035,7 +1034,7 @@ decrypt.success=파일이 성공적으로 복호화되었습니다.
multiTool-advert.message=이 기능은 <a href="{0}">멀티 도구 페이지</a>에서도 사용할 수 있습니다. 향상된 페이지별 UI와 추가 기능을 확인해보세요!
#view pdf
viewPdf.title=View/Edit PDF
viewPdf.title=PDF 보기
viewPdf.header=PDF 보기
#pageRemover
@@ -1186,7 +1185,7 @@ changeMetadata.submit=변경
#pdfToPDFA
pdfToPDFA.title=PDF를 PDF/A로
pdfToPDFA.header=PDF를 PDF/A로
pdfToPDFA.credit=이 서비스는 PDF/A 변환을 위해 libreoffice를 사용합니다
pdfToPDFA.credit=이 서비스는 PDF/A 변환을 위해 qpdf를 사용합니다
pdfToPDFA.submit=변환
pdfToPDFA.tip=현재 여러 입력을 한 번에 처리할 수 없습니다
pdfToPDFA.outputFormat=출력 형식

View File

@@ -262,7 +262,7 @@ home.desc=Jouw lokaal gehoste one-stop-shop voor al je PDF-behoeften.
home.searchBar=Zoek naar functies...
home.viewPdf.title=View/Edit PDF
home.viewPdf.title=PDF bekijken
home.viewPdf.desc=Bekijk, annoteer, voeg tekst of afbeeldingen toe
viewPdf.tags=bekijken,lezen,annoteren,tekst,afbeelding
@@ -623,7 +623,6 @@ redact.showAttatchments=Show Attachments
redact.showLayers=Show Layers (double-click to reset all layers to the default state)
redact.colourPicker=Colour Picker
redact.findCurrentOutlineItem=Find current outline item
redact.applyChanges=Apply Changes
#showJS
showJS.title=Toon Javascript
@@ -769,6 +768,7 @@ autoSplitPDF.selectText.3=Upload het enkele grote gescande PDF-bestand en laat S
autoSplitPDF.selectText.4=Scheidingspagina's worden automatisch gedetecteerd en verwijderd, wat een net einddocument garandeert.
autoSplitPDF.formPrompt=Dien PDF in met Stirling-PDF Pagina-scheiders:
autoSplitPDF.duplexMode=Duplex Modus (voor- en achterkant scannen)
autoSplitPDF.dividerDownload1=Download 'Auto Splitter Divider (minimal).pdf'
autoSplitPDF.dividerDownload2=Download 'Auto Splitter Divider (with instructions).pdf'
autoSplitPDF.submit=Indienen
@@ -992,7 +992,6 @@ pdfOrganiser.mode.7=Eerste verwijderen
pdfOrganiser.mode.8=Laatste verwijderen
pdfOrganiser.mode.9=Eerste en laaste verwijderen
pdfOrganiser.mode.10=Oneven-even samenvoeken
pdfOrganiser.mode.11=Duplicate all pages
pdfOrganiser.placeholder=(bijv. 1,3,2 of 4-8,2,10-12 of 2n-1)
@@ -1035,7 +1034,7 @@ decrypt.success=File decrypted successfully.
multiTool-advert.message=This feature is also available in our <a href="{0}">multi-tool page</a>. Check it out for enhanced page-by-page UI and additional features!
#view pdf
viewPdf.title=View/Edit PDF
viewPdf.title=PDF bekijken
viewPdf.header=PDF bekijken
#pageRemover
@@ -1186,7 +1185,7 @@ changeMetadata.submit=Wijzigen
#pdfToPDFA
pdfToPDFA.title=PDF naar PDF/A
pdfToPDFA.header=PDF naar PDF/A
pdfToPDFA.credit=Deze service gebruikt libreoffice voor PDF/A-conversie
pdfToPDFA.credit=Deze service gebruikt qpdf voor PDF/A-conversie
pdfToPDFA.submit=Converteren
pdfToPDFA.tip=Werkt momenteel niet voor meerdere inputs tegelijkertijd.
pdfToPDFA.outputFormat=Uitvoerindeling

View File

@@ -262,7 +262,7 @@ home.desc=Din lokale one-stop-shop for alle dine PDF-behov.
home.searchBar=Søk etter funksjoner...
home.viewPdf.title=View/Edit PDF
home.viewPdf.title=Vis PDF
home.viewPdf.desc=Vis, annoter, legg til tekst eller bilder
viewPdf.tags=vis,les,annoter,tekst,bilde
@@ -623,7 +623,6 @@ redact.showAttatchments=Show Attachments
redact.showLayers=Show Layers (double-click to reset all layers to the default state)
redact.colourPicker=Colour Picker
redact.findCurrentOutlineItem=Find current outline item
redact.applyChanges=Apply Changes
#showJS
showJS.title=Vis Javascript
@@ -769,6 +768,7 @@ autoSplitPDF.selectText.3=Last opp den enkelte store skannede PDF-filen og la St
autoSplitPDF.selectText.4=Delingssidene blir automatisk oppdaget og fjernet, og garanterer et pent endelig dokument.
autoSplitPDF.formPrompt=Send inn PDF som inneholder Stirling-PDF-sideskillere:
autoSplitPDF.duplexMode=Dupleksmodus (Front- og bakskanning)
autoSplitPDF.dividerDownload1=Last ned 'Auto Splitter Divider (minimal).pdf'
autoSplitPDF.dividerDownload2=Last ned 'Auto Splitter Divider (med instruksjoner).pdf'
autoSplitPDF.submit=Send inn
@@ -992,7 +992,6 @@ pdfOrganiser.mode.7=Fjern først
pdfOrganiser.mode.8=Fjern sist
pdfOrganiser.mode.9=Fjern først og sist
pdfOrganiser.mode.10=Partall-Oddetall Sammenslåing
pdfOrganiser.mode.11=Duplicate all pages
pdfOrganiser.placeholder=(f.eks. 1,3,2 eller 4-8,2,10-12 eller 2n-1)
@@ -1035,7 +1034,7 @@ decrypt.success=File decrypted successfully.
multiTool-advert.message=This feature is also available in our <a href="{0}">multi-tool page</a>. Check it out for enhanced page-by-page UI and additional features!
#view pdf
viewPdf.title=View/Edit PDF
viewPdf.title=Vis PDF
viewPdf.header=Vis PDF
#pageRemover
@@ -1186,7 +1185,7 @@ changeMetadata.submit=Endre
#pdfToPDFA
pdfToPDFA.title=PDF til PDF/A
pdfToPDFA.header=PDF til PDF/A
pdfToPDFA.credit=Denne tjenesten bruker libreoffice for PDF/A-konvertering
pdfToPDFA.credit=Denne tjenesten bruker qpdf for PDF/A-konvertering
pdfToPDFA.submit=Konverter
pdfToPDFA.tip=Fungere for øyeblikket ikke for flere innganger samtidig
pdfToPDFA.outputFormat=Utdataformat

View File

@@ -262,7 +262,7 @@ home.desc=Twoja lokalna aplikacja do kompleksowej obsługi Twoich potrzeb związ
home.searchBar=Szukaj opcji ...
home.viewPdf.title=View/Edit PDF
home.viewPdf.title=Podejrzyj PDF
home.viewPdf.desc=Wyświetl, adnotuj, dodaj tekst lub obrazy
viewPdf.tags=wyświetl,czytaj,adnotuj,tekst,obraz
@@ -623,7 +623,6 @@ redact.showAttatchments=Show Attachments
redact.showLayers=Show Layers (double-click to reset all layers to the default state)
redact.colourPicker=Colour Picker
redact.findCurrentOutlineItem=Find current outline item
redact.applyChanges=Apply Changes
#showJS
showJS.title=Pokaż Javascript
@@ -769,6 +768,7 @@ autoSplitPDF.selectText.3=Wyślij pojedynczy duży plik PDF zawierający skan i
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'
autoSplitPDF.dividerDownload2=Pobierz 'Auto Splitter Divider (with instructions).pdf'
autoSplitPDF.submit=Wyślij
@@ -992,7 +992,6 @@ pdfOrganiser.mode.7=Usuń pierwszą
pdfOrganiser.mode.8=Usuń ostatnią
pdfOrganiser.mode.9=Usuń pierwszą i ostatnią
pdfOrganiser.mode.10=Połącz parzyste i nieparzyste
pdfOrganiser.mode.11=Duplicate all pages
pdfOrganiser.placeholder=(przykład 1,3,2 lub 4-8,2,10-12 lub 2n-1)
@@ -1035,7 +1034,7 @@ decrypt.success=File decrypted successfully.
multiTool-advert.message=This feature is also available in our <a href="{0}">multi-tool page</a>. Check it out for enhanced page-by-page UI and additional features!
#view pdf
viewPdf.title=View/Edit PDF
viewPdf.title=Podejrzyj PDF
viewPdf.header=Podejrzyj PDF
#pageRemover
@@ -1186,7 +1185,7 @@ changeMetadata.submit=Zmień
#pdfToPDFA
pdfToPDFA.title=PDF na PDF/A
pdfToPDFA.header=PDF na PDF/A
pdfToPDFA.credit=Ta usługa używa libreoffice do konwersji PDF/A
pdfToPDFA.credit=Ta usługa używa qpdf do konwersji PDF/A
pdfToPDFA.submit=Konwertuj
pdfToPDFA.tip=Tylko jeden plik na raz
pdfToPDFA.outputFormat=Format wyjściowy:

View File

@@ -138,7 +138,7 @@ analytics.settings=Você pode alterar as configurações de coleta de dados no a
# NAVBAR #
#############
navbar.favorite=Favoritos
navbar.recent=Novos e Recentemente Atualizados
navbar.recent=New and recently updated
navbar.darkmode=Modo Escuro
navbar.language=Idiomas
navbar.settings=Configurações
@@ -262,18 +262,18 @@ home.desc=Seu tudo-em-um hospedado localmente para tudo relacionado a PDFs
home.searchBar=Pesquisar funcionalidades...
home.viewPdf.title=View/Edit PDF
home.viewPdf.title=Visualizar PDF
home.viewPdf.desc=Visualizar, anotar, adicionar texto ou imagens ao PDF.
viewPdf.tags=visualizar,ler,anotar,texto,imagem
home.setFavorites=Adicionar Favoritos
home.hideFavorites=Ocultar Favoritos
home.showFavorites=Mostrar Favoritos
home.legacyHomepage=Homepage Antiga
home.newHomePage=Experimente nossa nova Homepage!
home.alphabetical=Alfabética
home.globalPopularity=Popularidade Global
home.sortBy=Ordenar por:
home.setFavorites=Set Favourites
home.hideFavorites=Hide Favourites
home.showFavorites=Show Favourites
home.legacyHomepage=Old homepage
home.newHomePage=Try our new homepage!
home.alphabetical=Alphabetical
home.globalPopularity=Global Popularity
home.sortBy=Sort by:
home.multiTool.title=Multiferramentas de PDF
home.multiTool.desc=Mesclar, girar, reorganizar, dividir, inserir e remover páginas.
@@ -417,7 +417,7 @@ home.pageLayout.title=Layout de Múltiplas Páginas
home.pageLayout.desc=Mesclar várias páginas de um documento PDF em uma única página.
pageLayout.tags=mesclar,composto,vista-única,organizar
home.scalePages.title=Ajustar Dimensões da Página
home.scalePages.title=Ajustar Tamanho/Escala da Página
home.scalePages.desc=Alterar o tamanho/escala da página e/ou seu conteúdo.
scalePages.tags=redimensionar,modificar,dimensão,adaptar
@@ -429,7 +429,7 @@ home.add-page-numbers.title=Adicionar Números de Página
home.add-page-numbers.desc=Adicionar números de página no documento, em um local definido.
add-page-numbers.tags=paginar,rotular,organizar,índice
home.auto-rename.title=Renomeação Automática do PDF
home.auto-rename.title=Renomear Automaticamente o PDF
home.auto-rename.desc=Renomeia automaticamente o PDF com base no cabeçalho detectado.
auto-rename.tags=detecção-automática,baseado-em-cabeçalho,organizar,relabel
@@ -623,7 +623,6 @@ redact.showAttatchments=Mostrar Anexos
redact.showLayers=Mostrar Camadas (duplo clique para restabelecer as camadas para o estado padrão)
redact.colourPicker=Seletor de Cores
redact.findCurrentOutlineItem=Encontrar item atual
redact.applyChanges=Apply Changes
#showJS
showJS.title=Mostrar JavaScript
@@ -739,8 +738,8 @@ addPageNumbers.submit=Adicionar Números de Página
#auto-rename
auto-rename.title=Renomeação Automática do PDF
auto-rename.header=Renomeação Automática do PDF
auto-rename.title=Renomear Automaticamente o PDF
auto-rename.header=Renomear Automaticamente o PDF
auto-rename.submit=Renomeação Automática
@@ -769,6 +768,7 @@ autoSplitPDF.selectText.3=Faça o upload do arquivo único PDF digitalizado e de
autoSplitPDF.selectText.4=As páginas divisórias são detectadas e removidas automaticamente, garantindo um documento final organizado.
autoSplitPDF.formPrompt=Enviar PDF contendo folhas divisórias Stirling-PDF:
autoSplitPDF.duplexMode=Modo Duplex (Digitalização frente e verso).
autoSplitPDF.dividerDownload1=Baixar 'Folha Divisória Automática (mínimo).pdf'
autoSplitPDF.dividerDownload2=Baixar 'Folha Divisória Automática (com instruções).pdf'
autoSplitPDF.submit=Enviar
@@ -786,8 +786,8 @@ pageLayout.submit=Enviar
#scalePages
scalePages.title=Ajustar Dimensões da Página
scalePages.header=Ajustar Dimensões da Página
scalePages.title=Ajustar Tamanho/Escala da Página
scalePages.header=Ajustar Tamanho/Escala da Página
scalePages.pageSize=Tamanho desejado do documento:
scalePages.keepPageSize=Tamanho Original
scalePages.scaleFactor=Fator de zoom (corte) de uma página:
@@ -992,7 +992,6 @@ pdfOrganiser.mode.7=Remover primeiro
pdfOrganiser.mode.8=Remover último
pdfOrganiser.mode.9=Remover o primeiro e o último
pdfOrganiser.mode.10=Mesclagem ímpar-par
pdfOrganiser.mode.11=Duplicate all pages
pdfOrganiser.placeholder=(por exemplo 1,3,2 ou 4-8,2,10-12 ou 2n-1)
@@ -1035,7 +1034,7 @@ decrypt.success=File decrypted successfully.
multiTool-advert.message=Esta função também está disponível em <a href="{0}">Multiferramentas de PDF</a>. Com uma interface mais completa e funções adicionais.
#view pdf
viewPdf.title=View/Edit PDF
viewPdf.title=Visualizar PDF
viewPdf.header=Visualizar PDF
#pageRemover
@@ -1186,7 +1185,7 @@ changeMetadata.submit=Alterar
#pdfToPDFA
pdfToPDFA.title=PDF para PDF/A
pdfToPDFA.header=PDF para PDF/A
pdfToPDFA.credit=Este serviço usa o LibreOffice para conversão para PDF/A.
pdfToPDFA.credit=Este serviço usa Qpdf para conversão para PDF/A.
pdfToPDFA.submit=Converter
pdfToPDFA.tip=Atenção, atualmente não funciona para múltiplas entradas ao mesmo tempo.
pdfToPDFA.outputFormat=Formato de saída:

View File

@@ -262,7 +262,7 @@ home.desc=O seu centro local para todas as suas necessidades de PDF.
home.searchBar=Pesquisar funcionalidades...
home.viewPdf.title=View/Edit PDF
home.viewPdf.title=Ver PDF
home.viewPdf.desc=Ver, anotar, adicionar texto ou imagens
viewPdf.tags=ver,ler,anotar,texto,imagem
@@ -623,7 +623,6 @@ redact.showAttatchments=Mostrar Anexos
redact.showLayers=Mostrar Camadas (duplo clique para repor todas as camadas para o estado predefinido)
redact.colourPicker=Seletor de Cor
redact.findCurrentOutlineItem=Encontrar item atual do esquema
redact.applyChanges=Apply Changes
#showJS
showJS.title=Mostrar Javascript
@@ -769,6 +768,7 @@ autoSplitPDF.selectText.3=Carregue o único ficheiro PDF digitalizado grande e d
autoSplitPDF.selectText.4=As páginas separadoras são automaticamente detetadas e removidas, garantindo um documento final organizado.
autoSplitPDF.formPrompt=Submeter PDF contendo separadores de página Stirling-PDF:
autoSplitPDF.duplexMode=Modo Duplex (Digitalização frente e verso)
autoSplitPDF.dividerDownload1=Transferir 'Separador de Divisão Automática (minimal).pdf'
autoSplitPDF.dividerDownload2=Transferir 'Separador de Divisão Automática (com instruções).pdf'
autoSplitPDF.submit=Submeter
@@ -992,7 +992,6 @@ pdfOrganiser.mode.7=Remover Primeira
pdfOrganiser.mode.8=Remover Última
pdfOrganiser.mode.9=Remover Primeira e Última
pdfOrganiser.mode.10=Junção Par-Ímpar
pdfOrganiser.mode.11=Duplicate all pages
pdfOrganiser.placeholder=(ex. 1,3,2 ou 4-8,2,10-12 ou 2n-1)
@@ -1035,7 +1034,7 @@ decrypt.success=Ficheiro desencriptado com sucesso.
multiTool-advert.message=Esta funcionalidade também está disponível na nossa <a href="{0}">página multi-ferramenta</a>. Experimente para uma interface melhorada página a página e funcionalidades adicionais!
#view pdf
viewPdf.title=View/Edit PDF
viewPdf.title=Ver PDF
viewPdf.header=Ver PDF
#pageRemover
@@ -1186,7 +1185,7 @@ changeMetadata.submit=Alterar
#pdfToPDFA
pdfToPDFA.title=PDF Para PDF/A
pdfToPDFA.header=PDF Para PDF/A
pdfToPDFA.credit=Este serviço usa libreoffice para conversão PDF/A
pdfToPDFA.credit=Este serviço usa qpdf para conversão PDF/A
pdfToPDFA.submit=Converter
pdfToPDFA.tip=Atualmente não funciona para múltiplas entradas de uma só vez
pdfToPDFA.outputFormat=Formato de saída

View File

@@ -262,7 +262,7 @@ home.desc=Un singur punct de oprire găzduit local pentru toate nevoile tale leg
home.searchBar=Caută funcționalități...
home.viewPdf.title=View/Edit PDF
home.viewPdf.title=Vizualizează PDF
home.viewPdf.desc=Vizualizează, adnotează, adaugă text sau imagini
viewPdf.tags=vizualizare,citește,adnotează,text,imagine
@@ -623,7 +623,6 @@ redact.showAttatchments=Show Attachments
redact.showLayers=Show Layers (double-click to reset all layers to the default state)
redact.colourPicker=Colour Picker
redact.findCurrentOutlineItem=Find current outline item
redact.applyChanges=Apply Changes
#showJS
showJS.title=Arată Javascript
@@ -769,6 +768,7 @@ autoSplitPDF.selectText.3=Încarcă fișierul PDF scanat mare și lasă Stirling
autoSplitPDF.selectText.4=Paginile separatoare sunt detectate automat și eliminate, garantând un document final ordonat.
autoSplitPDF.formPrompt=Trimite PDF-ul conținând separatoarele de pagini Stirling-PDF:
autoSplitPDF.duplexMode=Mod Duplex (Scanare față-verso)
autoSplitPDF.dividerDownload1=Descarcă 'Separator Auto Splitter (minimal).pdf'
autoSplitPDF.dividerDownload2=Descarcă 'Separator Auto Splitter (cu instrucțiuni).pdf'
autoSplitPDF.submit=Trimite
@@ -992,7 +992,6 @@ pdfOrganiser.mode.7=Elimină Prima
pdfOrganiser.mode.8=Elimină Ultima
pdfOrganiser.mode.9=Elimină Prima și Ultima
pdfOrganiser.mode.10=Îmbinare Impar-Par
pdfOrganiser.mode.11=Duplicate all pages
pdfOrganiser.placeholder=(ex. 1,3,2 sau 4-8,2,10-12 sau 2n-1)
@@ -1035,7 +1034,7 @@ decrypt.success=File decrypted successfully.
multiTool-advert.message=This feature is also available in our <a href="{0}">multi-tool page</a>. Check it out for enhanced page-by-page UI and additional features!
#view pdf
viewPdf.title=View/Edit PDF
viewPdf.title=Vizualizează PDF
viewPdf.header=Vizualizează PDF
#pageRemover
@@ -1186,7 +1185,7 @@ changeMetadata.submit=Schimbă
#pdfToPDFA
pdfToPDFA.title=PDF către PDF/A
pdfToPDFA.header=PDF către PDF/A
pdfToPDFA.credit=Acest serviciu utilizează libreoffice pentru conversia în PDF/A
pdfToPDFA.credit=Acest serviciu utilizează qpdf pentru conversia în PDF/A
pdfToPDFA.submit=Convertește
pdfToPDFA.tip=În prezent nu funcționează pentru mai multe intrări simultan
pdfToPDFA.outputFormat=Format de ieșire

View File

@@ -262,7 +262,7 @@ home.desc=Ваше локальное решение для всех потре
home.searchBar=Поиск функций...
home.viewPdf.title=View/Edit PDF
home.viewPdf.title=Просмотр PDF
home.viewPdf.desc=Просмотр, аннотирование, добавление текста или изображений
viewPdf.tags=просмотр,чтение,аннотации,текст,изображение
@@ -623,7 +623,6 @@ redact.showAttatchments=Показать вложения
redact.showLayers=Показать слои (двойной щелчок для сброса всех слоев к состоянию по умолчанию)
redact.colourPicker=Выбор цвета
redact.findCurrentOutlineItem=Найти текущий элемент структуры
redact.applyChanges=Apply Changes
#showJS
showJS.title=Показать Javascript
@@ -769,6 +768,7 @@ autoSplitPDF.selectText.3=Загрузите один большой отска
autoSplitPDF.selectText.4=Разделительные страницы автоматически обнаруживаются и удаляются, гарантируя аккуратный конечный документ.
autoSplitPDF.formPrompt=Отправить PDF, содержащий разделители страниц Stirling-PDF:
autoSplitPDF.duplexMode=Двусторонний режим (сканирование с двух сторон)
autoSplitPDF.dividerDownload1=Скачать 'Автоматический разделитель (минимальный).pdf'
autoSplitPDF.dividerDownload2=Скачать 'Автоматический разделитель (с инструкциями).pdf'
autoSplitPDF.submit=Отправить
@@ -992,7 +992,6 @@ pdfOrganiser.mode.7=Удалить первую
pdfOrganiser.mode.8=Удалить последнюю
pdfOrganiser.mode.9=Удалить первую и последнюю
pdfOrganiser.mode.10=Объединение четных-нечетных
pdfOrganiser.mode.11=Duplicate all pages
pdfOrganiser.placeholder=(например, 1,3,2 или 4-8,2,10-12 или 2n-1)
@@ -1035,7 +1034,7 @@ decrypt.success=Файл успешно расшифрован.
multiTool-advert.message=Эта функция также доступна на нашей <a href="{0}">странице мультиинструмента</a>. Попробуйте её для улучшенного постраничного интерфейса и дополнительных возможностей!
#view pdf
viewPdf.title=View/Edit PDF
viewPdf.title=Просмотр PDF
viewPdf.header=Просмотр PDF
#pageRemover
@@ -1186,7 +1185,7 @@ changeMetadata.submit=Изменить
#pdfToPDFA
pdfToPDFA.title=PDF в PDF/A
pdfToPDFA.header=PDF в PDF/A
pdfToPDFA.credit=Этот сервис использует libreoffice для преобразования в PDF/A
pdfToPDFA.credit=Этот сервис использует qpdf для преобразования в PDF/A
pdfToPDFA.submit=Преобразовать
pdfToPDFA.tip=В настоящее время не работает с несколькими входными файлами одновременно
pdfToPDFA.outputFormat=Формат вывода

View File

@@ -262,7 +262,7 @@ home.desc=Vaša lokálne hostovaná jednorazová zástavka pre všetky potreby P
home.searchBar=Vyhľadať funkcie...
home.viewPdf.title=View/Edit PDF
home.viewPdf.title=Zobraziť PDF
home.viewPdf.desc=Zobraziť, anotovať, pridať text alebo obrázky
viewPdf.tags=zobraziť,čítať,anotovať,text,obrázok
@@ -623,7 +623,6 @@ redact.showAttatchments=Show Attachments
redact.showLayers=Show Layers (double-click to reset all layers to the default state)
redact.colourPicker=Colour Picker
redact.findCurrentOutlineItem=Find current outline item
redact.applyChanges=Apply Changes
#showJS
showJS.title=Zobraziť JavaScript
@@ -769,6 +768,7 @@ autoSplitPDF.selectText.3=Nahrajte jeden veľký naskenovaný PDF súbor a necha
autoSplitPDF.selectText.4=Rozdeľovacie stránky sú automaticky detekované a odstránené, čo zaručuje čistý konečný dokument.
autoSplitPDF.formPrompt=Odoslať PDF obsahujúce Stirling-PDF rozdeľovače stránok:
autoSplitPDF.duplexMode=Duplex režim (skanovanie prednej a zadnej strany)
autoSplitPDF.dividerDownload1=Stiahnuť 'Auto Splitter Divider (minimálny).pdf'
autoSplitPDF.dividerDownload2=Stiahnuť 'Auto Splitter Divider (s inštrukciami).pdf'
autoSplitPDF.submit=Odoslať
@@ -992,7 +992,6 @@ pdfOrganiser.mode.7=Odstrániť prvú
pdfOrganiser.mode.8=Odstrániť poslednú
pdfOrganiser.mode.9=Odstrániť prvú aj poslednú
pdfOrganiser.mode.10=Odd-Even Merge
pdfOrganiser.mode.11=Duplicate all pages
pdfOrganiser.placeholder=(napr. 1,3,2 alebo 4-8,2,10-12 alebo 2n-1)
@@ -1035,7 +1034,7 @@ decrypt.success=File decrypted successfully.
multiTool-advert.message=This feature is also available in our <a href="{0}">multi-tool page</a>. Check it out for enhanced page-by-page UI and additional features!
#view pdf
viewPdf.title=View/Edit PDF
viewPdf.title=Zobraziť PDF
viewPdf.header=Zobraziť PDF
#pageRemover
@@ -1186,7 +1185,7 @@ changeMetadata.submit=Zmeniť
#pdfToPDFA
pdfToPDFA.title=PDF na PDF/A
pdfToPDFA.header=PDF na PDF/A
pdfToPDFA.credit=Táto služba používa libreoffice na konverziu PDF/A
pdfToPDFA.credit=Táto služba používa qpdf na konverziu PDF/A
pdfToPDFA.submit=Konvertovať
pdfToPDFA.tip=Momentálne nefunguje pre viacero vstupov naraz
pdfToPDFA.outputFormat=Výstupný formát

View File

@@ -262,7 +262,7 @@ home.desc=Vaša lokalna trgovina na enem mestu za vse vaše potrebe po PDF-jih.
home.searchBar=Išči funkcije...
home.viewPdf.title=View/Edit PDF
home.viewPdf.title=Ogled PDF-ja
home.viewPdf.desc=Oglejte si, komentirajte, dodajte besedilo ali slike
viewPdf.tags=ogled, branje, opomba, besedilo, slika
@@ -623,7 +623,6 @@ redact.showAttatchments=Prikaži priloge
redact.showLayers=Prikaži plasti (dvokliknite za ponastavitev vseh plasti na privzeto stanje)
redact.colourPicker=Izbirnik barv
redact.findCurrentOutlineItem=Poišči trenutno postavko orisa
redact.applyChanges=Uporabi spremembe
#showJS
showJS.title=Prikaži Javascript
@@ -769,6 +768,7 @@ autoSplitPDF.selectText.3=Naložite eno veliko optično prebrano datoteko PDF in
autoSplitPDF.selectText.4=Ločilne strani so samodejno zaznane in odstranjene, kar zagotavlja čist končni dokument.
autoSplitPDF.formPrompt=Pošljite PDF, ki vsebuje razdelilnike strani Stirling-PDF:
autoSplitPDF.duplexMode=Dupleksni način (skeniranje spredaj in zadaj)
autoSplitPDF.dividerDownload1=Prenesi 'Auto Splitter Divider (minimal).pdf'
autoSplitPDF.dividerDownload2=Prenesi 'Auto Splitter Divider (z navodili).pdf'
autoSplitPDF.submit=Pošlji
@@ -992,7 +992,6 @@ pdfOrganiser.mode.7=Najprej odstrani
pdfOrganiser.mode.8=Odstrani zadnjega
pdfOrganiser.mode.9=Odstrani prvega in zadnjega
pdfOrganiser.mode.10=Sodo-liho spajanje
pdfOrganiser.mode.11=Duplicate all pages
pdfOrganiser.placeholder=(npr. 1,3,2 ali 4-8,2,10-12 ali 2n-1)
@@ -1035,7 +1034,7 @@ decrypt.success=Datoteka uspešno dešifrirana.
multiTool-advert.message=Ta funkcija je na voljo tudi na naši <a href="{0}">strani z več orodji</a>. Oglejte si izboljšan uporabniški vmesnik od strani do strani in dodatne funkcije!
#view pdf
viewPdf.title=View/Edit PDF
viewPdf.title=Oglejte si PDF
viewPdf.header=Ogled PDF-ja
#pageRemover
@@ -1186,7 +1185,7 @@ changeMetadata.submit=Spremeni
#pdfToPDFA
pdfToPDFA.title=PDF v PDF/A
pdfToPDFA.header=PDF v PDF/A
pdfToPDFA.credit=Ta storitev uporablja libreoffice za pretvorbo PDF/A
pdfToPDFA.credit=Ta storitev uporablja qpdf za pretvorbo PDF/A
pdfToPDFA.submit=Pretvori
pdfToPDFA.tip=Trenutno ne deluje za več vnosov hkrati
pdfToPDFA.outputFormat=Izhodna oblika

View File

@@ -262,7 +262,7 @@ home.desc=Vaš lokalno hostovan jedinstveni alat za sve vaše potrebe vezane za
home.searchBar=Pretraži funkcije...
home.viewPdf.title=View/Edit PDF
home.viewPdf.title=Pregledaj PDF
home.viewPdf.desc=Pregledaj, anotiraj, dodaj tekst ili slike
viewPdf.tags=pregled,čitanje,anotiranje,tekst,slika
@@ -623,7 +623,6 @@ redact.showAttatchments=Show Attachments
redact.showLayers=Show Layers (double-click to reset all layers to the default state)
redact.colourPicker=Colour Picker
redact.findCurrentOutlineItem=Find current outline item
redact.applyChanges=Apply Changes
#showJS
showJS.title=Prikaži Javascript
@@ -769,6 +768,7 @@ autoSplitPDF.selectText.3=Učitajte jedan veliki skenirani PDF fajl i dozvolite
autoSplitPDF.selectText.4=Listovi razdeljivača se automatski detektuju i uklanjaju, obezbeđujući uredan konačni dokument.
autoSplitPDF.formPrompt=Potvrdite PDF koji sadrži Stirling-PDF listove razdeljivača:
autoSplitPDF.duplexMode=Dupleks režim (skeniranje prednje i zadnje strane)
autoSplitPDF.dividerDownload1=Preuzmi 'Auto Splitter Divider (minimal).pdf'
autoSplitPDF.dividerDownload2=Preuzmi 'Auto Splitter Divider (sa uputstvima).pdf'
autoSplitPDF.submit=Potvrdi
@@ -992,7 +992,6 @@ pdfOrganiser.mode.7=Remove First
pdfOrganiser.mode.8=Remove Last
pdfOrganiser.mode.9=Remove First and Last
pdfOrganiser.mode.10=Odd-Even Merge
pdfOrganiser.mode.11=Duplicate all pages
pdfOrganiser.placeholder=(e.g. 1,3,2 or 4-8,2,10-12 or 2n-1)
@@ -1035,7 +1034,7 @@ decrypt.success=File decrypted successfully.
multiTool-advert.message=This feature is also available in our <a href="{0}">multi-tool page</a>. Check it out for enhanced page-by-page UI and additional features!
#view pdf
viewPdf.title=View/Edit PDF
viewPdf.title=Prikaz
viewPdf.header=Prikaz PDF-a
#pageRemover
@@ -1186,7 +1185,7 @@ changeMetadata.submit=Promeni
#pdfToPDFA
pdfToPDFA.title=PDF u PDF/A
pdfToPDFA.header=PDF u PDF/A
pdfToPDFA.credit=Ova usluga koristi libreoffice za konverziju u PDF/A format
pdfToPDFA.credit=Ova usluga koristi qpdf za konverziju u PDF/A format
pdfToPDFA.submit=Konvertuj
pdfToPDFA.tip=Currently does not work for multiple inputs at once
pdfToPDFA.outputFormat=Output format

View File

@@ -23,7 +23,7 @@ close=Stäng
filesSelected=filer valda
noFavourites=Inga favoriter har lagts till
downloadComplete=Nedladdning klar
bored=Trött på att vänta?
bored=Utråkad att vänta?
alphabet=Alfabet
downloadPdf=Ladda ner PDF
text=Text
@@ -31,7 +31,7 @@ font=Teckensnitt
selectFillter=-- Välj --
pageNum=Sidnummer
sizes.small=Liten
sizes.medium=Mellan
sizes.medium=Mellanvärd
sizes.large=Stor
sizes.x-large=Extra stor
error.pdfPassword=PDF-dokumentet är lösenordsskyddat och antingen har lösenordet inte angetts eller är felaktigt
@@ -46,7 +46,7 @@ red=Röd
green=Grön
blue=Blå
custom=Anpassad...
WorkInProgess=Pågående arbete, kan vara icke fungerande eller buggigt. Rapportera eventuella problem!
WorkInProgess=Pågående arbete, kan inte fungera eller vara buggigt. Rapportera eventuella problem!
poweredBy=Drivs av
yes=Ja
no=Nej
@@ -240,17 +240,17 @@ database.creationDate=Skapelsedatum
database.fileSize=Filstorlek
database.deleteBackupFile=Ta bort säkerhetskopieringsfil
database.importBackupFile=Importera säkerhetskopieringsfil
database.createBackupFile=Skapa säkerhetskopieringsfil
database.createBackupFile=Create Backup File
database.downloadBackupFile=Ladda ner säkerhetskopieringsfil
database.info_1=Vid import av data är det avgörande att säkerställa korrekt struktur. Om du är osäker på vad du gör, sök råd och stöd från en professionell. Ett fel i strukturen kan orsaka funktionsfel i applikationen, upp till och inklusive fullständig oförmåga att köra applikationen.
database.info_2=Filnamnet spelar ingen roll vid uppladdning. Det kommer att döpas om efteråt för att följa formatet backup_user_yyyyMMddHHmm.sql, vilket säkerställer en konsekvent namngivningskonvention.
database.submit=Importera säkerhetskopia
database.importIntoDatabaseSuccessed=Import till databas lyckades
database.backupCreated=Backup av databas lyckades
database.backupCreated=Database backup successful
database.fileNotFound=Filen hittades inte
database.fileNullOrEmpty=Filen får inte vara null eller tom
database.failedImportFile=Misslyckades med att importera fil
database.notSupported=Denna funktion är inte tillgänglig för din databasanslutning.
database.notSupported=This function is not available for your database connection.
session.expired=Din session har löpt ut. Uppdatera sidan och försök igen.
session.refreshPage=Uppdatera sida
@@ -262,18 +262,18 @@ home.desc=Din lokala one-stop-shop för alla dina PDF-behov.
home.searchBar=Sök efter funktioner...
home.viewPdf.title=View/Edit PDF
home.viewPdf.title=Visa PDF
home.viewPdf.desc=Visa, kommentera, lägg till text eller bilder
viewPdf.tags=visa,läs,kommentera,text,bild
home.setFavorites=Välj Favoriter
home.hideFavorites=Dölj Favoriter
home.showFavorites=Visa Favoriter
home.legacyHomepage=Gammal Hem-vy.
home.newHomePage=Testa vår nya Hem-vy!
home.alphabetical=Alfabetisk
home.setFavorites=Set Favourites
home.hideFavorites=Hide Favourites
home.showFavorites=Show Favourites
home.legacyHomepage=Old homepage
home.newHomePage=Try our new homepage!
home.alphabetical=Alphabetical
home.globalPopularity=Global Popularity
home.sortBy=Sortera efter:
home.sortBy=Sort by:
home.multiTool.title=PDF Multi-verktyg
home.multiTool.desc=Sammanfoga, rotera, ordna om och ta bort sidor
@@ -462,8 +462,8 @@ home.MarkdownToPDF.title=Markdown till PDF
home.MarkdownToPDF.desc=Konverterar valfri Markdown-fil till PDF
MarkdownToPDF.tags=markup,webbinnehåll,transformation,konvertera
home.PDFToMarkdown.title=PDF till Markdown
home.PDFToMarkdown.desc=Konvertera PDF till Markdown
home.PDFToMarkdown.title=PDF to Markdown
home.PDFToMarkdown.desc=Converts any PDF to Markdown
PDFToMarkdown.tags=markup,web-content,transformation,convert,md
home.getPdfInfo.title=Hämta ALL information om PDF
@@ -533,9 +533,9 @@ home.splitPdfByChapters.title=Dela upp PDF efter kapitel
home.splitPdfByChapters.desc=Dela upp en PDF till flera filer baserat på dess kapitelstruktur.
splitPdfByChapters.tags=dela,kapitel,bokmärken,organisera
home.validateSignature.title=Validera PDF signature
home.validateSignature.desc=Verifiera digitala signaturer och certifiakt i PDF dokument
validateSignature.tags=signatur,verifiera,validera,pdf,certifikat,digital signatur,Validera Signatur,Validera certifikat
home.validateSignature.title=Validate PDF Signature
home.validateSignature.desc=Verify digital signatures and certificates in PDF documents
validateSignature.tags=signature,verify,validate,pdf,certificate,digital signature,Validate Signature,Validate certificate
#replace-invert-color
replace-color.title=Ersätt-Invertera-Färg
@@ -623,7 +623,6 @@ redact.showAttatchments=Show Attachments
redact.showLayers=Show Layers (double-click to reset all layers to the default state)
redact.colourPicker=Colour Picker
redact.findCurrentOutlineItem=Find current outline item
redact.applyChanges=Apply Changes
#showJS
showJS.title=Visa Javascript
@@ -661,9 +660,9 @@ MarkdownToPDF.credit=Använder WeasyPrint
#pdf-to-markdown
PDFToMarkdown.title=PDF Till Markdown
PDFToMarkdown.header=PDF Till Markdown
PDFToMarkdown.submit=Konvertera
PDFToMarkdown.title=PDF To Markdown
PDFToMarkdown.header=PDF To Markdown
PDFToMarkdown.submit=Convert
#url-to-pdf
@@ -769,6 +768,7 @@ autoSplitPDF.selectText.3=Ladda upp den enda stora skannade PDF-filen och låt S
autoSplitPDF.selectText.4=Avdelarsidor detekteras automatiskt och tas bort, vilket garanterar ett prydligt slutdokument.
autoSplitPDF.formPrompt=Skicka PDF som innehåller Stirling-PDF-sidavdelare:
autoSplitPDF.duplexMode=Duplexläge (Fram- och baksideskanning)
autoSplitPDF.dividerDownload1=Ladda ner 'Auto-delningsavdelare (minimal).pdf'
autoSplitPDF.dividerDownload2=Ladda ner 'Auto-delningsavdelare (med instruktioner).pdf'
autoSplitPDF.submit=Skicka
@@ -874,12 +874,12 @@ sign.save=Spara signatur
sign.personalSigs=Personliga signaturer
sign.sharedSigs=Delade signaturer
sign.noSavedSigs=Inga sparade signaturer hittades
sign.addToAll=Lägg till på alla sidor
sign.delete=Ta bort
sign.first=Första sidan
sign.last=Sista sidan
sign.next=Nästa sida
sign.previous=Föregående sida
sign.addToAll=Add to all pages
sign.delete=Delete
sign.first=First page
sign.last=Last page
sign.next=Next page
sign.previous=Previous page
sign.maintainRatio=Toggle maintain aspect ratio
@@ -992,7 +992,6 @@ pdfOrganiser.mode.7=Ta bort första
pdfOrganiser.mode.8=Ta bort sista
pdfOrganiser.mode.9=Ta bort första och sista
pdfOrganiser.mode.10=Udda-jämn sammanslagning
pdfOrganiser.mode.11=Duplicate all pages
pdfOrganiser.placeholder=(t.ex. 1,3,2 eller 4-8,2,10-12 eller 2n-1)
@@ -1000,24 +999,24 @@ pdfOrganiser.placeholder=(t.ex. 1,3,2 eller 4-8,2,10-12 eller 2n-1)
multiTool.title=PDF-multiverktyg
multiTool.header=PDF Multi-verktyg
multiTool.uploadPrompts=Filnamn
multiTool.selectAll=Välj allt
multiTool.selectAll=Select All
multiTool.deselectAll=Deselect All
multiTool.selectPages=Välj sidor
multiTool.selectedPages=Valda sidor
multiTool.page=Sida
multiTool.deleteSelected=Ta bort valda
multiTool.downloadAll=Exportera
multiTool.downloadSelected=Exportersa valda
multiTool.selectPages=Page Select
multiTool.selectedPages=Selected Pages
multiTool.page=Page
multiTool.deleteSelected=Delete Selected
multiTool.downloadAll=Export
multiTool.downloadSelected=Export Selected
multiTool.insertPageBreak=Insert Page Break
multiTool.addFile=Lägg till fil
multiTool.rotateLeft=Rotera Vänster
multiTool.rotateRight=Rotera Höger
multiTool.split=Dela upp
multiTool.moveLeft=Flytta Vänster
multiTool.moveRight=Flytta Höger
multiTool.delete=Ta bort
multiTool.dragDropMessage=Valda sid(or)
multiTool.addFile=Add File
multiTool.rotateLeft=Rotate Left
multiTool.rotateRight=Rotate Right
multiTool.split=Split
multiTool.moveLeft=Move Left
multiTool.moveRight=Move Right
multiTool.delete=Delete
multiTool.dragDropMessage=Page(s) Selected
multiTool.undo=Undo
multiTool.redo=Redo
@@ -1035,7 +1034,7 @@ decrypt.success=Fil avkrypterad.
multiTool-advert.message=Denna funktion finns också tillgänglig i vår <a href="{0}">multi-tool page</a>. Spana in den för bättre sida-för-sida anpassning och ytterligare funktioner!
#view pdf
viewPdf.title=View/Edit PDF
viewPdf.title=Visa PDF
viewPdf.header=Visa PDF
#pageRemover
@@ -1186,7 +1185,7 @@ changeMetadata.submit=Ändra
#pdfToPDFA
pdfToPDFA.title=PDF till PDF/A
pdfToPDFA.header=PDF till PDF/A
pdfToPDFA.credit=Denna tjänst använder libreoffice för PDF/A-konvertering
pdfToPDFA.credit=Denna tjänst använder qpdf för PDF/A-konvertering
pdfToPDFA.submit=Konvertera
pdfToPDFA.tip=Fungerar för närvarande inte för flera inmatningar samtidigt
pdfToPDFA.outputFormat=Utdataformat
@@ -1336,34 +1335,34 @@ splitByChapters.desc.4=Tillåt duplicieringar: Om kryssrutan är markerad tillå
splitByChapters.submit=Dela upp PDF
#File Chooser
fileChooser.click=Klicka
fileChooser.or=eller
fileChooser.dragAndDrop=Dra & Släpp
fileChooser.dragAndDropPDF=Dra & Släpp PDF fil
fileChooser.dragAndDropImage=Dra & Släpp bildfil
fileChooser.hoveredDragAndDrop=Dra & Släpp fil(er) här
fileChooser.click=Click
fileChooser.or=or
fileChooser.dragAndDrop=Drag & Drop
fileChooser.dragAndDropPDF=Drag & Drop PDF file
fileChooser.dragAndDropImage=Drag & Drop Image file
fileChooser.hoveredDragAndDrop=Drag & Drop file(s) here
#release notes
releases.footer=Utgåvor
releases.footer=Releases
releases.title=Release Notes
releases.header=Release Notes
releases.current.version=Nuvarande Utgåva
releases.current.version=Current Release
releases.note=Release notes are only available in English
#Validate Signature
validateSignature.title=Validera PDF Signaturer
validateSignature.header=Validera Digitala Signaturer
validateSignature.selectPDF=Välj signerad PDF fil
validateSignature.submit=Validera Signaturer
validateSignature.results=Valideringsresultat
validateSignature.title=Validate PDF Signatures
validateSignature.header=Validate Digital Signatures
validateSignature.selectPDF=Select signed PDF file
validateSignature.submit=Validate Signatures
validateSignature.results=Validation Results
validateSignature.status=Status
validateSignature.signer=Signer
validateSignature.date=Datum
validateSignature.reason=Anledning
validateSignature.location=Plats
validateSignature.noSignatures=Inga digitala signaturer hittade i detta dokument
validateSignature.status.valid=Giltig
validateSignature.status.invalid=Ogiltig
validateSignature.date=Date
validateSignature.reason=Reason
validateSignature.location=Location
validateSignature.noSignatures=No digital signatures found in this document
validateSignature.status.valid=Valid
validateSignature.status.invalid=Invalid
validateSignature.chain.invalid=Certificate chain validation failed - cannot verify signer's identity
validateSignature.trust.invalid=Certificate not in trust store - source cannot be verified
validateSignature.cert.expired=Certificate has expired

View File

@@ -262,7 +262,7 @@ home.desc=ศูนย์รวมทุกความต้องการข
home.searchBar=ค้นหาคุณสมบัติ...
home.viewPdf.title=View/Edit PDF
home.viewPdf.title=ดู PDF
home.viewPdf.desc=ดู เพิ่มคำอธิบาย เพิ่มข้อความหรือรูปภาพ
viewPdf.tags=ดู, อ่าน, เพิ่มคำอธิบาย, ข้อความ, รูปภาพ
@@ -623,7 +623,6 @@ redact.showAttatchments=Show Attachments
redact.showLayers=Show Layers (double-click to reset all layers to the default state)
redact.colourPicker=Colour Picker
redact.findCurrentOutlineItem=Find current outline item
redact.applyChanges=Apply Changes
#showJS
showJS.title=แสดง Javascript
@@ -769,6 +768,7 @@ autoSplitPDF.selectText.3=อัปโหลดไฟล์ PDF ที่สแ
autoSplitPDF.selectText.4=หน้ากั้นจะถูกตรวจจับและลบโดยอัตโนมัติ รับประกันเอกสารสุดท้ายที่เรียบร้อย
autoSplitPDF.formPrompt=ส่ง PDF ที่มีแผ่นแยก Stirling-PDF:
autoSplitPDF.duplexMode=โหมด Duplex (การสแกนหน้าและหลัง)
autoSplitPDF.dividerDownload1=ดาวน์โหลด 'Auto Splitter Divider (minimal).pdf'
autoSplitPDF.dividerDownload2=ดาวน์โหลด 'Auto Splitter Divider (with instructions).pdf'
autoSplitPDF.submit=ส่ง
@@ -992,7 +992,6 @@ pdfOrganiser.mode.7=ลบหน้าหมายเลขแรก
pdfOrganiser.mode.8=ลบหน้าหมายเลขสุดท้าย
pdfOrganiser.mode.9=ลบหน้าหมายเลขแรกและสุดท้าย
pdfOrganiser.mode.10=รวมหน้าแบบคี่-คู่
pdfOrganiser.mode.11=Duplicate all pages
pdfOrganiser.placeholder=(เช่น 1,3,2 หรือ 4-8,2,10-12 หรือ 2n-1)
@@ -1035,7 +1034,7 @@ decrypt.success=File decrypted successfully.
multiTool-advert.message=This feature is also available in our <a href="{0}">multi-tool page</a>. Check it out for enhanced page-by-page UI and additional features!
#view pdf
viewPdf.title=View/Edit PDF
viewPdf.title=ดู PDF
viewPdf.header=ดู PDF
#pageRemover
@@ -1186,7 +1185,7 @@ changeMetadata.submit=เปลี่ยน
#pdfToPDFA
pdfToPDFA.title=PDF เป็น PDF/A
pdfToPDFA.header=PDF เป็น PDF/A
pdfToPDFA.credit=บริการนี้ใช้ libreoffice สำหรับการแปลง PDF/A
pdfToPDFA.credit=บริการนี้ใช้ qpdf สำหรับการแปลง PDF/A
pdfToPDFA.submit=แปลง
pdfToPDFA.tip=ปัจจุบันไม่ทำงานสำหรับการป้อนข้อมูลหลายรายการพร้อมกัน
pdfToPDFA.outputFormat=รูปแบบผลลัพธ์

View File

@@ -262,7 +262,7 @@ home.desc=Yerel olarak barındırılan tüm PDF ihtiyaçlarınız için tek dura
home.searchBar=Özellikleri arayın...
home.viewPdf.title=View/Edit PDF
home.viewPdf.title=PDF Görüntüle
home.viewPdf.desc=Görüntüleyin, açıklama ekleyin, metin veya resim ekleyin
viewPdf.tags=görüntüle,oku,açıklama ekle,metin,görüntü
@@ -623,7 +623,6 @@ redact.showAttatchments=Show Attachments
redact.showLayers=Show Layers (double-click to reset all layers to the default state)
redact.colourPicker=Colour Picker
redact.findCurrentOutlineItem=Find current outline item
redact.applyChanges=Apply Changes
#showJS
showJS.title=Javascript'i Göster
@@ -769,6 +768,7 @@ autoSplitPDF.selectText.3=Tek büyük taranmış PDF dosyasını yükleyin ve ge
autoSplitPDF.selectText.4=Ayırıcı sayfalar otomatik olarak tespit edilir ve kaldırılır, düzgün bir final belgesi garantilidir.
autoSplitPDF.formPrompt=Stirling-PDF Sayfa ayırıcıları içeren PDF'i gönderin:
autoSplitPDF.duplexMode=Çift Taraflı Mod (Ön ve arka tarama)
autoSplitPDF.dividerDownload1='Otomatik Ayırıcı Ayırıcı (minimal).pdf' indir
autoSplitPDF.dividerDownload2='Otomatik Ayırıcı Ayırıcı (talimatlarla).pdf' indir
autoSplitPDF.submit=Gönder
@@ -992,7 +992,6 @@ pdfOrganiser.mode.7=İlk Önce Kaldır
pdfOrganiser.mode.8=Sonuncuyu Kaldır
pdfOrganiser.mode.9=İlk ve Sonu Kaldır
pdfOrganiser.mode.10=Tek-Çift Birleştirme
pdfOrganiser.mode.11=Duplicate all pages
pdfOrganiser.placeholder=(örn. 1,3,2 veya 4-8,2,10-12 veya 2n-1)
@@ -1035,7 +1034,7 @@ decrypt.success=File decrypted successfully.
multiTool-advert.message=This feature is also available in our <a href="{0}">multi-tool page</a>. Check it out for enhanced page-by-page UI and additional features!
#view pdf
viewPdf.title=View/Edit PDF
viewPdf.title=PDF Görüntüle
viewPdf.header=PDF Görüntüle
#pageRemover
@@ -1186,7 +1185,7 @@ changeMetadata.submit=Değiştir
#pdfToPDFA
pdfToPDFA.title=PDF'den PDF/A'ya
pdfToPDFA.header=PDF'den PDF/A'ya
pdfToPDFA.credit=Bu hizmet PDF/A dönüşümü için libreoffice kullanır
pdfToPDFA.credit=Bu hizmet PDF/A dönüşümü için qpdf kullanır
pdfToPDFA.submit=Dönüştür
pdfToPDFA.tip=Şu anda aynı anda birden fazla giriş için çalışmıyor
pdfToPDFA.outputFormat=Çıkış formatı

View File

@@ -262,7 +262,7 @@ home.desc=Ваш локальний універсальний магазин д
home.searchBar=Пошук функцій...
home.viewPdf.title=View/Edit PDF
home.viewPdf.title=Перегляд PDF
home.viewPdf.desc=Перегляд, анотація, додавання тексту або зображень
viewPdf.tags=view,read,annotate,text,image
@@ -623,7 +623,6 @@ redact.showAttatchments=Show Attachments
redact.showLayers=Show Layers (double-click to reset all layers to the default state)
redact.colourPicker=Colour Picker
redact.findCurrentOutlineItem=Find current outline item
redact.applyChanges=Apply Changes
#showJS
showJS.title=Показати JavaScript
@@ -769,6 +768,7 @@ autoSplitPDF.selectText.3=Завантажте один великий відс
autoSplitPDF.selectText.4=Роздільні сторінки автоматично виявляються і видаляються, забезпечуючи акуратний кінцевий документ.
autoSplitPDF.formPrompt=Надіслати PDF-файл, що містить роздільні сторінки Stirling-PDF:
autoSplitPDF.duplexMode=Дуплексний режим (сканування спереду і ззаду)
autoSplitPDF.dividerDownload1=Завантажити 'Auto Splitter Divider (minimal).pdf'
autoSplitPDF.dividerDownload2=Завантажити 'Auto Splitter Divider (with instructions).pdf'
autoSplitPDF.submit=Надіслати
@@ -992,7 +992,6 @@ pdfOrganiser.mode.7=Видалити першу
pdfOrganiser.mode.8=Видалити останню
pdfOrganiser.mode.9=Видалити першу та останню
pdfOrganiser.mode.10=Odd-Even Merge
pdfOrganiser.mode.11=Duplicate all pages
pdfOrganiser.placeholder=(наприклад, 1,3,2 або 4-8,2,10-12 або 2n-1)
@@ -1035,7 +1034,7 @@ decrypt.success=File decrypted successfully.
multiTool-advert.message=This feature is also available in our <a href="{0}">multi-tool page</a>. Check it out for enhanced page-by-page UI and additional features!
#view pdf
viewPdf.title=View/Edit PDF
viewPdf.title=Переглянути PDF
viewPdf.header=Переглянути PDF
#pageRemover
@@ -1186,7 +1185,7 @@ changeMetadata.submit=Змінити
#pdfToPDFA
pdfToPDFA.title=PDF в PDF/A
pdfToPDFA.header=PDF в PDF/A
pdfToPDFA.credit=Цей сервіс використовує libreoffice для перетворення у формат PDF/A
pdfToPDFA.credit=Цей сервіс використовує qpdf для перетворення у формат PDF/A
pdfToPDFA.submit=Конвертувати
pdfToPDFA.tip=Наразі не працює для кількох вхідних файлів одночасно
pdfToPDFA.outputFormat=Вихідний формат

View File

@@ -262,7 +262,7 @@ home.desc=Giải pháp toàn diện cho mọi nhu cầu về PDF ngay trên máy
home.searchBar=Tìm kiếm tính năng...
home.viewPdf.title=View/Edit PDF
home.viewPdf.title=Xem PDF
home.viewPdf.desc=Xem, chú thích, thêm văn bản hoặc hình ảnh
viewPdf.tags=xem,đọc,chú thích,văn bản,hình ảnh
@@ -623,7 +623,6 @@ redact.showAttatchments=Show Attachments
redact.showLayers=Show Layers (double-click to reset all layers to the default state)
redact.colourPicker=Colour Picker
redact.findCurrentOutlineItem=Find current outline item
redact.applyChanges=Apply Changes
#showJS
showJS.title=Hiển thị Javascript
@@ -769,6 +768,7 @@ autoSplitPDF.selectText.3=Tải lên tệp PDF quét lớn duy nhất và để
autoSplitPDF.selectText.4=Các trang phân cách được tự động phát hiện và xóa, đảm bảo tài liệu cuối cùng gọn gàng.
autoSplitPDF.formPrompt=Gửi PDF chứa trang phân cách Stirling-PDF:
autoSplitPDF.duplexMode=Chế độ hai mặt (Quét mặt trước và sau)
autoSplitPDF.dividerDownload1=Tải xuống 'Trang phân cách tự động (tối giản).pdf'
autoSplitPDF.dividerDownload2=Tải xuống 'Trang phân cách tự động (có hướng dẫn).pdf'
autoSplitPDF.submit=Gửi
@@ -992,7 +992,6 @@ pdfOrganiser.mode.7=Xóa trang đầu
pdfOrganiser.mode.8=Xóa trang cuối
pdfOrganiser.mode.9=Xóa trang đầu và cuối
pdfOrganiser.mode.10=Trộn lẻ-chẵn
pdfOrganiser.mode.11=Duplicate all pages
pdfOrganiser.placeholder=(ví dụ: 1,3,2 hoặc 4-8,2,10-12 hoặc 2n-1)
@@ -1035,7 +1034,7 @@ decrypt.success=File decrypted successfully.
multiTool-advert.message=This feature is also available in our <a href="{0}">multi-tool page</a>. Check it out for enhanced page-by-page UI and additional features!
#view pdf
viewPdf.title=View/Edit PDF
viewPdf.title=Xem PDF
viewPdf.header=Xem PDF
#pageRemover
@@ -1186,7 +1185,7 @@ changeMetadata.submit=Thay đổi
#pdfToPDFA
pdfToPDFA.title=PDF sang PDF/A
pdfToPDFA.header=PDF sang PDF/A
pdfToPDFA.credit=Dịch vụ này sử dụng libreoffice để chuyển đổi PDF/A
pdfToPDFA.credit=Dịch vụ này sử dụng qpdf để chuyển đổi PDF/A
pdfToPDFA.submit=Chuyển đổi
pdfToPDFA.tip=Hiện tại không hoạt động với nhiều đầu vào cùng lúc
pdfToPDFA.outputFormat=Định dạng đầu ra

View File

@@ -262,7 +262,7 @@ home.desc=ཁྱེད་ཀྱི་ PDF དགོས་མཁོ་ཚང་
home.searchBar=ནུས་པ་འཚོལ་བཤེར།
home.viewPdf.title=View/Edit PDF
home.viewPdf.title=PDF ལྟ་བ།
home.viewPdf.desc=ལྟ་བ། མཆན་འགྲེལ། ཡི་གེ་དང་པར་རིས་སྣོན་པ།
viewPdf.tags=ལྟ་བ།,ཀློག་པ།,མཆན་འགྲེལ།,ཡི་གེ,པར་རིས།
@@ -623,7 +623,6 @@ redact.showAttatchments=ཟུར་སྦྱར་སྟོན།
redact.showLayers=རིམ་པ་སྟོན། (རིམ་པ་ཚང་མ་སྔོན་སྒྲིག་གནས་བབ་ལ་བསྐྱར་སྒྲིག་བྱེད་པར་ཉིས་རྡེབ།)
redact.colourPicker=ཚོས་གཞི་འདེམས་བྱེད<EFBFBD><EFBFBD><EFBFBD>
redact.findCurrentOutlineItem=ད་ལྟའི་སྒྲོམ་གཞིའི་ནང་དོན་འཚོལ་བ།
redact.applyChanges=Apply Changes
#showJS
showJS.title=Javascript ས<>ོན་པ།
@@ -769,6 +768,7 @@ autoSplitPDF.selectText.3=བཤེར་འབེབས་བྱས་པའི
autoSplitPDF.selectText.4=བར་མཚམས་ཤོག་ངོས་རྣམས་རང་འགུལ་གྱིས་ངོས་འཛིན་དང་སུབ་པ་བྱས་ནས་མཐའ་མའི་ཡིག་ཆ་གཙང་མ་ཞིག་ངེས་པར་དུ་ཐོབ་ཐུབ།
autoSplitPDF.formPrompt=Stirling-PDF ཤོག་ངོས་བར་མཚམས་ཡོད་པའི་ PDF ཕུལ་བ།
autoSplitPDF.duplexMode=ཕྱོགས་གཉིས་ཀྱི་རྣམ་པ། (མདུན་རྒྱབ་བཤེར་འབེབས།)
autoSplitPDF.dividerDownload1='རང་འགུལ་ཁ་གྱེས་བར་མཚམས། (ཉུང་ཤོས།).pdf' ཕབ་ལེན།
autoSplitPDF.dividerDownload2='རང་འགུལ་ཁ་གྱེས་བར་མཚམས། (བཀོལ་སྤྱོད་ལམ་སྟོན་དང་བཅས་པ།).pdf' ཕབ་ལེན།
autoSplitPDF.submit=ཕུལ་བ།
@@ -992,7 +992,6 @@ pdfOrganiser.mode.7=Remove First
pdfOrganiser.mode.8=Remove Last
pdfOrganiser.mode.9=དང་པོ་དང་མཐའ་མ་སུབ་པ།
pdfOrganiser.mode.10=ཡ་ཟུང་སྡེབ་སྦྱོར།
pdfOrganiser.mode.11=Duplicate all pages
pdfOrganiser.placeholder=(དཔེར་ན། 1,3,2 ཡང་ན་ 4-8,2,10-12 ཡང་ན་ 2n-1)
@@ -1035,7 +1034,7 @@ decrypt.success=ཡིག་ཆའི་གསང་སྡོམ་གྲོལ
multiTool-advert.message=This feature is also available in our <a href="{0}">multi-tool page</a>. Check it out for enhanced page-by-page UI and additional features!
#view pdf
viewPdf.title=View/Edit PDF
viewPdf.title=PDF ལྟ་བ།
viewPdf.header=PDF ལྟ་བ།
#pageRemover
@@ -1186,7 +1185,7 @@ changeMetadata.submit=བསྒྱུར་བ།
#pdfToPDFA
pdfToPDFA.title=PDF ནས་ PDF/A ལ།
pdfToPDFA.header=PDF ནས་ PDF/A ལ།
pdfToPDFA.credit=ཞབས་ཞུ་འདིས་ PDF/A བསྒྱུར་བའི་ཆེད་དུ་ libreoffice བེད་སྤྱོད་བྱེད་པ།
pdfToPDFA.credit=ཞབས་ཞུ་འདིས་ PDF/A བསྒྱུར་བའི་ཆེད་དུ་ qpdf བེད་སྤྱོད་བྱེད་པ།
pdfToPDFA.submit=བསྒྱུར་བ།
pdfToPDFA.tip=ད་ལྟ་ཡིག་ཆ་མང་པོ་དུས་གཅིག་ལ་བསྒྱུར་མི་ཐུབ།
pdfToPDFA.outputFormat=ཕྱིར་འདོན་རྣམ་གཞག

View File

@@ -76,13 +76,13 @@ donate=捐款
color=颜色
sponsor=赞助
info=信息
pro=专业版
page=页面
pages=页码
pro=Pro
page=Page
pages=Pages
loading=加载中...
addToDoc=添加至文件
addToDoc=Add to Document
reset=重置
apply=应用
apply=Apply
legal.privacy=隐私政策
legal.terms=服务条款
@@ -120,38 +120,38 @@ pipelineOptions.validateButton=验证
########################
enterpriseEdition.button=升级到 Pro 版本
enterpriseEdition.warning=此功能仅适用于 Pro 版本
enterpriseEdition.yamlAdvert=Stirling PDF Pro支持YAML配置文件和其他SSO功能。
enterpriseEdition.ssoAdvert=寻找更多的用户管理功能?查看Stirling PDF Pro
enterpriseEdition.yamlAdvert=Stirling PDF Pro supports YAML configuration files and other SSO features.
enterpriseEdition.ssoAdvert=Looking for more user management features? Check out Stirling PDF Pro
#################
# Analytics #
#################
analytics.title=你想协助改善Stirling PDF
analytics.paragraph1=Stirling PDF有选择性分析功能,可以帮助我们改进产品。我们不跟踪任何个人信息或文件内容。
analytics.paragraph2=请考虑启用分析来帮助Stirling-PDF的发展并让我们更好地了解我们的用户。
analytics.enable=启用分析功能
analytics.disable=禁用分析功能
analytics.settings=您可以在 config/settings.yml 文件中变更分析功能的设定
analytics.title=Do you want make Stirling PDF better?
analytics.paragraph1=Stirling PDF has opt in analytics to help us improve the product. We do not track any personal information or file contents.
analytics.paragraph2=Please consider enabling analytics to help Stirling-PDF grow and to allow us to understand our users better.
analytics.enable=Enable analytics
analytics.disable=Disable analytics
analytics.settings=You can change the settings for analytics in the config/settings.yml file
#############
# NAVBAR #
#############
navbar.favorite=收藏
navbar.recent=新功能和最近更新
navbar.recent=New and recently updated
navbar.darkmode=暗黑模式
navbar.language=语言
navbar.settings=设置
navbar.allTools=工具箱
navbar.multiTool=多功能工具
navbar.search=搜索
navbar.search=Search
navbar.sections.organize=组织
navbar.sections.convertTo=转换成PDF
navbar.sections.convertFrom=从PDF转换
navbar.sections.security=签名和安全
navbar.sections.advance=高级功能
navbar.sections.edit=查看和编辑
navbar.sections.popular=热门
navbar.sections.popular=Popular
#############
# SETTINGS #
@@ -240,17 +240,17 @@ database.creationDate=创建时间
database.fileSize=文件大小
database.deleteBackupFile=删除备份文件
database.importBackupFile=导入备份文件
database.createBackupFile=创建备份文件
database.createBackupFile=Create Backup File
database.downloadBackupFile=下载备份文件
database.info_1=导入数据时,确保结构正确至关重要。如果您不确定自己在做什么,请寻求专业人士的建议和支持。结构错误会导致应用程序故障,甚至完全无法运行应用程序。
database.info_2=上传文件时,文件名并不重要。上传后,文件名将重命名为 backup_user_yyyyMMddHHmm.sql以确保命名规范的一致性。
database.submit=导入备份
database.importIntoDatabaseSuccessed=导入数据库成功
database.backupCreated=数据库备份成功
database.backupCreated=Database backup successful
database.fileNotFound=未找到文件
database.fileNullOrEmpty=文件不能为空
database.failedImportFile=导入文件失败
database.notSupported=此功能不适用于您的数据库连接。
database.notSupported=This function is not available for your database connection.
session.expired=您的会话已过期。请刷新页面并重试。
session.refreshPage=刷新页面
@@ -262,18 +262,18 @@ home.desc=本地部署的一站式服务,满足您的所有 PDF 需求。
home.searchBar=搜索您需要的功能...
home.viewPdf.title=View/Edit PDF
home.viewPdf.title=浏览 PDF
home.viewPdf.desc=浏览、注释、添加文本或图像
viewPdf.tags=浏览、阅读、注释、文本、图像
home.setFavorites=编辑收藏夹
home.hideFavorites=隐藏收藏夹
home.showFavorites=显示收藏夹
home.legacyHomepage=使用旧版主页
home.newHomePage=试用新版主页!
home.alphabetical=按字母顺序
home.globalPopularity=按全球热度
home.sortBy=排序:
home.setFavorites=Set Favourites
home.hideFavorites=Hide Favourites
home.showFavorites=Show Favourites
home.legacyHomepage=Old homepage
home.newHomePage=Try our new homepage!
home.alphabetical=Alphabetical
home.globalPopularity=Global Popularity
home.sortBy=Sort by:
home.multiTool.title=PDF 多功能工具
home.multiTool.desc=合并、旋转、重新排列和删除 PDF 页面
@@ -462,9 +462,9 @@ home.MarkdownToPDF.title=Markdown 转 PDF
home.MarkdownToPDF.desc=将任何 Markdown 文件转换为 PDF
MarkdownToPDF.tags=标记、网页内容、转换、转换
home.PDFToMarkdown.title=PDF Markdown
home.PDFToMarkdown.desc=将任何pdf文件转换为Markdown文件
PDFToMarkdown.tags=标记,网页内容,转换,转档,md
home.PDFToMarkdown.title=PDF to Markdown
home.PDFToMarkdown.desc=Converts any PDF to Markdown
PDFToMarkdown.tags=markup,web-content,transformation,convert,md
home.getPdfInfo.title=获取 PDF 的所有信息
home.getPdfInfo.desc=获取 PDF 的所有可能的信息
@@ -489,9 +489,9 @@ home.autoRedact.title=自动删除
home.autoRedact.desc=根据输入文本自动删除覆盖PDF 中的文本
autoRedact.tags=脱敏、隐藏、涂黑、标记、不可见
home.redact.title=手动修订
home.redact.desc=根据选定的文本、绘制的形状和/或选定的页面编辑PDF
redact.tags=涂改,隐藏,涂黑,黑色,标记,遮蔽,手动
home.redact.title=Manual Redaction
home.redact.desc=Redacts a PDF based on selected text, drawn shapes and/or selected page(s)
redact.tags=Redact,Hide,black out,black,marker,hidden,manual
home.tableExtraxt.title=PDF 转 CSV
home.tableExtraxt.desc=从 PDF 中提取表格并将其转换为 CSV
@@ -542,19 +542,19 @@ replace-color.title=替换-反转-颜色
replace-color.header=替换-反转 PDF 颜色
home.replaceColorPdf.title=替换和反转颜色
home.replaceColorPdf.desc=替换 PDF 中文本和背景的颜色并将PDF全色反转以减小文件大小
replaceColorPdf.tags=更换颜色,页面操作,后端,服务器端
replaceColorPdf.tags=Replace Color,Page operations,Back end,server side
replace-color.selectText.1=替换或反转颜色选项
replace-color.selectText.2=默认(默认高对比度颜色)
replace-color.selectText.3=定制(定制的颜色)
replace-color.selectText.4=全反转(反转所有颜色)
replace-color.selectText.5=高对比度颜色选项
replace-color.selectText.6=黑底白字
replace-color.selectText.7=白底黑字
replace-color.selectText.8=黑底黄字
replace-color.selectText.9=黑底绿字
replace-color.selectText.10=选择文本颜色
replace-color.selectText.11=选择背景颜色
replace-color.submit=取代
replace-color.selectText.2=Default(Default high contrast colors)
replace-color.selectText.3=Custom(Customized colors)
replace-color.selectText.4=Full-Invert(Invert all colors)
replace-color.selectText.5=High contrast color options
replace-color.selectText.6=white text on black background
replace-color.selectText.7=Black text on white background
replace-color.selectText.8=Yellow text on black background
replace-color.selectText.9=Green text on black background
replace-color.selectText.10=Choose text Color
replace-color.selectText.11=Choose background Color
replace-color.submit=Replace
@@ -599,31 +599,30 @@ autoRedact.convertPDFToImageLabel=将PDF转换为PDF-Image用于删除方框
autoRedact.submitButton=提交
#redact
redact.title=手动纠正
redact.header=手动纠正
redact.submit=纠正
redact.textBasedRedaction=基于文本的纠正
redact.pageBasedRedaction=基于页面的纠正
redact.convertPDFToImageLabel=将PDF转换为PDF图像用于删除框后的文本
redact.pageRedactionNumbers.title=页面
redact.pageRedactionNumbers.placeholder=(例如 1,2,8 4,7,12-16 2n-1)
redact.redactionColor.title=编辑颜色
redact.export=导出
redact.upload=上传
redact.boxRedaction=框选区域涂黑
redact.zoom=缩放
redact.zoomIn=放大
redact.zoomOut=缩小
redact.nextPage=下一页
redact.previousPage=上一页
redact.toggleSidebar=切换侧边栏
redact.showThumbnails=显示缩略图
redact.showDocumentOutline=显示文档大纲(双击展开/折叠所有项目)
redact.showAttatchments=显示附件
redact.showLayers=显示图层(双击将所有图层重置为默认状态)
redact.colourPicker=颜色选择器
redact.findCurrentOutlineItem=查找当前大纲项目
redact.applyChanges=应用
redact.title=Manual Redaction
redact.header=Manual Redaction
redact.submit=Redact
redact.textBasedRedaction=Text based Redaction
redact.pageBasedRedaction=Page-based Redaction
redact.convertPDFToImageLabel=Convert PDF to PDF-Image (Used to remove text behind the box)
redact.pageRedactionNumbers.title=Pages
redact.pageRedactionNumbers.placeholder=(e.g. 1,2,8 or 4,7,12-16 or 2n-1)
redact.redactionColor.title=Redaction Color
redact.export=Export
redact.upload=Upload
redact.boxRedaction=Box draw redaction
redact.zoom=Zoom
redact.zoomIn=Zoom in
redact.zoomOut=Zoom out
redact.nextPage=Next Page
redact.previousPage=Previous Page
redact.toggleSidebar=Toggle Sidebar
redact.showThumbnails=Show Thumbnails
redact.showDocumentOutline=Show Document Outline (double-click to expand/collapse all items)
redact.showAttatchments=Show Attachments
redact.showLayers=Show Layers (double-click to reset all layers to the default state)
redact.colourPicker=Colour Picker
redact.findCurrentOutlineItem=Find current outline item
#showJS
showJS.title=显示 JavaScript
@@ -661,9 +660,9 @@ MarkdownToPDF.credit=此服务使用 WeasyPrint 进行文件转换。
#pdf-to-markdown
PDFToMarkdown.title=PDFMarkdown
PDFToMarkdown.header=PDFMarkdown
PDFToMarkdown.submit=转换
PDFToMarkdown.title=PDF To Markdown
PDFToMarkdown.header=PDF To Markdown
PDFToMarkdown.submit=Convert
#url-to-pdf
@@ -769,6 +768,7 @@ autoSplitPDF.selectText.3=上传单个大型扫描的 PDF 文件,让 Stirling
autoSplitPDF.selectText.4=分隔页会自动检测和删除,确保最终文档整洁。
autoSplitPDF.formPrompt=提交包含 Stirling-PDF 分隔页的 PDF
autoSplitPDF.duplexMode=双面模式(正反面扫描)
autoSplitPDF.dividerDownload1=下载“自动拆分分隔页(最小化).pdf”
autoSplitPDF.dividerDownload2=下载“自动拆分分隔页(带指导说明).pdf”
autoSplitPDF.submit=提交
@@ -872,7 +872,7 @@ sign.add=添加
sign.saved=已保存签名
sign.save=保存签名
sign.personalSigs=个人签名
sign.sharedSigs=共享签名
sign.sharedSigs=Shared Signatures
sign.noSavedSigs=未找到已保存的签名
sign.addToAll=添加到所有页面
sign.delete=删除
@@ -880,7 +880,7 @@ sign.first=首页
sign.last=末页
sign.next=下一页
sign.previous=上一页
sign.maintainRatio=切换保持长宽比
sign.maintainRatio=Toggle maintain aspect ratio
#repair
@@ -992,7 +992,6 @@ pdfOrganiser.mode.7=删除第一页
pdfOrganiser.mode.8=删除最后一页
pdfOrganiser.mode.9=删除第一页和最后一页
pdfOrganiser.mode.10=奇偶合并
pdfOrganiser.mode.11=Duplicate all pages
pdfOrganiser.placeholder=例如1,3,2 或 4-8,2,10-12 或 2n-1
@@ -1035,7 +1034,7 @@ decrypt.success=文件解密成功。
multiTool-advert.message=此功能也适用于我们的“<a href="{0}">多功能工具页面</a>”。查看它以获得增强的逐页 UI 以及其他功能!
#view pdf
viewPdf.title=View/Edit PDF
viewPdf.title=浏览 PDF
viewPdf.header=浏览 PDF
#pageRemover
@@ -1186,7 +1185,7 @@ changeMetadata.submit=更改
#pdfToPDFA
pdfToPDFA.title=PDF 转 PDF/A
pdfToPDFA.header=将 PDF 转换为 PDF/A
pdfToPDFA.credit=此服务使用 libreoffice 进行 PDF/A 转换
pdfToPDFA.credit=此服务使用 qpdf 进行 PDF/A 转换
pdfToPDFA.submit=转换
pdfToPDFA.tip=目前不支持上传多个
pdfToPDFA.outputFormat=输出格式
@@ -1329,18 +1328,18 @@ splitByChapters.header=按章节拆分 PDF
splitByChapters.bookmarkLevel=书签级别
splitByChapters.includeMetadata=包含元数据
splitByChapters.allowDuplicates=允许重复
splitByChapters.desc.1=此工具根据章节结构将PDF文件拆分为多个PDF。
splitByChapters.desc.2=书签级别选择用于拆分的书签级别0表示顶级1表示二级等
splitByChapters.desc.3=包含元数据如果选中原始PDF的元数据将包含在每个拆分的PDF中。
splitByChapters.desc.4=允许重复:如果选中,允许同一页面上的多个书签创建单独的PDF
splitByChapters.desc.1=This tool splits a PDF file into multiple PDFs based on its chapter structure.
splitByChapters.desc.2=Bookmark Level: Choose the level of bookmarks to use for splitting (0 for top-level, 1 for second-level, etc.).
splitByChapters.desc.3=Include Metadata: If checked, the original PDF's metadata will be included in each split PDF.
splitByChapters.desc.4=Allow Duplicates: If checked, allows multiple bookmarks on the same page to create separate PDFs.
splitByChapters.submit=拆分 PDF
#File Chooser
fileChooser.click=单击
fileChooser.or=
fileChooser.dragAndDrop=拖放文件
fileChooser.dragAndDropPDF=拖放PDF文件
fileChooser.dragAndDropImage=拖放图片文件
fileChooser.dragAndDropPDF=Drag & Drop PDF file
fileChooser.dragAndDropImage=Drag & Drop Image file
fileChooser.hoveredDragAndDrop=拖放文件到此处
#release notes
@@ -1351,36 +1350,36 @@ releases.current.version=当前版本
releases.note=版本说明仅提供英文版本
#Validate Signature
validateSignature.title=验证pdf签名
validateSignature.header=验证数字签名
validateSignature.selectPDF=选择已签名的pdf文件
validateSignature.submit=验证签名
validateSignature.results=验证结果
validateSignature.status=状态
validateSignature.signer=签署者
validateSignature.date=日期
validateSignature.reason=原因
validateSignature.location=位置
validateSignature.noSignatures=此文件中未找到电子签名
validateSignature.status.valid=有效
validateSignature.status.invalid=无效
validateSignature.chain.invalid=证书链验证失败 - 无法验证签名者的身份
validateSignature.trust.invalid=证书不在信任存储区中 - 无法验证来源
validateSignature.cert.expired=凭证已过期
validateSignature.cert.revoked=凭证已被撤销
validateSignature.signature.info=签名信息
validateSignature.signature=签名
validateSignature.signature.mathValid=签名在数学上有效,但:
validateSignature.selectCustomCert=X.509 自签名证书(可选)
validateSignature.cert.info=凭证信息
validateSignature.cert.issuer=发行者
validateSignature.cert.subject=主题
validateSignature.cert.serialNumber=序列号
validateSignature.cert.validFrom=有效期自
validateSignature.cert.validUntil=有效期至
validateSignature.cert.algorithm=算法
validateSignature.cert.keySize=密钥长度
validateSignature.cert.version=版本
validateSignature.cert.keyUsage=密钥用途
validateSignature.cert.selfSigned=自签名
validateSignature.cert.bits=比特
validateSignature.title=Validate PDF Signatures
validateSignature.header=Validate Digital Signatures
validateSignature.selectPDF=Select signed PDF file
validateSignature.submit=Validate Signatures
validateSignature.results=Validation Results
validateSignature.status=Status
validateSignature.signer=Signer
validateSignature.date=Date
validateSignature.reason=Reason
validateSignature.location=Location
validateSignature.noSignatures=No digital signatures found in this document
validateSignature.status.valid=Valid
validateSignature.status.invalid=Invalid
validateSignature.chain.invalid=Certificate chain validation failed - cannot verify signer's identity
validateSignature.trust.invalid=Certificate not in trust store - source cannot be verified
validateSignature.cert.expired=Certificate has expired
validateSignature.cert.revoked=Certificate has been revoked
validateSignature.signature.info=Signature Information
validateSignature.signature=Signature
validateSignature.signature.mathValid=Signature is mathematically valid BUT:
validateSignature.selectCustomCert=Custom Certificate File X.509 (Optional)
validateSignature.cert.info=Certificate Details
validateSignature.cert.issuer=Issuer
validateSignature.cert.subject=Subject
validateSignature.cert.serialNumber=Serial Number
validateSignature.cert.validFrom=Valid From
validateSignature.cert.validUntil=Valid Until
validateSignature.cert.algorithm=Algorithm
validateSignature.cert.keySize=Key Size
validateSignature.cert.version=Version
validateSignature.cert.keyUsage=Key Usage
validateSignature.cert.selfSigned=Self-Signed
validateSignature.cert.bits=bits

View File

@@ -262,7 +262,7 @@ home.desc=您的本機一站式 PDF 解決方案。
home.searchBar=搜尋功能...
home.viewPdf.title=View/Edit PDF
home.viewPdf.title=檢視 PDF
home.viewPdf.desc=檢視、註釋、新增文字或圖片
viewPdf.tags=檢視,閱讀,註釋,文字,圖片
@@ -623,7 +623,6 @@ redact.showAttatchments=顯示附件
redact.showLayers=顯示圖層(按兩下可將所有圖層重設為預設狀態)
redact.colourPicker=顏色選擇器
redact.findCurrentOutlineItem=尋找目前的大綱項目
redact.applyChanges=Apply Changes
#showJS
showJS.title=顯示 JavaScript
@@ -769,6 +768,7 @@ autoSplitPDF.selectText.3=上傳單一大的掃描 PDF 檔案,讓 Stirling PDF
autoSplitPDF.selectText.4=自動偵測並移除分隔頁面,確保最終文件整潔。
autoSplitPDF.formPrompt=送出包含 Stirling-PDF 頁面分隔器的 PDF
autoSplitPDF.duplexMode=雙面模式(正反面掃描)
autoSplitPDF.dividerDownload1=下載 '自動分割器分隔器(最小化).pdf'
autoSplitPDF.dividerDownload2=下載 '自動分割器分隔器(帶說明).pdf'
autoSplitPDF.submit=送出
@@ -992,7 +992,6 @@ pdfOrganiser.mode.7=刪除第一頁
pdfOrganiser.mode.8=刪除最後一頁
pdfOrganiser.mode.9=刪除第一頁和最後一頁
pdfOrganiser.mode.10=奇偶合併
pdfOrganiser.mode.11=Duplicate all pages
pdfOrganiser.placeholder=(例如 1,3,2 或 4-8,2,10-12 或 2n-1
@@ -1035,7 +1034,7 @@ decrypt.success=檔案已成功解密。
multiTool-advert.message=此功能也可以在我們的<a href="{0}">複合工具頁面</a>中使用。前往查看並體驗更強大的逐頁操作介面及其他進階功能!
#view pdf
viewPdf.title=View/Edit PDF
viewPdf.title=檢視 PDF
viewPdf.header=檢視 PDF
#pageRemover
@@ -1186,7 +1185,7 @@ changeMetadata.submit=變更
#pdfToPDFA
pdfToPDFA.title=PDF 轉 PDF/A
pdfToPDFA.header=PDF 轉 PDF/A
pdfToPDFA.credit=此服務使用 libreoffice 進行 PDF/A 轉換
pdfToPDFA.credit=此服務使用 qpdf 進行 PDF/A 轉換
pdfToPDFA.submit=轉換
pdfToPDFA.tip=目前不支援上傳多個
pdfToPDFA.outputFormat=輸出格式

View File

@@ -3,14 +3,14 @@
{
"moduleName": "ch.qos.logback:logback-classic",
"moduleUrl": "http://www.qos.ch",
"moduleVersion": "1.5.15",
"moduleVersion": "1.5.12",
"moduleLicense": "GNU Lesser General Public License",
"moduleLicenseUrl": "http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html"
},
{
"moduleName": "ch.qos.logback:logback-core",
"moduleUrl": "http://www.qos.ch",
"moduleVersion": "1.5.15",
"moduleVersion": "1.5.12",
"moduleLicense": "GNU Lesser General Public License",
"moduleLicenseUrl": "http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html"
},
@@ -560,7 +560,7 @@
{
"moduleName": "io.micrometer:micrometer-core",
"moduleUrl": "https://github.com/micrometer-metrics/micrometer",
"moduleVersion": "1.14.4",
"moduleVersion": "1.14.3",
"moduleLicense": "The Apache Software License, Version 2.0",
"moduleLicenseUrl": "http://www.apache.org/licenses/LICENSE-2.0.txt"
},
@@ -781,8 +781,8 @@
{
"moduleName": "org.apache.commons:commons-compress",
"moduleUrl": "https://commons.apache.org/proper/commons-compress/",
"moduleVersion": "1.26.0",
"moduleLicense": "Apache-2.0",
"moduleVersion": "1.21",
"moduleLicense": "Apache License, Version 2.0",
"moduleLicenseUrl": "https://www.apache.org/licenses/LICENSE-2.0.txt"
},
{
@@ -921,6 +921,20 @@
"moduleLicense": "The Apache Software License, Version 2.0",
"moduleLicenseUrl": "https://www.apache.org/licenses/LICENSE-2.0.txt"
},
{
"moduleName": "org.bouncycastle:bcmail-jdk15on",
"moduleUrl": "https://www.bouncycastle.org/java.html",
"moduleVersion": "1.69",
"moduleLicense": "Bouncy Castle Licence",
"moduleLicenseUrl": "https://www.bouncycastle.org/licence.html"
},
{
"moduleName": "org.bouncycastle:bcpkix-jdk15on",
"moduleUrl": "https://www.bouncycastle.org/java.html",
"moduleVersion": "1.69",
"moduleLicense": "Bouncy Castle Licence",
"moduleLicenseUrl": "https://www.bouncycastle.org/licence.html"
},
{
"moduleName": "org.bouncycastle:bcpkix-jdk18on",
"moduleUrl": "https://www.bouncycastle.org/download/bouncy-castle-java/",
@@ -935,6 +949,13 @@
"moduleLicense": "Bouncy Castle Licence",
"moduleLicenseUrl": "https://www.bouncycastle.org/licence.html"
},
{
"moduleName": "org.bouncycastle:bcutil-jdk15on",
"moduleUrl": "https://www.bouncycastle.org/java.html",
"moduleVersion": "1.69",
"moduleLicense": "Bouncy Castle Licence",
"moduleLicenseUrl": "https://www.bouncycastle.org/licence.html"
},
{
"moduleName": "org.bouncycastle:bcutil-jdk18on",
"moduleUrl": "https://www.bouncycastle.org/download/bouncy-castle-java/",
@@ -1420,7 +1441,7 @@
{
"moduleName": "org.springframework.boot:spring-boot-devtools",
"moduleUrl": "https://spring.io/projects/spring-boot",
"moduleVersion": "3.4.2",
"moduleVersion": "3.4.1",
"moduleLicense": "Apache License, Version 2.0",
"moduleLicenseUrl": "https://www.apache.org/licenses/LICENSE-2.0"
},
@@ -1434,14 +1455,14 @@
{
"moduleName": "org.springframework.boot:spring-boot-starter-actuator",
"moduleUrl": "https://spring.io/projects/spring-boot",
"moduleVersion": "3.4.2",
"moduleVersion": "3.4.1",
"moduleLicense": "Apache License, Version 2.0",
"moduleLicenseUrl": "https://www.apache.org/licenses/LICENSE-2.0"
},
{
"moduleName": "org.springframework.boot:spring-boot-starter-data-jpa",
"moduleUrl": "https://spring.io/projects/spring-boot",
"moduleVersion": "3.4.2",
"moduleVersion": "3.4.1",
"moduleLicense": "Apache License, Version 2.0",
"moduleLicenseUrl": "https://www.apache.org/licenses/LICENSE-2.0"
},
@@ -1455,7 +1476,7 @@
{
"moduleName": "org.springframework.boot:spring-boot-starter-jetty",
"moduleUrl": "https://spring.io/projects/spring-boot",
"moduleVersion": "3.4.2",
"moduleVersion": "3.4.1",
"moduleLicense": "Apache License, Version 2.0",
"moduleLicenseUrl": "https://www.apache.org/licenses/LICENSE-2.0"
},
@@ -1476,28 +1497,28 @@
{
"moduleName": "org.springframework.boot:spring-boot-starter-oauth2-client",
"moduleUrl": "https://spring.io/projects/spring-boot",
"moduleVersion": "3.4.2",
"moduleVersion": "3.4.1",
"moduleLicense": "Apache License, Version 2.0",
"moduleLicenseUrl": "https://www.apache.org/licenses/LICENSE-2.0"
},
{
"moduleName": "org.springframework.boot:spring-boot-starter-security",
"moduleUrl": "https://spring.io/projects/spring-boot",
"moduleVersion": "3.4.2",
"moduleVersion": "3.4.1",
"moduleLicense": "Apache License, Version 2.0",
"moduleLicenseUrl": "https://www.apache.org/licenses/LICENSE-2.0"
},
{
"moduleName": "org.springframework.boot:spring-boot-starter-thymeleaf",
"moduleUrl": "https://spring.io/projects/spring-boot",
"moduleVersion": "3.4.2",
"moduleVersion": "3.4.1",
"moduleLicense": "Apache License, Version 2.0",
"moduleLicenseUrl": "https://www.apache.org/licenses/LICENSE-2.0"
},
{
"moduleName": "org.springframework.boot:spring-boot-starter-web",
"moduleUrl": "https://spring.io/projects/spring-boot",
"moduleVersion": "3.4.2",
"moduleVersion": "3.4.1",
"moduleLicense": "Apache License, Version 2.0",
"moduleLicenseUrl": "https://www.apache.org/licenses/LICENSE-2.0"
},
@@ -1630,7 +1651,7 @@
{
"moduleName": "org.springframework:spring-jdbc",
"moduleUrl": "https://github.com/spring-projects/spring-framework",
"moduleVersion": "6.2.3",
"moduleVersion": "6.2.2",
"moduleLicense": "Apache License, Version 2.0",
"moduleLicenseUrl": "https://www.apache.org/licenses/LICENSE-2.0"
},
@@ -1658,7 +1679,7 @@
{
"moduleName": "org.springframework:spring-webmvc",
"moduleUrl": "https://github.com/spring-projects/spring-framework",
"moduleVersion": "6.2.3",
"moduleVersion": "6.2.2",
"moduleLicense": "Apache License, Version 2.0",
"moduleLicenseUrl": "https://www.apache.org/licenses/LICENSE-2.0"
},

View File

@@ -83,55 +83,6 @@
vertical-align: middle;
}
.scalable-languages-container {
display: grid;
grid-template-columns: repeat(auto-fill, minmax(180px, 1fr)); /* Auto-fill columns, with a minimum width of 180px */
}
html[dir="ltr"] .lang-dropdown-item-wrapper {
border-right: 2px solid var(--md-nav-color-on-seperator);
}
html[dir="rtl"] .lang-dropdown-item-wrapper {
border-left: 2px solid var(--md-nav-color-on-seperator);
}
/* Responsive adjustments */
@media (min-width: 1200px){
.lang_dropdown-mw{
min-width: 800px
}
}
@media (max-width: 600px) {
.scalable-languages-container {
grid-template-columns: repeat(2, 1fr);
}
.scalable-languages-container .lang-dropdown-item-wrapper:nth-child(2n) {
border: 0px
}
}
@media (min-width: 601px) and (max-width: 900px) {
.scalable-languages-container {
grid-template-columns: repeat(3, 1fr);
}
.scalable-languages-container .lang-dropdown-item-wrapper:nth-child(3n) {
border: 0px
}
}
@media (min-width: 901px) {
.scalable-languages-container {
grid-template-columns: repeat(4, 1fr);
}
.scalable-languages-container .lang-dropdown-item-wrapper:nth-child(4n) {
border: 0px
}
}
.dropdown-item .icon-text {
text-wrap: wrap;
word-break: break-word;
@@ -222,7 +173,6 @@ span.icon-text::after {
.scrollable-y {
overflow-y: scroll;
height: 190px;
overscroll-behavior: contain;
}
.scrollable-y::-webkit-scrollbar {
@@ -341,34 +291,20 @@ span.icon-text::after {
}
/* Dropdown open on hover */
html[dir="ltr"] .dropdown-menu {
.dropdown-menu {
padding-top: 0.5rem;
top: auto;
left: auto;
right: 0;
}
html[dir="rtl"] .dropdown-menu {
padding-top: 0.5rem;
top: auto;
left: 0;
right: auto;
}
html[dir="ltr"] .dropdown-menu[data-bs-popper] {
.dropdown-menu[data-bs-popper] {
top: auto;
left: auto;
right: 0;
margin-top: 0 !important;
}
html[dir="rtl"] .dropdown-menu[data-bs-popper] {
top: auto;
left: 0;
right: auto;
margin-top: 0 !important;
}
.dropdown-menu-wrapper {
padding: 1.5rem 0;
border-radius: 1rem;

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