mirror of
https://github.com/Stirling-Tools/Stirling-PDF.git
synced 2025-08-26 22:29:24 +00:00
Merge branch 'better_error_logging' of git@github.com:Stirling-Tools/Stirling-PDF.git into better_error_logging
This commit is contained in:
commit
66ab2d538f
@ -42,7 +42,7 @@ jobs:
|
|||||||
enable_enterprise: ${{ steps.check-pro-flag.outputs.enable_enterprise }}
|
enable_enterprise: ${{ steps.check-pro-flag.outputs.enable_enterprise }}
|
||||||
steps:
|
steps:
|
||||||
- name: Harden Runner
|
- name: Harden Runner
|
||||||
uses: step-security/harden-runner@002fdce3c6a235733a90a27c80493a3241e56863 # v2.12.1
|
uses: step-security/harden-runner@6c439dc8bdf85cadbbce9ed30d1c7b959517bc49 # v2.12.2
|
||||||
with:
|
with:
|
||||||
egress-policy: audit
|
egress-policy: audit
|
||||||
|
|
||||||
@ -149,7 +149,7 @@ jobs:
|
|||||||
|
|
||||||
steps:
|
steps:
|
||||||
- name: Harden Runner
|
- name: Harden Runner
|
||||||
uses: step-security/harden-runner@002fdce3c6a235733a90a27c80493a3241e56863 # v2.12.1
|
uses: step-security/harden-runner@6c439dc8bdf85cadbbce9ed30d1c7b959517bc49 # v2.12.2
|
||||||
with:
|
with:
|
||||||
egress-policy: audit
|
egress-policy: audit
|
||||||
|
|
||||||
|
2
.github/workflows/PR-Demo-cleanup.yml
vendored
2
.github/workflows/PR-Demo-cleanup.yml
vendored
@ -21,7 +21,7 @@ jobs:
|
|||||||
|
|
||||||
steps:
|
steps:
|
||||||
- name: Harden Runner
|
- name: Harden Runner
|
||||||
uses: step-security/harden-runner@002fdce3c6a235733a90a27c80493a3241e56863 # v2.12.1
|
uses: step-security/harden-runner@6c439dc8bdf85cadbbce9ed30d1c7b959517bc49 # v2.12.2
|
||||||
with:
|
with:
|
||||||
egress-policy: audit
|
egress-policy: audit
|
||||||
|
|
||||||
|
2
.github/workflows/ai_pr_title_review.yml
vendored
2
.github/workflows/ai_pr_title_review.yml
vendored
@ -19,7 +19,7 @@ jobs:
|
|||||||
|
|
||||||
steps:
|
steps:
|
||||||
- name: Harden Runner
|
- name: Harden Runner
|
||||||
uses: step-security/harden-runner@002fdce3c6a235733a90a27c80493a3241e56863 # v2.12.1
|
uses: step-security/harden-runner@6c439dc8bdf85cadbbce9ed30d1c7b959517bc49 # v2.12.2
|
||||||
with:
|
with:
|
||||||
egress-policy: audit
|
egress-policy: audit
|
||||||
|
|
||||||
|
2
.github/workflows/auto-labeler.yml
vendored
2
.github/workflows/auto-labeler.yml
vendored
@ -13,7 +13,7 @@ jobs:
|
|||||||
pull-requests: write
|
pull-requests: write
|
||||||
steps:
|
steps:
|
||||||
- name: Harden Runner
|
- name: Harden Runner
|
||||||
uses: step-security/harden-runner@002fdce3c6a235733a90a27c80493a3241e56863 # v2.12.1
|
uses: step-security/harden-runner@6c439dc8bdf85cadbbce9ed30d1c7b959517bc49 # v2.12.2
|
||||||
with:
|
with:
|
||||||
egress-policy: audit
|
egress-policy: audit
|
||||||
|
|
||||||
|
2
.github/workflows/auto-labelerV2.yml
vendored
2
.github/workflows/auto-labelerV2.yml
vendored
@ -13,7 +13,7 @@ jobs:
|
|||||||
pull-requests: write
|
pull-requests: write
|
||||||
steps:
|
steps:
|
||||||
- name: Harden Runner
|
- name: Harden Runner
|
||||||
uses: step-security/harden-runner@002fdce3c6a235733a90a27c80493a3241e56863 # v2.12.1
|
uses: step-security/harden-runner@6c439dc8bdf85cadbbce9ed30d1c7b959517bc49 # v2.12.2
|
||||||
with:
|
with:
|
||||||
egress-policy: audit
|
egress-policy: audit
|
||||||
|
|
||||||
|
6
.github/workflows/build.yml
vendored
6
.github/workflows/build.yml
vendored
@ -25,7 +25,7 @@ jobs:
|
|||||||
|
|
||||||
steps:
|
steps:
|
||||||
- name: Harden Runner
|
- name: Harden Runner
|
||||||
uses: step-security/harden-runner@002fdce3c6a235733a90a27c80493a3241e56863 # v2.12.1
|
uses: step-security/harden-runner@6c439dc8bdf85cadbbce9ed30d1c7b959517bc49 # v2.12.2
|
||||||
with:
|
with:
|
||||||
egress-policy: audit
|
egress-policy: audit
|
||||||
|
|
||||||
@ -91,7 +91,7 @@ jobs:
|
|||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
steps:
|
steps:
|
||||||
- name: Harden Runner
|
- name: Harden Runner
|
||||||
uses: step-security/harden-runner@002fdce3c6a235733a90a27c80493a3241e56863 # v2.12.1
|
uses: step-security/harden-runner@6c439dc8bdf85cadbbce9ed30d1c7b959517bc49 # v2.12.2
|
||||||
with:
|
with:
|
||||||
egress-policy: audit
|
egress-policy: audit
|
||||||
|
|
||||||
@ -135,7 +135,7 @@ jobs:
|
|||||||
|
|
||||||
steps:
|
steps:
|
||||||
- name: Harden Runner
|
- name: Harden Runner
|
||||||
uses: step-security/harden-runner@002fdce3c6a235733a90a27c80493a3241e56863 # v2.12.1
|
uses: step-security/harden-runner@6c439dc8bdf85cadbbce9ed30d1c7b959517bc49 # v2.12.2
|
||||||
with:
|
with:
|
||||||
egress-policy: audit
|
egress-policy: audit
|
||||||
|
|
||||||
|
2
.github/workflows/check_properties.yml
vendored
2
.github/workflows/check_properties.yml
vendored
@ -18,7 +18,7 @@ jobs:
|
|||||||
pull-requests: write # Allow writing to pull requests
|
pull-requests: write # Allow writing to pull requests
|
||||||
steps:
|
steps:
|
||||||
- name: Harden Runner
|
- name: Harden Runner
|
||||||
uses: step-security/harden-runner@002fdce3c6a235733a90a27c80493a3241e56863 # v2.12.1
|
uses: step-security/harden-runner@6c439dc8bdf85cadbbce9ed30d1c7b959517bc49 # v2.12.2
|
||||||
with:
|
with:
|
||||||
egress-policy: audit
|
egress-policy: audit
|
||||||
|
|
||||||
|
2
.github/workflows/dependency-review.yml
vendored
2
.github/workflows/dependency-review.yml
vendored
@ -17,7 +17,7 @@ jobs:
|
|||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
steps:
|
steps:
|
||||||
- name: Harden Runner
|
- name: Harden Runner
|
||||||
uses: step-security/harden-runner@002fdce3c6a235733a90a27c80493a3241e56863 # v2.12.1
|
uses: step-security/harden-runner@6c439dc8bdf85cadbbce9ed30d1c7b959517bc49 # v2.12.2
|
||||||
with:
|
with:
|
||||||
egress-policy: audit
|
egress-policy: audit
|
||||||
|
|
||||||
|
2
.github/workflows/licenses-update.yml
vendored
2
.github/workflows/licenses-update.yml
vendored
@ -19,7 +19,7 @@ jobs:
|
|||||||
repository-projects: write # Required for enabling automerge
|
repository-projects: write # Required for enabling automerge
|
||||||
steps:
|
steps:
|
||||||
- name: Harden Runner
|
- name: Harden Runner
|
||||||
uses: step-security/harden-runner@002fdce3c6a235733a90a27c80493a3241e56863 # v2.12.1
|
uses: step-security/harden-runner@6c439dc8bdf85cadbbce9ed30d1c7b959517bc49 # v2.12.2
|
||||||
with:
|
with:
|
||||||
egress-policy: audit
|
egress-policy: audit
|
||||||
|
|
||||||
|
2
.github/workflows/manage-label.yml
vendored
2
.github/workflows/manage-label.yml
vendored
@ -15,7 +15,7 @@ jobs:
|
|||||||
issues: write
|
issues: write
|
||||||
steps:
|
steps:
|
||||||
- name: Harden Runner
|
- name: Harden Runner
|
||||||
uses: step-security/harden-runner@002fdce3c6a235733a90a27c80493a3241e56863 # v2.12.1
|
uses: step-security/harden-runner@6c439dc8bdf85cadbbce9ed30d1c7b959517bc49 # v2.12.2
|
||||||
with:
|
with:
|
||||||
egress-policy: audit
|
egress-policy: audit
|
||||||
|
|
||||||
|
14
.github/workflows/multiOSReleases.yml
vendored
14
.github/workflows/multiOSReleases.yml
vendored
@ -21,7 +21,7 @@ jobs:
|
|||||||
versionMac: ${{ steps.versionNumberMac.outputs.versionNumberMac }}
|
versionMac: ${{ steps.versionNumberMac.outputs.versionNumberMac }}
|
||||||
steps:
|
steps:
|
||||||
- name: Harden Runner
|
- name: Harden Runner
|
||||||
uses: step-security/harden-runner@002fdce3c6a235733a90a27c80493a3241e56863 # v2.12.1
|
uses: step-security/harden-runner@6c439dc8bdf85cadbbce9ed30d1c7b959517bc49 # v2.12.2
|
||||||
with:
|
with:
|
||||||
egress-policy: audit
|
egress-policy: audit
|
||||||
|
|
||||||
@ -56,7 +56,7 @@ jobs:
|
|||||||
file_suffix: ""
|
file_suffix: ""
|
||||||
steps:
|
steps:
|
||||||
- name: Harden Runner
|
- name: Harden Runner
|
||||||
uses: step-security/harden-runner@002fdce3c6a235733a90a27c80493a3241e56863 # v2.12.1
|
uses: step-security/harden-runner@6c439dc8bdf85cadbbce9ed30d1c7b959517bc49 # v2.12.2
|
||||||
with:
|
with:
|
||||||
egress-policy: audit
|
egress-policy: audit
|
||||||
|
|
||||||
@ -106,7 +106,7 @@ jobs:
|
|||||||
file_suffix: ""
|
file_suffix: ""
|
||||||
steps:
|
steps:
|
||||||
- name: Harden Runner
|
- name: Harden Runner
|
||||||
uses: step-security/harden-runner@002fdce3c6a235733a90a27c80493a3241e56863 # v2.12.1
|
uses: step-security/harden-runner@6c439dc8bdf85cadbbce9ed30d1c7b959517bc49 # v2.12.2
|
||||||
with:
|
with:
|
||||||
egress-policy: audit
|
egress-policy: audit
|
||||||
|
|
||||||
@ -144,7 +144,7 @@ jobs:
|
|||||||
contents: write
|
contents: write
|
||||||
steps:
|
steps:
|
||||||
- name: Harden Runner
|
- name: Harden Runner
|
||||||
uses: step-security/harden-runner@002fdce3c6a235733a90a27c80493a3241e56863 # v2.12.1
|
uses: step-security/harden-runner@6c439dc8bdf85cadbbce9ed30d1c7b959517bc49 # v2.12.2
|
||||||
with:
|
with:
|
||||||
egress-policy: audit
|
egress-policy: audit
|
||||||
|
|
||||||
@ -234,7 +234,7 @@ jobs:
|
|||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
steps:
|
steps:
|
||||||
- name: Harden Runner
|
- name: Harden Runner
|
||||||
uses: step-security/harden-runner@002fdce3c6a235733a90a27c80493a3241e56863 # v2.12.1
|
uses: step-security/harden-runner@6c439dc8bdf85cadbbce9ed30d1c7b959517bc49 # v2.12.2
|
||||||
with:
|
with:
|
||||||
egress-policy: audit
|
egress-policy: audit
|
||||||
|
|
||||||
@ -248,7 +248,7 @@ jobs:
|
|||||||
|
|
||||||
- name: Install Cosign
|
- name: Install Cosign
|
||||||
if: matrix.os == 'windows-latest'
|
if: matrix.os == 'windows-latest'
|
||||||
uses: sigstore/cosign-installer@fb28c2b6339dcd94da6e4cbcbc5e888961f6f8c3 # v3.9.0
|
uses: sigstore/cosign-installer@398d4b0eeef1380460a10c8013a76f728fb906ac # v3.9.1
|
||||||
|
|
||||||
- name: Generate key pair
|
- name: Generate key pair
|
||||||
if: matrix.os == 'windows-latest'
|
if: matrix.os == 'windows-latest'
|
||||||
@ -297,7 +297,7 @@ jobs:
|
|||||||
contents: write
|
contents: write
|
||||||
steps:
|
steps:
|
||||||
- name: Harden Runner
|
- name: Harden Runner
|
||||||
uses: step-security/harden-runner@002fdce3c6a235733a90a27c80493a3241e56863 # v2.12.1
|
uses: step-security/harden-runner@6c439dc8bdf85cadbbce9ed30d1c7b959517bc49 # v2.12.2
|
||||||
with:
|
with:
|
||||||
egress-policy: audit
|
egress-policy: audit
|
||||||
|
|
||||||
|
2
.github/workflows/pre_commit.yml
vendored
2
.github/workflows/pre_commit.yml
vendored
@ -16,7 +16,7 @@ jobs:
|
|||||||
pull-requests: write
|
pull-requests: write
|
||||||
steps:
|
steps:
|
||||||
- name: Harden Runner
|
- name: Harden Runner
|
||||||
uses: step-security/harden-runner@002fdce3c6a235733a90a27c80493a3241e56863 # v2.12.1
|
uses: step-security/harden-runner@6c439dc8bdf85cadbbce9ed30d1c7b959517bc49 # v2.12.2
|
||||||
with:
|
with:
|
||||||
egress-policy: audit
|
egress-policy: audit
|
||||||
|
|
||||||
|
4
.github/workflows/push-docker.yml
vendored
4
.github/workflows/push-docker.yml
vendored
@ -18,7 +18,7 @@ jobs:
|
|||||||
id-token: write
|
id-token: write
|
||||||
steps:
|
steps:
|
||||||
- name: Harden Runner
|
- name: Harden Runner
|
||||||
uses: step-security/harden-runner@002fdce3c6a235733a90a27c80493a3241e56863 # v2.12.1
|
uses: step-security/harden-runner@6c439dc8bdf85cadbbce9ed30d1c7b959517bc49 # v2.12.2
|
||||||
with:
|
with:
|
||||||
egress-policy: audit
|
egress-policy: audit
|
||||||
|
|
||||||
@ -42,7 +42,7 @@ jobs:
|
|||||||
|
|
||||||
- name: Install cosign
|
- name: Install cosign
|
||||||
if: github.ref == 'refs/heads/master'
|
if: github.ref == 'refs/heads/master'
|
||||||
uses: sigstore/cosign-installer@fb28c2b6339dcd94da6e4cbcbc5e888961f6f8c3 # v3.9.0
|
uses: sigstore/cosign-installer@398d4b0eeef1380460a10c8013a76f728fb906ac # v3.9.1
|
||||||
with:
|
with:
|
||||||
cosign-release: "v2.4.1"
|
cosign-release: "v2.4.1"
|
||||||
|
|
||||||
|
8
.github/workflows/releaseArtifacts.yml
vendored
8
.github/workflows/releaseArtifacts.yml
vendored
@ -23,7 +23,7 @@ jobs:
|
|||||||
version: ${{ steps.versionNumber.outputs.versionNumber }}
|
version: ${{ steps.versionNumber.outputs.versionNumber }}
|
||||||
steps:
|
steps:
|
||||||
- name: Harden Runner
|
- name: Harden Runner
|
||||||
uses: step-security/harden-runner@002fdce3c6a235733a90a27c80493a3241e56863 # v2.12.1
|
uses: step-security/harden-runner@6c439dc8bdf85cadbbce9ed30d1c7b959517bc49 # v2.12.2
|
||||||
with:
|
with:
|
||||||
egress-policy: audit
|
egress-policy: audit
|
||||||
|
|
||||||
@ -83,7 +83,7 @@ jobs:
|
|||||||
file_suffix: ""
|
file_suffix: ""
|
||||||
steps:
|
steps:
|
||||||
- name: Harden Runner
|
- name: Harden Runner
|
||||||
uses: step-security/harden-runner@002fdce3c6a235733a90a27c80493a3241e56863 # v2.12.1
|
uses: step-security/harden-runner@6c439dc8bdf85cadbbce9ed30d1c7b959517bc49 # v2.12.2
|
||||||
with:
|
with:
|
||||||
egress-policy: audit
|
egress-policy: audit
|
||||||
|
|
||||||
@ -95,7 +95,7 @@ jobs:
|
|||||||
run: ls -R
|
run: ls -R
|
||||||
|
|
||||||
- name: Install Cosign
|
- name: Install Cosign
|
||||||
uses: sigstore/cosign-installer@fb28c2b6339dcd94da6e4cbcbc5e888961f6f8c3 # v3.9.0
|
uses: sigstore/cosign-installer@398d4b0eeef1380460a10c8013a76f728fb906ac # v3.9.1
|
||||||
|
|
||||||
- name: Generate key pair
|
- name: Generate key pair
|
||||||
run: cosign generate-key-pair
|
run: cosign generate-key-pair
|
||||||
@ -161,7 +161,7 @@ jobs:
|
|||||||
file_suffix: ""
|
file_suffix: ""
|
||||||
steps:
|
steps:
|
||||||
- name: Harden Runner
|
- name: Harden Runner
|
||||||
uses: step-security/harden-runner@002fdce3c6a235733a90a27c80493a3241e56863 # v2.12.1
|
uses: step-security/harden-runner@6c439dc8bdf85cadbbce9ed30d1c7b959517bc49 # v2.12.2
|
||||||
with:
|
with:
|
||||||
egress-policy: audit
|
egress-policy: audit
|
||||||
|
|
||||||
|
4
.github/workflows/scorecards.yml
vendored
4
.github/workflows/scorecards.yml
vendored
@ -34,7 +34,7 @@ jobs:
|
|||||||
|
|
||||||
steps:
|
steps:
|
||||||
- name: Harden Runner
|
- name: Harden Runner
|
||||||
uses: step-security/harden-runner@002fdce3c6a235733a90a27c80493a3241e56863 # v2.12.1
|
uses: step-security/harden-runner@6c439dc8bdf85cadbbce9ed30d1c7b959517bc49 # v2.12.2
|
||||||
with:
|
with:
|
||||||
egress-policy: audit
|
egress-policy: audit
|
||||||
|
|
||||||
@ -74,6 +74,6 @@ jobs:
|
|||||||
|
|
||||||
# Upload the results to GitHub's code scanning dashboard.
|
# Upload the results to GitHub's code scanning dashboard.
|
||||||
- name: "Upload to code-scanning"
|
- name: "Upload to code-scanning"
|
||||||
uses: github/codeql-action/upload-sarif@ce28f5bb42b7a9f2c824e633a3f6ee835bab6858 # v3.29.0
|
uses: github/codeql-action/upload-sarif@181d5eefc20863364f96762470ba6f862bdef56b # v3.29.2
|
||||||
with:
|
with:
|
||||||
sarif_file: results.sarif
|
sarif_file: results.sarif
|
||||||
|
2
.github/workflows/sonarqube.yml
vendored
2
.github/workflows/sonarqube.yml
vendored
@ -18,7 +18,7 @@ jobs:
|
|||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
steps:
|
steps:
|
||||||
- name: Harden Runner
|
- name: Harden Runner
|
||||||
uses: step-security/harden-runner@002fdce3c6a235733a90a27c80493a3241e56863 # v2.12.1
|
uses: step-security/harden-runner@6c439dc8bdf85cadbbce9ed30d1c7b959517bc49 # v2.12.2
|
||||||
with:
|
with:
|
||||||
egress-policy: audit
|
egress-policy: audit
|
||||||
|
|
||||||
|
2
.github/workflows/stale.yml
vendored
2
.github/workflows/stale.yml
vendored
@ -16,7 +16,7 @@ jobs:
|
|||||||
pull-requests: write
|
pull-requests: write
|
||||||
steps:
|
steps:
|
||||||
- name: Harden Runner
|
- name: Harden Runner
|
||||||
uses: step-security/harden-runner@002fdce3c6a235733a90a27c80493a3241e56863 # v2.12.1
|
uses: step-security/harden-runner@6c439dc8bdf85cadbbce9ed30d1c7b959517bc49 # v2.12.2
|
||||||
with:
|
with:
|
||||||
egress-policy: audit
|
egress-policy: audit
|
||||||
|
|
||||||
|
2
.github/workflows/swagger.yml
vendored
2
.github/workflows/swagger.yml
vendored
@ -14,7 +14,7 @@ jobs:
|
|||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
steps:
|
steps:
|
||||||
- name: Harden Runner
|
- name: Harden Runner
|
||||||
uses: step-security/harden-runner@002fdce3c6a235733a90a27c80493a3241e56863 # v2.12.1
|
uses: step-security/harden-runner@6c439dc8bdf85cadbbce9ed30d1c7b959517bc49 # v2.12.2
|
||||||
with:
|
with:
|
||||||
egress-policy: audit
|
egress-policy: audit
|
||||||
|
|
||||||
|
6
.github/workflows/sync_files.yml
vendored
6
.github/workflows/sync_files.yml
vendored
@ -20,7 +20,7 @@ jobs:
|
|||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
steps:
|
steps:
|
||||||
- name: Harden Runner
|
- name: Harden Runner
|
||||||
uses: step-security/harden-runner@002fdce3c6a235733a90a27c80493a3241e56863 # v2.12.1
|
uses: step-security/harden-runner@6c439dc8bdf85cadbbce9ed30d1c7b959517bc49 # v2.12.2
|
||||||
with:
|
with:
|
||||||
egress-policy: audit
|
egress-policy: audit
|
||||||
|
|
||||||
@ -57,8 +57,8 @@ jobs:
|
|||||||
|
|
||||||
- name: Run git add
|
- name: Run git add
|
||||||
run: |
|
run: |
|
||||||
git add README.md
|
git add README.md scripts/ignore_translation.toml
|
||||||
git diff --staged --quiet || git commit -m ":memo: Sync README.md" || echo "No changes detected"
|
git diff --staged --quiet || git commit -m ":memo: Sync README.md & scripts/ignore_translation.toml" || echo "No changes detected"
|
||||||
|
|
||||||
- name: Create Pull Request
|
- name: Create Pull Request
|
||||||
if: always()
|
if: always()
|
||||||
|
6
.github/workflows/testdriver.yml
vendored
6
.github/workflows/testdriver.yml
vendored
@ -12,7 +12,7 @@ jobs:
|
|||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
steps:
|
steps:
|
||||||
- name: Harden Runner
|
- name: Harden Runner
|
||||||
uses: step-security/harden-runner@002fdce3c6a235733a90a27c80493a3241e56863 # v2.12.1
|
uses: step-security/harden-runner@6c439dc8bdf85cadbbce9ed30d1c7b959517bc49 # v2.12.2
|
||||||
with:
|
with:
|
||||||
egress-policy: audit
|
egress-policy: audit
|
||||||
|
|
||||||
@ -105,7 +105,7 @@ jobs:
|
|||||||
|
|
||||||
steps:
|
steps:
|
||||||
- name: Harden Runner
|
- name: Harden Runner
|
||||||
uses: step-security/harden-runner@002fdce3c6a235733a90a27c80493a3241e56863 # v2.12.1
|
uses: step-security/harden-runner@6c439dc8bdf85cadbbce9ed30d1c7b959517bc49 # v2.12.2
|
||||||
with:
|
with:
|
||||||
egress-policy: audit
|
egress-policy: audit
|
||||||
|
|
||||||
@ -134,7 +134,7 @@ jobs:
|
|||||||
|
|
||||||
steps:
|
steps:
|
||||||
- name: Harden Runner
|
- name: Harden Runner
|
||||||
uses: step-security/harden-runner@002fdce3c6a235733a90a27c80493a3241e56863 # v2.12.1
|
uses: step-security/harden-runner@6c439dc8bdf85cadbbce9ed30d1c7b959517bc49 # v2.12.2
|
||||||
with:
|
with:
|
||||||
egress-policy: audit
|
egress-policy: audit
|
||||||
|
|
||||||
|
32
README.md
32
README.md
@ -116,45 +116,45 @@ Stirling-PDF currently supports 40 languages!
|
|||||||
|
|
||||||
| Language | Progress |
|
| Language | Progress |
|
||||||
| -------------------------------------------- | -------------------------------------- |
|
| -------------------------------------------- | -------------------------------------- |
|
||||||
| Arabic (العربية) (ar_AR) |  |
|
| Arabic (العربية) (ar_AR) |  |
|
||||||
| Azerbaijani (Azərbaycan Dili) (az_AZ) |  |
|
| Azerbaijani (Azərbaycan Dili) (az_AZ) |  |
|
||||||
| Basque (Euskara) (eu_ES) |  |
|
| Basque (Euskara) (eu_ES) |  |
|
||||||
| Bulgarian (Български) (bg_BG) |  |
|
| Bulgarian (Български) (bg_BG) |  |
|
||||||
| Catalan (Català) (ca_CA) |  |
|
| Catalan (Català) (ca_CA) |  |
|
||||||
| Croatian (Hrvatski) (hr_HR) |  |
|
| Croatian (Hrvatski) (hr_HR) |  |
|
||||||
| Czech (Česky) (cs_CZ) |  |
|
| Czech (Česky) (cs_CZ) |  |
|
||||||
| Danish (Dansk) (da_DK) |  |
|
| Danish (Dansk) (da_DK) |  |
|
||||||
| Dutch (Nederlands) (nl_NL) |  |
|
| Dutch (Nederlands) (nl_NL) |  |
|
||||||
| English (English) (en_GB) |  |
|
| English (English) (en_GB) |  |
|
||||||
| English (US) (en_US) |  |
|
| English (US) (en_US) |  |
|
||||||
| French (Français) (fr_FR) |  |
|
| French (Français) (fr_FR) |  |
|
||||||
| German (Deutsch) (de_DE) |  |
|
| German (Deutsch) (de_DE) |  |
|
||||||
| Greek (Ελληνικά) (el_GR) |  |
|
| Greek (Ελληνικά) (el_GR) |  |
|
||||||
| Hindi (हिंदी) (hi_IN) |  |
|
| Hindi (हिंदी) (hi_IN) |  |
|
||||||
| Hungarian (Magyar) (hu_HU) |  |
|
| Hungarian (Magyar) (hu_HU) |  |
|
||||||
| Indonesian (Bahasa Indonesia) (id_ID) |  |
|
| Indonesian (Bahasa Indonesia) (id_ID) |  |
|
||||||
| Irish (Gaeilge) (ga_IE) |  |
|
| Irish (Gaeilge) (ga_IE) |  |
|
||||||
| Italian (Italiano) (it_IT) |  |
|
| Italian (Italiano) (it_IT) |  |
|
||||||
| Japanese (日本語) (ja_JP) |  |
|
| Japanese (日本語) (ja_JP) |  |
|
||||||
| Korean (한국어) (ko_KR) |  |
|
| Korean (한국어) (ko_KR) |  |
|
||||||
| Norwegian (Norsk) (no_NB) |  |
|
| Norwegian (Norsk) (no_NB) |  |
|
||||||
| Persian (فارسی) (fa_IR) |  |
|
| Persian (فارسی) (fa_IR) |  |
|
||||||
| Polish (Polski) (pl_PL) |  |
|
| Polish (Polski) (pl_PL) |  |
|
||||||
| Portuguese (Português) (pt_PT) |  |
|
| Portuguese (Português) (pt_PT) |  |
|
||||||
| Portuguese Brazilian (Português) (pt_BR) |  |
|
| Portuguese Brazilian (Português) (pt_BR) |  |
|
||||||
| Romanian (Română) (ro_RO) |  |
|
| Romanian (Română) (ro_RO) |  |
|
||||||
| Russian (Русский) (ru_RU) |  |
|
| Russian (Русский) (ru_RU) |  |
|
||||||
| Serbian Latin alphabet (Srpski) (sr_LATN_RS) |  |
|
| Serbian Latin alphabet (Srpski) (sr_LATN_RS) |  |
|
||||||
| Simplified Chinese (简体中文) (zh_CN) |  |
|
| Simplified Chinese (简体中文) (zh_CN) |  |
|
||||||
| Slovakian (Slovensky) (sk_SK) |  |
|
| Slovakian (Slovensky) (sk_SK) |  |
|
||||||
| Slovenian (Slovenščina) (sl_SI) |  |
|
| Slovenian (Slovenščina) (sl_SI) |  |
|
||||||
| Spanish (Español) (es_ES) |  |
|
| Spanish (Español) (es_ES) |  |
|
||||||
| Swedish (Svenska) (sv_SE) |  |
|
| Swedish (Svenska) (sv_SE) |  |
|
||||||
| Thai (ไทย) (th_TH) |  |
|
| Thai (ไทย) (th_TH) |  |
|
||||||
| Tibetan (བོད་ཡིག་) (bo_CN) |  |
|
| Tibetan (བོད་ཡིག་) (bo_CN) |  |
|
||||||
| Traditional Chinese (繁體中文) (zh_TW) |  |
|
| Traditional Chinese (繁體中文) (zh_TW) |  |
|
||||||
| Turkish (Türkçe) (tr_TR) |  |
|
| Turkish (Türkçe) (tr_TR) |  |
|
||||||
| Ukrainian (Українська) (uk_UA) |  |
|
| Ukrainian (Українська) (uk_UA) |  |
|
||||||
| Vietnamese (Tiếng Việt) (vi_VN) |  |
|
| Vietnamese (Tiếng Việt) (vi_VN) |  |
|
||||||
| Malayalam (മലയാളം) (ml_IN) |  |
|
| Malayalam (മലയാളം) (ml_IN) |  |
|
||||||
|
|
||||||
|
16
build.gradle
16
build.gradle
@ -9,7 +9,7 @@ plugins {
|
|||||||
id "com.diffplug.spotless" version "7.0.4"
|
id "com.diffplug.spotless" version "7.0.4"
|
||||||
id "com.github.jk1.dependency-license-report" version "2.9"
|
id "com.github.jk1.dependency-license-report" version "2.9"
|
||||||
//id "nebula.lint" version "19.0.3"
|
//id "nebula.lint" version "19.0.3"
|
||||||
id "org.panteleyev.jpackageplugin" version "1.6.1"
|
id "org.panteleyev.jpackageplugin" version "1.7.3"
|
||||||
id "org.sonarqube" version "6.2.0.5505"
|
id "org.sonarqube" version "6.2.0.5505"
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -26,7 +26,7 @@ ext {
|
|||||||
bouncycastleVersion = "1.81"
|
bouncycastleVersion = "1.81"
|
||||||
springSecuritySamlVersion = "6.5.1"
|
springSecuritySamlVersion = "6.5.1"
|
||||||
openSamlVersion = "4.3.2"
|
openSamlVersion = "4.3.2"
|
||||||
commonmarkVersion = "0.24.0"
|
commonmarkVersion = "0.25.0"
|
||||||
googleJavaFormatVersion = "1.27.0"
|
googleJavaFormatVersion = "1.27.0"
|
||||||
tempJrePath = null
|
tempJrePath = null
|
||||||
}
|
}
|
||||||
@ -232,14 +232,14 @@ static def getMacVersion(String version) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
jpackage {
|
jpackage {
|
||||||
input = "build/libs"
|
input = layout.projectDirectory.dir("build/libs")
|
||||||
destination = "${projectDir}/build/jpackage"
|
destination = layout.projectDirectory.dir("build/jpackage")
|
||||||
mainJar = "Stirling-PDF-${project.version}.jar"
|
mainJar = "Stirling-PDF-${project.version}.jar"
|
||||||
appName = "Stirling PDF"
|
appName = "Stirling PDF"
|
||||||
appVersion = project.version
|
appVersion = project.version
|
||||||
vendor = "Stirling PDF Inc"
|
vendor = "Stirling PDF Inc"
|
||||||
appDescription = "Stirling PDF - Your Local PDF Editor"
|
appDescription = "Stirling PDF - Your Local PDF Editor"
|
||||||
icon = "stirling-pdf/src/main/resources/static/favicon.ico"
|
icon = layout.projectDirectory.file("stirling-pdf/src/main/resources/static/favicon.ico")
|
||||||
verbose = true
|
verbose = true
|
||||||
// mainClass = "org.springframework.boot.loader.launch.JarLauncher"
|
// mainClass = "org.springframework.boot.loader.launch.JarLauncher"
|
||||||
|
|
||||||
@ -281,7 +281,7 @@ jpackage {
|
|||||||
// MacOS-specific configuration
|
// MacOS-specific configuration
|
||||||
mac {
|
mac {
|
||||||
appVersion = getMacVersion(project.version.toString())
|
appVersion = getMacVersion(project.version.toString())
|
||||||
icon = "stirling-pdf/src/main/resources/static/favicon.icns"
|
icon = layout.projectDirectory.file("stirling-pdf/src/main/resources/static/favicon.icns")
|
||||||
type = "dmg"
|
type = "dmg"
|
||||||
macPackageIdentifier = "Stirling PDF"
|
macPackageIdentifier = "Stirling PDF"
|
||||||
macPackageName = "Stirling PDF"
|
macPackageName = "Stirling PDF"
|
||||||
@ -303,7 +303,7 @@ jpackage {
|
|||||||
// Linux-specific configuration
|
// Linux-specific configuration
|
||||||
linux {
|
linux {
|
||||||
appVersion = project.version
|
appVersion = project.version
|
||||||
icon = "stirling-pdf/src/main/resources/static/favicon.png"
|
icon = layout.projectDirectory.file("stirling-pdf/src/main/resources/static/favicon.png")
|
||||||
type = "deb" // Can also use "rpm" for Red Hat-based systems
|
type = "deb" // Can also use "rpm" for Red Hat-based systems
|
||||||
|
|
||||||
// Debian package configuration
|
// Debian package configuration
|
||||||
@ -340,7 +340,7 @@ jpackage {
|
|||||||
|
|
||||||
// Add copyright and license information
|
// Add copyright and license information
|
||||||
copyright = "Copyright © 2025 Stirling PDF Inc."
|
copyright = "Copyright © 2025 Stirling PDF Inc."
|
||||||
licenseFile = "LICENSE"
|
licenseFile = layout.projectDirectory.file("LICENSE")
|
||||||
}
|
}
|
||||||
|
|
||||||
//tasks.wrapper {
|
//tasks.wrapper {
|
||||||
|
@ -126,7 +126,7 @@ class AutoJobPostMappingIntegrationTest {
|
|||||||
|
|
||||||
verify(jobExecutorService).runJobGeneric(
|
verify(jobExecutorService).runJobGeneric(
|
||||||
asyncCaptor.capture(),
|
asyncCaptor.capture(),
|
||||||
workCaptor.capture(),
|
workCaptor.capture(),
|
||||||
timeoutCaptor.capture(),
|
timeoutCaptor.capture(),
|
||||||
queueableCaptor.capture(),
|
queueableCaptor.capture(),
|
||||||
resourceWeightCaptor.capture());
|
resourceWeightCaptor.capture());
|
||||||
@ -197,7 +197,7 @@ class AutoJobPostMappingIntegrationTest {
|
|||||||
autoJobAspect.wrapWithJobExecution(joinPoint, autoJobPostMapping);
|
autoJobAspect.wrapWithJobExecution(joinPoint, autoJobPostMapping);
|
||||||
|
|
||||||
// Then
|
// Then
|
||||||
assertEquals("stored-file-id", pdfFile.getFileId(),
|
assertEquals("stored-file-id", pdfFile.getFileId(),
|
||||||
"FileId should be set to the stored file id");
|
"FileId should be set to the stored file id");
|
||||||
assertNotNull(pdfFile.getFileInput(), "FileInput should be replaced with persistent file");
|
assertNotNull(pdfFile.getFileInput(), "FileInput should be replaced with persistent file");
|
||||||
|
|
||||||
|
@ -187,4 +187,4 @@ class FileStorageTest {
|
|||||||
// Assert
|
// Assert
|
||||||
assertFalse(result);
|
assertFalse(result);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -64,8 +64,8 @@ class JobExecutorServiceTest {
|
|||||||
void setUp() {
|
void setUp() {
|
||||||
// Initialize the service manually with all its dependencies
|
// Initialize the service manually with all its dependencies
|
||||||
jobExecutorService = new JobExecutorService(
|
jobExecutorService = new JobExecutorService(
|
||||||
taskManager,
|
taskManager,
|
||||||
fileStorage,
|
fileStorage,
|
||||||
request,
|
request,
|
||||||
resourceMonitor,
|
resourceMonitor,
|
||||||
jobQueue,
|
jobQueue,
|
||||||
@ -199,4 +199,4 @@ class JobExecutorServiceTest {
|
|||||||
assertTrue(e.getCause() instanceof TimeoutException);
|
assertTrue(e.getCause() instanceof TimeoutException);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -36,7 +36,7 @@ class JobQueueTest {
|
|||||||
// Mark stubbing as lenient to avoid UnnecessaryStubbingException
|
// Mark stubbing as lenient to avoid UnnecessaryStubbingException
|
||||||
lenient().when(resourceMonitor.calculateDynamicQueueCapacity(anyInt(), anyInt())).thenReturn(10);
|
lenient().when(resourceMonitor.calculateDynamicQueueCapacity(anyInt(), anyInt())).thenReturn(10);
|
||||||
lenient().when(resourceMonitor.getCurrentStatus()).thenReturn(statusRef);
|
lenient().when(resourceMonitor.getCurrentStatus()).thenReturn(statusRef);
|
||||||
|
|
||||||
// Initialize JobQueue with mocked ResourceMonitor
|
// Initialize JobQueue with mocked ResourceMonitor
|
||||||
jobQueue = new JobQueue(resourceMonitor);
|
jobQueue = new JobQueue(resourceMonitor);
|
||||||
}
|
}
|
||||||
@ -99,4 +99,4 @@ class JobQueueTest {
|
|||||||
assertTrue(jobQueue.isJobQueued(jobId));
|
assertTrue(jobQueue.isJobQueued(jobId));
|
||||||
assertFalse(jobQueue.isJobQueued("nonexistent"));
|
assertFalse(jobQueue.isJobQueued("nonexistent"));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -117,7 +117,7 @@ class ResourceMonitorTest {
|
|||||||
|
|
||||||
// Then
|
// Then
|
||||||
assertEquals(shouldQueue, result,
|
assertEquals(shouldQueue, result,
|
||||||
String.format("For weight %d and status %s, shouldQueue should be %s",
|
String.format("For weight %d and status %s, shouldQueue should be %s",
|
||||||
weight, status, shouldQueue));
|
weight, status, shouldQueue));
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -134,4 +134,4 @@ class ResourceMonitorTest {
|
|||||||
assertTrue(staleMetrics.isStale(5000), "Metrics from 6 seconds ago should be stale with 5s threshold");
|
assertTrue(staleMetrics.isStale(5000), "Metrics from 6 seconds ago should be stale with 5s threshold");
|
||||||
assertFalse(freshMetrics.isStale(5000), "Fresh metrics should not be stale");
|
assertFalse(freshMetrics.isStale(5000), "Fresh metrics should not be stale");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -252,17 +252,17 @@ class TaskManagerTest {
|
|||||||
// Verify the executor service is shutdown
|
// Verify the executor service is shutdown
|
||||||
// This is difficult to test directly, but we can verify it doesn't throw exceptions
|
// This is difficult to test directly, but we can verify it doesn't throw exceptions
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
void testAddNote() {
|
void testAddNote() {
|
||||||
// Arrange
|
// Arrange
|
||||||
String jobId = UUID.randomUUID().toString();
|
String jobId = UUID.randomUUID().toString();
|
||||||
taskManager.createTask(jobId);
|
taskManager.createTask(jobId);
|
||||||
String note = "Test note";
|
String note = "Test note";
|
||||||
|
|
||||||
// Act
|
// Act
|
||||||
boolean result = taskManager.addNote(jobId, note);
|
boolean result = taskManager.addNote(jobId, note);
|
||||||
|
|
||||||
// Assert
|
// Assert
|
||||||
assertTrue(result);
|
assertTrue(result);
|
||||||
JobResult jobResult = taskManager.getJobResult(jobId);
|
JobResult jobResult = taskManager.getJobResult(jobId);
|
||||||
@ -271,16 +271,16 @@ class TaskManagerTest {
|
|||||||
assertEquals(1, jobResult.getNotes().size());
|
assertEquals(1, jobResult.getNotes().size());
|
||||||
assertEquals(note, jobResult.getNotes().get(0));
|
assertEquals(note, jobResult.getNotes().get(0));
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
void testAddNote_NonExistentJob() {
|
void testAddNote_NonExistentJob() {
|
||||||
// Arrange
|
// Arrange
|
||||||
String jobId = "non-existent-job";
|
String jobId = "non-existent-job";
|
||||||
String note = "Test note";
|
String note = "Test note";
|
||||||
|
|
||||||
// Act
|
// Act
|
||||||
boolean result = taskManager.addNote(jobId, note);
|
boolean result = taskManager.addNote(jobId, note);
|
||||||
|
|
||||||
// Assert
|
// Assert
|
||||||
assertFalse(result);
|
assertFalse(result);
|
||||||
}
|
}
|
||||||
|
@ -82,10 +82,10 @@ public class TempFileCleanupServiceTest {
|
|||||||
when(tempFileManagement.isStartupCleanup()).thenReturn(false);
|
when(tempFileManagement.isStartupCleanup()).thenReturn(false);
|
||||||
when(tempFileManagement.isCleanupSystemTemp()).thenReturn(false);
|
when(tempFileManagement.isCleanupSystemTemp()).thenReturn(false);
|
||||||
when(tempFileManagement.getCleanupIntervalMinutes()).thenReturn(30L);
|
when(tempFileManagement.getCleanupIntervalMinutes()).thenReturn(30L);
|
||||||
|
|
||||||
// Set machineType using reflection (still needed for this field)
|
// Set machineType using reflection (still needed for this field)
|
||||||
ReflectionTestUtils.setField(cleanupService, "machineType", "Standard");
|
ReflectionTestUtils.setField(cleanupService, "machineType", "Standard");
|
||||||
|
|
||||||
when(tempFileManager.getMaxAgeMillis()).thenReturn(3600000L); // 1 hour
|
when(tempFileManager.getMaxAgeMillis()).thenReturn(3600000L); // 1 hour
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -113,30 +113,30 @@ public class TempFileCleanupServiceTest {
|
|||||||
Path ourTempFile3 = Files.createFile(customTempDir.resolve("stirling-pdf-789.tmp"));
|
Path ourTempFile3 = Files.createFile(customTempDir.resolve("stirling-pdf-789.tmp"));
|
||||||
Path ourTempFile4 = Files.createFile(customTempDir.resolve("pdf-save-123-456.tmp"));
|
Path ourTempFile4 = Files.createFile(customTempDir.resolve("pdf-save-123-456.tmp"));
|
||||||
Path ourTempFile5 = Files.createFile(libreOfficeTempDir.resolve("input_file.pdf"));
|
Path ourTempFile5 = Files.createFile(libreOfficeTempDir.resolve("input_file.pdf"));
|
||||||
|
|
||||||
// Old temporary files
|
// Old temporary files
|
||||||
Path oldTempFile = Files.createFile(systemTempDir.resolve("output_old.pdf"));
|
Path oldTempFile = Files.createFile(systemTempDir.resolve("output_old.pdf"));
|
||||||
|
|
||||||
// System temp files that should be cleaned in container mode
|
// System temp files that should be cleaned in container mode
|
||||||
Path sysTempFile1 = Files.createFile(systemTempDir.resolve("lu123abc.tmp"));
|
Path sysTempFile1 = Files.createFile(systemTempDir.resolve("lu123abc.tmp"));
|
||||||
Path sysTempFile2 = Files.createFile(customTempDir.resolve("ocr_process123"));
|
Path sysTempFile2 = Files.createFile(customTempDir.resolve("ocr_process123"));
|
||||||
Path sysTempFile3 = Files.createFile(customTempDir.resolve("tmp_upload.tmp"));
|
Path sysTempFile3 = Files.createFile(customTempDir.resolve("tmp_upload.tmp"));
|
||||||
|
|
||||||
// Files that should be preserved
|
// Files that should be preserved
|
||||||
Path jettyFile1 = Files.createFile(systemTempDir.resolve("jetty-123.tmp"));
|
Path jettyFile1 = Files.createFile(systemTempDir.resolve("jetty-123.tmp"));
|
||||||
Path jettyFile2 = Files.createFile(systemTempDir.resolve("something-with-jetty-inside.tmp"));
|
Path jettyFile2 = Files.createFile(systemTempDir.resolve("something-with-jetty-inside.tmp"));
|
||||||
Path regularFile = Files.createFile(systemTempDir.resolve("important.txt"));
|
Path regularFile = Files.createFile(systemTempDir.resolve("important.txt"));
|
||||||
|
|
||||||
// Create a nested directory with temp files
|
// Create a nested directory with temp files
|
||||||
Path nestedDir = Files.createDirectories(systemTempDir.resolve("nested"));
|
Path nestedDir = Files.createDirectories(systemTempDir.resolve("nested"));
|
||||||
Path nestedTempFile = Files.createFile(nestedDir.resolve("output_nested.pdf"));
|
Path nestedTempFile = Files.createFile(nestedDir.resolve("output_nested.pdf"));
|
||||||
|
|
||||||
// Empty file (special case)
|
// Empty file (special case)
|
||||||
Path emptyFile = Files.createFile(systemTempDir.resolve("empty.tmp"));
|
Path emptyFile = Files.createFile(systemTempDir.resolve("empty.tmp"));
|
||||||
|
|
||||||
// Configure mock registry to say these files aren't registered
|
// Configure mock registry to say these files aren't registered
|
||||||
when(registry.contains(any(File.class))).thenReturn(false);
|
when(registry.contains(any(File.class))).thenReturn(false);
|
||||||
|
|
||||||
// The set of files that will be deleted in our test
|
// The set of files that will be deleted in our test
|
||||||
Set<Path> deletedFiles = new HashSet<>();
|
Set<Path> deletedFiles = new HashSet<>();
|
||||||
|
|
||||||
@ -145,31 +145,31 @@ public class TempFileCleanupServiceTest {
|
|||||||
// Mock Files.list for each directory we'll process
|
// Mock Files.list for each directory we'll process
|
||||||
mockedFiles.when(() -> Files.list(eq(systemTempDir)))
|
mockedFiles.when(() -> Files.list(eq(systemTempDir)))
|
||||||
.thenReturn(Stream.of(
|
.thenReturn(Stream.of(
|
||||||
ourTempFile1, ourTempFile2, oldTempFile, sysTempFile1,
|
ourTempFile1, ourTempFile2, oldTempFile, sysTempFile1,
|
||||||
jettyFile1, jettyFile2, regularFile, emptyFile, nestedDir));
|
jettyFile1, jettyFile2, regularFile, emptyFile, nestedDir));
|
||||||
|
|
||||||
mockedFiles.when(() -> Files.list(eq(customTempDir)))
|
mockedFiles.when(() -> Files.list(eq(customTempDir)))
|
||||||
.thenReturn(Stream.of(ourTempFile3, ourTempFile4, sysTempFile2, sysTempFile3));
|
.thenReturn(Stream.of(ourTempFile3, ourTempFile4, sysTempFile2, sysTempFile3));
|
||||||
|
|
||||||
mockedFiles.when(() -> Files.list(eq(libreOfficeTempDir)))
|
mockedFiles.when(() -> Files.list(eq(libreOfficeTempDir)))
|
||||||
.thenReturn(Stream.of(ourTempFile5));
|
.thenReturn(Stream.of(ourTempFile5));
|
||||||
|
|
||||||
mockedFiles.when(() -> Files.list(eq(nestedDir)))
|
mockedFiles.when(() -> Files.list(eq(nestedDir)))
|
||||||
.thenReturn(Stream.of(nestedTempFile));
|
.thenReturn(Stream.of(nestedTempFile));
|
||||||
|
|
||||||
// Configure Files.isDirectory for each path
|
// Configure Files.isDirectory for each path
|
||||||
mockedFiles.when(() -> Files.isDirectory(eq(nestedDir))).thenReturn(true);
|
mockedFiles.when(() -> Files.isDirectory(eq(nestedDir))).thenReturn(true);
|
||||||
mockedFiles.when(() -> Files.isDirectory(any(Path.class))).thenReturn(false);
|
mockedFiles.when(() -> Files.isDirectory(any(Path.class))).thenReturn(false);
|
||||||
|
|
||||||
// Configure Files.exists to return true for all paths
|
// Configure Files.exists to return true for all paths
|
||||||
mockedFiles.when(() -> Files.exists(any(Path.class))).thenReturn(true);
|
mockedFiles.when(() -> Files.exists(any(Path.class))).thenReturn(true);
|
||||||
|
|
||||||
// Configure Files.getLastModifiedTime to return different times based on file names
|
// Configure Files.getLastModifiedTime to return different times based on file names
|
||||||
mockedFiles.when(() -> Files.getLastModifiedTime(any(Path.class)))
|
mockedFiles.when(() -> Files.getLastModifiedTime(any(Path.class)))
|
||||||
.thenAnswer(invocation -> {
|
.thenAnswer(invocation -> {
|
||||||
Path path = invocation.getArgument(0);
|
Path path = invocation.getArgument(0);
|
||||||
String fileName = path.getFileName().toString();
|
String fileName = path.getFileName().toString();
|
||||||
|
|
||||||
// For files with "old" in the name, return a timestamp older than maxAgeMillis
|
// For files with "old" in the name, return a timestamp older than maxAgeMillis
|
||||||
if (fileName.contains("old")) {
|
if (fileName.contains("old")) {
|
||||||
return FileTime.fromMillis(System.currentTimeMillis() - 5000000);
|
return FileTime.fromMillis(System.currentTimeMillis() - 5000000);
|
||||||
@ -183,13 +183,13 @@ public class TempFileCleanupServiceTest {
|
|||||||
return FileTime.fromMillis(System.currentTimeMillis() - 60000); // 1 minute ago
|
return FileTime.fromMillis(System.currentTimeMillis() - 60000); // 1 minute ago
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
// Configure Files.size to return different sizes based on file names
|
// Configure Files.size to return different sizes based on file names
|
||||||
mockedFiles.when(() -> Files.size(any(Path.class)))
|
mockedFiles.when(() -> Files.size(any(Path.class)))
|
||||||
.thenAnswer(invocation -> {
|
.thenAnswer(invocation -> {
|
||||||
Path path = invocation.getArgument(0);
|
Path path = invocation.getArgument(0);
|
||||||
String fileName = path.getFileName().toString();
|
String fileName = path.getFileName().toString();
|
||||||
|
|
||||||
// Return 0 bytes for the empty file
|
// Return 0 bytes for the empty file
|
||||||
if (fileName.equals("empty.tmp")) {
|
if (fileName.equals("empty.tmp")) {
|
||||||
return 0L;
|
return 0L;
|
||||||
@ -199,7 +199,7 @@ public class TempFileCleanupServiceTest {
|
|||||||
return 1024L; // 1 KB
|
return 1024L; // 1 KB
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
// For deleteIfExists, track which files would be deleted
|
// For deleteIfExists, track which files would be deleted
|
||||||
mockedFiles.when(() -> Files.deleteIfExists(any(Path.class)))
|
mockedFiles.when(() -> Files.deleteIfExists(any(Path.class)))
|
||||||
.thenAnswer(invocation -> {
|
.thenAnswer(invocation -> {
|
||||||
@ -207,28 +207,28 @@ public class TempFileCleanupServiceTest {
|
|||||||
deletedFiles.add(path);
|
deletedFiles.add(path);
|
||||||
return true;
|
return true;
|
||||||
});
|
});
|
||||||
|
|
||||||
// Act - set containerMode to false for this test
|
// Act - set containerMode to false for this test
|
||||||
invokeCleanupDirectoryStreaming(systemTempDir, false, 0, 3600000);
|
invokeCleanupDirectoryStreaming(systemTempDir, false, 0, 3600000);
|
||||||
invokeCleanupDirectoryStreaming(customTempDir, false, 0, 3600000);
|
invokeCleanupDirectoryStreaming(customTempDir, false, 0, 3600000);
|
||||||
invokeCleanupDirectoryStreaming(libreOfficeTempDir, false, 0, 3600000);
|
invokeCleanupDirectoryStreaming(libreOfficeTempDir, false, 0, 3600000);
|
||||||
|
|
||||||
// Assert - Only old temp files and empty files should be deleted
|
// Assert - Only old temp files and empty files should be deleted
|
||||||
assertTrue(deletedFiles.contains(oldTempFile), "Old temp file should be deleted");
|
assertTrue(deletedFiles.contains(oldTempFile), "Old temp file should be deleted");
|
||||||
assertTrue(deletedFiles.contains(emptyFile), "Empty file should be deleted");
|
assertTrue(deletedFiles.contains(emptyFile), "Empty file should be deleted");
|
||||||
|
|
||||||
// Regular temp files should not be deleted because they're too new
|
// Regular temp files should not be deleted because they're too new
|
||||||
assertFalse(deletedFiles.contains(ourTempFile1), "Recent temp file should be preserved");
|
assertFalse(deletedFiles.contains(ourTempFile1), "Recent temp file should be preserved");
|
||||||
assertFalse(deletedFiles.contains(ourTempFile2), "Recent temp file should be preserved");
|
assertFalse(deletedFiles.contains(ourTempFile2), "Recent temp file should be preserved");
|
||||||
assertFalse(deletedFiles.contains(ourTempFile3), "Recent temp file should be preserved");
|
assertFalse(deletedFiles.contains(ourTempFile3), "Recent temp file should be preserved");
|
||||||
assertFalse(deletedFiles.contains(ourTempFile4), "Recent temp file should be preserved");
|
assertFalse(deletedFiles.contains(ourTempFile4), "Recent temp file should be preserved");
|
||||||
assertFalse(deletedFiles.contains(ourTempFile5), "Recent temp file should be preserved");
|
assertFalse(deletedFiles.contains(ourTempFile5), "Recent temp file should be preserved");
|
||||||
|
|
||||||
// System temp files should not be deleted in non-container mode
|
// System temp files should not be deleted in non-container mode
|
||||||
assertFalse(deletedFiles.contains(sysTempFile1), "System temp file should be preserved in non-container mode");
|
assertFalse(deletedFiles.contains(sysTempFile1), "System temp file should be preserved in non-container mode");
|
||||||
assertFalse(deletedFiles.contains(sysTempFile2), "System temp file should be preserved in non-container mode");
|
assertFalse(deletedFiles.contains(sysTempFile2), "System temp file should be preserved in non-container mode");
|
||||||
assertFalse(deletedFiles.contains(sysTempFile3), "System temp file should be preserved in non-container mode");
|
assertFalse(deletedFiles.contains(sysTempFile3), "System temp file should be preserved in non-container mode");
|
||||||
|
|
||||||
// Jetty files and regular files should never be deleted
|
// Jetty files and regular files should never be deleted
|
||||||
assertFalse(deletedFiles.contains(jettyFile1), "Jetty file should be preserved");
|
assertFalse(deletedFiles.contains(jettyFile1), "Jetty file should be preserved");
|
||||||
assertFalse(deletedFiles.contains(jettyFile2), "File with jetty in name should be preserved");
|
assertFalse(deletedFiles.contains(jettyFile2), "File with jetty in name should be preserved");
|
||||||
@ -242,10 +242,10 @@ public class TempFileCleanupServiceTest {
|
|||||||
Path ourTempFile = Files.createFile(systemTempDir.resolve("output_123.pdf"));
|
Path ourTempFile = Files.createFile(systemTempDir.resolve("output_123.pdf"));
|
||||||
Path sysTempFile = Files.createFile(systemTempDir.resolve("lu123abc.tmp"));
|
Path sysTempFile = Files.createFile(systemTempDir.resolve("lu123abc.tmp"));
|
||||||
Path regularFile = Files.createFile(systemTempDir.resolve("important.txt"));
|
Path regularFile = Files.createFile(systemTempDir.resolve("important.txt"));
|
||||||
|
|
||||||
// Configure mock registry to say these files aren't registered
|
// Configure mock registry to say these files aren't registered
|
||||||
when(registry.contains(any(File.class))).thenReturn(false);
|
when(registry.contains(any(File.class))).thenReturn(false);
|
||||||
|
|
||||||
// The set of files that will be deleted in our test
|
// The set of files that will be deleted in our test
|
||||||
Set<Path> deletedFiles = new HashSet<>();
|
Set<Path> deletedFiles = new HashSet<>();
|
||||||
|
|
||||||
@ -254,21 +254,21 @@ public class TempFileCleanupServiceTest {
|
|||||||
// Mock Files.list for systemTempDir
|
// Mock Files.list for systemTempDir
|
||||||
mockedFiles.when(() -> Files.list(eq(systemTempDir)))
|
mockedFiles.when(() -> Files.list(eq(systemTempDir)))
|
||||||
.thenReturn(Stream.of(ourTempFile, sysTempFile, regularFile));
|
.thenReturn(Stream.of(ourTempFile, sysTempFile, regularFile));
|
||||||
|
|
||||||
// Configure Files.isDirectory
|
// Configure Files.isDirectory
|
||||||
mockedFiles.when(() -> Files.isDirectory(any(Path.class))).thenReturn(false);
|
mockedFiles.when(() -> Files.isDirectory(any(Path.class))).thenReturn(false);
|
||||||
|
|
||||||
// Configure Files.exists
|
// Configure Files.exists
|
||||||
mockedFiles.when(() -> Files.exists(any(Path.class))).thenReturn(true);
|
mockedFiles.when(() -> Files.exists(any(Path.class))).thenReturn(true);
|
||||||
|
|
||||||
// Configure Files.getLastModifiedTime to return recent timestamps
|
// Configure Files.getLastModifiedTime to return recent timestamps
|
||||||
mockedFiles.when(() -> Files.getLastModifiedTime(any(Path.class)))
|
mockedFiles.when(() -> Files.getLastModifiedTime(any(Path.class)))
|
||||||
.thenReturn(FileTime.fromMillis(System.currentTimeMillis() - 60000)); // 1 minute ago
|
.thenReturn(FileTime.fromMillis(System.currentTimeMillis() - 60000)); // 1 minute ago
|
||||||
|
|
||||||
// Configure Files.size to return normal size
|
// Configure Files.size to return normal size
|
||||||
mockedFiles.when(() -> Files.size(any(Path.class)))
|
mockedFiles.when(() -> Files.size(any(Path.class)))
|
||||||
.thenReturn(1024L); // 1 KB
|
.thenReturn(1024L); // 1 KB
|
||||||
|
|
||||||
// For deleteIfExists, track which files would be deleted
|
// For deleteIfExists, track which files would be deleted
|
||||||
mockedFiles.when(() -> Files.deleteIfExists(any(Path.class)))
|
mockedFiles.when(() -> Files.deleteIfExists(any(Path.class)))
|
||||||
.thenAnswer(invocation -> {
|
.thenAnswer(invocation -> {
|
||||||
@ -276,10 +276,10 @@ public class TempFileCleanupServiceTest {
|
|||||||
deletedFiles.add(path);
|
deletedFiles.add(path);
|
||||||
return true;
|
return true;
|
||||||
});
|
});
|
||||||
|
|
||||||
// Act - set containerMode to true and maxAgeMillis to 0 for container startup cleanup
|
// Act - set containerMode to true and maxAgeMillis to 0 for container startup cleanup
|
||||||
invokeCleanupDirectoryStreaming(systemTempDir, true, 0, 0);
|
invokeCleanupDirectoryStreaming(systemTempDir, true, 0, 0);
|
||||||
|
|
||||||
// Assert - In container mode, both our temp files and system temp files should be deleted
|
// Assert - In container mode, both our temp files and system temp files should be deleted
|
||||||
// regardless of age (when maxAgeMillis is 0)
|
// regardless of age (when maxAgeMillis is 0)
|
||||||
assertTrue(deletedFiles.contains(ourTempFile), "Our temp file should be deleted in container mode");
|
assertTrue(deletedFiles.contains(ourTempFile), "Our temp file should be deleted in container mode");
|
||||||
@ -293,10 +293,10 @@ public class TempFileCleanupServiceTest {
|
|||||||
// Arrange - Create an empty file
|
// Arrange - Create an empty file
|
||||||
Path emptyFile = Files.createFile(systemTempDir.resolve("empty.tmp"));
|
Path emptyFile = Files.createFile(systemTempDir.resolve("empty.tmp"));
|
||||||
Path recentEmptyFile = Files.createFile(systemTempDir.resolve("recent_empty.tmp"));
|
Path recentEmptyFile = Files.createFile(systemTempDir.resolve("recent_empty.tmp"));
|
||||||
|
|
||||||
// Configure mock registry to say these files aren't registered
|
// Configure mock registry to say these files aren't registered
|
||||||
when(registry.contains(any(File.class))).thenReturn(false);
|
when(registry.contains(any(File.class))).thenReturn(false);
|
||||||
|
|
||||||
// The set of files that will be deleted in our test
|
// The set of files that will be deleted in our test
|
||||||
Set<Path> deletedFiles = new HashSet<>();
|
Set<Path> deletedFiles = new HashSet<>();
|
||||||
|
|
||||||
@ -305,19 +305,19 @@ public class TempFileCleanupServiceTest {
|
|||||||
// Mock Files.list for systemTempDir
|
// Mock Files.list for systemTempDir
|
||||||
mockedFiles.when(() -> Files.list(eq(systemTempDir)))
|
mockedFiles.when(() -> Files.list(eq(systemTempDir)))
|
||||||
.thenReturn(Stream.of(emptyFile, recentEmptyFile));
|
.thenReturn(Stream.of(emptyFile, recentEmptyFile));
|
||||||
|
|
||||||
// Configure Files.isDirectory
|
// Configure Files.isDirectory
|
||||||
mockedFiles.when(() -> Files.isDirectory(any(Path.class))).thenReturn(false);
|
mockedFiles.when(() -> Files.isDirectory(any(Path.class))).thenReturn(false);
|
||||||
|
|
||||||
// Configure Files.exists
|
// Configure Files.exists
|
||||||
mockedFiles.when(() -> Files.exists(any(Path.class))).thenReturn(true);
|
mockedFiles.when(() -> Files.exists(any(Path.class))).thenReturn(true);
|
||||||
|
|
||||||
// Configure Files.getLastModifiedTime to return different times based on file names
|
// Configure Files.getLastModifiedTime to return different times based on file names
|
||||||
mockedFiles.when(() -> Files.getLastModifiedTime(any(Path.class)))
|
mockedFiles.when(() -> Files.getLastModifiedTime(any(Path.class)))
|
||||||
.thenAnswer(invocation -> {
|
.thenAnswer(invocation -> {
|
||||||
Path path = invocation.getArgument(0);
|
Path path = invocation.getArgument(0);
|
||||||
String fileName = path.getFileName().toString();
|
String fileName = path.getFileName().toString();
|
||||||
|
|
||||||
if (fileName.equals("empty.tmp")) {
|
if (fileName.equals("empty.tmp")) {
|
||||||
// More than 5 minutes old
|
// More than 5 minutes old
|
||||||
return FileTime.fromMillis(System.currentTimeMillis() - 6 * 60 * 1000);
|
return FileTime.fromMillis(System.currentTimeMillis() - 6 * 60 * 1000);
|
||||||
@ -326,11 +326,11 @@ public class TempFileCleanupServiceTest {
|
|||||||
return FileTime.fromMillis(System.currentTimeMillis() - 2 * 60 * 1000);
|
return FileTime.fromMillis(System.currentTimeMillis() - 2 * 60 * 1000);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
// Configure Files.size to return 0 for empty files
|
// Configure Files.size to return 0 for empty files
|
||||||
mockedFiles.when(() -> Files.size(any(Path.class)))
|
mockedFiles.when(() -> Files.size(any(Path.class)))
|
||||||
.thenReturn(0L);
|
.thenReturn(0L);
|
||||||
|
|
||||||
// For deleteIfExists, track which files would be deleted
|
// For deleteIfExists, track which files would be deleted
|
||||||
mockedFiles.when(() -> Files.deleteIfExists(any(Path.class)))
|
mockedFiles.when(() -> Files.deleteIfExists(any(Path.class)))
|
||||||
.thenAnswer(invocation -> {
|
.thenAnswer(invocation -> {
|
||||||
@ -338,14 +338,14 @@ public class TempFileCleanupServiceTest {
|
|||||||
deletedFiles.add(path);
|
deletedFiles.add(path);
|
||||||
return true;
|
return true;
|
||||||
});
|
});
|
||||||
|
|
||||||
// Act
|
// Act
|
||||||
invokeCleanupDirectoryStreaming(systemTempDir, false, 0, 3600000);
|
invokeCleanupDirectoryStreaming(systemTempDir, false, 0, 3600000);
|
||||||
|
|
||||||
// Assert
|
// Assert
|
||||||
assertTrue(deletedFiles.contains(emptyFile),
|
assertTrue(deletedFiles.contains(emptyFile),
|
||||||
"Empty file older than 5 minutes should be deleted");
|
"Empty file older than 5 minutes should be deleted");
|
||||||
assertFalse(deletedFiles.contains(recentEmptyFile),
|
assertFalse(deletedFiles.contains(recentEmptyFile),
|
||||||
"Empty file newer than 5 minutes should not be deleted");
|
"Empty file newer than 5 minutes should not be deleted");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -356,14 +356,14 @@ public class TempFileCleanupServiceTest {
|
|||||||
Path dir1 = Files.createDirectories(systemTempDir.resolve("dir1"));
|
Path dir1 = Files.createDirectories(systemTempDir.resolve("dir1"));
|
||||||
Path dir2 = Files.createDirectories(dir1.resolve("dir2"));
|
Path dir2 = Files.createDirectories(dir1.resolve("dir2"));
|
||||||
Path dir3 = Files.createDirectories(dir2.resolve("dir3"));
|
Path dir3 = Files.createDirectories(dir2.resolve("dir3"));
|
||||||
|
|
||||||
Path tempFile1 = Files.createFile(dir1.resolve("output_1.pdf"));
|
Path tempFile1 = Files.createFile(dir1.resolve("output_1.pdf"));
|
||||||
Path tempFile2 = Files.createFile(dir2.resolve("output_2.pdf"));
|
Path tempFile2 = Files.createFile(dir2.resolve("output_2.pdf"));
|
||||||
Path tempFile3 = Files.createFile(dir3.resolve("output_old_3.pdf"));
|
Path tempFile3 = Files.createFile(dir3.resolve("output_old_3.pdf"));
|
||||||
|
|
||||||
// Configure mock registry to say these files aren't registered
|
// Configure mock registry to say these files aren't registered
|
||||||
when(registry.contains(any(File.class))).thenReturn(false);
|
when(registry.contains(any(File.class))).thenReturn(false);
|
||||||
|
|
||||||
// The set of files that will be deleted in our test
|
// The set of files that will be deleted in our test
|
||||||
Set<Path> deletedFiles = new HashSet<>();
|
Set<Path> deletedFiles = new HashSet<>();
|
||||||
|
|
||||||
@ -372,16 +372,16 @@ public class TempFileCleanupServiceTest {
|
|||||||
// Mock Files.list for each directory
|
// Mock Files.list for each directory
|
||||||
mockedFiles.when(() -> Files.list(eq(systemTempDir)))
|
mockedFiles.when(() -> Files.list(eq(systemTempDir)))
|
||||||
.thenReturn(Stream.of(dir1));
|
.thenReturn(Stream.of(dir1));
|
||||||
|
|
||||||
mockedFiles.when(() -> Files.list(eq(dir1)))
|
mockedFiles.when(() -> Files.list(eq(dir1)))
|
||||||
.thenReturn(Stream.of(tempFile1, dir2));
|
.thenReturn(Stream.of(tempFile1, dir2));
|
||||||
|
|
||||||
mockedFiles.when(() -> Files.list(eq(dir2)))
|
mockedFiles.when(() -> Files.list(eq(dir2)))
|
||||||
.thenReturn(Stream.of(tempFile2, dir3));
|
.thenReturn(Stream.of(tempFile2, dir3));
|
||||||
|
|
||||||
mockedFiles.when(() -> Files.list(eq(dir3)))
|
mockedFiles.when(() -> Files.list(eq(dir3)))
|
||||||
.thenReturn(Stream.of(tempFile3));
|
.thenReturn(Stream.of(tempFile3));
|
||||||
|
|
||||||
// Configure Files.isDirectory for each path
|
// Configure Files.isDirectory for each path
|
||||||
mockedFiles.when(() -> Files.isDirectory(eq(dir1))).thenReturn(true);
|
mockedFiles.when(() -> Files.isDirectory(eq(dir1))).thenReturn(true);
|
||||||
mockedFiles.when(() -> Files.isDirectory(eq(dir2))).thenReturn(true);
|
mockedFiles.when(() -> Files.isDirectory(eq(dir2))).thenReturn(true);
|
||||||
@ -389,16 +389,16 @@ public class TempFileCleanupServiceTest {
|
|||||||
mockedFiles.when(() -> Files.isDirectory(eq(tempFile1))).thenReturn(false);
|
mockedFiles.when(() -> Files.isDirectory(eq(tempFile1))).thenReturn(false);
|
||||||
mockedFiles.when(() -> Files.isDirectory(eq(tempFile2))).thenReturn(false);
|
mockedFiles.when(() -> Files.isDirectory(eq(tempFile2))).thenReturn(false);
|
||||||
mockedFiles.when(() -> Files.isDirectory(eq(tempFile3))).thenReturn(false);
|
mockedFiles.when(() -> Files.isDirectory(eq(tempFile3))).thenReturn(false);
|
||||||
|
|
||||||
// Configure Files.exists to return true for all paths
|
// Configure Files.exists to return true for all paths
|
||||||
mockedFiles.when(() -> Files.exists(any(Path.class))).thenReturn(true);
|
mockedFiles.when(() -> Files.exists(any(Path.class))).thenReturn(true);
|
||||||
|
|
||||||
// Configure Files.getLastModifiedTime to return different times based on file names
|
// Configure Files.getLastModifiedTime to return different times based on file names
|
||||||
mockedFiles.when(() -> Files.getLastModifiedTime(any(Path.class)))
|
mockedFiles.when(() -> Files.getLastModifiedTime(any(Path.class)))
|
||||||
.thenAnswer(invocation -> {
|
.thenAnswer(invocation -> {
|
||||||
Path path = invocation.getArgument(0);
|
Path path = invocation.getArgument(0);
|
||||||
String fileName = path.getFileName().toString();
|
String fileName = path.getFileName().toString();
|
||||||
|
|
||||||
if (fileName.contains("old")) {
|
if (fileName.contains("old")) {
|
||||||
// Old file
|
// Old file
|
||||||
return FileTime.fromMillis(System.currentTimeMillis() - 5000000);
|
return FileTime.fromMillis(System.currentTimeMillis() - 5000000);
|
||||||
@ -407,11 +407,11 @@ public class TempFileCleanupServiceTest {
|
|||||||
return FileTime.fromMillis(System.currentTimeMillis() - 60000);
|
return FileTime.fromMillis(System.currentTimeMillis() - 60000);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
// Configure Files.size to return normal size
|
// Configure Files.size to return normal size
|
||||||
mockedFiles.when(() -> Files.size(any(Path.class)))
|
mockedFiles.when(() -> Files.size(any(Path.class)))
|
||||||
.thenReturn(1024L);
|
.thenReturn(1024L);
|
||||||
|
|
||||||
// For deleteIfExists, track which files would be deleted
|
// For deleteIfExists, track which files would be deleted
|
||||||
mockedFiles.when(() -> Files.deleteIfExists(any(Path.class)))
|
mockedFiles.when(() -> Files.deleteIfExists(any(Path.class)))
|
||||||
.thenAnswer(invocation -> {
|
.thenAnswer(invocation -> {
|
||||||
@ -419,14 +419,14 @@ public class TempFileCleanupServiceTest {
|
|||||||
deletedFiles.add(path);
|
deletedFiles.add(path);
|
||||||
return true;
|
return true;
|
||||||
});
|
});
|
||||||
|
|
||||||
// Act
|
// Act
|
||||||
invokeCleanupDirectoryStreaming(systemTempDir, false, 0, 3600000);
|
invokeCleanupDirectoryStreaming(systemTempDir, false, 0, 3600000);
|
||||||
|
|
||||||
// Debug - print what was deleted
|
// Debug - print what was deleted
|
||||||
System.out.println("Deleted files: " + deletedFiles);
|
System.out.println("Deleted files: " + deletedFiles);
|
||||||
System.out.println("Looking for: " + tempFile3);
|
System.out.println("Looking for: " + tempFile3);
|
||||||
|
|
||||||
// Assert
|
// Assert
|
||||||
assertFalse(deletedFiles.contains(tempFile1), "Recent temp file should be preserved");
|
assertFalse(deletedFiles.contains(tempFile1), "Recent temp file should be preserved");
|
||||||
assertFalse(deletedFiles.contains(tempFile2), "Recent temp file should be preserved");
|
assertFalse(deletedFiles.contains(tempFile2), "Recent temp file should be preserved");
|
||||||
@ -437,28 +437,28 @@ public class TempFileCleanupServiceTest {
|
|||||||
/**
|
/**
|
||||||
* Helper method to invoke the private cleanupDirectoryStreaming method using reflection
|
* Helper method to invoke the private cleanupDirectoryStreaming method using reflection
|
||||||
*/
|
*/
|
||||||
private void invokeCleanupDirectoryStreaming(Path directory, boolean containerMode, int depth, long maxAgeMillis)
|
private void invokeCleanupDirectoryStreaming(Path directory, boolean containerMode, int depth, long maxAgeMillis)
|
||||||
throws IOException {
|
throws IOException {
|
||||||
try {
|
try {
|
||||||
// Create a consumer that tracks deleted files
|
// Create a consumer that tracks deleted files
|
||||||
AtomicInteger deleteCount = new AtomicInteger(0);
|
AtomicInteger deleteCount = new AtomicInteger(0);
|
||||||
Consumer<Path> deleteCallback = path -> deleteCount.incrementAndGet();
|
Consumer<Path> deleteCallback = path -> deleteCount.incrementAndGet();
|
||||||
|
|
||||||
// Get the method with updated signature
|
// Get the method with updated signature
|
||||||
var method = TempFileCleanupService.class.getDeclaredMethod(
|
var method = TempFileCleanupService.class.getDeclaredMethod(
|
||||||
"cleanupDirectoryStreaming",
|
"cleanupDirectoryStreaming",
|
||||||
Path.class, boolean.class, int.class, long.class, boolean.class, Consumer.class);
|
Path.class, boolean.class, int.class, long.class, boolean.class, Consumer.class);
|
||||||
method.setAccessible(true);
|
method.setAccessible(true);
|
||||||
|
|
||||||
// Invoke the method with appropriate parameters
|
// Invoke the method with appropriate parameters
|
||||||
method.invoke(cleanupService, directory, containerMode, depth, maxAgeMillis, false, deleteCallback);
|
method.invoke(cleanupService, directory, containerMode, depth, maxAgeMillis, false, deleteCallback);
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
throw new RuntimeException("Error invoking cleanupDirectoryStreaming", e);
|
throw new RuntimeException("Error invoking cleanupDirectoryStreaming", e);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Matcher for exact path equality
|
// Matcher for exact path equality
|
||||||
private static Path eq(Path path) {
|
private static Path eq(Path path) {
|
||||||
return argThat(arg -> arg != null && arg.equals(path));
|
return argThat(arg -> arg != null && arg.equals(path));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -27,7 +27,7 @@ public class FileToPdfTest {
|
|||||||
String fileName = "test.html"; // Sample file name indicating an HTML file
|
String fileName = "test.html"; // Sample file name indicating an HTML file
|
||||||
boolean disableSanitize = false; // Flag to control sanitization
|
boolean disableSanitize = false; // Flag to control sanitization
|
||||||
TempFileManager tempFileManager = mock(TempFileManager.class); // Mock TempFileManager
|
TempFileManager tempFileManager = mock(TempFileManager.class); // Mock TempFileManager
|
||||||
|
|
||||||
// Mock the temp file creation to return real temp files
|
// Mock the temp file creation to return real temp files
|
||||||
try {
|
try {
|
||||||
when(tempFileManager.createTempFile(anyString()))
|
when(tempFileManager.createTempFile(anyString()))
|
||||||
|
@ -22,7 +22,7 @@ class SpringContextHolderTest {
|
|||||||
void testSetApplicationContext() {
|
void testSetApplicationContext() {
|
||||||
// Act
|
// Act
|
||||||
contextHolder.setApplicationContext(mockApplicationContext);
|
contextHolder.setApplicationContext(mockApplicationContext);
|
||||||
|
|
||||||
// Assert
|
// Assert
|
||||||
assertTrue(SpringContextHolder.isInitialized());
|
assertTrue(SpringContextHolder.isInitialized());
|
||||||
}
|
}
|
||||||
@ -33,10 +33,10 @@ class SpringContextHolderTest {
|
|||||||
contextHolder.setApplicationContext(mockApplicationContext);
|
contextHolder.setApplicationContext(mockApplicationContext);
|
||||||
TestBean expectedBean = new TestBean();
|
TestBean expectedBean = new TestBean();
|
||||||
when(mockApplicationContext.getBean(TestBean.class)).thenReturn(expectedBean);
|
when(mockApplicationContext.getBean(TestBean.class)).thenReturn(expectedBean);
|
||||||
|
|
||||||
// Act
|
// Act
|
||||||
TestBean result = SpringContextHolder.getBean(TestBean.class);
|
TestBean result = SpringContextHolder.getBean(TestBean.class);
|
||||||
|
|
||||||
// Assert
|
// Assert
|
||||||
assertSame(expectedBean, result);
|
assertSame(expectedBean, result);
|
||||||
verify(mockApplicationContext).getBean(TestBean.class);
|
verify(mockApplicationContext).getBean(TestBean.class);
|
||||||
@ -46,10 +46,10 @@ class SpringContextHolderTest {
|
|||||||
@Test
|
@Test
|
||||||
void testGetBean_ApplicationContextNotSet() {
|
void testGetBean_ApplicationContextNotSet() {
|
||||||
// Don't set application context
|
// Don't set application context
|
||||||
|
|
||||||
// Act
|
// Act
|
||||||
TestBean result = SpringContextHolder.getBean(TestBean.class);
|
TestBean result = SpringContextHolder.getBean(TestBean.class);
|
||||||
|
|
||||||
// Assert
|
// Assert
|
||||||
assertNull(result);
|
assertNull(result);
|
||||||
}
|
}
|
||||||
@ -59,10 +59,10 @@ class SpringContextHolderTest {
|
|||||||
// Arrange
|
// Arrange
|
||||||
contextHolder.setApplicationContext(mockApplicationContext);
|
contextHolder.setApplicationContext(mockApplicationContext);
|
||||||
when(mockApplicationContext.getBean(TestBean.class)).thenThrow(new org.springframework.beans.BeansException("Bean not found") {});
|
when(mockApplicationContext.getBean(TestBean.class)).thenThrow(new org.springframework.beans.BeansException("Bean not found") {});
|
||||||
|
|
||||||
// Act
|
// Act
|
||||||
TestBean result = SpringContextHolder.getBean(TestBean.class);
|
TestBean result = SpringContextHolder.getBean(TestBean.class);
|
||||||
|
|
||||||
// Assert
|
// Assert
|
||||||
assertNull(result);
|
assertNull(result);
|
||||||
}
|
}
|
||||||
@ -70,4 +70,4 @@ class SpringContextHolderTest {
|
|||||||
// Simple test class
|
// Simple test class
|
||||||
private static class TestBean {
|
private static class TestBean {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -29,7 +29,7 @@ dependencies {
|
|||||||
api 'org.springframework.boot:spring-boot-starter-data-jpa'
|
api 'org.springframework.boot:spring-boot-starter-data-jpa'
|
||||||
api 'org.springframework.boot:spring-boot-starter-oauth2-client'
|
api 'org.springframework.boot:spring-boot-starter-oauth2-client'
|
||||||
api 'org.springframework.boot:spring-boot-starter-mail'
|
api 'org.springframework.boot:spring-boot-starter-mail'
|
||||||
api 'io.swagger.core.v3:swagger-core-jakarta:2.2.33'
|
api 'io.swagger.core.v3:swagger-core-jakarta:2.2.34'
|
||||||
implementation 'com.bucket4j:bucket4j_jdk17-core:8.14.0'
|
implementation 'com.bucket4j:bucket4j_jdk17-core:8.14.0'
|
||||||
|
|
||||||
// https://mvnrepository.com/artifact/com.bucket4j/bucket4j_jdk17
|
// https://mvnrepository.com/artifact/com.bucket4j/bucket4j_jdk17
|
||||||
|
@ -420,27 +420,13 @@ ignore = [
|
|||||||
|
|
||||||
[hu_HU]
|
[hu_HU]
|
||||||
ignore = [
|
ignore = [
|
||||||
'AddStampRequest.alphabet',
|
|
||||||
'AddStampRequest.position',
|
|
||||||
'adminUserSettings.admin',
|
|
||||||
'alphabet',
|
|
||||||
'audit.dashboard.export.json',
|
'audit.dashboard.export.json',
|
||||||
'audit.dashboard.modal.id',
|
'audit.dashboard.modal.id',
|
||||||
'audit.dashboard.table.id',
|
'audit.dashboard.table.id',
|
||||||
'certSign.name',
|
|
||||||
'cookieBanner.popUp.acceptAllBtn',
|
|
||||||
'endpointStatistics.top10',
|
'endpointStatistics.top10',
|
||||||
'endpointStatistics.top20',
|
'endpointStatistics.top20',
|
||||||
'language.direction',
|
'language.direction',
|
||||||
'licenses.version',
|
|
||||||
'poweredBy',
|
|
||||||
'pro',
|
'pro',
|
||||||
'sponsor',
|
|
||||||
'text',
|
|
||||||
'validateSignature.cert.bits',
|
|
||||||
'validateSignature.cert.version',
|
|
||||||
'validateSignature.status',
|
|
||||||
'watermark.type.1',
|
|
||||||
]
|
]
|
||||||
|
|
||||||
[id_ID]
|
[id_ID]
|
||||||
@ -495,7 +481,6 @@ ignore = [
|
|||||||
[it_IT]
|
[it_IT]
|
||||||
ignore = [
|
ignore = [
|
||||||
'lang.asm',
|
'lang.asm',
|
||||||
'lang.aze',
|
|
||||||
'lang.ceb',
|
'lang.ceb',
|
||||||
'lang.chr',
|
'lang.chr',
|
||||||
'lang.div',
|
'lang.div',
|
||||||
@ -858,9 +843,29 @@ ignore = [
|
|||||||
|
|
||||||
[sr_LATN_RS]
|
[sr_LATN_RS]
|
||||||
ignore = [
|
ignore = [
|
||||||
|
'audit.dashboard.modal.id',
|
||||||
|
'audit.dashboard.status',
|
||||||
|
'audit.dashboard.table.id',
|
||||||
|
'endpointStatistics.top',
|
||||||
|
'endpointStatistics.top10',
|
||||||
|
'endpointStatistics.top20',
|
||||||
|
'font',
|
||||||
|
'info',
|
||||||
|
'lang.div',
|
||||||
|
'lang.epo',
|
||||||
|
'lang.hin',
|
||||||
|
'lang.iku',
|
||||||
|
'lang.mar',
|
||||||
|
'lang.san',
|
||||||
|
'lang.snd',
|
||||||
|
'lang.tel',
|
||||||
|
'lang.tgl',
|
||||||
|
'lang.urd',
|
||||||
'language.direction',
|
'language.direction',
|
||||||
'licenses.version',
|
'pro',
|
||||||
'poweredBy',
|
'showJS.tags',
|
||||||
|
'team.status',
|
||||||
|
'validateSignature.status',
|
||||||
]
|
]
|
||||||
|
|
||||||
[sv_SE]
|
[sv_SE]
|
||||||
|
@ -62,7 +62,7 @@ dependencies {
|
|||||||
exclude group: 'com.google.code.gson', module: 'gson'
|
exclude group: 'com.google.code.gson', module: 'gson'
|
||||||
}
|
}
|
||||||
implementation 'org.apache.pdfbox:jbig2-imageio:3.0.4'
|
implementation 'org.apache.pdfbox:jbig2-imageio:3.0.4'
|
||||||
implementation 'com.opencsv:opencsv:5.11.1' // https://mvnrepository.com/artifact/com.opencsv/opencsv
|
implementation 'com.opencsv:opencsv:5.11.2' // https://mvnrepository.com/artifact/com.opencsv/opencsv
|
||||||
|
|
||||||
// Batik
|
// Batik
|
||||||
implementation 'org.apache.xmlgraphics:batik-all:1.19'
|
implementation 'org.apache.xmlgraphics:batik-all:1.19'
|
||||||
|
@ -120,8 +120,8 @@ public class ApiDocService {
|
|||||||
ObjectMapper mapper = new ObjectMapper();
|
ObjectMapper mapper = new ObjectMapper();
|
||||||
apiDocsJsonRootNode = mapper.readTree(apiDocsJson);
|
apiDocsJsonRootNode = mapper.readTree(apiDocsJson);
|
||||||
JsonNode paths = apiDocsJsonRootNode.path("paths");
|
JsonNode paths = apiDocsJsonRootNode.path("paths");
|
||||||
paths.fields()
|
paths.propertyStream()
|
||||||
.forEachRemaining(
|
.forEach(
|
||||||
entry -> {
|
entry -> {
|
||||||
String path = entry.getKey();
|
String path = entry.getKey();
|
||||||
JsonNode pathNode = entry.getValue();
|
JsonNode pathNode = entry.getValue();
|
||||||
|
@ -525,6 +525,10 @@ home.addImage.title=إضافة صورة إلى ملف PDF
|
|||||||
home.addImage.desc=إضافة صورة إلى موقع معين في PDF (العمل قيد التقدم)
|
home.addImage.desc=إضافة صورة إلى موقع معين في PDF (العمل قيد التقدم)
|
||||||
addImage.tags=صورة,jpg,صورة,صورة فوتوغرافية
|
addImage.tags=صورة,jpg,صورة,صورة فوتوغرافية
|
||||||
|
|
||||||
|
home.attachments.title=Add Attachments
|
||||||
|
home.attachments.desc=Add or remove embedded files (attachments) to/from a PDF
|
||||||
|
attachments.tags=embed,attach,file,attachment,attachments
|
||||||
|
|
||||||
home.watermark.title=إضافة علامة مائية
|
home.watermark.title=إضافة علامة مائية
|
||||||
home.watermark.desc=أضف علامة مائية مخصصة إلى مستند PDF الخاص بك.
|
home.watermark.desc=أضف علامة مائية مخصصة إلى مستند PDF الخاص بك.
|
||||||
watermark.tags=نص,تكرار,تسمية,خاص,حقوق النشر,علامة تجارية,صورة,jpg,صورة,صورة فوتوغرافية
|
watermark.tags=نص,تكرار,تسمية,خاص,حقوق النشر,علامة تجارية,صورة,jpg,صورة,صورة فوتوغرافية
|
||||||
@ -1205,6 +1209,12 @@ addImage.everyPage=كل صفحة؟
|
|||||||
addImage.upload=إضافة صورة
|
addImage.upload=إضافة صورة
|
||||||
addImage.submit=إضافة صورة
|
addImage.submit=إضافة صورة
|
||||||
|
|
||||||
|
#attachments
|
||||||
|
attachments.title=Add Attachments
|
||||||
|
attachments.header=Add attachments
|
||||||
|
attachments.description=Allows you to add attachments to the PDF
|
||||||
|
attachments.descriptionPlaceholder=Enter a description for the attachments...
|
||||||
|
attachments.addButton=Add Attachments
|
||||||
|
|
||||||
#merge
|
#merge
|
||||||
merge.title=دمج
|
merge.title=دمج
|
||||||
@ -1594,6 +1604,7 @@ fileChooser.dragAndDropPDF=Drag & Drop PDF file
|
|||||||
fileChooser.dragAndDropImage=Drag & Drop Image file
|
fileChooser.dragAndDropImage=Drag & Drop Image file
|
||||||
fileChooser.hoveredDragAndDrop=قم بسحب المفات وإفلاتها هنا
|
fileChooser.hoveredDragAndDrop=قم بسحب المفات وإفلاتها هنا
|
||||||
fileChooser.extractPDF=جاري الاستخراج...
|
fileChooser.extractPDF=جاري الاستخراج...
|
||||||
|
fileChooser.addAttachments=drag & drop attachments here
|
||||||
|
|
||||||
#release notes
|
#release notes
|
||||||
releases.footer=Releases
|
releases.footer=Releases
|
||||||
|
@ -525,6 +525,10 @@ home.addImage.title=Şəkil əlavə et
|
|||||||
home.addImage.desc=PDF-də təyin edilmiş yerə şəkil əlavə edir
|
home.addImage.desc=PDF-də təyin edilmiş yerə şəkil əlavə edir
|
||||||
addImage.tags=şəkil,jpg,fotoşəkil,foto
|
addImage.tags=şəkil,jpg,fotoşəkil,foto
|
||||||
|
|
||||||
|
home.attachments.title=Add Attachments
|
||||||
|
home.attachments.desc=Add or remove embedded files (attachments) to/from a PDF
|
||||||
|
attachments.tags=embed,attach,file,attachment,attachments
|
||||||
|
|
||||||
home.watermark.title=Watermark əlavə et
|
home.watermark.title=Watermark əlavə et
|
||||||
home.watermark.desc=PDF sənədinə fərdi watermark əlavə et.
|
home.watermark.desc=PDF sənədinə fərdi watermark əlavə et.
|
||||||
watermark.tags=Mətn,təkrarlanan,nişan,sahib olmaq,müəllif hüquqları,əmtəə nişanı,şəkil,jpg,fotoşəkil,foto
|
watermark.tags=Mətn,təkrarlanan,nişan,sahib olmaq,müəllif hüquqları,əmtəə nişanı,şəkil,jpg,fotoşəkil,foto
|
||||||
@ -1205,6 +1209,12 @@ addImage.everyPage=Bütün Səhifələr?
|
|||||||
addImage.upload=Şəkli Əlavə Et
|
addImage.upload=Şəkli Əlavə Et
|
||||||
addImage.submit=Şəkli Əlavə Et
|
addImage.submit=Şəkli Əlavə Et
|
||||||
|
|
||||||
|
#attachments
|
||||||
|
attachments.title=Add Attachments
|
||||||
|
attachments.header=Add attachments
|
||||||
|
attachments.description=Allows you to add attachments to the PDF
|
||||||
|
attachments.descriptionPlaceholder=Enter a description for the attachments...
|
||||||
|
attachments.addButton=Add Attachments
|
||||||
|
|
||||||
#merge
|
#merge
|
||||||
merge.title=Birləşdirin
|
merge.title=Birləşdirin
|
||||||
@ -1594,6 +1604,7 @@ fileChooser.dragAndDropPDF=Drag & Drop PDF file
|
|||||||
fileChooser.dragAndDropImage=Drag & Drop Image file
|
fileChooser.dragAndDropImage=Drag & Drop Image file
|
||||||
fileChooser.hoveredDragAndDrop=Drag & Drop file(s) here
|
fileChooser.hoveredDragAndDrop=Drag & Drop file(s) here
|
||||||
fileChooser.extractPDF=Extracting...
|
fileChooser.extractPDF=Extracting...
|
||||||
|
fileChooser.addAttachments=drag & drop attachments here
|
||||||
|
|
||||||
#release notes
|
#release notes
|
||||||
releases.footer=Buraxılışlar
|
releases.footer=Buraxılışlar
|
||||||
|
@ -525,6 +525,10 @@ home.addImage.title=Добавяне на изображение
|
|||||||
home.addImage.desc=Добавя изображение към зададено място към PDF файла
|
home.addImage.desc=Добавя изображение към зададено място към PDF файла
|
||||||
addImage.tags=img,jpg,изображение,снимка
|
addImage.tags=img,jpg,изображение,снимка
|
||||||
|
|
||||||
|
home.attachments.title=Add Attachments
|
||||||
|
home.attachments.desc=Add or remove embedded files (attachments) to/from a PDF
|
||||||
|
attachments.tags=embed,attach,file,attachment,attachments
|
||||||
|
|
||||||
home.watermark.title=Добавяне на воден знак
|
home.watermark.title=Добавяне на воден знак
|
||||||
home.watermark.desc=Добавете персонализиран воден знак към вашия PDF документ.
|
home.watermark.desc=Добавете персонализиран воден знак към вашия PDF документ.
|
||||||
watermark.tags=Текст,повтарящ се,етикет,собствено,авторско право,търговска марка,img,jpg,изображение,снимка
|
watermark.tags=Текст,повтарящ се,етикет,собствено,авторско право,търговска марка,img,jpg,изображение,снимка
|
||||||
@ -1205,6 +1209,12 @@ addImage.everyPage=Всяка страница?
|
|||||||
addImage.upload=Добавяне на изображение
|
addImage.upload=Добавяне на изображение
|
||||||
addImage.submit=Добавяне на изображение
|
addImage.submit=Добавяне на изображение
|
||||||
|
|
||||||
|
#attachments
|
||||||
|
attachments.title=Add Attachments
|
||||||
|
attachments.header=Add attachments
|
||||||
|
attachments.description=Allows you to add attachments to the PDF
|
||||||
|
attachments.descriptionPlaceholder=Enter a description for the attachments...
|
||||||
|
attachments.addButton=Add Attachments
|
||||||
|
|
||||||
#merge
|
#merge
|
||||||
merge.title=Обединяване
|
merge.title=Обединяване
|
||||||
@ -1594,6 +1604,7 @@ fileChooser.dragAndDropPDF=Влачете и пуснете PDF файл
|
|||||||
fileChooser.dragAndDropImage=Влачете и пуснете изображение
|
fileChooser.dragAndDropImage=Влачете и пуснете изображение
|
||||||
fileChooser.hoveredDragAndDrop=Влачете и пуснете файл(ове) тук
|
fileChooser.hoveredDragAndDrop=Влачете и пуснете файл(ове) тук
|
||||||
fileChooser.extractPDF=Извличане...
|
fileChooser.extractPDF=Извличане...
|
||||||
|
fileChooser.addAttachments=drag & drop attachments here
|
||||||
|
|
||||||
#release notes
|
#release notes
|
||||||
releases.footer=Версии
|
releases.footer=Версии
|
||||||
|
@ -525,6 +525,10 @@ home.addImage.title=པར་རིས་སྣོན་པ།
|
|||||||
home.addImage.desc=PDF ནང་གནས་ས་ངེས་ཅན་ཞིག་ཏུ་པར་རིས་སྣོན་པ།
|
home.addImage.desc=PDF ནང་གནས་ས་ངེས་ཅན་ཞིག་ཏུ་པར་རིས་སྣོན་པ།
|
||||||
addImage.tags=པར་རིས།,jpg,པར།,འདྲ་པར།
|
addImage.tags=པར་རིས།,jpg,པར།,འདྲ་པར།
|
||||||
|
|
||||||
|
home.attachments.title=Add Attachments
|
||||||
|
home.attachments.desc=Add or remove embedded files (attachments) to/from a PDF
|
||||||
|
attachments.tags=embed,attach,file,attachment,attachments
|
||||||
|
|
||||||
home.watermark.title=ཆུ་རྟགས་སྣོན་པ།
|
home.watermark.title=ཆུ་རྟགས་སྣོན་པ།
|
||||||
home.watermark.desc=PDF ཡིག་ཆར་རང་སྒྲིག་གི་ཆུ་རྟགས་སྣོན་པ།
|
home.watermark.desc=PDF ཡིག་ཆར་རང་སྒྲིག་གི་ཆུ་རྟགས་སྣོན་པ།
|
||||||
watermark.tags=ཡི་གེ,བསྐྱར་ཟློས།,ཁ་ཡིག,རང་དབང་།,པར་དབང་།,ཚོང་རྟགས།,པར་རིས།,jpg,པར།,འདྲ་པར།
|
watermark.tags=ཡི་གེ,བསྐྱར་ཟློས།,ཁ་ཡིག,རང་དབང་།,པར་དབང་།,ཚོང་རྟགས།,པར་རིས།,jpg,པར།,འདྲ་པར།
|
||||||
@ -1205,6 +1209,12 @@ addImage.everyPage=ཤོག་ངོས་ཚང་མར་ཡིན་ནམ
|
|||||||
addImage.upload=པར་རིས་སྣོན་པ།
|
addImage.upload=པར་རིས་སྣོན་པ།
|
||||||
addImage.submit=པར་རིས་སྣོན་པ།
|
addImage.submit=པར་རིས་སྣོན་པ།
|
||||||
|
|
||||||
|
#attachments
|
||||||
|
attachments.title=Add Attachments
|
||||||
|
attachments.header=Add attachments
|
||||||
|
attachments.description=Allows you to add attachments to the PDF
|
||||||
|
attachments.descriptionPlaceholder=Enter a description for the attachments...
|
||||||
|
attachments.addButton=Add Attachments
|
||||||
|
|
||||||
#merge
|
#merge
|
||||||
merge.title=སྡེབ་སྦྱོར།
|
merge.title=སྡེབ་སྦྱོར།
|
||||||
@ -1594,6 +1604,7 @@ fileChooser.dragAndDropPDF=PDF ཡིག་ཆ་འཐེན་ནས་འཇ
|
|||||||
fileChooser.dragAndDropImage=པར་རིས་ཡིག་ཆ་འཐེན་ནས་འཇོག་པ།
|
fileChooser.dragAndDropImage=པར་རིས་ཡིག་ཆ་འཐེན་ནས་འཇོག་པ།
|
||||||
fileChooser.hoveredDragAndDrop=ཡིག་ཆ་འདིར་འཐེན་ནས་འཇོག་པ།
|
fileChooser.hoveredDragAndDrop=ཡིག་ཆ་འདིར་འཐེན་ནས་འཇོག་པ།
|
||||||
fileChooser.extractPDF=འདོན་རིས་འགྱུར་བའི་སྒྲིག་བཏང་བ།
|
fileChooser.extractPDF=འདོན་རིས་འགྱུར་བའི་སྒྲིག་བཏང་བ།
|
||||||
|
fileChooser.addAttachments=drag & drop attachments here
|
||||||
|
|
||||||
#release notes
|
#release notes
|
||||||
releases.footer=པར་གཞི།
|
releases.footer=པར་གཞི།
|
||||||
|
@ -525,6 +525,10 @@ home.addImage.title=Afegir imatge a PDF
|
|||||||
home.addImage.desc=Afegeix una imatge en un PDF (en progrés)
|
home.addImage.desc=Afegeix una imatge en un PDF (en progrés)
|
||||||
addImage.tags=img,jpg,imatge,foto
|
addImage.tags=img,jpg,imatge,foto
|
||||||
|
|
||||||
|
home.attachments.title=Add Attachments
|
||||||
|
home.attachments.desc=Add or remove embedded files (attachments) to/from a PDF
|
||||||
|
attachments.tags=embed,attach,file,attachment,attachments
|
||||||
|
|
||||||
home.watermark.title=Afegir Marca d'aigua
|
home.watermark.title=Afegir Marca d'aigua
|
||||||
home.watermark.desc=Afegir una marca d'aigua personalitzada en un PDF
|
home.watermark.desc=Afegir una marca d'aigua personalitzada en un PDF
|
||||||
watermark.tags=text,repetició,etiqueta,propia,copyright,marca registrada,img,jpg,imatge,foto
|
watermark.tags=text,repetició,etiqueta,propia,copyright,marca registrada,img,jpg,imatge,foto
|
||||||
@ -1205,6 +1209,12 @@ addImage.everyPage=Totes les pàgines?
|
|||||||
addImage.upload=Afegir Imatge
|
addImage.upload=Afegir Imatge
|
||||||
addImage.submit=Afegir Imatge
|
addImage.submit=Afegir Imatge
|
||||||
|
|
||||||
|
#attachments
|
||||||
|
attachments.title=Add Attachments
|
||||||
|
attachments.header=Add attachments
|
||||||
|
attachments.description=Allows you to add attachments to the PDF
|
||||||
|
attachments.descriptionPlaceholder=Enter a description for the attachments...
|
||||||
|
attachments.addButton=Add Attachments
|
||||||
|
|
||||||
#merge
|
#merge
|
||||||
merge.title=Fusiona
|
merge.title=Fusiona
|
||||||
@ -1594,6 +1604,7 @@ fileChooser.dragAndDropPDF=Arrossega i deixa anar un fitxer PDF
|
|||||||
fileChooser.dragAndDropImage=Arrossega i deixa anar un fitxer d'imatge
|
fileChooser.dragAndDropImage=Arrossega i deixa anar un fitxer d'imatge
|
||||||
fileChooser.hoveredDragAndDrop=Arrossega i deixa anar fitxer(s) aquí
|
fileChooser.hoveredDragAndDrop=Arrossega i deixa anar fitxer(s) aquí
|
||||||
fileChooser.extractPDF=Extracting...
|
fileChooser.extractPDF=Extracting...
|
||||||
|
fileChooser.addAttachments=drag & drop attachments here
|
||||||
|
|
||||||
#release notes
|
#release notes
|
||||||
releases.footer=Llançaments
|
releases.footer=Llançaments
|
||||||
|
@ -525,6 +525,10 @@ home.addImage.title=Přidat obrázek
|
|||||||
home.addImage.desc=Přidá obrázek na určené místo v PDF
|
home.addImage.desc=Přidá obrázek na určené místo v PDF
|
||||||
addImage.tags=img,jpg,obrázek,fotka
|
addImage.tags=img,jpg,obrázek,fotka
|
||||||
|
|
||||||
|
home.attachments.title=Add Attachments
|
||||||
|
home.attachments.desc=Add or remove embedded files (attachments) to/from a PDF
|
||||||
|
attachments.tags=embed,attach,file,attachment,attachments
|
||||||
|
|
||||||
home.watermark.title=Přidat vodoznak
|
home.watermark.title=Přidat vodoznak
|
||||||
home.watermark.desc=Přidat vlastní vodoznak do vašeho PDF dokumentu.
|
home.watermark.desc=Přidat vlastní vodoznak do vašeho PDF dokumentu.
|
||||||
watermark.tags=Text,opakující se,popisek,vlastní,copyright,ochranná známka,img,jpg,obrázek,fotka
|
watermark.tags=Text,opakující se,popisek,vlastní,copyright,ochranná známka,img,jpg,obrázek,fotka
|
||||||
@ -1205,6 +1209,12 @@ addImage.everyPage=Každá stránka?
|
|||||||
addImage.upload=Přidat obrázek
|
addImage.upload=Přidat obrázek
|
||||||
addImage.submit=Přidat obrázek
|
addImage.submit=Přidat obrázek
|
||||||
|
|
||||||
|
#attachments
|
||||||
|
attachments.title=Add Attachments
|
||||||
|
attachments.header=Add attachments
|
||||||
|
attachments.description=Allows you to add attachments to the PDF
|
||||||
|
attachments.descriptionPlaceholder=Enter a description for the attachments...
|
||||||
|
attachments.addButton=Add Attachments
|
||||||
|
|
||||||
#merge
|
#merge
|
||||||
merge.title=Sloučit
|
merge.title=Sloučit
|
||||||
@ -1594,6 +1604,7 @@ fileChooser.dragAndDropPDF=Přetáhnout PDF soubor
|
|||||||
fileChooser.dragAndDropImage=Přetáhnout obrázek
|
fileChooser.dragAndDropImage=Přetáhnout obrázek
|
||||||
fileChooser.hoveredDragAndDrop=Přetáhněte soubor(y) sem
|
fileChooser.hoveredDragAndDrop=Přetáhněte soubor(y) sem
|
||||||
fileChooser.extractPDF=Extrahování...
|
fileChooser.extractPDF=Extrahování...
|
||||||
|
fileChooser.addAttachments=drag & drop attachments here
|
||||||
|
|
||||||
#release notes
|
#release notes
|
||||||
releases.footer=Vydání
|
releases.footer=Vydání
|
||||||
|
@ -525,6 +525,10 @@ home.addImage.title=Tilføj billede
|
|||||||
home.addImage.desc=Tilføjer et billede på en bestemt placering på PDF'en
|
home.addImage.desc=Tilføjer et billede på en bestemt placering på PDF'en
|
||||||
addImage.tags=img,jpg,billede,foto
|
addImage.tags=img,jpg,billede,foto
|
||||||
|
|
||||||
|
home.attachments.title=Add Attachments
|
||||||
|
home.attachments.desc=Add or remove embedded files (attachments) to/from a PDF
|
||||||
|
attachments.tags=embed,attach,file,attachment,attachments
|
||||||
|
|
||||||
home.watermark.title=Tilføj Vandmærke
|
home.watermark.title=Tilføj Vandmærke
|
||||||
home.watermark.desc=Tilføj et brugerdefineret vandmærke til dit PDF-dokument.
|
home.watermark.desc=Tilføj et brugerdefineret vandmærke til dit PDF-dokument.
|
||||||
watermark.tags=Tekst,gentagne,etiket,egen,ophavsret,varemærke,img,jpg,billede,foto
|
watermark.tags=Tekst,gentagne,etiket,egen,ophavsret,varemærke,img,jpg,billede,foto
|
||||||
@ -1205,6 +1209,12 @@ addImage.everyPage=Hver Side?
|
|||||||
addImage.upload=Tilføj billede
|
addImage.upload=Tilføj billede
|
||||||
addImage.submit=Tilføj billede
|
addImage.submit=Tilføj billede
|
||||||
|
|
||||||
|
#attachments
|
||||||
|
attachments.title=Add Attachments
|
||||||
|
attachments.header=Add attachments
|
||||||
|
attachments.description=Allows you to add attachments to the PDF
|
||||||
|
attachments.descriptionPlaceholder=Enter a description for the attachments...
|
||||||
|
attachments.addButton=Add Attachments
|
||||||
|
|
||||||
#merge
|
#merge
|
||||||
merge.title=Flet
|
merge.title=Flet
|
||||||
@ -1594,6 +1604,7 @@ fileChooser.dragAndDropPDF=Drag & Drop PDF file
|
|||||||
fileChooser.dragAndDropImage=Drag & Drop Image file
|
fileChooser.dragAndDropImage=Drag & Drop Image file
|
||||||
fileChooser.hoveredDragAndDrop=Drag & Drop file(s) here
|
fileChooser.hoveredDragAndDrop=Drag & Drop file(s) here
|
||||||
fileChooser.extractPDF=Extracting...
|
fileChooser.extractPDF=Extracting...
|
||||||
|
fileChooser.addAttachments=drag & drop attachments here
|
||||||
|
|
||||||
#release notes
|
#release notes
|
||||||
releases.footer=Releases
|
releases.footer=Releases
|
||||||
|
@ -525,6 +525,10 @@ home.addImage.title=Bild einfügen
|
|||||||
home.addImage.desc=Fügt ein Bild an eine bestimmte Stelle im PDF ein (in Arbeit)
|
home.addImage.desc=Fügt ein Bild an eine bestimmte Stelle im PDF ein (in Arbeit)
|
||||||
addImage.tags=img,jpg,bild,foto
|
addImage.tags=img,jpg,bild,foto
|
||||||
|
|
||||||
|
home.attachments.title=Add Attachments
|
||||||
|
home.attachments.desc=Add or remove embedded files (attachments) to/from a PDF
|
||||||
|
attachments.tags=embed,attach,file,attachment,attachments
|
||||||
|
|
||||||
home.watermark.title=Wasserzeichen hinzufügen
|
home.watermark.title=Wasserzeichen hinzufügen
|
||||||
home.watermark.desc=Fügen Sie ein eigenes Wasserzeichen zu Ihrem PDF hinzu
|
home.watermark.desc=Fügen Sie ein eigenes Wasserzeichen zu Ihrem PDF hinzu
|
||||||
watermark.tags=text,wiederholend,beschriftung,besitzen,urheberrecht,marke,img,jpg,bild,foto
|
watermark.tags=text,wiederholend,beschriftung,besitzen,urheberrecht,marke,img,jpg,bild,foto
|
||||||
@ -1205,6 +1209,12 @@ addImage.everyPage=In jede Seite einfügen?
|
|||||||
addImage.upload=Bild hinzufügen
|
addImage.upload=Bild hinzufügen
|
||||||
addImage.submit=Bild hinzufügen
|
addImage.submit=Bild hinzufügen
|
||||||
|
|
||||||
|
#attachments
|
||||||
|
attachments.title=Add Attachments
|
||||||
|
attachments.header=Add attachments
|
||||||
|
attachments.description=Allows you to add attachments to the PDF
|
||||||
|
attachments.descriptionPlaceholder=Enter a description for the attachments...
|
||||||
|
attachments.addButton=Add Attachments
|
||||||
|
|
||||||
#merge
|
#merge
|
||||||
merge.title=Zusammenführen
|
merge.title=Zusammenführen
|
||||||
@ -1594,6 +1604,7 @@ fileChooser.dragAndDropPDF=Drag & Drop PDF-Datei
|
|||||||
fileChooser.dragAndDropImage=Drag & Drop Bilddatei
|
fileChooser.dragAndDropImage=Drag & Drop Bilddatei
|
||||||
fileChooser.hoveredDragAndDrop=Datei(en) hierhin Ziehen & Fallenlassen
|
fileChooser.hoveredDragAndDrop=Datei(en) hierhin Ziehen & Fallenlassen
|
||||||
fileChooser.extractPDF=Extrahiere...
|
fileChooser.extractPDF=Extrahiere...
|
||||||
|
fileChooser.addAttachments=drag & drop attachments here
|
||||||
|
|
||||||
#release notes
|
#release notes
|
||||||
releases.footer=Veröffentlichungen
|
releases.footer=Veröffentlichungen
|
||||||
|
@ -525,6 +525,10 @@ home.addImage.title=Προσθήκη εικόνας
|
|||||||
home.addImage.desc=Προσθήκη εικόνας σε συγκεκριμένη θέση στο PDF
|
home.addImage.desc=Προσθήκη εικόνας σε συγκεκριμένη θέση στο PDF
|
||||||
addImage.tags=εικόνα,jpg,φωτογραφία
|
addImage.tags=εικόνα,jpg,φωτογραφία
|
||||||
|
|
||||||
|
home.attachments.title=Add Attachments
|
||||||
|
home.attachments.desc=Add or remove embedded files (attachments) to/from a PDF
|
||||||
|
attachments.tags=embed,attach,file,attachment,attachments
|
||||||
|
|
||||||
home.watermark.title=Προσθήκη υδατογραφήματος
|
home.watermark.title=Προσθήκη υδατογραφήματος
|
||||||
home.watermark.desc=Προσθήκη προσαρμοσμένου υδατογραφήματος στο έγγραφο PDF.
|
home.watermark.desc=Προσθήκη προσαρμοσμένου υδατογραφήματος στο έγγραφο PDF.
|
||||||
watermark.tags=κείμενο,επαναλαμβανόμενο,ετικέτα,ιδιοκτησία,πνευματικά δικαιώματα,εμπορικό σήμα,εικόνα,jpg,φωτογραφία
|
watermark.tags=κείμενο,επαναλαμβανόμενο,ετικέτα,ιδιοκτησία,πνευματικά δικαιώματα,εμπορικό σήμα,εικόνα,jpg,φωτογραφία
|
||||||
@ -1205,6 +1209,12 @@ addImage.everyPage=Κάθε σελίδα;
|
|||||||
addImage.upload=Προσθήκη εικόνας
|
addImage.upload=Προσθήκη εικόνας
|
||||||
addImage.submit=Προσθήκη εικόνας
|
addImage.submit=Προσθήκη εικόνας
|
||||||
|
|
||||||
|
#attachments
|
||||||
|
attachments.title=Add Attachments
|
||||||
|
attachments.header=Add attachments
|
||||||
|
attachments.description=Allows you to add attachments to the PDF
|
||||||
|
attachments.descriptionPlaceholder=Enter a description for the attachments...
|
||||||
|
attachments.addButton=Add Attachments
|
||||||
|
|
||||||
#merge
|
#merge
|
||||||
merge.title=Συγχώνευση
|
merge.title=Συγχώνευση
|
||||||
@ -1594,6 +1604,7 @@ fileChooser.dragAndDropPDF=Σύρετε & αφήστε αρχείο PDF
|
|||||||
fileChooser.dragAndDropImage=Σύρετε & αφήστε αρχείο εικόνας
|
fileChooser.dragAndDropImage=Σύρετε & αφήστε αρχείο εικόνας
|
||||||
fileChooser.hoveredDragAndDrop=Σύρετε & αφήστε αρχείο(α) εδώ
|
fileChooser.hoveredDragAndDrop=Σύρετε & αφήστε αρχείο(α) εδώ
|
||||||
fileChooser.extractPDF=Εξαγωγή...
|
fileChooser.extractPDF=Εξαγωγή...
|
||||||
|
fileChooser.addAttachments=drag & drop attachments here
|
||||||
|
|
||||||
#release notes
|
#release notes
|
||||||
releases.footer=Εκδόσεις
|
releases.footer=Εκδόσεις
|
||||||
|
@ -525,6 +525,10 @@ home.addImage.title=Add image
|
|||||||
home.addImage.desc=Adds a image onto a set location on the PDF
|
home.addImage.desc=Adds a image onto a set location on the PDF
|
||||||
addImage.tags=img,jpg,picture,photo
|
addImage.tags=img,jpg,picture,photo
|
||||||
|
|
||||||
|
home.attachments.title=Add Attachments
|
||||||
|
home.attachments.desc=Add or remove embedded files (attachments) to/from a PDF
|
||||||
|
attachments.tags=embed,attach,file,attachment,attachments
|
||||||
|
|
||||||
home.watermark.title=Add Watermark
|
home.watermark.title=Add Watermark
|
||||||
home.watermark.desc=Add a custom watermark to your PDF document.
|
home.watermark.desc=Add a custom watermark to your PDF document.
|
||||||
watermark.tags=Text,repeating,label,own,copyright,trademark,img,jpg,picture,photo
|
watermark.tags=Text,repeating,label,own,copyright,trademark,img,jpg,picture,photo
|
||||||
@ -1205,6 +1209,12 @@ addImage.everyPage=Every Page?
|
|||||||
addImage.upload=Add image
|
addImage.upload=Add image
|
||||||
addImage.submit=Add image
|
addImage.submit=Add image
|
||||||
|
|
||||||
|
#attachments
|
||||||
|
attachments.title=Add Attachments
|
||||||
|
attachments.header=Add attachments
|
||||||
|
attachments.description=Allows you to add attachments to the PDF
|
||||||
|
attachments.descriptionPlaceholder=Enter a description for the attachments...
|
||||||
|
attachments.addButton=Add Attachments
|
||||||
|
|
||||||
#merge
|
#merge
|
||||||
merge.title=Merge
|
merge.title=Merge
|
||||||
@ -1594,6 +1604,7 @@ fileChooser.dragAndDropPDF=Drag & Drop PDF file
|
|||||||
fileChooser.dragAndDropImage=Drag & Drop Image file
|
fileChooser.dragAndDropImage=Drag & Drop Image file
|
||||||
fileChooser.hoveredDragAndDrop=Drag & Drop file(s) here
|
fileChooser.hoveredDragAndDrop=Drag & Drop file(s) here
|
||||||
fileChooser.extractPDF=Extracting...
|
fileChooser.extractPDF=Extracting...
|
||||||
|
fileChooser.addAttachments=drag & drop attachments here
|
||||||
|
|
||||||
#release notes
|
#release notes
|
||||||
releases.footer=Releases
|
releases.footer=Releases
|
||||||
|
@ -525,6 +525,10 @@ home.addImage.title=Agregar imagen al PDF
|
|||||||
home.addImage.desc=Agregar una imagen en el PDF en una ubicación establecida (en desarrollo)
|
home.addImage.desc=Agregar una imagen en el PDF en una ubicación establecida (en desarrollo)
|
||||||
addImage.tags=img,jpg,imagen,fotografía
|
addImage.tags=img,jpg,imagen,fotografía
|
||||||
|
|
||||||
|
home.attachments.title=Add Attachments
|
||||||
|
home.attachments.desc=Add or remove embedded files (attachments) to/from a PDF
|
||||||
|
attachments.tags=embed,attach,file,attachment,attachments
|
||||||
|
|
||||||
home.watermark.title=Añadir marca de agua
|
home.watermark.title=Añadir marca de agua
|
||||||
home.watermark.desc=Añadir una marca de agua predefinida al documento PDF
|
home.watermark.desc=Añadir una marca de agua predefinida al documento PDF
|
||||||
watermark.tags=Texto,repetir,etiquetar,propietario,copyright,marca comercial,img,jpg,imagen,fotografía
|
watermark.tags=Texto,repetir,etiquetar,propietario,copyright,marca comercial,img,jpg,imagen,fotografía
|
||||||
@ -1205,6 +1209,12 @@ addImage.everyPage=¿Todas las páginas?
|
|||||||
addImage.upload=Añadir imagen
|
addImage.upload=Añadir imagen
|
||||||
addImage.submit=Enviar imagen
|
addImage.submit=Enviar imagen
|
||||||
|
|
||||||
|
#attachments
|
||||||
|
attachments.title=Add Attachments
|
||||||
|
attachments.header=Add attachments
|
||||||
|
attachments.description=Allows you to add attachments to the PDF
|
||||||
|
attachments.descriptionPlaceholder=Enter a description for the attachments...
|
||||||
|
attachments.addButton=Add Attachments
|
||||||
|
|
||||||
#merge
|
#merge
|
||||||
merge.title=Unir
|
merge.title=Unir
|
||||||
@ -1594,6 +1604,7 @@ fileChooser.dragAndDropPDF=Arrastrar & Soltar archivo PDF
|
|||||||
fileChooser.dragAndDropImage=Arrastrar & Soltar archivo de Imagen
|
fileChooser.dragAndDropImage=Arrastrar & Soltar archivo de Imagen
|
||||||
fileChooser.hoveredDragAndDrop=Arrastrar & Soltar archivos(s) aquí
|
fileChooser.hoveredDragAndDrop=Arrastrar & Soltar archivos(s) aquí
|
||||||
fileChooser.extractPDF=Extrayendo...
|
fileChooser.extractPDF=Extrayendo...
|
||||||
|
fileChooser.addAttachments=drag & drop attachments here
|
||||||
|
|
||||||
#release notes
|
#release notes
|
||||||
releases.footer=Versiones
|
releases.footer=Versiones
|
||||||
|
@ -525,6 +525,10 @@ home.addImage.title=Gehitu irudia PDFari
|
|||||||
home.addImage.desc=Gehitu irudi bat PDFan ezarritako kokaleku batean (lanean)
|
home.addImage.desc=Gehitu irudi bat PDFan ezarritako kokaleku batean (lanean)
|
||||||
addImage.tags=img,jpg,picture,photo
|
addImage.tags=img,jpg,picture,photo
|
||||||
|
|
||||||
|
home.attachments.title=Add Attachments
|
||||||
|
home.attachments.desc=Add or remove embedded files (attachments) to/from a PDF
|
||||||
|
attachments.tags=embed,attach,file,attachment,attachments
|
||||||
|
|
||||||
home.watermark.title=Gehitu ur-marka
|
home.watermark.title=Gehitu ur-marka
|
||||||
home.watermark.desc=Gehitu aurrez zehaztutako ur-marka bat PFD dokumentuari
|
home.watermark.desc=Gehitu aurrez zehaztutako ur-marka bat PFD dokumentuari
|
||||||
watermark.tags=Text,repeating,label,own,copyright,trademark,img,jpg,picture,photo
|
watermark.tags=Text,repeating,label,own,copyright,trademark,img,jpg,picture,photo
|
||||||
@ -1205,6 +1209,12 @@ addImage.everyPage=Orrialde guztiak?
|
|||||||
addImage.upload=Gehitu irudia
|
addImage.upload=Gehitu irudia
|
||||||
addImage.submit=Gehitu irudia
|
addImage.submit=Gehitu irudia
|
||||||
|
|
||||||
|
#attachments
|
||||||
|
attachments.title=Add Attachments
|
||||||
|
attachments.header=Add attachments
|
||||||
|
attachments.description=Allows you to add attachments to the PDF
|
||||||
|
attachments.descriptionPlaceholder=Enter a description for the attachments...
|
||||||
|
attachments.addButton=Add Attachments
|
||||||
|
|
||||||
#merge
|
#merge
|
||||||
merge.title=Elkartu
|
merge.title=Elkartu
|
||||||
@ -1594,6 +1604,7 @@ fileChooser.dragAndDropPDF=Drag & Drop PDF file
|
|||||||
fileChooser.dragAndDropImage=Drag & Drop Image file
|
fileChooser.dragAndDropImage=Drag & Drop Image file
|
||||||
fileChooser.hoveredDragAndDrop=Drag & Drop file(s) here
|
fileChooser.hoveredDragAndDrop=Drag & Drop file(s) here
|
||||||
fileChooser.extractPDF=Extracting...
|
fileChooser.extractPDF=Extracting...
|
||||||
|
fileChooser.addAttachments=drag & drop attachments here
|
||||||
|
|
||||||
#release notes
|
#release notes
|
||||||
releases.footer=Releases
|
releases.footer=Releases
|
||||||
|
@ -525,6 +525,10 @@ home.addImage.title=افزودن تصویر
|
|||||||
home.addImage.desc=افزودن یک تصویر به یک مکان مشخص در PDF
|
home.addImage.desc=افزودن یک تصویر به یک مکان مشخص در PDF
|
||||||
addImage.tags=تصویر،jpg،عکس
|
addImage.tags=تصویر،jpg،عکس
|
||||||
|
|
||||||
|
home.attachments.title=Add Attachments
|
||||||
|
home.attachments.desc=Add or remove embedded files (attachments) to/from a PDF
|
||||||
|
attachments.tags=embed,attach,file,attachment,attachments
|
||||||
|
|
||||||
home.watermark.title=افزودن واترمارک
|
home.watermark.title=افزودن واترمارک
|
||||||
home.watermark.desc=افزودن یک واترمارک سفارشی به سند PDF.
|
home.watermark.desc=افزودن یک واترمارک سفارشی به سند PDF.
|
||||||
watermark.tags=متن،تکراری،برچسب،خود،کپیرایت،علامت تجاری،تصویر،jpg،عکس
|
watermark.tags=متن،تکراری،برچسب،خود،کپیرایت،علامت تجاری،تصویر،jpg،عکس
|
||||||
@ -1205,6 +1209,12 @@ addImage.everyPage=هر صفحه؟
|
|||||||
addImage.upload=افزودن تصویر
|
addImage.upload=افزودن تصویر
|
||||||
addImage.submit=افزودن تصویر
|
addImage.submit=افزودن تصویر
|
||||||
|
|
||||||
|
#attachments
|
||||||
|
attachments.title=Add Attachments
|
||||||
|
attachments.header=Add attachments
|
||||||
|
attachments.description=Allows you to add attachments to the PDF
|
||||||
|
attachments.descriptionPlaceholder=Enter a description for the attachments...
|
||||||
|
attachments.addButton=Add Attachments
|
||||||
|
|
||||||
#merge
|
#merge
|
||||||
merge.title=ادغام
|
merge.title=ادغام
|
||||||
@ -1594,6 +1604,7 @@ fileChooser.dragAndDropPDF=Drag & Drop PDF file
|
|||||||
fileChooser.dragAndDropImage=Drag & Drop Image file
|
fileChooser.dragAndDropImage=Drag & Drop Image file
|
||||||
fileChooser.hoveredDragAndDrop=فایل(های) خود را اینجا بکشید و رها کنید
|
fileChooser.hoveredDragAndDrop=فایل(های) خود را اینجا بکشید و رها کنید
|
||||||
fileChooser.extractPDF=در حال استخراج...
|
fileChooser.extractPDF=در حال استخراج...
|
||||||
|
fileChooser.addAttachments=drag & drop attachments here
|
||||||
|
|
||||||
#release notes
|
#release notes
|
||||||
releases.footer=نسخهها
|
releases.footer=نسخهها
|
||||||
|
@ -525,6 +525,10 @@ home.addImage.title=Ajouter une image
|
|||||||
home.addImage.desc=Ajoutez une image à un emplacement défini sur un PDF.
|
home.addImage.desc=Ajoutez une image à un emplacement défini sur un PDF.
|
||||||
addImage.tags=img,jpg,image,photo
|
addImage.tags=img,jpg,image,photo
|
||||||
|
|
||||||
|
home.attachments.title=Add Attachments
|
||||||
|
home.attachments.desc=Add or remove embedded files (attachments) to/from a PDF
|
||||||
|
attachments.tags=embed,attach,file,attachment,attachments
|
||||||
|
|
||||||
home.watermark.title=Ajouter un filigrane
|
home.watermark.title=Ajouter un filigrane
|
||||||
home.watermark.desc=Ajoutez un filigrane personnalisé à votre PDF.
|
home.watermark.desc=Ajoutez un filigrane personnalisé à votre PDF.
|
||||||
watermark.tags=texte,filigrane,label,propriété,droit d'auteur,marque déposée,img,jpg,image,photo,copyright,trademark
|
watermark.tags=texte,filigrane,label,propriété,droit d'auteur,marque déposée,img,jpg,image,photo,copyright,trademark
|
||||||
@ -1205,6 +1209,12 @@ addImage.everyPage=Toutes les pages ?
|
|||||||
addImage.upload=Télécharger une image
|
addImage.upload=Télécharger une image
|
||||||
addImage.submit=Ajouter une image
|
addImage.submit=Ajouter une image
|
||||||
|
|
||||||
|
#attachments
|
||||||
|
attachments.title=Add Attachments
|
||||||
|
attachments.header=Add attachments
|
||||||
|
attachments.description=Allows you to add attachments to the PDF
|
||||||
|
attachments.descriptionPlaceholder=Enter a description for the attachments...
|
||||||
|
attachments.addButton=Add Attachments
|
||||||
|
|
||||||
#merge
|
#merge
|
||||||
merge.title=Fusionner
|
merge.title=Fusionner
|
||||||
@ -1594,6 +1604,7 @@ fileChooser.dragAndDropPDF=Drag & Drop PDF file
|
|||||||
fileChooser.dragAndDropImage=Drag & Drop Image file
|
fileChooser.dragAndDropImage=Drag & Drop Image file
|
||||||
fileChooser.hoveredDragAndDrop=Glisser & Déposer le(s) fichier(s) ici
|
fileChooser.hoveredDragAndDrop=Glisser & Déposer le(s) fichier(s) ici
|
||||||
fileChooser.extractPDF=Extraction en cours...
|
fileChooser.extractPDF=Extraction en cours...
|
||||||
|
fileChooser.addAttachments=drag & drop attachments here
|
||||||
|
|
||||||
#release notes
|
#release notes
|
||||||
releases.footer=Versions
|
releases.footer=Versions
|
||||||
|
@ -525,6 +525,10 @@ home.addImage.title=Cuir íomhá leis
|
|||||||
home.addImage.desc=Cuireann sé íomhá ar shuíomh socraithe ar an PDF
|
home.addImage.desc=Cuireann sé íomhá ar shuíomh socraithe ar an PDF
|
||||||
addImage.tags=img, jpg, pictiúr, grianghraf
|
addImage.tags=img, jpg, pictiúr, grianghraf
|
||||||
|
|
||||||
|
home.attachments.title=Add Attachments
|
||||||
|
home.attachments.desc=Add or remove embedded files (attachments) to/from a PDF
|
||||||
|
attachments.tags=embed,attach,file,attachment,attachments
|
||||||
|
|
||||||
home.watermark.title=Cuir Uisce leis
|
home.watermark.title=Cuir Uisce leis
|
||||||
home.watermark.desc=Cuir comhartha uisce saincheaptha le do dhoiciméad PDF.
|
home.watermark.desc=Cuir comhartha uisce saincheaptha le do dhoiciméad PDF.
|
||||||
watermark.tags=Téacs, athrá, lipéad, úinéireacht, cóipcheart, trádmharc, img, jpg, pictiúr, grianghraf
|
watermark.tags=Téacs, athrá, lipéad, úinéireacht, cóipcheart, trádmharc, img, jpg, pictiúr, grianghraf
|
||||||
@ -1205,6 +1209,12 @@ addImage.everyPage=Gach Leathanach?
|
|||||||
addImage.upload=Cuir íomhá leis
|
addImage.upload=Cuir íomhá leis
|
||||||
addImage.submit=Cuir íomhá leis
|
addImage.submit=Cuir íomhá leis
|
||||||
|
|
||||||
|
#attachments
|
||||||
|
attachments.title=Add Attachments
|
||||||
|
attachments.header=Add attachments
|
||||||
|
attachments.description=Allows you to add attachments to the PDF
|
||||||
|
attachments.descriptionPlaceholder=Enter a description for the attachments...
|
||||||
|
attachments.addButton=Add Attachments
|
||||||
|
|
||||||
#merge
|
#merge
|
||||||
merge.title=Cumaisc
|
merge.title=Cumaisc
|
||||||
@ -1594,6 +1604,7 @@ fileChooser.dragAndDropPDF=Tarraing & Scaoil comhad PDF
|
|||||||
fileChooser.dragAndDropImage=Tarraing & Scaoil comhad Íomhá
|
fileChooser.dragAndDropImage=Tarraing & Scaoil comhad Íomhá
|
||||||
fileChooser.hoveredDragAndDrop=Tarraing agus scaoil comhad(í) anseo
|
fileChooser.hoveredDragAndDrop=Tarraing agus scaoil comhad(í) anseo
|
||||||
fileChooser.extractPDF=Ag Aistriú...
|
fileChooser.extractPDF=Ag Aistriú...
|
||||||
|
fileChooser.addAttachments=drag & drop attachments here
|
||||||
|
|
||||||
#release notes
|
#release notes
|
||||||
releases.footer=Eisiúintí
|
releases.footer=Eisiúintí
|
||||||
|
@ -525,6 +525,10 @@ home.addImage.title=छवि जोड़ें
|
|||||||
home.addImage.desc=PDF पर एक निर्धारित स्थान पर छवि जोड़ें
|
home.addImage.desc=PDF पर एक निर्धारित स्थान पर छवि जोड़ें
|
||||||
addImage.tags=img,jpg,चित्र,फोटो
|
addImage.tags=img,jpg,चित्र,फोटो
|
||||||
|
|
||||||
|
home.attachments.title=Add Attachments
|
||||||
|
home.attachments.desc=Add or remove embedded files (attachments) to/from a PDF
|
||||||
|
attachments.tags=embed,attach,file,attachment,attachments
|
||||||
|
|
||||||
home.watermark.title=वॉटरमार्क जोड़ें
|
home.watermark.title=वॉटरमार्क जोड़ें
|
||||||
home.watermark.desc=अपने PDF दस्तावेज में कस्टम वॉटरमार्क जोड़ें।
|
home.watermark.desc=अपने PDF दस्तावेज में कस्टम वॉटरमार्क जोड़ें।
|
||||||
watermark.tags=टेक्स्ट,दोहराव,लेबल,स्वयं,कॉपीराइट,ट्रेडमार्क,img,jpg,चित्र,फोटो
|
watermark.tags=टेक्स्ट,दोहराव,लेबल,स्वयं,कॉपीराइट,ट्रेडमार्क,img,jpg,चित्र,फोटो
|
||||||
@ -1205,6 +1209,12 @@ addImage.everyPage=हर पृष्ठ?
|
|||||||
addImage.upload=छवि जोड़ें
|
addImage.upload=छवि जोड़ें
|
||||||
addImage.submit=छवि जोड़ें
|
addImage.submit=छवि जोड़ें
|
||||||
|
|
||||||
|
#attachments
|
||||||
|
attachments.title=Add Attachments
|
||||||
|
attachments.header=Add attachments
|
||||||
|
attachments.description=Allows you to add attachments to the PDF
|
||||||
|
attachments.descriptionPlaceholder=Enter a description for the attachments...
|
||||||
|
attachments.addButton=Add Attachments
|
||||||
|
|
||||||
#merge
|
#merge
|
||||||
merge.title=मर्ज करें
|
merge.title=मर्ज करें
|
||||||
@ -1594,6 +1604,7 @@ fileChooser.dragAndDropPDF=PDF फ़ाइल खींचें और छो
|
|||||||
fileChooser.dragAndDropImage=छवि फ़ाइल खींचें और छोड़ें
|
fileChooser.dragAndDropImage=छवि फ़ाइल खींचें और छोड़ें
|
||||||
fileChooser.hoveredDragAndDrop=फ़ाइल(ें) यहाँ खींचें और छोड़ें
|
fileChooser.hoveredDragAndDrop=फ़ाइल(ें) यहाँ खींचें और छोड़ें
|
||||||
fileChooser.extractPDF=निकालना...
|
fileChooser.extractPDF=निकालना...
|
||||||
|
fileChooser.addAttachments=drag & drop attachments here
|
||||||
|
|
||||||
#release notes
|
#release notes
|
||||||
releases.footer=रिलीज़
|
releases.footer=रिलीज़
|
||||||
|
@ -525,6 +525,10 @@ home.addImage.title=Dodaj sliku
|
|||||||
home.addImage.desc=Dodaje sliku na zadano mjesto u PDF-u
|
home.addImage.desc=Dodaje sliku na zadano mjesto u PDF-u
|
||||||
addImage.tags=img,jpg,slika,foto
|
addImage.tags=img,jpg,slika,foto
|
||||||
|
|
||||||
|
home.attachments.title=Add Attachments
|
||||||
|
home.attachments.desc=Add or remove embedded files (attachments) to/from a PDF
|
||||||
|
attachments.tags=embed,attach,file,attachment,attachments
|
||||||
|
|
||||||
home.watermark.title=Dodaj vodeni žig
|
home.watermark.title=Dodaj vodeni žig
|
||||||
home.watermark.desc=DDodajte prilagođeni vodeni žig svom PDF dokumentu.
|
home.watermark.desc=DDodajte prilagođeni vodeni žig svom PDF dokumentu.
|
||||||
watermark.tags=Tekst,ponavljanje,etiketa,vlastiti,autorsko pravo,zaštita, img,jpg,slika,foto
|
watermark.tags=Tekst,ponavljanje,etiketa,vlastiti,autorsko pravo,zaštita, img,jpg,slika,foto
|
||||||
@ -1205,6 +1209,12 @@ addImage.everyPage=Na svakoj stranici?
|
|||||||
addImage.upload=Dodaj sliku
|
addImage.upload=Dodaj sliku
|
||||||
addImage.submit=Dodaj sliku
|
addImage.submit=Dodaj sliku
|
||||||
|
|
||||||
|
#attachments
|
||||||
|
attachments.title=Add Attachments
|
||||||
|
attachments.header=Add attachments
|
||||||
|
attachments.description=Allows you to add attachments to the PDF
|
||||||
|
attachments.descriptionPlaceholder=Enter a description for the attachments...
|
||||||
|
attachments.addButton=Add Attachments
|
||||||
|
|
||||||
#merge
|
#merge
|
||||||
merge.title=Spajanje
|
merge.title=Spajanje
|
||||||
@ -1594,6 +1604,7 @@ fileChooser.dragAndDropPDF=Drag & Drop PDF file
|
|||||||
fileChooser.dragAndDropImage=Drag & Drop Image file
|
fileChooser.dragAndDropImage=Drag & Drop Image file
|
||||||
fileChooser.hoveredDragAndDrop=Drag & Drop file(s) here
|
fileChooser.hoveredDragAndDrop=Drag & Drop file(s) here
|
||||||
fileChooser.extractPDF=Extracting...
|
fileChooser.extractPDF=Extracting...
|
||||||
|
fileChooser.addAttachments=drag & drop attachments here
|
||||||
|
|
||||||
#release notes
|
#release notes
|
||||||
releases.footer=Releases
|
releases.footer=Releases
|
||||||
|
@ -525,6 +525,10 @@ home.addImage.title=Kép hozzáadása
|
|||||||
home.addImage.desc=Kép hozzáadása a PDF megadott helyére
|
home.addImage.desc=Kép hozzáadása a PDF megadott helyére
|
||||||
addImage.tags=kép,jpg,fotó,fénykép
|
addImage.tags=kép,jpg,fotó,fénykép
|
||||||
|
|
||||||
|
home.attachments.title=Add Attachments
|
||||||
|
home.attachments.desc=Add or remove embedded files (attachments) to/from a PDF
|
||||||
|
attachments.tags=embed,attach,file,attachment,attachments
|
||||||
|
|
||||||
home.watermark.title=Vízjel hozzáadása
|
home.watermark.title=Vízjel hozzáadása
|
||||||
home.watermark.desc=Egyedi vízjel hozzáadása PDF dokumentumhoz
|
home.watermark.desc=Egyedi vízjel hozzáadása PDF dokumentumhoz
|
||||||
watermark.tags=Szöveg,ismétlődő,címke,egyedi,szerzői jog,védjegy,kép,jpg,fotó,fénykép
|
watermark.tags=Szöveg,ismétlődő,címke,egyedi,szerzői jog,védjegy,kép,jpg,fotó,fénykép
|
||||||
@ -676,7 +680,7 @@ home.HTMLToPDF.desc=HTML fájl vagy ZIP konvertálása PDF-be
|
|||||||
HTMLToPDF.tags=jelölőnyelv,webtartalom,átalakítás,konvertálás
|
HTMLToPDF.tags=jelölőnyelv,webtartalom,átalakítás,konvertálás
|
||||||
|
|
||||||
#eml-to-pdf
|
#eml-to-pdf
|
||||||
home.EMLToPDF.title=E-mail PDF-be
|
home.EMLToPDF.title=E-mail konvertálása PDF-be
|
||||||
home.EMLToPDF.desc=E-mail (EML) fájlok konvertálása PDF formátumba, beleértve a fejléceket, törzset és beágyazott képeket
|
home.EMLToPDF.desc=E-mail (EML) fájlok konvertálása PDF formátumba, beleértve a fejléceket, törzset és beágyazott képeket
|
||||||
EMLToPDF.tags=e-mail,konverzió,eml,üzenet,átalakítás,konvertálás,levél
|
EMLToPDF.tags=e-mail,konverzió,eml,üzenet,átalakítás,konvertálás,levél
|
||||||
|
|
||||||
@ -1205,6 +1209,12 @@ addImage.everyPage=Minden oldalra?
|
|||||||
addImage.upload=Kép hozzáadása
|
addImage.upload=Kép hozzáadása
|
||||||
addImage.submit=Kép hozzáadása
|
addImage.submit=Kép hozzáadása
|
||||||
|
|
||||||
|
#attachments
|
||||||
|
attachments.title=Mellékletek hozzáadása
|
||||||
|
attachments.header=Mellékletek hozzáadása
|
||||||
|
attachments.description=Lehetővé teszi mellékletek hozzáadását a PDF-hez
|
||||||
|
attachments.descriptionPlaceholder=Adjon meg egy leírást a mellékletekhez...
|
||||||
|
attachments.addButton=Mellékletek hozzáadása
|
||||||
|
|
||||||
#merge
|
#merge
|
||||||
merge.title=Egyesítés
|
merge.title=Egyesítés
|
||||||
@ -1594,6 +1604,7 @@ fileChooser.dragAndDropPDF=Húzza ide a PDF fájlt
|
|||||||
fileChooser.dragAndDropImage=Húzza ide a képfájlt
|
fileChooser.dragAndDropImage=Húzza ide a képfájlt
|
||||||
fileChooser.hoveredDragAndDrop=Húzza ide a fájl(oka)t
|
fileChooser.hoveredDragAndDrop=Húzza ide a fájl(oka)t
|
||||||
fileChooser.extractPDF=Kinyerés...
|
fileChooser.extractPDF=Kinyerés...
|
||||||
|
fileChooser.addAttachments=drag & drop attachments here
|
||||||
|
|
||||||
#release notes
|
#release notes
|
||||||
releases.footer=Kiadási jegyzék
|
releases.footer=Kiadási jegyzék
|
||||||
|
@ -525,6 +525,10 @@ home.addImage.title=Tambahkan gambar
|
|||||||
home.addImage.desc=Menambahkan gambar ke lokasi yang ditentukan pada PDF
|
home.addImage.desc=Menambahkan gambar ke lokasi yang ditentukan pada PDF
|
||||||
addImage.tags=img,jpg,gambar,foto
|
addImage.tags=img,jpg,gambar,foto
|
||||||
|
|
||||||
|
home.attachments.title=Add Attachments
|
||||||
|
home.attachments.desc=Add or remove embedded files (attachments) to/from a PDF
|
||||||
|
attachments.tags=embed,attach,file,attachment,attachments
|
||||||
|
|
||||||
home.watermark.title=Tambahkan watermark
|
home.watermark.title=Tambahkan watermark
|
||||||
home.watermark.desc=Menambahkan watermark khusus ke dokumen PDF Anda.
|
home.watermark.desc=Menambahkan watermark khusus ke dokumen PDF Anda.
|
||||||
watermark.tags=Teks,berulang,label,sendiri,hak cipta,watermark,img,jpg,picture,photo
|
watermark.tags=Teks,berulang,label,sendiri,hak cipta,watermark,img,jpg,picture,photo
|
||||||
@ -1205,6 +1209,12 @@ addImage.everyPage=Setiap Halaman?
|
|||||||
addImage.upload=Tambahkan Gambar
|
addImage.upload=Tambahkan Gambar
|
||||||
addImage.submit=Tambahkan Gambar
|
addImage.submit=Tambahkan Gambar
|
||||||
|
|
||||||
|
#attachments
|
||||||
|
attachments.title=Add Attachments
|
||||||
|
attachments.header=Add attachments
|
||||||
|
attachments.description=Allows you to add attachments to the PDF
|
||||||
|
attachments.descriptionPlaceholder=Enter a description for the attachments...
|
||||||
|
attachments.addButton=Add Attachments
|
||||||
|
|
||||||
#merge
|
#merge
|
||||||
merge.title=Gabungkan
|
merge.title=Gabungkan
|
||||||
@ -1594,6 +1604,7 @@ fileChooser.dragAndDropPDF=Drag & Drop PDF file
|
|||||||
fileChooser.dragAndDropImage=Drag & Drop Image file
|
fileChooser.dragAndDropImage=Drag & Drop Image file
|
||||||
fileChooser.hoveredDragAndDrop=Drag & Drop file(s) here
|
fileChooser.hoveredDragAndDrop=Drag & Drop file(s) here
|
||||||
fileChooser.extractPDF=Extracting...
|
fileChooser.extractPDF=Extracting...
|
||||||
|
fileChooser.addAttachments=drag & drop attachments here
|
||||||
|
|
||||||
#release notes
|
#release notes
|
||||||
releases.footer=Releases
|
releases.footer=Releases
|
||||||
|
@ -525,6 +525,10 @@ home.addImage.title=Aggiungi Immagine
|
|||||||
home.addImage.desc=Aggiungi un'immagine in un punto specifico del PDF (Lavori in corso)
|
home.addImage.desc=Aggiungi un'immagine in un punto specifico del PDF (Lavori in corso)
|
||||||
addImage.tags=img,jpg,immagine,foto
|
addImage.tags=img,jpg,immagine,foto
|
||||||
|
|
||||||
|
home.attachments.title=Add Attachments
|
||||||
|
home.attachments.desc=Add or remove embedded files (attachments) to/from a PDF
|
||||||
|
attachments.tags=embed,attach,file,attachment,attachments
|
||||||
|
|
||||||
home.watermark.title=Aggiungi Filigrana
|
home.watermark.title=Aggiungi Filigrana
|
||||||
home.watermark.desc=Aggiungi una filigrana al tuo PDF.
|
home.watermark.desc=Aggiungi una filigrana al tuo PDF.
|
||||||
watermark.tags=Testo,ripetizione,etichetta,proprio,copyright,marchio,img,jpg,immagine,foto
|
watermark.tags=Testo,ripetizione,etichetta,proprio,copyright,marchio,img,jpg,immagine,foto
|
||||||
@ -1205,6 +1209,12 @@ addImage.everyPage=Ogni pagina?
|
|||||||
addImage.upload=Aggiungi immagine
|
addImage.upload=Aggiungi immagine
|
||||||
addImage.submit=Aggiungi immagine
|
addImage.submit=Aggiungi immagine
|
||||||
|
|
||||||
|
#attachments
|
||||||
|
attachments.title=Add Attachments
|
||||||
|
attachments.header=Add attachments
|
||||||
|
attachments.description=Allows you to add attachments to the PDF
|
||||||
|
attachments.descriptionPlaceholder=Enter a description for the attachments...
|
||||||
|
attachments.addButton=Add Attachments
|
||||||
|
|
||||||
#merge
|
#merge
|
||||||
merge.title=Unisci
|
merge.title=Unisci
|
||||||
@ -1594,6 +1604,7 @@ fileChooser.dragAndDropPDF=Trascina & rilascia il file PDF
|
|||||||
fileChooser.dragAndDropImage=Trascina & rilascia il file immagine
|
fileChooser.dragAndDropImage=Trascina & rilascia il file immagine
|
||||||
fileChooser.hoveredDragAndDrop=Trascina & rilascia i file qui
|
fileChooser.hoveredDragAndDrop=Trascina & rilascia i file qui
|
||||||
fileChooser.extractPDF=Estraendo...
|
fileChooser.extractPDF=Estraendo...
|
||||||
|
fileChooser.addAttachments=drag & drop attachments here
|
||||||
|
|
||||||
#release notes
|
#release notes
|
||||||
releases.footer=Rilasci
|
releases.footer=Rilasci
|
||||||
|
@ -525,6 +525,10 @@ home.addImage.title=画像の追加
|
|||||||
home.addImage.desc=PDF上の任意の場所に画像を追加します。
|
home.addImage.desc=PDF上の任意の場所に画像を追加します。
|
||||||
addImage.tags=img,jpg,picture,photo
|
addImage.tags=img,jpg,picture,photo
|
||||||
|
|
||||||
|
home.attachments.title=Add Attachments
|
||||||
|
home.attachments.desc=Add or remove embedded files (attachments) to/from a PDF
|
||||||
|
attachments.tags=embed,attach,file,attachment,attachments
|
||||||
|
|
||||||
home.watermark.title=透かしの追加
|
home.watermark.title=透かしの追加
|
||||||
home.watermark.desc=PDFに独自の透かしを追加します。
|
home.watermark.desc=PDFに独自の透かしを追加します。
|
||||||
watermark.tags=Text,repeating,label,own,copyright,trademark,img,jpg,picture,photo
|
watermark.tags=Text,repeating,label,own,copyright,trademark,img,jpg,picture,photo
|
||||||
@ -1205,6 +1209,12 @@ addImage.everyPage=全ページ?
|
|||||||
addImage.upload=画像の追加
|
addImage.upload=画像の追加
|
||||||
addImage.submit=画像の追加
|
addImage.submit=画像の追加
|
||||||
|
|
||||||
|
#attachments
|
||||||
|
attachments.title=Add Attachments
|
||||||
|
attachments.header=Add attachments
|
||||||
|
attachments.description=Allows you to add attachments to the PDF
|
||||||
|
attachments.descriptionPlaceholder=Enter a description for the attachments...
|
||||||
|
attachments.addButton=Add Attachments
|
||||||
|
|
||||||
#merge
|
#merge
|
||||||
merge.title=結合
|
merge.title=結合
|
||||||
@ -1594,6 +1604,7 @@ fileChooser.dragAndDropPDF=PDFファイルをドラッグ&ドロップ
|
|||||||
fileChooser.dragAndDropImage=画像ファイルをドラッグ&ドロップ
|
fileChooser.dragAndDropImage=画像ファイルをドラッグ&ドロップ
|
||||||
fileChooser.hoveredDragAndDrop=ファイルをここにドラッグ&ドロップ
|
fileChooser.hoveredDragAndDrop=ファイルをここにドラッグ&ドロップ
|
||||||
fileChooser.extractPDF=抽出中...
|
fileChooser.extractPDF=抽出中...
|
||||||
|
fileChooser.addAttachments=drag & drop attachments here
|
||||||
|
|
||||||
#release notes
|
#release notes
|
||||||
releases.footer=リリース
|
releases.footer=リリース
|
||||||
|
@ -525,6 +525,10 @@ home.addImage.title=이미지 추가
|
|||||||
home.addImage.desc=PDF의 지정된 위치에 이미지 추가
|
home.addImage.desc=PDF의 지정된 위치에 이미지 추가
|
||||||
addImage.tags=이미지,jpg,사진
|
addImage.tags=이미지,jpg,사진
|
||||||
|
|
||||||
|
home.attachments.title=Add Attachments
|
||||||
|
home.attachments.desc=Add or remove embedded files (attachments) to/from a PDF
|
||||||
|
attachments.tags=embed,attach,file,attachment,attachments
|
||||||
|
|
||||||
home.watermark.title=워터마크 추가
|
home.watermark.title=워터마크 추가
|
||||||
home.watermark.desc=PDF 문서에 사용자 지정 워터마크를 추가합니다.
|
home.watermark.desc=PDF 문서에 사용자 지정 워터마크를 추가합니다.
|
||||||
watermark.tags=텍스트,반복,레이블,소유,저작권,상표,이미지,jpg,사진
|
watermark.tags=텍스트,반복,레이블,소유,저작권,상표,이미지,jpg,사진
|
||||||
@ -1205,6 +1209,12 @@ addImage.everyPage=모든 페이지?
|
|||||||
addImage.upload=이미지 추가
|
addImage.upload=이미지 추가
|
||||||
addImage.submit=이미지 추가
|
addImage.submit=이미지 추가
|
||||||
|
|
||||||
|
#attachments
|
||||||
|
attachments.title=Add Attachments
|
||||||
|
attachments.header=Add attachments
|
||||||
|
attachments.description=Allows you to add attachments to the PDF
|
||||||
|
attachments.descriptionPlaceholder=Enter a description for the attachments...
|
||||||
|
attachments.addButton=Add Attachments
|
||||||
|
|
||||||
#merge
|
#merge
|
||||||
merge.title=병합
|
merge.title=병합
|
||||||
@ -1594,6 +1604,7 @@ fileChooser.dragAndDropPDF=PDF 파일을 드래그 앤 드롭
|
|||||||
fileChooser.dragAndDropImage=이미지 파일을 드래그 앤 드롭
|
fileChooser.dragAndDropImage=이미지 파일을 드래그 앤 드롭
|
||||||
fileChooser.hoveredDragAndDrop=여기에 파일을 드래그 앤 드롭하세요
|
fileChooser.hoveredDragAndDrop=여기에 파일을 드래그 앤 드롭하세요
|
||||||
fileChooser.extractPDF=추출 중...
|
fileChooser.extractPDF=추출 중...
|
||||||
|
fileChooser.addAttachments=drag & drop attachments here
|
||||||
|
|
||||||
#release notes
|
#release notes
|
||||||
releases.footer=릴리스
|
releases.footer=릴리스
|
||||||
|
@ -525,6 +525,10 @@ home.addImage.title=ചിത്രം ചേർക്കുക
|
|||||||
home.addImage.desc=PDF-ൽ ഒരു നിശ്ചിത സ്ഥാനത്ത് ഒരു ചിത്രം ചേർക്കുന്നു
|
home.addImage.desc=PDF-ൽ ഒരു നിശ്ചിത സ്ഥാനത്ത് ഒരു ചിത്രം ചേർക്കുന്നു
|
||||||
addImage.tags=img,jpg,ചിത്രം,ഫോട്ടോ
|
addImage.tags=img,jpg,ചിത്രം,ഫോട്ടോ
|
||||||
|
|
||||||
|
home.attachments.title=Add Attachments
|
||||||
|
home.attachments.desc=Add or remove embedded files (attachments) to/from a PDF
|
||||||
|
attachments.tags=embed,attach,file,attachment,attachments
|
||||||
|
|
||||||
home.watermark.title=വാട്ടർമാർക്ക് ചേർക്കുക
|
home.watermark.title=വാട്ടർമാർക്ക് ചേർക്കുക
|
||||||
home.watermark.desc=നിങ്ങളുടെ PDF പ്രമാണത്തിലേക്ക് ഒരു ഇഷ്ടാനുസൃത വാട്ടർമാർക്ക് ചേർക്കുക.
|
home.watermark.desc=നിങ്ങളുടെ PDF പ്രമാണത്തിലേക്ക് ഒരു ഇഷ്ടാനുസൃത വാട്ടർമാർക്ക് ചേർക്കുക.
|
||||||
watermark.tags=ടെക്സ്റ്റ്,ആവർത്തിക്കുന്ന,ലേബൽ,സ്വന്തം,പകർപ്പവകാശം,വ്യാപാരമുദ്ര,img,jpg,ചിത്രം,ഫോട്ടോ
|
watermark.tags=ടെക്സ്റ്റ്,ആവർത്തിക്കുന്ന,ലേബൽ,സ്വന്തം,പകർപ്പവകാശം,വ്യാപാരമുദ്ര,img,jpg,ചിത്രം,ഫോട്ടോ
|
||||||
@ -1205,6 +1209,12 @@ addImage.everyPage=എല്ലാ പേജിലും?
|
|||||||
addImage.upload=ചിത്രം ചേർക്കുക
|
addImage.upload=ചിത്രം ചേർക്കുക
|
||||||
addImage.submit=ചിത്രം ചേർക്കുക
|
addImage.submit=ചിത്രം ചേർക്കുക
|
||||||
|
|
||||||
|
#attachments
|
||||||
|
attachments.title=Add Attachments
|
||||||
|
attachments.header=Add attachments
|
||||||
|
attachments.description=Allows you to add attachments to the PDF
|
||||||
|
attachments.descriptionPlaceholder=Enter a description for the attachments...
|
||||||
|
attachments.addButton=Add Attachments
|
||||||
|
|
||||||
#merge
|
#merge
|
||||||
merge.title=ലയിപ്പിക്കുക
|
merge.title=ലയിപ്പിക്കുക
|
||||||
@ -1594,6 +1604,7 @@ fileChooser.dragAndDropPDF=PDF ഫയൽ വലിച്ചിടുക
|
|||||||
fileChooser.dragAndDropImage=ചിത്ര ഫയൽ വലിച്ചിടുക
|
fileChooser.dragAndDropImage=ചിത്ര ഫയൽ വലിച്ചിടുക
|
||||||
fileChooser.hoveredDragAndDrop=ഫയൽ(കൾ) ഇവിടെ വലിച്ചിടുക
|
fileChooser.hoveredDragAndDrop=ഫയൽ(കൾ) ഇവിടെ വലിച്ചിടുക
|
||||||
fileChooser.extractPDF=വേർതിരിച്ചെടുക്കുന്നു...
|
fileChooser.extractPDF=വേർതിരിച്ചെടുക്കുന്നു...
|
||||||
|
fileChooser.addAttachments=drag & drop attachments here
|
||||||
|
|
||||||
#release notes
|
#release notes
|
||||||
releases.footer=റിലീസുകൾ
|
releases.footer=റിലീസുകൾ
|
||||||
|
@ -525,6 +525,10 @@ home.addImage.title=Afbeelding toevoegen
|
|||||||
home.addImage.desc=Voegt een afbeelding toe op een specifieke locatie in de PDF
|
home.addImage.desc=Voegt een afbeelding toe op een specifieke locatie in de PDF
|
||||||
addImage.tags=img,jpg,foto
|
addImage.tags=img,jpg,foto
|
||||||
|
|
||||||
|
home.attachments.title=Add Attachments
|
||||||
|
home.attachments.desc=Add or remove embedded files (attachments) to/from a PDF
|
||||||
|
attachments.tags=embed,attach,file,attachment,attachments
|
||||||
|
|
||||||
home.watermark.title=Watermerk toevoegen
|
home.watermark.title=Watermerk toevoegen
|
||||||
home.watermark.desc=Voeg een aangepast watermerk toe aan je PDF-document.
|
home.watermark.desc=Voeg een aangepast watermerk toe aan je PDF-document.
|
||||||
watermark.tags=Tekst,herhalend,label,eigen,copyright,handelsmerk,img,jpg,foto
|
watermark.tags=Tekst,herhalend,label,eigen,copyright,handelsmerk,img,jpg,foto
|
||||||
@ -1205,6 +1209,12 @@ addImage.everyPage=Elke pagina?
|
|||||||
addImage.upload=Afbeelding toevoegen
|
addImage.upload=Afbeelding toevoegen
|
||||||
addImage.submit=Afbeelding toevoegen
|
addImage.submit=Afbeelding toevoegen
|
||||||
|
|
||||||
|
#attachments
|
||||||
|
attachments.title=Add Attachments
|
||||||
|
attachments.header=Add attachments
|
||||||
|
attachments.description=Allows you to add attachments to the PDF
|
||||||
|
attachments.descriptionPlaceholder=Enter a description for the attachments...
|
||||||
|
attachments.addButton=Add Attachments
|
||||||
|
|
||||||
#merge
|
#merge
|
||||||
merge.title=Samenvoegen
|
merge.title=Samenvoegen
|
||||||
@ -1594,6 +1604,7 @@ fileChooser.dragAndDropPDF=Drag & Drop PDF file
|
|||||||
fileChooser.dragAndDropImage=Drag & Drop Image file
|
fileChooser.dragAndDropImage=Drag & Drop Image file
|
||||||
fileChooser.hoveredDragAndDrop=Drag & Drop file(s) here
|
fileChooser.hoveredDragAndDrop=Drag & Drop file(s) here
|
||||||
fileChooser.extractPDF=Extracting...
|
fileChooser.extractPDF=Extracting...
|
||||||
|
fileChooser.addAttachments=drag & drop attachments here
|
||||||
|
|
||||||
#release notes
|
#release notes
|
||||||
releases.footer=Releases
|
releases.footer=Releases
|
||||||
|
@ -525,6 +525,10 @@ home.addImage.title=Legg til bilde
|
|||||||
home.addImage.desc=Legger til et bilde på en angitt plassering i PDF-en
|
home.addImage.desc=Legger til et bilde på en angitt plassering i PDF-en
|
||||||
addImage.tags=bilde,jpg,foto
|
addImage.tags=bilde,jpg,foto
|
||||||
|
|
||||||
|
home.attachments.title=Add Attachments
|
||||||
|
home.attachments.desc=Add or remove embedded files (attachments) to/from a PDF
|
||||||
|
attachments.tags=embed,attach,file,attachment,attachments
|
||||||
|
|
||||||
home.watermark.title=Legg til Vannmerke
|
home.watermark.title=Legg til Vannmerke
|
||||||
home.watermark.desc=Legg til et tilpasset vannmerke i din PDF-dokument.
|
home.watermark.desc=Legg til et tilpasset vannmerke i din PDF-dokument.
|
||||||
watermark.tags=tekst,gjentakende,etikett,egen,opphavsrett,varemerke,bilde,jpg,foto
|
watermark.tags=tekst,gjentakende,etikett,egen,opphavsrett,varemerke,bilde,jpg,foto
|
||||||
@ -1205,6 +1209,12 @@ addImage.everyPage=På hver side?
|
|||||||
addImage.upload=Legg til bilde
|
addImage.upload=Legg til bilde
|
||||||
addImage.submit=Legg til bilde
|
addImage.submit=Legg til bilde
|
||||||
|
|
||||||
|
#attachments
|
||||||
|
attachments.title=Add Attachments
|
||||||
|
attachments.header=Add attachments
|
||||||
|
attachments.description=Allows you to add attachments to the PDF
|
||||||
|
attachments.descriptionPlaceholder=Enter a description for the attachments...
|
||||||
|
attachments.addButton=Add Attachments
|
||||||
|
|
||||||
#merge
|
#merge
|
||||||
merge.title=Slå sammen
|
merge.title=Slå sammen
|
||||||
@ -1594,6 +1604,7 @@ fileChooser.dragAndDropPDF=Drag & Drop PDF file
|
|||||||
fileChooser.dragAndDropImage=Drag & Drop Image file
|
fileChooser.dragAndDropImage=Drag & Drop Image file
|
||||||
fileChooser.hoveredDragAndDrop=Drag & Drop file(s) here
|
fileChooser.hoveredDragAndDrop=Drag & Drop file(s) here
|
||||||
fileChooser.extractPDF=Extracting...
|
fileChooser.extractPDF=Extracting...
|
||||||
|
fileChooser.addAttachments=drag & drop attachments here
|
||||||
|
|
||||||
#release notes
|
#release notes
|
||||||
releases.footer=Versjoner
|
releases.footer=Versjoner
|
||||||
|
@ -525,6 +525,10 @@ home.addImage.title=Dodaj obraz
|
|||||||
home.addImage.desc=Dodaje obraz w wybranym miejscu w dokumencie PDF
|
home.addImage.desc=Dodaje obraz w wybranym miejscu w dokumencie PDF
|
||||||
addImage.tags=img,jpg,obraz,zdjęcie
|
addImage.tags=img,jpg,obraz,zdjęcie
|
||||||
|
|
||||||
|
home.attachments.title=Add Attachments
|
||||||
|
home.attachments.desc=Add or remove embedded files (attachments) to/from a PDF
|
||||||
|
attachments.tags=embed,attach,file,attachment,attachments
|
||||||
|
|
||||||
home.watermark.title=Dodaj znak wodny
|
home.watermark.title=Dodaj znak wodny
|
||||||
home.watermark.desc=Dodaj niestandardowy znak wodny do dokumentu PDF.
|
home.watermark.desc=Dodaj niestandardowy znak wodny do dokumentu PDF.
|
||||||
watermark.tags=Tekst,powtarzanie,etykieta,własne,prawa autorskie,znak wodny,img,jpg,obraz,zdjęcie
|
watermark.tags=Tekst,powtarzanie,etykieta,własne,prawa autorskie,znak wodny,img,jpg,obraz,zdjęcie
|
||||||
@ -1205,6 +1209,12 @@ addImage.everyPage=Każda strona?
|
|||||||
addImage.upload=Dodaj obraz
|
addImage.upload=Dodaj obraz
|
||||||
addImage.submit=Dodaj obraz
|
addImage.submit=Dodaj obraz
|
||||||
|
|
||||||
|
#attachments
|
||||||
|
attachments.title=Add Attachments
|
||||||
|
attachments.header=Add attachments
|
||||||
|
attachments.description=Allows you to add attachments to the PDF
|
||||||
|
attachments.descriptionPlaceholder=Enter a description for the attachments...
|
||||||
|
attachments.addButton=Add Attachments
|
||||||
|
|
||||||
#merge
|
#merge
|
||||||
merge.title=Połącz
|
merge.title=Połącz
|
||||||
@ -1594,6 +1604,7 @@ fileChooser.dragAndDropPDF=Przeciągnij i upuść plik PDF
|
|||||||
fileChooser.dragAndDropImage=Przeciągnij i upuść plik obrazu
|
fileChooser.dragAndDropImage=Przeciągnij i upuść plik obrazu
|
||||||
fileChooser.hoveredDragAndDrop=Przeciągnij i upuść plik(i) tutaj
|
fileChooser.hoveredDragAndDrop=Przeciągnij i upuść plik(i) tutaj
|
||||||
fileChooser.extractPDF=Trwa wyodrębnianie...
|
fileChooser.extractPDF=Trwa wyodrębnianie...
|
||||||
|
fileChooser.addAttachments=drag & drop attachments here
|
||||||
|
|
||||||
#release notes
|
#release notes
|
||||||
releases.footer=Wydania
|
releases.footer=Wydania
|
||||||
|
@ -525,6 +525,10 @@ home.addImage.title=Adicionar Imagem
|
|||||||
home.addImage.desc=Adicionar imagens em um local definido no PDF.
|
home.addImage.desc=Adicionar imagens em um local definido no PDF.
|
||||||
addImage.tags=img,jpg,imagem,foto
|
addImage.tags=img,jpg,imagem,foto
|
||||||
|
|
||||||
|
home.attachments.title=Add Attachments
|
||||||
|
home.attachments.desc=Add or remove embedded files (attachments) to/from a PDF
|
||||||
|
attachments.tags=embed,attach,file,attachment,attachments
|
||||||
|
|
||||||
home.watermark.title=Adicionar Marca d'água
|
home.watermark.title=Adicionar Marca d'água
|
||||||
home.watermark.desc=Adicionar uma marca d'água personalizada ao seu PDF.
|
home.watermark.desc=Adicionar uma marca d'água personalizada ao seu PDF.
|
||||||
watermark.tags=Texto,repetindo,rótulo,próprio,direitos autorais,marca registrada,img,jpg,imagem,foto
|
watermark.tags=Texto,repetindo,rótulo,próprio,direitos autorais,marca registrada,img,jpg,imagem,foto
|
||||||
@ -1205,6 +1209,12 @@ addImage.everyPage=Para cada página?
|
|||||||
addImage.upload=Carregar imagem
|
addImage.upload=Carregar imagem
|
||||||
addImage.submit=Adicionar imagem
|
addImage.submit=Adicionar imagem
|
||||||
|
|
||||||
|
#attachments
|
||||||
|
attachments.title=Add Attachments
|
||||||
|
attachments.header=Add attachments
|
||||||
|
attachments.description=Allows you to add attachments to the PDF
|
||||||
|
attachments.descriptionPlaceholder=Enter a description for the attachments...
|
||||||
|
attachments.addButton=Add Attachments
|
||||||
|
|
||||||
#merge
|
#merge
|
||||||
merge.title=Mesclar
|
merge.title=Mesclar
|
||||||
@ -1594,6 +1604,7 @@ fileChooser.dragAndDropPDF=Arraste & Solte PDF(s)
|
|||||||
fileChooser.dragAndDropImage=Arraste & Solte Imagem(ns)
|
fileChooser.dragAndDropImage=Arraste & Solte Imagem(ns)
|
||||||
fileChooser.hoveredDragAndDrop=Arraste & Solte arquivo(s) aqui
|
fileChooser.hoveredDragAndDrop=Arraste & Solte arquivo(s) aqui
|
||||||
fileChooser.extractPDF=Extraindo...
|
fileChooser.extractPDF=Extraindo...
|
||||||
|
fileChooser.addAttachments=drag & drop attachments here
|
||||||
|
|
||||||
#release notes
|
#release notes
|
||||||
releases.footer=Versões
|
releases.footer=Versões
|
||||||
|
@ -525,6 +525,10 @@ home.addImage.title=Adicionar imagem
|
|||||||
home.addImage.desc=Adiciona uma imagem numa localização definida no PDF
|
home.addImage.desc=Adiciona uma imagem numa localização definida no PDF
|
||||||
addImage.tags=img,jpg,imagem,foto
|
addImage.tags=img,jpg,imagem,foto
|
||||||
|
|
||||||
|
home.attachments.title=Add Attachments
|
||||||
|
home.attachments.desc=Add or remove embedded files (attachments) to/from a PDF
|
||||||
|
attachments.tags=embed,attach,file,attachment,attachments
|
||||||
|
|
||||||
home.watermark.title=Adicionar Marca de Água
|
home.watermark.title=Adicionar Marca de Água
|
||||||
home.watermark.desc=Adicionar uma marca de água personalizada ao seu documento PDF.
|
home.watermark.desc=Adicionar uma marca de água personalizada ao seu documento PDF.
|
||||||
watermark.tags=Texto,repetindo,etiqueta,próprio,copyright,marca registada,img,jpg,imagem,foto
|
watermark.tags=Texto,repetindo,etiqueta,próprio,copyright,marca registada,img,jpg,imagem,foto
|
||||||
@ -1205,6 +1209,12 @@ addImage.everyPage=Todas as Páginas?
|
|||||||
addImage.upload=Adicionar imagem
|
addImage.upload=Adicionar imagem
|
||||||
addImage.submit=Adicionar imagem
|
addImage.submit=Adicionar imagem
|
||||||
|
|
||||||
|
#attachments
|
||||||
|
attachments.title=Add Attachments
|
||||||
|
attachments.header=Add attachments
|
||||||
|
attachments.description=Allows you to add attachments to the PDF
|
||||||
|
attachments.descriptionPlaceholder=Enter a description for the attachments...
|
||||||
|
attachments.addButton=Add Attachments
|
||||||
|
|
||||||
#merge
|
#merge
|
||||||
merge.title=Juntar
|
merge.title=Juntar
|
||||||
@ -1594,6 +1604,7 @@ fileChooser.dragAndDropPDF=Arrastar e Largar ficheiro PDF
|
|||||||
fileChooser.dragAndDropImage=Arrastar e Largar ficheiro de Imagem
|
fileChooser.dragAndDropImage=Arrastar e Largar ficheiro de Imagem
|
||||||
fileChooser.hoveredDragAndDrop=Arrastar e Largar ficheiro(s) aqui
|
fileChooser.hoveredDragAndDrop=Arrastar e Largar ficheiro(s) aqui
|
||||||
fileChooser.extractPDF=Extraindo...
|
fileChooser.extractPDF=Extraindo...
|
||||||
|
fileChooser.addAttachments=drag & drop attachments here
|
||||||
|
|
||||||
#release notes
|
#release notes
|
||||||
releases.footer=Lançamentos
|
releases.footer=Lançamentos
|
||||||
|
@ -525,6 +525,10 @@ home.addImage.title=Adaugă imagine
|
|||||||
home.addImage.desc=Adaugă o imagine într-o locație specifică pe PDF (în curs de dezvoltare)
|
home.addImage.desc=Adaugă o imagine într-o locație specifică pe PDF (în curs de dezvoltare)
|
||||||
addImage.tags=img,jpg,poză,fotografie
|
addImage.tags=img,jpg,poză,fotografie
|
||||||
|
|
||||||
|
home.attachments.title=Add Attachments
|
||||||
|
home.attachments.desc=Add or remove embedded files (attachments) to/from a PDF
|
||||||
|
attachments.tags=embed,attach,file,attachment,attachments
|
||||||
|
|
||||||
home.watermark.title=Adaugă Filigran
|
home.watermark.title=Adaugă Filigran
|
||||||
home.watermark.desc=Adaugă un filigran personalizat la documentul PDF.
|
home.watermark.desc=Adaugă un filigran personalizat la documentul PDF.
|
||||||
watermark.tags=Text,repetitiv,etichetă,propriu,drepturi de autor,marcă comercială,img,jpg,poză,fotografie
|
watermark.tags=Text,repetitiv,etichetă,propriu,drepturi de autor,marcă comercială,img,jpg,poză,fotografie
|
||||||
@ -1205,6 +1209,12 @@ addImage.everyPage=Pe fiecare pagină?
|
|||||||
addImage.upload=Adăugare imagine
|
addImage.upload=Adăugare imagine
|
||||||
addImage.submit=Adăugare imagine
|
addImage.submit=Adăugare imagine
|
||||||
|
|
||||||
|
#attachments
|
||||||
|
attachments.title=Add Attachments
|
||||||
|
attachments.header=Add attachments
|
||||||
|
attachments.description=Allows you to add attachments to the PDF
|
||||||
|
attachments.descriptionPlaceholder=Enter a description for the attachments...
|
||||||
|
attachments.addButton=Add Attachments
|
||||||
|
|
||||||
#merge
|
#merge
|
||||||
merge.title=Unire
|
merge.title=Unire
|
||||||
@ -1594,6 +1604,7 @@ fileChooser.dragAndDropPDF=Drag & Drop PDF file
|
|||||||
fileChooser.dragAndDropImage=Drag & Drop Image file
|
fileChooser.dragAndDropImage=Drag & Drop Image file
|
||||||
fileChooser.hoveredDragAndDrop=Drag & Drop file(s) here
|
fileChooser.hoveredDragAndDrop=Drag & Drop file(s) here
|
||||||
fileChooser.extractPDF=Extracting...
|
fileChooser.extractPDF=Extracting...
|
||||||
|
fileChooser.addAttachments=drag & drop attachments here
|
||||||
|
|
||||||
#release notes
|
#release notes
|
||||||
releases.footer=Releases
|
releases.footer=Releases
|
||||||
|
@ -525,6 +525,10 @@ home.addImage.title=Добавить изображение
|
|||||||
home.addImage.desc=Добавляет изображение в указанное место PDF
|
home.addImage.desc=Добавляет изображение в указанное место PDF
|
||||||
addImage.tags=изображение,jpg,картинка,фото
|
addImage.tags=изображение,jpg,картинка,фото
|
||||||
|
|
||||||
|
home.attachments.title=Add Attachments
|
||||||
|
home.attachments.desc=Add or remove embedded files (attachments) to/from a PDF
|
||||||
|
attachments.tags=embed,attach,file,attachment,attachments
|
||||||
|
|
||||||
home.watermark.title=Добавить водяной знак
|
home.watermark.title=Добавить водяной знак
|
||||||
home.watermark.desc=Добавьте собственный водяной знак в ваш PDF-документ.
|
home.watermark.desc=Добавьте собственный водяной знак в ваш PDF-документ.
|
||||||
watermark.tags=текст,повторяющийся,метка,собственный,авторское право,торговая марка,изображение,jpg,картинка,фото
|
watermark.tags=текст,повторяющийся,метка,собственный,авторское право,торговая марка,изображение,jpg,картинка,фото
|
||||||
@ -1205,6 +1209,12 @@ addImage.everyPage=Каждая страница?
|
|||||||
addImage.upload=Добавить изображение
|
addImage.upload=Добавить изображение
|
||||||
addImage.submit=Добавить изображение
|
addImage.submit=Добавить изображение
|
||||||
|
|
||||||
|
#attachments
|
||||||
|
attachments.title=Add Attachments
|
||||||
|
attachments.header=Add attachments
|
||||||
|
attachments.description=Allows you to add attachments to the PDF
|
||||||
|
attachments.descriptionPlaceholder=Enter a description for the attachments...
|
||||||
|
attachments.addButton=Add Attachments
|
||||||
|
|
||||||
#merge
|
#merge
|
||||||
merge.title=Объединить
|
merge.title=Объединить
|
||||||
@ -1594,6 +1604,7 @@ fileChooser.dragAndDropPDF=Перетащите PDF-файл
|
|||||||
fileChooser.dragAndDropImage=Перетащите файл изображения
|
fileChooser.dragAndDropImage=Перетащите файл изображения
|
||||||
fileChooser.hoveredDragAndDrop=Перетащите файл(ы) сюда
|
fileChooser.hoveredDragAndDrop=Перетащите файл(ы) сюда
|
||||||
fileChooser.extractPDF=Извлечение...
|
fileChooser.extractPDF=Извлечение...
|
||||||
|
fileChooser.addAttachments=drag & drop attachments here
|
||||||
|
|
||||||
#release notes
|
#release notes
|
||||||
releases.footer=Релизы
|
releases.footer=Релизы
|
||||||
|
@ -525,6 +525,10 @@ home.addImage.title=Pridať obrázok
|
|||||||
home.addImage.desc=Pridať obrázok na zadané miesto v PDF
|
home.addImage.desc=Pridať obrázok na zadané miesto v PDF
|
||||||
addImage.tags=img,jpg,obrázok,fotografia
|
addImage.tags=img,jpg,obrázok,fotografia
|
||||||
|
|
||||||
|
home.attachments.title=Add Attachments
|
||||||
|
home.attachments.desc=Add or remove embedded files (attachments) to/from a PDF
|
||||||
|
attachments.tags=embed,attach,file,attachment,attachments
|
||||||
|
|
||||||
home.watermark.title=Pridať vodotlač
|
home.watermark.title=Pridať vodotlač
|
||||||
home.watermark.desc=Pridať vlastnú vodotlač do vášho PDF dokumentu.
|
home.watermark.desc=Pridať vlastnú vodotlač do vášho PDF dokumentu.
|
||||||
watermark.tags=Text,opakujúci sa,označenie,vlastné,autorské práva,ochranná známka,img,jpg,obrázok,fotografia
|
watermark.tags=Text,opakujúci sa,označenie,vlastné,autorské práva,ochranná známka,img,jpg,obrázok,fotografia
|
||||||
@ -1205,6 +1209,12 @@ addImage.everyPage=Každá stránka?
|
|||||||
addImage.upload=Pridať obrázok
|
addImage.upload=Pridať obrázok
|
||||||
addImage.submit=Pridať obrázok
|
addImage.submit=Pridať obrázok
|
||||||
|
|
||||||
|
#attachments
|
||||||
|
attachments.title=Add Attachments
|
||||||
|
attachments.header=Add attachments
|
||||||
|
attachments.description=Allows you to add attachments to the PDF
|
||||||
|
attachments.descriptionPlaceholder=Enter a description for the attachments...
|
||||||
|
attachments.addButton=Add Attachments
|
||||||
|
|
||||||
#merge
|
#merge
|
||||||
merge.title=Zlúčiť
|
merge.title=Zlúčiť
|
||||||
@ -1594,6 +1604,7 @@ fileChooser.dragAndDropPDF=Drag & Drop PDF file
|
|||||||
fileChooser.dragAndDropImage=Drag & Drop Image file
|
fileChooser.dragAndDropImage=Drag & Drop Image file
|
||||||
fileChooser.hoveredDragAndDrop=Drag & Drop file(s) here
|
fileChooser.hoveredDragAndDrop=Drag & Drop file(s) here
|
||||||
fileChooser.extractPDF=Extracting...
|
fileChooser.extractPDF=Extracting...
|
||||||
|
fileChooser.addAttachments=drag & drop attachments here
|
||||||
|
|
||||||
#release notes
|
#release notes
|
||||||
releases.footer=Releases
|
releases.footer=Releases
|
||||||
|
@ -525,6 +525,10 @@ home.addImage.title=Dodaj sliko
|
|||||||
home.addImage.desc=Doda sliko na določeno mesto v PDF-ju
|
home.addImage.desc=Doda sliko na določeno mesto v PDF-ju
|
||||||
addImage.tags=img,jpg,slika,fotografija
|
addImage.tags=img,jpg,slika,fotografija
|
||||||
|
|
||||||
|
home.attachments.title=Add Attachments
|
||||||
|
home.attachments.desc=Add or remove embedded files (attachments) to/from a PDF
|
||||||
|
attachments.tags=embed,attach,file,attachment,attachments
|
||||||
|
|
||||||
home.watermark.title=Dodaj vodni žig
|
home.watermark.title=Dodaj vodni žig
|
||||||
home.watermark.desc=V dokument PDF dodajte vodni žig po meri.
|
home.watermark.desc=V dokument PDF dodajte vodni žig po meri.
|
||||||
watermark.tags=Besedilo, ponavljajoče se, oznaka, lastno, avtorske pravice, blagovna znamka, img, jpg, slika, fotografija
|
watermark.tags=Besedilo, ponavljajoče se, oznaka, lastno, avtorske pravice, blagovna znamka, img, jpg, slika, fotografija
|
||||||
@ -1205,6 +1209,12 @@ addImage.everyPage=Vsaka stran?
|
|||||||
addImage.upload=Dodaj sliko
|
addImage.upload=Dodaj sliko
|
||||||
addImage.submit=Dodaj sliko
|
addImage.submit=Dodaj sliko
|
||||||
|
|
||||||
|
#attachments
|
||||||
|
attachments.title=Add Attachments
|
||||||
|
attachments.header=Add attachments
|
||||||
|
attachments.description=Allows you to add attachments to the PDF
|
||||||
|
attachments.descriptionPlaceholder=Enter a description for the attachments...
|
||||||
|
attachments.addButton=Add Attachments
|
||||||
|
|
||||||
#merge
|
#merge
|
||||||
merge.title=Združi
|
merge.title=Združi
|
||||||
@ -1594,6 +1604,7 @@ fileChooser.dragAndDropPDF=Povleci in spusti datoteko PDF
|
|||||||
fileChooser.dragAndDropImage=Povleci in spusti slikovno datoteko
|
fileChooser.dragAndDropImage=Povleci in spusti slikovno datoteko
|
||||||
fileChooser.hoveredDragAndDrop=Povleci in spusti datoteko(e) sem
|
fileChooser.hoveredDragAndDrop=Povleci in spusti datoteko(e) sem
|
||||||
fileChooser.extractPDF=Izvlečenje...
|
fileChooser.extractPDF=Izvlečenje...
|
||||||
|
fileChooser.addAttachments=drag & drop attachments here
|
||||||
|
|
||||||
#release notes
|
#release notes
|
||||||
releases.footer=Izdaje
|
releases.footer=Izdaje
|
||||||
|
File diff suppressed because it is too large
Load Diff
@ -525,6 +525,10 @@ home.addImage.title=Lägg till bild
|
|||||||
home.addImage.desc=Lägger till en bild på en angiven plats i PDF:en (pågår arbete)
|
home.addImage.desc=Lägger till en bild på en angiven plats i PDF:en (pågår arbete)
|
||||||
addImage.tags=img,jpg,bild,foto
|
addImage.tags=img,jpg,bild,foto
|
||||||
|
|
||||||
|
home.attachments.title=Add Attachments
|
||||||
|
home.attachments.desc=Add or remove embedded files (attachments) to/from a PDF
|
||||||
|
attachments.tags=embed,attach,file,attachment,attachments
|
||||||
|
|
||||||
home.watermark.title=Lägg till vattenstämpel
|
home.watermark.title=Lägg till vattenstämpel
|
||||||
home.watermark.desc=Lägg till en anpassad vattenstämpel till ditt PDF-dokument.
|
home.watermark.desc=Lägg till en anpassad vattenstämpel till ditt PDF-dokument.
|
||||||
watermark.tags=Text,upprepande,etikett,egen,upphovsrätt,varumärke,img,jpg,bild,foto
|
watermark.tags=Text,upprepande,etikett,egen,upphovsrätt,varumärke,img,jpg,bild,foto
|
||||||
@ -1205,6 +1209,12 @@ addImage.everyPage=Varje sida?
|
|||||||
addImage.upload=Lägg till bild
|
addImage.upload=Lägg till bild
|
||||||
addImage.submit=Lägg till bild
|
addImage.submit=Lägg till bild
|
||||||
|
|
||||||
|
#attachments
|
||||||
|
attachments.title=Add Attachments
|
||||||
|
attachments.header=Add attachments
|
||||||
|
attachments.description=Allows you to add attachments to the PDF
|
||||||
|
attachments.descriptionPlaceholder=Enter a description for the attachments...
|
||||||
|
attachments.addButton=Add Attachments
|
||||||
|
|
||||||
#merge
|
#merge
|
||||||
merge.title=Sammanfoga
|
merge.title=Sammanfoga
|
||||||
@ -1594,6 +1604,7 @@ fileChooser.dragAndDropPDF=Dra & Släpp PDF fil
|
|||||||
fileChooser.dragAndDropImage=Dra & Släpp bildfil
|
fileChooser.dragAndDropImage=Dra & Släpp bildfil
|
||||||
fileChooser.hoveredDragAndDrop=Dra & Släpp fil(er) här
|
fileChooser.hoveredDragAndDrop=Dra & Släpp fil(er) här
|
||||||
fileChooser.extractPDF=Extraherar...
|
fileChooser.extractPDF=Extraherar...
|
||||||
|
fileChooser.addAttachments=drag & drop attachments here
|
||||||
|
|
||||||
#release notes
|
#release notes
|
||||||
releases.footer=Utgåvor
|
releases.footer=Utgåvor
|
||||||
|
@ -525,6 +525,10 @@ home.addImage.title=เพิ่มรูปภาพ
|
|||||||
home.addImage.desc=เพิ่มรูปภาพไปยังตำแหน่งที่กำหนดใน PDF
|
home.addImage.desc=เพิ่มรูปภาพไปยังตำแหน่งที่กำหนดใน PDF
|
||||||
addImage.tags=รูปภาพ, JPG, ภาพ, รูปถ่าย
|
addImage.tags=รูปภาพ, JPG, ภาพ, รูปถ่าย
|
||||||
|
|
||||||
|
home.attachments.title=Add Attachments
|
||||||
|
home.attachments.desc=Add or remove embedded files (attachments) to/from a PDF
|
||||||
|
attachments.tags=embed,attach,file,attachment,attachments
|
||||||
|
|
||||||
home.watermark.title=เพิ่มลายน้ำ
|
home.watermark.title=เพิ่มลายน้ำ
|
||||||
home.watermark.desc=เพิ่มลายน้ำที่กำหนดเองลงในเอกสาร PDF ของคุณ
|
home.watermark.desc=เพิ่มลายน้ำที่กำหนดเองลงในเอกสาร PDF ของคุณ
|
||||||
watermark.tags=ข้อความ, ซ้ำ, ป้าย, ของคุณเอง, ลิขสิทธิ์, เครื่องหมายการค้า, รูปภาพ, JPG, ภาพ, รูปถ่าย
|
watermark.tags=ข้อความ, ซ้ำ, ป้าย, ของคุณเอง, ลิขสิทธิ์, เครื่องหมายการค้า, รูปภาพ, JPG, ภาพ, รูปถ่าย
|
||||||
@ -1205,6 +1209,12 @@ addImage.everyPage=ทุกหน้า?
|
|||||||
addImage.upload=เพิ่มรูปภาพ
|
addImage.upload=เพิ่มรูปภาพ
|
||||||
addImage.submit=เพิ่มรูปภาพ
|
addImage.submit=เพิ่มรูปภาพ
|
||||||
|
|
||||||
|
#attachments
|
||||||
|
attachments.title=Add Attachments
|
||||||
|
attachments.header=Add attachments
|
||||||
|
attachments.description=Allows you to add attachments to the PDF
|
||||||
|
attachments.descriptionPlaceholder=Enter a description for the attachments...
|
||||||
|
attachments.addButton=Add Attachments
|
||||||
|
|
||||||
#merge
|
#merge
|
||||||
merge.title=รวม
|
merge.title=รวม
|
||||||
@ -1594,6 +1604,7 @@ fileChooser.dragAndDropPDF=Drag & Drop PDF file
|
|||||||
fileChooser.dragAndDropImage=Drag & Drop Image file
|
fileChooser.dragAndDropImage=Drag & Drop Image file
|
||||||
fileChooser.hoveredDragAndDrop=Drag & Drop file(s) here
|
fileChooser.hoveredDragAndDrop=Drag & Drop file(s) here
|
||||||
fileChooser.extractPDF=Extracting...
|
fileChooser.extractPDF=Extracting...
|
||||||
|
fileChooser.addAttachments=drag & drop attachments here
|
||||||
|
|
||||||
#release notes
|
#release notes
|
||||||
releases.footer=Releases
|
releases.footer=Releases
|
||||||
|
@ -525,6 +525,10 @@ home.addImage.title=Resim Ekle
|
|||||||
home.addImage.desc=PDF'e belirli bir konuma resim ekler
|
home.addImage.desc=PDF'e belirli bir konuma resim ekler
|
||||||
addImage.tags=img,jpg,fotoğraf,resim
|
addImage.tags=img,jpg,fotoğraf,resim
|
||||||
|
|
||||||
|
home.attachments.title=Add Attachments
|
||||||
|
home.attachments.desc=Add or remove embedded files (attachments) to/from a PDF
|
||||||
|
attachments.tags=embed,attach,file,attachment,attachments
|
||||||
|
|
||||||
home.watermark.title=Filigran Ekle
|
home.watermark.title=Filigran Ekle
|
||||||
home.watermark.desc=PDF belgenize özel bir filigran ekleyin.
|
home.watermark.desc=PDF belgenize özel bir filigran ekleyin.
|
||||||
watermark.tags=Metin,tekrarlayan,etiket,kendi,telif hakkı,marka,img,jpg,fotoğraf,resim
|
watermark.tags=Metin,tekrarlayan,etiket,kendi,telif hakkı,marka,img,jpg,fotoğraf,resim
|
||||||
@ -1205,6 +1209,12 @@ addImage.everyPage=Her Sayfa mı?
|
|||||||
addImage.upload=Resim ekle
|
addImage.upload=Resim ekle
|
||||||
addImage.submit=Resim ekle
|
addImage.submit=Resim ekle
|
||||||
|
|
||||||
|
#attachments
|
||||||
|
attachments.title=Add Attachments
|
||||||
|
attachments.header=Add attachments
|
||||||
|
attachments.description=Allows you to add attachments to the PDF
|
||||||
|
attachments.descriptionPlaceholder=Enter a description for the attachments...
|
||||||
|
attachments.addButton=Add Attachments
|
||||||
|
|
||||||
#merge
|
#merge
|
||||||
merge.title=Birleştir
|
merge.title=Birleştir
|
||||||
@ -1594,6 +1604,7 @@ fileChooser.dragAndDropPDF=PDF dosyasını Sürükle & Bırak
|
|||||||
fileChooser.dragAndDropImage=Görsel dosyasını Sürükle & Bırak
|
fileChooser.dragAndDropImage=Görsel dosyasını Sürükle & Bırak
|
||||||
fileChooser.hoveredDragAndDrop=Dosya(lar)ı buraya sürükleyip bırakın
|
fileChooser.hoveredDragAndDrop=Dosya(lar)ı buraya sürükleyip bırakın
|
||||||
fileChooser.extractPDF=PDF Çıkarılıyor...
|
fileChooser.extractPDF=PDF Çıkarılıyor...
|
||||||
|
fileChooser.addAttachments=drag & drop attachments here
|
||||||
|
|
||||||
#release notes
|
#release notes
|
||||||
releases.footer=Sürümler
|
releases.footer=Sürümler
|
||||||
|
@ -525,6 +525,10 @@ home.addImage.title=Додати зображення
|
|||||||
home.addImage.desc=Додає зображення у вказане місце в PDF (в розробці)
|
home.addImage.desc=Додає зображення у вказане місце в PDF (в розробці)
|
||||||
addImage.tags=зображення,jpg,картинка,фото
|
addImage.tags=зображення,jpg,картинка,фото
|
||||||
|
|
||||||
|
home.attachments.title=Add Attachments
|
||||||
|
home.attachments.desc=Add or remove embedded files (attachments) to/from a PDF
|
||||||
|
attachments.tags=embed,attach,file,attachment,attachments
|
||||||
|
|
||||||
home.watermark.title=Додати водяний знак
|
home.watermark.title=Додати водяний знак
|
||||||
home.watermark.desc=Додайте свій водяний знак до документа PDF.
|
home.watermark.desc=Додайте свій водяний знак до документа PDF.
|
||||||
watermark.tags=текст,повторний,мітка,власний,авторське право,торговельна марка,зображення,jpg,картинка,фото
|
watermark.tags=текст,повторний,мітка,власний,авторське право,торговельна марка,зображення,jpg,картинка,фото
|
||||||
@ -1205,6 +1209,12 @@ addImage.everyPage=Кожна сторінка?
|
|||||||
addImage.upload=Додати зображення
|
addImage.upload=Додати зображення
|
||||||
addImage.submit=Додати зображення
|
addImage.submit=Додати зображення
|
||||||
|
|
||||||
|
#attachments
|
||||||
|
attachments.title=Add Attachments
|
||||||
|
attachments.header=Add attachments
|
||||||
|
attachments.description=Allows you to add attachments to the PDF
|
||||||
|
attachments.descriptionPlaceholder=Enter a description for the attachments...
|
||||||
|
attachments.addButton=Add Attachments
|
||||||
|
|
||||||
#merge
|
#merge
|
||||||
merge.title=Об'єднати
|
merge.title=Об'єднати
|
||||||
@ -1594,6 +1604,7 @@ fileChooser.dragAndDropPDF=Перетащите PDF-файл
|
|||||||
fileChooser.dragAndDropImage=Перетащите файл зображення
|
fileChooser.dragAndDropImage=Перетащите файл зображення
|
||||||
fileChooser.hoveredDragAndDrop=Перетащите файл(и) сюда
|
fileChooser.hoveredDragAndDrop=Перетащите файл(и) сюда
|
||||||
fileChooser.extractPDF=Видобування...
|
fileChooser.extractPDF=Видобування...
|
||||||
|
fileChooser.addAttachments=drag & drop attachments here
|
||||||
|
|
||||||
#release notes
|
#release notes
|
||||||
releases.footer=Релізи
|
releases.footer=Релізи
|
||||||
|
@ -525,6 +525,10 @@ home.addImage.title=Thêm hình ảnh
|
|||||||
home.addImage.desc=Thêm hình ảnh vào vị trí cố định trên PDF
|
home.addImage.desc=Thêm hình ảnh vào vị trí cố định trên PDF
|
||||||
addImage.tags=img,jpg,hình ảnh,ảnh
|
addImage.tags=img,jpg,hình ảnh,ảnh
|
||||||
|
|
||||||
|
home.attachments.title=Add Attachments
|
||||||
|
home.attachments.desc=Add or remove embedded files (attachments) to/from a PDF
|
||||||
|
attachments.tags=embed,attach,file,attachment,attachments
|
||||||
|
|
||||||
home.watermark.title=Thêm hình mờ
|
home.watermark.title=Thêm hình mờ
|
||||||
home.watermark.desc=Thêm hình mờ tùy chỉnh vào tài liệu PDF của bạn.
|
home.watermark.desc=Thêm hình mờ tùy chỉnh vào tài liệu PDF của bạn.
|
||||||
watermark.tags=Văn bản,lặp lại,nhãn,riêng,bản quyền,thương hiệu,img,jpg,hình ảnh,ảnh
|
watermark.tags=Văn bản,lặp lại,nhãn,riêng,bản quyền,thương hiệu,img,jpg,hình ảnh,ảnh
|
||||||
@ -1205,6 +1209,12 @@ addImage.everyPage=Mọi trang?
|
|||||||
addImage.upload=Thêm hình ảnh
|
addImage.upload=Thêm hình ảnh
|
||||||
addImage.submit=Thêm hình ảnh
|
addImage.submit=Thêm hình ảnh
|
||||||
|
|
||||||
|
#attachments
|
||||||
|
attachments.title=Add Attachments
|
||||||
|
attachments.header=Add attachments
|
||||||
|
attachments.description=Allows you to add attachments to the PDF
|
||||||
|
attachments.descriptionPlaceholder=Enter a description for the attachments...
|
||||||
|
attachments.addButton=Add Attachments
|
||||||
|
|
||||||
#merge
|
#merge
|
||||||
merge.title=Trộn
|
merge.title=Trộn
|
||||||
@ -1594,6 +1604,7 @@ fileChooser.dragAndDropPDF=Drag & Drop PDF file
|
|||||||
fileChooser.dragAndDropImage=Drag & Drop Image file
|
fileChooser.dragAndDropImage=Drag & Drop Image file
|
||||||
fileChooser.hoveredDragAndDrop=Drag & Drop file(s) here
|
fileChooser.hoveredDragAndDrop=Drag & Drop file(s) here
|
||||||
fileChooser.extractPDF=Extracting...
|
fileChooser.extractPDF=Extracting...
|
||||||
|
fileChooser.addAttachments=drag & drop attachments here
|
||||||
|
|
||||||
#release notes
|
#release notes
|
||||||
releases.footer=Releases
|
releases.footer=Releases
|
||||||
|
@ -525,6 +525,10 @@ home.addImage.title=在 PDF 中添加图片
|
|||||||
home.addImage.desc=将图像添加到 PDF 的指定位置。
|
home.addImage.desc=将图像添加到 PDF 的指定位置。
|
||||||
addImage.tags=图像、JPG、图片、照片
|
addImage.tags=图像、JPG、图片、照片
|
||||||
|
|
||||||
|
home.attachments.title=Add Attachments
|
||||||
|
home.attachments.desc=Add or remove embedded files (attachments) to/from a PDF
|
||||||
|
attachments.tags=embed,attach,file,attachment,attachments
|
||||||
|
|
||||||
home.watermark.title=添加水印
|
home.watermark.title=添加水印
|
||||||
home.watermark.desc=在 PDF 中添加自定义水印。
|
home.watermark.desc=在 PDF 中添加自定义水印。
|
||||||
watermark.tags=文本、重复、标签、自定义、版权、商标、图像、JPG、图片、照片
|
watermark.tags=文本、重复、标签、自定义、版权、商标、图像、JPG、图片、照片
|
||||||
@ -1205,6 +1209,12 @@ addImage.everyPage=每一页?
|
|||||||
addImage.upload=添加图片
|
addImage.upload=添加图片
|
||||||
addImage.submit=添加图片
|
addImage.submit=添加图片
|
||||||
|
|
||||||
|
#attachments
|
||||||
|
attachments.title=Add Attachments
|
||||||
|
attachments.header=Add attachments
|
||||||
|
attachments.description=Allows you to add attachments to the PDF
|
||||||
|
attachments.descriptionPlaceholder=Enter a description for the attachments...
|
||||||
|
attachments.addButton=Add Attachments
|
||||||
|
|
||||||
#merge
|
#merge
|
||||||
merge.title=合并
|
merge.title=合并
|
||||||
@ -1594,6 +1604,7 @@ fileChooser.dragAndDropPDF=拖放PDF文件
|
|||||||
fileChooser.dragAndDropImage=拖放图片文件
|
fileChooser.dragAndDropImage=拖放图片文件
|
||||||
fileChooser.hoveredDragAndDrop=拖放文件到此处
|
fileChooser.hoveredDragAndDrop=拖放文件到此处
|
||||||
fileChooser.extractPDF=处理中...
|
fileChooser.extractPDF=处理中...
|
||||||
|
fileChooser.addAttachments=drag & drop attachments here
|
||||||
|
|
||||||
#release notes
|
#release notes
|
||||||
releases.footer=版本
|
releases.footer=版本
|
||||||
|
@ -525,6 +525,10 @@ home.addImage.title=新增圖片
|
|||||||
home.addImage.desc=在 PDF 的指定位置新增圖片
|
home.addImage.desc=在 PDF 的指定位置新增圖片
|
||||||
addImage.tags=img,jpg,圖片,照片
|
addImage.tags=img,jpg,圖片,照片
|
||||||
|
|
||||||
|
home.attachments.title=Add Attachments
|
||||||
|
home.attachments.desc=Add or remove embedded files (attachments) to/from a PDF
|
||||||
|
attachments.tags=embed,attach,file,attachment,attachments
|
||||||
|
|
||||||
home.watermark.title=新增浮水印
|
home.watermark.title=新增浮水印
|
||||||
home.watermark.desc=在您的 PDF 檔案中新增自訂浮水印。
|
home.watermark.desc=在您的 PDF 檔案中新增自訂浮水印。
|
||||||
watermark.tags=文字,重複,標籤,自有,版權,商標,img,jpg,圖片,照片
|
watermark.tags=文字,重複,標籤,自有,版權,商標,img,jpg,圖片,照片
|
||||||
@ -1205,6 +1209,12 @@ addImage.everyPage=每一頁?
|
|||||||
addImage.upload=新增圖片
|
addImage.upload=新增圖片
|
||||||
addImage.submit=新增圖片
|
addImage.submit=新增圖片
|
||||||
|
|
||||||
|
#attachments
|
||||||
|
attachments.title=Add Attachments
|
||||||
|
attachments.header=Add attachments
|
||||||
|
attachments.description=Allows you to add attachments to the PDF
|
||||||
|
attachments.descriptionPlaceholder=Enter a description for the attachments...
|
||||||
|
attachments.addButton=Add Attachments
|
||||||
|
|
||||||
#merge
|
#merge
|
||||||
merge.title=合併
|
merge.title=合併
|
||||||
@ -1594,6 +1604,7 @@ fileChooser.dragAndDropPDF=拖放 PDF 檔案
|
|||||||
fileChooser.dragAndDropImage=拖放圖片檔案
|
fileChooser.dragAndDropImage=拖放圖片檔案
|
||||||
fileChooser.hoveredDragAndDrop=將檔案拖放至此
|
fileChooser.hoveredDragAndDrop=將檔案拖放至此
|
||||||
fileChooser.extractPDF=處理中...
|
fileChooser.extractPDF=處理中...
|
||||||
|
fileChooser.addAttachments=drag & drop attachments here
|
||||||
|
|
||||||
#release notes
|
#release notes
|
||||||
releases.footer=版本資訊
|
releases.footer=版本資訊
|
||||||
|
@ -649,7 +649,7 @@
|
|||||||
{
|
{
|
||||||
"moduleName": "io.swagger.core.v3:swagger-annotations-jakarta",
|
"moduleName": "io.swagger.core.v3:swagger-annotations-jakarta",
|
||||||
"moduleUrl": "https://github.com/swagger-api/swagger-core/modules/swagger-annotations",
|
"moduleUrl": "https://github.com/swagger-api/swagger-core/modules/swagger-annotations",
|
||||||
"moduleVersion": "2.2.33",
|
"moduleVersion": "2.2.34",
|
||||||
"moduleLicense": "Apache License, Version 2.0",
|
"moduleLicense": "Apache License, Version 2.0",
|
||||||
"moduleLicenseUrl": "https://www.apache.org/licenses/LICENSE-2.0"
|
"moduleLicenseUrl": "https://www.apache.org/licenses/LICENSE-2.0"
|
||||||
},
|
},
|
||||||
@ -663,7 +663,7 @@
|
|||||||
{
|
{
|
||||||
"moduleName": "io.swagger.core.v3:swagger-core-jakarta",
|
"moduleName": "io.swagger.core.v3:swagger-core-jakarta",
|
||||||
"moduleUrl": "https://github.com/swagger-api/swagger-core/modules/swagger-core",
|
"moduleUrl": "https://github.com/swagger-api/swagger-core/modules/swagger-core",
|
||||||
"moduleVersion": "2.2.33",
|
"moduleVersion": "2.2.34",
|
||||||
"moduleLicense": "Apache License, Version 2.0",
|
"moduleLicense": "Apache License, Version 2.0",
|
||||||
"moduleLicenseUrl": "https://www.apache.org/licenses/LICENSE-2.0"
|
"moduleLicenseUrl": "https://www.apache.org/licenses/LICENSE-2.0"
|
||||||
},
|
},
|
||||||
@ -677,7 +677,7 @@
|
|||||||
{
|
{
|
||||||
"moduleName": "io.swagger.core.v3:swagger-models-jakarta",
|
"moduleName": "io.swagger.core.v3:swagger-models-jakarta",
|
||||||
"moduleUrl": "https://github.com/swagger-api/swagger-core/modules/swagger-models",
|
"moduleUrl": "https://github.com/swagger-api/swagger-core/modules/swagger-models",
|
||||||
"moduleVersion": "2.2.33",
|
"moduleVersion": "2.2.34",
|
||||||
"moduleLicense": "Apache License, Version 2.0",
|
"moduleLicense": "Apache License, Version 2.0",
|
||||||
"moduleLicenseUrl": "https://www.apache.org/licenses/LICENSE-2.0"
|
"moduleLicenseUrl": "https://www.apache.org/licenses/LICENSE-2.0"
|
||||||
},
|
},
|
||||||
@ -1069,13 +1069,13 @@
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
"moduleName": "org.commonmark:commonmark",
|
"moduleName": "org.commonmark:commonmark",
|
||||||
"moduleVersion": "0.24.0",
|
"moduleVersion": "0.25.0",
|
||||||
"moduleLicense": "BSD-2-Clause",
|
"moduleLicense": "BSD-2-Clause",
|
||||||
"moduleLicenseUrl": "https://opensource.org/licenses/BSD-2-Clause"
|
"moduleLicenseUrl": "https://opensource.org/licenses/BSD-2-Clause"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"moduleName": "org.commonmark:commonmark-ext-gfm-tables",
|
"moduleName": "org.commonmark:commonmark-ext-gfm-tables",
|
||||||
"moduleVersion": "0.24.0",
|
"moduleVersion": "0.25.0",
|
||||||
"moduleLicense": "BSD-2-Clause",
|
"moduleLicense": "BSD-2-Clause",
|
||||||
"moduleLicenseUrl": "https://opensource.org/licenses/BSD-2-Clause"
|
"moduleLicenseUrl": "https://opensource.org/licenses/BSD-2-Clause"
|
||||||
},
|
},
|
||||||
@ -1093,6 +1093,13 @@
|
|||||||
"moduleLicense": "GNU General Public License, version 2 with the GNU Classpath Exception",
|
"moduleLicense": "GNU General Public License, version 2 with the GNU Classpath Exception",
|
||||||
"moduleLicenseUrl": "https://www.gnu.org/software/classpath/license.html"
|
"moduleLicenseUrl": "https://www.gnu.org/software/classpath/license.html"
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"moduleName": "org.eclipse.angus:angus-mail",
|
||||||
|
"moduleUrl": "https://www.eclipse.org",
|
||||||
|
"moduleVersion": "2.0.3",
|
||||||
|
"moduleLicense": "GPL2 w/ CPE",
|
||||||
|
"moduleLicenseUrl": "https://www.gnu.org/software/classpath/license.html"
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"moduleName": "org.eclipse.angus:jakarta.mail",
|
"moduleName": "org.eclipse.angus:jakarta.mail",
|
||||||
"moduleUrl": "https://www.eclipse.org",
|
"moduleUrl": "https://www.eclipse.org",
|
||||||
|
@ -30,13 +30,13 @@ class JobControllerTest {
|
|||||||
|
|
||||||
@Mock
|
@Mock
|
||||||
private FileStorage fileStorage;
|
private FileStorage fileStorage;
|
||||||
|
|
||||||
@Mock
|
@Mock
|
||||||
private JobQueue jobQueue;
|
private JobQueue jobQueue;
|
||||||
|
|
||||||
@Mock
|
@Mock
|
||||||
private HttpServletRequest request;
|
private HttpServletRequest request;
|
||||||
|
|
||||||
private MockHttpSession session;
|
private MockHttpSession session;
|
||||||
|
|
||||||
@InjectMocks
|
@InjectMocks
|
||||||
@ -45,7 +45,7 @@ class JobControllerTest {
|
|||||||
@BeforeEach
|
@BeforeEach
|
||||||
void setUp() {
|
void setUp() {
|
||||||
MockitoAnnotations.openMocks(this);
|
MockitoAnnotations.openMocks(this);
|
||||||
|
|
||||||
// Setup mock session for tests
|
// Setup mock session for tests
|
||||||
session = new MockHttpSession();
|
session = new MockHttpSession();
|
||||||
when(request.getSession()).thenReturn(session);
|
when(request.getSession()).thenReturn(session);
|
||||||
@ -66,7 +66,7 @@ class JobControllerTest {
|
|||||||
assertEquals(HttpStatus.OK, response.getStatusCode());
|
assertEquals(HttpStatus.OK, response.getStatusCode());
|
||||||
assertEquals(mockResult, response.getBody());
|
assertEquals(mockResult, response.getBody());
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
void testGetJobStatus_ExistingJobInQueue() {
|
void testGetJobStatus_ExistingJobInQueue() {
|
||||||
// Arrange
|
// Arrange
|
||||||
@ -83,11 +83,11 @@ class JobControllerTest {
|
|||||||
|
|
||||||
// Assert
|
// Assert
|
||||||
assertEquals(HttpStatus.OK, response.getStatusCode());
|
assertEquals(HttpStatus.OK, response.getStatusCode());
|
||||||
|
|
||||||
@SuppressWarnings("unchecked")
|
@SuppressWarnings("unchecked")
|
||||||
Map<String, Object> responseBody = (Map<String, Object>) response.getBody();
|
Map<String, Object> responseBody = (Map<String, Object>) response.getBody();
|
||||||
assertEquals(mockResult, responseBody.get("jobResult"));
|
assertEquals(mockResult, responseBody.get("jobResult"));
|
||||||
|
|
||||||
@SuppressWarnings("unchecked")
|
@SuppressWarnings("unchecked")
|
||||||
Map<String, Object> queueInfo = (Map<String, Object>) responseBody.get("queueInfo");
|
Map<String, Object> queueInfo = (Map<String, Object>) responseBody.get("queueInfo");
|
||||||
assertTrue((Boolean) queueInfo.get("inQueue"));
|
assertTrue((Boolean) queueInfo.get("inQueue"));
|
||||||
@ -231,38 +231,38 @@ class JobControllerTest {
|
|||||||
/*
|
/*
|
||||||
* @Test void testGetJobStats() { // Arrange JobStats mockStats =
|
* @Test void testGetJobStats() { // Arrange JobStats mockStats =
|
||||||
* JobStats.builder() .totalJobs(10) .activeJobs(3) .completedJobs(7) .build();
|
* JobStats.builder() .totalJobs(10) .activeJobs(3) .completedJobs(7) .build();
|
||||||
*
|
*
|
||||||
* when(taskManager.getJobStats()).thenReturn(mockStats);
|
* when(taskManager.getJobStats()).thenReturn(mockStats);
|
||||||
*
|
*
|
||||||
* // Act ResponseEntity<?> response = controller.getJobStats();
|
* // Act ResponseEntity<?> response = controller.getJobStats();
|
||||||
*
|
*
|
||||||
* // Assert assertEquals(HttpStatus.OK, response.getStatusCode());
|
* // Assert assertEquals(HttpStatus.OK, response.getStatusCode());
|
||||||
* assertEquals(mockStats, response.getBody()); }
|
* assertEquals(mockStats, response.getBody()); }
|
||||||
*
|
*
|
||||||
* @Test void testCleanupOldJobs() { // Arrange when(taskManager.getJobStats())
|
* @Test void testCleanupOldJobs() { // Arrange when(taskManager.getJobStats())
|
||||||
* .thenReturn(JobStats.builder().totalJobs(10).build())
|
* .thenReturn(JobStats.builder().totalJobs(10).build())
|
||||||
* .thenReturn(JobStats.builder().totalJobs(7).build());
|
* .thenReturn(JobStats.builder().totalJobs(7).build());
|
||||||
*
|
*
|
||||||
* // Act ResponseEntity<?> response = controller.cleanupOldJobs();
|
* // Act ResponseEntity<?> response = controller.cleanupOldJobs();
|
||||||
*
|
*
|
||||||
* // Assert assertEquals(HttpStatus.OK, response.getStatusCode());
|
* // Assert assertEquals(HttpStatus.OK, response.getStatusCode());
|
||||||
*
|
*
|
||||||
* @SuppressWarnings("unchecked") Map<String, Object> responseBody =
|
* @SuppressWarnings("unchecked") Map<String, Object> responseBody =
|
||||||
* (Map<String, Object>) response.getBody(); assertEquals("Cleanup complete",
|
* (Map<String, Object>) response.getBody(); assertEquals("Cleanup complete",
|
||||||
* responseBody.get("message")); assertEquals(3,
|
* responseBody.get("message")); assertEquals(3,
|
||||||
* responseBody.get("removedJobs")); assertEquals(7,
|
* responseBody.get("removedJobs")); assertEquals(7,
|
||||||
* responseBody.get("remainingJobs"));
|
* responseBody.get("remainingJobs"));
|
||||||
*
|
*
|
||||||
* verify(taskManager).cleanupOldJobs(); }
|
* verify(taskManager).cleanupOldJobs(); }
|
||||||
*
|
*
|
||||||
* @Test void testGetQueueStats() { // Arrange Map<String, Object>
|
* @Test void testGetQueueStats() { // Arrange Map<String, Object>
|
||||||
* mockQueueStats = Map.of( "queuedJobs", 5, "queueCapacity", 10,
|
* mockQueueStats = Map.of( "queuedJobs", 5, "queueCapacity", 10,
|
||||||
* "resourceStatus", "OK" );
|
* "resourceStatus", "OK" );
|
||||||
*
|
*
|
||||||
* when(jobQueue.getQueueStats()).thenReturn(mockQueueStats);
|
* when(jobQueue.getQueueStats()).thenReturn(mockQueueStats);
|
||||||
*
|
*
|
||||||
* // Act ResponseEntity<?> response = controller.getQueueStats();
|
* // Act ResponseEntity<?> response = controller.getQueueStats();
|
||||||
*
|
*
|
||||||
* // Assert assertEquals(HttpStatus.OK, response.getStatusCode());
|
* // Assert assertEquals(HttpStatus.OK, response.getStatusCode());
|
||||||
* assertEquals(mockQueueStats, response.getBody());
|
* assertEquals(mockQueueStats, response.getBody());
|
||||||
* verify(jobQueue).getQueueStats(); }
|
* verify(jobQueue).getQueueStats(); }
|
||||||
@ -271,32 +271,32 @@ class JobControllerTest {
|
|||||||
void testCancelJob_InQueue() {
|
void testCancelJob_InQueue() {
|
||||||
// Arrange
|
// Arrange
|
||||||
String jobId = "job-in-queue";
|
String jobId = "job-in-queue";
|
||||||
|
|
||||||
// Setup user session with job authorization
|
// Setup user session with job authorization
|
||||||
java.util.Set<String> userJobIds = new java.util.HashSet<>();
|
java.util.Set<String> userJobIds = new java.util.HashSet<>();
|
||||||
userJobIds.add(jobId);
|
userJobIds.add(jobId);
|
||||||
session.setAttribute("userJobIds", userJobIds);
|
session.setAttribute("userJobIds", userJobIds);
|
||||||
|
|
||||||
when(jobQueue.isJobQueued(jobId)).thenReturn(true);
|
when(jobQueue.isJobQueued(jobId)).thenReturn(true);
|
||||||
when(jobQueue.getJobPosition(jobId)).thenReturn(2);
|
when(jobQueue.getJobPosition(jobId)).thenReturn(2);
|
||||||
when(jobQueue.cancelJob(jobId)).thenReturn(true);
|
when(jobQueue.cancelJob(jobId)).thenReturn(true);
|
||||||
|
|
||||||
// Act
|
// Act
|
||||||
ResponseEntity<?> response = controller.cancelJob(jobId);
|
ResponseEntity<?> response = controller.cancelJob(jobId);
|
||||||
|
|
||||||
// Assert
|
// Assert
|
||||||
assertEquals(HttpStatus.OK, response.getStatusCode());
|
assertEquals(HttpStatus.OK, response.getStatusCode());
|
||||||
|
|
||||||
@SuppressWarnings("unchecked")
|
@SuppressWarnings("unchecked")
|
||||||
Map<String, Object> responseBody = (Map<String, Object>) response.getBody();
|
Map<String, Object> responseBody = (Map<String, Object>) response.getBody();
|
||||||
assertEquals("Job cancelled successfully", responseBody.get("message"));
|
assertEquals("Job cancelled successfully", responseBody.get("message"));
|
||||||
assertTrue((Boolean) responseBody.get("wasQueued"));
|
assertTrue((Boolean) responseBody.get("wasQueued"));
|
||||||
assertEquals(2, responseBody.get("queuePosition"));
|
assertEquals(2, responseBody.get("queuePosition"));
|
||||||
|
|
||||||
verify(jobQueue).cancelJob(jobId);
|
verify(jobQueue).cancelJob(jobId);
|
||||||
verify(taskManager, never()).setError(anyString(), anyString());
|
verify(taskManager, never()).setError(anyString(), anyString());
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
void testCancelJob_Running() {
|
void testCancelJob_Running() {
|
||||||
// Arrange
|
// Arrange
|
||||||
@ -304,51 +304,51 @@ class JobControllerTest {
|
|||||||
JobResult jobResult = new JobResult();
|
JobResult jobResult = new JobResult();
|
||||||
jobResult.setJobId(jobId);
|
jobResult.setJobId(jobId);
|
||||||
jobResult.setComplete(false);
|
jobResult.setComplete(false);
|
||||||
|
|
||||||
// Setup user session with job authorization
|
// Setup user session with job authorization
|
||||||
java.util.Set<String> userJobIds = new java.util.HashSet<>();
|
java.util.Set<String> userJobIds = new java.util.HashSet<>();
|
||||||
userJobIds.add(jobId);
|
userJobIds.add(jobId);
|
||||||
session.setAttribute("userJobIds", userJobIds);
|
session.setAttribute("userJobIds", userJobIds);
|
||||||
|
|
||||||
when(jobQueue.isJobQueued(jobId)).thenReturn(false);
|
when(jobQueue.isJobQueued(jobId)).thenReturn(false);
|
||||||
when(taskManager.getJobResult(jobId)).thenReturn(jobResult);
|
when(taskManager.getJobResult(jobId)).thenReturn(jobResult);
|
||||||
|
|
||||||
// Act
|
// Act
|
||||||
ResponseEntity<?> response = controller.cancelJob(jobId);
|
ResponseEntity<?> response = controller.cancelJob(jobId);
|
||||||
|
|
||||||
// Assert
|
// Assert
|
||||||
assertEquals(HttpStatus.OK, response.getStatusCode());
|
assertEquals(HttpStatus.OK, response.getStatusCode());
|
||||||
|
|
||||||
@SuppressWarnings("unchecked")
|
@SuppressWarnings("unchecked")
|
||||||
Map<String, Object> responseBody = (Map<String, Object>) response.getBody();
|
Map<String, Object> responseBody = (Map<String, Object>) response.getBody();
|
||||||
assertEquals("Job cancelled successfully", responseBody.get("message"));
|
assertEquals("Job cancelled successfully", responseBody.get("message"));
|
||||||
assertFalse((Boolean) responseBody.get("wasQueued"));
|
assertFalse((Boolean) responseBody.get("wasQueued"));
|
||||||
assertEquals("n/a", responseBody.get("queuePosition"));
|
assertEquals("n/a", responseBody.get("queuePosition"));
|
||||||
|
|
||||||
verify(jobQueue, never()).cancelJob(jobId);
|
verify(jobQueue, never()).cancelJob(jobId);
|
||||||
verify(taskManager).setError(jobId, "Job was cancelled by user");
|
verify(taskManager).setError(jobId, "Job was cancelled by user");
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
void testCancelJob_NotFound() {
|
void testCancelJob_NotFound() {
|
||||||
// Arrange
|
// Arrange
|
||||||
String jobId = "non-existent-job";
|
String jobId = "non-existent-job";
|
||||||
|
|
||||||
// Setup user session with job authorization
|
// Setup user session with job authorization
|
||||||
java.util.Set<String> userJobIds = new java.util.HashSet<>();
|
java.util.Set<String> userJobIds = new java.util.HashSet<>();
|
||||||
userJobIds.add(jobId);
|
userJobIds.add(jobId);
|
||||||
session.setAttribute("userJobIds", userJobIds);
|
session.setAttribute("userJobIds", userJobIds);
|
||||||
|
|
||||||
when(jobQueue.isJobQueued(jobId)).thenReturn(false);
|
when(jobQueue.isJobQueued(jobId)).thenReturn(false);
|
||||||
when(taskManager.getJobResult(jobId)).thenReturn(null);
|
when(taskManager.getJobResult(jobId)).thenReturn(null);
|
||||||
|
|
||||||
// Act
|
// Act
|
||||||
ResponseEntity<?> response = controller.cancelJob(jobId);
|
ResponseEntity<?> response = controller.cancelJob(jobId);
|
||||||
|
|
||||||
// Assert
|
// Assert
|
||||||
assertEquals(HttpStatus.NOT_FOUND, response.getStatusCode());
|
assertEquals(HttpStatus.NOT_FOUND, response.getStatusCode());
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
void testCancelJob_AlreadyComplete() {
|
void testCancelJob_AlreadyComplete() {
|
||||||
// Arrange
|
// Arrange
|
||||||
@ -356,51 +356,51 @@ class JobControllerTest {
|
|||||||
JobResult jobResult = new JobResult();
|
JobResult jobResult = new JobResult();
|
||||||
jobResult.setJobId(jobId);
|
jobResult.setJobId(jobId);
|
||||||
jobResult.setComplete(true);
|
jobResult.setComplete(true);
|
||||||
|
|
||||||
// Setup user session with job authorization
|
// Setup user session with job authorization
|
||||||
java.util.Set<String> userJobIds = new java.util.HashSet<>();
|
java.util.Set<String> userJobIds = new java.util.HashSet<>();
|
||||||
userJobIds.add(jobId);
|
userJobIds.add(jobId);
|
||||||
session.setAttribute("userJobIds", userJobIds);
|
session.setAttribute("userJobIds", userJobIds);
|
||||||
|
|
||||||
when(jobQueue.isJobQueued(jobId)).thenReturn(false);
|
when(jobQueue.isJobQueued(jobId)).thenReturn(false);
|
||||||
when(taskManager.getJobResult(jobId)).thenReturn(jobResult);
|
when(taskManager.getJobResult(jobId)).thenReturn(jobResult);
|
||||||
|
|
||||||
// Act
|
// Act
|
||||||
ResponseEntity<?> response = controller.cancelJob(jobId);
|
ResponseEntity<?> response = controller.cancelJob(jobId);
|
||||||
|
|
||||||
// Assert
|
// Assert
|
||||||
assertEquals(HttpStatus.BAD_REQUEST, response.getStatusCode());
|
assertEquals(HttpStatus.BAD_REQUEST, response.getStatusCode());
|
||||||
|
|
||||||
@SuppressWarnings("unchecked")
|
@SuppressWarnings("unchecked")
|
||||||
Map<String, Object> responseBody = (Map<String, Object>) response.getBody();
|
Map<String, Object> responseBody = (Map<String, Object>) response.getBody();
|
||||||
assertEquals("Cannot cancel job that is already complete", responseBody.get("message"));
|
assertEquals("Cannot cancel job that is already complete", responseBody.get("message"));
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
void testCancelJob_Unauthorized() {
|
void testCancelJob_Unauthorized() {
|
||||||
// Arrange
|
// Arrange
|
||||||
String jobId = "unauthorized-job";
|
String jobId = "unauthorized-job";
|
||||||
|
|
||||||
// Setup user session with other job IDs but not this one
|
// Setup user session with other job IDs but not this one
|
||||||
java.util.Set<String> userJobIds = new java.util.HashSet<>();
|
java.util.Set<String> userJobIds = new java.util.HashSet<>();
|
||||||
userJobIds.add("other-job-1");
|
userJobIds.add("other-job-1");
|
||||||
userJobIds.add("other-job-2");
|
userJobIds.add("other-job-2");
|
||||||
session.setAttribute("userJobIds", userJobIds);
|
session.setAttribute("userJobIds", userJobIds);
|
||||||
|
|
||||||
// Act
|
// Act
|
||||||
ResponseEntity<?> response = controller.cancelJob(jobId);
|
ResponseEntity<?> response = controller.cancelJob(jobId);
|
||||||
|
|
||||||
// Assert
|
// Assert
|
||||||
assertEquals(HttpStatus.FORBIDDEN, response.getStatusCode());
|
assertEquals(HttpStatus.FORBIDDEN, response.getStatusCode());
|
||||||
|
|
||||||
@SuppressWarnings("unchecked")
|
@SuppressWarnings("unchecked")
|
||||||
Map<String, Object> responseBody = (Map<String, Object>) response.getBody();
|
Map<String, Object> responseBody = (Map<String, Object>) response.getBody();
|
||||||
assertEquals("You are not authorized to cancel this job", responseBody.get("message"));
|
assertEquals("You are not authorized to cancel this job", responseBody.get("message"));
|
||||||
|
|
||||||
// Verify no cancellation attempts were made
|
// Verify no cancellation attempts were made
|
||||||
verify(jobQueue, never()).isJobQueued(anyString());
|
verify(jobQueue, never()).isJobQueued(anyString());
|
||||||
verify(jobQueue, never()).cancelJob(anyString());
|
verify(jobQueue, never()).cancelJob(anyString());
|
||||||
verify(taskManager, never()).getJobResult(anyString());
|
verify(taskManager, never()).getJobResult(anyString());
|
||||||
verify(taskManager, never()).setError(anyString(), anyString());
|
verify(taskManager, never()).setError(anyString(), anyString());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -253,7 +253,7 @@ typing-extensions==4.12.2 \
|
|||||||
--hash=sha256:04e5ca0351e0f3f85c6853954072df659d0d13fac324d0072316b67d7794700d \
|
--hash=sha256:04e5ca0351e0f3f85c6853954072df659d0d13fac324d0072316b67d7794700d \
|
||||||
--hash=sha256:1a7ead55c7e559dd4dee8856e3a88b41225abfe1ce8df57b7c13915fe121ffb8
|
--hash=sha256:1a7ead55c7e559dd4dee8856e3a88b41225abfe1ce8df57b7c13915fe121ffb8
|
||||||
# via pypdf
|
# via pypdf
|
||||||
urllib3==2.3.0 \
|
urllib3==2.5.0 \
|
||||||
--hash=sha256:1cee9ad369867bfdbbb48b7dd50374c0967a0bb7710050facf0dd6911440e3df \
|
--hash=sha256:3fc47733c7e419d4bc3f6b3dc2b4f890bb743906a30d56ba4a5bfa4bbff92760 \
|
||||||
--hash=sha256:f8c5449b3cf0861679ce7e0503c7b44b5ec981bec0d1d3795a07f1ba96f0204d
|
--hash=sha256:e6b01673c0fa6a13e374b50871808eb3bf7046c4b125b216f6bf1cc604cff0dc
|
||||||
# via requests
|
# via requests
|
||||||
|
Loading…
x
Reference in New Issue
Block a user