Compare commits

...

203 Commits

Author SHA1 Message Date
Anthony Stirling
7ead12922f new page 2023-07-26 22:08:34 +01:00
Anthony Stirling
33a6a7869c Further Fixes 2023-07-26 22:08:19 +01:00
Anthony Stirling
bf995f989c fixes 2023-07-26 13:00:06 +01:00
systo
c14aa6851e Merge branch 'main' of git@github.com:Frooodle/Stirling-PDF.git into main 2023-07-25 23:36:32 +01:00
Anthony Stirling
8260eced2d auto split cleanup 2023-07-25 23:36:19 +01:00
Anthony Stirling
d028465dc5 Update README.md 2023-07-25 21:21:43 +01:00
Anthony Stirling
29dab5e47d numbers name 2023-07-25 00:01:20 +01:00
Anthony Stirling
9e655631b4 lang cleanup 2023-07-24 23:53:52 +01:00
Anthony Stirling
179c7b80bb languages 2023-07-24 23:12:33 +01:00
Anthony Stirling
349bf29122 fix navbar not supporting other languages nicely size wise 2023-07-23 23:20:30 +01:00
Anthony Stirling
295357f12b tags and searching 2023-07-23 23:05:02 +01:00
Anthony Stirling
940f8d999e Update messages_en_GB.properties 2023-07-23 15:13:33 +01:00
Anthony Stirling
5605d53a5f Update messages_en_GB.properties 2023-07-23 13:05:47 +01:00
Anthony Stirling
116d103119 html to pdf 2023-07-23 00:03:25 +01:00
Anthony Stirling
2fd8c643af UI for html/url 2023-07-22 17:27:08 +01:00
Anthony Stirling
4367ae7934 html and url to pdf init 2023-07-22 16:57:40 +01:00
Anthony Stirling
749461334d pdfjs worker changes and crop fix 2023-07-22 13:17:24 +01:00
Anthony Stirling
e83a027023 Merge pull request #266 from webysther/patch-1
Update HowToUseOCR.md
2023-07-19 23:35:20 +01:00
Anthony Stirling
1883b477a3 Merge branch 'main' into patch-1 2023-07-19 23:33:46 +01:00
Anthony Stirling
37e2cd40da Merge pull request #276 from Frooodle/pipelineStuff
Start of v0.11
2023-07-19 23:26:57 +01:00
Anthony Stirling
81a9329975 border to contrast 2023-07-19 23:23:08 +01:00
Anthony Stirling
0eb019fc3c searchbar cleanups 2023-07-19 23:15:16 +01:00
Anthony Stirling
4129c75475 crop fix, auto split docs and UI and message 2023-07-19 22:11:59 +01:00
Anthony Stirling
3d66f03f58 hide pipeline 2023-07-18 22:09:48 +01:00
Anthony Stirling
7b83104fd6 fix for #275 2023-07-18 22:04:18 +01:00
Anthony Stirling
794aede27f docs 2023-07-17 21:59:34 +01:00
Anthony Stirling
08eb39b206 divider examples 2023-07-16 23:52:09 +01:00
Anthony Stirling
2566c7f3d7 translations 2023-07-16 19:42:13 +01:00
Anthony Stirling
a8522bb3b5 GB pretty 2023-07-16 19:34:01 +01:00
Anthony Stirling
92b9142902 language cleanups and sanitize 2023-07-16 18:57:21 +01:00
Anthony Stirling
d07e3e6522 change add numbers grid and remove files from pipelines 2023-07-16 16:07:08 +01:00
Anthony Stirling
29aabdfba8 filter 2023-07-16 00:36:58 +01:00
Anthony Stirling
9af1b0cfdc some more changes also broke pipeline a bit 2023-07-15 16:06:33 +01:00
Anthony Stirling
6e32c7fe85 auto split init 2023-07-15 11:39:10 +01:00
Anthony Stirling
ddf5915c6a drag drop niceness 2023-07-13 22:03:23 +01:00
Anthony Stirling
cdbf1fa73a watermark features 2023-07-12 23:27:36 +01:00
Anthony Stirling
5d926b022b gitingore 2023-07-12 00:17:55 +01:00
Anthony Stirling
50bcca10e2 pipeline stuff 2023-07-12 00:17:44 +01:00
Webysther Sperandio
a5528c06ee Update HowToUseOCR.md 2023-07-10 13:49:58 +02:00
Anthony Stirling
94526de04b sign fix 2023-07-09 20:34:07 +01:00
Anthony Stirling
1ddf7abe6f extra fonts plus dynamic fonts 2023-07-09 19:36:41 +01:00
Anthony Stirling
a742c1b034 stuff 2023-07-09 18:10:10 +01:00
Anthony Stirling
6e726ac2a6 lots of stuff and garbage code for automate to cleanup lots 2023-07-09 00:05:33 +01:00
Anthony Stirling
5877b40be5 adjust contrast! 2023-07-06 22:52:22 +01:00
Anthony Stirling
a3c7f5aa46 Search bar and adjust contrast 2023-07-05 22:21:43 +01:00
Anthony Stirling
4e28bf03bd auto rename 2023-07-04 23:25:21 +01:00
Anthony Stirling
f92482d89e page numbers and custom images 2023-07-04 21:45:35 +01:00
Anthony Stirling
3c54429fe0 Update README.md 2023-07-02 19:19:49 +01:00
dependabot[bot]
4c4c22e861 Merge pull request #252 from Frooodle/dependabot/gradle/org.springframework.boot-3.1.1 2023-07-02 17:41:23 +00:00
Anthony Stirling
00e27d9327 Merge branch 'main' into dependabot/gradle/org.springframework.boot-3.1.1 2023-07-02 18:39:22 +01:00
dependabot[bot]
f082278041 Merge pull request #253 from Frooodle/dependabot/gradle/org.springframework.boot-spring-boot-starter-thymeleaf-3.1.1 2023-07-02 17:38:09 +00:00
Anthony Stirling
09dde64c57 Merge branch 'main' into dependabot/gradle/org.springframework.boot-spring-boot-starter-thymeleaf-3.1.1 2023-07-02 18:37:20 +01:00
dependabot[bot]
b52a6357f6 Merge pull request #239 from Frooodle/dependabot/gradle/edu.sc.seis.launch4j-3.0.3 2023-07-02 17:34:15 +00:00
Anthony Stirling
f14a566d06 Merge branch 'main' into dependabot/gradle/edu.sc.seis.launch4j-3.0.3 2023-07-02 18:33:21 +01:00
Anthony Stirling
b352ec6888 Merge pull request #234 from Frooodle/dependabot/gradle/commons-io-commons-io-2.13.0
Bump commons-io:commons-io from 2.11.0 to 2.13.0
2023-07-02 18:33:12 +01:00
Anthony Stirling
4ec1bad03d Merge branch 'main' into dependabot/gradle/commons-io-commons-io-2.13.0 2023-07-02 18:32:22 +01:00
Anthony Stirling
f20bbc119d Merge branch 'main' into dependabot/gradle/org.springframework.boot-spring-boot-starter-thymeleaf-3.1.1 2023-07-02 18:32:14 +01:00
Anthony Stirling
8555c3d422 Merge branch 'main' into dependabot/gradle/org.springframework.boot-3.1.1 2023-07-02 18:32:08 +01:00
Anthony Stirling
71f9d03b19 Merge pull request #251 from albertopasqualetto/main
addImage text was wrong
2023-07-02 18:31:33 +01:00
dependabot[bot]
0b31379078 Bump org.springframework.boot:spring-boot-starter-thymeleaf
Bumps [org.springframework.boot:spring-boot-starter-thymeleaf](https://github.com/spring-projects/spring-boot) from 3.1.0 to 3.1.1.
- [Release notes](https://github.com/spring-projects/spring-boot/releases)
- [Commits](https://github.com/spring-projects/spring-boot/compare/v3.1.0...v3.1.1)

---
updated-dependencies:
- dependency-name: org.springframework.boot:spring-boot-starter-thymeleaf
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2023-07-02 17:30:55 +00:00
dependabot[bot]
29c204b2c2 Bump org.springframework.boot from 3.1.0 to 3.1.1
Bumps [org.springframework.boot](https://github.com/spring-projects/spring-boot) from 3.1.0 to 3.1.1.
- [Release notes](https://github.com/spring-projects/spring-boot/releases)
- [Commits](https://github.com/spring-projects/spring-boot/compare/v3.1.0...v3.1.1)

---
updated-dependencies:
- dependency-name: org.springframework.boot
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2023-07-02 17:30:53 +00:00
dependabot[bot]
657e881963 Bump edu.sc.seis.launch4j from 3.0.1 to 3.0.3
Bumps edu.sc.seis.launch4j from 3.0.1 to 3.0.3.

---
updated-dependencies:
- dependency-name: edu.sc.seis.launch4j
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2023-07-02 17:30:51 +00:00
Anthony Stirling
ef6bdc70a4 Merge branch 'main' into dependabot/gradle/commons-io-commons-io-2.13.0 2023-07-02 18:30:35 +01:00
Anthony Stirling
e4a36115a2 Merge pull request #230 from Frooodle/dependabot/gradle/io.swagger.swaggerhub-1.2.0
Bump io.swagger.swaggerhub from 1.1.0 to 1.2.0
2023-07-02 18:30:19 +01:00
dependabot[bot]
325f86832c Bump commons-io:commons-io from 2.11.0 to 2.13.0
Bumps commons-io:commons-io from 2.11.0 to 2.13.0.

---
updated-dependencies:
- dependency-name: commons-io:commons-io
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2023-07-02 17:27:54 +00:00
dependabot[bot]
e3dbdd6b09 Bump io.swagger.swaggerhub from 1.1.0 to 1.2.0
Bumps io.swagger.swaggerhub from 1.1.0 to 1.2.0.

---
updated-dependencies:
- dependency-name: io.swagger.swaggerhub
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2023-07-02 17:27:54 +00:00
Anthony Stirling
919041e879 Update version and disable folder scan alpha 2023-07-02 18:27:23 +01:00
Anthony Stirling
182231a183 Merge pull request #256 from Frooodle/pipeline
Pipeline changes, fonts, and watermark fixes
2023-07-02 18:21:17 +01:00
Anthony Stirling
46d4ae8fc5 pipeline change 2023-07-02 18:20:23 +01:00
Anthony Stirling
73ab1936a3 filter update 2023-07-02 00:34:04 +01:00
Anthony Stirling
59c72527b5 remove from menu for now 2023-07-01 23:40:17 +01:00
Anthony Stirling
5ea3bcc1dd watermark stuff 2023-07-01 22:18:49 +01:00
Anthony Stirling
c140052822 watermark fix 2023-07-01 21:08:33 +01:00
Anthony Stirling
f7832774d9 cachec change 2023-06-29 23:59:15 +01:00
systo
279d25c03a Merge branch 'pipeline' of git@github.com:Frooodle/Stirling-PDF.git into pipeline 2023-06-29 23:34:22 +01:00
Anthony Stirling
f1984047a8 Update README.md 2023-06-29 22:03:31 +01:00
Anthony Stirling
eae7c1bd60 Update README.md 2023-06-29 22:02:59 +01:00
systo
d7f592ebda Merge remote-tracking branch 'origin/main' into pipeline 2023-06-29 22:01:49 +01:00
Anthony Stirling
1798ce002a Fix metrics 2023-06-29 21:51:08 +01:00
systo
57a0cca595 Merge remote-tracking branch 'origin/master' into pipeline 2023-06-29 19:13:33 +01:00
Anthony Stirling
b26fbd7693 Update README.md 2023-06-29 17:07:34 +01:00
Anthony Stirling
43b0e25bdb modes 2023-06-26 18:23:06 +01:00
Anthony Stirling
3377af1305 api tag 2023-06-25 09:16:32 +01:00
Anthony Stirling
c81c1006b7 Merge branch 'pipeline' of git@github.com:Frooodle/Stirling-PDF.git into
pipeline
2023-06-24 15:25:39 +01:00
systo
f313857f96 Merge branch 'pipeline' of git@github.com:Frooodle/Stirling-PDF.git into pipeline 2023-06-24 14:59:58 +01:00
Anthony Stirling
d5fbe02149 notosans arabic JP, KR SC 2023-06-24 14:59:49 +01:00
Anthony Stirling
159cee0b39 init many new shit 2023-06-23 23:29:53 +01:00
Alberto Pasqualetto
5da4dd6cca Fix addImages text 2023-06-23 00:11:26 +00:00
Anthony Stirling
e9daf05f16 pipeline cleanup 2023-06-21 21:41:58 +01:00
Anthony Stirling
a12643194a changes 2023-06-21 21:19:52 +01:00
Anthony Stirling
25d8fc08f7 Merge pull request #250 from inazkue/patch-1
Update navbar.html
2023-06-21 11:55:44 +01:00
inazkue
a72378dd4d Update navbar.html
fix navbar.html basque language item description
2023-06-21 11:10:50 +02:00
systo
9aed70408b Merge branch 'pipeline' of git@github.com:Frooodle/Stirling-PDF.git into pipeline 2023-06-20 23:50:05 +01:00
Anthony Stirling
5ae2c71c3a Input:PDF Output:PDF 2023-06-20 23:49:53 +01:00
Anthony Stirling
4edce515b8 Merge pull request #249 from inazkue/main
Basque language
2023-06-20 21:42:57 +01:00
Anthony Stirling
67ff664eb8 Delete messages_eu_EU.properties 2023-06-20 21:41:44 +01:00
inazkue
71c1a4f102 Update navbar.html 2023-06-20 14:44:37 +02:00
inazkue
ba4ba1b9fc Add files via upload 2023-06-20 14:38:11 +02:00
inazkue
59f10f06ca Add files via upload 2023-06-19 11:57:18 +02:00
inazkue
f7953cbc37 Add files via upload 2023-06-19 11:55:54 +02:00
Anthony Stirling
9a74e81754 text 2023-06-14 19:57:01 +01:00
Anthony Stirling
420e4b6766 fixes 2023-06-13 23:50:46 +01:00
Anthony Stirling
aed48ffc93 pipe 2023-06-13 19:18:40 +01:00
Anthony Stirling
0cebe69ff8 Pipeline init 2023-06-13 00:32:15 +01:00
Anthony Stirling
e5990dba81 Update Beans.java 2023-06-12 17:31:42 +01:00
Anthony Stirling
c9b0d01250 Update push-docker.yml 2023-06-12 16:20:14 +01:00
Anthony Stirling
4918ed3f3c Merge pull request #238 from tkymmm/japanese
Japanese
2023-06-12 11:02:28 +01:00
tkymmm
b176ce4251 Update navbar.html 2023-06-12 14:57:51 +09:00
tkymmm
518ff5409e Add files via upload 2023-06-12 14:56:45 +09:00
tkymmm
803bd3c5b2 Add files via upload 2023-06-12 14:56:05 +09:00
Anthony Stirling
03d4e73304 jar name change 2023-06-10 18:24:32 +01:00
Anthony Stirling
55a820b09f Update build.gradle 2023-06-10 18:20:28 +01:00
Anthony Stirling
f2a65dc360 Update build.gradle 2023-06-10 18:15:23 +01:00
Anthony Stirling
7b4a889ea7 Remove debugs 2023-06-10 18:14:34 +01:00
Anthony Stirling
f627d251c3 Update releaseArtifacts.yml 2023-06-10 18:06:59 +01:00
Anthony Stirling
d5b7125415 Rename app to Stirling-PDF not S-pdf 2023-06-10 18:04:06 +01:00
Anthony Stirling
67dd3cf0e3 Update releaseArtifacts.yml 2023-06-10 17:54:50 +01:00
Anthony Stirling
b8b62bb5af Update releaseArtifacts.yml 2023-06-10 17:44:02 +01:00
Anthony Stirling
b4a9d1ac18 Update releaseArtifacts.yml 2023-06-10 17:39:36 +01:00
Anthony Stirling
8aae651c2c Update releaseArtifacts.yml 2023-06-10 15:22:35 +01:00
Anthony Stirling
fc9465b324 Update releaseArtifacts.yml 2023-06-10 15:21:54 +01:00
Anthony Stirling
579a50be2c Update releaseArtifacts.yml 2023-06-10 15:15:51 +01:00
Anthony Stirling
9c5b967e4c fix 2023-06-10 15:10:37 +01:00
Anthony Stirling
d41deb729b fix for action 2023-06-10 15:07:20 +01:00
Anthony Stirling
a93a89f3f0 github action for release upload 2023-06-10 15:06:01 +01:00
Anthony Stirling
11d642a25f Upload jar and .exe to release 2023-06-10 15:05:38 +01:00
Anthony Stirling
67448498ea documentation stuff and downloer fix for image to pdf 2023-06-10 00:46:44 +01:00
Anthony Stirling
489b8da713 fix for actions 2023-06-08 22:28:13 +01:00
Anthony Stirling
728d4d0fa8 latest 2023-06-08 22:02:09 +01:00
Anthony Stirling
e70f4ff3a6 version bump 2023-06-08 20:45:35 +01:00
Anthony Stirling
04032c0dfe sign changes min size, lite docker, merge fix #172 2023-06-08 20:25:55 +01:00
Anthony Stirling
ecba6461df Merge branch 'main' of git@github.com:Frooodle/Stirling-PDF.git into
main
2023-06-07 14:47:06 +01:00
Anthony Stirling
433ba6c250 groups update 2023-06-07 14:13:18 +01:00
Anthony Stirling
ff6c55d1d0 fix naming issues in split and made it allign with others 2023-06-07 14:01:37 +01:00
Anthony Stirling
d9f8facf2e Merge pull request #232 from NeilJared/patch-1
Update messages_es_ES.properties
2023-06-06 00:26:20 +01:00
NeilJared
6bd3e5cc8f Update messages_es_ES.properties
Updated Spanish translation
2023-06-06 01:12:03 +02:00
Anthony Stirling
936fb5ae45 Update README.md 2023-06-05 23:08:55 +01:00
Anthony Stirling
8e661e1260 fix spanish remove blanks 2023-06-05 22:30:18 +01:00
Anthony Stirling
987d9b0502 Merge pull request #227 from jordyjordy/fix-imgtopdf-typo
fix typo in img conversion filename
2023-06-05 19:42:48 +01:00
Anthony Stirling
f6a9169446 Merge branch 'main' into fix-imgtopdf-typo 2023-06-05 19:41:24 +01:00
Anthony Stirling
d5c1c43eb1 Merge pull request #228 from jordyjordy/fix-multitool-filemixing
await pdf creation in each for loop.
2023-06-05 19:41:15 +01:00
Anthony Stirling
20c74dac60 Merge branch 'main' into fix-multitool-filemixing 2023-06-05 19:40:00 +01:00
Anthony Stirling
30161275a3 Merge branch 'main' into fix-imgtopdf-typo 2023-06-05 19:39:14 +01:00
jordy
7e9479806e await pdf creation in each for loop. 2023-06-05 19:38:25 +02:00
jordy
39b9ea9f1d fix typo 2023-06-05 19:25:36 +02:00
Anthony Stirling
5a9165d7c6 missing lang 2023-06-05 18:23:15 +01:00
Anthony Stirling
4f851156b7 dummy lang changes 2023-06-04 22:40:14 +01:00
Anthony Stirling
b8fa278173 finalise auto swagger docs 2023-06-03 23:32:47 +01:00
Anthony Stirling
2cfb344e13 swagger 2023-06-03 23:24:40 +01:00
Anthony Stirling
1d2bf92abe Merge branch 'main' of git@github.com:Frooodle/Stirling-PDF.git into
main
2023-06-03 23:21:47 +01:00
Anthony Stirling
cefcda9f40 test 2023-06-03 23:21:12 +01:00
Anthony Stirling
a4bc67ff8e Update swagger.yml 2023-06-03 23:08:10 +01:00
Anthony Stirling
48b3dea256 remove push 2023-06-03 23:05:20 +01:00
Anthony Stirling
1f5231d905 @./SwaggerDoc.json 2023-06-03 23:01:14 +01:00
Anthony Stirling
c526e18992 Split pages support n function and other stuff 2023-06-03 22:56:15 +01:00
Anthony Stirling
4594765cbd rearrange support n numbers, downloader.js fixes 2023-06-03 17:21:59 +01:00
Anthony Stirling
e2a787e519 Hide banner if mobile 2023-06-02 23:43:22 +01:00
Anthony Stirling
45b3e0aa6a JS and css cleanup 2023-06-02 20:15:10 +01:00
Anthony Stirling
7bdb2615d4 css cleanup 2023-06-01 23:12:55 +01:00
systo
019a502490 Merge branch 'main' of git@github.com:Frooodle/Stirling-PDF.git into main 2023-06-01 21:37:40 +01:00
Anthony Stirling
6793fd5bc7 thirs party js folder 2023-06-01 21:37:33 +01:00
systo
8ac5cf759e Merge branch 'main' of git@github.com:Frooodle/Stirling-PDF.git into main 2023-06-01 11:22:56 +01:00
Anthony Stirling
19880567ba Donation buttons 2023-06-01 11:22:44 +01:00
Anthony Stirling
5c5a3fefc1 Merge pull request #205 from Frooodle/dependabot/gradle/org.springframework.boot-spring-boot-starter-test-3.1.0
Bump org.springframework.boot:spring-boot-starter-test from 3.0.6 to 3.1.0
2023-06-01 10:53:13 +01:00
Anthony Stirling
90057828a5 Merge branch 'main' into dependabot/gradle/org.springframework.boot-spring-boot-starter-test-3.1.0 2023-06-01 10:52:24 +01:00
Anthony Stirling
7cfc3a09a2 Merge pull request #206 from Frooodle/dependabot/gradle/org.springframework.boot-3.1.0
Bump org.springframework.boot from 3.0.6 to 3.1.0
2023-06-01 10:52:08 +01:00
dependabot[bot]
b8bbee27f8 Bump org.springframework.boot:spring-boot-starter-test
Bumps [org.springframework.boot:spring-boot-starter-test](https://github.com/spring-projects/spring-boot) from 3.0.6 to 3.1.0.
- [Release notes](https://github.com/spring-projects/spring-boot/releases)
- [Commits](https://github.com/spring-projects/spring-boot/compare/v3.0.6...v3.1.0)

---
updated-dependencies:
- dependency-name: org.springframework.boot:spring-boot-starter-test
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2023-06-01 09:51:11 +00:00
Anthony Stirling
8e5c665e49 Merge branch 'main' into dependabot/gradle/org.springframework.boot-3.1.0 2023-06-01 10:50:49 +01:00
Anthony Stirling
7b1e6fb953 Merge pull request #204 from Frooodle/dependabot/gradle/org.springframework.boot-spring-boot-starter-thymeleaf-3.1.0
Bump org.springframework.boot:spring-boot-starter-thymeleaf from 3.0.6 to 3.1.0
2023-06-01 10:50:22 +01:00
dependabot[bot]
79936e69c5 Bump org.springframework.boot from 3.0.6 to 3.1.0
Bumps [org.springframework.boot](https://github.com/spring-projects/spring-boot) from 3.0.6 to 3.1.0.
- [Release notes](https://github.com/spring-projects/spring-boot/releases)
- [Commits](https://github.com/spring-projects/spring-boot/compare/v3.0.6...v3.1.0)

---
updated-dependencies:
- dependency-name: org.springframework.boot
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2023-06-01 09:49:33 +00:00
dependabot[bot]
a19cd327f3 Bump org.springframework.boot:spring-boot-starter-thymeleaf
Bumps [org.springframework.boot:spring-boot-starter-thymeleaf](https://github.com/spring-projects/spring-boot) from 3.0.6 to 3.1.0.
- [Release notes](https://github.com/spring-projects/spring-boot/releases)
- [Commits](https://github.com/spring-projects/spring-boot/compare/v3.0.6...v3.1.0)

---
updated-dependencies:
- dependency-name: org.springframework.boot:spring-boot-starter-thymeleaf
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2023-06-01 09:49:26 +00:00
Anthony Stirling
5c831c156b Merge pull request #203 from Frooodle/dependabot/gradle/org.springframework.boot-spring-boot-starter-web-3.1.0
Bump org.springframework.boot:spring-boot-starter-web from 3.0.6 to 3.1.0
2023-06-01 10:48:55 +01:00
Anthony Stirling
602df08df5 Merge branch 'main' into dependabot/gradle/org.springframework.boot-spring-boot-starter-web-3.1.0 2023-06-01 10:48:04 +01:00
Anthony Stirling
3b8d06a9e3 Merge pull request #222 from MarcO-79/patch-14
Update messages_pl_PL.properties
2023-06-01 07:40:45 +01:00
Marcin Bielicki
5fd43b50e0 Update messages_pl_PL.properties
Adjusting the translation to the new version
2023-06-01 08:00:39 +02:00
Anthony Stirling
15d39413f3 scaled changes 2023-05-31 21:33:45 +01:00
systo
5e01946981 Merge branch 'main' of git@github.com:Frooodle/Stirling-PDF.git into main 2023-05-31 21:28:15 +01:00
Anthony Stirling
576d11f09a Download cleanup 2023-05-31 21:28:05 +01:00
Anthony Stirling
a43c296eef Merge pull request #221 from LaserKaspar/main
Scale Pages
2023-05-31 21:27:32 +01:00
Felix Kaspar
6015591e34 Language 2023-05-31 21:44:59 +02:00
Felix Kaspar
6f5f031b24 Scale Pages 2023-05-31 21:39:40 +02:00
Anthony Stirling
1499e78795 GeneralUtils 2023-05-31 20:37:13 +01:00
Anthony Stirling
1b45ab7222 util move around 2023-05-31 20:15:48 +01:00
Anthony Stirling
005b158ad3 naming fix 2023-05-31 18:44:32 +01:00
Anthony Stirling
26d003e840 css fix 2023-05-31 00:17:48 +01:00
Anthony Stirling
192fb39302 new error display logic init 2023-05-31 00:06:35 +01:00
dependabot[bot]
1650dfcc29 Bump org.springframework.boot:spring-boot-starter-web
Bumps [org.springframework.boot:spring-boot-starter-web](https://github.com/spring-projects/spring-boot) from 3.0.6 to 3.1.0.
- [Release notes](https://github.com/spring-projects/spring-boot/releases)
- [Commits](https://github.com/spring-projects/spring-boot/compare/v3.0.6...v3.1.0)

---
updated-dependencies:
- dependency-name: org.springframework.boot:spring-boot-starter-web
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2023-05-30 19:55:06 +00:00
Anthony Stirling
fda83c4c1d password fix init 2023-05-30 20:54:19 +01:00
systo
1a6ebbb8e5 Merge branch 'main' of git@github.com:Frooodle/Stirling-PDF.git into main 2023-05-30 19:46:09 +01:00
Anthony Stirling
ea1f8912b8 cert change remove requirement for para,s. pdf-to-img dpi fix 2023-05-30 19:45:51 +01:00
Anthony Stirling
a5885d2628 Merge pull request #218 from blairw/patch-1
Update LocalRunGuide.md
2023-05-29 23:27:57 +01:00
Blair Wang
716d4c6f28 Update LocalRunGuide.md
Correct small typo (`/build/libs/` does not exist, `./build/libs/` does)
2023-05-30 08:15:26 +10:00
Anthony Stirling
b3a36c82bb Merge pull request #215 from MarcO-79/patch-13
Update messages_pl_PL.properties
2023-05-29 14:02:43 +01:00
Marcin Bielicki
75fff1d52f Update messages_pl_PL.properties
Adjusting the translation to the new version
2023-05-29 13:34:20 +02:00
Anthony Stirling
2d88987cb3 Multi page layout init for #212 2023-05-27 14:23:25 +01:00
Anthony Stirling
8bbbdbd359 duplex 2023-05-26 23:53:11 +01:00
systo
8a2aa44de8 Merge branch 'main' of git@github.com:Frooodle/Stirling-PDF.git into main 2023-05-26 19:30:06 +01:00
Anthony Stirling
3715c555d3 fix for #213 2023-05-26 15:25:18 +01:00
Anthony Stirling
5e4de6cc5f some filename fixes for nicer extraction 2023-05-26 14:39:08 +01:00
Anthony Stirling
4cadfc64f6 Merge pull request #211 from itsfks/main
Adição tradução PT_BR
2023-05-26 10:15:35 +01:00
felipe
a3f0d47cad Adição tradução PT_BR 2023-05-25 20:49:04 -03:00
Anthony Stirling
bc55b5fdda Merge pull request #208 from MarcO-79/patch-12
Update messages_pl_PL.properties
2023-05-23 11:29:20 +01:00
Marcin Bielicki
43474712eb Update messages_pl_PL.properties
Corrections to the translation
2023-05-23 12:02:37 +02:00
182 changed files with 21155 additions and 8607 deletions

View File

@@ -8,7 +8,6 @@ on:
- main - main
jobs: jobs:
push: push:
runs-on: ubuntu-latest runs-on: ubuntu-latest
steps: steps:
@@ -46,13 +45,17 @@ jobs:
username: ${{ github.actor }} username: ${{ github.actor }}
password: ${{ github.token }} password: ${{ github.token }}
- name: Convert repository owner to lowercase
id: repoowner
run: echo "::set-output name=lowercase::$(echo ${{ github.repository_owner }} | awk '{print tolower($0)}')"
- name: Generate tags - name: Generate tags
id: meta id: meta
uses: docker/metadata-action@v4.4.0 uses: docker/metadata-action@v4.4.0
with: with:
images: | images: |
${{ secrets.DOCKER_HUB_USERNAME }}/s-pdf ${{ secrets.DOCKER_HUB_USERNAME }}/s-pdf
ghcr.io/${{ github.repository_owner }}/s-pdf ghcr.io/${{ steps.repoowner.outputs.lowercase }}/s-pdf
tags: | tags: |
type=raw,value=${{ steps.versionNumber.outputs.versionNumber }},enable=${{ github.ref == 'refs/heads/master' }} type=raw,value=${{ steps.versionNumber.outputs.versionNumber }},enable=${{ github.ref == 'refs/heads/master' }}
type=raw,value=latest,enable=${{ github.ref == 'refs/heads/master' }} type=raw,value=latest,enable=${{ github.ref == 'refs/heads/master' }}
@@ -76,27 +79,27 @@ jobs:
labels: ${{ steps.meta.outputs.labels }} labels: ${{ steps.meta.outputs.labels }}
platforms: linux/amd64,linux/arm64/v8 platforms: linux/amd64,linux/arm64/v8
- name: Generate tags
- name: Generate tags ultra-lite
id: meta2 id: meta2
uses: docker/metadata-action@v4.4.0 uses: docker/metadata-action@v4.4.0
if: github.ref != 'refs/heads/main'
with: with:
images: | images: |
${{ secrets.DOCKER_HUB_USERNAME }}/s-pdf ${{ secrets.DOCKER_HUB_USERNAME }}/s-pdf
ghcr.io/${{ github.repository_owner }}/s-pdf ghcr.io/${{ steps.repoowner.outputs.lowercase }}/s-pdf
tags: | tags: |
type=raw,value=${{ steps.versionNumber.outputs.versionNumber }}-ultra-light,enable=${{ github.ref == 'refs/heads/master' }} type=raw,value=${{ steps.versionNumber.outputs.versionNumber }}-ultra-lite,enable=${{ github.ref == 'refs/heads/master' }}
type=raw,value=latest-ultra-light,enable=${{ github.ref == 'refs/heads/master' }} type=raw,value=latest-ultra-lite,enable=${{ github.ref == 'refs/heads/master' }}
type=raw,value=alpha-ultra-light,enable=${{ github.ref == 'refs/heads/main' }}
- name: Convert repository owner to lowercase
id: repoowner
run: echo "::set-output name=lowercase::$(echo ${{ github.repository_owner }} | awk '{print tolower($0)}')"
- name: Build and push Dockerfile-ultralite - name: Build and push Dockerfile-ultra-lite
uses: docker/build-push-action@v4.0.0 uses: docker/build-push-action@v4.0.0
if: github.ref != 'refs/heads/main'
with: with:
context: . context: .
file: ./Dockerfile-ultralite file: ./Dockerfile-ultra-lite
push: true push: true
cache-from: type=gha cache-from: type=gha
cache-to: type=gha,mode=max cache-to: type=gha,mode=max
@@ -105,3 +108,29 @@ jobs:
platforms: linux/amd64,linux/arm64/v8 platforms: linux/amd64,linux/arm64/v8
- name: Generate tags lite
id: meta3
uses: docker/metadata-action@v4.4.0
if: github.ref != 'refs/heads/main'
with:
images: |
${{ secrets.DOCKER_HUB_USERNAME }}/s-pdf
ghcr.io/${{ steps.repoowner.outputs.lowercase }}/s-pdf
tags: |
type=raw,value=${{ steps.versionNumber.outputs.versionNumber }}-lite,enable=${{ github.ref == 'refs/heads/master' }}
type=raw,value=latest-lite,enable=${{ github.ref == 'refs/heads/master' }}
- name: Build and push Dockerfile-lite
uses: docker/build-push-action@v4.0.0
if: github.ref != 'refs/heads/main'
with:
context: .
file: ./Dockerfile-lite
push: true
cache-from: type=gha
cache-to: type=gha,mode=max
tags: ${{ steps.meta3.outputs.tags }}
labels: ${{ steps.meta3.outputs.labels }}
platforms: linux/amd64,linux/arm64/v8

45
.github/workflows/releaseArtifacts.yml vendored Normal file
View File

@@ -0,0 +1,45 @@
name: Release Artifacts
on:
release:
types: [created]
jobs:
push:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3.5.2
- name: Set up JDK 17
uses: actions/setup-java@v3.11.0
with:
java-version: '17'
distribution: 'temurin'
- name: Grant execute permission for gradlew
run: chmod +x gradlew
- name: Generate jar
run: ./gradlew clean createExe
- name: Upload binaries to release
uses: svenstaro/upload-release-action@v2
with:
repo_token: ${{ secrets.GITHUB_TOKEN }}
file: ./build/launch4j/Stirling-PDF.exe
asset_name: Stirling-PDF.exe
tag: ${{ github.ref }}
overwrite: true
- name: Get version number
id: versionNumber
run: echo "::set-output name=versionNumber::$(./gradlew printVersion --quiet | tail -1)"
- name: Upload binaries to release
uses: svenstaro/upload-release-action@v2
with:
repo_token: ${{ secrets.GITHUB_TOKEN }}
file: ./build/libs/Stirling-PDF-${{ steps.versionNumber.outputs.versionNumber }}.jar
asset_name: Stirling-PDF.jar
tag: ${{ github.ref }}
overwrite: true

37
.github/workflows/swagger.yml vendored Normal file
View File

@@ -0,0 +1,37 @@
name: Update Swagger
on:
workflow_dispatch:
push:
branches:
- master
jobs:
push:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3.5.2
- name: Set up JDK 17
uses: actions/setup-java@v3.11.0
with:
java-version: '17'
distribution: 'temurin'
- name: Grant execute permission for gradlew
run: chmod +x gradlew
- name: Generate Swagger documentation
run: ./gradlew generateOpenApiDocs
- name: Upload Swagger Documentation to SwaggerHub
run: ./gradlew swaggerhubUpload
env:
SWAGGERHUB_API_KEY: ${{ secrets.SWAGGERHUB_API_KEY }}
- name: Set API version as published and default on SwaggerHub
run: |
curl -X PUT -H "Authorization: ${SWAGGERHUB_API_KEY}" "https://api.swaggerhub.com/apis/Frooodle/Stirling-PDF/${{ steps.versionNumber.outputs.versionNumber }}/settings/lifecycle" -H "accept: application/json" -H "Content-Type: application/json" -d "{\"published\":true,\"default\":true}"
env:
SWAGGERHUB_API_KEY: ${{ secrets.SWAGGERHUB_API_KEY }}

8
.gitignore vendored
View File

@@ -14,6 +14,14 @@ local.properties
.recommenders .recommenders
.classpath .classpath
.project .project
version.properties
pipeline/
#### Stirling-PDF Files ###
customFiles/
config/
watchedFolders/
# Gradle # Gradle
.gradle .gradle

View File

@@ -1,10 +1,16 @@
# Build jbig2enc in a separate stage # Build jbig2enc in a separate stage
FROM frooodle/stirling-pdf-base:beta3 FROM frooodle/stirling-pdf-base:beta4
# Create scripts folder and copy local scripts # Create scripts folder and copy local scripts
RUN mkdir /scripts RUN mkdir /scripts
COPY ./scripts/* /scripts/ COPY ./scripts/* /scripts/
#Install fonts
RUN mkdir /usr/share/fonts/opentype/noto/
COPY src/main/resources/static/fonts/*.ttf /usr/share/fonts/opentype/noto/
COPY src/main/resources/static/fonts/*.otf /usr/share/fonts/opentype/noto/
RUN fc-cache -f -v
# Copy the application JAR file # Copy the application JAR file
COPY build/libs/*.jar app.jar COPY build/libs/*.jar app.jar

29
Dockerfile-lite Normal file
View File

@@ -0,0 +1,29 @@
# Build jbig2enc in a separate stage
FROM bellsoft/liberica-openjdk-debian:17
RUN apt-get update && \
apt-get install -y --no-install-recommends \
libreoffice-core-nogui \
libreoffice-common \
libreoffice-writer-nogui \
libreoffice-calc-nogui \
libreoffice-impress-nogui \
unoconv && \
rm -rf /var/lib/apt/lists/*
#Install fonts
RUN mkdir /usr/share/fonts/opentype/noto/
COPY src/main/resources/static/fonts/*.ttf /usr/share/fonts/opentype/noto/
COPY src/main/resources/static/fonts/*.otf /usr/share/fonts/opentype/noto/
RUN fc-cache -f -v
# Copy the application JAR file
COPY build/libs/*.jar app.jar
# Expose the application port
EXPOSE 8080
# Set environment variables
ENV GROUPS_TO_REMOVE=Python,OpenCV,OCRmyPDF
# Run the application
CMD ["java", "-jar", "/app.jar"]

View File

@@ -1,5 +1,5 @@
# Build jbig2enc in a separate stage # Build jbig2enc in a separate stage
FROM openjdk:17-jdk-slim FROM bellsoft/liberica-openjdk-alpine:17
# Copy the application JAR file # Copy the application JAR file
COPY build/libs/*.jar app.jar COPY build/libs/*.jar app.jar
@@ -8,7 +8,7 @@ COPY build/libs/*.jar app.jar
EXPOSE 8080 EXPOSE 8080
# Set environment variables # Set environment variables
ENV GROUPS_TO_REMOVE=LibreOffice,CLI ENV GROUPS_TO_REMOVE=CLI
# Run the application # Run the application
CMD ["java", "-jar", "/app.jar"] CMD ["java", "-jar", "/app.jar"]

View File

@@ -1,5 +1,5 @@
# Main stage # Main stage
FROM openjdk:17-jdk-slim AS base FROM bellsoft/liberica-openjdk-debian:17 AS base
RUN apt-get update && \ RUN apt-get update && \
apt-get install -y --no-install-recommends \ apt-get install -y --no-install-recommends \
libreoffice-core-nogui \ libreoffice-core-nogui \
@@ -29,7 +29,7 @@ RUN apt-get update && \
libjpeg-dev && \ libjpeg-dev && \
pip install --upgrade pip && \ pip install --upgrade pip && \
pip install --no-cache-dir \ pip install --no-cache-dir \
opencv-python-headless && \ opencv-python-headless WeasyPrint && \
rm -rf /var/lib/apt/lists/* rm -rf /var/lib/apt/lists/*
# Final stage: Copy necessary files from the previous stage # Final stage: Copy necessary files from the previous stage

41
Endpoint-groups.md Normal file
View File

@@ -0,0 +1,41 @@
| Operation | PageOps | Convert | Security | Other | CLI | Python | OpenCV | LibreOffice | OCRmyPDF | Java | Javascript |
|---------------------|---------|---------|----------|-------|------|--------|--------|-------------|----------|----------|------------|
| adjust-contrast | ✔️ | | | | | | | | | | ✔️ |
| auto-split-pdf | ✔️ | | | | | | | | | ✔️ | |
| crop | ✔️ | | | | | | | | | ✔️ | |
| merge-pdfs | ✔️ | | | | | | | | | ✔️ | |
| multi-page-layout | ✔️ | | | | | | | | | ✔️ | |
| pdf-organizer | ✔️ | | | | | | | | | ✔️ | ✔️ |
| remove-pages | ✔️ | | | | | | | | | ✔️ | |
| rotate-pdf | ✔️ | | | | | | | | | ✔️ | |
| scale-pages | ✔️ | | | | | | | | | ✔️ | |
| split-pdfs | ✔️ | | | | | | | | | ✔️ | |
| file-to-pdf | | ✔️ | | | ✔️ | | | ✔️ | | | |
| img-to-pdf | | ✔️ | | | | | | | | ✔️ | |
| pdf-to-html | | ✔️ | | | ✔️ | | | ✔️ | | | |
| pdf-to-img | | ✔️ | | | | | | | | ✔️ | |
| pdf-to-pdfa | | ✔️ | | | ✔️ | | | | ✔️ | | |
| pdf-to-presentation | | ✔️ | | | ✔️ | | | ✔️ | | | |
| pdf-to-text | | ✔️ | | | ✔️ | | | ✔️ | | | |
| pdf-to-word | | ✔️ | | | ✔️ | | | ✔️ | | | |
| pdf-to-xml | | ✔️ | | | ✔️ | | | ✔️ | | | |
| xlsx-to-pdf | | ✔️ | | | ✔️ | | | ✔️ | | | |
| add-password | | | ✔️ | | | | | | | ✔️ | |
| add-watermark | | | ✔️ | | | | | | | ✔️ | |
| cert-sign | | | ✔️ | | | | | | | ✔️ | |
| change-permissions | | | ✔️ | | | | | | | ✔️ | |
| remove-password | | | ✔️ | | | | | | | ✔️ | |
| sanitize-pdf | | | ✔️ | | | | | | | ✔️ | |
| add-image | | | | ✔️ | | | | | | ✔️ | |
| add-page-numbers | | | | ✔️ | | | | | | ✔️ | |
| auto-rename | | | | ✔️ | | | | | | ✔️ | |
| change-metadata | | | | ✔️ | | | | | | ✔️ | |
| compare | | | | ✔️ | | | | | | | ✔️ |
| compress-pdf | | | | ✔️ | ✔️ | | | | ✔️ | | |
| extract-image-scans | | | | ✔️ | ✔️ | ✔️ | ✔️ | | | | |
| extract-images | | | | ✔️ | | | | | | ✔️ | |
| flatten | | | | ✔️ | | | | | | | |
| ocr-pdf | | | | ✔️ | ✔️ | | | | ✔️ | | |
| remove-blanks | | | | ✔️ | ✔️ | ✔️ | ✔️ | | | | |
| repair | | | | ✔️ | ✔️ | | | ✔️ | | | |
| sign | | | | ✔️ | | | | | | | ✔️ |

View File

@@ -3,7 +3,7 @@
This document provides instructions on how to add additional language packs for the OCR tab in Stirling-PDF, both inside and outside of Docker. This document provides instructions on how to add additional language packs for the OCR tab in Stirling-PDF, both inside and outside of Docker.
## How does the OCR Work ## How does the OCR Work
Stirling-PDF uses OCRmyPDF which in turn uses tesseract for its text recognition. Stirling-PDF uses [OCRmyPDF](https://github.com/ocrmypdf/OCRmyPDF) which in turn uses tesseract for its text recognition.
All credit goes to them for this awesome work! All credit goes to them for this awesome work!
## Language Packs ## Language Packs

View File

@@ -123,7 +123,7 @@ This folder is required for the python scripts using OpenCV
```bash ```bash
sudo mkdir /opt/Stirling-PDF &&\ sudo mkdir /opt/Stirling-PDF &&\
sudo mv /build/libs/S-PDF-*.jar /opt/Stirling-PDF/ &&\ sudo mv ./build/libs/Stirling-PDF-*.jar /opt/Stirling-PDF/ &&\
sudo mv scripts /opt/Stirling-PDF/ &&\ sudo mv scripts /opt/Stirling-PDF/ &&\
echo "Scripts installed." echo "Scripts installed."
``` ```

View File

@@ -21,12 +21,17 @@ Feel free to request any features or bug fixes either in github issues or our [D
![stirling-home](images/stirling-home.png) ![stirling-home](images/stirling-home.png)
## Features ## Features
- Full intractable GUI for merging/splitting/rotating/moving PDFs and their pages. - Full interactive GUI for merging/splitting/rotating/moving PDFs and their pages.
- Split PDFs into multiple files at specified page numbers or extract all pages as individual files. - Split PDFs into multiple files at specified page numbers or extract all pages as individual files.
- Merge multiple PDFs together into a single resultant file - Merge multiple PDFs together into a single resultant file
- Convert PDFs to and from images - Convert PDFs to and from images
- Reorganize PDF pages into different orders. - Reorganize PDF pages into different orders.
- Add/Generate signatures - Add/Generate signatures
- Format PDFs into a multi-paged page
- Scale page contents size by set %
- Adjust Contrast
- Crop PDF
- Auto Split PDF (With physically scanned page dividers)
- Flatten PDFs - Flatten PDFs
- Repair PDFs - Repair PDFs
- Detect and remove blank pages - Detect and remove blank pages
@@ -39,8 +44,14 @@ Feel free to request any features or bug fixes either in github issues or our [D
- Add watermark(s) - Add watermark(s)
- Convert Any common file to PDF (using LibreOffice) - Convert Any common file to PDF (using LibreOffice)
- Convert PDF to Word/Powerpoint/Others (using LibreOffice) - Convert PDF to Word/Powerpoint/Others (using LibreOffice)
- Convert HTML to PDF
- URL to PDF
- Extract images from PDF - Extract images from PDF
- Extract images from Scans
- Add page numbers
- Auto rename file by detecting PDF header text
- OCR on PDF (Using OCRMyPDF) - OCR on PDF (Using OCRMyPDF)
- PDF/A conversion (Using OCRMyPDF)
- Edit metadata - Edit metadata
- Dark mode support. - Dark mode support.
- Custom download options (see [here](https://github.com/Frooodle/Stirling-PDF/blob/main/images/settings.png) for example) - Custom download options (see [here](https://github.com/Frooodle/Stirling-PDF/blob/main/images/settings.png) for example)
@@ -53,6 +64,7 @@ Hosted instance/demo of the app can be seen [here](https://pdf.adminforge.de/) h
## Technologies used ## Technologies used
- Spring Boot + Thymeleaf - Spring Boot + Thymeleaf
- PDFBox - PDFBox
- IText7
- [LibreOffice](https://www.libreoffice.org/discover/libreoffice/) for advanced conversions - [LibreOffice](https://www.libreoffice.org/discover/libreoffice/) for advanced conversions
- [OcrMyPdf](https://github.com/ocrmypdf/OCRmyPDF) - [OcrMyPdf](https://github.com/ocrmypdf/OCRmyPDF)
- HTML, CSS, JavaScript - HTML, CSS, JavaScript
@@ -68,16 +80,25 @@ Please view https://github.com/Frooodle/Stirling-PDF/blob/main/LocalRunGuide.md
### Docker ### Docker
https://hub.docker.com/r/frooodle/s-pdf https://hub.docker.com/r/frooodle/s-pdf
Stirling PDF has 3 different versions, a Full version, Lite and ultra-Lite. Depending on the types of features you use you may want a smaller image to save on space.
To see what the different versions offer please look at our [version mapping](https://github.com/Frooodle/Stirling-PDF/blob/main/Version-groups.md)
For people that dont mind about space optimisation just use latest tag.
![Docker Image Size (tag)](https://img.shields.io/docker/image-size/frooodle/s-pdf/latest?label=Stirling-PDF%20Full)
![Docker Image Size (tag)](https://img.shields.io/docker/image-size/frooodle/s-pdf/latest-lite?label=Stirling-PDF%20Lite)
![Docker Image Size (tag)](https://img.shields.io/docker/image-size/frooodle/s-pdf/latest-ultra-lite?label=Stirling-PDF%20Ultra-Lite)
Docker Run Docker Run
``` ```
docker run -d \ docker run -d \
-p 8080:8080 \ -p 8080:8080 \
-v /location/of/trainingData:/usr/share/tesseract-ocr/4.00/tessdata \ -v /location/of/trainingData:/usr/share/tesseract-ocr/4.00/tessdata \
--name stirling-pdf \ --name stirling-pdf \
frooodle/s-pdf frooodle/s-pdf:latest
Can also add these for customisation but are not required Can also add these for customisation but are not required
-v /location/of/extraConfigs:/configs \
-v /location/of/customFiles:/customFiles \
-e APP_HOME_NAME="Stirling PDF" \ -e APP_HOME_NAME="Stirling PDF" \
-e APP_HOME_DESCRIPTION="Your locally hosted one-stop-shop for all your PDF needs." \ -e APP_HOME_DESCRIPTION="Your locally hosted one-stop-shop for all your PDF needs." \
-e APP_NAVBAR_NAME="Stirling PDF" \ -e APP_NAVBAR_NAME="Stirling PDF" \
@@ -90,12 +111,13 @@ Docker Compose
version: '3.3' version: '3.3'
services: services:
stirling-pdf: stirling-pdf:
image: frooodle/s-pdf image: frooodle/s-pdf:latest
ports: ports:
- '8080:8080' - '8080:8080'
volumes: volumes:
- /location/of/trainingData:/usr/share/tesseract-ocr/4.00/tessdata #Required for extra OCR languages - /location/of/trainingData:/usr/share/tesseract-ocr/4.00/tessdata #Required for extra OCR languages
# - /location/of/extraConfigs:/configs # - /location/of/extraConfigs:/configs
# - /location/of/customFiles:/customFiles/
# environment: # environment:
# APP_LOCALE: en_GB # APP_LOCALE: en_GB
# APP_HOME_NAME: Stirling PDF # APP_HOME_NAME: Stirling PDF
@@ -111,7 +133,7 @@ services:
Please view https://github.com/Frooodle/Stirling-PDF/blob/main/HowToUseOCR.md Please view https://github.com/Frooodle/Stirling-PDF/blob/main/HowToUseOCR.md
## Want to add your own language? ## Want to add your own language?
Stirling PDF currently supports Stirling PDF currently supports 16!
- English (English) (en_GB) - English (English) (en_GB)
- Arabic (العربية) (ar_AR) - Arabic (العربية) (ar_AR)
- German (Deutsch) (de_DE) - German (Deutsch) (de_DE)
@@ -124,6 +146,10 @@ Stirling PDF currently supports
- Polish (Polski) (pl_PL) - Polish (Polski) (pl_PL)
- Romanian (Română) (ro_RO) - Romanian (Română) (ro_RO)
- Korean (한국어) (ko_KR) - Korean (한국어) (ko_KR)
- Portuguese Brazilian (Português) (pt_BR)
- Russian (Русский) (ru_RU)
- Basque (Euskara) (eu_ES)
- Japanese (日本語) (ja_JP)
If you want to add your own language to Stirling-PDF please refer If you want to add your own language to Stirling-PDF please refer
https://github.com/Frooodle/Stirling-PDF/blob/main/HowToAddNewLanguage.md https://github.com/Frooodle/Stirling-PDF/blob/main/HowToAddNewLanguage.md
@@ -148,11 +174,12 @@ Using the same method you can also change
- Enable/Disable search engine visiblility with ALLOW_GOOGLE_VISIBILITY with true / false values. Default disable visiblility. - Enable/Disable search engine visiblility with ALLOW_GOOGLE_VISIBILITY with true / false values. Default disable visiblility.
- Change root URI for Stirling-PDF ie change server.com/ to server.com/pdf-app by running APP_ROOT_PATH as pdf-app - Change root URI for Stirling-PDF ie change server.com/ to server.com/pdf-app by running APP_ROOT_PATH as pdf-app
- Disable and remove endpoints and functionality from Stirling-PDF. Currently the endpoints ENDPOINTS_TO_REMOVE and GROUPS_TO_REMOVE can include comma seperated lists of endpoints and groups to disable as example ENDPOINTS_TO_REMOVE=img-to-pdf,remove-pages would disable both image to pdf and remove pages, GROUPS_TO_REMOVE=LibreOffice Would disable all things that use LibreOffice. You can see a list of all endpoints and groups [here](https://github.com/Frooodle/Stirling-PDF/blob/main/groups.md) - Disable and remove endpoints and functionality from Stirling-PDF. Currently the endpoints ENDPOINTS_TO_REMOVE and GROUPS_TO_REMOVE can include comma seperated lists of endpoints and groups to disable as example ENDPOINTS_TO_REMOVE=img-to-pdf,remove-pages would disable both image to pdf and remove pages, GROUPS_TO_REMOVE=LibreOffice Would disable all things that use LibreOffice. You can see a list of all endpoints and groups [here](https://github.com/Frooodle/Stirling-PDF/blob/main/groups.md)
- Change the max file size allowed through the server with the environment variable MAX_FILE_SIZE. default 2000MB
- Customise static files such as app logo by placing files in the /customFiles/static/ directory. Example to customise app logo is placing a /customFiles/static/favicon.svg to override current SVG. This can be used to change any images/icons/css/fonts/js etc in Stirling-PDF
## API ## API
For those wanting to use Stirling-PDFs backend API to link with their own custom scripting to edit PDFs you can view all existing API documentation For those wanting to use Stirling-PDFs backend API to link with their own custom scripting to edit PDFs you can view all existing API documentation
[here](https://app.swaggerhub.com/apis-docs/Frooodle/Stirling-PDF/) or navigate to /swagger-ui/index.html of your stirling-pdf instance for your versions documentation [here](https://app.swaggerhub.com/apis-docs/Frooodle/Stirling-PDF/) or navigate to /swagger-ui/index.html of your stirling-pdf instance for your versions documentation (Or by following the API button in your settings of Stirling-PDF)
## FAQ ## FAQ

54
Version-groups.md Normal file
View File

@@ -0,0 +1,54 @@
|Technology | Ultra-Lite | Lite | Full |
|----------------|:----------:|:----:|:----:|
| Java | ✔️ | ✔️ | ✔️ |
| JavaScript | ✔️ | ✔️ | ✔️ |
| Libre | | ✔️ | ✔️ |
| Python | | | ✔️ |
| OpenCV | | | ✔️ |
| OCRmyPDF | | | ✔️ |
Operation | Ultra-Lite | Lite | Full
--------------------|------------|------|-----
add-page-numbers | ✔️ | ✔️ | ✔️
add-password | ✔️ | ✔️ | ✔️
add-watermark | ✔️ | ✔️ | ✔️
adjust-contrast | ✔️ | ✔️ | ✔️
auto-split-pdf | ✔️ | ✔️ | ✔️
auto-rename | ✔️ | ✔️ | ✔️
cert-sign | ✔️ | ✔️ | ✔️
crop | ✔️ | ✔️ | ✔️
change-metadata | ✔️ | ✔️ | ✔️
change-permissions | ✔️ | ✔️ | ✔️
compare | ✔️ | ✔️ | ✔️
extract-images | ✔️ | ✔️ | ✔️
flatten | ✔️ | ✔️ | ✔️
img-to-pdf | ✔️ | ✔️ | ✔️
merge-pdfs | ✔️ | ✔️ | ✔️
multi-page-layout | ✔️ | ✔️ | ✔️
pdf-organizer | ✔️ | ✔️ | ✔️
pdf-to-img | ✔️ | ✔️ | ✔️
remove-pages | ✔️ | ✔️ | ✔️
remove-password | ✔️ | ✔️ | ✔️
rotate-pdf | ✔️ | ✔️ | ✔️
sanitize-pdf | ✔️ | ✔️ | ✔️
scale-pages | ✔️ | ✔️ | ✔️
sign | ✔️ | ✔️ | ✔️
split-pdfs | ✔️ | ✔️ | ✔️
add-image | ✔️ | ✔️ | ✔️
file-to-pdf | | ✔️ | ✔️
pdf-to-html | | ✔️ | ✔️
pdf-to-presentation | | ✔️ | ✔️
pdf-to-text | | ✔️ | ✔️
pdf-to-word | | ✔️ | ✔️
pdf-to-xml | | ✔️ | ✔️
repair | | ✔️ | ✔️
xlsx-to-pdf | | ✔️ | ✔️
compress-pdf | | | ✔️
extract-image-scans | | | ✔️
ocr-pdf | | | ✔️
pdf-to-pdfa | | | ✔️
remove-blanks | | | ✔️

View File

@@ -1,24 +1,56 @@
plugins { plugins {
id 'java' id 'java'
id 'org.springframework.boot' version '3.0.6' id 'org.springframework.boot' version '3.1.1'
id 'io.spring.dependency-management' version '1.1.0' id 'io.spring.dependency-management' version '1.1.0'
id 'org.springdoc.openapi-gradle-plugin' version '1.6.0'
id "io.swagger.swaggerhub" version "1.2.0"
id 'edu.sc.seis.launch4j' version '3.0.3'
} }
group = 'stirling.software' group = 'stirling.software'
version = '0.9.1' version = '0.11.2'
sourceCompatibility = '17' sourceCompatibility = '17'
repositories { repositories {
mavenCentral() mavenCentral()
} }
openApi {
apiDocsUrl = "http://localhost:8080/v3/api-docs"
outputDir = file("$projectDir")
outputFileName = "SwaggerDoc.json"
}
launch4j {
icon = "${projectDir}/src/main/resources/static/favicon.ico"
outfile="Stirling-PDF.exe"
headerType="console"
jarTask = tasks.bootJar
errTitle="Encountered error, Do you have Java 17?"
downloadUrl="https://download.oracle.com/java/17/latest/jdk-17_windows-x64_bin.exe"
variables=["BROWSER_OPEN=true"]
jreMinVersion="17"
mutexName="Stirling-PDF"
windowTitle="Stirling-PDF"
messagesStartupError="An error occurred while starting Stirling-PDF"
//messagesJreNotFoundError="This application requires a Java Runtime Environment, Please download Java 17."
messagesJreVersionError="You are running the wrong version of Java, Please download Java 17."
messagesLauncherError="Java is corrupted. Please uninstall and then install Java 17."
messagesInstanceAlreadyExists="Stirling-PDF is already running."
}
dependencies { dependencies {
implementation 'org.springframework.boot:spring-boot-starter-web:3.0.6' implementation 'org.springframework.boot:spring-boot-starter-web:3.1.0'
implementation 'org.springframework.boot:spring-boot-starter-thymeleaf:3.0.6' implementation 'org.springframework.boot:spring-boot-starter-thymeleaf:3.1.1'
testImplementation 'org.springframework.boot:spring-boot-starter-test:3.0.6' testImplementation 'org.springframework.boot:spring-boot-starter-test:3.1.0'
// https://mvnrepository.com/artifact/org.apache.pdfbox/jbig2-imageio // https://mvnrepository.com/artifact/org.apache.pdfbox/jbig2-imageio
implementation group: 'org.apache.pdfbox', name: 'jbig2-imageio', version: '3.0.4' implementation group: 'org.apache.pdfbox', name: 'jbig2-imageio', version: '3.0.4'
implementation 'commons-io:commons-io:2.11.0' implementation 'commons-io:commons-io:2.13.0'
implementation 'org.springdoc:springdoc-openapi-starter-webmvc-ui:2.1.0' implementation 'org.springdoc:springdoc-openapi-starter-webmvc-ui:2.1.0'
@@ -30,10 +62,31 @@ dependencies {
implementation 'org.springframework.boot:spring-boot-starter-actuator' implementation 'org.springframework.boot:spring-boot-starter-actuator'
implementation 'io.micrometer:micrometer-core' implementation 'io.micrometer:micrometer-core'
implementation group: 'com.google.zxing', name: 'core', version: '3.5.1'
developmentOnly("org.springframework.boot:spring-boot-devtools") developmentOnly("org.springframework.boot:spring-boot-devtools")
} }
task writeVersion {
def propsFile = file('src/main/resources/version.properties')
def props = new Properties()
props.setProperty('version', version)
props.store(propsFile.newWriter(), null)
}
swaggerhubUpload {
//dependsOn generateOpenApiDocs // Depends on your task generating Swagger docs
api 'Stirling-PDF' // The name of your API on SwaggerHub
owner 'Frooodle' // Your SwaggerHub username (or organization name)
version project.version // The version of your API
inputFile './SwaggerDoc.json' // The path to your Swagger docs
token "${System.getenv('SWAGGERHUB_API_KEY')}" // Your SwaggerHub API key, passed as an environment variable
oas '3.0.0' // The version of the OpenAPI Specification you're using
}
jar { jar {
enabled = false enabled = false
manifest { manifest {

View File

@@ -1,32 +0,0 @@
Operation | PageOps | Convert | Security | Other | CLI | Python | OpenCV | LibreOffice | OCRmyPDF | Java | Javascript
--------------------|---------|---------|----------|-------|------|--------|--------|-------------|--------- |-------- |-----------
remove-pages | X | | | | | | | | | X |
merge-pdfs | X | | | | | | | | | X |
split-pdfs | X | | | | | | | | | X |
pdf-organizer | X | | | | | | | | | X | X
rotate-pdf | X | | | | | | | | | X |
pdf-to-img | | X | | | | | | | | X |
img-to-pdf | | X | | | | | | | | X |
pdf-to-pdfa | | X | | | X | | | | X | |
file-to-pdf | | X | | | X | | | X | | |
xlsx-to-pdf | | X | | | X | | | X | | |
pdf-to-word | | X | | | X | | | X | | |
pdf-to-presentation | | X | | | X | | | X | | |
pdf-to-text | | X | | | X | | | X | | |
pdf-to-html | | X | | | X | | | X | | |
pdf-to-xml | | X | | | X | | | X | | |
add-password | | | X | | | | | | | X |
remove-password | | | X | | | | | | | X |
change-permissions | | | X | | | | | | | X |
add-watermark | | | X | | | | | | | X |
ocr-pdf | | | | X | X | | | | X | |
add-image | | | | X | | | | | | X |
compress-pdf | | | | X | X | | | | X
extract-images | | | | X | | | | | | X |
change-metadata | | | | X | | | | | | X |
extract-image-scans | | | | X | X | X | X | | | |
sign | | | | X | | | | | | | X
flatten | | | | X | | | | | | |
repair | | | | X | X | | | X | | |
remove-blanks | | | | X | X | X | X | | | |
compare | | | | X | | | | | | | X

Binary file not shown.

Before

Width:  |  Height:  |  Size: 128 KiB

After

Width:  |  Height:  |  Size: 118 KiB

36
lauch4jConfig.xml Normal file
View File

@@ -0,0 +1,36 @@
<?xml version="1.0" encoding="UTF-8"?>
<launch4jConfig>
<dontWrapJar>false</dontWrapJar>
<headerType>console</headerType>
<jar>.\build\libs\S-PDF-0.10.1.jar</jar>
<outfile>.\Stirling-PDF.exe</outfile>
<errTitle>Please download Java17</errTitle>
<cmdLine></cmdLine>
<chdir>.</chdir>
<priority>normal</priority>
<downloadUrl>https://download.oracle.com/java/17/latest/jdk-17_windows-x64_bin.exe</downloadUrl>
<supportUrl></supportUrl>
<stayAlive>false</stayAlive>
<restartOnCrash>false</restartOnCrash>
<manifest></manifest>
<icon>./src/main/resources/static/favicon.ico</icon>
<var>BROWSER_OPEN=true</var>
<singleInstance>
<mutexName>Stirling-PDF</mutexName>
<windowTitle>Stirling-PDF</windowTitle>
</singleInstance>
<jre>
<path>%JAVA_HOME%;%PATH%</path>
<requiresJdk>false</requiresJdk>
<requires64Bit>false</requires64Bit>
<minVersion>17</minVersion>
<maxVersion></maxVersion>
</jre>
<messages>
<startupErr>An error occurred while starting Stirling-PDF</startupErr>
<jreNotFoundErr>This application requires a Java Runtime Environment, Please download Java 17.</jreNotFoundErr>
<jreVersionErr>You are running the wrong version of Java, Please download Java 17.</jreVersionErr>
<launcherErr>Java is corrupted. Please uninstall and then install Java 17.</launcherErr>
<instanceAlreadyExistsMsg>Stirling-PDF is already running.</instanceAlreadyExistsMsg>
</messages>
</launch4jConfig>

80
scripts/PropSync.java Normal file
View File

@@ -0,0 +1,80 @@
package stirling.software.Stirling.Stats;
import java.nio.file.*;
import java.nio.charset.MalformedInputException;
import java.nio.charset.StandardCharsets;
import java.io.*;
import java.util.*;
public class PropSync {
public static void main(String[] args) throws IOException {
File folder = new File("C:\\Users\\systo\\git\\Stirling-PDF\\src\\main\\resources");
File[] files = folder.listFiles((dir, name) -> name.matches("messages_.*\\.properties"));
List<String> enLines = Files.readAllLines(Paths.get(folder + "\\messages_en_GB.properties"), StandardCharsets.UTF_8);
Map<String, String> enProps = linesToProps(enLines);
for (File file : files) {
if (!file.getName().equals("messages_en_GB.properties")) {
System.out.println("Processing file: " + file.getName());
List<String> lines;
try {
lines = Files.readAllLines(file.toPath(), StandardCharsets.UTF_8);
} catch (MalformedInputException e) {
System.out.println("Skipping due to not UTF8 format for file: " + file.getName());
continue;
} catch (IOException e) {
throw new UncheckedIOException(e);
}
Map<String, String> currentProps = linesToProps(lines);
List<String> newLines = syncPropsWithLines(enProps, currentProps, enLines);
Files.write(file.toPath(), newLines, StandardCharsets.UTF_8);
System.out.println("Finished processing file: " + file.getName());
}
}
}
private static Map<String, String> linesToProps(List<String> lines) {
Map<String, String> props = new LinkedHashMap<>();
for (String line : lines) {
if (!line.trim().isEmpty() && line.contains("=")) {
String[] parts = line.split("=", 2);
props.put(parts[0].trim(), parts[1].trim());
}
}
return props;
}
private static List<String> syncPropsWithLines(Map<String, String> enProps, Map<String, String> currentProps, List<String> enLines) {
List<String> newLines = new ArrayList<>();
boolean needsTranslateComment = false; // flag to check if we need to add "TODO: Translate"
for (String line : enLines) {
if (line.contains("=")) {
String key = line.split("=", 2)[0].trim();
if (currentProps.containsKey(key)) {
newLines.add(key + "=" + currentProps.get(key));
needsTranslateComment = false;
} else {
if (!needsTranslateComment) {
newLines.add("##########################");
newLines.add("### TODO: Translate ###");
newLines.add("##########################");
needsTranslateComment = true;
}
newLines.add(line);
}
} else {
// handle comments and other non-property lines
newLines.add(line);
needsTranslateComment = false; // reset the flag when we encounter comments or empty lines
}
}
return newLines;
}
}

View File

@@ -16,11 +16,19 @@ def is_blank_image(image_path, threshold=10, white_percent=99, white_value=255,
_, thresholded_image = cv2.threshold(blurred_image, white_value - threshold, white_value, cv2.THRESH_BINARY) _, thresholded_image = cv2.threshold(blurred_image, white_value - threshold, white_value, cv2.THRESH_BINARY)
# Calculate the percentage of white pixels in the thresholded image # Calculate the percentage of white pixels in the thresholded image
white_pixels = np.sum(thresholded_image == white_value) white_pixels = 0
total_pixels = thresholded_image.size total_pixels = thresholded_image.size
white_pixel_percentage = (white_pixels / total_pixels) * 100 for i in range(0, thresholded_image.shape[0], 2):
for j in range(0, thresholded_image.shape[1], 2):
if thresholded_image[i, j] == white_value:
white_pixels += 1
white_pixel_percentage = (white_pixels / (i * thresholded_image.shape[1] + j + 1)) * 100
if white_pixel_percentage < white_percent:
return False
print(f"Page has white pixel percent of {white_pixel_percentage}") print(f"Page has white pixel percent of {white_pixel_percentage}")
return white_pixel_percentage > white_percent return True
if __name__ == "__main__": if __name__ == "__main__":

View File

@@ -1 +1 @@
rootProject.name = 'S-PDF' rootProject.name = 'Stirling-PDF'

View File

@@ -1,11 +1,76 @@
package stirling.software.SPDF; package stirling.software.SPDF;
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.SpringApplication; import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.core.env.Environment;
import org.springframework.scheduling.annotation.EnableScheduling;
import jakarta.annotation.PostConstruct;
import stirling.software.SPDF.utils.GeneralUtils;
@SpringBootApplication @SpringBootApplication
//@EnableScheduling
public class SPdfApplication { public class SPdfApplication {
@Autowired
private Environment env;
@PostConstruct
public void init() {
// Check if the BROWSER_OPEN environment variable is set to true
String browserOpenEnv = env.getProperty("BROWSER_OPEN");
boolean browserOpen = browserOpenEnv != null && browserOpenEnv.equalsIgnoreCase("true");
if (browserOpen) {
try {
String port = env.getProperty("local.server.port");
if(port == null || port.length() == 0) {
port="8080";
}
String url = "http://localhost:" + port;
String os = System.getProperty("os.name").toLowerCase();
Runtime rt = Runtime.getRuntime();
if (os.contains("win")) {
// For Windows
rt.exec("rundll32 url.dll,FileProtocolHandler " + url);
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
public static void main(String[] args) { public static void main(String[] args) {
SpringApplication.run(SPdfApplication.class, args); SpringApplication.run(SPdfApplication.class, args);
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} }
GeneralUtils.createDir("customFiles/static/");
GeneralUtils.createDir("customFiles/templates/");
GeneralUtils.createDir("config");
System.out.println("Stirling-PDF Started.");
String port = System.getProperty("local.server.port");
if(port == null || port.length() == 0) {
port="8080";
}
String url = "http://localhost:" + port;
System.out.println("Navigate to " + url);
}
} }

View File

@@ -16,7 +16,7 @@ public class AppConfig {
@Bean(name = "appVersion") @Bean(name = "appVersion")
public String appVersion() { public String appVersion() {
String version = getClass().getPackage().getImplementationVersion(); String version = getClass().getPackage().getImplementationVersion();
return (version != null) ? version : "0.3.3"; return (version != null) ? version : "0.0.0";
} }
@Bean(name = "homeText") @Bean(name = "homeText")

View File

@@ -39,12 +39,19 @@ public class Beans implements WebMvcConfigurer {
Locale tempLocale = Locale.forLanguageTag(appLocaleEnv); Locale tempLocale = Locale.forLanguageTag(appLocaleEnv);
String tempLanguageTag = tempLocale.toLanguageTag(); String tempLanguageTag = tempLocale.toLanguageTag();
if (appLocaleEnv.equalsIgnoreCase(tempLanguageTag)) {
defaultLocale = tempLocale;
} else {
tempLocale = Locale.forLanguageTag(appLocaleEnv.replace("_","-"));
tempLanguageTag = tempLocale.toLanguageTag();
if (appLocaleEnv.equalsIgnoreCase(tempLanguageTag)) { if (appLocaleEnv.equalsIgnoreCase(tempLanguageTag)) {
defaultLocale = tempLocale; defaultLocale = tempLocale;
} else { } else {
System.err.println("Invalid APP_LOCALE environment variable value. Falling back to default Locale.UK."); System.err.println("Invalid APP_LOCALE environment variable value. Falling back to default Locale.UK.");
} }
} }
}
slr.setDefaultLocale(defaultLocale); slr.setDefaultLocale(defaultLocale);
return slr; return slr;

View File

@@ -1,4 +1,6 @@
package stirling.software.SPDF.config; package stirling.software.SPDF.config;
import java.util.List;
import java.util.regex.Matcher; import java.util.regex.Matcher;
import java.util.regex.Pattern; import java.util.regex.Pattern;
@@ -7,27 +9,57 @@ import org.springframework.web.servlet.ModelAndView;
import jakarta.servlet.http.HttpServletRequest; import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse; import jakarta.servlet.http.HttpServletResponse;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import java.util.Arrays;
import java.util.List;
import java.util.HashMap;
import java.util.Map;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;
public class CleanUrlInterceptor implements HandlerInterceptor { public class CleanUrlInterceptor implements HandlerInterceptor {
private static final Pattern LANG_PATTERN = Pattern.compile("&?lang=([^&]+)"); private static final List<String> ALLOWED_PARAMS = Arrays.asList("lang", "endpoint", "endpoints");
@Override @Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler)
throws Exception {
String queryString = request.getQueryString(); String queryString = request.getQueryString();
if (queryString != null && !queryString.isEmpty()) { if (queryString != null && !queryString.isEmpty()) {
String requestURI = request.getRequestURI(); String requestURI = request.getRequestURI();
// Keep the lang parameter if it exists Map<String, String> parameters = new HashMap<>();
Matcher langMatcher = LANG_PATTERN.matcher(queryString);
String langQueryString = langMatcher.find() ? "lang=" + langMatcher.group(1) : "";
// Check if there are any other query parameters besides the lang parameter // Keep only the allowed parameters
String remainingQueryString = queryString.replaceAll(LANG_PATTERN.pattern(), "").replaceAll("&+", "&").replaceAll("^&|&$", ""); String[] queryParameters = queryString.split("&");
for (String param : queryParameters) {
String[] keyValue = param.split("=");
if (keyValue.length != 2) {
continue;
}
if (ALLOWED_PARAMS.contains(keyValue[0])) {
parameters.put(keyValue[0], keyValue[1]);
}
}
if (!remainingQueryString.isEmpty()) { // If there are any parameters that are not allowed
// Redirect to the URL without other query parameters if (parameters.size() != queryParameters.length) {
String redirectUrl = requestURI + (langQueryString.isEmpty() ? "" : "?" + langQueryString); // Construct new query string
StringBuilder newQueryString = new StringBuilder();
for (Map.Entry<String, String> entry : parameters.entrySet()) {
if (newQueryString.length() > 0) {
newQueryString.append("&");
}
newQueryString.append(entry.getKey()).append("=").append(entry.getValue());
}
// Redirect to the URL with only allowed query parameters
String redirectUrl = requestURI + "?" + newQueryString;
response.sendRedirect(redirectUrl); response.sendRedirect(redirectUrl);
return false; return false;
} }
@@ -36,10 +68,12 @@ public class CleanUrlInterceptor implements HandlerInterceptor {
} }
@Override @Override
public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) { public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler,
ModelAndView modelAndView) {
} }
@Override @Override
public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) { public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler,
Exception ex) {
} }
} }

View File

@@ -24,9 +24,11 @@ public class EndpointConfiguration {
} }
public void disableEndpoint(String endpoint) { public void disableEndpoint(String endpoint) {
if(!endpointStatuses.containsKey(endpoint) || endpointStatuses.get(endpoint) != false) {
logger.info("Disabling {}", endpoint); logger.info("Disabling {}", endpoint);
endpointStatuses.put(endpoint, false); endpointStatuses.put(endpoint, false);
} }
}
public boolean isEndpointEnabled(String endpoint) { public boolean isEndpointEnabled(String endpoint) {
if (endpoint.startsWith("/")) { if (endpoint.startsWith("/")) {
@@ -64,6 +66,11 @@ public class EndpointConfiguration {
addEndpointToGroup("PageOps", "split-pdfs"); addEndpointToGroup("PageOps", "split-pdfs");
addEndpointToGroup("PageOps", "pdf-organizer"); addEndpointToGroup("PageOps", "pdf-organizer");
addEndpointToGroup("PageOps", "rotate-pdf"); addEndpointToGroup("PageOps", "rotate-pdf");
addEndpointToGroup("PageOps", "multi-page-layout");
addEndpointToGroup("PageOps", "scale-pages");
addEndpointToGroup("PageOps", "adjust-contrast");
addEndpointToGroup("PageOps", "crop");
addEndpointToGroup("PageOps", "auto-split-pdf");
// Adding endpoints to "Convert" group // Adding endpoints to "Convert" group
addEndpointToGroup("Convert", "pdf-to-img"); addEndpointToGroup("Convert", "pdf-to-img");
@@ -76,12 +83,17 @@ public class EndpointConfiguration {
addEndpointToGroup("Convert", "pdf-to-text"); addEndpointToGroup("Convert", "pdf-to-text");
addEndpointToGroup("Convert", "pdf-to-html"); addEndpointToGroup("Convert", "pdf-to-html");
addEndpointToGroup("Convert", "pdf-to-xml"); addEndpointToGroup("Convert", "pdf-to-xml");
addEndpointToGroup("Convert", "html-to-pdf");
addEndpointToGroup("Convert", "url-to-pdf");
// Adding endpoints to "Security" group // Adding endpoints to "Security" group
addEndpointToGroup("Security", "add-password"); addEndpointToGroup("Security", "add-password");
addEndpointToGroup("Security", "remove-password"); addEndpointToGroup("Security", "remove-password");
addEndpointToGroup("Security", "change-permissions"); addEndpointToGroup("Security", "change-permissions");
addEndpointToGroup("Security", "add-watermark"); addEndpointToGroup("Security", "add-watermark");
addEndpointToGroup("Security", "cert-sign");
addEndpointToGroup("Security", "sanitize-pdf");
// Adding endpoints to "Other" group // Adding endpoints to "Other" group
addEndpointToGroup("Other", "ocr-pdf"); addEndpointToGroup("Other", "ocr-pdf");
@@ -95,9 +107,8 @@ public class EndpointConfiguration {
addEndpointToGroup("Other", "repair"); addEndpointToGroup("Other", "repair");
addEndpointToGroup("Other", "remove-blanks"); addEndpointToGroup("Other", "remove-blanks");
addEndpointToGroup("Other", "compare"); addEndpointToGroup("Other", "compare");
addEndpointToGroup("Other", "add-page-numbers");
addEndpointToGroup("Other", "auto-rename");
@@ -116,12 +127,15 @@ public class EndpointConfiguration {
addEndpointToGroup("CLI", "pdf-to-html"); addEndpointToGroup("CLI", "pdf-to-html");
addEndpointToGroup("CLI", "pdf-to-xml"); addEndpointToGroup("CLI", "pdf-to-xml");
addEndpointToGroup("CLI", "ocr-pdf"); addEndpointToGroup("CLI", "ocr-pdf");
addEndpointToGroup("CLI", "html-to-pdf");
addEndpointToGroup("CLI", "url-to-pdf");
//python //python
addEndpointToGroup("Python", "extract-image-scans"); addEndpointToGroup("Python", "extract-image-scans");
addEndpointToGroup("Python", "remove-blanks"); addEndpointToGroup("Python", "remove-blanks");
addEndpointToGroup("Python", "html-to-pdf");
addEndpointToGroup("Python", "url-to-pdf");
//openCV //openCV
addEndpointToGroup("OpenCV", "extract-image-scans"); addEndpointToGroup("OpenCV", "extract-image-scans");
@@ -158,12 +172,21 @@ public class EndpointConfiguration {
addEndpointToGroup("Java", "add-image"); addEndpointToGroup("Java", "add-image");
addEndpointToGroup("Java", "extract-images"); addEndpointToGroup("Java", "extract-images");
addEndpointToGroup("Java", "change-metadata"); addEndpointToGroup("Java", "change-metadata");
addEndpointToGroup("Java", "cert-sign");
addEndpointToGroup("Java", "multi-page-layout");
addEndpointToGroup("Java", "scale-pages");
addEndpointToGroup("Java", "add-page-numbers");
addEndpointToGroup("Java", "auto-rename");
addEndpointToGroup("Java", "auto-split-pdf");
addEndpointToGroup("Java", "sanitize-pdf");
addEndpointToGroup("Java", "crop");
//Javascript //Javascript
addEndpointToGroup("Javascript", "pdf-organizer"); addEndpointToGroup("Javascript", "pdf-organizer");
addEndpointToGroup("Javascript", "sign"); addEndpointToGroup("Javascript", "sign");
addEndpointToGroup("Javascript", "compare"); addEndpointToGroup("Javascript", "compare");
addEndpointToGroup("Javascript", "adjust-contrast");
} }

View File

@@ -28,6 +28,7 @@ public class MetricsFilter extends OncePerRequestFilter {
throws ServletException, IOException { throws ServletException, IOException {
String uri = request.getRequestURI(); String uri = request.getRequestURI();
//System.out.println("uri="+uri + ", method=" + request.getMethod() );
// Ignore static resources // Ignore static resources
if (!(uri.startsWith("/js") || uri.startsWith("/images") || uri.endsWith(".ico") || uri.endsWith(".css") || uri.endsWith(".svg")|| uri.endsWith(".js") || uri.contains("swagger") || uri.startsWith("/api"))) { if (!(uri.startsWith("/js") || uri.startsWith("/images") || uri.endsWith(".ico") || uri.endsWith(".css") || uri.endsWith(".svg")|| uri.endsWith(".js") || uri.contains("swagger") || uri.startsWith("/api"))) {
Counter counter = Counter.builder("http.requests") Counter counter = Counter.builder("http.requests")
@@ -36,6 +37,7 @@ public class MetricsFilter extends OncePerRequestFilter {
.register(meterRegistry); .register(meterRegistry);
counter.increment(); counter.increment();
//System.out.println("Counted");
} }
filterChain.doFilter(request, response); filterChain.doFilter(request, response);

View File

@@ -1,5 +1,9 @@
package stirling.software.SPDF.config; package stirling.software.SPDF.config;
import java.io.IOException;
import java.io.InputStream;
import java.util.Properties;
import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.Configuration;
@@ -13,10 +17,20 @@ public class OpenApiConfig {
@Bean @Bean
public OpenAPI customOpenAPI() { public OpenAPI customOpenAPI() {
String version = getClass().getPackage().getImplementationVersion(); String version = getClass().getPackage().getImplementationVersion();
version = (version != null) ? version : "1.0.0"; if (version == null) {
Properties props = new Properties();
try (InputStream input = getClass().getClassLoader().getResourceAsStream("version.properties")) {
props.load(input);
version = props.getProperty("version");
} catch (IOException ex) {
ex.printStackTrace();
version = "1.0.0"; // default version if all else fails
}
}
return new OpenAPI().components(new Components()).info( return new OpenAPI().components(new Components()).info(
new Info().title("Stirling PDF API").version(version).description("API documentation for all Server-Side processing.\nPlease note some functionality might be UI only and missing from here.")); new Info().title("Stirling PDF API").version(version).description("API documentation for all Server-Side processing.\nPlease note some functionality might be UI only and missing from here."));
} }
} }

View File

@@ -3,6 +3,7 @@ package stirling.software.SPDF.config;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry; import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer; import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
@Configuration @Configuration
@@ -15,4 +16,12 @@ public class WebMvcConfig implements WebMvcConfigurer {
public void addInterceptors(InterceptorRegistry registry) { public void addInterceptors(InterceptorRegistry registry) {
registry.addInterceptor(endpointInterceptor); registry.addInterceptor(endpointInterceptor);
} }
@Override
public void addResourceHandlers(ResourceHandlerRegistry registry) {
// Handler for external static resources
registry.addResourceHandler("/**")
.addResourceLocations("file:customFiles/static/", "classpath:/static/")
.setCachePeriod(0); // Optional: disable caching
}
} }

View File

@@ -0,0 +1,132 @@
package stirling.software.SPDF.controller.api;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.nio.file.Files;
import java.nio.file.Path;
import java.util.ArrayList;
import java.util.List;
import java.util.stream.Collectors;
import java.util.zip.ZipEntry;
import java.util.zip.ZipOutputStream;
import org.apache.pdfbox.pdmodel.PDDocument;
import org.apache.pdfbox.pdmodel.PDPage;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.http.MediaType;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RequestPart;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.multipart.MultipartFile;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.Parameter;
import io.swagger.v3.oas.annotations.tags.Tag;
import stirling.software.SPDF.utils.GeneralUtils;
import stirling.software.SPDF.utils.WebResponseUtils;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.Parameter;
import io.swagger.v3.oas.annotations.media.Schema;
import org.springframework.http.HttpHeaders;
import org.springframework.http.HttpStatus;
import org.springframework.http.MediaType;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.multipart.MultipartFile;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Set;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.http.HttpHeaders;
import org.springframework.http.MediaType;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.multipart.MultipartFile;
import com.itextpdf.kernel.geom.PageSize;
import com.itextpdf.kernel.geom.Rectangle;
import com.itextpdf.kernel.pdf.PdfDocument;
import com.itextpdf.kernel.pdf.PdfPage;
import com.itextpdf.kernel.pdf.PdfReader;
import com.itextpdf.kernel.pdf.PdfWriter;
import com.itextpdf.kernel.pdf.canvas.PdfCanvas;
import com.itextpdf.kernel.pdf.canvas.parser.EventType;
import com.itextpdf.kernel.pdf.canvas.parser.PdfCanvasProcessor;
import com.itextpdf.kernel.pdf.canvas.parser.data.IEventData;
import com.itextpdf.kernel.pdf.canvas.parser.data.TextRenderInfo;
import com.itextpdf.kernel.pdf.canvas.parser.listener.IEventListener;
import com.itextpdf.kernel.pdf.xobject.PdfFormXObject;
import io.swagger.v3.oas.annotations.Hidden;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.Parameter;
import io.swagger.v3.oas.annotations.media.Schema;
import io.swagger.v3.oas.annotations.tags.Tag;
import stirling.software.SPDF.utils.WebResponseUtils;
@RestController
@Tag(name = "General", description = "General APIs")
public class CropController {
private static final Logger logger = LoggerFactory.getLogger(CropController.class);
@PostMapping(value = "/crop", consumes = "multipart/form-data")
@Operation(summary = "Crops a PDF document", description = "This operation takes an input PDF file and crops it according to the given coordinates. Input:PDF Output:PDF Type:SISO")
public ResponseEntity<byte[]> cropPdf(
@Parameter(description = "The input PDF file", required = true) @RequestParam("fileInput") MultipartFile file,
@Parameter(description = "The x-coordinate of the top-left corner of the crop area", required = true, schema = @Schema(type = "number")) @RequestParam("x") float x,
@Parameter(description = "The y-coordinate of the top-left corner of the crop area", required = true, schema = @Schema(type = "number")) @RequestParam("y") float y,
@Parameter(description = "The width of the crop area", required = true, schema = @Schema(type = "number")) @RequestParam("width") float width,
@Parameter(description = "The height of the crop area", required = true, schema = @Schema(type = "number")) @RequestParam("height") float height) throws IOException {
byte[] bytes = file.getBytes();
System.out.println("x=" + x + ", " + "y=" + y + ", " + "width=" + width + ", " +"height=" + height );
PdfReader reader = new PdfReader(new ByteArrayInputStream(bytes));
PdfDocument pdfDoc = new PdfDocument(reader);
ByteArrayOutputStream baos = new ByteArrayOutputStream();
PdfWriter writer = new PdfWriter(baos);
PdfDocument outputPdf = new PdfDocument(writer);
int totalPages = pdfDoc.getNumberOfPages();
for (int i = 1; i <= totalPages; i++) {
PdfPage page = outputPdf.addNewPage(new PageSize(width, height));
PdfCanvas pdfCanvas = new PdfCanvas(page);
PdfFormXObject formXObject = pdfDoc.getPage(i).copyAsFormXObject(outputPdf);
// Save the graphics state, apply the transformations, add the object, and then
// restore the graphics state
pdfCanvas.saveState();
pdfCanvas.rectangle(x, y, width, height);
pdfCanvas.clip();
pdfCanvas.addXObject(formXObject, -x, -y);
pdfCanvas.restoreState();
}
outputPdf.close();
byte[] pdfContent = baos.toByteArray();
pdfDoc.close();
return WebResponseUtils.bytesToWebResponse(pdfContent,
file.getOriginalFilename().replaceFirst("[.][^.]+$", "") + "_cropped.pdf");
}
}

View File

@@ -17,9 +17,11 @@ import org.springframework.web.multipart.MultipartFile;
import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.Parameter; import io.swagger.v3.oas.annotations.Parameter;
import stirling.software.SPDF.utils.PdfUtils; import io.swagger.v3.oas.annotations.tags.Tag;
import stirling.software.SPDF.utils.WebResponseUtils;
@RestController @RestController
@Tag(name = "General", description = "General APIs")
public class MergeController { public class MergeController {
private static final Logger logger = LoggerFactory.getLogger(MergeController.class); private static final Logger logger = LoggerFactory.getLogger(MergeController.class);
@@ -47,7 +49,7 @@ public class MergeController {
@PostMapping(consumes = "multipart/form-data", value = "/merge-pdfs") @PostMapping(consumes = "multipart/form-data", value = "/merge-pdfs")
@Operation( @Operation(
summary = "Merge multiple PDF files into one", summary = "Merge multiple PDF files into one",
description = "This endpoint merges multiple PDF files into a single PDF file. The merged file will contain all pages from the input files in the order they were provided." description = "This endpoint merges multiple PDF files into a single PDF file. The merged file will contain all pages from the input files in the order they were provided. Input:PDF Output:PDF Type:MISO"
) )
public ResponseEntity<byte[]> mergePdfs( public ResponseEntity<byte[]> mergePdfs(
@RequestPart(required = true, value = "fileInput") @RequestPart(required = true, value = "fileInput")
@@ -65,7 +67,7 @@ public class MergeController {
// Return the merged PDF as a response // Return the merged PDF as a response
ResponseEntity<byte[]> response = PdfUtils.pdfDocToWebResponse(mergedDoc, files[0].getOriginalFilename().replaceFirst("[.][^.]+$", "") + "_merged.pdf"); ResponseEntity<byte[]> response = WebResponseUtils.pdfDocToWebResponse(mergedDoc, files[0].getOriginalFilename().replaceFirst("[.][^.]+$", "") + "_merged.pdf");
for (PDDocument doc : documents) { for (PDDocument doc : documents) {
// Close the document after processing // Close the document after processing

View File

@@ -0,0 +1,101 @@
package stirling.software.SPDF.controller.api;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.multipart.MultipartFile;
import com.itextpdf.kernel.geom.PageSize;
import com.itextpdf.kernel.geom.Rectangle;
import com.itextpdf.kernel.pdf.PdfDocument;
import com.itextpdf.kernel.pdf.PdfPage;
import com.itextpdf.kernel.pdf.PdfReader;
import com.itextpdf.kernel.pdf.PdfWriter;
import com.itextpdf.kernel.pdf.canvas.PdfCanvas;
import com.itextpdf.kernel.pdf.xobject.PdfFormXObject;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.Parameter;
import io.swagger.v3.oas.annotations.media.Schema;
import io.swagger.v3.oas.annotations.tags.Tag;
import stirling.software.SPDF.utils.WebResponseUtils;
@RestController
@Tag(name = "General", description = "General APIs")
public class MultiPageLayoutController {
private static final Logger logger = LoggerFactory.getLogger(MultiPageLayoutController.class);
@PostMapping(value = "/multi-page-layout", consumes = "multipart/form-data")
@Operation(summary = "Merge multiple pages of a PDF document into a single page", description = "This operation takes an input PDF file and the number of pages to merge into a single sheet in the output PDF file. Input:PDF Output:PDF Type:SISO")
public ResponseEntity<byte[]> mergeMultiplePagesIntoOne(
@Parameter(description = "The input PDF file", required = true) @RequestParam("fileInput") MultipartFile file,
@Parameter(description = "The number of pages to fit onto a single sheet in the output PDF. Acceptable values are 2, 3, 4, 9, 16.", required = true, schema = @Schema(type = "integer", allowableValues = {
"2", "3", "4", "9", "16" })) @RequestParam("pagesPerSheet") int pagesPerSheet)
throws IOException {
if (pagesPerSheet != 2 && pagesPerSheet != 3
&& pagesPerSheet != (int) Math.sqrt(pagesPerSheet) * Math.sqrt(pagesPerSheet)) {
throw new IllegalArgumentException("pagesPerSheet must be 2, 3 or a perfect square");
}
int cols = pagesPerSheet == 2 || pagesPerSheet == 3 ? pagesPerSheet : (int) Math.sqrt(pagesPerSheet);
int rows = pagesPerSheet == 2 || pagesPerSheet == 3 ? 1 : (int) Math.sqrt(pagesPerSheet);
byte[] bytes = file.getBytes();
PdfReader reader = new PdfReader(new ByteArrayInputStream(bytes));
PdfDocument pdfDoc = new PdfDocument(reader);
ByteArrayOutputStream baos = new ByteArrayOutputStream();
PdfWriter writer = new PdfWriter(baos);
PdfDocument outputPdf = new PdfDocument(writer);
PageSize pageSize = new PageSize(PageSize.A4.rotate());
int totalPages = pdfDoc.getNumberOfPages();
float cellWidth = pageSize.getWidth() / cols;
float cellHeight = pageSize.getHeight() / rows;
for (int i = 1; i <= totalPages; i += pagesPerSheet) {
PdfPage page = outputPdf.addNewPage(pageSize);
PdfCanvas pdfCanvas = new PdfCanvas(page);
for (int row = 0; row < rows; row++) {
for (int col = 0; col < cols; col++) {
int index = i + row * cols + col;
if (index <= totalPages) {
// Get the page and calculate scaling factors
Rectangle rect = pdfDoc.getPage(index).getPageSize();
float scaleWidth = cellWidth / rect.getWidth();
float scaleHeight = cellHeight / rect.getHeight();
float scale = Math.min(scaleWidth, scaleHeight);
PdfFormXObject formXObject = pdfDoc.getPage(index).copyAsFormXObject(outputPdf);
float x = col * cellWidth + (cellWidth - rect.getWidth() * scale) / 2;
float y = (rows - 1 - row) * cellHeight + (cellHeight - rect.getHeight() * scale) / 2;
// Save the graphics state, apply the transformations, add the object, and then
// restore the graphics state
pdfCanvas.saveState();
pdfCanvas.concatMatrix(scale, 0, 0, scale, x, y);
pdfCanvas.addXObject(formXObject, 0, 0);
pdfCanvas.restoreState();
}
}
}
}
outputPdf.close();
byte[] pdfContent = baos.toByteArray();
pdfDoc.close();
return WebResponseUtils.bytesToWebResponse(pdfContent, file.getOriginalFilename().replaceFirst("[.][^.]+$", "") + "_layoutChanged.pdf");
}
}

View File

@@ -17,88 +17,168 @@ import org.springframework.web.multipart.MultipartFile;
import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.Parameter; import io.swagger.v3.oas.annotations.Parameter;
import stirling.software.SPDF.utils.PdfUtils; import io.swagger.v3.oas.annotations.media.Schema;
import io.swagger.v3.oas.annotations.tags.Tag;
import stirling.software.SPDF.utils.GeneralUtils;
import stirling.software.SPDF.utils.WebResponseUtils;
@RestController @RestController
@Tag(name = "General", description = "General APIs")
public class RearrangePagesPDFController { public class RearrangePagesPDFController {
private static final Logger logger = LoggerFactory.getLogger(RearrangePagesPDFController.class); private static final Logger logger = LoggerFactory.getLogger(RearrangePagesPDFController.class);
@PostMapping(consumes = "multipart/form-data", value = "/remove-pages") @PostMapping(consumes = "multipart/form-data", value = "/remove-pages")
@Operation(summary = "Remove pages from a PDF file", @Operation(summary = "Remove pages from a PDF file", description = "This endpoint removes specified pages from a given PDF file. Users can provide a comma-separated list of page numbers or ranges to delete. Input:PDF Output:PDF Type:SISO")
description = "This endpoint removes specified pages from a given PDF file. Users can provide a comma-separated list of page numbers or ranges to delete.")
public ResponseEntity<byte[]> deletePages( public ResponseEntity<byte[]> deletePages(
@RequestPart(required = true, value = "fileInput") @RequestPart(required = true, value = "fileInput") @Parameter(description = "The input PDF file from which pages will be removed") MultipartFile pdfFile,
@Parameter(description = "The input PDF file from which pages will be removed") @RequestParam("pagesToDelete") @Parameter(description = "Comma-separated list of pages or page ranges to delete, e.g., '1,3,5-8'") String pagesToDelete)
MultipartFile pdfFile, throws IOException {
@RequestParam("pagesToDelete")
@Parameter(description = "Comma-separated list of pages or page ranges to delete, e.g., '1,3,5-8'")
String pagesToDelete) throws IOException {
PDDocument document = PDDocument.load(pdfFile.getBytes()); PDDocument document = PDDocument.load(pdfFile.getBytes());
// Split the page order string into an array of page numbers or range of numbers // Split the page order string into an array of page numbers or range of numbers
String[] pageOrderArr = pagesToDelete.split(","); String[] pageOrderArr = pagesToDelete.split(",");
List<Integer> pagesToRemove = pageOrderToString(pageOrderArr, document.getNumberOfPages()); List<Integer> pagesToRemove = GeneralUtils.parsePageList(pageOrderArr, document.getNumberOfPages());
for (int i = pagesToRemove.size() - 1; i >= 0; i--) { for (int i = pagesToRemove.size() - 1; i >= 0; i--) {
int pageIndex = pagesToRemove.get(i); int pageIndex = pagesToRemove.get(i);
document.removePage(pageIndex); document.removePage(pageIndex);
} }
return PdfUtils.pdfDocToWebResponse(document, pdfFile.getOriginalFilename().replaceFirst("[.][^.]+$", "") + "_removed_pages.pdf"); return WebResponseUtils.pdfDocToWebResponse(document,
pdfFile.getOriginalFilename().replaceFirst("[.][^.]+$", "") + "_removed_pages.pdf");
} }
private List<Integer> pageOrderToString(String[] pageOrderArr, int totalPages) { private enum CustomMode {
REVERSE_ORDER, DUPLEX_SORT, BOOKLET_SORT, ODD_EVEN_SPLIT, REMOVE_FIRST, REMOVE_LAST, REMOVE_FIRST_AND_LAST,
}
private List<Integer> removeFirst(int totalPages) {
if (totalPages <= 1)
return new ArrayList<>();
List<Integer> newPageOrder = new ArrayList<>(); List<Integer> newPageOrder = new ArrayList<>();
// loop through the page order array for (int i = 2; i <= totalPages; i++) {
for (String element : pageOrderArr) { newPageOrder.add(i - 1);
// check if the element contains a range of pages
if (element.contains("-")) {
// split the range into start and end page
String[] range = element.split("-");
int start = Integer.parseInt(range[0]);
int end = Integer.parseInt(range[1]);
// check if the end page is greater than total pages
if (end > totalPages) {
end = totalPages;
} }
// loop through the range of pages
for (int j = start; j <= end; j++) {
// print the current index
newPageOrder.add(j - 1);
}
} else {
// if the element is a single page
newPageOrder.add(Integer.parseInt(element) - 1);
}
}
return newPageOrder; return newPageOrder;
} }
private List<Integer> removeLast(int totalPages) {
if (totalPages <= 1)
return new ArrayList<>();
List<Integer> newPageOrder = new ArrayList<>();
for (int i = 1; i < totalPages; i++) {
newPageOrder.add(i - 1);
}
return newPageOrder;
}
private List<Integer> removeFirstAndLast(int totalPages) {
if (totalPages <= 2)
return new ArrayList<>();
List<Integer> newPageOrder = new ArrayList<>();
for (int i = 2; i < totalPages; i++) {
newPageOrder.add(i - 1);
}
return newPageOrder;
}
private List<Integer> reverseOrder(int totalPages) {
List<Integer> newPageOrder = new ArrayList<>();
for (int i = totalPages; i >= 1; i--) {
newPageOrder.add(i - 1);
}
return newPageOrder;
}
private List<Integer> duplexSort(int totalPages) {
List<Integer> newPageOrder = new ArrayList<>();
int half = (totalPages + 1) / 2; // This ensures proper behavior with odd numbers of pages
for (int i = 1; i <= half; i++) {
newPageOrder.add(i - 1);
if (i <= totalPages - half) { // Avoid going out of bounds
newPageOrder.add(totalPages - i);
}
}
return newPageOrder;
}
private List<Integer> bookletSort(int totalPages) {
List<Integer> newPageOrder = new ArrayList<>();
for (int i = 0; i < totalPages / 2; i++) {
newPageOrder.add(i);
newPageOrder.add(totalPages - i - 1);
}
return newPageOrder;
}
private List<Integer> oddEvenSplit(int totalPages) {
List<Integer> newPageOrder = new ArrayList<>();
for (int i = 1; i <= totalPages; i += 2) {
newPageOrder.add(i - 1);
}
for (int i = 2; i <= totalPages; i += 2) {
newPageOrder.add(i - 1);
}
return newPageOrder;
}
private List<Integer> processCustomMode(String customMode, int totalPages) {
try {
CustomMode mode = CustomMode.valueOf(customMode.toUpperCase());
switch (mode) {
case REVERSE_ORDER:
return reverseOrder(totalPages);
case DUPLEX_SORT:
return duplexSort(totalPages);
case BOOKLET_SORT:
return bookletSort(totalPages);
case ODD_EVEN_SPLIT:
return oddEvenSplit(totalPages);
case REMOVE_FIRST:
return removeFirst(totalPages);
case REMOVE_LAST:
return removeLast(totalPages);
case REMOVE_FIRST_AND_LAST:
return removeFirstAndLast(totalPages);
default:
throw new IllegalArgumentException("Unsupported custom mode");
}
} catch (IllegalArgumentException e) {
logger.error("Unsupported custom mode", e);
return null;
}
}
@PostMapping(consumes = "multipart/form-data", value = "/rearrange-pages") @PostMapping(consumes = "multipart/form-data", value = "/rearrange-pages")
@Operation(summary = "Rearrange pages in a PDF file", @Operation(summary = "Rearrange pages in a PDF file", description = "This endpoint rearranges pages in a given PDF file based on the specified page order or custom mode. Users can provide a page order as a comma-separated list of page numbers or page ranges, or a custom mode. Input:PDF Output:PDF")
description = "This endpoint rearranges pages in a given PDF file based on the specified page order. Users can provide a page order as a comma-separated list of page numbers or page ranges.")
public ResponseEntity<byte[]> rearrangePages( public ResponseEntity<byte[]> rearrangePages(
@RequestPart(required = true, value = "fileInput") @RequestPart(required = true, value = "fileInput") @Parameter(description = "The input PDF file to rearrange pages") MultipartFile pdfFile,
@Parameter(description = "The input PDF file to rearrange pages") @RequestParam(required = false, value = "pageOrder") @Parameter(description = "The new page order as a comma-separated list of page numbers, page ranges (e.g., '1,3,5-7'), or functions in the format 'an+b' where 'a' is the multiplier of the page number 'n', and 'b' is a constant (e.g., '2n+1', '3n', '6n-5')") String pageOrder,
MultipartFile pdfFile, @RequestParam(required = false, value = "customMode") @Parameter(schema = @Schema(implementation = CustomMode.class, description = "The custom mode for page rearrangement. "
@RequestParam("pageOrder") + "Valid values are:\n" + "REVERSE_ORDER: Reverses the order of all pages.\n"
@Parameter(description = "The new page order as a comma-separated list of page numbers or page ranges (e.g., '1,3,5-7')") + "DUPLEX_SORT: Sorts pages as if all fronts were scanned then all backs in reverse (1, n, 2, n-1, ...). "
String pageOrder) { + "BOOKLET_SORT: Arranges pages for booklet printing (last, first, second, second last, ...).\n"
+ "ODD_EVEN_SPLIT: Splits and arranges pages into odd and even numbered pages.\n"
+ "REMOVE_FIRST: Removes the first page.\n" + "REMOVE_LAST: Removes the last page.\n"
+ "REMOVE_FIRST_AND_LAST: Removes both the first and the last pages.\n")) String customMode) {
try { try {
// Load the input PDF // Load the input PDF
PDDocument document = PDDocument.load(pdfFile.getInputStream()); PDDocument document = PDDocument.load(pdfFile.getInputStream());
// Split the page order string into an array of page numbers or range of numbers // Split the page order string into an array of page numbers or range of numbers
String[] pageOrderArr = pageOrder.split(","); String[] pageOrderArr = pageOrder != null ? pageOrder.split(",") : new String[0];
// int[] newPageOrder = new int[pageOrderArr.length];
int totalPages = document.getNumberOfPages(); int totalPages = document.getNumberOfPages();
System.out.println("pageOrder=" + pageOrder);
List<Integer> newPageOrder = pageOrderToString(pageOrderArr, totalPages); System.out.println("customMode length =" + customMode.length());
List<Integer> newPageOrder;
if (customMode != null && customMode.length() > 0) {
newPageOrder = processCustomMode(customMode, totalPages);
} else {
newPageOrder = GeneralUtils.parsePageList(pageOrderArr, totalPages);
}
// Create a new list to hold the pages in the new order // Create a new list to hold the pages in the new order
List<PDPage> newPages = new ArrayList<>(); List<PDPage> newPages = new ArrayList<>();
@@ -116,12 +196,14 @@ public class RearrangePagesPDFController {
document.addPage(page); document.addPage(page);
} }
return PdfUtils.pdfDocToWebResponse(document, pdfFile.getOriginalFilename().replaceFirst("[.][^.]+$", "") + "_rearranged.pdf"); return WebResponseUtils.pdfDocToWebResponse(document,
pdfFile.getOriginalFilename().replaceFirst("[.][^.]+$", "") + "_rearranged.pdf");
} catch (IOException e) { } catch (IOException e) {
logger.error("Failed rearranging documents", e); logger.error("Failed rearranging documents", e);
return null; return null;
} }
} }
} }

View File

@@ -16,9 +16,11 @@ import org.springframework.web.multipart.MultipartFile;
import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.Parameter; import io.swagger.v3.oas.annotations.Parameter;
import stirling.software.SPDF.utils.PdfUtils; import io.swagger.v3.oas.annotations.tags.Tag;
import stirling.software.SPDF.utils.WebResponseUtils;
@RestController @RestController
@Tag(name = "General", description = "General APIs")
public class RotationController { public class RotationController {
private static final Logger logger = LoggerFactory.getLogger(RotationController.class); private static final Logger logger = LoggerFactory.getLogger(RotationController.class);
@@ -26,7 +28,7 @@ public class RotationController {
@PostMapping(consumes = "multipart/form-data", value = "/rotate-pdf") @PostMapping(consumes = "multipart/form-data", value = "/rotate-pdf")
@Operation( @Operation(
summary = "Rotate a PDF file", summary = "Rotate a PDF file",
description = "This endpoint rotates a given PDF file by a specified angle. The angle must be a multiple of 90." description = "This endpoint rotates a given PDF file by a specified angle. The angle must be a multiple of 90. Input:PDF Output:PDF Type:SISO"
) )
public ResponseEntity<byte[]> rotatePDF( public ResponseEntity<byte[]> rotatePDF(
@RequestPart(required = true, value = "fileInput") @RequestPart(required = true, value = "fileInput")
@@ -46,7 +48,7 @@ public class RotationController {
page.setRotation(page.getRotation() + angle); page.setRotation(page.getRotation() + angle);
} }
return PdfUtils.pdfDocToWebResponse(document, pdfFile.getOriginalFilename().replaceFirst("[.][^.]+$", "") + "_rotated.pdf"); return WebResponseUtils.pdfDocToWebResponse(document, pdfFile.getOriginalFilename().replaceFirst("[.][^.]+$", "") + "_rotated.pdf");
} }

View File

@@ -0,0 +1,243 @@
package stirling.software.SPDF.controller.api;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Set;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.http.HttpHeaders;
import org.springframework.http.MediaType;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.multipart.MultipartFile;
import com.itextpdf.kernel.geom.PageSize;
import com.itextpdf.kernel.geom.Rectangle;
import com.itextpdf.kernel.pdf.PdfDocument;
import com.itextpdf.kernel.pdf.PdfPage;
import com.itextpdf.kernel.pdf.PdfReader;
import com.itextpdf.kernel.pdf.PdfWriter;
import com.itextpdf.kernel.pdf.canvas.PdfCanvas;
import com.itextpdf.kernel.pdf.canvas.parser.EventType;
import com.itextpdf.kernel.pdf.canvas.parser.PdfCanvasProcessor;
import com.itextpdf.kernel.pdf.canvas.parser.data.IEventData;
import com.itextpdf.kernel.pdf.canvas.parser.data.TextRenderInfo;
import com.itextpdf.kernel.pdf.canvas.parser.listener.IEventListener;
import com.itextpdf.kernel.pdf.xobject.PdfFormXObject;
import io.swagger.v3.oas.annotations.Hidden;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.Parameter;
import io.swagger.v3.oas.annotations.media.Schema;
import io.swagger.v3.oas.annotations.tags.Tag;
import stirling.software.SPDF.utils.WebResponseUtils;
@RestController
@Tag(name = "General", description = "General APIs")
public class ScalePagesController {
private static final Logger logger = LoggerFactory.getLogger(ScalePagesController.class);
@PostMapping(value = "/scale-pages", consumes = "multipart/form-data")
@Operation(summary = "Change the size of a PDF page/document", description = "This operation takes an input PDF file and the size to scale the pages to in the output PDF file. Input:PDF Output:PDF Type:SISO")
public ResponseEntity<byte[]> scalePages(
@Parameter(description = "The input PDF file", required = true) @RequestParam("fileInput") MultipartFile file,
@Parameter(description = "The scale of pages in the output PDF. Acceptable values are A0-A10, B0-B9, LETTER, TABLOID, LEDGER, LEGAL, EXECUTIVE.", required = true, schema = @Schema(type = "string", allowableValues = {
"A0", "A1", "A2", "A3", "A4", "A5", "A6", "A7", "A8", "A9", "A10", "B0", "B1", "B2", "B3", "B4",
"B5", "B6", "B7", "B8", "B9", "LETTER", "TABLOID", "LEDGER", "LEGAL",
"EXECUTIVE" })) @RequestParam("pageSize") String targetPageSize,
@Parameter(description = "The scale of the content on the pages of the output PDF. Acceptable values are floats.", required = true, schema = @Schema(type = "integer")) @RequestParam("scaleFactor") float scaleFactor)
throws IOException {
Map<String, PageSize> sizeMap = new HashMap<>();
// Add A0 - A10
sizeMap.put("A0", PageSize.A0);
sizeMap.put("A1", PageSize.A1);
sizeMap.put("A2", PageSize.A2);
sizeMap.put("A3", PageSize.A3);
sizeMap.put("A4", PageSize.A4);
sizeMap.put("A5", PageSize.A5);
sizeMap.put("A6", PageSize.A6);
sizeMap.put("A7", PageSize.A7);
sizeMap.put("A8", PageSize.A8);
sizeMap.put("A9", PageSize.A9);
sizeMap.put("A10", PageSize.A10);
// Add B0 - B9
sizeMap.put("B0", PageSize.B0);
sizeMap.put("B1", PageSize.B1);
sizeMap.put("B2", PageSize.B2);
sizeMap.put("B3", PageSize.B3);
sizeMap.put("B4", PageSize.B4);
sizeMap.put("B5", PageSize.B5);
sizeMap.put("B6", PageSize.B6);
sizeMap.put("B7", PageSize.B7);
sizeMap.put("B8", PageSize.B8);
sizeMap.put("B9", PageSize.B9);
// Add other sizes
sizeMap.put("LETTER", PageSize.LETTER);
sizeMap.put("TABLOID", PageSize.TABLOID);
sizeMap.put("LEDGER", PageSize.LEDGER);
sizeMap.put("LEGAL", PageSize.LEGAL);
sizeMap.put("EXECUTIVE", PageSize.EXECUTIVE);
if (!sizeMap.containsKey(targetPageSize)) {
throw new IllegalArgumentException(
"Invalid pageSize. It must be one of the following: A0, A1, A2, A3, A4, A5, A6, A7, A8, A9, A10");
}
PageSize pageSize = sizeMap.get(targetPageSize);
byte[] bytes = file.getBytes();
PdfReader reader = new PdfReader(new ByteArrayInputStream(bytes));
PdfDocument pdfDoc = new PdfDocument(reader);
ByteArrayOutputStream baos = new ByteArrayOutputStream();
PdfWriter writer = new PdfWriter(baos);
PdfDocument outputPdf = new PdfDocument(writer);
int totalPages = pdfDoc.getNumberOfPages();
for (int i = 1; i <= totalPages; i++) {
PdfPage page = outputPdf.addNewPage(pageSize);
PdfCanvas pdfCanvas = new PdfCanvas(page);
// Get the page and calculate scaling factors
Rectangle rect = pdfDoc.getPage(i).getPageSize();
float scaleWidth = pageSize.getWidth() / rect.getWidth();
float scaleHeight = pageSize.getHeight() / rect.getHeight();
float scale = Math.min(scaleWidth, scaleHeight) * scaleFactor;
System.out.println("Scale: " + scale);
PdfFormXObject formXObject = pdfDoc.getPage(i).copyAsFormXObject(outputPdf);
float x = (pageSize.getWidth() - rect.getWidth() * scale) / 2; // Center Page
float y = (pageSize.getHeight() - rect.getHeight() * scale) / 2;
// Save the graphics state, apply the transformations, add the object, and then
// restore the graphics state
pdfCanvas.saveState();
pdfCanvas.concatMatrix(scale, 0, 0, scale, x, y);
pdfCanvas.addXObject(formXObject, 0, 0);
pdfCanvas.restoreState();
}
outputPdf.close();
byte[] pdfContent = baos.toByteArray();
pdfDoc.close();
return WebResponseUtils.bytesToWebResponse(pdfContent,
file.getOriginalFilename().replaceFirst("[.][^.]+$", "") + "_scaled.pdf");
}
//TODO
@Hidden
@PostMapping(value = "/auto-crop", consumes = "multipart/form-data")
public ResponseEntity<byte[]> cropPdf(@RequestParam("fileInput") MultipartFile file) throws IOException {
byte[] bytes = file.getBytes();
PdfReader reader = new PdfReader(new ByteArrayInputStream(bytes));
PdfDocument pdfDoc = new PdfDocument(reader);
ByteArrayOutputStream baos = new ByteArrayOutputStream();
PdfWriter writer = new PdfWriter(baos);
PdfDocument outputPdf = new PdfDocument(writer);
int totalPages = pdfDoc.getNumberOfPages();
for (int i = 1; i <= totalPages; i++) {
PdfPage page = pdfDoc.getPage(i);
Rectangle originalMediaBox = page.getMediaBox();
Rectangle contentBox = determineContentBox(page);
// Make sure we don't go outside the original media box.
Rectangle intersection = originalMediaBox.getIntersection(contentBox);
page.setCropBox(intersection);
// Copy page to the new document
outputPdf.addPage(page.copyTo(outputPdf));
}
outputPdf.close();
byte[] pdfContent = baos.toByteArray();
pdfDoc.close();
return ResponseEntity.ok()
.header(HttpHeaders.CONTENT_DISPOSITION, "attachment; filename=\""
+ file.getOriginalFilename().replaceFirst("[.][^.]+$", "") + "_cropped.pdf\"")
.contentType(MediaType.APPLICATION_PDF).body(pdfContent);
}
private Rectangle determineContentBox(PdfPage page) {
// Extract the text from the page and find the bounding box.
TextBoundingRectangleFinder finder = new TextBoundingRectangleFinder();
PdfCanvasProcessor processor = new PdfCanvasProcessor(finder);
processor.processPageContent(page);
return finder.getBoundingBox();
}
private static class TextBoundingRectangleFinder implements IEventListener {
private List<Rectangle> allTextBoxes = new ArrayList<>();
public Rectangle getBoundingBox() {
// Sort the text boxes based on their vertical position
allTextBoxes.sort(Comparator.comparingDouble(Rectangle::getTop));
// Consider a box an outlier if its top is more than 1.5 times the IQR above the
// third quartile.
int q1Index = allTextBoxes.size() / 4;
int q3Index = 3 * allTextBoxes.size() / 4;
double iqr = allTextBoxes.get(q3Index).getTop() - allTextBoxes.get(q1Index).getTop();
double threshold = allTextBoxes.get(q3Index).getTop() + 1.5 * iqr;
// Initialize boundingBox to the first non-outlier box
int i = 0;
while (i < allTextBoxes.size() && allTextBoxes.get(i).getTop() > threshold) {
i++;
}
if (i == allTextBoxes.size()) {
// If all boxes are outliers, just return the first one
return allTextBoxes.get(0);
}
Rectangle boundingBox = allTextBoxes.get(i);
// Extend the bounding box to include all non-outlier boxes
for (; i < allTextBoxes.size(); i++) {
Rectangle textBoundingBox = allTextBoxes.get(i);
if (textBoundingBox.getTop() > threshold) {
// This box is an outlier, skip it
continue;
}
float left = Math.min(boundingBox.getLeft(), textBoundingBox.getLeft());
float bottom = Math.min(boundingBox.getBottom(), textBoundingBox.getBottom());
float right = Math.max(boundingBox.getRight(), textBoundingBox.getRight());
float top = Math.max(boundingBox.getTop(), textBoundingBox.getTop());
// Add a small padding around the bounding box
float padding = 10;
boundingBox = new Rectangle(left - padding, bottom - padding, right - left + 2 * padding,
top - bottom + 2 * padding);
}
return boundingBox;
}
@Override
public void eventOccurred(IEventData data, EventType type) {
if (type == EventType.RENDER_TEXT) {
TextRenderInfo renderInfo = (TextRenderInfo) data;
allTextBoxes.add(renderInfo.getBaseline().getBoundingRectangle());
}
}
@Override
public Set<EventType> getSupportedEvents() {
return Collections.singleton(EventType.RENDER_TEXT);
}
}
}

View File

@@ -6,7 +6,6 @@ import java.io.InputStream;
import java.nio.file.Files; import java.nio.file.Files;
import java.nio.file.Path; import java.nio.file.Path;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Arrays;
import java.util.List; import java.util.List;
import java.util.stream.Collectors; import java.util.stream.Collectors;
import java.util.zip.ZipEntry; import java.util.zip.ZipEntry;
@@ -16,9 +15,6 @@ import org.apache.pdfbox.pdmodel.PDDocument;
import org.apache.pdfbox.pdmodel.PDPage; import org.apache.pdfbox.pdmodel.PDPage;
import org.slf4j.Logger; import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
import org.springframework.core.io.ByteArrayResource;
import org.springframework.core.io.Resource;
import org.springframework.http.HttpHeaders;
import org.springframework.http.MediaType; import org.springframework.http.MediaType;
import org.springframework.http.ResponseEntity; import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.PostMapping;
@@ -29,16 +25,20 @@ import org.springframework.web.multipart.MultipartFile;
import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.Parameter; import io.swagger.v3.oas.annotations.Parameter;
import io.swagger.v3.oas.annotations.tags.Tag;
import stirling.software.SPDF.utils.GeneralUtils;
import stirling.software.SPDF.utils.WebResponseUtils;
@RestController @RestController
@Tag(name = "General", description = "General APIs")
public class SplitPDFController { public class SplitPDFController {
private static final Logger logger = LoggerFactory.getLogger(SplitPDFController.class); private static final Logger logger = LoggerFactory.getLogger(SplitPDFController.class);
@PostMapping(consumes = "multipart/form-data", value = "/split-pages") @PostMapping(consumes = "multipart/form-data", value = "/split-pages")
@Operation(summary = "Split a PDF file into separate documents", @Operation(summary = "Split a PDF file into separate documents",
description = "This endpoint splits a given PDF file into separate documents based on the specified page numbers or ranges. Users can specify pages using individual numbers, ranges, or 'all' for every page.") description = "This endpoint splits a given PDF file into separate documents based on the specified page numbers or ranges. Users can specify pages using individual numbers, ranges, or 'all' for every page. Input:PDF Output:PDF Type:SIMO")
public ResponseEntity<Resource> splitPdf( public ResponseEntity<byte[]> splitPdf(
@RequestPart(required = true, value = "fileInput") @RequestPart(required = true, value = "fileInput")
@Parameter(description = "The input PDF file to be split") @Parameter(description = "The input PDF file to be split")
MultipartFile file, MultipartFile file,
@@ -58,39 +58,28 @@ public class SplitPDFController {
pageNumbers.add(i); pageNumbers.add(i);
} }
} else { } else {
List<String> pageNumbersStr = new ArrayList<>(Arrays.asList(pages.split(","))); String[] splitPoints = pages.split(",");
if (!pageNumbersStr.contains(String.valueOf(document.getNumberOfPages()))) { for (String splitPoint : splitPoints) {
String lastpage = String.valueOf(document.getNumberOfPages()); List<Integer> orderedPages = GeneralUtils.parsePageList(new String[] {splitPoint}, document.getNumberOfPages());
pageNumbersStr.add(lastpage); pageNumbers.addAll(orderedPages);
}
for (String page : pageNumbersStr) {
if (page.contains("-")) {
String[] range = page.split("-");
int start = Integer.parseInt(range[0]);
int end = Integer.parseInt(range[1]);
for (int i = start; i <= end; i++) {
pageNumbers.add(i);
}
} else {
pageNumbers.add(Integer.parseInt(page));
}
} }
// Add the last page as a split point
pageNumbers.add(document.getNumberOfPages() - 1);
} }
logger.info("Splitting PDF into pages: {}", pageNumbers.stream().map(String::valueOf).collect(Collectors.joining(","))); logger.info("Splitting PDF into pages: {}", pageNumbers.stream().map(String::valueOf).collect(Collectors.joining(",")));
// split the document // split the document
List<ByteArrayOutputStream> splitDocumentsBoas = new ArrayList<>(); List<ByteArrayOutputStream> splitDocumentsBoas = new ArrayList<>();
int currentPage = 0; int previousPageNumber = 0;
for (int pageNumber : pageNumbers) { for (int splitPoint : pageNumbers) {
try (PDDocument splitDocument = new PDDocument()) { try (PDDocument splitDocument = new PDDocument()) {
for (int i = currentPage; i < pageNumber; i++) { for (int i = previousPageNumber; i <= splitPoint; i++) {
PDPage page = document.getPage(i); PDPage page = document.getPage(i);
splitDocument.addPage(page); splitDocument.addPage(page);
logger.debug("Adding page {} to split document", i); logger.debug("Adding page {} to split document", i);
} }
currentPage = pageNumber; previousPageNumber = splitPoint + 1;
logger.debug("Setting current page to {}", currentPage);
ByteArrayOutputStream baos = new ByteArrayOutputStream(); ByteArrayOutputStream baos = new ByteArrayOutputStream();
splitDocument.save(baos); splitDocument.save(baos);
@@ -102,15 +91,17 @@ public class SplitPDFController {
} }
} }
// closing the original document // closing the original document
document.close(); document.close();
Path zipFile = Files.createTempFile("split_documents", ".zip"); Path zipFile = Files.createTempFile("split_documents", ".zip");
String filename = file.getOriginalFilename().replaceFirst("[.][^.]+$", "");
try (ZipOutputStream zipOut = new ZipOutputStream(Files.newOutputStream(zipFile))) { try (ZipOutputStream zipOut = new ZipOutputStream(Files.newOutputStream(zipFile))) {
// loop through the split documents and write them to the zip file // loop through the split documents and write them to the zip file
for (int i = 0; i < splitDocumentsBoas.size(); i++) { for (int i = 0; i < splitDocumentsBoas.size(); i++) {
String fileName = "split_document_" + (i + 1) + ".pdf"; String fileName = filename + "_" + (i + 1) + ".pdf";
ByteArrayOutputStream baos = splitDocumentsBoas.get(i); ByteArrayOutputStream baos = splitDocumentsBoas.get(i);
byte[] pdf = baos.toByteArray(); byte[] pdf = baos.toByteArray();
@@ -129,12 +120,11 @@ public class SplitPDFController {
logger.info("Successfully created zip file with split documents: {}", zipFile.toString()); logger.info("Successfully created zip file with split documents: {}", zipFile.toString());
byte[] data = Files.readAllBytes(zipFile); byte[] data = Files.readAllBytes(zipFile);
ByteArrayResource resource = new ByteArrayResource(data);
Files.delete(zipFile); Files.delete(zipFile);
// return the Resource in the response // return the Resource in the response
return ResponseEntity.ok().header(HttpHeaders.CONTENT_DISPOSITION, "attachment; filename=" + file.getOriginalFilename().replaceFirst("[.][^.]+$", "") + "_split.zip") return WebResponseUtils.bytesToWebResponse(data, filename + ".zip", MediaType.APPLICATION_OCTET_STREAM);
.contentType(MediaType.APPLICATION_OCTET_STREAM).contentLength(resource.contentLength()).body(resource);
} }
} }

View File

@@ -0,0 +1,129 @@
package stirling.software.SPDF.controller.api.converters;
import java.io.ByteArrayInputStream;
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;
import java.util.ArrayList;
import java.util.List;
import java.util.stream.Collectors;
import java.util.stream.Stream;
import java.util.zip.ZipEntry;
import java.util.zip.ZipInputStream;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestPart;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.multipart.MultipartFile;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.tags.Tag;
import stirling.software.SPDF.utils.GeneralUtils;
import stirling.software.SPDF.utils.ProcessExecutor;
import stirling.software.SPDF.utils.WebResponseUtils;
@RestController
@Tag(name = "Convert", description = "Convert APIs")
public class ConvertHtmlToPDF {
@PostMapping(consumes = "multipart/form-data", value = "/html-to-pdf")
@Operation(
summary = "Convert an HTML or ZIP (containing HTML and CSS) to PDF",
description = "This endpoint takes an HTML or ZIP file input and converts it to a PDF format."
)
public ResponseEntity<byte[]> HtmlToPdf(
@RequestPart(required = true, value = "fileInput") MultipartFile fileInput) throws IOException, InterruptedException {
if (fileInput == null) {
throw new IllegalArgumentException("Please provide an HTML or ZIP file for conversion.");
}
String originalFilename = fileInput.getOriginalFilename();
if (originalFilename == null || (!originalFilename.endsWith(".html") && !originalFilename.endsWith(".zip"))) {
throw new IllegalArgumentException("File must be either .html or .zip format.");
}
Path tempOutputFile = Files.createTempFile("output_", ".pdf");
Path tempInputFile = null;
byte[] pdfBytes;
try {
if (originalFilename.endsWith(".html")) {
tempInputFile = Files.createTempFile("input_", ".html");
Files.write(tempInputFile, fileInput.getBytes());
} else {
tempInputFile = unzipAndGetMainHtml(fileInput);
}
List<String> command = new ArrayList<>();
command.add("weasyprint");
command.add(tempInputFile.toString());
command.add(tempOutputFile.toString());
int returnCode = 0;
if (originalFilename.endsWith(".zip")) {
returnCode = ProcessExecutor.getInstance(ProcessExecutor.Processes.WEASYPRINT)
.runCommandWithOutputHandling(command, tempInputFile.getParent().toFile());
} else {
returnCode = ProcessExecutor.getInstance(ProcessExecutor.Processes.WEASYPRINT)
.runCommandWithOutputHandling(command);
}
pdfBytes = Files.readAllBytes(tempOutputFile);
} finally {
// Clean up temporary files
Files.delete(tempOutputFile);
Files.delete(tempInputFile);
if (originalFilename.endsWith(".zip")) {
GeneralUtils.deleteDirectory(tempInputFile.getParent());
}
}
String outputFilename = originalFilename.replaceFirst("[.][^.]+$", "") + ".pdf"; // Remove file extension and append .pdf
return WebResponseUtils.bytesToWebResponse(pdfBytes, outputFilename);
}
private Path unzipAndGetMainHtml(MultipartFile zipFile) throws IOException {
Path tempDirectory = Files.createTempDirectory("unzipped_");
try (ZipInputStream zipIn = new ZipInputStream(new ByteArrayInputStream(zipFile.getBytes()))) {
ZipEntry entry = zipIn.getNextEntry();
while (entry != null) {
Path filePath = tempDirectory.resolve(entry.getName());
if (entry.isDirectory()) {
Files.createDirectories(filePath); // Explicitly create the directory structure
} else {
Files.createDirectories(filePath.getParent()); // Create parent directories if they don't exist
Files.copy(zipIn, filePath);
}
zipIn.closeEntry();
entry = zipIn.getNextEntry();
}
}
//search for the main HTML file.
try (Stream<Path> walk = Files.walk(tempDirectory)) {
List<Path> htmlFiles = walk.filter(file -> file.toString().endsWith(".html"))
.collect(Collectors.toList());
if (htmlFiles.isEmpty()) {
throw new IOException("No HTML files found in the unzipped directory.");
}
// Prioritize 'index.html' if it exists, otherwise use the first .html file
for (Path htmlFile : htmlFiles) {
if (htmlFile.getFileName().toString().equals("index.html")) {
return htmlFile;
}
}
return htmlFiles.get(0);
}
}
}

View File

@@ -20,15 +20,18 @@ import org.springframework.web.multipart.MultipartFile;
import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.Parameter; import io.swagger.v3.oas.annotations.Parameter;
import io.swagger.v3.oas.annotations.media.Schema; import io.swagger.v3.oas.annotations.media.Schema;
import io.swagger.v3.oas.annotations.tags.Tag;
import stirling.software.SPDF.utils.PdfUtils; import stirling.software.SPDF.utils.PdfUtils;
import stirling.software.SPDF.utils.WebResponseUtils;
@RestController @RestController
@Tag(name = "Convert", description = "Convert APIs")
public class ConvertImgPDFController { public class ConvertImgPDFController {
private static final Logger logger = LoggerFactory.getLogger(ConvertImgPDFController.class); private static final Logger logger = LoggerFactory.getLogger(ConvertImgPDFController.class);
@PostMapping(consumes = "multipart/form-data", value = "/pdf-to-img") @PostMapping(consumes = "multipart/form-data", value = "/pdf-to-img")
@Operation(summary = "Convert PDF to image(s)", @Operation(summary = "Convert PDF to image(s)",
description = "This endpoint converts a PDF file to image(s) with the specified image format, color type, and DPI. Users can choose to get a single image or multiple images.") description = "This endpoint converts a PDF file to image(s) with the specified image format, color type, and DPI. Users can choose to get a single image or multiple images. Input:PDF Output:Image Type:SI-Conditional")
public ResponseEntity<Resource> convertToImage( public ResponseEntity<Resource> convertToImage(
@RequestPart(required = true, value = "fileInput") @RequestPart(required = true, value = "fileInput")
@Parameter(description = "The input PDF file to be converted") @Parameter(description = "The input PDF file to be converted")
@@ -40,7 +43,7 @@ public class ConvertImgPDFController {
@Parameter(description = "Choose between a single image containing all pages or separate images for each page", schema = @Schema(allowableValues = {"single", "multiple"})) @Parameter(description = "Choose between a single image containing all pages or separate images for each page", schema = @Schema(allowableValues = {"single", "multiple"}))
String singleOrMultiple, String singleOrMultiple,
@RequestParam("colorType") @RequestParam("colorType")
@Parameter(description = "The color type of the output image(s)", schema = @Schema(allowableValues = {"rgb", "greyscale", "blackwhite"})) @Parameter(description = "The color type of the output image(s)", schema = @Schema(allowableValues = {"color", "greyscale", "blackwhite"}))
String colorType, String colorType,
@RequestParam("dpi") @RequestParam("dpi")
@Parameter(description = "The DPI (dots per inch) for the output image(s)") @Parameter(description = "The DPI (dots per inch) for the output image(s)")
@@ -56,8 +59,9 @@ public class ConvertImgPDFController {
// returns bytes for image // returns bytes for image
boolean singleImage = singleOrMultiple.equals("single"); boolean singleImage = singleOrMultiple.equals("single");
byte[] result = null; byte[] result = null;
String filename = file.getOriginalFilename().replaceFirst("[.][^.]+$", "");
try { try {
result = PdfUtils.convertFromPdf(pdfBytes, imageFormat.toUpperCase(), colorTypeResult, singleImage, Integer.valueOf(dpi)); result = PdfUtils.convertFromPdf(pdfBytes, imageFormat.toUpperCase(), colorTypeResult, singleImage, Integer.valueOf(dpi), filename);
} catch (IOException e) { } catch (IOException e) {
// TODO Auto-generated catch block // TODO Auto-generated catch block
e.printStackTrace(); e.printStackTrace();
@@ -74,14 +78,14 @@ public class ConvertImgPDFController {
ByteArrayResource resource = new ByteArrayResource(result); ByteArrayResource resource = new ByteArrayResource(result);
// return the Resource in the response // return the Resource in the response
return ResponseEntity.ok() return ResponseEntity.ok()
.header(HttpHeaders.CONTENT_DISPOSITION, "attachment; filename=" + file.getOriginalFilename().replaceFirst("[.][^.]+$", "") + "_convertedToImages.zip") .header(HttpHeaders.CONTENT_DISPOSITION, "attachment; filename=" + filename + "_convertedToImages.zip")
.contentType(MediaType.APPLICATION_OCTET_STREAM).contentLength(resource.contentLength()).body(resource); .contentType(MediaType.APPLICATION_OCTET_STREAM).contentLength(resource.contentLength()).body(resource);
} }
} }
@PostMapping(consumes = "multipart/form-data", value = "/img-to-pdf") @PostMapping(consumes = "multipart/form-data", value = "/img-to-pdf")
@Operation(summary = "Convert images to a PDF file", @Operation(summary = "Convert images to a PDF file",
description = "This endpoint converts one or more images to a PDF file. Users can specify whether to stretch the images to fit the PDF page, and whether to automatically rotate the images.") description = "This endpoint converts one or more images to a PDF file. Users can specify whether to stretch the images to fit the PDF page, and whether to automatically rotate the images. Input:Image Output:PDF Type:SISO?")
public ResponseEntity<byte[]> convertToPdf( public ResponseEntity<byte[]> convertToPdf(
@RequestPart(required = true, value = "fileInput") @RequestPart(required = true, value = "fileInput")
@Parameter(description = "The input images to be converted to a PDF file") @Parameter(description = "The input images to be converted to a PDF file")
@@ -90,14 +94,14 @@ public class ConvertImgPDFController {
@Parameter(description = "Whether to stretch the images to fit the PDF page or maintain the aspect ratio", example = "false") @Parameter(description = "Whether to stretch the images to fit the PDF page or maintain the aspect ratio", example = "false")
boolean stretchToFit, boolean stretchToFit,
@RequestParam("colorType") @RequestParam("colorType")
@Parameter(description = "The color type of the output image(s)", schema = @Schema(allowableValues = {"rgb", "greyscale", "blackwhite"})) @Parameter(description = "The color type of the output image(s)", schema = @Schema(allowableValues = {"color", "greyscale", "blackwhite"}))
String colorType, String colorType,
@RequestParam(defaultValue = "false", name = "autoRotate") @RequestParam(defaultValue = "false", name = "autoRotate")
@Parameter(description = "Whether to automatically rotate the images to better fit the PDF page", example = "true") @Parameter(description = "Whether to automatically rotate the images to better fit the PDF page", example = "true")
boolean autoRotate) throws IOException { boolean autoRotate) throws IOException {
// Convert the file to PDF and get the resulting bytes // Convert the file to PDF and get the resulting bytes
byte[] bytes = PdfUtils.imageToPdf(file, stretchToFit, autoRotate, colorType); byte[] bytes = PdfUtils.imageToPdf(file, stretchToFit, autoRotate, colorType);
return PdfUtils.bytesToWebResponse(bytes, file[0].getOriginalFilename().replaceFirst("[.][^.]+$", "") + "_coverted.pdf"); return WebResponseUtils.bytesToWebResponse(bytes, file[0].getOriginalFilename().replaceFirst("[.][^.]+$", "") + "_converted.pdf");
} }
private String getMediaType(String imageFormat) { private String getMediaType(String imageFormat) {

View File

@@ -17,10 +17,12 @@ import org.springframework.web.multipart.MultipartFile;
import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.Parameter; import io.swagger.v3.oas.annotations.Parameter;
import stirling.software.SPDF.utils.PdfUtils; import io.swagger.v3.oas.annotations.tags.Tag;
import stirling.software.SPDF.utils.ProcessExecutor; import stirling.software.SPDF.utils.ProcessExecutor;
import stirling.software.SPDF.utils.WebResponseUtils;
@RestController @RestController
@Tag(name = "Convert", description = "Convert APIs")
public class ConvertOfficeController { public class ConvertOfficeController {
public byte[] convertToPdf(MultipartFile inputFile) throws IOException, InterruptedException { public byte[] convertToPdf(MultipartFile inputFile) throws IOException, InterruptedException {
@@ -57,8 +59,8 @@ public class ConvertOfficeController {
@PostMapping(consumes = "multipart/form-data", value = "/file-to-pdf") @PostMapping(consumes = "multipart/form-data", value = "/file-to-pdf")
@Operation( @Operation(
summary = "Convert a file to a PDF using OCR", summary = "Convert a file to a PDF using LibreOffice",
description = "This endpoint converts a given file to a PDF using Optical Character Recognition (OCR). The filename of the resulting PDF will be the original filename with '_convertedToPDF.pdf' appended." description = "This endpoint converts a given file to a PDF using LibreOffice API Input:Any Output:PDF Type:SISO"
) )
public ResponseEntity<byte[]> processPdfWithOCR( public ResponseEntity<byte[]> processPdfWithOCR(
@RequestPart(required = true, value = "fileInput") @RequestPart(required = true, value = "fileInput")
@@ -72,7 +74,7 @@ public class ConvertOfficeController {
// LibreOfficeListener.getInstance().start(); // LibreOfficeListener.getInstance().start();
byte[] pdfByteArray = convertToPdf(inputFile); byte[] pdfByteArray = convertToPdf(inputFile);
return PdfUtils.bytesToWebResponse(pdfByteArray, inputFile.getOriginalFilename().replaceFirst("[.][^.]+$", "") + "_convertedToPDF.pdf"); return WebResponseUtils.bytesToWebResponse(pdfByteArray, inputFile.getOriginalFilename().replaceFirst("[.][^.]+$", "") + "_convertedToPDF.pdf");
} }
} }

View File

@@ -12,13 +12,15 @@ import org.springframework.web.multipart.MultipartFile;
import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.Parameter; import io.swagger.v3.oas.annotations.Parameter;
import io.swagger.v3.oas.annotations.media.Schema; import io.swagger.v3.oas.annotations.media.Schema;
import io.swagger.v3.oas.annotations.tags.Tag;
import stirling.software.SPDF.utils.PDFToFile; import stirling.software.SPDF.utils.PDFToFile;
@RestController @RestController
@Tag(name = "Convert", description = "Convert APIs")
public class ConvertPDFToOffice { public class ConvertPDFToOffice {
@PostMapping(consumes = "multipart/form-data", value = "/pdf-to-html") @PostMapping(consumes = "multipart/form-data", value = "/pdf-to-html")
@Operation(summary = "Convert PDF to HTML", description = "This endpoint converts a PDF file to HTML format.") @Operation(summary = "Convert PDF to HTML", description = "This endpoint converts a PDF file to HTML format. Input:PDF Output:HTML Type:SISO")
public ResponseEntity<byte[]> processPdfToHTML( public ResponseEntity<byte[]> processPdfToHTML(
@RequestPart(required = true, value = "fileInput") @Parameter(description = "The input PDF file to be converted to HTML format", required = true) MultipartFile inputFile) @RequestPart(required = true, value = "fileInput") @Parameter(description = "The input PDF file to be converted to HTML format", required = true) MultipartFile inputFile)
throws IOException, InterruptedException { throws IOException, InterruptedException {
@@ -27,7 +29,7 @@ public class ConvertPDFToOffice {
} }
@PostMapping(consumes = "multipart/form-data", value = "/pdf-to-presentation") @PostMapping(consumes = "multipart/form-data", value = "/pdf-to-presentation")
@Operation(summary = "Convert PDF to Presentation format", description = "This endpoint converts a given PDF file to a Presentation format.") @Operation(summary = "Convert PDF to Presentation format", description = "This endpoint converts a given PDF file to a Presentation format. Input:PDF Output:PPT Type:SISO")
public ResponseEntity<byte[]> processPdfToPresentation( public ResponseEntity<byte[]> processPdfToPresentation(
@RequestPart(required = true, value = "fileInput") @Parameter(description = "The input PDF file") MultipartFile inputFile, @RequestPart(required = true, value = "fileInput") @Parameter(description = "The input PDF file") MultipartFile inputFile,
@RequestParam("outputFormat") @Parameter(description = "The output Presentation format", schema = @Schema(allowableValues = { @RequestParam("outputFormat") @Parameter(description = "The output Presentation format", schema = @Schema(allowableValues = {
@@ -38,7 +40,7 @@ public class ConvertPDFToOffice {
} }
@PostMapping(consumes = "multipart/form-data", value = "/pdf-to-text") @PostMapping(consumes = "multipart/form-data", value = "/pdf-to-text")
@Operation(summary = "Convert PDF to Text or RTF format", description = "This endpoint converts a given PDF file to Text or RTF format.") @Operation(summary = "Convert PDF to Text or RTF format", description = "This endpoint converts a given PDF file to Text or RTF format. Input:PDF Output:TXT Type:SISO")
public ResponseEntity<byte[]> processPdfToRTForTXT( public ResponseEntity<byte[]> processPdfToRTForTXT(
@RequestPart(required = true, value = "fileInput") @Parameter(description = "The input PDF file") MultipartFile inputFile, @RequestPart(required = true, value = "fileInput") @Parameter(description = "The input PDF file") MultipartFile inputFile,
@RequestParam("outputFormat") @Parameter(description = "The output Text or RTF format", schema = @Schema(allowableValues = { @RequestParam("outputFormat") @Parameter(description = "The output Text or RTF format", schema = @Schema(allowableValues = {
@@ -49,7 +51,7 @@ public class ConvertPDFToOffice {
} }
@PostMapping(consumes = "multipart/form-data", value = "/pdf-to-word") @PostMapping(consumes = "multipart/form-data", value = "/pdf-to-word")
@Operation(summary = "Convert PDF to Word document", description = "This endpoint converts a given PDF file to a Word document format.") @Operation(summary = "Convert PDF to Word document", description = "This endpoint converts a given PDF file to a Word document format. Input:PDF Output:WORD Type:SISO")
public ResponseEntity<byte[]> processPdfToWord( public ResponseEntity<byte[]> processPdfToWord(
@RequestPart(required = true, value = "fileInput") @Parameter(description = "The input PDF file") MultipartFile inputFile, @RequestPart(required = true, value = "fileInput") @Parameter(description = "The input PDF file") MultipartFile inputFile,
@RequestParam("outputFormat") @Parameter(description = "The output Word document format", schema = @Schema(allowableValues = { @RequestParam("outputFormat") @Parameter(description = "The output Word document format", schema = @Schema(allowableValues = {
@@ -60,7 +62,7 @@ public class ConvertPDFToOffice {
} }
@PostMapping(consumes = "multipart/form-data", value = "/pdf-to-xml") @PostMapping(consumes = "multipart/form-data", value = "/pdf-to-xml")
@Operation(summary = "Convert PDF to XML", description = "This endpoint converts a PDF file to an XML file.") @Operation(summary = "Convert PDF to XML", description = "This endpoint converts a PDF file to an XML file. Input:PDF Output:XML Type:SISO")
public ResponseEntity<byte[]> processPdfToXML( public ResponseEntity<byte[]> processPdfToXML(
@RequestPart(required = true, value = "fileInput") @Parameter(description = "The input PDF file to be converted to an XML file", required = true) MultipartFile inputFile) @RequestPart(required = true, value = "fileInput") @Parameter(description = "The input PDF file to be converted to an XML file", required = true) MultipartFile inputFile)
throws IOException, InterruptedException { throws IOException, InterruptedException {

View File

@@ -14,16 +14,18 @@ import org.springframework.web.multipart.MultipartFile;
import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.Parameter; import io.swagger.v3.oas.annotations.Parameter;
import stirling.software.SPDF.utils.PdfUtils; import io.swagger.v3.oas.annotations.tags.Tag;
import stirling.software.SPDF.utils.ProcessExecutor; import stirling.software.SPDF.utils.ProcessExecutor;
import stirling.software.SPDF.utils.WebResponseUtils;
@RestController @RestController
@Tag(name = "Convert", description = "Convert APIs")
public class ConvertPDFToPDFA { public class ConvertPDFToPDFA {
@PostMapping(consumes = "multipart/form-data", value = "/pdf-to-pdfa") @PostMapping(consumes = "multipart/form-data", value = "/pdf-to-pdfa")
@Operation( @Operation(
summary = "Convert a PDF to a PDF/A", summary = "Convert a PDF to a PDF/A",
description = "This endpoint converts a PDF file to a PDF/A file. PDF/A is a format designed for long-term archiving of digital documents." description = "This endpoint converts a PDF file to a PDF/A file. PDF/A is a format designed for long-term archiving of digital documents. Input:PDF Output:PDF Type:SISO"
) )
public ResponseEntity<byte[]> pdfToPdfA( public ResponseEntity<byte[]> pdfToPdfA(
@RequestPart(required = true, value = "fileInput") @RequestPart(required = true, value = "fileInput")
@@ -58,7 +60,7 @@ public class ConvertPDFToPDFA {
// Return the optimized PDF as a response // Return the optimized PDF as a response
String outputFilename = inputFile.getOriginalFilename().replaceFirst("[.][^.]+$", "") + "_PDFA.pdf"; String outputFilename = inputFile.getOriginalFilename().replaceFirst("[.][^.]+$", "") + "_PDFA.pdf";
return PdfUtils.bytesToWebResponse(pdfBytes, outputFilename); return WebResponseUtils.bytesToWebResponse(pdfBytes, outputFilename);
} }
} }

View File

@@ -0,0 +1,76 @@
package stirling.software.SPDF.controller.api.converters;
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;
import java.util.ArrayList;
import java.util.List;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestPart;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.multipart.MultipartFile;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.Parameter;
import io.swagger.v3.oas.annotations.tags.Tag;
import stirling.software.SPDF.utils.GeneralUtils;
import stirling.software.SPDF.utils.ProcessExecutor;
import stirling.software.SPDF.utils.WebResponseUtils;
@RestController
@Tag(name = "Convert", description = "Convert APIs")
public class ConvertWebsiteToPDF {
@PostMapping(consumes = "multipart/form-data", value = "/url-to-pdf")
@Operation(
summary = "Convert a URL to a PDF",
description = "This endpoint fetches content from a URL and converts it to a PDF format."
)
public ResponseEntity<byte[]> urlToPdf(
@RequestPart(required = true, value = "urlInput")
@Parameter(description = "The input URL to be converted to a PDF file", required = true)
String URL) throws IOException, InterruptedException {
// Validate the URL format
if(!URL.matches("^https?://.*") || !GeneralUtils.isValidURL(URL)) {
throw new IllegalArgumentException("Invalid URL format provided.");
}
Path tempOutputFile = null;
byte[] pdfBytes;
try {
// Prepare the output file path
tempOutputFile = Files.createTempFile("output_", ".pdf");
// Prepare the OCRmyPDF command
List<String> command = new ArrayList<>();
command.add("weasyprint");
command.add(URL);
command.add(tempOutputFile.toString());
int returnCode = ProcessExecutor.getInstance(ProcessExecutor.Processes.WEASYPRINT).runCommandWithOutputHandling(command);
// Read the optimized PDF file
pdfBytes = Files.readAllBytes(tempOutputFile);
}
finally {
// Clean up the temporary files
Files.delete(tempOutputFile);
}
// Convert URL to a safe filename
String outputFilename = convertURLToFileName(URL);
return WebResponseUtils.bytesToWebResponse(pdfBytes, outputFilename);
}
private String convertURLToFileName(String url) {
String safeName = url.replaceAll("[^a-zA-Z0-9]", "_");
if(safeName.length() > 50) {
safeName = safeName.substring(0, 50); // restrict to 50 characters
}
return safeName + ".pdf";
}
}

View File

@@ -0,0 +1,202 @@
package stirling.software.SPDF.controller.api.filters;
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;
import java.util.ArrayList;
import java.util.List;
import org.apache.pdfbox.pdmodel.PDDocument;
import org.apache.pdfbox.pdmodel.PDPage;
import org.apache.pdfbox.pdmodel.common.PDRectangle;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestPart;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.multipart.MultipartFile;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.Parameter;
import io.swagger.v3.oas.annotations.tags.Tag;
import stirling.software.SPDF.utils.PdfUtils;
import stirling.software.SPDF.utils.ProcessExecutor;
import stirling.software.SPDF.utils.WebResponseUtils;
import io.swagger.v3.oas.annotations.media.Schema;
@RestController
@Tag(name = "Filter", description = "Filter APIs")
public class FilterController {
@PostMapping(consumes = "multipart/form-data", value = "/filter-contains-text")
@Operation(summary = "Checks if a PDF contains set text, returns true if does", description = "Input:PDF Output:Boolean Type:SISO")
public ResponseEntity<byte[]> containsText(
@RequestPart(required = true, value = "fileInput") @Parameter(description = "The input PDF file to be converted to a PDF/A file", required = true) MultipartFile inputFile,
@Parameter(description = "The text to check for", required = true) String text,
@Parameter(description = "The page number to check for text on accepts 'All', ranges like '1-4'", required = false) String pageNumber)
throws IOException, InterruptedException {
PDDocument pdfDocument = PDDocument.load(inputFile.getInputStream());
if (PdfUtils.hasText(pdfDocument, pageNumber, text))
return WebResponseUtils.pdfDocToWebResponse(pdfDocument, inputFile.getOriginalFilename());
return null;
}
// TODO
@PostMapping(consumes = "multipart/form-data", value = "/filter-contains-image")
@Operation(summary = "Checks if a PDF contains an image", description = "Input:PDF Output:Boolean Type:SISO")
public ResponseEntity<byte[]> containsImage(
@RequestPart(required = true, value = "fileInput") @Parameter(description = "The input PDF file to be converted to a PDF/A file", required = true) MultipartFile inputFile,
@Parameter(description = "The page number to check for image on accepts 'All', ranges like '1-4'", required = false) String pageNumber)
throws IOException, InterruptedException {
PDDocument pdfDocument = PDDocument.load(inputFile.getInputStream());
if (PdfUtils.hasImages(pdfDocument, pageNumber))
return WebResponseUtils.pdfDocToWebResponse(pdfDocument, inputFile.getOriginalFilename());
return null;
}
@PostMapping(consumes = "multipart/form-data", value = "/filter-page-count")
@Operation(summary = "Checks if a PDF is greater, less or equal to a setPageCount", description = "Input:PDF Output:Boolean Type:SISO")
public ResponseEntity<byte[]> pageCount(
@RequestPart(required = true, value = "fileInput") @Parameter(description = "The input PDF file", required = true) MultipartFile inputFile,
@Parameter(description = "Page Count", required = true) String pageCount,
@Parameter(description = "Comparison type", schema = @Schema(description = "The comparison type, accepts Greater, Equal, Less than", allowableValues = {
"Greater", "Equal", "Less" })) String comparator)
throws IOException, InterruptedException {
// Load the PDF
PDDocument document = PDDocument.load(inputFile.getInputStream());
int actualPageCount = document.getNumberOfPages();
boolean valid = false;
// Perform the comparison
switch (comparator) {
case "Greater":
valid = actualPageCount > Integer.parseInt(pageCount);
break;
case "Equal":
valid = actualPageCount == Integer.parseInt(pageCount);
break;
case "Less":
valid = actualPageCount < Integer.parseInt(pageCount);
break;
default:
throw new IllegalArgumentException("Invalid comparator: " + comparator);
}
if (valid)
return WebResponseUtils.multiPartFileToWebResponse(inputFile);
return null;
}
@PostMapping(consumes = "multipart/form-data", value = "/filter-page-size")
@Operation(summary = "Checks if a PDF is of a certain size", description = "Input:PDF Output:Boolean Type:SISO")
public ResponseEntity<byte[]> pageSize(
@RequestPart(required = true, value = "fileInput") @Parameter(description = "The input PDF file", required = true) MultipartFile inputFile,
@Parameter(description = "Standard Page Size", required = true) String standardPageSize,
@Parameter(description = "Comparison type", schema = @Schema(description = "The comparison type, accepts Greater, Equal, Less than", allowableValues = {
"Greater", "Equal", "Less" })) String comparator)
throws IOException, InterruptedException {
// Load the PDF
PDDocument document = PDDocument.load(inputFile.getInputStream());
PDPage firstPage = document.getPage(0);
PDRectangle actualPageSize = firstPage.getMediaBox();
// Calculate the area of the actual page size
float actualArea = actualPageSize.getWidth() * actualPageSize.getHeight();
// Get the standard size and calculate its area
PDRectangle standardSize = PdfUtils.textToPageSize(standardPageSize);
float standardArea = standardSize.getWidth() * standardSize.getHeight();
boolean valid = false;
// Perform the comparison
switch (comparator) {
case "Greater":
valid = actualArea > standardArea;
break;
case "Equal":
valid = actualArea == standardArea;
break;
case "Less":
valid = actualArea < standardArea;
break;
default:
throw new IllegalArgumentException("Invalid comparator: " + comparator);
}
if (valid)
return WebResponseUtils.multiPartFileToWebResponse(inputFile);
return null;
}
@PostMapping(consumes = "multipart/form-data", value = "/filter-file-size")
@Operation(summary = "Checks if a PDF is a set file size", description = "Input:PDF Output:Boolean Type:SISO")
public ResponseEntity<byte[]> fileSize(
@RequestPart(required = true, value = "fileInput") @Parameter(description = "The input PDF file", required = true) MultipartFile inputFile,
@Parameter(description = "File Size", required = true) String fileSize,
@Parameter(description = "Comparison type", schema = @Schema(description = "The comparison type, accepts Greater, Equal, Less than", allowableValues = {
"Greater", "Equal", "Less" })) String comparator)
throws IOException, InterruptedException {
// Get the file size
long actualFileSize = inputFile.getSize();
boolean valid = false;
// Perform the comparison
switch (comparator) {
case "Greater":
valid = actualFileSize > Long.parseLong(fileSize);
break;
case "Equal":
valid = actualFileSize == Long.parseLong(fileSize);
break;
case "Less":
valid = actualFileSize < Long.parseLong(fileSize);
break;
default:
throw new IllegalArgumentException("Invalid comparator: " + comparator);
}
if (valid)
return WebResponseUtils.multiPartFileToWebResponse(inputFile);
return null;
}
@PostMapping(consumes = "multipart/form-data", value = "/filter-page-rotation")
@Operation(summary = "Checks if a PDF is of a certain rotation", description = "Input:PDF Output:Boolean Type:SISO")
public ResponseEntity<byte[]> pageRotation(
@RequestPart(required = true, value = "fileInput") @Parameter(description = "The input PDF file", required = true) MultipartFile inputFile,
@Parameter(description = "Rotation in degrees", required = true) int rotation,
@Parameter(description = "Comparison type", schema = @Schema(description = "The comparison type, accepts Greater, Equal, Less than", allowableValues = {
"Greater", "Equal", "Less" })) String comparator)
throws IOException, InterruptedException {
// Load the PDF
PDDocument document = PDDocument.load(inputFile.getInputStream());
// Get the rotation of the first page
PDPage firstPage = document.getPage(0);
int actualRotation = firstPage.getRotation();
boolean valid = false;
// Perform the comparison
switch (comparator) {
case "Greater":
valid = actualRotation > rotation;
break;
case "Equal":
valid = actualRotation == rotation;
break;
case "Less":
valid = actualRotation < rotation;
break;
default:
throw new IllegalArgumentException("Invalid comparator: " + comparator);
}
if (valid)
return WebResponseUtils.multiPartFileToWebResponse(inputFile);
return null;
}
}

View File

@@ -0,0 +1,177 @@
package stirling.software.SPDF.controller.api.other;
import java.io.IOException;
import java.util.Comparator;
import java.util.List;
import java.util.stream.Collectors;
import java.util.stream.Stream;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RequestPart;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.multipart.MultipartFile;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.Parameter;
import io.swagger.v3.oas.annotations.tags.Tag;
import stirling.software.SPDF.utils.GeneralUtils;
import stirling.software.SPDF.utils.PdfUtils;
import stirling.software.SPDF.utils.WebResponseUtils;
import org.apache.pdfbox.pdmodel.*;
import org.apache.pdfbox.pdmodel.common.*;
import org.apache.pdfbox.pdmodel.PDPageContentStream.*;
import org.springframework.web.bind.annotation.*;
import org.springframework.http.*;
import org.springframework.web.multipart.MultipartFile;
import io.swagger.v3.oas.annotations.*;
import io.swagger.v3.oas.annotations.media.*;
import io.swagger.v3.oas.annotations.parameters.*;
import org.apache.pdfbox.pdmodel.font.PDType1Font;
import org.apache.pdfbox.text.TextPosition;
import org.apache.tomcat.util.http.ResponseUtil;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.net.URLEncoder;
import java.util.List;
import java.util.ArrayList;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.multipart.MultipartFile;
import com.itextpdf.io.font.constants.StandardFonts;
import com.itextpdf.kernel.font.PdfFont;
import com.itextpdf.kernel.font.PdfFontFactory;
import com.itextpdf.kernel.geom.Rectangle;
import com.itextpdf.kernel.pdf.PdfReader;
import com.itextpdf.kernel.pdf.PdfWriter;
import com.itextpdf.kernel.pdf.PdfDocument;
import com.itextpdf.kernel.pdf.PdfPage;
import com.itextpdf.kernel.pdf.canvas.PdfCanvas;
import com.itextpdf.layout.Canvas;
import com.itextpdf.layout.element.Paragraph;
import com.itextpdf.layout.properties.TextAlignment;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.media.Schema;
import java.io.*;
import org.apache.pdfbox.pdmodel.*;
import org.apache.pdfbox.text.*;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;
import io.swagger.v3.oas.annotations.*;
import io.swagger.v3.oas.annotations.media.Schema;
import org.springframework.http.ResponseEntity;
@RestController
@Tag(name = "Other", description = "Other APIs")
public class AutoRenameController {
private static final Logger logger = LoggerFactory.getLogger(AutoRenameController.class);
private static final float TITLE_FONT_SIZE_THRESHOLD = 20.0f;
private static final int LINE_LIMIT = 11;
@PostMapping(consumes = "multipart/form-data", value = "/auto-rename")
@Operation(summary = "Extract header from PDF file", description = "This endpoint accepts a PDF file and attempts to extract its title or header based on heuristics. Input:PDF Output:PDF Type:SISO")
public ResponseEntity<byte[]> extractHeader(
@RequestPart(value = "fileInput") @Parameter(description = "The input PDF file from which the header is to be extracted.", required = true) MultipartFile file,
@RequestParam(required = false, defaultValue = "false") @Parameter(description = "Flag indicating whether to use the first text as a fallback if no suitable title is found. Defaults to false.", required = false) Boolean useFirstTextAsFallback)
throws Exception {
PDDocument document = PDDocument.load(file.getInputStream());
PDFTextStripper reader = new PDFTextStripper() {
class LineInfo {
String text;
float fontSize;
LineInfo(String text, float fontSize) {
this.text = text;
this.fontSize = fontSize;
}
}
List<LineInfo> lineInfos = new ArrayList<>();
StringBuilder lineBuilder = new StringBuilder();
float lastY = -1;
float maxFontSizeInLine = 0.0f;
int lineCount = 0;
@Override
protected void processTextPosition(TextPosition text) {
if (lastY != text.getY() && lineCount < LINE_LIMIT) {
processLine();
lineBuilder = new StringBuilder(text.getUnicode());
maxFontSizeInLine = text.getFontSizeInPt();
lastY = text.getY();
lineCount++;
} else if (lineCount < LINE_LIMIT) {
lineBuilder.append(text.getUnicode());
if (text.getFontSizeInPt() > maxFontSizeInLine) {
maxFontSizeInLine = text.getFontSizeInPt();
}
}
}
private void processLine() {
if (lineBuilder.length() > 0 && lineCount < LINE_LIMIT) {
lineInfos.add(new LineInfo(lineBuilder.toString(), maxFontSizeInLine));
}
}
@Override
public String getText(PDDocument doc) throws IOException {
this.lineInfos.clear();
this.lineBuilder = new StringBuilder();
this.lastY = -1;
this.maxFontSizeInLine = 0.0f;
this.lineCount = 0;
super.getText(doc);
processLine(); // Process the last line
// Merge lines with same font size
List<LineInfo> mergedLineInfos = new ArrayList<>();
for (int i = 0; i < lineInfos.size(); i++) {
String mergedText = lineInfos.get(i).text;
float fontSize = lineInfos.get(i).fontSize;
while (i + 1 < lineInfos.size() && lineInfos.get(i + 1).fontSize == fontSize) {
mergedText += " " + lineInfos.get(i + 1).text;
i++;
}
mergedLineInfos.add(new LineInfo(mergedText, fontSize));
}
// Sort lines by font size in descending order and get the first one
mergedLineInfos.sort(Comparator.comparing((LineInfo li) -> li.fontSize).reversed());
String title = mergedLineInfos.isEmpty() ? null : mergedLineInfos.get(0).text;
return title != null ? title : (useFirstTextAsFallback ? (mergedLineInfos.isEmpty() ? null : mergedLineInfos.get(mergedLineInfos.size() - 1).text) : null);
}
};
String header = reader.getText(document);
// Sanitize the header string by removing characters not allowed in a filename.
if (header != null && header.length() < 255) {
header = header.replaceAll("[/\\\\?%*:|\"<>]", "");
return WebResponseUtils.pdfDocToWebResponse(document, header + ".pdf");
} else {
logger.info("File has no good title to be found");
return WebResponseUtils.pdfDocToWebResponse(document, file.getOriginalFilename());
}
}
}

View File

@@ -0,0 +1,141 @@
package stirling.software.SPDF.controller.api.other;
import java.awt.image.BufferedImage;
import java.awt.image.DataBufferByte;
import java.awt.image.DataBufferInt;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.nio.file.Files;
import java.nio.file.Path;
import java.util.ArrayList;
import java.util.List;
import java.util.zip.ZipEntry;
import java.util.zip.ZipOutputStream;
import org.apache.pdfbox.pdmodel.PDDocument;
import org.apache.pdfbox.rendering.PDFRenderer;
import org.springframework.http.MediaType;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.multipart.MultipartFile;
import com.google.zxing.BinaryBitmap;
import com.google.zxing.LuminanceSource;
import com.google.zxing.MultiFormatReader;
import com.google.zxing.NotFoundException;
import com.google.zxing.PlanarYUVLuminanceSource;
import com.google.zxing.Result;
import com.google.zxing.common.HybridBinarizer;
import stirling.software.SPDF.utils.WebResponseUtils;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.Parameter;
@RestController
public class AutoSplitPdfController {
private static final String QR_CONTENT = "https://github.com/Frooodle/Stirling-PDF";
@PostMapping(value = "/auto-split-pdf", consumes = "multipart/form-data")
@Operation(summary = "Auto split PDF pages into separate documents", description = "This endpoint accepts a PDF file, scans each page for a specific QR code, and splits the document at the QR code boundaries. The output is a zip file containing each separate PDF document. Input:PDF Output:ZIP Type:SISO")
public ResponseEntity<byte[]> autoSplitPdf(
@RequestParam("fileInput") @Parameter(description = "The input PDF file which needs to be split into separate documents based on QR code boundaries.", required = true) MultipartFile file,
@RequestParam(value ="duplexMode",defaultValue = "false") @Parameter(description = "Flag indicating if the duplex mode is active, where the page after the divider also gets removed.", required = false) boolean duplexMode)
throws IOException {
InputStream inputStream = file.getInputStream();
PDDocument document = PDDocument.load(inputStream);
PDFRenderer pdfRenderer = new PDFRenderer(document);
List<PDDocument> splitDocuments = new ArrayList<>();
List<ByteArrayOutputStream> splitDocumentsBoas = new ArrayList<>();
for (int page = 0; page < document.getNumberOfPages(); ++page) {
BufferedImage bim = pdfRenderer.renderImageWithDPI(page, 150);
String result = decodeQRCode(bim);
if (QR_CONTENT.equals(result) && page != 0) {
splitDocuments.add(new PDDocument());
}
if (!splitDocuments.isEmpty() && !QR_CONTENT.equals(result)) {
splitDocuments.get(splitDocuments.size() - 1).addPage(document.getPage(page));
} else if (page == 0) {
PDDocument firstDocument = new PDDocument();
firstDocument.addPage(document.getPage(page));
splitDocuments.add(firstDocument);
}
// If duplexMode is true and current page is a divider, then skip next page
if (duplexMode && QR_CONTENT.equals(result)) {
page++;
}
}
// Remove split documents that have no pages
splitDocuments.removeIf(pdDocument -> pdDocument.getNumberOfPages() == 0);
for (PDDocument splitDocument : splitDocuments) {
ByteArrayOutputStream baos = new ByteArrayOutputStream();
splitDocument.save(baos);
splitDocumentsBoas.add(baos);
splitDocument.close();
}
document.close();
Path zipFile = Files.createTempFile("split_documents", ".zip");
String filename = file.getOriginalFilename().replaceFirst("[.][^.]+$", "");
byte[] data;
try (ZipOutputStream zipOut = new ZipOutputStream(Files.newOutputStream(zipFile))) {
for (int i = 0; i < splitDocumentsBoas.size(); i++) {
String fileName = filename + "_" + (i + 1) + ".pdf";
ByteArrayOutputStream baos = splitDocumentsBoas.get(i);
byte[] pdf = baos.toByteArray();
ZipEntry pdfEntry = new ZipEntry(fileName);
zipOut.putNextEntry(pdfEntry);
zipOut.write(pdf);
zipOut.closeEntry();
}
} catch (Exception e) {
e.printStackTrace();
} finally {
data = Files.readAllBytes(zipFile);
Files.delete(zipFile);
}
return WebResponseUtils.bytesToWebResponse(data, filename + ".zip", MediaType.APPLICATION_OCTET_STREAM);
}
private static String decodeQRCode(BufferedImage bufferedImage) {
LuminanceSource source;
if (bufferedImage.getRaster().getDataBuffer() instanceof DataBufferByte) {
byte[] pixels = ((DataBufferByte) bufferedImage.getRaster().getDataBuffer()).getData();
source = new PlanarYUVLuminanceSource(pixels, bufferedImage.getWidth(), bufferedImage.getHeight(), 0, 0, bufferedImage.getWidth(), bufferedImage.getHeight(), false);
} else if (bufferedImage.getRaster().getDataBuffer() instanceof DataBufferInt) {
int[] pixels = ((DataBufferInt) bufferedImage.getRaster().getDataBuffer()).getData();
byte[] newPixels = new byte[pixels.length];
for (int i = 0; i < pixels.length; i++) {
newPixels[i] = (byte) (pixels[i] & 0xff);
}
source = new PlanarYUVLuminanceSource(newPixels, bufferedImage.getWidth(), bufferedImage.getHeight(), 0, 0, bufferedImage.getWidth(), bufferedImage.getHeight(), false);
} else {
throw new IllegalArgumentException("BufferedImage must have 8-bit gray scale, 24-bit RGB, 32-bit ARGB (packed int), byte gray, or 3-byte/4-byte RGB image data");
}
BinaryBitmap bitmap = new BinaryBitmap(new HybridBinarizer(source));
try {
Result result = new MultiFormatReader().decode(bitmap);
return result.getText();
} catch (NotFoundException e) {
return null; // there is no QR code in the image
}
}
}

View File

@@ -28,17 +28,19 @@ import org.springframework.web.multipart.MultipartFile;
import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.Parameter; import io.swagger.v3.oas.annotations.Parameter;
import stirling.software.SPDF.utils.ImageFinder; import io.swagger.v3.oas.annotations.tags.Tag;
import stirling.software.SPDF.utils.PdfUtils; import stirling.software.SPDF.utils.PdfUtils;
import stirling.software.SPDF.utils.ProcessExecutor; import stirling.software.SPDF.utils.ProcessExecutor;
import stirling.software.SPDF.utils.WebResponseUtils;
@RestController @RestController
@Tag(name = "Other", description = "Other APIs")
public class BlankPageController { public class BlankPageController {
@PostMapping(consumes = "multipart/form-data", value = "/remove-blanks") @PostMapping(consumes = "multipart/form-data", value = "/remove-blanks")
@Operation( @Operation(
summary = "Remove blank pages from a PDF file", summary = "Remove blank pages from a PDF file",
description = "This endpoint removes blank pages from a given PDF file. Users can specify the threshold and white percentage to tune the detection of blank pages." description = "This endpoint removes blank pages from a given PDF file. Users can specify the threshold and white percentage to tune the detection of blank pages. Input:PDF Output:PDF Type:SISO"
) )
public ResponseEntity<byte[]> removeBlankPages( public ResponseEntity<byte[]> removeBlankPages(
@RequestPart(required = true, value = "fileInput") @RequestPart(required = true, value = "fileInput")
@@ -71,7 +73,7 @@ public class BlankPageController {
pagesToKeepIndex.add(pageIndex); pagesToKeepIndex.add(pageIndex);
System.out.println("page " + pageIndex + " has text"); System.out.println("page " + pageIndex + " has text");
} else { } else {
boolean hasImages = hasImagesOnPage(page); boolean hasImages = PdfUtils.hasImagesOnPage(page);
if (hasImages) { if (hasImages) {
System.out.println("page " + pageIndex + " has image"); System.out.println("page " + pageIndex + " has image");
@@ -109,7 +111,7 @@ public class BlankPageController {
} }
} }
return PdfUtils.pdfDocToWebResponse(document, inputFile.getOriginalFilename().replaceFirst("[.][^.]+$", "") + "_blanksRemoved.pdf"); return WebResponseUtils.pdfDocToWebResponse(document, inputFile.getOriginalFilename().replaceFirst("[.][^.]+$", "") + "_blanksRemoved.pdf");
} catch (IOException e) { } catch (IOException e) {
e.printStackTrace(); e.printStackTrace();
return new ResponseEntity<>(HttpStatus.INTERNAL_SERVER_ERROR); return new ResponseEntity<>(HttpStatus.INTERNAL_SERVER_ERROR);
@@ -120,9 +122,5 @@ public class BlankPageController {
} }
private static boolean hasImagesOnPage(PDPage page) throws IOException {
ImageFinder imageFinder = new ImageFinder(page);
imageFinder.processPage(page);
return imageFinder.hasImages();
}
} }

View File

@@ -31,16 +31,19 @@ import org.springframework.web.multipart.MultipartFile;
import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.Parameter; import io.swagger.v3.oas.annotations.Parameter;
import io.swagger.v3.oas.annotations.media.Schema; import io.swagger.v3.oas.annotations.media.Schema;
import stirling.software.SPDF.utils.PdfUtils; import io.swagger.v3.oas.annotations.tags.Tag;
import stirling.software.SPDF.utils.GeneralUtils;
import stirling.software.SPDF.utils.ProcessExecutor; import stirling.software.SPDF.utils.ProcessExecutor;
import stirling.software.SPDF.utils.WebResponseUtils;
@RestController @RestController
@Tag(name = "Other", description = "Other APIs")
public class CompressController { public class CompressController {
private static final Logger logger = LoggerFactory.getLogger(CompressController.class); private static final Logger logger = LoggerFactory.getLogger(CompressController.class);
@PostMapping(consumes = "multipart/form-data", value = "/compress-pdf") @PostMapping(consumes = "multipart/form-data", value = "/compress-pdf")
@Operation(summary = "Optimize PDF file", description = "This endpoint accepts a PDF file and optimizes it based on the provided parameters.") @Operation(summary = "Optimize PDF file", description = "This endpoint accepts a PDF file and optimizes it based on the provided parameters. Input:PDF Output:PDF Type:SISO")
public ResponseEntity<byte[]> optimizePdf( public ResponseEntity<byte[]> optimizePdf(
@RequestPart(value = "fileInput") @Parameter(description = "The input PDF file to be optimized.", required = true) MultipartFile inputFile, @RequestPart(value = "fileInput") @Parameter(description = "The input PDF file to be optimized.", required = true) MultipartFile inputFile,
@RequestParam(required = false, value = "optimizeLevel") @Parameter(description = "The level of optimization to apply to the PDF file. Higher values indicate greater compression but may reduce quality.", schema = @Schema(allowableValues = { @RequestParam(required = false, value = "optimizeLevel") @Parameter(description = "The level of optimization to apply to the PDF file. Higher values indicate greater compression but may reduce quality.", schema = @Schema(allowableValues = {
@@ -55,7 +58,7 @@ public class CompressController {
Long expectedOutputSize = 0L; Long expectedOutputSize = 0L;
boolean autoMode = false; boolean autoMode = false;
if (expectedOutputSizeString != null && expectedOutputSizeString.length() > 1 ) { if (expectedOutputSizeString != null && expectedOutputSizeString.length() > 1 ) {
expectedOutputSize = PdfUtils.convertSizeToBytes(expectedOutputSizeString); expectedOutputSize = GeneralUtils.convertSizeToBytes(expectedOutputSizeString);
autoMode = true; autoMode = true;
} }
@@ -218,13 +221,22 @@ public class CompressController {
// Read the optimized PDF file // Read the optimized PDF file
byte[] pdfBytes = Files.readAllBytes(tempOutputFile); byte[] pdfBytes = Files.readAllBytes(tempOutputFile);
// Check if optimized file is larger than the original
if(pdfBytes.length > inputFileSize) {
// Log the occurrence
logger.warn("Optimized file is larger than the original. Returning the original file instead.");
// Read the original file again
pdfBytes = Files.readAllBytes(tempInputFile);
}
// Clean up the temporary files // Clean up the temporary files
Files.delete(tempInputFile); Files.delete(tempInputFile);
Files.delete(tempOutputFile); Files.delete(tempOutputFile);
// Return the optimized PDF as a response // Return the optimized PDF as a response
String outputFilename = inputFile.getOriginalFilename().replaceFirst("[.][^.]+$", "") + "_Optimized.pdf"; String outputFilename = inputFile.getOriginalFilename().replaceFirst("[.][^.]+$", "") + "_Optimized.pdf";
return PdfUtils.bytesToWebResponse(pdfBytes, outputFilename); return WebResponseUtils.bytesToWebResponse(pdfBytes, outputFilename);
} }
} }

View File

@@ -31,17 +31,19 @@ import org.springframework.web.multipart.MultipartFile;
import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.Parameter; import io.swagger.v3.oas.annotations.Parameter;
import stirling.software.SPDF.utils.PdfUtils; import io.swagger.v3.oas.annotations.tags.Tag;
import stirling.software.SPDF.utils.ProcessExecutor; import stirling.software.SPDF.utils.ProcessExecutor;
import stirling.software.SPDF.utils.WebResponseUtils;
@RestController @RestController
@Tag(name = "Other", description = "Other APIs")
public class ExtractImageScansController { public class ExtractImageScansController {
private static final Logger logger = LoggerFactory.getLogger(ExtractImageScansController.class); private static final Logger logger = LoggerFactory.getLogger(ExtractImageScansController.class);
@PostMapping(consumes = "multipart/form-data", value = "/extract-image-scans") @PostMapping(consumes = "multipart/form-data", value = "/extract-image-scans")
@Operation(summary = "Extract image scans from an input file", @Operation(summary = "Extract image scans from an input file",
description = "This endpoint extracts image scans from a given file based on certain parameters. Users can specify angle threshold, tolerance, minimum area, minimum contour area, and border size.") description = "This endpoint extracts image scans from a given file based on certain parameters. Users can specify angle threshold, tolerance, minimum area, minimum contour area, and border size. Input:PDF Output:IMAGE/ZIP Type:SIMO")
public ResponseEntity<byte[]> extractImageScans( public ResponseEntity<byte[]> extractImageScans(
@RequestPart(required = true, value = "fileInput") @RequestPart(required = true, value = "fileInput")
@Parameter(description = "The input file containing image scans") @Parameter(description = "The input file containing image scans")
@@ -147,11 +149,11 @@ public class ExtractImageScansController {
// Clean up the temporary zip file // Clean up the temporary zip file
Files.delete(tempZipFile); Files.delete(tempZipFile);
return PdfUtils.bytesToWebResponse(zipBytes, outputZipFilename, MediaType.APPLICATION_OCTET_STREAM); return WebResponseUtils.bytesToWebResponse(zipBytes, outputZipFilename, MediaType.APPLICATION_OCTET_STREAM);
} else { } else {
// Return the processed image as a response // Return the processed image as a response
byte[] imageBytes = processedImageBytes.get(0); byte[] imageBytes = processedImageBytes.get(0);
return PdfUtils.bytesToWebResponse(imageBytes, fileName.replaceFirst("[.][^.]+$", "") + ".png", MediaType.IMAGE_PNG); return WebResponseUtils.bytesToWebResponse(imageBytes, fileName.replaceFirst("[.][^.]+$", "") + ".png", MediaType.IMAGE_PNG);
} }
} }

View File

@@ -29,15 +29,17 @@ import org.springframework.web.multipart.MultipartFile;
import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.Parameter; import io.swagger.v3.oas.annotations.Parameter;
import io.swagger.v3.oas.annotations.media.Schema; import io.swagger.v3.oas.annotations.media.Schema;
import stirling.software.SPDF.utils.PdfUtils; import io.swagger.v3.oas.annotations.tags.Tag;
import stirling.software.SPDF.utils.WebResponseUtils;
@RestController @RestController
@Tag(name = "Other", description = "Other APIs")
public class ExtractImagesController { public class ExtractImagesController {
private static final Logger logger = LoggerFactory.getLogger(ExtractImagesController.class); private static final Logger logger = LoggerFactory.getLogger(ExtractImagesController.class);
@PostMapping(consumes = "multipart/form-data", value = "/extract-images") @PostMapping(consumes = "multipart/form-data", value = "/extract-images")
@Operation(summary = "Extract images from a PDF file", @Operation(summary = "Extract images from a PDF file",
description = "This endpoint extracts images from a given PDF file and returns them in a zip file. Users can specify the output image format.") description = "This endpoint extracts images from a given PDF file and returns them in a zip file. Users can specify the output image format. Input:PDF Output:IMAGE/ZIP Type:SIMO")
public ResponseEntity<byte[]> extractImages( public ResponseEntity<byte[]> extractImages(
@RequestPart(required = true, value = "fileInput") @RequestPart(required = true, value = "fileInput")
@Parameter(description = "The input PDF file containing images") @Parameter(description = "The input PDF file containing images")
@@ -59,7 +61,7 @@ public class ExtractImagesController {
zos.setLevel(Deflater.BEST_COMPRESSION); zos.setLevel(Deflater.BEST_COMPRESSION);
int imageIndex = 1; int imageIndex = 1;
String filename = file.getOriginalFilename().replaceFirst("[.][^.]+$", "");
int pageNum = 1; int pageNum = 1;
// Iterate over each page // Iterate over each page
for (PDPage page : document.getPages()) { for (PDPage page : document.getPages()) {
@@ -81,7 +83,7 @@ public class ExtractImagesController {
} }
// Write image to zip file // Write image to zip file
String imageName = "Image " + imageIndex + " (Page " + pageNum + ")." + format; String imageName = filename + "_" + imageIndex + " (Page " + pageNum + ")." + format;
ZipEntry zipEntry = new ZipEntry(imageName); ZipEntry zipEntry = new ZipEntry(imageName);
zos.putNextEntry(zipEntry); zos.putNextEntry(zipEntry);
@@ -106,7 +108,7 @@ public class ExtractImagesController {
// Create ByteArrayResource from byte array // Create ByteArrayResource from byte array
byte[] zipContents = baos.toByteArray(); byte[] zipContents = baos.toByteArray();
return PdfUtils.boasToWebResponse(baos, file.getOriginalFilename().replaceFirst("[.][^.]+$", "") + "_extracted-images.zip", MediaType.APPLICATION_OCTET_STREAM); return WebResponseUtils.boasToWebResponse(baos, filename + "_extracted-images.zip", MediaType.APPLICATION_OCTET_STREAM);
} }
} }

View File

@@ -0,0 +1,151 @@
package stirling.software.SPDF.controller.api.other;
import java.awt.Color;
import java.awt.geom.AffineTransform;
import java.awt.image.AffineTransformOp;
//Required for image manipulation
import java.awt.image.BufferedImage;
import java.awt.image.BufferedImageOp;
import java.awt.image.ConvolveOp;
import java.awt.image.Kernel;
import java.awt.image.RescaleOp;
//Required for file input/output
import java.io.File;
import java.io.IOException;
//Other required classes
import java.util.Random;
//Required for image input/output
import javax.imageio.ImageIO;
import org.apache.pdfbox.pdmodel.PDDocument;
import org.apache.pdfbox.pdmodel.PDPage;
import org.apache.pdfbox.pdmodel.PDPageContentStream;
import org.apache.pdfbox.pdmodel.common.PDRectangle;
import org.apache.pdfbox.pdmodel.graphics.image.LosslessFactory;
import org.apache.pdfbox.pdmodel.graphics.image.PDImageXObject;
import org.apache.pdfbox.rendering.ImageType;
import org.apache.pdfbox.rendering.PDFRenderer;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestPart;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.multipart.MultipartFile;
import com.itextpdf.io.source.ByteArrayOutputStream;
import io.swagger.v3.oas.annotations.Hidden;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.Parameter;
import io.swagger.v3.oas.annotations.tags.Tag;
import stirling.software.SPDF.utils.WebResponseUtils;
@RestController
@Tag(name = "Other", description = "Other APIs")
public class FakeScanControllerWIP {
private static final Logger logger = LoggerFactory.getLogger(FakeScanControllerWIP.class);
//TODO
@Hidden
@PostMapping(consumes = "multipart/form-data", value = "/fakeScan")
@Operation(
summary = "Repair a PDF file",
description = "This endpoint repairs a given PDF file by running Ghostscript command. The PDF is first saved to a temporary location, repaired, read back, and then returned as a response."
)
public ResponseEntity<byte[]> repairPdf(
@RequestPart(required = true, value = "fileInput")
@Parameter(description = "The input PDF file to be repaired", required = true)
MultipartFile inputFile) throws IOException, InterruptedException {
PDDocument document = PDDocument.load(inputFile.getBytes());
PDFRenderer pdfRenderer = new PDFRenderer(document);
for (int page = 0; page < document.getNumberOfPages(); ++page)
{
BufferedImage image = pdfRenderer.renderImageWithDPI(page, 300, ImageType.RGB);
ImageIO.write(image, "png", new File("scanned-" + (page+1) + ".png"));
}
document.close();
// Constants
int scannedness = 90; // Value between 0 and 100
int dirtiness = 0; // Value between 0 and 100
// Load the source image
BufferedImage sourceImage = ImageIO.read(new File("scanned-1.png"));
// Create the destination image
BufferedImage destinationImage = new BufferedImage(sourceImage.getWidth(), sourceImage.getHeight(), sourceImage.getType());
// Apply a brightness and contrast effect based on the "scanned-ness"
float scaleFactor = 1.0f + (scannedness / 100.0f) * 0.5f; // Between 1.0 and 1.5
float offset = scannedness * 1.5f; // Between 0 and 150
BufferedImageOp op = new RescaleOp(scaleFactor, offset, null);
op.filter(sourceImage, destinationImage);
// Apply a rotation effect
double rotationRequired = Math.toRadians((new Random().nextInt(3 - 1) + 1)); // Random angle between 1 and 3 degrees
double locationX = destinationImage.getWidth() / 2;
double locationY = destinationImage.getHeight() / 2;
AffineTransform tx = AffineTransform.getRotateInstance(rotationRequired, locationX, locationY);
AffineTransformOp rotateOp = new AffineTransformOp(tx, AffineTransformOp.TYPE_BILINEAR);
destinationImage = rotateOp.filter(destinationImage, null);
// Apply a blur effect based on the "scanned-ness"
float blurIntensity = scannedness / 100.0f * 0.2f; // Between 0.0 and 0.2
float[] matrix = {
blurIntensity, blurIntensity, blurIntensity,
blurIntensity, blurIntensity, blurIntensity,
blurIntensity, blurIntensity, blurIntensity
};
BufferedImageOp blurOp = new ConvolveOp(new Kernel(3, 3, matrix), ConvolveOp.EDGE_NO_OP, null);
destinationImage = blurOp.filter(destinationImage, null);
// Add noise to the image based on the "dirtiness"
Random random = new Random();
for (int y = 0; y < destinationImage.getHeight(); y++) {
for (int x = 0; x < destinationImage.getWidth(); x++) {
if (random.nextInt(100) < dirtiness) {
// Change the pixel color to black randomly based on the "dirtiness"
destinationImage.setRGB(x, y, Color.BLACK.getRGB());
}
}
}
// Save the image
ImageIO.write(destinationImage, "PNG", new File("scanned-1.png"));
PDDocument documentOut = new PDDocument();
for (int page = 1; page <= document.getNumberOfPages(); ++page)
{
BufferedImage bim = ImageIO.read(new File("scanned-" + page + ".png"));
// Adjust the dimensions of the page
PDPage pdPage = new PDPage(new PDRectangle(bim.getWidth() - 1, bim.getHeight() - 1));
documentOut.addPage(pdPage);
PDImageXObject pdImage = LosslessFactory.createFromImage(documentOut, bim);
PDPageContentStream contentStream = new PDPageContentStream(documentOut, pdPage);
// Draw the image with a slight offset and enlarged dimensions
contentStream.drawImage(pdImage, -1, -1, bim.getWidth() + 2, bim.getHeight() + 2);
contentStream.close();
}
ByteArrayOutputStream baos = new ByteArrayOutputStream();
documentOut.save(baos);
documentOut.close();
// Return the optimized PDF as a response
String outputFilename = inputFile.getOriginalFilename().replaceFirst("[.][^.]+$", "") + "_scanned.pdf";
return WebResponseUtils.boasToWebResponse(baos, outputFilename);
}
}

View File

@@ -19,9 +19,11 @@ import org.springframework.web.multipart.MultipartFile;
import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.Parameter; import io.swagger.v3.oas.annotations.Parameter;
import stirling.software.SPDF.utils.PdfUtils; import io.swagger.v3.oas.annotations.tags.Tag;
import stirling.software.SPDF.utils.WebResponseUtils;
@RestController @RestController
@Tag(name = "Other", description = "Other APIs")
public class MetadataController { public class MetadataController {
@@ -38,7 +40,7 @@ public class MetadataController {
@PostMapping(consumes = "multipart/form-data", value = "/update-metadata") @PostMapping(consumes = "multipart/form-data", value = "/update-metadata")
@Operation(summary = "Update metadata of a PDF file", @Operation(summary = "Update metadata of a PDF file",
description = "This endpoint allows you to update the metadata of a given PDF file. You can add, modify, or delete standard and custom metadata fields.") description = "This endpoint allows you to update the metadata of a given PDF file. You can add, modify, or delete standard and custom metadata fields. Input:PDF Output:PDF Type:SISO")
public ResponseEntity<byte[]> metadata( public ResponseEntity<byte[]> metadata(
@RequestPart(required = true, value = "fileInput") @RequestPart(required = true, value = "fileInput")
@Parameter(description = "The input PDF file to update metadata") @Parameter(description = "The input PDF file to update metadata")
@@ -73,6 +75,7 @@ public class MetadataController {
@RequestParam(value = "trapped", required = false) @RequestParam(value = "trapped", required = false)
@Parameter(description = "The trapped status of the document") @Parameter(description = "The trapped status of the document")
String trapped, String trapped,
@Parameter(description = "Map list of key and value of custom parameters, note these must start with customKey and customValue if they are non standard")
@RequestParam Map<String, String> allRequestParams) @RequestParam Map<String, String> allRequestParams)
throws IOException { throws IOException {
@@ -159,7 +162,7 @@ public class MetadataController {
info.setTrapped(trapped); info.setTrapped(trapped);
document.setDocumentInformation(info); document.setDocumentInformation(info);
return PdfUtils.pdfDocToWebResponse(document, pdfFile.getOriginalFilename().replaceFirst("[.][^.]+$", "") + "_metadata.pdf"); return WebResponseUtils.pdfDocToWebResponse(document, pdfFile.getOriginalFilename().replaceFirst("[.][^.]+$", "") + "_metadata.pdf");
} }
} }

View File

@@ -27,10 +27,12 @@ import org.springframework.web.multipart.MultipartFile;
import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.Parameter; import io.swagger.v3.oas.annotations.Parameter;
import io.swagger.v3.oas.annotations.media.Schema; import io.swagger.v3.oas.annotations.media.Schema;
import stirling.software.SPDF.utils.PdfUtils; import io.swagger.v3.oas.annotations.tags.Tag;
import stirling.software.SPDF.utils.ProcessExecutor; import stirling.software.SPDF.utils.ProcessExecutor;
import stirling.software.SPDF.utils.WebResponseUtils;
@RestController @RestController
@Tag(name = "Other", description = "Other APIs")
public class OCRController { public class OCRController {
private static final Logger logger = LoggerFactory.getLogger(OCRController.class); private static final Logger logger = LoggerFactory.getLogger(OCRController.class);
@@ -47,7 +49,7 @@ public class OCRController {
@PostMapping(consumes = "multipart/form-data", value = "/ocr-pdf") @PostMapping(consumes = "multipart/form-data", value = "/ocr-pdf")
@Operation(summary = "Process a PDF file with OCR", @Operation(summary = "Process a PDF file with OCR",
description = "This endpoint processes a PDF file using OCR (Optical Character Recognition). Users can specify languages, sidecar, deskew, clean, cleanFinal, ocrType, ocrRenderType, and removeImagesAfter options.") description = "This endpoint processes a PDF file using OCR (Optical Character Recognition). Users can specify languages, sidecar, deskew, clean, cleanFinal, ocrType, ocrRenderType, and removeImagesAfter options. Input:PDF Output:PDF Type:SI-Conditional")
public ResponseEntity<byte[]> processPdfWithOCR( public ResponseEntity<byte[]> processPdfWithOCR(
@RequestPart(required = true, value = "fileInput") @RequestPart(required = true, value = "fileInput")
@Parameter(description = "The input PDF file to be processed with OCR") @Parameter(description = "The input PDF file to be processed with OCR")
@@ -189,11 +191,11 @@ public class OCRController {
Files.delete(sidecarTextPath); Files.delete(sidecarTextPath);
// Return the zip file containing both the PDF and the text file // Return the zip file containing both the PDF and the text file
return PdfUtils.bytesToWebResponse(zipBytes, outputZipFilename, MediaType.APPLICATION_OCTET_STREAM); return WebResponseUtils.bytesToWebResponse(zipBytes, outputZipFilename, MediaType.APPLICATION_OCTET_STREAM);
} else { } else {
// Return the OCR processed PDF as a response // Return the OCR processed PDF as a response
Files.delete(tempOutputFile); Files.delete(tempOutputFile);
return PdfUtils.bytesToWebResponse(pdfBytes, outputFilename); return WebResponseUtils.bytesToWebResponse(pdfBytes, outputFilename);
} }
} }

View File

@@ -14,9 +14,12 @@ import org.springframework.web.multipart.MultipartFile;
import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.Parameter; import io.swagger.v3.oas.annotations.Parameter;
import io.swagger.v3.oas.annotations.tags.Tag;
import stirling.software.SPDF.utils.PdfUtils; import stirling.software.SPDF.utils.PdfUtils;
import stirling.software.SPDF.utils.WebResponseUtils;
@RestController @RestController
@Tag(name = "Other", description = "Other APIs")
public class OverlayImageController { public class OverlayImageController {
private static final Logger logger = LoggerFactory.getLogger(OverlayImageController.class); private static final Logger logger = LoggerFactory.getLogger(OverlayImageController.class);
@@ -24,7 +27,7 @@ public class OverlayImageController {
@PostMapping(consumes = "multipart/form-data", value = "/add-image") @PostMapping(consumes = "multipart/form-data", value = "/add-image")
@Operation( @Operation(
summary = "Overlay image onto a PDF file", summary = "Overlay image onto a PDF file",
description = "This endpoint overlays an image onto a PDF file at the specified coordinates. The image can be overlaid on every page of the PDF if specified." description = "This endpoint overlays an image onto a PDF file at the specified coordinates. The image can be overlaid on every page of the PDF if specified. Input:PDF/IMAGE Output:PDF Type:MF-SISO"
) )
public ResponseEntity<byte[]> overlayImage( public ResponseEntity<byte[]> overlayImage(
@RequestPart(required = true, value = "fileInput") @RequestPart(required = true, value = "fileInput")
@@ -47,7 +50,7 @@ public class OverlayImageController {
byte[] imageBytes = imageFile.getBytes(); byte[] imageBytes = imageFile.getBytes();
byte[] result = PdfUtils.overlayImage(pdfBytes, imageBytes, x, y, everyPage); byte[] result = PdfUtils.overlayImage(pdfBytes, imageBytes, x, y, everyPage);
return PdfUtils.bytesToWebResponse(result, pdfFile.getOriginalFilename().replaceFirst("[.][^.]+$", "") + "_overlayed.pdf"); return WebResponseUtils.bytesToWebResponse(result, pdfFile.getOriginalFilename().replaceFirst("[.][^.]+$", "") + "_overlayed.pdf");
} catch (IOException e) { } catch (IOException e) {
logger.error("Failed to add image to PDF", e); logger.error("Failed to add image to PDF", e);
return new ResponseEntity<>(HttpStatus.BAD_REQUEST); return new ResponseEntity<>(HttpStatus.BAD_REQUEST);

View File

@@ -0,0 +1,174 @@
package stirling.software.SPDF.controller.api.other;
import java.io.IOException;
import java.util.List;
import java.util.stream.Collectors;
import java.util.stream.Stream;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RequestPart;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.multipart.MultipartFile;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.Parameter;
import io.swagger.v3.oas.annotations.tags.Tag;
import stirling.software.SPDF.utils.GeneralUtils;
import stirling.software.SPDF.utils.PdfUtils;
import stirling.software.SPDF.utils.WebResponseUtils;
import org.apache.pdfbox.pdmodel.*;
import org.apache.pdfbox.pdmodel.common.*;
import org.apache.pdfbox.pdmodel.PDPageContentStream.*;
import org.springframework.web.bind.annotation.*;
import org.springframework.http.*;
import org.springframework.web.multipart.MultipartFile;
import io.swagger.v3.oas.annotations.*;
import io.swagger.v3.oas.annotations.media.*;
import io.swagger.v3.oas.annotations.parameters.*;
import org.apache.pdfbox.pdmodel.font.PDType1Font;
import org.apache.tomcat.util.http.ResponseUtil;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.net.URLEncoder;
import java.util.List;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.multipart.MultipartFile;
import com.itextpdf.io.font.constants.StandardFonts;
import com.itextpdf.kernel.font.PdfFont;
import com.itextpdf.kernel.font.PdfFontFactory;
import com.itextpdf.kernel.geom.Rectangle;
import com.itextpdf.kernel.pdf.PdfReader;
import com.itextpdf.kernel.pdf.PdfWriter;
import com.itextpdf.kernel.pdf.PdfDocument;
import com.itextpdf.kernel.pdf.PdfPage;
import com.itextpdf.kernel.pdf.canvas.PdfCanvas;
import com.itextpdf.layout.Canvas;
import com.itextpdf.layout.element.Paragraph;
import com.itextpdf.layout.properties.TextAlignment;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.media.Schema;
import java.io.*;
@RestController
@Tag(name = "Other", description = "Other APIs")
public class PageNumbersController {
private static final Logger logger = LoggerFactory.getLogger(PageNumbersController.class);
@PostMapping(value = "/add-page-numbers", consumes = "multipart/form-data")
@Operation(summary = "Add page numbers to a PDF document", description = "This operation takes an input PDF file and adds page numbers to it. Input:PDF Output:PDF Type:SISO")
public ResponseEntity<byte[]> addPageNumbers(
@Parameter(description = "The input PDF file", required = true) @RequestParam("fileInput") MultipartFile file,
@Parameter(description = "Custom margin: small/medium/large", required = true, schema = @Schema(type = "string", allowableValues = {"small", "medium", "large"})) @RequestParam("customMargin") String customMargin,
@Parameter(description = "Position: 1 of 9 positions", required = true, schema = @Schema(type = "integer", minimum = "1", maximum = "9")) @RequestParam("position") int position,
@Parameter(description = "Starting number", required = true, schema = @Schema(type = "integer", minimum = "1")) @RequestParam("startingNumber") int startingNumber,
@Parameter(description = "Which pages to number, default all", required = false, schema = @Schema(type = "string")) @RequestParam(value = "pagesToNumber", required = false) String pagesToNumber,
@Parameter(description = "Custom text: defaults to just number but can have things like \"Page {n} of {p}\"", required = false, schema = @Schema(type = "string")) @RequestParam(value = "customText", required = false) String customText)
throws IOException {
byte[] fileBytes = file.getBytes();
ByteArrayInputStream bais = new ByteArrayInputStream(fileBytes);
int pageNumber = startingNumber;
float marginFactor;
switch (customMargin.toLowerCase()) {
case "small":
marginFactor = 0.02f;
break;
case "medium":
marginFactor = 0.035f;
break;
case "large":
marginFactor = 0.05f;
break;
case "x-large":
marginFactor = 0.1f;
break;
default:
marginFactor = 0.035f;
break;
}
float fontSize = 12.0f;
PdfReader reader = new PdfReader(bais);
ByteArrayOutputStream baos = new ByteArrayOutputStream();
PdfWriter writer = new PdfWriter(baos);
PdfDocument pdfDoc = new PdfDocument(reader, writer);
List<Integer> pagesToNumberList = GeneralUtils.parsePageList(pagesToNumber.split(","), pdfDoc.getNumberOfPages());
for (int i : pagesToNumberList) {
PdfPage page = pdfDoc.getPage(i+1);
Rectangle pageSize = page.getPageSize();
PdfCanvas pdfCanvas = new PdfCanvas(page.newContentStreamAfter(), page.getResources(), pdfDoc);
String text = customText != null ? customText.replace("{n}", String.valueOf(pageNumber)).replace("{total}", String.valueOf(pdfDoc.getNumberOfPages())) : String.valueOf(pageNumber);
PdfFont font = PdfFontFactory.createFont(StandardFonts.HELVETICA);
float textWidth = font.getWidth(text, fontSize);
float textHeight = font.getAscent(text, fontSize) - font.getDescent(text, fontSize);
float x, y;
TextAlignment alignment;
int xGroup = (position - 1) % 3;
int yGroup = 2 - (position - 1) / 3;
switch (xGroup) {
case 0: // left
x = pageSize.getLeft() + marginFactor * pageSize.getWidth();
alignment = TextAlignment.LEFT;
break;
case 1: // center
x = pageSize.getLeft() + (pageSize.getWidth()) / 2;
alignment = TextAlignment.CENTER;
break;
default: // right
x = pageSize.getRight() - marginFactor * pageSize.getWidth();
alignment = TextAlignment.RIGHT;
break;
}
switch (yGroup) {
case 0: // bottom
y = pageSize.getBottom() + marginFactor * pageSize.getHeight();
break;
case 1: // middle
y = pageSize.getBottom() + (pageSize.getHeight() ) / 2;
break;
default: // top
y = pageSize.getTop() - marginFactor * pageSize.getHeight();
break;
}
new Canvas(pdfCanvas, page.getPageSize())
.showTextAligned(new Paragraph(text).setFont(font).setFontSize(fontSize), x, y, alignment);
pageNumber++;
}
pdfDoc.close();
byte[] resultBytes = baos.toByteArray();
return WebResponseUtils.bytesToWebResponse(resultBytes, URLEncoder.encode(file.getOriginalFilename().replaceFirst("[.][^.]+$", "") + "_numbersAdded.pdf", "UTF-8"), MediaType.APPLICATION_PDF);
}
}

View File

@@ -16,10 +16,12 @@ import org.springframework.web.multipart.MultipartFile;
import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.Parameter; import io.swagger.v3.oas.annotations.Parameter;
import stirling.software.SPDF.utils.PdfUtils; import io.swagger.v3.oas.annotations.tags.Tag;
import stirling.software.SPDF.utils.ProcessExecutor; import stirling.software.SPDF.utils.ProcessExecutor;
import stirling.software.SPDF.utils.WebResponseUtils;
@RestController @RestController
@Tag(name = "Other", description = "Other APIs")
public class RepairController { public class RepairController {
private static final Logger logger = LoggerFactory.getLogger(RepairController.class); private static final Logger logger = LoggerFactory.getLogger(RepairController.class);
@@ -27,7 +29,7 @@ public class RepairController {
@PostMapping(consumes = "multipart/form-data", value = "/repair") @PostMapping(consumes = "multipart/form-data", value = "/repair")
@Operation( @Operation(
summary = "Repair a PDF file", summary = "Repair a PDF file",
description = "This endpoint repairs a given PDF file by running Ghostscript command. The PDF is first saved to a temporary location, repaired, read back, and then returned as a response." description = "This endpoint repairs a given PDF file by running Ghostscript command. The PDF is first saved to a temporary location, repaired, read back, and then returned as a response. Input:PDF Output:PDF Type:SISO"
) )
public ResponseEntity<byte[]> repairPdf( public ResponseEntity<byte[]> repairPdf(
@RequestPart(required = true, value = "fileInput") @RequestPart(required = true, value = "fileInput")
@@ -60,7 +62,7 @@ public class RepairController {
// Return the optimized PDF as a response // Return the optimized PDF as a response
String outputFilename = inputFile.getOriginalFilename().replaceFirst("[.][^.]+$", "") + "_repaired.pdf"; String outputFilename = inputFile.getOriginalFilename().replaceFirst("[.][^.]+$", "") + "_repaired.pdf";
return PdfUtils.bytesToWebResponse(pdfBytes, outputFilename); return WebResponseUtils.bytesToWebResponse(pdfBytes, outputFilename);
} }
} }

View File

@@ -0,0 +1,516 @@
package stirling.software.SPDF.controller.api.pipeline;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import java.io.PrintStream;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.time.LocalDate;
import java.time.LocalTime;
import java.time.format.DateTimeFormatter;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.stream.Stream;
import java.util.zip.ZipEntry;
import java.util.zip.ZipInputStream;
import java.util.zip.ZipOutputStream;
import java.io.FileOutputStream;
import java.io.OutputStream;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.core.io.ByteArrayResource;
import org.springframework.core.io.Resource;
import org.springframework.http.HttpEntity;
import org.springframework.http.HttpHeaders;
import org.springframework.http.HttpMethod;
import org.springframework.http.HttpStatus;
import org.springframework.http.MediaType;
import org.springframework.http.ResponseEntity;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.util.LinkedMultiValueMap;
import org.springframework.util.MultiValueMap;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RequestPart;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.client.RestTemplate;
import org.springframework.web.multipart.MultipartFile;
import com.fasterxml.jackson.databind.JsonNode;
import com.fasterxml.jackson.databind.ObjectMapper;
import io.swagger.v3.oas.annotations.tags.Tag;
import stirling.software.SPDF.model.PipelineConfig;
import stirling.software.SPDF.model.PipelineOperation;
import stirling.software.SPDF.utils.WebResponseUtils;
@RestController
@Tag(name = "Pipeline", description = "Pipeline APIs")
public class PipelineController {
private static final Logger logger = LoggerFactory.getLogger(PipelineController.class);
@Autowired
private ObjectMapper objectMapper;
final String jsonFileName = "pipelineConfig.json";
final String watchedFoldersDir = "./pipeline/watchedFolders/";
final String finishedFoldersDir = "./pipeline/finishedFolders/";
@Scheduled(fixedRate = 25000)
public void scanFolders() {
logger.info("Scanning folders...");
Path watchedFolderPath = Paths.get(watchedFoldersDir);
if (!Files.exists(watchedFolderPath)) {
try {
Files.createDirectories(watchedFolderPath);
logger.info("Created directory: {}", watchedFolderPath);
} catch (IOException e) {
logger.error("Error creating directory: {}", watchedFolderPath, e);
return;
}
}
try (Stream<Path> paths = Files.walk(watchedFolderPath)) {
paths.filter(Files::isDirectory).forEach(t -> {
try {
if (!t.equals(watchedFolderPath) && !t.endsWith("processing")) {
handleDirectory(t);
}
} catch (Exception e) {
logger.error("Error handling directory: {}", t, e);
}
});
} catch (Exception e) {
logger.error("Error walking through directory: {}", watchedFolderPath, e);
}
}
private void handleDirectory(Path dir) throws Exception {
logger.info("Handling directory: {}", dir);
Path jsonFile = dir.resolve(jsonFileName);
Path processingDir = dir.resolve("processing"); // Directory to move files during processing
if (!Files.exists(processingDir)) {
Files.createDirectory(processingDir);
logger.info("Created processing directory: {}", processingDir);
}
if (Files.exists(jsonFile)) {
// Read JSON file
String jsonString;
try {
jsonString = new String(Files.readAllBytes(jsonFile));
logger.info("Read JSON file: {}", jsonFile);
} catch (IOException e) {
logger.error("Error reading JSON file: {}", jsonFile, e);
return;
}
// Decode JSON to PipelineConfig
PipelineConfig config;
try {
config = objectMapper.readValue(jsonString, PipelineConfig.class);
// Assuming your PipelineConfig class has getters for all necessary fields, you
// can perform checks here
if (config.getOperations() == null || config.getOutputDir() == null || config.getName() == null) {
throw new IOException("Invalid JSON format");
}
} catch (IOException e) {
logger.error("Error parsing PipelineConfig: {}", jsonString, e);
return;
}
// For each operation in the pipeline
for (PipelineOperation operation : config.getOperations()) {
// Collect all files based on fileInput
File[] files;
String fileInput = (String) operation.getParameters().get("fileInput");
if ("automated".equals(fileInput)) {
// If fileInput is "automated", process all files in the directory
try (Stream<Path> paths = Files.list(dir)) {
files = paths
.filter(path -> !Files.isDirectory(path)) // exclude directories
.filter(path -> !path.equals(jsonFile)) // exclude jsonFile
.map(Path::toFile)
.toArray(File[]::new);
} catch (IOException e) {
e.printStackTrace();
return;
}
} else {
// If fileInput contains a path, process only this file
files = new File[] { new File(fileInput) };
}
// Prepare the files for processing
List<File> filesToProcess = new ArrayList<>();
for (File file : files) {
logger.info(file.getName());
logger.info("{} to {}",file.toPath(), processingDir.resolve(file.getName()));
Files.move(file.toPath(), processingDir.resolve(file.getName()));
filesToProcess.add(processingDir.resolve(file.getName()).toFile());
}
// Process the files
try {
List<Resource> resources = handleFiles(filesToProcess.toArray(new File[0]), jsonString);
if(resources == null) {
return;
}
// Move resultant files and rename them as per config in JSON file
for (Resource resource : resources) {
String resourceName = resource.getFilename();
String baseName = resourceName.substring(0, resourceName.lastIndexOf("."));
String extension = resourceName.substring(resourceName.lastIndexOf(".")+1);
String outputFileName = config.getOutputPattern().replace("{filename}", baseName);
outputFileName = outputFileName.replace("{pipelineName}", config.getName());
DateTimeFormatter dateFormatter = DateTimeFormatter.ofPattern("yyyyMMdd");
outputFileName = outputFileName.replace("{date}", LocalDate.now().format(dateFormatter));
DateTimeFormatter timeFormatter = DateTimeFormatter.ofPattern("HHmmss");
outputFileName = outputFileName.replace("{time}", LocalTime.now().format(timeFormatter));
outputFileName += "." + extension;
// {filename} {folder} {date} {tmime} {pipeline}
String outputDir = config.getOutputDir();
// Check if the environment variable 'automatedOutputFolder' is set
String outputFolder = System.getenv("automatedOutputFolder");
if (outputFolder == null || outputFolder.isEmpty()) {
// If the environment variable is not set, use the default value
outputFolder = finishedFoldersDir;
}
logger.info("outputDir 0={}", outputDir);
// Replace the placeholders in the outputDir string
outputDir = outputDir.replace("{outputFolder}", outputFolder);
outputDir = outputDir.replace("{folderName}", dir.toString());
logger.info("outputDir 1={}", outputDir);
outputDir = outputDir.replace("\\watchedFolders", "");
outputDir = outputDir.replace("//watchedFolders", "");
outputDir = outputDir.replace("\\\\watchedFolders", "");
outputDir = outputDir.replace("/watchedFolders", "");
Path outputPath;
logger.info("outputDir 2={}", outputDir);
if (Paths.get(outputDir).isAbsolute()) {
// If it's an absolute path, use it directly
outputPath = Paths.get(outputDir);
} else {
// If it's a relative path, make it relative to the current working directory
outputPath = Paths.get(".", outputDir);
}
logger.info("outputPath={}", outputPath);
if (!Files.exists(outputPath)) {
try {
Files.createDirectories(outputPath);
logger.info("Created directory: {}", outputPath);
} catch (IOException e) {
logger.error("Error creating directory: {}", outputPath, e);
return;
}
}
logger.info("outputPath {}", outputPath);
logger.info("outputPath.resolve(outputFileName).toString() {}", outputPath.resolve(outputFileName).toString());
File newFile = new File(outputPath.resolve(outputFileName).toString());
OutputStream os = new FileOutputStream(newFile);
os.write(((ByteArrayResource)resource).getByteArray());
os.close();
logger.info("made {}", outputPath.resolve(outputFileName));
}
// If successful, delete the original files
for (File file : filesToProcess) {
Files.deleteIfExists(processingDir.resolve(file.getName()));
}
} catch (Exception e) {
// If an error occurs, move the original files back
for (File file : filesToProcess) {
Files.move(processingDir.resolve(file.getName()), file.toPath());
}
throw e;
}
}
}
}
List<Resource> processFiles(List<Resource> outputFiles, String jsonString) throws Exception {
ObjectMapper mapper = new ObjectMapper();
JsonNode jsonNode = mapper.readTree(jsonString);
JsonNode pipelineNode = jsonNode.get("pipeline");
logger.info("Running pipelineNode: {}", pipelineNode);
ByteArrayOutputStream logStream = new ByteArrayOutputStream();
PrintStream logPrintStream = new PrintStream(logStream);
boolean hasErrors = false;
for (JsonNode operationNode : pipelineNode) {
String operation = operationNode.get("operation").asText();
logger.info("Running operation: {}", operation);
JsonNode parametersNode = operationNode.get("parameters");
String inputFileExtension = "";
if (operationNode.has("inputFileType")) {
inputFileExtension = operationNode.get("inputFileType").asText();
} else {
inputFileExtension = ".pdf";
}
List<Resource> newOutputFiles = new ArrayList<>();
boolean hasInputFileType = false;
for (Resource file : outputFiles) {
if (file.getFilename().endsWith(inputFileExtension)) {
hasInputFileType = true;
MultiValueMap<String, Object> body = new LinkedMultiValueMap<>();
body.add("fileInput", file);
Iterator<Map.Entry<String, JsonNode>> parameters = parametersNode.fields();
while (parameters.hasNext()) {
Map.Entry<String, JsonNode> parameter = parameters.next();
body.add(parameter.getKey(), parameter.getValue().asText());
}
HttpHeaders headers = new HttpHeaders();
headers.setContentType(MediaType.MULTIPART_FORM_DATA);
HttpEntity<MultiValueMap<String, Object>> entity = new HttpEntity<>(body, headers);
RestTemplate restTemplate = new RestTemplate();
String url = "http://localhost:8080/" + operation;
ResponseEntity<byte[]> response = restTemplate.exchange(url, HttpMethod.POST, entity, byte[].class);
// If the operation is filter and the response body is null or empty, skip this file
if (operation.startsWith("filter-") && (response.getBody() == null || response.getBody().length == 0)) {
logger.info("Skipping file due to failing {}", operation);
continue;
}
if (!response.getStatusCode().equals(HttpStatus.OK)) {
logPrintStream.println("Error: " + response.getBody());
hasErrors = true;
continue;
}
// Define filename
String filename;
if ("auto-rename".equals(operation)) {
// If the operation is "auto-rename", generate a new filename.
// This is a simple example of generating a filename using current timestamp.
// Modify as per your needs.
filename = "file_" + System.currentTimeMillis();
} else {
// Otherwise, keep the original filename.
filename = file.getFilename();
}
// Check if the response body is a zip file
if (isZip(response.getBody())) {
// Unzip the file and add all the files to the new output files
newOutputFiles.addAll(unzip(response.getBody()));
} else {
Resource outputResource = new ByteArrayResource(response.getBody()) {
@Override
public String getFilename() {
return filename;
}
};
newOutputFiles.add(outputResource);
}
}
if (!hasInputFileType) {
logPrintStream.println(
"No files with extension " + inputFileExtension + " found for operation " + operation);
hasErrors = true;
}
outputFiles = newOutputFiles;
}
logPrintStream.close();
}
if (hasErrors) {
logger.error("Errors occurred during processing. Log: {}", logStream.toString());
}
return outputFiles;
}
List<Resource> handleFiles(File[] files, String jsonString) throws Exception {
if(files == null || files.length == 0) {
logger.info("No files");
return null;
}
logger.info("Handling files: {} files, with JSON string of length: {}", files.length, jsonString.length());
ObjectMapper mapper = new ObjectMapper();
JsonNode jsonNode = mapper.readTree(jsonString);
JsonNode pipelineNode = jsonNode.get("pipeline");
boolean hasErrors = false;
List<Resource> outputFiles = new ArrayList<>();
for (File file : files) {
Path path = Paths.get(file.getAbsolutePath());
System.out.println("Reading file: " + path); // debug statement
if (Files.exists(path)) {
Resource fileResource = new ByteArrayResource(Files.readAllBytes(path)) {
@Override
public String getFilename() {
return file.getName();
}
};
outputFiles.add(fileResource);
} else {
System.out.println("File not found: " + path); // debug statement
}
}
logger.info("Files successfully loaded. Starting processing...");
return processFiles(outputFiles, jsonString);
}
List<Resource> handleFiles(MultipartFile[] files, String jsonString) throws Exception {
if(files == null || files.length == 0) {
logger.info("No files");
return null;
}
logger.info("Handling files: {} files, with JSON string of length: {}", files.length, jsonString.length());
ObjectMapper mapper = new ObjectMapper();
JsonNode jsonNode = mapper.readTree(jsonString);
JsonNode pipelineNode = jsonNode.get("pipeline");
boolean hasErrors = false;
List<Resource> outputFiles = new ArrayList<>();
for (MultipartFile file : files) {
Resource fileResource = new ByteArrayResource(file.getBytes()) {
@Override
public String getFilename() {
return file.getOriginalFilename();
}
};
outputFiles.add(fileResource);
}
logger.info("Files successfully loaded. Starting processing...");
return processFiles(outputFiles, jsonString);
}
@PostMapping("/handleData")
public ResponseEntity<byte[]> handleData(@RequestPart("fileInput") MultipartFile[] files,
@RequestParam("json") String jsonString) {
logger.info("Received POST request to /handleData with {} files", files.length);
try {
List<Resource> outputFiles = handleFiles(files, jsonString);
if (outputFiles != null && outputFiles.size() == 1) {
// If there is only one file, return it directly
Resource singleFile = outputFiles.get(0);
InputStream is = singleFile.getInputStream();
byte[] bytes = new byte[(int) singleFile.contentLength()];
is.read(bytes);
is.close();
logger.info("Returning single file response...");
return WebResponseUtils.bytesToWebResponse(bytes, singleFile.getFilename(),
MediaType.APPLICATION_OCTET_STREAM);
} else if (outputFiles == null) {
return null;
}
// Create a ByteArrayOutputStream to hold the zip
ByteArrayOutputStream baos = new ByteArrayOutputStream();
ZipOutputStream zipOut = new ZipOutputStream(baos);
// Loop through each file and add it to the zip
for (Resource file : outputFiles) {
ZipEntry zipEntry = new ZipEntry(file.getFilename());
zipOut.putNextEntry(zipEntry);
// Read the file into a byte array
InputStream is = file.getInputStream();
byte[] bytes = new byte[(int) file.contentLength()];
is.read(bytes);
// Write the bytes of the file to the zip
zipOut.write(bytes, 0, bytes.length);
zipOut.closeEntry();
is.close();
}
zipOut.close();
logger.info("Returning zipped file response...");
return WebResponseUtils.boasToWebResponse(baos, "output.zip", MediaType.APPLICATION_OCTET_STREAM);
} catch (Exception e) {
logger.error("Error handling data: ", e);
return null;
}
}
private boolean isZip(byte[] data) {
if (data == null || data.length < 4) {
return false;
}
// Check the first four bytes of the data against the standard zip magic number
return data[0] == 0x50 && data[1] == 0x4B && data[2] == 0x03 && data[3] == 0x04;
}
private List<Resource> unzip(byte[] data) throws IOException {
logger.info("Unzipping data of length: {}", data.length);
List<Resource> unzippedFiles = new ArrayList<>();
try (ByteArrayInputStream bais = new ByteArrayInputStream(data);
ZipInputStream zis = new ZipInputStream(bais)) {
ZipEntry entry;
while ((entry = zis.getNextEntry()) != null) {
ByteArrayOutputStream baos = new ByteArrayOutputStream();
byte[] buffer = new byte[1024];
int count;
while ((count = zis.read(buffer)) != -1) {
baos.write(buffer, 0, count);
}
final String filename = entry.getName();
Resource fileResource = new ByteArrayResource(baos.toByteArray()) {
@Override
public String getFilename() {
return filename;
}
};
// If the unzipped file is a zip file, unzip it
if (isZip(baos.toByteArray())) {
logger.info("File {} is a zip file. Unzipping...", filename);
unzippedFiles.addAll(unzip(baos.toByteArray()));
} else {
unzippedFiles.add(fileResource);
}
}
}
logger.info("Unzipping completed. {} files were unzipped.", unzippedFiles.size());
return unzippedFiles;
}
}

View File

@@ -1,7 +1,6 @@
package stirling.software.SPDF.controller.api.security; package stirling.software.SPDF.controller.api.security;
import java.io.ByteArrayInputStream; import java.io.ByteArrayInputStream;
import io.swagger.v3.oas.annotations.media.Schema;
import java.io.ByteArrayOutputStream; import java.io.ByteArrayOutputStream;
import java.io.IOException; import java.io.IOException;
import java.io.InputStream; import java.io.InputStream;
@@ -51,8 +50,11 @@ import com.itextpdf.signatures.SignatureUtil;
import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.Parameter; import io.swagger.v3.oas.annotations.Parameter;
import stirling.software.SPDF.utils.PdfUtils; import io.swagger.v3.oas.annotations.media.Schema;
import io.swagger.v3.oas.annotations.tags.Tag;
import stirling.software.SPDF.utils.WebResponseUtils;
@RestController @RestController
@Tag(name = "Security", description = "Security APIs")
public class CertSignController { public class CertSignController {
private static final Logger logger = LoggerFactory.getLogger(CertSignController.class); private static final Logger logger = LoggerFactory.getLogger(CertSignController.class);
@@ -63,7 +65,7 @@ public class CertSignController {
@PostMapping(consumes = "multipart/form-data", value = "/cert-sign") @PostMapping(consumes = "multipart/form-data", value = "/cert-sign")
@Operation(summary = "Sign PDF with a Digital Certificate", @Operation(summary = "Sign PDF with a Digital Certificate",
description = "This endpoint accepts a PDF file, a digital certificate and related information to sign the PDF. It then returns the digitally signed PDF file.") description = "This endpoint accepts a PDF file, a digital certificate and related information to sign the PDF. It then returns the digitally signed PDF file. Input:PDF Output:PDF Type:MF-SISO")
public ResponseEntity<byte[]> signPDF( public ResponseEntity<byte[]> signPDF(
@RequestPart(required = true, value = "fileInput") @RequestPart(required = true, value = "fileInput")
@Parameter(description = "The input PDF file to be signed") @Parameter(description = "The input PDF file to be signed")
@@ -177,8 +179,17 @@ public class CertSignController {
String signingDate = new SimpleDateFormat("yyyy.MM.dd HH:mm:ss z").format(new Date()); String signingDate = new SimpleDateFormat("yyyy.MM.dd HH:mm:ss z").format(new Date());
// Prepare the text for the digital signature // Prepare the text for the digital signature
String layer2Text = String.format("Digitally signed by: %s\nDate: %s\nReason: %s\nLocation: %s", name, signingDate, reason, location); StringBuilder layer2TextBuilder = new StringBuilder(String.format("Digitally signed by: %s\nDate: %s",
name != null ? name : "Unknown", signingDate));
if (reason != null && !reason.isEmpty()) {
layer2TextBuilder.append("\nReason: ").append(reason);
}
if (location != null && !location.isEmpty()) {
layer2TextBuilder.append("\nLocation: ").append(location);
}
String layer2Text = layer2TextBuilder.toString();
// Get the PDF font and measure the width and height of the text block // Get the PDF font and measure the width and height of the text block
PdfFont font = PdfFontFactory.createFont(StandardFonts.HELVETICA_BOLD); PdfFont font = PdfFontFactory.createFont(StandardFonts.HELVETICA_BOLD);
float textWidth = Arrays.stream(layer2Text.split("\n")) float textWidth = Arrays.stream(layer2Text.split("\n"))
@@ -206,12 +217,12 @@ public class CertSignController {
// Configure the appearance of the digital signature // Configure the appearance of the digital signature
appearance.setPageRect(rect) appearance.setPageRect(rect)
.setContact(name) .setContact(name != null ? name : "")
.setPageNumber(pageNumber) .setPageNumber(pageNumber)
.setReason(reason) .setReason(reason != null ? reason : "")
.setLocation(location) .setLocation(location != null ? location : "")
.setReuseAppearance(false) .setReuseAppearance(false)
.setLayer2Text(layer2Text); .setLayer2Text(layer2Text.toString());
signer.setFieldName("sig"); signer.setFieldName("sig");
} else { } else {
@@ -230,7 +241,7 @@ public class CertSignController {
System.out.println("Signed PDF size: " + signedPdf.size()); System.out.println("Signed PDF size: " + signedPdf.size());
System.out.println("PDF signed = " + isPdfSigned(signedPdf.toByteArray())); System.out.println("PDF signed = " + isPdfSigned(signedPdf.toByteArray()));
return PdfUtils.bytesToWebResponse(signedPdf.toByteArray(), "example.pdf"); return WebResponseUtils.bytesToWebResponse(signedPdf.toByteArray(), "example.pdf");
} }
public boolean isPdfSigned(byte[] pdfData) throws IOException { public boolean isPdfSigned(byte[] pdfData) throws IOException {

View File

@@ -17,8 +17,10 @@ import org.springframework.web.multipart.MultipartFile;
import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.Parameter; import io.swagger.v3.oas.annotations.Parameter;
import io.swagger.v3.oas.annotations.media.Schema; import io.swagger.v3.oas.annotations.media.Schema;
import stirling.software.SPDF.utils.PdfUtils; import io.swagger.v3.oas.annotations.tags.Tag;
import stirling.software.SPDF.utils.WebResponseUtils;
@RestController @RestController
@Tag(name = "Security", description = "Security APIs")
public class PasswordController { public class PasswordController {
private static final Logger logger = LoggerFactory.getLogger(PasswordController.class); private static final Logger logger = LoggerFactory.getLogger(PasswordController.class);
@@ -27,7 +29,7 @@ public class PasswordController {
@PostMapping(consumes = "multipart/form-data", value = "/remove-password") @PostMapping(consumes = "multipart/form-data", value = "/remove-password")
@Operation( @Operation(
summary = "Remove password from a PDF file", summary = "Remove password from a PDF file",
description = "This endpoint removes the password from a protected PDF file. Users need to provide the existing password." description = "This endpoint removes the password from a protected PDF file. Users need to provide the existing password. Input:PDF Output:PDF Type:SISO"
) )
public ResponseEntity<byte[]> removePassword( public ResponseEntity<byte[]> removePassword(
@RequestPart(required = true, value = "fileInput") @RequestPart(required = true, value = "fileInput")
@@ -38,20 +40,23 @@ public class PasswordController {
String password) throws IOException { String password) throws IOException {
PDDocument document = PDDocument.load(fileInput.getBytes(), password); PDDocument document = PDDocument.load(fileInput.getBytes(), password);
document.setAllSecurityToBeRemoved(true); document.setAllSecurityToBeRemoved(true);
return PdfUtils.pdfDocToWebResponse(document, fileInput.getOriginalFilename().replaceFirst("[.][^.]+$", "") + "_password_removed.pdf"); return WebResponseUtils.pdfDocToWebResponse(document, fileInput.getOriginalFilename().replaceFirst("[.][^.]+$", "") + "_password_removed.pdf");
} }
@PostMapping(consumes = "multipart/form-data", value = "/add-password") @PostMapping(consumes = "multipart/form-data", value = "/add-password")
@Operation( @Operation(
summary = "Add password to a PDF file", summary = "Add password to a PDF file",
description = "This endpoint adds password protection to a PDF file. Users can specify a set of permissions that should be applied to the file." description = "This endpoint adds password protection to a PDF file. Users can specify a set of permissions that should be applied to the file. Input:PDF Output:PDF"
) )
public ResponseEntity<byte[]> addPassword( public ResponseEntity<byte[]> addPassword(
@RequestPart(required = true, value = "fileInput") @RequestPart(required = true, value = "fileInput")
@Parameter(description = "The input PDF file to which the password should be added", required = true) @Parameter(description = "The input PDF file to which the password should be added", required = true)
MultipartFile fileInput, MultipartFile fileInput,
@RequestParam(defaultValue = "", name = "ownerPassword")
@Parameter(description = "The owner password to be added to the PDF file (Restricts what can be done with the document once it is opened)")
String ownerPassword,
@RequestParam(defaultValue = "", name = "password") @RequestParam(defaultValue = "", name = "password")
@Parameter(description = "The password to be added to the PDF file") @Parameter(description = "The password to be added to the PDF file (Restricts the opening of the document itself.)")
String password, String password,
@RequestParam(defaultValue = "128", name = "keyLength") @RequestParam(defaultValue = "128", name = "keyLength")
@Parameter(description = "The length of the encryption key", schema = @Schema(allowableValues = {"40", "128", "256"})) @Parameter(description = "The length of the encryption key", schema = @Schema(allowableValues = {"40", "128", "256"}))
@@ -84,7 +89,6 @@ public class PasswordController {
PDDocument document = PDDocument.load(fileInput.getBytes()); PDDocument document = PDDocument.load(fileInput.getBytes());
AccessPermission ap = new AccessPermission(); AccessPermission ap = new AccessPermission();
ap.setCanAssembleDocument(!canAssembleDocument); ap.setCanAssembleDocument(!canAssembleDocument);
ap.setCanExtractContent(!canExtractContent); ap.setCanExtractContent(!canExtractContent);
ap.setCanExtractForAccessibility(!canExtractForAccessibility); ap.setCanExtractForAccessibility(!canExtractForAccessibility);
@@ -93,14 +97,17 @@ public class PasswordController {
ap.setCanModifyAnnotations(!canModifyAnnotations); ap.setCanModifyAnnotations(!canModifyAnnotations);
ap.setCanPrint(!canPrint); ap.setCanPrint(!canPrint);
ap.setCanPrintFaithful(!canPrintFaithful); ap.setCanPrintFaithful(!canPrintFaithful);
StandardProtectionPolicy spp = new StandardProtectionPolicy(password, password, ap); StandardProtectionPolicy spp = new StandardProtectionPolicy(ownerPassword, password, ap);
spp.setEncryptionKeyLength(keyLength); spp.setEncryptionKeyLength(keyLength);
spp.setPermissions(ap); spp.setPermissions(ap);
document.protect(spp); document.protect(spp);
return PdfUtils.pdfDocToWebResponse(document, fileInput.getOriginalFilename().replaceFirst("[.][^.]+$", "") + "_passworded.pdf"); return WebResponseUtils.pdfDocToWebResponse(document, fileInput.getOriginalFilename().replaceFirst("[.][^.]+$", "") + "_passworded.pdf");
} }

View File

@@ -0,0 +1,140 @@
package stirling.software.SPDF.controller.api.security;
import org.apache.pdfbox.cos.COSName;
import org.apache.pdfbox.pdmodel.PDDocument;
import org.apache.pdfbox.pdmodel.PDPage;
import org.apache.pdfbox.pdmodel.PDResources;
import org.apache.pdfbox.pdmodel.PDPageTree;
import org.apache.pdfbox.pdmodel.common.PDMetadata;
import org.apache.pdfbox.pdmodel.common.PDStream;
import org.apache.pdfbox.pdmodel.interactive.action.*;
import org.apache.pdfbox.pdmodel.interactive.annotation.PDAnnotation;
import org.apache.pdfbox.pdmodel.interactive.annotation.PDAnnotationLink;
import org.apache.pdfbox.pdmodel.interactive.annotation.PDAnnotationWidget;
import org.apache.pdfbox.pdmodel.interactive.form.PDAcroForm;
import org.apache.pdfbox.pdmodel.interactive.form.PDField;
import org.apache.pdfbox.pdmodel.interactive.form.PDNonTerminalField;
import org.apache.pdfbox.pdmodel.interactive.form.PDTerminalField;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.Parameter;
import io.swagger.v3.oas.annotations.media.Schema;
import stirling.software.SPDF.utils.WebResponseUtils;
import java.io.IOException;
import java.io.InputStream;
@RestController
public class SanitizeController {
@PostMapping(consumes = "multipart/form-data", value = "/sanitize-pdf")
@Operation(summary = "Sanitize a PDF file",
description = "This endpoint processes a PDF file and removes specific elements based on the provided options. Input:PDF Output:PDF Type:SISO")
public ResponseEntity<byte[]> sanitizePDF(
@RequestPart(required = true, value = "fileInput")
@Parameter(description = "The input PDF file to be sanitized")
MultipartFile inputFile,
@RequestParam(name = "removeJavaScript", required = false, defaultValue = "true")
@Parameter(description = "Remove JavaScript actions from the PDF if set to true")
Boolean removeJavaScript,
@RequestParam(name = "removeEmbeddedFiles", required = false, defaultValue = "true")
@Parameter(description = "Remove embedded files from the PDF if set to true")
Boolean removeEmbeddedFiles,
@RequestParam(name = "removeMetadata", required = false, defaultValue = "true")
@Parameter(description = "Remove metadata from the PDF if set to true")
Boolean removeMetadata,
@RequestParam(name = "removeLinks", required = false, defaultValue = "true")
@Parameter(description = "Remove links from the PDF if set to true")
Boolean removeLinks,
@RequestParam(name = "removeFonts", required = false, defaultValue = "true")
@Parameter(description = "Remove fonts from the PDF if set to true")
Boolean removeFonts) throws IOException {
try (PDDocument document = PDDocument.load(inputFile.getInputStream())) {
if (removeJavaScript) {
sanitizeJavaScript(document);
}
if (removeEmbeddedFiles) {
sanitizeEmbeddedFiles(document);
}
if (removeMetadata) {
sanitizeMetadata(document);
}
if (removeLinks) {
sanitizeLinks(document);
}
if (removeFonts) {
sanitizeFonts(document);
}
return WebResponseUtils.pdfDocToWebResponse(document, inputFile.getOriginalFilename().replaceFirst("[.][^.]+$", "") + "_sanitized.pdf");
}
}
private void sanitizeJavaScript(PDDocument document) throws IOException {
for (PDPage page : document.getPages()) {
for (PDAnnotation annotation : page.getAnnotations()) {
if (annotation instanceof PDAnnotationWidget) {
PDAnnotationWidget widget = (PDAnnotationWidget) annotation;
PDAction action = widget.getAction();
if (action instanceof PDActionJavaScript) {
widget.setAction(null);
}
}
}
PDAcroForm acroForm = document.getDocumentCatalog().getAcroForm();
if (acroForm != null) {
for (PDField field : acroForm.getFields()) {
if (field.getActions().getF() instanceof PDActionJavaScript) {
field.getActions().setF(null);
}
}
}
}
}
private void sanitizeEmbeddedFiles(PDDocument document) {
PDPageTree allPages = document.getPages();
for (PDPage page : allPages) {
PDResources res = page.getResources();
// Remove embedded files from the PDF
res.getCOSObject().removeItem(COSName.getPDFName("EmbeddedFiles"));
}
}
private void sanitizeMetadata(PDDocument document) {
PDMetadata metadata = document.getDocumentCatalog().getMetadata();
if (metadata != null) {
document.getDocumentCatalog().setMetadata(null);
}
}
private void sanitizeLinks(PDDocument document) throws IOException {
for (PDPage page : document.getPages()) {
for (PDAnnotation annotation : page.getAnnotations()) {
if (annotation instanceof PDAnnotationLink) {
PDAction action = ((PDAnnotationLink) annotation).getAction();
if (action instanceof PDActionLaunch || action instanceof PDActionURI) {
((PDAnnotationLink) annotation).setAction(null);
}
}
}
}
}
private void sanitizeFonts(PDDocument document) {
for (PDPage page : document.getPages()) {
page.getResources().getCOSObject().removeItem(COSName.getPDFName("Font"));
}
}
}

View File

@@ -1,15 +1,28 @@
package stirling.software.SPDF.controller.api.security; package stirling.software.SPDF.controller.api.security;
import java.awt.Color; import java.awt.Color;
import java.awt.Graphics2D;
import java.awt.RenderingHints;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException; import java.io.IOException;
import java.io.InputStream;
import javax.imageio.ImageIO;
import org.apache.commons.io.IOUtils;
import org.apache.pdfbox.pdmodel.PDDocument; import org.apache.pdfbox.pdmodel.PDDocument;
import org.apache.pdfbox.pdmodel.PDPage; import org.apache.pdfbox.pdmodel.PDPage;
import org.apache.pdfbox.pdmodel.PDPageContentStream; import org.apache.pdfbox.pdmodel.PDPageContentStream;
import org.apache.pdfbox.pdmodel.font.PDFont; import org.apache.pdfbox.pdmodel.font.PDFont;
import org.apache.pdfbox.pdmodel.font.PDType0Font;
import org.apache.pdfbox.pdmodel.font.PDType1Font; import org.apache.pdfbox.pdmodel.font.PDType1Font;
import org.apache.pdfbox.pdmodel.graphics.image.LosslessFactory;
import org.apache.pdfbox.pdmodel.graphics.image.PDImageXObject;
import org.apache.pdfbox.pdmodel.graphics.state.PDExtendedGraphicsState; import org.apache.pdfbox.pdmodel.graphics.state.PDExtendedGraphicsState;
import org.apache.pdfbox.util.Matrix; import org.apache.pdfbox.util.Matrix;
import org.springframework.core.io.ClassPathResource;
import org.springframework.http.ResponseEntity; import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.RequestParam;
@@ -19,36 +32,32 @@ import org.springframework.web.multipart.MultipartFile;
import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.Parameter; import io.swagger.v3.oas.annotations.Parameter;
import stirling.software.SPDF.utils.PdfUtils; import io.swagger.v3.oas.annotations.tags.Tag;
import stirling.software.SPDF.utils.WebResponseUtils;
import io.swagger.v3.oas.annotations.media.Schema;
@RestController @RestController
@Tag(name = "Security", description = "Security APIs")
public class WatermarkController { public class WatermarkController {
@PostMapping(consumes = "multipart/form-data", value = "/add-watermark") @PostMapping(consumes = "multipart/form-data", value = "/add-watermark")
@Operation(summary = "Add watermark to a PDF file", @Operation(summary = "Add watermark to a PDF file", description = "This endpoint adds a watermark to a given PDF file. Users can specify the watermark type (text or image), rotation, opacity, width spacer, and height spacer. Input:PDF Output:PDF Type:SISO")
description = "This endpoint adds a watermark to a given PDF file. Users can specify the watermark text, font size, rotation, opacity, width spacer, and height spacer.")
public ResponseEntity<byte[]> addWatermark( public ResponseEntity<byte[]> addWatermark(
@RequestPart(required = true, value = "fileInput") @RequestPart(required = true, value = "fileInput") @Parameter(description = "The input PDF file to add a watermark") MultipartFile pdfFile,
@Parameter(description = "The input PDF file to add a watermark") @RequestPart(required = true) @Parameter(description = "The watermark type (text or image)") String watermarkType,
MultipartFile pdfFile, @RequestPart(required = false) @Parameter(description = "The watermark text") String watermarkText,
@RequestParam("watermarkText") @RequestPart(required = false) @Parameter(description = "The watermark image") MultipartFile watermarkImage,
@Parameter(description = "The watermark text to add to the PDF file")
String watermarkText, @RequestParam(defaultValue = "roman", name = "alphabet") @Parameter(description = "The selected alphabet",
@RequestParam(defaultValue = "30", name = "fontSize") schema = @Schema(type = "string",
@Parameter(description = "The font size of the watermark text", example = "30") allowableValues = {"roman","arabic","japanese","korean","chinese"},
float fontSize, defaultValue = "roman")) String alphabet,
@RequestParam(defaultValue = "0", name = "rotation") @RequestParam(defaultValue = "30", name = "fontSize") @Parameter(description = "The font size of the watermark text", example = "30") float fontSize,
@Parameter(description = "The rotation of the watermark text in degrees", example = "0") @RequestParam(defaultValue = "0", name = "rotation") @Parameter(description = "The rotation of the watermark in degrees", example = "0") float rotation,
float rotation, @RequestParam(defaultValue = "0.5", name = "opacity") @Parameter(description = "The opacity of the watermark (0.0 - 1.0)", example = "0.5") float opacity,
@RequestParam(defaultValue = "0.5", name = "opacity") @RequestParam(defaultValue = "50", name = "widthSpacer") @Parameter(description = "The width spacer between watermark elements", example = "50") int widthSpacer,
@Parameter(description = "The opacity of the watermark text (0.0 - 1.0)", example = "0.5") @RequestParam(defaultValue = "50", name = "heightSpacer") @Parameter(description = "The height spacer between watermark elements", example = "50") int heightSpacer)
float opacity, throws IOException, Exception {
@RequestParam(defaultValue = "50", name = "widthSpacer")
@Parameter(description = "The width spacer between watermark texts", example = "50")
int widthSpacer,
@RequestParam(defaultValue = "50", name = "heightSpacer")
@Parameter(description = "The height spacer between watermark texts", example = "50")
int heightSpacer) throws IOException {
// Load the input PDF // Load the input PDF
PDDocument document = PDDocument.load(pdfFile.getInputStream()); PDDocument document = PDDocument.load(pdfFile.getInputStream());
@@ -57,41 +66,133 @@ public class WatermarkController {
for (PDPage page : document.getPages()) { for (PDPage page : document.getPages()) {
// Get the page's content stream // Get the page's content stream
PDPageContentStream contentStream = new PDPageContentStream(document, page, PDPageContentStream.AppendMode.APPEND, true); PDPageContentStream contentStream = new PDPageContentStream(document, page,
PDPageContentStream.AppendMode.APPEND, true);
// Set transparency // Set transparency
PDExtendedGraphicsState graphicsState = new PDExtendedGraphicsState(); PDExtendedGraphicsState graphicsState = new PDExtendedGraphicsState();
graphicsState.setNonStrokingAlphaConstant(opacity); graphicsState.setNonStrokingAlphaConstant(opacity);
contentStream.setGraphicsStateParameters(graphicsState); contentStream.setGraphicsStateParameters(graphicsState);
// Set font of watermark if (watermarkType.equalsIgnoreCase("text")) {
PDFont font = PDType1Font.HELVETICA_BOLD; addTextWatermark(contentStream, watermarkText, document, page, rotation, widthSpacer, heightSpacer,
contentStream.beginText(); fontSize, alphabet);
contentStream.setFont(font, fontSize); } else if (watermarkType.equalsIgnoreCase("image")) {
contentStream.setNonStrokingColor(Color.LIGHT_GRAY); addImageWatermark(contentStream, watermarkImage, document, page, rotation, widthSpacer, heightSpacer,
fontSize);
// Set size and location of watermark
float pageWidth = page.getMediaBox().getWidth();
float pageHeight = page.getMediaBox().getHeight();
float watermarkWidth = widthSpacer + font.getStringWidth(watermarkText) * fontSize / 1000;
float watermarkHeight = heightSpacer + fontSize;
int watermarkRows = (int) (pageHeight / watermarkHeight + 1);
int watermarkCols = (int) (pageWidth / watermarkWidth + 1);
// Add the watermark text
for (int i = 0; i < watermarkRows; i++) {
for (int j = 0; j < watermarkCols; j++) {
contentStream.setTextMatrix(Matrix.getRotateInstance((float) Math.toRadians(rotation), j * watermarkWidth, i * watermarkHeight));
contentStream.showTextWithPositioning(new Object[] { watermarkText });
} }
}
contentStream.endText();
// Close the content stream // Close the content stream
contentStream.close(); contentStream.close();
} }
return PdfUtils.pdfDocToWebResponse(document, pdfFile.getOriginalFilename().replaceFirst("[.][^.]+$", "") + "_watermarked.pdf");
return WebResponseUtils.pdfDocToWebResponse(document,
pdfFile.getOriginalFilename().replaceFirst("[.][^.]+$", "") + "_watermarked.pdf");
}
private void addTextWatermark(PDPageContentStream contentStream, String watermarkText, PDDocument document,
PDPage page, float rotation, int widthSpacer, int heightSpacer, float fontSize, String alphabet) throws IOException {
String resourceDir = "";
PDFont font = PDType1Font.HELVETICA_BOLD;
switch (alphabet) {
case "arabic":
resourceDir = "static/fonts/NotoSansArabic-Regular.ttf";
break;
case "japanese":
resourceDir = "static/fonts/Meiryo.ttf";
break;
case "korean":
resourceDir = "static/fonts/malgun.ttf";
break;
case "chinese":
resourceDir = "static/fonts/SimSun.ttf";
break;
case "roman":
default:
resourceDir = "static/fonts/NotoSans-Regular.ttf";
break;
}
if(!resourceDir.equals("")) {
ClassPathResource classPathResource = new ClassPathResource(resourceDir);
String fileExtension = resourceDir.substring(resourceDir.lastIndexOf("."));
File tempFile = File.createTempFile("NotoSansFont", fileExtension);
try (InputStream is = classPathResource.getInputStream(); FileOutputStream os = new FileOutputStream(tempFile)) {
IOUtils.copy(is, os);
}
font = PDType0Font.load(document, tempFile);
tempFile.deleteOnExit();
}
contentStream.setFont(font, fontSize);
contentStream.setNonStrokingColor(Color.LIGHT_GRAY);
// Set size and location of text watermark
float watermarkWidth = widthSpacer + font.getStringWidth(watermarkText) * fontSize / 1000;
float watermarkHeight = heightSpacer + fontSize;
float pageWidth = page.getMediaBox().getWidth();
float pageHeight = page.getMediaBox().getHeight();
int watermarkRows = (int) (pageHeight / watermarkHeight + 1);
int watermarkCols = (int) (pageWidth / watermarkWidth + 1);
// Add the text watermark
for (int i = 0; i < watermarkRows; i++) {
for (int j = 0; j < watermarkCols; j++) {
contentStream.beginText();
contentStream.setTextMatrix(Matrix.getRotateInstance((float) Math.toRadians(rotation),
j * watermarkWidth, i * watermarkHeight));
contentStream.showText(watermarkText);
contentStream.endText();
}
}
}
private void addImageWatermark(PDPageContentStream contentStream, MultipartFile watermarkImage, PDDocument document, PDPage page, float rotation,
int widthSpacer, int heightSpacer, float fontSize) throws IOException {
// Load the watermark image
BufferedImage image = ImageIO.read(watermarkImage.getInputStream());
// Compute width based on original aspect ratio
float aspectRatio = (float) image.getWidth() / (float) image.getHeight();
// Desired physical height (in PDF points)
float desiredPhysicalHeight = fontSize ;
// Desired physical width based on the aspect ratio
float desiredPhysicalWidth = desiredPhysicalHeight * aspectRatio;
// Convert the BufferedImage to PDImageXObject
PDImageXObject xobject = LosslessFactory.createFromImage(document, image);
// Calculate the number of rows and columns for watermarks
float pageWidth = page.getMediaBox().getWidth();
float pageHeight = page.getMediaBox().getHeight();
int watermarkRows = (int) ((pageHeight + heightSpacer) / (desiredPhysicalHeight + heightSpacer));
int watermarkCols = (int) ((pageWidth + widthSpacer) / (desiredPhysicalWidth + widthSpacer));
for (int i = 0; i < watermarkRows; i++) {
for (int j = 0; j < watermarkCols; j++) {
float x = j * (desiredPhysicalWidth + widthSpacer);
float y = i * (desiredPhysicalHeight + heightSpacer);
// Save the graphics state
contentStream.saveGraphicsState();
// Create rotation matrix and rotate
contentStream.transform(Matrix.getTranslateInstance(x + desiredPhysicalWidth / 2, y + desiredPhysicalHeight / 2));
contentStream.transform(Matrix.getRotateInstance(Math.toRadians(rotation), 0, 0));
contentStream.transform(Matrix.getTranslateInstance(-desiredPhysicalWidth / 2, -desiredPhysicalHeight / 2));
// Draw the image and restore the graphics state
contentStream.drawImage(xobject, 0, 0, desiredPhysicalWidth, desiredPhysicalHeight);
contentStream.restoreGraphicsState();
}
}
} }
} }

View File

@@ -6,8 +6,10 @@ import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.servlet.ModelAndView; import org.springframework.web.servlet.ModelAndView;
import io.swagger.v3.oas.annotations.Hidden; import io.swagger.v3.oas.annotations.Hidden;
import io.swagger.v3.oas.annotations.tags.Tag;
@Controller @Controller
@Tag(name = "Convert", description = "Convert APIs")
public class ConverterWebController { public class ConverterWebController {
@GetMapping("/img-to-pdf") @GetMapping("/img-to-pdf")
@@ -17,6 +19,20 @@ public class ConverterWebController {
return "convert/img-to-pdf"; return "convert/img-to-pdf";
} }
@GetMapping("/html-to-pdf")
@Hidden
public String convertHTMLToPdfForm(Model model) {
model.addAttribute("currentPage", "html-to-pdf");
return "convert/html-to-pdf";
}
@GetMapping("/url-to-pdf")
@Hidden
public String convertURLToPdfForm(Model model) {
model.addAttribute("currentPage", "url-to-pdf");
return "convert/url-to-pdf";
}
@GetMapping("/pdf-to-img") @GetMapping("/pdf-to-img")
@Hidden @Hidden

View File

@@ -1,27 +1,79 @@
package stirling.software.SPDF.controller.web; package stirling.software.SPDF.controller.web;
import java.io.IOException;
import java.nio.charset.StandardCharsets;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
import java.util.stream.Stream;
import org.springframework.http.MediaType; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.core.io.Resource;
import org.springframework.core.io.ResourceLoader;
import org.springframework.core.io.support.ResourcePatternUtils;
import org.springframework.stereotype.Controller; import org.springframework.stereotype.Controller;
import org.springframework.ui.Model; import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import com.fasterxml.jackson.databind.ObjectMapper;
import io.swagger.v3.oas.annotations.Hidden; import io.swagger.v3.oas.annotations.Hidden;
import io.swagger.v3.oas.annotations.tags.Tag;
@Controller @Controller
@Tag(name = "General", description = "General APIs")
public class GeneralWebController { public class GeneralWebController {
@GetMapping("/pipeline")
@Hidden
public String pipelineForm(Model model) {
model.addAttribute("currentPage", "pipeline");
List<String> pipelineConfigs = new ArrayList<>();
try (Stream<Path> paths = Files.walk(Paths.get("./pipeline/defaultWebUIConfigs/"))) {
List<Path> jsonFiles = paths
.filter(Files::isRegularFile)
.filter(p -> p.toString().endsWith(".json"))
.collect(Collectors.toList());
for (Path jsonFile : jsonFiles) {
String content = Files.readString(jsonFile, StandardCharsets.UTF_8);
pipelineConfigs.add(content);
}
List<Map<String, String>> pipelineConfigsWithNames = new ArrayList<>();
for (String config : pipelineConfigs) {
Map<String, Object> jsonContent = new ObjectMapper().readValue(config, Map.class);
String name = (String) jsonContent.get("name");
Map<String, String> configWithName = new HashMap<>();
configWithName.put("json", config);
configWithName.put("name", name);
pipelineConfigsWithNames.add(configWithName);
}
model.addAttribute("pipelineConfigsWithNames", pipelineConfigsWithNames);
} catch (IOException e) {
e.printStackTrace();
}
model.addAttribute("pipelineConfigs", pipelineConfigs);
return "pipeline";
}
@GetMapping("/merge-pdfs") @GetMapping("/merge-pdfs")
@Hidden @Hidden
public String mergePdfForm(Model model) { public String mergePdfForm(Model model) {
model.addAttribute("currentPage", "merge-pdfs"); model.addAttribute("currentPage", "merge-pdfs");
return "merge-pdfs"; return "merge-pdfs";
} }
@GetMapping("/about")
@Hidden
public String gameForm(Model model) {
model.addAttribute("currentPage", "about");
return "about";
}
@GetMapping("/multi-tool") @GetMapping("/multi-tool")
@Hidden @Hidden
@@ -30,16 +82,6 @@ public class GeneralWebController {
return "multi-tool"; return "multi-tool";
} }
@GetMapping("/")
public String home(Model model) {
model.addAttribute("currentPage", "home");
return "home";
}
@GetMapping("/home")
public String root(Model model) {
return "redirect:/";
}
@GetMapping("/remove-pages") @GetMapping("/remove-pages")
@Hidden @Hidden
@@ -73,23 +115,47 @@ public class GeneralWebController {
@Hidden @Hidden
public String signForm(Model model) { public String signForm(Model model) {
model.addAttribute("currentPage", "sign"); model.addAttribute("currentPage", "sign");
model.addAttribute("fonts", getFontNames());
return "sign"; return "sign";
} }
@GetMapping(value = "/robots.txt", produces = MediaType.TEXT_PLAIN_VALUE) @Autowired
@ResponseBody private ResourceLoader resourceLoader;
@Hidden
public String getRobotsTxt() { private List<String> getFontNames() {
String allowGoogleVisibility = System.getProperty("ALLOW_GOOGLE_VISIBILITY"); try {
if (allowGoogleVisibility == null) Resource[] resources = ResourcePatternUtils.getResourcePatternResolver(resourceLoader)
allowGoogleVisibility = System.getenv("ALLOW_GOOGLE_VISIBILITY"); .getResources("classpath:static/fonts/*.woff2");
if (allowGoogleVisibility == null)
allowGoogleVisibility = "false"; return Arrays.stream(resources)
if (Boolean.parseBoolean(allowGoogleVisibility)) { .map(resource -> {
return "User-agent: Googlebot\nAllow: /\n\nUser-agent: *\nAllow: /"; try {
} else { String filename = resource.getFilename();
return "User-agent: Googlebot\nDisallow: /\n\nUser-agent: *\nDisallow: /"; return filename.substring(0, filename.length() - 6); // Remove .woff2 extension
} catch (Exception e) {
throw new RuntimeException("Error processing filename", e);
}
})
.collect(Collectors.toList());
} catch (Exception e) {
throw new RuntimeException("Failed to read font directory", e);
} }
} }
@GetMapping("/crop")
@Hidden
public String cropForm(Model model) {
model.addAttribute("currentPage", "crop");
return "crop";
}
@GetMapping("/auto-split-pdf")
@Hidden
public String autoSPlitPDFForm(Model model) {
model.addAttribute("currentPage", "auto-split-pdf");
return "auto-split-pdf";
}
} }

View File

@@ -0,0 +1,52 @@
package stirling.software.SPDF.controller.web;
import org.springframework.http.MediaType;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import io.swagger.v3.oas.annotations.Hidden;
@Controller
public class HomeWebController {
@GetMapping("/about")
@Hidden
public String gameForm(Model model) {
model.addAttribute("currentPage", "about");
return "about";
}
@GetMapping("/")
public String home(Model model) {
model.addAttribute("currentPage", "home");
return "home";
}
@GetMapping("/home")
public String root(Model model) {
return "redirect:/";
}
@GetMapping(value = "/robots.txt", produces = MediaType.TEXT_PLAIN_VALUE)
@ResponseBody
@Hidden
public String getRobotsTxt() {
String allowGoogleVisibility = System.getProperty("ALLOW_GOOGLE_VISIBILITY");
if (allowGoogleVisibility == null)
allowGoogleVisibility = System.getenv("ALLOW_GOOGLE_VISIBILITY");
if (allowGoogleVisibility == null)
allowGoogleVisibility = "false";
if (Boolean.parseBoolean(allowGoogleVisibility)) {
return "User-agent: Googlebot\nAllow: /\n\nUser-agent: *\nAllow: /";
} else {
return "User-agent: Googlebot\nDisallow: /\n\nUser-agent: *\nDisallow: /";
}
}
}

View File

@@ -12,9 +12,12 @@ import io.micrometer.core.instrument.Counter;
import io.micrometer.core.instrument.Meter; import io.micrometer.core.instrument.Meter;
import io.micrometer.core.instrument.MeterRegistry; import io.micrometer.core.instrument.MeterRegistry;
import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.Parameter;
import io.swagger.v3.oas.annotations.tags.Tag;
@RestController @RestController
@RequestMapping("/api/v1") @RequestMapping("/api/v1")
@Tag(name = "API", description = "Info APIs")
public class MetricsController { public class MetricsController {
private final MeterRegistry meterRegistry; private final MeterRegistry meterRegistry;
@@ -36,18 +39,32 @@ public class MetricsController {
@GetMapping("/loads") @GetMapping("/loads")
@Operation(summary = "GET request count", @Operation(summary = "GET request count",
description = "This endpoint returns the total count of GET requests or the count of GET requests for a specific endpoint.") description = "This endpoint returns the total count of GET requests or the count of GET requests for a specific endpoint.")
public Double getPageLoads(@RequestParam Optional<String> endpoint) { public Double getPageLoads(@RequestParam(required = false, name = "endpoint") @Parameter(description = "endpoint") Optional<String> endpoint) {
try { try {
double count = 0.0; double count = 0.0;
for (Meter meter : meterRegistry.getMeters()) { for (Meter meter : meterRegistry.getMeters()) {
if (meter.getId().getName().equals("http.requests")) { if (meter.getId().getName().equals("http.requests")) {
String method = meter.getId().getTag("method"); String method = meter.getId().getTag("method");
if (method != null && method.equals("GET")) { if (method != null && method.equals("GET")) {
if (endpoint.isPresent() && !endpoint.get().isBlank()) {
if(!endpoint.get().startsWith("/")) {
endpoint = Optional.of("/" + endpoint.get());
}
System.out.println("loads " + endpoint.get() + " vs " + meter.getId().getTag("uri"));
if(endpoint.get().equals(meter.getId().getTag("uri"))){
if (meter instanceof Counter) { if (meter instanceof Counter) {
count += ((Counter) meter).count(); count += ((Counter) meter).count();
} }
} }
} else {
if (meter instanceof Counter) {
count += ((Counter) meter).count();
}
}
}
} }
} }
@@ -60,10 +77,15 @@ public class MetricsController {
@GetMapping("/requests") @GetMapping("/requests")
@Operation(summary = "POST request count", @Operation(summary = "POST request count",
description = "This endpoint returns the total count of POST requests or the count of POST requests for a specific endpoint.") description = "This endpoint returns the total count of POST requests or the count of POST requests for a specific endpoint.")
public Double getTotalRequests(@RequestParam Optional<String> endpoint) { public Double getTotalRequests(@RequestParam(required = false, name = "endpoint") @Parameter(description = "endpoint") Optional<String> endpoint) {
try { try {
Counter counter; Counter counter;
if (endpoint.isPresent()) { if (endpoint.isPresent() && !endpoint.get().isBlank()) {
if(!endpoint.get().startsWith("/")) {
endpoint = Optional.of("/" + endpoint.get());
}
System.out.println("loads " + endpoint.get() + " vs " + meterRegistry.get("http.requests").tags("uri", endpoint.get()).toString());
counter = meterRegistry.get("http.requests") counter = meterRegistry.get("http.requests")
.tags("method", "POST", "uri", endpoint.get()).counter(); .tags("method", "POST", "uri", endpoint.get()).counter();
} else { } else {
@@ -72,7 +94,8 @@ public class MetricsController {
} }
return counter.count(); return counter.count();
} catch (Exception e) { } catch (Exception e) {
return -1.0; e.printStackTrace();
return 0.0;
} }
} }

View File

@@ -12,8 +12,10 @@ import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.servlet.ModelAndView; import org.springframework.web.servlet.ModelAndView;
import io.swagger.v3.oas.annotations.Hidden; import io.swagger.v3.oas.annotations.Hidden;
import io.swagger.v3.oas.annotations.tags.Tag;
@Controller @Controller
@Tag(name = "Other", description = "Other APIs")
public class OtherWebController { public class OtherWebController {
@GetMapping("/compress-pdf") @GetMapping("/compress-pdf")
@Hidden @Hidden
@@ -30,6 +32,13 @@ public class OtherWebController {
return modelAndView; return modelAndView;
} }
@GetMapping("/add-page-numbers")
@Hidden
public String addPageNumbersForm(Model model) {
model.addAttribute("currentPage", "add-page-numbers");
return "other/add-page-numbers";
}
@GetMapping("/extract-images") @GetMapping("/extract-images")
@Hidden @Hidden
public String extractImagesForm(Model model) { public String extractImagesForm(Model model) {
@@ -74,7 +83,9 @@ public class OtherWebController {
@Hidden @Hidden
public ModelAndView ocrPdfPage() { public ModelAndView ocrPdfPage() {
ModelAndView modelAndView = new ModelAndView("other/ocr-pdf"); ModelAndView modelAndView = new ModelAndView("other/ocr-pdf");
modelAndView.addObject("languages", getAvailableTesseractLanguages()); List<String> languages = getAvailableTesseractLanguages();
Collections.sort(languages);
modelAndView.addObject("languages", languages);
modelAndView.addObject("currentPage", "ocr-pdf"); modelAndView.addObject("currentPage", "ocr-pdf");
return modelAndView; return modelAndView;
} }
@@ -108,4 +119,34 @@ public class OtherWebController {
return "other/remove-blanks"; return "other/remove-blanks";
} }
@GetMapping("/multi-page-layout")
@Hidden
public String multiPageLayoutForm(Model model) {
model.addAttribute("currentPage", "multi-page-layout");
return "other/multi-page-layout";
}
@GetMapping("/scale-pages")
@Hidden
public String scalePagesFrom(Model model) {
model.addAttribute("currentPage", "scale-pages");
return "other/scale-pages";
}
@GetMapping("/auto-crop")
@Hidden
public String autoCropForm(Model model) {
model.addAttribute("currentPage", "auto-crop");
return "other/auto-crop";
}
@GetMapping("/auto-rename")
@Hidden
public String autoRenameForm(Model model) {
model.addAttribute("currentPage", "auto-rename");
return "other/auto-rename";
}
} }

View File

@@ -5,8 +5,10 @@ import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.GetMapping;
import io.swagger.v3.oas.annotations.Hidden; import io.swagger.v3.oas.annotations.Hidden;
import io.swagger.v3.oas.annotations.tags.Tag;
@Controller @Controller
@Tag(name = "Security", description = "Security APIs")
public class SecurityWebController { public class SecurityWebController {
@GetMapping("/add-password") @GetMapping("/add-password")
@Hidden @Hidden
@@ -41,4 +43,11 @@ public class SecurityWebController {
model.addAttribute("currentPage", "cert-sign"); model.addAttribute("currentPage", "cert-sign");
return "security/cert-sign"; return "security/cert-sign";
} }
@GetMapping("/sanitize-pdf")
@Hidden
public String sanitizeForm(Model model) {
model.addAttribute("currentPage", "sanitize-pdf");
return "security/sanitize-pdf";
}
} }

View File

@@ -0,0 +1,51 @@
package stirling.software.SPDF.model;
import java.util.List;
import com.fasterxml.jackson.annotation.JsonProperty;
public class PipelineConfig {
private String name;
@JsonProperty("pipeline")
private List<PipelineOperation> operations;
private String outputDir;
@JsonProperty("outputFileName")
private String outputPattern;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public List<PipelineOperation> getOperations() {
return operations;
}
public void setOperations(List<PipelineOperation> operations) {
this.operations = operations;
}
public String getOutputDir() {
return outputDir;
}
public void setOutputDir(String outputDir) {
this.outputDir = outputDir;
}
public String getOutputPattern() {
return outputPattern;
}
public void setOutputPattern(String outputPattern) {
this.outputPattern = outputPattern;
}
}

View File

@@ -0,0 +1,32 @@
package stirling.software.SPDF.model;
import java.util.Map;
public class PipelineOperation {
private String operation;
private Map<String, Object> parameters;
public String getOperation() {
return operation;
}
public void setOperation(String operation) {
this.operation = operation;
}
public Map<String, Object> getParameters() {
return parameters;
}
public void setParameters(Map<String, Object> parameters) {
this.parameters = parameters;
}
@Override
public String toString() {
return "PipelineOperation [operation=" + operation + ", parameters=" + parameters + "]";
}
}

View File

@@ -1,4 +1,4 @@
package stirling.software.SPDF.utils; package stirling.software.SPDF.pdf;
import java.awt.geom.Point2D; import java.awt.geom.Point2D;
import java.io.IOException; import java.io.IOException;

View File

@@ -0,0 +1,153 @@
package stirling.software.SPDF.utils;
import java.io.IOException;
import java.net.MalformedURLException;
import java.net.URL;
import java.nio.file.FileVisitResult;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.nio.file.SimpleFileVisitor;
import java.nio.file.attribute.BasicFileAttributes;
import java.util.ArrayList;
import java.util.List;
public class GeneralUtils {
public static void deleteDirectory(Path path) throws IOException {
Files.walkFileTree(path, new SimpleFileVisitor<Path>() {
@Override
public FileVisitResult visitFile(Path file, BasicFileAttributes attrs) throws IOException {
Files.delete(file);
return FileVisitResult.CONTINUE;
}
@Override
public FileVisitResult postVisitDirectory(Path dir, IOException exc) throws IOException {
Files.delete(dir);
return FileVisitResult.CONTINUE;
}
});
}
public static String convertToFileName(String name) {
String safeName = name.replaceAll("[^a-zA-Z0-9]", "_");
if (safeName.length() > 50) {
safeName = safeName.substring(0, 50);
}
return safeName;
}
public static boolean isValidURL(String urlStr) {
try {
new URL(urlStr);
return true;
} catch (MalformedURLException e) {
return false;
}
}
public static Long convertSizeToBytes(String sizeStr) {
if (sizeStr == null) {
return null;
}
sizeStr = sizeStr.trim().toUpperCase();
try {
if (sizeStr.endsWith("KB")) {
return (long) (Double.parseDouble(sizeStr.substring(0, sizeStr.length() - 2)) * 1024);
} else if (sizeStr.endsWith("MB")) {
return (long) (Double.parseDouble(sizeStr.substring(0, sizeStr.length() - 2)) * 1024 * 1024);
} else if (sizeStr.endsWith("GB")) {
return (long) (Double.parseDouble(sizeStr.substring(0, sizeStr.length() - 2)) * 1024 * 1024 * 1024);
} else if (sizeStr.endsWith("B")) {
return Long.parseLong(sizeStr.substring(0, sizeStr.length() - 1));
} else {
// Input string does not have a valid format, handle this case
}
} catch (NumberFormatException e) {
// The numeric part of the input string cannot be parsed, handle this case
}
return null;
}
public static List<Integer> parsePageList(String[] pageOrderArr, int totalPages) {
List<Integer> newPageOrder = new ArrayList<>();
// loop through the page order array
for (String element : pageOrderArr) {
if (element.equalsIgnoreCase("all")) {
for (int i = 0; i < totalPages; i++) {
newPageOrder.add(i);
}
// As all pages are already added, no need to check further
break;
}
else if (element.matches("\\d*n\\+?-?\\d*|\\d*\\+?n")) {
// Handle page order as a function
int coefficient = 0;
int constant = 0;
boolean coefficientExists = false;
boolean constantExists = false;
if (element.contains("n")) {
String[] parts = element.split("n");
if (!parts[0].equals("") && parts[0] != null) {
coefficient = Integer.parseInt(parts[0]);
coefficientExists = true;
}
if (parts.length > 1 && !parts[1].equals("") && parts[1] != null) {
constant = Integer.parseInt(parts[1]);
constantExists = true;
}
} else if (element.contains("+")) {
constant = Integer.parseInt(element.replace("+", ""));
constantExists = true;
}
for (int i = 1; i <= totalPages; i++) {
int pageNum = coefficientExists ? coefficient * i : i;
pageNum += constantExists ? constant : 0;
if (pageNum <= totalPages && pageNum > 0) {
newPageOrder.add(pageNum - 1);
}
}
} else if (element.contains("-")) {
// split the range into start and end page
String[] range = element.split("-");
int start = Integer.parseInt(range[0]);
int end = Integer.parseInt(range[1]);
// check if the end page is greater than total pages
if (end > totalPages) {
end = totalPages;
}
// loop through the range of pages
for (int j = start; j <= end; j++) {
// print the current index
newPageOrder.add(j - 1);
}
} else {
// if the element is a single page
newPageOrder.add(Integer.parseInt(element) - 1);
}
}
return newPageOrder;
}
public static boolean createDir(String path) {
Path folder = Paths.get(path);
if (!Files.exists(folder)) {
try {
Files.createDirectories(folder);
} catch (IOException e) {
e.printStackTrace();
return false;
}
}
return true;
}
}

View File

@@ -0,0 +1,25 @@
package stirling.software.SPDF.utils;
import java.awt.image.BufferedImage;
public class ImageProcessingUtils {
static BufferedImage convertColorType(BufferedImage sourceImage, String colorType) {
BufferedImage convertedImage;
switch (colorType) {
case "greyscale":
convertedImage = new BufferedImage(sourceImage.getWidth(), sourceImage.getHeight(), BufferedImage.TYPE_BYTE_GRAY);
convertedImage.getGraphics().drawImage(sourceImage, 0, 0, null);
break;
case "blackwhite":
convertedImage = new BufferedImage(sourceImage.getWidth(), sourceImage.getHeight(), BufferedImage.TYPE_BYTE_BINARY);
convertedImage.getGraphics().drawImage(sourceImage, 0, 0, null);
break;
default: // full color
convertedImage = sourceImage;
break;
}
return convertedImage;
}
}

View File

@@ -0,0 +1,5 @@
package stirling.software.SPDF.utils;
public class PDFManipulationUtils {
}

View File

@@ -92,6 +92,6 @@ public class PDFToFile {
if (tempOutputDir != null) if (tempOutputDir != null)
FileUtils.deleteDirectory(tempOutputDir.toFile()); FileUtils.deleteDirectory(tempOutputDir.toFile());
} }
return PdfUtils.bytesToWebResponse(fileBytes, fileName, MediaType.APPLICATION_OCTET_STREAM); return WebResponseUtils.bytesToWebResponse(fileBytes, fileName, MediaType.APPLICATION_OCTET_STREAM);
} }
} }

View File

@@ -8,15 +8,7 @@ import java.io.File;
import java.io.FileOutputStream; import java.io.FileOutputStream;
import java.io.IOException; import java.io.IOException;
import java.io.InputStream; import java.io.InputStream;
import java.net.URLEncoder;
import java.nio.charset.StandardCharsets;
import java.nio.file.Files; import java.nio.file.Files;
import java.security.KeyPair;
import java.security.KeyStore;
import java.security.PrivateKey;
import java.security.PublicKey;
import java.security.cert.Certificate;
import java.security.cert.X509Certificate;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Arrays; import java.util.Arrays;
import java.util.List; import java.util.List;
@@ -30,46 +22,184 @@ import org.apache.pdfbox.pdmodel.PDDocument;
import org.apache.pdfbox.pdmodel.PDPage; import org.apache.pdfbox.pdmodel.PDPage;
import org.apache.pdfbox.pdmodel.PDPageContentStream; import org.apache.pdfbox.pdmodel.PDPageContentStream;
import org.apache.pdfbox.pdmodel.common.PDRectangle; import org.apache.pdfbox.pdmodel.common.PDRectangle;
import org.apache.pdfbox.pdmodel.graphics.image.JPEGFactory;
import org.apache.pdfbox.pdmodel.graphics.image.LosslessFactory; import org.apache.pdfbox.pdmodel.graphics.image.LosslessFactory;
import org.apache.pdfbox.pdmodel.graphics.image.PDImageXObject; import org.apache.pdfbox.pdmodel.graphics.image.PDImageXObject;
import org.apache.pdfbox.rendering.ImageType; import org.apache.pdfbox.rendering.ImageType;
import org.apache.pdfbox.rendering.PDFRenderer; import org.apache.pdfbox.rendering.PDFRenderer;
import org.apache.pdfbox.text.PDFTextStripper;
import org.slf4j.Logger; import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
import org.springframework.http.HttpHeaders;
import org.springframework.http.HttpStatus;
import org.springframework.http.MediaType;
import org.springframework.http.ResponseEntity;
import org.springframework.web.multipart.MultipartFile; import org.springframework.web.multipart.MultipartFile;
import com.itextpdf.kernel.pdf.PdfPage;
import com.itextpdf.kernel.pdf.canvas.parser.PdfTextExtractor;
import com.itextpdf.kernel.pdf.canvas.parser.listener.SimpleTextExtractionStrategy;
import stirling.software.SPDF.pdf.ImageFinder;
public class PdfUtils { public class PdfUtils {
private static final Logger logger = LoggerFactory.getLogger(PdfUtils.class); private static final Logger logger = LoggerFactory.getLogger(PdfUtils.class);
public static ResponseEntity<byte[]> boasToWebResponse(ByteArrayOutputStream baos, String docName) throws IOException {
return PdfUtils.bytesToWebResponse(baos.toByteArray(), docName); public static PDRectangle textToPageSize(String size) {
switch (size.toUpperCase()) {
case "A0":
return PDRectangle.A0;
case "A1":
return PDRectangle.A1;
case "A2":
return PDRectangle.A2;
case "A3":
return PDRectangle.A3;
case "A4":
return PDRectangle.A4;
case "A5":
return PDRectangle.A5;
case "A6":
return PDRectangle.A6;
case "LETTER":
return PDRectangle.LETTER;
case "LEGAL":
return PDRectangle.LEGAL;
default:
throw new IllegalArgumentException("Invalid standard page size: " + size);
}
} }
public static ResponseEntity<byte[]> boasToWebResponse(ByteArrayOutputStream baos, String docName, MediaType mediaType) throws IOException {
return PdfUtils.bytesToWebResponse(baos.toByteArray(), docName, mediaType);
public static boolean hasImages(PDDocument document, String pagesToCheck) throws IOException {
String[] pageOrderArr = pagesToCheck.split(",");
List<Integer> pageList = GeneralUtils.parsePageList(pageOrderArr, document.getNumberOfPages());
for (int pageNumber : pageList) {
PDPage page = document.getPage(pageNumber);
if (hasImagesOnPage(page)) {
return true;
}
} }
public static ResponseEntity<byte[]> bytesToWebResponse(byte[] bytes, String docName, MediaType mediaType) throws IOException { return false;
// Return the PDF as a response
HttpHeaders headers = new HttpHeaders();
headers.setContentType(mediaType);
headers.setContentLength(bytes.length);
String encodedDocName = URLEncoder.encode(docName, StandardCharsets.UTF_8.toString()).replaceAll("\\+", "%20");
headers.setContentDispositionFormData("attachment", encodedDocName);
return new ResponseEntity<>(bytes, headers, HttpStatus.OK);
} }
public static ResponseEntity<byte[]> bytesToWebResponse(byte[] bytes, String docName) throws IOException { public static boolean hasText(PDDocument document, String pageNumbersToCheck, String phrase) throws IOException {
return bytesToWebResponse(bytes, docName, MediaType.APPLICATION_PDF); String[] pageOrderArr = pageNumbersToCheck.split(",");
List<Integer> pageList = GeneralUtils.parsePageList(pageOrderArr, document.getNumberOfPages());
for (int pageNumber : pageList) {
PDPage page = document.getPage(pageNumber);
if (hasTextOnPage(page, phrase)) {
return true;
}
} }
public static byte[] convertFromPdf(byte[] inputStream, String imageType, ImageType colorType, boolean singleImage, int DPI) throws IOException, Exception { return false;
}
public static boolean hasImagesOnPage(PDPage page) throws IOException {
ImageFinder imageFinder = new ImageFinder(page);
imageFinder.processPage(page);
return imageFinder.hasImages();
}
public static boolean hasTextOnPage(PDPage page, String phrase) throws IOException {
PDFTextStripper textStripper = new PDFTextStripper();
PDDocument tempDoc = new PDDocument();
tempDoc.addPage(page);
String pageText = textStripper.getText(tempDoc);
tempDoc.close();
return pageText.contains(phrase);
}
public boolean containsTextInFile(PDDocument pdfDocument, String text, String pagesToCheck) throws IOException {
PDFTextStripper textStripper = new PDFTextStripper();
String pdfText = "";
if(pagesToCheck == null || pagesToCheck.equals("all")) {
pdfText = textStripper.getText(pdfDocument);
} else {
// remove whitespaces
pagesToCheck = pagesToCheck.replaceAll("\\s+", "");
String[] splitPoints = pagesToCheck.split(",");
for (String splitPoint : splitPoints) {
if (splitPoint.contains("-")) {
// Handle page ranges
String[] range = splitPoint.split("-");
int startPage = Integer.parseInt(range[0]);
int endPage = Integer.parseInt(range[1]);
for (int i = startPage; i <= endPage; i++) {
textStripper.setStartPage(i);
textStripper.setEndPage(i);
pdfText += textStripper.getText(pdfDocument);
}
} else {
// Handle individual page
int page = Integer.parseInt(splitPoint);
textStripper.setStartPage(page);
textStripper.setEndPage(page);
pdfText += textStripper.getText(pdfDocument);
}
}
}
pdfDocument.close();
return pdfText.contains(text);
}
public boolean pageCount(PDDocument pdfDocument, int pageCount, String comparator) throws IOException {
int actualPageCount = pdfDocument.getNumberOfPages();
pdfDocument.close();
switch(comparator.toLowerCase()) {
case "greater":
return actualPageCount > pageCount;
case "equal":
return actualPageCount == pageCount;
case "less":
return actualPageCount < pageCount;
default:
throw new IllegalArgumentException("Invalid comparator. Only 'greater', 'equal', and 'less' are supported.");
}
}
public boolean pageSize(PDDocument pdfDocument, String expectedPageSize) throws IOException {
PDPage firstPage = pdfDocument.getPage(0);
PDRectangle mediaBox = firstPage.getMediaBox();
float actualPageWidth = mediaBox.getWidth();
float actualPageHeight = mediaBox.getHeight();
pdfDocument.close();
// Assumes the expectedPageSize is in the format "widthxheight", e.g. "595x842" for A4
String[] dimensions = expectedPageSize.split("x");
float expectedPageWidth = Float.parseFloat(dimensions[0]);
float expectedPageHeight = Float.parseFloat(dimensions[1]);
// Checks if the actual page size matches the expected page size
return actualPageWidth == expectedPageWidth && actualPageHeight == expectedPageHeight;
}
public static byte[] convertFromPdf(byte[] inputStream, String imageType, ImageType colorType, boolean singleImage, int DPI, String filename) throws IOException, Exception {
try (PDDocument document = PDDocument.load(new ByteArrayInputStream(inputStream))) { try (PDDocument document = PDDocument.load(new ByteArrayInputStream(inputStream))) {
PDFRenderer pdfRenderer = new PDFRenderer(document); PDFRenderer pdfRenderer = new PDFRenderer(document);
int pageCount = document.getNumberOfPages(); int pageCount = document.getNumberOfPages();
@@ -77,7 +207,7 @@ public class PdfUtils {
// Create images of all pages // Create images of all pages
for (int i = 0; i < pageCount; i++) { for (int i = 0; i < pageCount; i++) {
images.add(pdfRenderer.renderImageWithDPI(i, 300, colorType)); images.add(pdfRenderer.renderImageWithDPI(i, DPI, colorType));
} }
if (singleImage) { if (singleImage) {
@@ -107,7 +237,7 @@ public class PdfUtils {
ImageIO.write(image, imageType, baosImage); ImageIO.write(image, imageType, baosImage);
// Add the image to the zip file // Add the image to the zip file
zos.putNextEntry(new ZipEntry(String.format("page_%d.%s", i + 1, imageType.toLowerCase()))); zos.putNextEntry(new ZipEntry(String.format(filename + "_%d.%s", i + 1, imageType.toLowerCase())));
zos.write(baosImage.toByteArray()); zos.write(baosImage.toByteArray());
} }
} }
@@ -125,6 +255,7 @@ public class PdfUtils {
public static byte[] imageToPdf(MultipartFile[] files, boolean stretchToFit, boolean autoRotate, String colorType) throws IOException { public static byte[] imageToPdf(MultipartFile[] files, boolean stretchToFit, boolean autoRotate, String colorType) throws IOException {
try (PDDocument doc = new PDDocument()) { try (PDDocument doc = new PDDocument()) {
for (MultipartFile file : files) { for (MultipartFile file : files) {
String contentType = file.getContentType();
String originalFilename = file.getOriginalFilename(); String originalFilename = file.getOriginalFilename();
if (originalFilename != null && (originalFilename.toLowerCase().endsWith(".tiff") || originalFilename.toLowerCase().endsWith(".tif")) ) { if (originalFilename != null && (originalFilename.toLowerCase().endsWith(".tiff") || originalFilename.toLowerCase().endsWith(".tif")) ) {
ImageReader reader = ImageIO.getImageReadersByFormatName("tiff").next(); ImageReader reader = ImageIO.getImageReadersByFormatName("tiff").next();
@@ -132,7 +263,7 @@ public class PdfUtils {
int numPages = reader.getNumImages(true); int numPages = reader.getNumImages(true);
for (int i = 0; i < numPages; i++) { for (int i = 0; i < numPages; i++) {
BufferedImage pageImage = reader.read(i); BufferedImage pageImage = reader.read(i);
BufferedImage convertedImage = convertColorType(pageImage, colorType); BufferedImage convertedImage = ImageProcessingUtils.convertColorType(pageImage, colorType);
PDImageXObject pdImage = LosslessFactory.createFromImage(doc, convertedImage); PDImageXObject pdImage = LosslessFactory.createFromImage(doc, convertedImage);
addImageToDocument(doc, pdImage, stretchToFit, autoRotate); addImageToDocument(doc, pdImage, stretchToFit, autoRotate);
} }
@@ -145,8 +276,13 @@ public class PdfUtils {
fos.write(buffer, 0, len); fos.write(buffer, 0, len);
} }
BufferedImage image = ImageIO.read(imageFile); BufferedImage image = ImageIO.read(imageFile);
BufferedImage convertedImage = convertColorType(image, colorType); BufferedImage convertedImage = ImageProcessingUtils.convertColorType(image, colorType);
PDImageXObject pdImage = LosslessFactory.createFromImage(doc, convertedImage); PDImageXObject pdImage;
if (contentType != null && (contentType.equals("image/jpeg"))) {
pdImage = JPEGFactory.createFromImage(doc, convertedImage);
} else {
pdImage = LosslessFactory.createFromImage(doc, convertedImage);
}
addImageToDocument(doc, pdImage, stretchToFit, autoRotate); addImageToDocument(doc, pdImage, stretchToFit, autoRotate);
} catch (IOException e) { } catch (IOException e) {
logger.error("Error writing image to file: {}", imageFile.getAbsolutePath(), e); logger.error("Error writing image to file: {}", imageFile.getAbsolutePath(), e);
@@ -163,24 +299,6 @@ public class PdfUtils {
} }
} }
private static BufferedImage convertColorType(BufferedImage sourceImage, String colorType) {
BufferedImage convertedImage;
switch (colorType) {
case "greyscale":
convertedImage = new BufferedImage(sourceImage.getWidth(), sourceImage.getHeight(), BufferedImage.TYPE_BYTE_GRAY);
convertedImage.getGraphics().drawImage(sourceImage, 0, 0, null);
break;
case "blackwhite":
convertedImage = new BufferedImage(sourceImage.getWidth(), sourceImage.getHeight(), BufferedImage.TYPE_BYTE_BINARY);
convertedImage.getGraphics().drawImage(sourceImage, 0, 0, null);
break;
default: // full color
convertedImage = sourceImage;
break;
}
return convertedImage;
}
private static void addImageToDocument(PDDocument doc, PDImageXObject image, boolean stretchToFit, boolean autoRotate) throws IOException { private static void addImageToDocument(PDDocument doc, PDImageXObject image, boolean stretchToFit, boolean autoRotate) throws IOException {
boolean imageIsLandscape = image.getWidth() > image.getHeight(); boolean imageIsLandscape = image.getWidth() > image.getHeight();
PDRectangle pageSize = PDRectangle.A4; PDRectangle pageSize = PDRectangle.A4;
@@ -217,33 +335,6 @@ public class PdfUtils {
} }
} }
public static X509Certificate[] loadCertificateChainFromKeystore(InputStream keystoreInputStream, String keystorePassword) throws Exception {
KeyStore keystore = KeyStore.getInstance(KeyStore.getDefaultType());
keystore.load(keystoreInputStream, keystorePassword.toCharArray());
String alias = keystore.aliases().nextElement();
Certificate[] certChain = keystore.getCertificateChain(alias);
X509Certificate[] x509CertChain = new X509Certificate[certChain.length];
for (int i = 0; i < certChain.length; i++) {
x509CertChain[i] = (X509Certificate) certChain[i];
}
return x509CertChain;
}
public static KeyPair loadKeyPairFromKeystore(InputStream keystoreInputStream, String keystorePassword) throws Exception {
KeyStore keystore = KeyStore.getInstance(KeyStore.getDefaultType());
keystore.load(keystoreInputStream, keystorePassword.toCharArray());
String alias = keystore.aliases().nextElement();
PrivateKey privateKey = (PrivateKey) keystore.getKey(alias, keystorePassword.toCharArray());
Certificate cert = keystore.getCertificate(alias);
PublicKey publicKey = cert.getPublicKey();
return new KeyPair(publicKey, privateKey);
}
public static byte[] overlayImage(byte[] pdfBytes, byte[] imageBytes, float x, float y, boolean everyPage) throws IOException { public static byte[] overlayImage(byte[] pdfBytes, byte[] imageBytes, float x, float y, boolean everyPage) throws IOException {
PDDocument document = PDDocument.load(new ByteArrayInputStream(pdfBytes)); PDDocument document = PDDocument.load(new ByteArrayInputStream(pdfBytes));
@@ -275,41 +366,7 @@ public class PdfUtils {
return baos.toByteArray(); return baos.toByteArray();
} }
public static ResponseEntity<byte[]> pdfDocToWebResponse(PDDocument document, String docName) throws IOException {
// Open Byte Array and save document to it
ByteArrayOutputStream baos = new ByteArrayOutputStream();
document.save(baos);
// Close the document
document.close();
return PdfUtils.boasToWebResponse(baos, docName);
}
public static Long convertSizeToBytes(String sizeStr) {
if (sizeStr == null) {
return null;
}
sizeStr = sizeStr.trim().toUpperCase();
try {
if (sizeStr.endsWith("KB")) {
return (long) (Double.parseDouble(sizeStr.substring(0, sizeStr.length() - 2)) * 1024);
} else if (sizeStr.endsWith("MB")) {
return (long) (Double.parseDouble(sizeStr.substring(0, sizeStr.length() - 2)) * 1024 * 1024);
} else if (sizeStr.endsWith("GB")) {
return (long) (Double.parseDouble(sizeStr.substring(0, sizeStr.length() - 2)) * 1024 * 1024 * 1024);
} else if (sizeStr.endsWith("B")) {
return Long.parseLong(sizeStr.substring(0, sizeStr.length() - 1));
} else {
// Input string does not have a valid format, handle this case
}
} catch (NumberFormatException e) {
// The numeric part of the input string cannot be parsed, handle this case
}
return null;
}
} }

View File

@@ -1,6 +1,7 @@
package stirling.software.SPDF.utils; package stirling.software.SPDF.utils;
import java.io.BufferedReader; import java.io.BufferedReader;
import java.io.File;
import java.io.IOException; import java.io.IOException;
import java.io.InputStreamReader; import java.io.InputStreamReader;
import java.nio.charset.StandardCharsets; import java.nio.charset.StandardCharsets;
@@ -13,7 +14,7 @@ import java.util.concurrent.Semaphore;
public class ProcessExecutor { public class ProcessExecutor {
public enum Processes { public enum Processes {
LIBRE_OFFICE, OCR_MY_PDF, PYTHON_OPENCV, GHOSTSCRIPT LIBRE_OFFICE, OCR_MY_PDF, PYTHON_OPENCV, GHOSTSCRIPT, WEASYPRINT
} }
private static final Map<Processes, ProcessExecutor> instances = new ConcurrentHashMap<>(); private static final Map<Processes, ProcessExecutor> instances = new ConcurrentHashMap<>();
@@ -25,6 +26,7 @@ public class ProcessExecutor {
case OCR_MY_PDF -> 2; case OCR_MY_PDF -> 2;
case PYTHON_OPENCV -> 8; case PYTHON_OPENCV -> 8;
case GHOSTSCRIPT -> 16; case GHOSTSCRIPT -> 16;
case WEASYPRINT -> 16;
}; };
return new ProcessExecutor(semaphoreLimit); return new ProcessExecutor(semaphoreLimit);
}); });
@@ -35,14 +37,21 @@ public class ProcessExecutor {
private ProcessExecutor(int semaphoreLimit) { private ProcessExecutor(int semaphoreLimit) {
this.semaphore = new Semaphore(semaphoreLimit); this.semaphore = new Semaphore(semaphoreLimit);
} }
public int runCommandWithOutputHandling(List<String> command) throws IOException, InterruptedException { public int runCommandWithOutputHandling(List<String> command) throws IOException, InterruptedException {
return runCommandWithOutputHandling(command, null);
}
public int runCommandWithOutputHandling(List<String> command, File workingDirectory) throws IOException, InterruptedException {
int exitCode = 1; int exitCode = 1;
semaphore.acquire(); semaphore.acquire();
try { try {
System.out.print("Running command: " + String.join(" ", command)); System.out.print("Running command: " + String.join(" ", command));
ProcessBuilder processBuilder = new ProcessBuilder(command); ProcessBuilder processBuilder = new ProcessBuilder(command);
// Use the working directory if it's set
if (workingDirectory != null) {
processBuilder.directory(workingDirectory);
}
Process process = processBuilder.start(); Process process = processBuilder.start();
// Read the error stream and standard output stream concurrently // Read the error stream and standard output stream concurrently

View File

@@ -0,0 +1,61 @@
package stirling.software.SPDF.utils;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.net.URLEncoder;
import java.nio.charset.StandardCharsets;
import org.apache.pdfbox.pdmodel.PDDocument;
import org.springframework.http.HttpHeaders;
import org.springframework.http.HttpStatus;
import org.springframework.http.MediaType;
import org.springframework.http.ResponseEntity;
import org.springframework.web.multipart.MultipartFile;
public class WebResponseUtils {
public static ResponseEntity<byte[]> boasToWebResponse(ByteArrayOutputStream baos, String docName) throws IOException {
return WebResponseUtils.bytesToWebResponse(baos.toByteArray(), docName);
}
public static ResponseEntity<byte[]> boasToWebResponse(ByteArrayOutputStream baos, String docName, MediaType mediaType) throws IOException {
return WebResponseUtils.bytesToWebResponse(baos.toByteArray(), docName, mediaType);
}
public static ResponseEntity<byte[]> multiPartFileToWebResponse(MultipartFile file) throws IOException {
String fileName = file.getOriginalFilename();
MediaType mediaType = MediaType.parseMediaType(file.getContentType());
byte[] bytes = file.getBytes();
return bytesToWebResponse(bytes, fileName, mediaType);
}
public static ResponseEntity<byte[]> bytesToWebResponse(byte[] bytes, String docName, MediaType mediaType) throws IOException {
// Return the PDF as a response
HttpHeaders headers = new HttpHeaders();
headers.setContentType(mediaType);
headers.setContentLength(bytes.length);
String encodedDocName = URLEncoder.encode(docName, StandardCharsets.UTF_8.toString()).replaceAll("\\+", "%20");
headers.setContentDispositionFormData("attachment", encodedDocName);
return new ResponseEntity<>(bytes, headers, HttpStatus.OK);
}
public static ResponseEntity<byte[]> bytesToWebResponse(byte[] bytes, String docName) throws IOException {
return bytesToWebResponse(bytes, docName, MediaType.APPLICATION_PDF);
}
public static ResponseEntity<byte[]> pdfDocToWebResponse(PDDocument document, String docName) throws IOException {
// Open Byte Array and save document to it
ByteArrayOutputStream baos = new ByteArrayOutputStream();
document.save(baos);
// Close the document
document.close();
return boasToWebResponse(baos, docName);
}
}

View File

@@ -1,12 +1,12 @@
spring.http.multipart.max-file-size=2GB spring.http.multipart.max-file-size=${MAX_FILE_SIZE:2000MB}
spring.http.multipart.max-request-size=2GB spring.http.multipart.max-request-size=${MAX_FILE_SIZE:2000MB}
multipart.enabled=true multipart.enabled=true
multipart.max-file-size=2000MB multipart.max-file-size=${MAX_FILE_SIZE:2000MB}
multipart.max-request-size=2000MB multipart.max-request-size=${MAX_FILE_SIZE:2000MB}
spring.servlet.multipart.max-file-size=2000MB spring.servlet.multipart.max-file-size=${MAX_FILE_SIZE:2000MB}
spring.servlet.multipart.max-request-size=2000MB spring.servlet.multipart.max-request-size=${MAX_FILE_SIZE:2000MB}
server.forward-headers-strategy=NATIVE server.forward-headers-strategy=NATIVE
@@ -15,7 +15,7 @@ server.error.whitelabel.enabled=false
server.error.include-stacktrace=always server.error.include-stacktrace=always
server.error.include-exception=true server.error.include-exception=true
server.error.include-message=always server.error.include-message=always
\
server.servlet.session.tracking-modes=cookie server.servlet.session.tracking-modes=cookie
server.servlet.context-path=${APP_ROOT_PATH:/} server.servlet.context-path=${APP_ROOT_PATH:/}
@@ -26,3 +26,7 @@ spring.thymeleaf.encoding=UTF-8
server.connection-timeout=${CONNECTION_TIMEOUT:5m} server.connection-timeout=${CONNECTION_TIMEOUT:5m}
spring.mvc.async.request-timeout=${ASYNC_CONNECTION_TIMEOUT:300000} spring.mvc.async.request-timeout=${ASYNC_CONNECTION_TIMEOUT:300000}
spring.resources.static-locations=file:customFiles/static/
#spring.thymeleaf.prefix=file:/customFiles/templates/,classpath:/templates/
#spring.thymeleaf.cache=false

View File

@@ -1,11 +1,7 @@
#!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!#
# Translated by Google Translate #
#!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!#
########### ###########
# Generic # # Generic #
########### ###########
# the direction that the language is written (ltr=left to right, rtl=right to left) # the direction that the language is written (ltr=left to right, rtl = right to left)
language.direction=rtl language.direction=rtl
pdfPrompt=اختر PDF pdfPrompt=اختر PDF
@@ -21,168 +17,500 @@ false=\u062E\u0637\u0623
unknown=\u063A\u064A\u0631 \u0645\u0639\u0631\u0648\u0641 unknown=\u063A\u064A\u0631 \u0645\u0639\u0631\u0648\u0641
save=\u062D\u0641\u0638 save=\u062D\u0641\u0638
close=\u0625\u063A\u0644\u0627\u0642 close=\u0625\u063A\u0644\u0627\u0642
filesSelected = الملفات المحددة filesSelected=الملفات المحددة
noFavourites = لم تتم إضافة أي مفضلات noFavourites=لم تتم إضافة أي مفضلات
bored = الانتظار بالملل؟ bored=الانتظار بالملل؟
alphabet=\u0627\u0644\u0623\u0628\u062C\u062F\u064A\u0629
downloadPdf=تنزيل PDF
text=نص
font=الخط
selectFillter=- حدد -
pageNum=رقم الصفحة
sizes.small=Small
sizes.medium=Medium
sizes.large=Large
sizes.x-large=X-Large
error.pdfPassword=The PDF Document is passworded and either the password was not provided or was incorrect
#############
# NAVBAR #
#############
navbar.convert=تحويل
navbar.security=الأمان
navbar.other=أخرى
navbar.darkmode=الوضع الداكن
navbar.pageOps=عمليات الصفحة
navbar.settings=\u0625\u0639\u062F\u0627\u062F\u0627\u062A
#############
# SETTINGS #
#############
settings.title=\u0627\u0644\u0625\u0639\u062F\u0627\u062F\u0627\u062A
settings.update=\u0627\u0644\u062A\u062D\u062F\u064A\u062B \u0645\u062A\u0627\u062D
settings.appVersion=\u0625\u0635\u062F\u0627\u0631 \u0627\u0644\u062A\u0637\u0628\u064A\u0642:
settings.downloadOption.title=\u062A\u062D\u062F\u064A\u062F \u062E\u064A\u0627\u0631 \u0627\u0644\u062A\u0646\u0632\u064A\u0644 (\u0644\u0644\u062A\u0646\u0632\u064A\u0644\u0627\u062A \u0630\u0627\u062A \u0627\u0644\u0645\u0644\u0641 \u0627\u0644\u0648\u0627\u062D\u062F \u063A\u064A\u0631 \u0627\u0644\u0645\u0636\u063A\u0648\u0637):
settings.downloadOption.1=\u0641\u062A\u062D \u0641\u064A \u0646\u0641\u0633 \u0627\u0644\u0646\u0627\u0641\u0630\u0629
settings.downloadOption.2=\u0641\u062A\u062D \u0641\u064A \u0646\u0627\u0641\u0630\u0629 \u062C\u062F\u064A\u062F\u0629
settings.downloadOption.3=\u062A\u0646\u0632\u064A\u0644 \u0627\u0644\u0645\u0644\u0641
settings.zipThreshold=\u0645\u0644\u0641\u0627\u062A \u0645\u0636\u063A\u0648\u0637\u0629 \u0639\u0646\u062F \u062A\u062C\u0627\u0648\u0632 \u0639\u062F\u062F \u0627\u0644\u0645\u0644\u0641\u0627\u062A \u0627\u0644\u062A\u064A \u062A\u0645 \u062A\u0646\u0632\u064A\u0644\u0647\u0627
############# #############
# HOME-PAGE # # HOME-PAGE #
############# #############
home.desc=متجرك الشامل المستضاف محليًا لجميع احتياجات PDF الخاصة بك. home.desc=متجرك الشامل المستضاف محليًا لجميع احتياجات PDF الخاصة بك.
navbar.convert=تحويل
navbar.security=الأمان
navbar.other=أخرى
navbar.darkmode=الوضع الداكن
navbar.pageOps=عمليات الصفحة
home.multiTool.title=أداة متعددة PDF home.multiTool.title=أداة متعددة PDF
home.multiTool.desc=دمج الصفحات وتدويرها وإعادة ترتيبها وإزالتها home.multiTool.desc=دمج الصفحات وتدويرها وإعادة ترتيبها وإزالتها
multiTool.tags=Multi Tool,Multi operation,UI,click drag,front end,client side
home.merge.title=دمج ملفات home.merge.title=دمج ملفات
home.merge.desc=دمج ملفات PDF متعددة في ملف واحد بسهولة. home.merge.desc=دمج ملفات PDF متعددة في ملف واحد بسهولة.
merge.tags=merge,Page operations,Back end,server side
home.split.title=انقسام ملفات home.split.title=انقسام ملفات
home.split.desc=تقسيم ملفات PDF إلى مستندات متعددة home.split.desc=تقسيم ملفات PDF إلى مستندات متعددة
##########################
### TODO: Translate ###
##########################
split.tags=Page operations,divide,Multi Page,cut,server side
home.rotate.title=تدوير ملفات home.rotate.title=تدوير ملفات
home.rotate.desc=قم بتدوير ملفات PDF الخاصة بك بسهولة. home.rotate.desc=قم بتدوير ملفات PDF الخاصة بك بسهولة.
##########################
### TODO: Translate ###
##########################
rotate.tags=server side
home.imageToPdf.title=صورة إلى PDF home.imageToPdf.title=صورة إلى PDF
home.imageToPdf.desc=تحويل الصور (PNG ، JPEG ، GIF) إلى PDF. home.imageToPdf.desc=تحويل الصور (PNG ، JPEG ، GIF) إلى PDF.
##########################
### TODO: Translate ###
##########################
imageToPdf.tags=conversion,img,jpg,picture,photo
home.pdfToImage.title=تحويل PDF إلى صورة home.pdfToImage.title=تحويل PDF إلى صورة
home.pdfToImage.desc=تحويل ملف PDF إلى صورة. (PNG ، JPEG ، GIF) home.pdfToImage.desc=تحويل ملف PDF إلى صورة. (PNG ، JPEG ، GIF)
##########################
### TODO: Translate ###
##########################
pdfToImage.tags=conversion,img,jpg,picture,photo
home.pdfOrganiser.title=منظم home.pdfOrganiser.title=منظم
home.pdfOrganiser.desc=إزالة / إعادة ترتيب الصفحات بأي ترتيب home.pdfOrganiser.desc=إزالة / إعادة ترتيب الصفحات بأي ترتيب
##########################
### TODO: Translate ###
##########################
pdfOrganiser.tags=duplex,even,odd,sort,move
home.addImage.title=إضافة صورة إلى ملف PDF home.addImage.title=إضافة صورة إلى ملف PDF
home.addImage.desc=إضافة صورة إلى موقع معين في PDF (العمل قيد التقدم) home.addImage.desc=إضافة صورة إلى موقع معين في PDF (العمل قيد التقدم)
##########################
### TODO: Translate ###
##########################
addImage.tags=img,jpg,picture,photo
home.watermark.title=إضافة علامة مائية home.watermark.title=إضافة علامة مائية
home.watermark.desc=أضف علامة مائية مخصصة إلى مستند PDF الخاص بك. home.watermark.desc=أضف علامة مائية مخصصة إلى مستند PDF الخاص بك.
##########################
home.remove-watermark.title=\u0625\u0632\u0627\u0644\u0629 \u0627\u0644\u0639\u0644\u0627\u0645\u0629 \u0627\u0644\u0645\u0627\u0626\u064A\u0629 ### TODO: Translate ###
home.remove-watermark.desc=\u0625\u0632\u0627\u0644\u0629 \u0627\u0644\u0639\u0644\u0627\u0645\u0627\u062A \u0627\u0644\u0645\u0627\u0626\u064A\u0629 \u0645\u0646 \u0645\u0633\u062A\u0646\u062F PDF \u0627\u0644\u062E\u0627\u0635 \u0628\u0643. ##########################
watermark.tags=Text,repeating,label,own,copyright,trademark,img,jpg,picture,photo
home.permissions.title=تغيير الأذونات home.permissions.title=تغيير الأذونات
home.permissions.desc=قم بتغيير أذونات مستند PDF الخاص بك home.permissions.desc=قم بتغيير أذونات مستند PDF الخاص بك
##########################
### TODO: Translate ###
##########################
permissions.tags=read,write,edit,print
home.removePages.title=إزالة الصفحات home.removePages.title=إزالة الصفحات
home.removePages.desc=حذف الصفحات غير المرغوب فيها من مستند PDF الخاص بك. home.removePages.desc=حذف الصفحات غير المرغوب فيها من مستند PDF الخاص بك.
##########################
### TODO: Translate ###
##########################
removePages.tags=Remove pages,delete pages
home.addPassword.title=إضافة كلمة مرور home.addPassword.title=إضافة كلمة مرور
home.addPassword.desc=تشفير مستند PDF الخاص بك بكلمة مرور. home.addPassword.desc=تشفير مستند PDF الخاص بك بكلمة مرور.
##########################
### TODO: Translate ###
##########################
addPassword.tags=secure,security
home.removePassword.title=إزالة كلمة المرور home.removePassword.title=إزالة كلمة المرور
home.removePassword.desc=إزالة الحماية بكلمة مرور من مستند PDF الخاص بك. home.removePassword.desc=إزالة الحماية بكلمة مرور من مستند PDF الخاص بك.
##########################
### TODO: Translate ###
##########################
removePassword.tags=secure,Decrypt,security,unpassword,delete password
home.compressPdfs.title=ضغط ملفات home.compressPdfs.title=ضغط ملفات
home.compressPdfs.desc=ضغط ملفات PDF لتقليل حجم الملف. home.compressPdfs.desc=ضغط ملفات PDF لتقليل حجم الملف.
##########################
### TODO: Translate ###
##########################
compressPdfs.tags=squish,small,tiny
home.changeMetadata.title=\u062A\u063A\u064A\u064A\u0631 \u0627\u0644\u0628\u064A\u0627\u0646\u0627\u062A \u0627\u0644\u0648\u0635\u0641\u064A\u0629 home.changeMetadata.title=\u062A\u063A\u064A\u064A\u0631 \u0627\u0644\u0628\u064A\u0627\u0646\u0627\u062A \u0627\u0644\u0648\u0635\u0641\u064A\u0629
home.changeMetadata.desc=\u062A\u063A\u064A\u064A\u0631 / \u0625\u0632\u0627\u0644\u0629 / \u0625\u0636\u0627\u0641\u0629 \u0628\u064A\u0627\u0646\u0627\u062A \u0623\u0648\u0644\u064A\u0629 \u0645\u0646 \u0645\u0633\u062A\u0646\u062F PDF home.changeMetadata.desc=\u062A\u063A\u064A\u064A\u0631 / \u0625\u0632\u0627\u0644\u0629 / \u0625\u0636\u0627\u0641\u0629 \u0628\u064A\u0627\u0646\u0627\u062A \u0623\u0648\u0644\u064A\u0629 \u0645\u0646 \u0645\u0633\u062A\u0646\u062F PDF
##########################
### TODO: Translate ###
##########################
changeMetadata.tags==Title,author,date,creation,time,publisher,producer,stats
home.fileToPDF.title=\u062A\u062D\u0648\u064A\u0644 \u0627\u0644\u0645\u0644\u0641 \u0625\u0644\u0649 PDF home.fileToPDF.title=\u062A\u062D\u0648\u064A\u0644 \u0627\u0644\u0645\u0644\u0641 \u0625\u0644\u0649 PDF
home.fileToPDF.desc=\u062A\u062D\u0648\u064A\u0644 \u0623\u064A \u0645\u0644\u0641 \u062A\u0642\u0631\u064A\u0628\u0627 \u0625\u0644\u0649 PDF (DOCX \u0648PNG \u0648XLS \u0648PPT \u0648TXT \u0648\u0627\u0644\u0645\u0632\u064A\u062F) home.fileToPDF.desc=\u062A\u062D\u0648\u064A\u0644 \u0623\u064A \u0645\u0644\u0641 \u062A\u0642\u0631\u064A\u0628\u0627 \u0625\u0644\u0649 PDF (DOCX \u0648PNG \u0648XLS \u0648PPT \u0648TXT \u0648\u0627\u0644\u0645\u0632\u064A\u062F)
##########################
### TODO: Translate ###
##########################
fileToPDF.tags=transformation,format,document,picture,slide,text,conversion,office,docs,word,excel,powerpoint
home.ocr.title=\u062A\u0634\u063A\u064A\u0644 OCR \u0639\u0644\u0649 PDF \u0648 / \u0623\u0648 \u0645\u0633\u062D \u0636\u0648\u0626\u064A home.ocr.title=\u062A\u0634\u063A\u064A\u0644 OCR \u0639\u0644\u0649 PDF \u0648 / \u0623\u0648 \u0645\u0633\u062D \u0636\u0648\u0626\u064A
home.ocr.desc=\u064A\u0642\u0648\u0645 \u0628\u0631\u0646\u0627\u0645\u062C \u0627\u0644\u062A\u0646\u0638\u064A\u0641 \u0628\u0645\u0633\u062D \u0648\u0627\u0643\u062A\u0634\u0627\u0641 \u0627\u0644\u0646\u0635 \u0645\u0646 \u0627\u0644\u0635\u0648\u0631 \u062F\u0627\u062E\u0644 \u0645\u0644\u0641 PDF \u0648\u064A\u0639\u064A\u062F \u0625\u0636\u0627\u0641\u062A\u0647 \u0643\u0646\u0635 home.ocr.desc=\u064A\u0642\u0648\u0645 \u0628\u0631\u0646\u0627\u0645\u062C \u0627\u0644\u062A\u0646\u0638\u064A\u0641 \u0628\u0645\u0633\u062D \u0648\u0627\u0643\u062A\u0634\u0627\u0641 \u0627\u0644\u0646\u0635 \u0645\u0646 \u0627\u0644\u0635\u0648\u0631 \u062F\u0627\u062E\u0644 \u0645\u0644\u0641 PDF \u0648\u064A\u0639\u064A\u062F \u0625\u0636\u0627\u0641\u062A\u0647 \u0643\u0646\u0635
##########################
### TODO: Translate ###
##########################
ocr.tags=recognition,text,image,scan,read,identify,detection,editable
home.extractImages.title=\u0627\u0633\u062A\u062E\u0631\u0627\u062C \u0627\u0644\u0635\u0648\u0631 home.extractImages.title=\u0627\u0633\u062A\u062E\u0631\u0627\u062C \u0627\u0644\u0635\u0648\u0631
home.extractImages.desc=\u064A\u0633\u062A\u062E\u0631\u062C \u062C\u0645\u064A\u0639 \u0627\u0644\u0635\u0648\u0631 \u0645\u0646 \u0645\u0644\u0641 PDF \u0648\u064A\u062D\u0641\u0638\u0647\u0627 \u0641\u064A \u0627\u0644\u0631\u0645\u0632 \u0627\u0644\u0628\u0631\u064A\u062F\u064A home.extractImages.desc=\u064A\u0633\u062A\u062E\u0631\u062C \u062C\u0645\u064A\u0639 \u0627\u0644\u0635\u0648\u0631 \u0645\u0646 \u0645\u0644\u0641 PDF \u0648\u064A\u062D\u0641\u0638\u0647\u0627 \u0641\u064A \u0627\u0644\u0631\u0645\u0632 \u0627\u0644\u0628\u0631\u064A\u062F\u064A
##########################
### TODO: Translate ###
##########################
extractImages.tags=picture,photo,save,archive,zip,capture,grab
home.pdfToPDFA.title=\u062A\u062D\u0648\u064A\u0644 \u0645\u0644\u0641\u0627\u062A PDF \u0625\u0644\u0649 PDF / A home.pdfToPDFA.title=\u062A\u062D\u0648\u064A\u0644 \u0645\u0644\u0641\u0627\u062A PDF \u0625\u0644\u0649 PDF / A
home.pdfToPDFA.desc=\u062A\u062D\u0648\u064A\u0644 PDF \u0625\u0644\u0649 PDF / A \u0644\u0644\u062A\u062E\u0632\u064A\u0646 \u0637\u0648\u064A\u0644 \u0627\u0644\u0645\u062F\u0649 home.pdfToPDFA.desc=\u062A\u062D\u0648\u064A\u0644 PDF \u0625\u0644\u0649 PDF / A \u0644\u0644\u062A\u062E\u0632\u064A\u0646 \u0637\u0648\u064A\u0644 \u0627\u0644\u0645\u062F\u0649
##########################
### TODO: Translate ###
##########################
pdfToPDFA.tags=archive,long-term,standard,conversion,storage,preservation
home.PDFToWord.title=تحويل PDF إلى Word home.PDFToWord.title=تحويل PDF إلى Word
home.PDFToWord.desc=تحويل PDF إلى تنسيقات Word (DOC و DOCX و ODT) home.PDFToWord.desc=تحويل PDF إلى تنسيقات Word (DOC و DOCX و ODT)
##########################
### TODO: Translate ###
##########################
PDFToWord.tags=doc,docx,odt,word,transformation,format,conversion,office,microsoft,docfile
home.PDFToPresentation.title=PDF للعرض التقديمي home.PDFToPresentation.title=PDF للعرض التقديمي
home.PDFToPresentation.desc=تحويل PDF إلى تنسيقات عرض تقديمي (PPT و PPTX و ODP) home.PDFToPresentation.desc=تحويل PDF إلى تنسيقات عرض تقديمي (PPT و PPTX و ODP)
##########################
### TODO: Translate ###
##########################
PDFToPresentation.tags=slides,show,office,microsoft
home.PDFToText.title=تحويل PDF إلى نص / RTF home.PDFToText.title=تحويل PDF إلى نص / RTF
home.PDFToText.desc=تحويل PDF إلى تنسيق نص أو RTF home.PDFToText.desc=تحويل PDF إلى تنسيق نص أو RTF
##########################
### TODO: Translate ###
##########################
PDFToText.tags=richformat,richtextformat,rich text format
home.PDFToHTML.title=تحويل PDF إلى HTML home.PDFToHTML.title=تحويل PDF إلى HTML
home.PDFToHTML.desc=تحويل PDF إلى تنسيق HTML home.PDFToHTML.desc=تحويل PDF إلى تنسيق HTML
##########################
### TODO: Translate ###
##########################
PDFToHTML.tags=web content,browser friendly
home.PDFToXML.title=تحويل PDF إلى XML home.PDFToXML.title=تحويل PDF إلى XML
home.PDFToXML.desc=تحويل PDF إلى تنسيق XML home.PDFToXML.desc=تحويل PDF إلى تنسيق XML
##########################
### TODO: Translate ###
##########################
PDFToXML.tags=data-extraction,structured-content,interop,transformation,convert
home.ScannerImageSplit.title=كشف / انقسام الصور الممسوحة ضوئيًا home.ScannerImageSplit.title=كشف / انقسام الصور الممسوحة ضوئيًا
home.ScannerImageSplit.desc=تقسيم عدة صور من داخل صورة / ملف PDF home.ScannerImageSplit.desc=تقسيم عدة صور من داخل صورة / ملف PDF
##########################
### TODO: Translate ###
##########################
ScannerImageSplit.tags=separate,auto-detect,scans,multi-photo,organize
home.sign.title = تسجيل الدخول home.sign.title=تسجيل الدخول
home.sign.desc = إضافة التوقيع إلى PDF عن طريق الرسم أو النص أو الصورة home.sign.desc=إضافة التوقيع إلى PDF عن طريق الرسم أو النص أو الصورة
##########################
### TODO: Translate ###
##########################
sign.tags=authorize,initials,drawn-signature,text-sign,image-signature
home.flatten.title = تسطيح home.flatten.title=تسطيح
home.flatten.desc = قم بإزالة كافة العناصر والنماذج التفاعلية من ملف PDF home.flatten.desc=قم بإزالة كافة العناصر والنماذج التفاعلية من ملف PDF
##########################
### TODO: Translate ###
##########################
flatten.tags=static,deactivate,non-interactive,streamline
home.repair.title = إصلاح home.repair.title=إصلاح
home.repair.desc = يحاول إصلاح ملف PDF تالف / معطل home.repair.desc=يحاول إصلاح ملف PDF تالف / معطل
##########################
### TODO: Translate ###
##########################
repair.tags=fix,restore,correction,recover
home.removeBlanks.title = إزالة الصفحات الفارغة home.removeBlanks.title=إزالة الصفحات الفارغة
home.removeBlanks.desc = يكتشف ويزيل الصفحات الفارغة من المستند home.removeBlanks.desc=يكتشف ويزيل الصفحات الفارغة من المستند
##########################
### TODO: Translate ###
##########################
removeBlanks.tags=cleanup,streamline,non-content,organize
home.compare.title = قارن home.compare.title=قارن
home.compare.desc = يقارن ويظهر الاختلافات بين 2 من مستندات PDF home.compare.desc=يقارن ويظهر الاختلافات بين 2 من مستندات PDF
##########################
### TODO: Translate ###
##########################
compare.tags=differentiate,contrast,changes,analysis
downloadPdf = تنزيل PDF home.certSign.title=Sign with Certificate
text=نص home.certSign.desc=Signs a PDF with a Certificate/Key (PEM/P12)
font=الخط ##########################
selectFillter = - حدد - ### TODO: Translate ###
pageNum = رقم الصفحة ##########################
certSign.tags=authenticate,PEM,P12,official,encrypt
certSign.title = توقيع الشهادة home.pageLayout.title=Multi-Page Layout
certSign.header = قم بتوقيع ملف PDF بشهادتك (العمل قيد التقدم) home.pageLayout.desc=Merge multiple pages of a PDF document into a single page
certSign.selectPDF = حدد ملف PDF للتوقيع: ##########################
certSign.selectKey = حدد ملف المفتاح الخاص (تنسيق PKCS # 8 ، يمكن أن يكون .pem أو .der): ### TODO: Translate ###
certSign.selectCert = حدد ملف الشهادة الخاص بك (تنسيق X.509 ، يمكن أن يكون .pem أو .der): ##########################
certSign.selectP12 = حدد ملف تخزين المفاتيح PKCS # 12 (.p12 أو .pfx) (اختياري ، إذا تم توفيره ، يجب أن يحتوي على مفتاحك الخاص وشهادتك): pageLayout.tags=merge,composite,single-view,organize
certSign.certType = نوع الشهادة
certSign.password = أدخل ملف تخزين المفاتيح أو كلمة المرور الخاصة (إن وجدت):
certSign.showSig = إظهار التوقيع
certSign.reason = السبب
certSign.location = الموقع
certSign.name = الاسم
certSign.submit = تسجيل PDF
removeBlanks.title = إزالة الفراغات home.scalePages.title=Adjust page size/scale
removeBlanks.header = إزالة الصفحات الفارغة home.scalePages.desc=Change the size/scale of page and/or its contents.
removeBlanks.threshold = العتبة: ##########################
removeBlanks.thresholdDesc = الحد الفاصل لتحديد مدى بياض البكسل الأبيض ### TODO: Translate ###
removeBlanks.whitePercent = نسبة الأبيض (٪): ##########################
removeBlanks.whitePercentDesc = النسبة المئوية للصفحة التي يجب أن تكون بيضاء لتتم إزالتها scalePages.tags=resize,modify,dimension,adapt
removeBlanks.submit = إزالة الفراغات
home.pipeline.title=Pipeline (Advanced)
home.pipeline.desc=Run multiple actions on PDFs by defining pipeline scripts
##########################
### TODO: Translate ###
##########################
pipeline.tags=automate,sequence,scripted,batch-process
home.add-page-numbers.title=Add Page Numbers
home.add-page-numbers.desc=Add Page numbers throughout a document in a set location
##########################
### TODO: Translate ###
##########################
add-page-numbers.tags=paginate,label,organize,index
home.auto-rename.title=Auto Rename PDF File
home.auto-rename.desc=Auto renames a PDF file based on its detected header
##########################
### TODO: Translate ###
##########################
auto-rename.tags=auto-detect,header-based,organize,relabel
home.adjust-contrast.title=Adjust Colors/Contrast
home.adjust-contrast.desc=Adjust Contrast, Saturation and Brightness of a PDF
##########################
### TODO: Translate ###
##########################
adjust-contrast.tags=color-correction,tune,modify,enhance
home.crop.title=Crop PDF
home.crop.desc=Crop a PDF to reduce its size (maintains text!)
##########################
### TODO: Translate ###
##########################
crop.tags=trim,shrink,edit,shape
home.autoSplitPDF.title=Auto Split Pages
home.autoSplitPDF.desc=Auto Split Scanned PDF with physical scanned page splitter QR Code
##########################
### TODO: Translate ###
##########################
autoSplitPDF.tags=QR-based,separate,scan-segment,organize
home.sanitizePdf.title=Sanitize
home.sanitizePdf.desc=Remove scripts and other elements from PDF files
##########################
### TODO: Translate ###
##########################
sanitizePdf.tags=clean,secure,safe,remove-threats
##########################
### TODO: Translate ###
##########################
home.URLToPDF.title=URL/Website To PDF
home.URLToPDF.desc=Converts any http(s)URL to PDF
URLToPDF.tags=web-capture,save-page,web-to-doc,archive
##########################
### TODO: Translate ###
##########################
home.HTMLToPDF.title=HTML to PDF
home.HTMLToPDF.desc=Converts any HTML file or zip to PDF
HTMLToPDF.tags=markup,web-content,transformation,convert
###########################
# #
# WEB PAGES #
# #
###########################
#url-to-pdf
URLToPDF.title=URL To PDF
URLToPDF.header=URL To PDF
URLToPDF.submit=Convert
URLToPDF.credit=Uses WeasyPrint
#html-to-pdf
HTMLToPDF.title=HTML To PDF
HTMLToPDF.header=HTML To PDF
HTMLToPDF.help=Accepts HTML files and ZIPs containing html/css/images etc required
HTMLToPDF.submit=Convert
HTMLToPDF.credit=Uses WeasyPrint
#sanitizePDF
sanitizePDF.title=Sanitize PDF
sanitizePDF.header=Sanitize a PDF file
sanitizePDF.selectText.1=Remove JavaScript actions
sanitizePDF.selectText.2=Remove embedded files
sanitizePDF.selectText.3=Remove metadata
sanitizePDF.selectText.4=Remove links
sanitizePDF.selectText.5=Remove fonts
sanitizePDF.submit=Sanitize PDF
#addPageNumbers
addPageNumbers.title=Add Page Numbers
addPageNumbers.header=Add Page Numbers
addPageNumbers.selectText.1=Select PDF file:
addPageNumbers.selectText.2=Margin Size
addPageNumbers.selectText.3=Position
addPageNumbers.selectText.4=Starting Number
addPageNumbers.selectText.5=Pages to Number
addPageNumbers.selectText.6=Custom Text
addPageNumbers.submit=Add Page Numbers
#auto-rename
auto-rename.title=Auto Rename
auto-rename.header=Auto Rename PDF
auto-rename.submit=Auto Rename
#adjustContrast
adjustContrast.title=Adjust Contrast
adjustContrast.header=Adjust Contrast
adjustContrast.contrast=Contrast:
adjustContrast.brightness=Brightness:
adjustContrast.saturation=Saturation:
adjustContrast.download=Download
#crop
crop.title=Crop
crop.header=Crop Image
crop.submit=Submit
#autoSplitPDF
autoSplitPDF.title=Auto Split PDF
autoSplitPDF.header=Auto Split PDF
autoSplitPDF.description=Print, Insert, Scan, upload, and let us auto-separate your documents. No manual work sorting needed.
autoSplitPDF.selectText.1=Print out some divider sheets from below (Black and white is fine).
autoSplitPDF.selectText.2=Scan all your documents at once by inserting the divider sheet between them.
autoSplitPDF.selectText.3=Upload the single large scanned PDF file and let Stirling PDF handle the rest.
autoSplitPDF.selectText.4=Divider pages are automatically detected and removed, guaranteeing a neat final document.
autoSplitPDF.formPrompt=Submit PDF containing Stirling-PDF Page dividers:
autoSplitPDF.duplexMode=Duplex Mode (Front and back scanning)
autoSplitPDF.dividerDownload1=Download 'Auto Splitter Divider (minimal).pdf'
autoSplitPDF.dividerDownload2=Download 'Auto Splitter Divider (with instructions).pdf'
autoSplitPDF.submit=Submit
#pipeline
pipeline.title=Pipeline
#pageLayout
pageLayout.title=Multi Page Layout
pageLayout.header=Multi Page Layout
pageLayout.pagesPerSheet=Pages per sheet:
pageLayout.submit=Submit
#scalePages
scalePages.title=Adjust page-scale
scalePages.header=Adjust page-scale
scalePages.pageSize=Size of a page of the document.
scalePages.scaleFactor=Zoom level (crop) of a page.
scalePages.submit=Submit
#certSign
certSign.title=توقيع الشهادة
certSign.header=قم بتوقيع ملف PDF بشهادتك (العمل قيد التقدم)
certSign.selectPDF=حدد ملف PDF للتوقيع:
certSign.selectKey=حدد ملف المفتاح الخاص (تنسيق PKCS # 8 ، يمكن أن يكون .pem أو .der):
certSign.selectCert=حدد ملف الشهادة الخاص بك (تنسيق X.509 ، يمكن أن يكون .pem أو .der):
certSign.selectP12=حدد ملف تخزين المفاتيح PKCS # 12 (.p12 أو .pfx) (اختياري ، إذا تم توفيره ، يجب أن يحتوي على مفتاحك الخاص وشهادتك):
certSign.certType=نوع الشهادة
certSign.password=أدخل ملف تخزين المفاتيح أو كلمة المرور الخاصة (إن وجدت):
certSign.showSig=إظهار التوقيع
certSign.reason=السبب
certSign.location=الموقع
certSign.name=الاسم
certSign.submit=تسجيل PDF
#removeBlanks
removeBlanks.title=إزالة الفراغات
removeBlanks.header=إزالة الصفحات الفارغة
removeBlanks.threshold=العتبة:
removeBlanks.thresholdDesc=الحد الفاصل لتحديد مدى بياض البكسل الأبيض
removeBlanks.whitePercent=نسبة الأبيض (٪):
removeBlanks.whitePercentDesc=النسبة المئوية للصفحة التي يجب أن تكون بيضاء لتتم إزالتها
removeBlanks.submit=إزالة الفراغات
#compare
compare.title=يقارن compare.title=يقارن
compare.header=قارن ملفات PDF compare.header=قارن ملفات PDF
compare.document.1=المستند 1 compare.document.1=المستند 1
compare.document.2=المستند 2 compare.document.2=المستند 2
compare.submit=يقارن compare.submit=يقارن
sign.title = تسجيل الدخول
sign.header = توقيع ملفات PDF
sign.upload = تحميل الصورة
sign.draw = رسم التوقيع
Sign.text = إدخال النص
#sign
sign.title=تسجيل الدخول
sign.header=توقيع ملفات PDF
sign.upload=تحميل الصورة
sign.draw=رسم التوقيع
sign.text=Text Input
sign.clear=واضح sign.clear=واضح
sign.add = إضافة sign.add=إضافة
repair.title = إصلاح
repair.header = إصلاح ملفات PDF
repair.submit = الإصلاح
flatten.title = تسطيح #repair
flatten.header = تسوية ملفات PDF repair.title=إصلاح
flatten.submit = تسطيح repair.header=إصلاح ملفات PDF
repair.submit=الإصلاح
#flatten
flatten.title=تسطيح
flatten.header=تسوية ملفات PDF
flatten.submit=تسطيح
#ScannerImageSplit
ScannerImageSplit.selectText.1=عتبة الزاوية: ScannerImageSplit.selectText.1=عتبة الزاوية:
ScannerImageSplit.selectText.2=تعيين الحد الأدنى للزاوية المطلقة المطلوبة لتدوير الصورة (افتراضي: 10). ScannerImageSplit.selectText.2=تعيين الحد الأدنى للزاوية المطلقة المطلوبة لتدوير الصورة (افتراضي: 10).
ScannerImageSplit.selectText.3=التسامح: ScannerImageSplit.selectText.3=التسامح:
@@ -195,16 +523,6 @@ ScannerImageSplit.selectText.9=حجم الحدود:
ScannerImageSplit.selectText.10=يضبط حجم الحدود المضافة والمزالة لمنع الحدود البيضاء في الإخراج (الافتراضي: 1). ScannerImageSplit.selectText.10=يضبط حجم الحدود المضافة والمزالة لمنع الحدود البيضاء في الإخراج (الافتراضي: 1).
navbar.settings=\u0625\u0639\u062F\u0627\u062F\u0627\u062A
settings.title=\u0627\u0644\u0625\u0639\u062F\u0627\u062F\u0627\u062A
settings.update=\u0627\u0644\u062A\u062D\u062F\u064A\u062B \u0645\u062A\u0627\u062D
settings.appVersion=\u0625\u0635\u062F\u0627\u0631 \u0627\u0644\u062A\u0637\u0628\u064A\u0642:
settings.downloadOption.title=\u062A\u062D\u062F\u064A\u062F \u062E\u064A\u0627\u0631 \u0627\u0644\u062A\u0646\u0632\u064A\u0644 (\u0644\u0644\u062A\u0646\u0632\u064A\u0644\u0627\u062A \u0630\u0627\u062A \u0627\u0644\u0645\u0644\u0641 \u0627\u0644\u0648\u0627\u062D\u062F \u063A\u064A\u0631 \u0627\u0644\u0645\u0636\u063A\u0648\u0637):
settings.downloadOption.1=\u0641\u062A\u062D \u0641\u064A \u0646\u0641\u0633 \u0627\u0644\u0646\u0627\u0641\u0630\u0629
settings.downloadOption.2=\u0641\u062A\u062D \u0641\u064A \u0646\u0627\u0641\u0630\u0629 \u062C\u062F\u064A\u062F\u0629
settings.downloadOption.3=\u062A\u0646\u0632\u064A\u0644 \u0627\u0644\u0645\u0644\u0641
settings.zipThreshold=\u0645\u0644\u0641\u0627\u062A \u0645\u0636\u063A\u0648\u0637\u0629 \u0639\u0646\u062F \u062A\u062C\u0627\u0648\u0632 \u0639\u062F\u062F \u0627\u0644\u0645\u0644\u0641\u0627\u062A \u0627\u0644\u062A\u064A \u062A\u0645 \u062A\u0646\u0632\u064A\u0644\u0647\u0627
#OCR #OCR
ocr.title=\u0627\u0644\u062A\u0639\u0631\u0641 \u0627\u0644\u0636\u0648\u0626\u064A \u0639\u0644\u0649 \u0627\u0644\u062D\u0631\u0648\u0641 / \u062A\u0646\u0638\u064A\u0641 \u0627\u0644\u0645\u0633\u062D \u0627\u0644\u0636\u0648\u0626\u064A ocr.title=\u0627\u0644\u062A\u0639\u0631\u0641 \u0627\u0644\u0636\u0648\u0626\u064A \u0639\u0644\u0649 \u0627\u0644\u062D\u0631\u0648\u0641 / \u062A\u0646\u0638\u064A\u0641 \u0627\u0644\u0645\u0633\u062D \u0627\u0644\u0636\u0648\u0626\u064A
ocr.header=\u0645\u0633\u062D \u0627\u0644\u0645\u0633\u062D \u0627\u0644\u0636\u0648\u0626\u064A / \u0627\u0644\u062A\u0639\u0631\u0641 \u0627\u0644\u0636\u0648\u0626\u064A \u0639\u0644\u0649 \u0627\u0644\u062D\u0631\u0648\u0641 (\u0627\u0644\u062A\u0639\u0631\u0641 \u0627\u0644\u0636\u0648\u0626\u064A \u0639\u0644\u0649 \u0627\u0644\u062D\u0631\u0648\u0641) ocr.header=\u0645\u0633\u062D \u0627\u0644\u0645\u0633\u062D \u0627\u0644\u0636\u0648\u0626\u064A / \u0627\u0644\u062A\u0639\u0631\u0641 \u0627\u0644\u0636\u0648\u0626\u064A \u0639\u0644\u0649 \u0627\u0644\u062D\u0631\u0648\u0641 (\u0627\u0644\u062A\u0639\u0631\u0641 \u0627\u0644\u0636\u0648\u0626\u064A \u0639\u0644\u0649 \u0627\u0644\u062D\u0631\u0648\u0641)
@@ -218,19 +536,21 @@ ocr.selectText.7=\u0641\u0631\u0636 \u0627\u0644\u062A\u0639\u0631\u0641 \u0627\
ocr.selectText.8=\u0639\u0627\u062F\u064A (\u062E\u0637\u0623 \u0625\u0630\u0627 \u0643\u0627\u0646 PDF \u064A\u062D\u062A\u0648\u064A \u0639\u0644\u0649 \u0646\u0635) ocr.selectText.8=\u0639\u0627\u062F\u064A (\u062E\u0637\u0623 \u0625\u0630\u0627 \u0643\u0627\u0646 PDF \u064A\u062D\u062A\u0648\u064A \u0639\u0644\u0649 \u0646\u0635)
ocr.selectText.9=\u0625\u0639\u062F\u0627\u062F\u0627\u062A \u0625\u0636\u0627\u0641\u064A\u0629 ocr.selectText.9=\u0625\u0639\u062F\u0627\u062F\u0627\u062A \u0625\u0636\u0627\u0641\u064A\u0629
ocr.selectText.10=\u0648\u0636\u0639 \u0627\u0644\u062A\u0639\u0631\u0641 \u0627\u0644\u0636\u0648\u0626\u064A \u0639\u0644\u0649 \u0627\u0644\u062D\u0631\u0648\u0641 ocr.selectText.10=\u0648\u0636\u0639 \u0627\u0644\u062A\u0639\u0631\u0641 \u0627\u0644\u0636\u0648\u0626\u064A \u0639\u0644\u0649 \u0627\u0644\u062D\u0631\u0648\u0641
ocr.selectText.11 = إزالة الصور بعد التعرف الضوئي على الحروف (يزيل كل الصور ، يكون مفيدًا فقط إذا كان جزءًا من خطوة التحويل) ocr.selectText.11=إزالة الصور بعد التعرف الضوئي على الحروف (يزيل كل الصور ، يكون مفيدًا فقط إذا كان جزءًا من خطوة التحويل)
ocr.selectText.12 = نوع العرض (متقدم) ocr.selectText.12=نوع العرض (متقدم)
ocr.help=\u064A\u0631\u062C\u0649 \u0642\u0631\u0627\u0621\u0629 \u0647\u0630\u0647 \u0627\u0644\u0648\u062B\u0627\u0626\u0642 \u062D\u0648\u0644 \u0643\u064A\u0641\u064A\u0629 \u0627\u0633\u062A\u062E\u062F\u0627\u0645 \u0647\u0630\u0627 \u0644\u0644\u063A\u0627\u062A \u0623\u062E\u0631\u0649 \u0648 / \u0623\u0648 \u0627\u0644\u0627\u0633\u062A\u062E\u062F\u0627\u0645 \u0644\u064A\u0633 \u0641\u064A \u0639\u0627\u0645\u0644 \u0627\u0644\u0625\u0631\u0633\u0627\u0621 ocr.help=\u064A\u0631\u062C\u0649 \u0642\u0631\u0627\u0621\u0629 \u0647\u0630\u0647 \u0627\u0644\u0648\u062B\u0627\u0626\u0642 \u062D\u0648\u0644 \u0643\u064A\u0641\u064A\u0629 \u0627\u0633\u062A\u062E\u062F\u0627\u0645 \u0647\u0630\u0627 \u0644\u0644\u063A\u0627\u062A \u0623\u062E\u0631\u0649 \u0648 / \u0623\u0648 \u0627\u0644\u0627\u0633\u062A\u062E\u062F\u0627\u0645 \u0644\u064A\u0633 \u0641\u064A \u0639\u0627\u0645\u0644 \u0627\u0644\u0625\u0631\u0633\u0627\u0621
ocr.credit=\u062A\u0633\u062A\u062E\u062F\u0645 \u0647\u0630\u0647 \u0627\u0644\u062E\u062F\u0645\u0629 OCRmyPDF \u0648 Tesseract \u0644 OCR. ocr.credit=\u062A\u0633\u062A\u062E\u062F\u0645 \u0647\u0630\u0647 \u0627\u0644\u062E\u062F\u0645\u0629 OCRmyPDF \u0648 Tesseract \u0644 OCR.
ocr.submit=\u0645\u0639\u0627\u0644\u062C\u0629 PDF \u0628\u0627\u0633\u062A\u062E\u062F\u0627\u0645 OCR ocr.submit=\u0645\u0639\u0627\u0644\u062C\u0629 PDF \u0628\u0627\u0633\u062A\u062E\u062F\u0627\u0645 OCR
#extractImages
extractImages.title=\u0627\u0633\u062A\u062E\u0631\u0627\u062C \u0627\u0644\u0635\u0648\u0631 extractImages.title=\u0627\u0633\u062A\u062E\u0631\u0627\u062C \u0627\u0644\u0635\u0648\u0631
extractImages.header=\u0627\u0633\u062A\u062E\u0631\u0627\u062C \u0627\u0644\u0635\u0648\u0631 extractImages.header=\u0627\u0633\u062A\u062E\u0631\u0627\u062C \u0627\u0644\u0635\u0648\u0631
extractImages.selectText=\u062D\u062F\u062F \u062A\u0646\u0633\u064A\u0642 \u0627\u0644\u0635\u0648\u0631\u0629 \u0644\u062A\u062D\u0648\u064A\u0644 \u0627\u0644\u0635\u0648\u0631 \u0627\u0644\u0645\u0633\u062A\u062E\u0631\u062C\u0629 \u0625\u0644\u0649 extractImages.selectText=\u062D\u062F\u062F \u062A\u0646\u0633\u064A\u0642 \u0627\u0644\u0635\u0648\u0631\u0629 \u0644\u062A\u062D\u0648\u064A\u0644 \u0627\u0644\u0635\u0648\u0631 \u0627\u0644\u0645\u0633\u062A\u062E\u0631\u062C\u0629 \u0625\u0644\u0649
extractImages.submit=\u0627\u0633\u062A\u062E\u0631\u0627\u062C extractImages.submit=\u0627\u0633\u062A\u062E\u0631\u0627\u062C
#File \u0625\u0644\u0649 PDF
#File to PDF
fileToPDF.title=\u0645\u0644\u0641 \u0625\u0644\u0649 PDF fileToPDF.title=\u0645\u0644\u0641 \u0625\u0644\u0649 PDF
fileToPDF.header=\u062A\u062D\u0648\u064A\u0644 \u0623\u064A \u0645\u0644\u0641 \u0625\u0644\u0649 PDF fileToPDF.header=\u062A\u062D\u0648\u064A\u0644 \u0623\u064A \u0645\u0644\u0641 \u0625\u0644\u0649 PDF
fileToPDF.credit=\u062A\u0633\u062A\u062E\u062F\u0645 \u0647\u0630\u0647 \u0627\u0644\u062E\u062F\u0645\u0629 \u0644\u064A\u0628\u0631 \u0623\u0648\u0641\u064A\u0633 \u0648\u0623\u0648\u0646\u0648\u0643\u0648\u0646\u0641 \u0644\u062A\u062D\u0648\u064A\u0644 \u0627\u0644\u0645\u0644\u0641\u0627\u062A. fileToPDF.credit=\u062A\u0633\u062A\u062E\u062F\u0645 \u0647\u0630\u0647 \u0627\u0644\u062E\u062F\u0645\u0629 \u0644\u064A\u0628\u0631 \u0623\u0648\u0641\u064A\u0633 \u0648\u0623\u0648\u0646\u0648\u0643\u0648\u0646\u0641 \u0644\u062A\u062D\u0648\u064A\u0644 \u0627\u0644\u0645\u0644\u0641\u0627\u062A.
@@ -238,44 +558,50 @@ fileToPDF.supportedFileTypes=\u064A\u062C\u0628 \u0623\u0646 \u062A\u062A\u0636\
fileToPDF.submit=\u062A\u062D\u0648\u064A\u0644 \u0625\u0644\u0649 PDF fileToPDF.submit=\u062A\u062D\u0648\u064A\u0644 \u0625\u0644\u0649 PDF
#compress
compress.title=ضغط
compress.header=ضغط ملف PDF
compress.credit=تستخدم هذه الخدمة OCRmyPDF لضغط / تحسين PDF.
compress.selectText.1=الوضع اليدوي - من 1 إلى 4
compress.selectText.2=مستوى التحسين:
compress.selectText.3=4 (رهيب للصور النصية)
compress.selectText.4=الوضع التلقائي - يضبط الجودة تلقائيًا للحصول على ملف PDF بالحجم المحدد
compress.selectText.5=حجم PDF المتوقع (على سبيل المثال 25 ميجا بايت ، 10.8 ميجا بايت ، 25 كيلو بايت)
compress.submit=ضغطضغط
#Add image #Add image
addImage.title=إضافة صورة addImage.title=إضافة صورة
addImage.header=إضافة صورة إلى PDF addImage.header=إضافة صورة إلى PDF
addImage.everyPage=كل صفحة؟ addImage.everyPage=كل صفحة؟
addImage.upload=إضافة صورة
addImage.submit=إضافة صورة addImage.submit=إضافة صورة
#compress
compress.title = ضغط
compress.header = ضغط ملف PDF
compress.credit = تستخدم هذه الخدمة OCRmyPDF لضغط / تحسين PDF.
compress.selectText.1 = الوضع اليدوي - من 1 إلى 4
compress.selectText.2 = مستوى التحسين:
compress.selectText.3 = 4 (رهيب للصور النصية)
compress.selectText.4 = الوضع التلقائي - يضبط الجودة تلقائيًا للحصول على ملف PDF بالحجم المحدد
compress.selectText.5 = حجم PDF المتوقع (على سبيل المثال 25 ميجا بايت ، 10.8 ميجا بايت ، 25 كيلو بايت)
compress.submit = ضغطضغط
#merge #merge
merge.title=دمج merge.title=دمج
merge.header=دمج ملفات PDF متعددة (2+) merge.header=دمج ملفات PDF متعددة (2+)
merge.submit=دمج merge.submit=دمج
#pdfOrganiser #pdfOrganiser
pdfOrganiser.title=منظم الصفحة pdfOrganiser.title=منظم الصفحة
pdfOrganiser.header=منظم صفحات PDF pdfOrganiser.header=منظم صفحات PDF
pdfOrganiser.submit=إعادة ترتيب الصفحات pdfOrganiser.submit=إعادة ترتيب الصفحات
#multiTool #multiTool
multiTool.title=أداة متعددة PDF multiTool.title=أداة متعددة PDF
multiTool.header=أداة متعددة PDF multiTool.header=أداة متعددة PDF
#pageRemover #pageRemover
pageRemover.title=مزيل الصفحة pageRemover.title=مزيل الصفحة
pageRemover.header=مزيل صفحة PDF pageRemover.header=مزيل صفحة PDF
pageRemover.pagesToDelete=الصفحات المراد حذفها (أدخل قائمة بأرقام الصفحات مفصولة بفواصل): pageRemover.pagesToDelete=الصفحات المراد حذفها (أدخل قائمة بأرقام الصفحات مفصولة بفواصل):
pageRemover.submit=حذف الصفحات pageRemover.submit=حذف الصفحات
#rotate #rotate
rotate.title=تدوير PDF rotate.title=تدوير PDF
rotate.header=تدوير PDF rotate.header=تدوير PDF
@@ -283,8 +609,6 @@ rotate.selectAngle=حدد زاوية الدوران (بمضاعفات 90 درج
rotate.submit=استدارة rotate.submit=استدارة
#merge #merge
split.title=انقسام PDF split.title=انقسام PDF
split.header=تقسيم PDF split.header=تقسيم PDF
@@ -310,6 +634,7 @@ imageToPDF.selectText.3=\u0627\u0644\u0645\u0646\u0637\u0642 \u0627\u0644\u0645\
imageToPDF.selectText.4=\u062F\u0645\u062C \u0641\u064A \u0645\u0644\u0641 PDF \u0648\u0627\u062D\u062F imageToPDF.selectText.4=\u062F\u0645\u062C \u0641\u064A \u0645\u0644\u0641 PDF \u0648\u0627\u062D\u062F
imageToPDF.selectText.5=\u062A\u062D\u0648\u064A\u0644 \u0625\u0644\u0649 \u0645\u0644\u0641\u0627\u062A PDF \u0645\u0646\u0641\u0635\u0644\u0629 imageToPDF.selectText.5=\u062A\u062D\u0648\u064A\u0644 \u0625\u0644\u0649 \u0645\u0644\u0641\u0627\u062A PDF \u0645\u0646\u0641\u0635\u0644\u0629
#pdfToImage #pdfToImage
pdfToImage.title=تحويل PDF إلى صورة pdfToImage.title=تحويل PDF إلى صورة
pdfToImage.header=تحويل PDF إلى صورة pdfToImage.header=تحويل PDF إلى صورة
@@ -323,6 +648,7 @@ pdfToImage.grey=\u062A\u062F\u0631\u062C \u0627\u0644\u0631\u0645\u0627\u062F\u0
pdfToImage.blackwhite=\u0623\u0628\u064A\u0636 \u0648\u0623\u0633\u0648\u062F (\u0642\u062F \u064A\u0641\u0642\u062F \u0627\u0644\u0628\u064A\u0627\u0646\u0627\u062A!) pdfToImage.blackwhite=\u0623\u0628\u064A\u0636 \u0648\u0623\u0633\u0648\u062F (\u0642\u062F \u064A\u0641\u0642\u062F \u0627\u0644\u0628\u064A\u0627\u0646\u0627\u062A!)
pdfToImage.submit=تحول pdfToImage.submit=تحول
#addPassword #addPassword
addPassword.title=إضافة كلمة مرور addPassword.title=إضافة كلمة مرور
addPassword.header=إضافة كلمة مرور (تشفير) addPassword.header=إضافة كلمة مرور (تشفير)
@@ -339,8 +665,12 @@ addPassword.selectText.10=منع التعديل
addPassword.selectText.11=منع تعديل التعليقات التوضيحية addPassword.selectText.11=منع تعديل التعليقات التوضيحية
addPassword.selectText.12=منع الطباعة addPassword.selectText.12=منع الطباعة
addPassword.selectText.13=منع طباعة تنسيقات مختلفة addPassword.selectText.13=منع طباعة تنسيقات مختلفة
addPassword.selectText.14=Owner Password
addPassword.selectText.15=Restricts what can be done with the document once it is opened (Not supported by all readers)
addPassword.selectText.16=Restricts the opening of the document itself
addPassword.submit=تشفير addPassword.submit=تشفير
#watermark #watermark
watermark.title=إضافة علامة مائية watermark.title=إضافة علامة مائية
watermark.header=إضافة علامة مائية watermark.header=إضافة علامة مائية
@@ -353,6 +683,7 @@ watermark.selectText.6=heightSpacer (مسافة بين كل علامة مائي
watermark.selectText.7=\u0627\u0644\u062A\u0639\u062A\u064A\u0645 (0\u066A - 100\u066A): watermark.selectText.7=\u0627\u0644\u062A\u0639\u062A\u064A\u0645 (0\u066A - 100\u066A):
watermark.submit=إضافة علامة مائية watermark.submit=إضافة علامة مائية
#remove-watermark #remove-watermark
remove-watermark.title=\u0625\u0632\u0627\u0644\u0629 \u0627\u0644\u0639\u0644\u0627\u0645\u0629 \u0627\u0644\u0645\u0627\u0626\u064A\u0629 remove-watermark.title=\u0625\u0632\u0627\u0644\u0629 \u0627\u0644\u0639\u0644\u0627\u0645\u0629 \u0627\u0644\u0645\u0627\u0626\u064A\u0629
remove-watermark.header=\u0625\u0632\u0627\u0644\u0629 \u0627\u0644\u0639\u0644\u0627\u0645\u0629 \u0627\u0644\u0645\u0627\u0626\u064A\u0629 remove-watermark.header=\u0625\u0632\u0627\u0644\u0629 \u0627\u0644\u0639\u0644\u0627\u0645\u0629 \u0627\u0644\u0645\u0627\u0626\u064A\u0629
@@ -360,6 +691,7 @@ remove-watermark.selectText.1=\u062D\u062F\u062F PDF \u0644\u0625\u0632\u0627\u0
remove-watermark.selectText.2=\u0646\u0635 \u0627\u0644\u0639\u0644\u0627\u0645\u0629 \u0627\u0644\u0645\u0627\u0626\u064A\u0629: remove-watermark.selectText.2=\u0646\u0635 \u0627\u0644\u0639\u0644\u0627\u0645\u0629 \u0627\u0644\u0645\u0627\u0626\u064A\u0629:
remove-watermark.submit=\u0625\u0632\u0627\u0644\u0629 \u0627\u0644\u0639\u0644\u0627\u0645\u0629 \u0627\u0644\u0645\u0627\u0626\u064A\u0629 remove-watermark.submit=\u0625\u0632\u0627\u0644\u0629 \u0627\u0644\u0639\u0644\u0627\u0645\u0629 \u0627\u0644\u0645\u0627\u0626\u064A\u0629
#Change permissions #Change permissions
permissions.title=تغيير الأذونات permissions.title=تغيير الأذونات
permissions.header=تغيير الأذونات permissions.header=تغيير الأذونات
@@ -376,6 +708,7 @@ permissions.selectText.9=منع الطباعة
permissions.selectText.10=منع طباعة التنسيقات المختلفة permissions.selectText.10=منع طباعة التنسيقات المختلفة
permissions.submit=تغيير permissions.submit=تغيير
#remove password #remove password
removePassword.title=إزالة كلمة المرور removePassword.title=إزالة كلمة المرور
removePassword.header=إزالة كلمة المرور (فك التشفير) removePassword.header=إزالة كلمة المرور (فك التشفير)
@@ -383,7 +716,9 @@ removePassword.selectText.1=حدد PDF لفك التشفير
removePassword.selectText.2=كلمة المرور removePassword.selectText.2=كلمة المرور
removePassword.submit=إزالة removePassword.submit=إزالة
changeMetadata.title=\u062A\u063A\u064A\u064A\u0631 \u0627\u0644\u0628\u064A\u0627\u0646\u0627\u062A \u0627\u0644\u0648\u0635\u0641\u064A\u0629
#changeMetadata
changeMetadata.title=\u0627\u0644\u0639\u0646\u0648\u0627\u0646:
changeMetadata.header=\u062A\u063A\u064A\u064A\u0631 \u0627\u0644\u0628\u064A\u0627\u0646\u0627\u062A \u0627\u0644\u0648\u0635\u0641\u064A\u0629 changeMetadata.header=\u062A\u063A\u064A\u064A\u0631 \u0627\u0644\u0628\u064A\u0627\u0646\u0627\u062A \u0627\u0644\u0648\u0635\u0641\u064A\u0629
changeMetadata.selectText.1=\u064A\u0631\u062C\u0649 \u062A\u0639\u062F\u064A\u0644 \u0627\u0644\u0645\u062A\u063A\u064A\u0631\u0627\u062A \u0627\u0644\u062A\u064A \u062A\u0631\u063A\u0628 \u0641\u064A \u062A\u063A\u064A\u064A\u0631\u0647\u0627 changeMetadata.selectText.1=\u064A\u0631\u062C\u0649 \u062A\u0639\u062F\u064A\u0644 \u0627\u0644\u0645\u062A\u063A\u064A\u0631\u0627\u062A \u0627\u0644\u062A\u064A \u062A\u0631\u063A\u0628 \u0641\u064A \u062A\u063A\u064A\u064A\u0631\u0647\u0627
changeMetadata.selectText.2=\u062D\u0630\u0641 \u0643\u0644 \u0627\u0644\u0628\u064A\u0627\u0646\u0627\u062A \u0627\u0644\u0623\u0648\u0644\u064A\u0629 changeMetadata.selectText.2=\u062D\u0630\u0641 \u0643\u0644 \u0627\u0644\u0628\u064A\u0627\u0646\u0627\u062A \u0627\u0644\u0623\u0648\u0644\u064A\u0629
@@ -402,24 +737,29 @@ changeMetadata.selectText.5=\u0625\u0636\u0627\u0641\u0629 \u0625\u062F\u062E\u0
changeMetadata.submit=\u062A\u063A\u064A\u064A\u0631 changeMetadata.submit=\u062A\u063A\u064A\u064A\u0631
#xlsToPdf
xlsToPdf.title=\u062A\u062D\u0648\u064A\u0644 Excel \u0625\u0644\u0649 PDF xlsToPdf.title=\u062A\u062D\u0648\u064A\u0644 Excel \u0625\u0644\u0649 PDF
xlsToPdf.header=\u062A\u062D\u0648\u064A\u0644 Excel \u0625\u0644\u0649 PDF xlsToPdf.header=\u062A\u062D\u0648\u064A\u0644 Excel \u0625\u0644\u0649 PDF
xlsToPdf.selectText.1=\u062D\u062F\u062F \u0648\u0631\u0642\u0629 \u0625\u0643\u0633\u0644 XLS \u0623\u0648 XLSX \u0644\u0644\u062A\u062D\u0648\u064A\u0644 xlsToPdf.selectText.1=\u062D\u062F\u062F \u0648\u0631\u0642\u0629 \u0625\u0643\u0633\u0644 XLS \u0623\u0648 XLSX \u0644\u0644\u062A\u062D\u0648\u064A\u0644
xlsToPdf.convert=\u062A\u062D\u0648\u064A\u0644 xlsToPdf.convert=\u062A\u062D\u0648\u064A\u0644
#pdfToPDFA
pdfToPDFA.title=PDF \u0625\u0644\u0649 PDF / A pdfToPDFA.title=PDF \u0625\u0644\u0649 PDF / A
pdfToPDFA.header=PDF \u0625\u0644\u0649 PDF / A pdfToPDFA.header=PDF \u0625\u0644\u0649 PDF / A
pdfToPDFA.credit=\u062A\u0633\u062A\u062E\u062F\u0645 \u0647\u0630\u0647 \u0627\u0644\u062E\u062F\u0645\u0629 OCRmyPDF \u0644\u062A\u062D\u0648\u064A\u0644 PDF / A. pdfToPDFA.credit=\u062A\u0633\u062A\u062E\u062F\u0645 \u0647\u0630\u0647 \u0627\u0644\u062E\u062F\u0645\u0629 OCRmyPDF \u0644\u062A\u062D\u0648\u064A\u0644 PDF / A.
pdfToPDFA.submit=\u062A\u062D\u0648\u064A\u0644 pdfToPDFA.submit=\u062A\u062D\u0648\u064A\u0644
#PDFToWord
PDFToWord.title=تحويل PDF إلى Word PDFToWord.title=تحويل PDF إلى Word
PDFToWord.header=تحويل PDF إلى Word PDFToWord.header=تحويل PDF إلى Word
PDFToWord.selectText.1=تنسيق ملف الإخراج PDFToWord.selectText.1=تنسيق ملف الإخراج
PDFToWord.credit=تستخدم هذه الخدمة LibreOffice لتحويل الملفات. PDFToWord.credit=تستخدم هذه الخدمة LibreOffice لتحويل الملفات.
PDFToWord.submit=تحويل PDFToWord.submit=تحويل
#PDFToPresentation
PDFToPresentation.title=PDF للعرض التقديمي PDFToPresentation.title=PDF للعرض التقديمي
PDFToPresentation.header=PDF للعرض التقديمي PDFToPresentation.header=PDF للعرض التقديمي
PDFToPresentation.selectText.1=تنسيق ملف الإخراج PDFToPresentation.selectText.1=تنسيق ملف الإخراج
@@ -427,6 +767,7 @@ PDFToPresentation.credit=تستخدم هذه الخدمة LibreOffice لتحوي
PDFToPresentation.submit=تحويل PDFToPresentation.submit=تحويل
#PDFToText
PDFToText.title=تحويل PDF إلى نص / RTF PDFToText.title=تحويل PDF إلى نص / RTF
PDFToText.header=تحويل PDF إلى نص / RTF PDFToText.header=تحويل PDF إلى نص / RTF
PDFToText.selectText.1=تنسيق ملف الإخراج PDFToText.selectText.1=تنسيق ملف الإخراج
@@ -434,11 +775,14 @@ PDFToText.credit=تستخدم هذه الخدمة LibreOffice لتحويل ال
PDFToText.submit=تحويل PDFToText.submit=تحويل
#PDFToHTML
PDFToHTML.title=PDF إلى HTML PDFToHTML.title=PDF إلى HTML
PDFToHTML.header=PDF إلى HTML PDFToHTML.header=PDF إلى HTML
PDFToHTML.credit=تستخدم هذه الخدمة LibreOffice لتحويل الملفات. PDFToHTML.credit=تستخدم هذه الخدمة LibreOffice لتحويل الملفات.
PDFToHTML.submit=تحويل PDFToHTML.submit=تحويل
#PDFToXML
PDFToXML.title=تحويل PDF إلى XML PDFToXML.title=تحويل PDF إلى XML
PDFToXML.header=تحويل PDF إلى XML PDFToXML.header=تحويل PDF إلى XML
PDFToXML.credit=تستخدم هذه الخدمة LibreOffice لتحويل الملفات. PDFToXML.credit=تستخدم هذه الخدمة LibreOffice لتحويل الملفات.

View File

@@ -1,7 +1,7 @@
########### ###########
# Generic # # Generic #
########### ###########
# the direction that the language is written (ltr = left to right, rtl = right to left) # the direction that the language is written (ltr=left to right, rtl = right to left)
language.direction=ltr language.direction=ltr
pdfPrompt=Selecciona PDF(s) pdfPrompt=Selecciona PDF(s)
@@ -20,117 +20,441 @@ close=Tanca
filesSelected=fitxers seleccionats filesSelected=fitxers seleccionats
noFavourites=No s'ha afegit cap favorit noFavourites=No s'ha afegit cap favorit
bored=Avorrit esperant? bored=Avorrit esperant?
alphabet=Alfabet
downloadPdf=Descarregueu PDF
text=Text
font=Tipus de lletra
selectFillter=-- Selecciona --
pageNum=Número de pàgina
sizes.small=Small
sizes.medium=Medium
sizes.large=Large
sizes.x-large=X-Large
error.pdfPassword=The PDF Document is passworded and either the password was not provided or was incorrect
#############
# NAVBAR #
#############
navbar.convert=Converteix
navbar.security=Seguretat
navbar.other=Altres
navbar.darkmode=Mode Fost
navbar.pageOps=Operacions de Pàgina
navbar.settings=Opcions
#############
# SETTINGS #
#############
settings.title=Opcions
settings.update=Actualització Disponible
settings.appVersion=Versió App:
settings.downloadOption.title=Trieu l'opció de descàrrega (per a descàrregues d'un sol fitxer no zip):
settings.downloadOption.1=Obre mateixa finestra
settings.downloadOption.2=Obre mateixa finestra
settings.downloadOption.3=Descarrega Arxiu
settings.zipThreshold=Comprimiu els fitxers quan el nombre de fitxers baixats superi
############# #############
# HOME-PAGE # # HOME-PAGE #
############# #############
home.desc=L'eina allotjada localment per a necessitats PDF. home.desc=L'eina allotjada localment per a necessitats PDF.
navbar.convert=Converteix
navbar.security=Seguretat
navbar.other=Altres
navbar.darkmode=Mode Fost
navbar.pageOps=Operacions de Pàgina
home.multiTool.title=PDF Multi Tool home.multiTool.title=PDF Multi Tool
home.multiTool.desc=Fusiona, Rota, Reorganitza, i Esborra pàgines home.multiTool.desc=Fusiona, Rota, Reorganitza, i Esborra pàgines
multiTool.tags=Multi Tool,Multi operation,UI,click drag,front end,client side
home.merge.title=Fusiona home.merge.title=Fusiona
home.merge.desc=Fusiona fàcilment pàgines en una. home.merge.desc=Fusiona fàcilment pàgines en una.
merge.tags=merge,Page operations,Back end,server side
home.split.title=Divideix home.split.title=Divideix
home.split.desc=Divideix PDFs en múltiples documents home.split.desc=Divideix PDFs en múltiples documents
##########################
### TODO: Translate ###
##########################
split.tags=Page operations,divide,Multi Page,cut,server side
home.rotate.title=Rota home.rotate.title=Rota
home.rotate.desc=Rota els PDFs. home.rotate.desc=Rota els PDFs.
##########################
### TODO: Translate ###
##########################
rotate.tags=server side
home.imageToPdf.title=Imatge a PDF home.imageToPdf.title=Imatge a PDF
home.imageToPdf.desc=Converteix imatge (PNG, JPEG, GIF) a PDF. home.imageToPdf.desc=Converteix imatge (PNG, JPEG, GIF) a PDF.
##########################
### TODO: Translate ###
##########################
imageToPdf.tags=conversion,img,jpg,picture,photo
home.pdfToImage.title=PDF a Imatge home.pdfToImage.title=PDF a Imatge
home.pdfToImage.desc=Converteix PDF a imatge. (PNG, JPEG, GIF) home.pdfToImage.desc=Converteix PDF a imatge. (PNG, JPEG, GIF)
##########################
### TODO: Translate ###
##########################
pdfToImage.tags=conversion,img,jpg,picture,photo
home.pdfOrganiser.title=Organitza home.pdfOrganiser.title=Organitza
home.pdfOrganiser.desc=Elimina/Reorganitza pàgines en qualsevol ordre home.pdfOrganiser.desc=Elimina/Reorganitza pàgines en qualsevol ordre
##########################
### TODO: Translate ###
##########################
pdfOrganiser.tags=duplex,even,odd,sort,move
home.addImage.title=Afegir imatge a PDF home.addImage.title=Afegir imatge a PDF
home.addImage.desc=Afegeix imatge en un PDF (En progrés) home.addImage.desc=Afegeix imatge en un PDF (En progrés)
##########################
### TODO: Translate ###
##########################
addImage.tags=img,jpg,picture,photo
home.watermark.title=Afegir Marca d'aigua home.watermark.title=Afegir Marca d'aigua
home.watermark.desc=Afegir Marca d'aigua personalitzada en un PDF home.watermark.desc=Afegir Marca d'aigua personalitzada en un PDF
##########################
home.remove-watermark.title=Treure Marca d'Aigua ### TODO: Translate ###
home.remove-watermark.desc=Treu Marca d'Aigua d'un PDF ##########################
watermark.tags=Text,repeating,label,own,copyright,trademark,img,jpg,picture,photo
home.permissions.title=Canvia permissos home.permissions.title=Canvia permissos
home.permissions.desc=Canvia permisos del document PDF home.permissions.desc=Canvia permisos del document PDF
##########################
### TODO: Translate ###
##########################
permissions.tags=read,write,edit,print
home.removePages.title=Elimina home.removePages.title=Elimina
home.removePages.desc=Elimina pàgines del document PDF. home.removePages.desc=Elimina pàgines del document PDF.
##########################
### TODO: Translate ###
##########################
removePages.tags=Remove pages,delete pages
home.addPassword.title=Afegir Password home.addPassword.title=Afegir Password
home.addPassword.desc=Xifra document PDF amb password. home.addPassword.desc=Xifra document PDF amb password.
##########################
### TODO: Translate ###
##########################
addPassword.tags=secure,security
home.removePassword.title=Elimina Password home.removePassword.title=Elimina Password
home.removePassword.desc=Elimia Password de document PDF. home.removePassword.desc=Elimia Password de document PDF.
##########################
### TODO: Translate ###
##########################
removePassword.tags=secure,Decrypt,security,unpassword,delete password
home.compressPdfs.title=Comprimeix home.compressPdfs.title=Comprimeix
home.compressPdfs.desc=Comprimeix PDFs per reduir la mida. home.compressPdfs.desc=Comprimeix PDFs per reduir la mida.
##########################
### TODO: Translate ###
##########################
compressPdfs.tags=squish,small,tiny
home.changeMetadata.title=Canvia Metadades home.changeMetadata.title=Canvia Metadades
home.changeMetadata.desc=Canvia/Treu/Afegeix matadades al document PDF. home.changeMetadata.desc=Canvia/Treu/Afegeix matadades al document PDF.
##########################
### TODO: Translate ###
##########################
changeMetadata.tags==Title,author,date,creation,time,publisher,producer,stats
home.fileToPDF.title=Converteix arxiu a PDF home.fileToPDF.title=Converteix arxiu a PDF
home.fileToPDF.desc=Converteix qualsevol arxiu a PDF (DOCX, PNG, XLS, PPT, TXT i més) home.fileToPDF.desc=Converteix qualsevol arxiu a PDF (DOCX, PNG, XLS, PPT, TXT i més)
##########################
### TODO: Translate ###
##########################
fileToPDF.tags=transformation,format,document,picture,slide,text,conversion,office,docs,word,excel,powerpoint
home.ocr.title=Executa exploracions OCR i/o neteja escanejos home.ocr.title=Executa exploracions OCR i/o neteja escanejos
home.ocr.desc=Neteja escanejats i detecta text d'imatges dins d'un PDF i el torna a afegir com a text. home.ocr.desc=Neteja escanejats i detecta text d'imatges dins d'un PDF i el torna a afegir com a text.
##########################
### TODO: Translate ###
##########################
ocr.tags=recognition,text,image,scan,read,identify,detection,editable
home.extractImages.title=Extreu Imatges home.extractImages.title=Extreu Imatges
home.extractImages.desc=Extreu les Imatges del PDF i les desa a zip home.extractImages.desc=Extreu les Imatges del PDF i les desa a zip
##########################
### TODO: Translate ###
##########################
extractImages.tags=picture,photo,save,archive,zip,capture,grab
home.pdfToPDFA.title=PDF a PDF/A home.pdfToPDFA.title=PDF a PDF/A
home.pdfToPDFA.desc=Converteix PDF a PDF/A per desar a llarg termini. home.pdfToPDFA.desc=Converteix PDF a PDF/A per desar a llarg termini.
##########################
### TODO: Translate ###
##########################
pdfToPDFA.tags=archive,long-term,standard,conversion,storage,preservation
home.PDFToWord.title=PDF a Word home.PDFToWord.title=PDF a Word
home.PDFToWord.desc=Converteix PDF a formats de Word (DOC, DOCX and ODT) home.PDFToWord.desc=Converteix PDF a formats de Word (DOC, DOCX and ODT)
##########################
### TODO: Translate ###
##########################
PDFToWord.tags=doc,docx,odt,word,transformation,format,conversion,office,microsoft,docfile
home.PDFToPresentation.title=PDF a Presentació home.PDFToPresentation.title=PDF a Presentació
home.PDFToPresentation.desc=Convert PDF to Presentation formats (PPT, PPTX and ODP) home.PDFToPresentation.desc=Convert PDF to Presentation formats (PPT, PPTX and ODP)
##########################
### TODO: Translate ###
##########################
PDFToPresentation.tags=slides,show,office,microsoft
home.PDFToText.title=PDF a Text/RTF home.PDFToText.title=PDF a Text/RTF
home.PDFToText.desc=Converteix PDF a Text o format RTF home.PDFToText.desc=Converteix PDF a Text o format RTF
##########################
### TODO: Translate ###
##########################
PDFToText.tags=richformat,richtextformat,rich text format
home.PDFToHTML.title=PDF a HTML home.PDFToHTML.title=PDF a HTML
home.PDFToHTML.desc=Converteix PDF a format HTML home.PDFToHTML.desc=Converteix PDF a format HTML
##########################
### TODO: Translate ###
##########################
PDFToHTML.tags=web content,browser friendly
home.PDFToXML.title=PDF a XML home.PDFToXML.title=PDF a XML
home.PDFToXML.desc=Converteix PDF a format XML home.PDFToXML.desc=Converteix PDF a format XML
##########################
### TODO: Translate ###
##########################
PDFToXML.tags=data-extraction,structured-content,interop,transformation,convert
home.ScannerImageSplit.title=Detecta/Divideix fotos escanejades home.ScannerImageSplit.title=Detecta/Divideix fotos escanejades
home.ScannerImageSplit.desc=Divideix múltiples fotos dins del PDF/foto home.ScannerImageSplit.desc=Divideix múltiples fotos dins del PDF/foto
##########################
### TODO: Translate ###
##########################
ScannerImageSplit.tags=separate,auto-detect,scans,multi-photo,organize
home.sign.title=Sign home.sign.title=Sign
home.sign.desc=Afegeix signatura al PDF mitjançant dibuix, text o imatge home.sign.desc=Afegeix signatura al PDF mitjançant dibuix, text o imatge
##########################
### TODO: Translate ###
##########################
sign.tags=authorize,initials,drawn-signature,text-sign,image-signature
home.flatten.title=Aplanar home.flatten.title=Aplanar
home.flatten.desc=Elimineu tots els elements i formularis interactius d'un PDF home.flatten.desc=Elimineu tots els elements i formularis interactius d'un PDF
##########################
### TODO: Translate ###
##########################
flatten.tags=static,deactivate,non-interactive,streamline
home.repair.title=Reparar home.repair.title=Reparar
home.repair.desc=Intenta reparar un PDF danyat o trencat home.repair.desc=Intenta reparar un PDF danyat o trencat
##########################
### TODO: Translate ###
##########################
repair.tags=fix,restore,correction,recover
home.removeBlanks.title=Elimina les pàgines en blanc home.removeBlanks.title=Elimina les pàgines en blanc
home.removeBlanks.desc=Detecta i elimina les pàgines en blanc d'un document home.removeBlanks.desc=Detecta i elimina les pàgines en blanc d'un document
##########################
### TODO: Translate ###
##########################
removeBlanks.tags=cleanup,streamline,non-content,organize
home.compare.title=Compara home.compare.title=Compara
home.compare.desc=Compara i mostra les diferències entre 2 documents PDF home.compare.desc=Compara i mostra les diferències entre 2 documents PDF
##########################
### TODO: Translate ###
##########################
compare.tags=differentiate,contrast,changes,analysis
downloadPdf=Descarregueu PDF home.certSign.title=Sign with Certificate
text=Text home.certSign.desc=Signs a PDF with a Certificate/Key (PEM/P12)
font=Tipus de lletra ##########################
selectFillter=-- Selecciona -- ### TODO: Translate ###
pageNum=Número de pàgina ##########################
certSign.tags=authenticate,PEM,P12,official,encrypt
home.pageLayout.title=Multi-Page Layout
home.pageLayout.desc=Merge multiple pages of a PDF document into a single page
##########################
### TODO: Translate ###
##########################
pageLayout.tags=merge,composite,single-view,organize
home.scalePages.title=Adjust page size/scale
home.scalePages.desc=Change the size/scale of page and/or its contents.
##########################
### TODO: Translate ###
##########################
scalePages.tags=resize,modify,dimension,adapt
home.pipeline.title=Pipeline (Advanced)
home.pipeline.desc=Run multiple actions on PDFs by defining pipeline scripts
##########################
### TODO: Translate ###
##########################
pipeline.tags=automate,sequence,scripted,batch-process
home.add-page-numbers.title=Add Page Numbers
home.add-page-numbers.desc=Add Page numbers throughout a document in a set location
##########################
### TODO: Translate ###
##########################
add-page-numbers.tags=paginate,label,organize,index
home.auto-rename.title=Auto Rename PDF File
home.auto-rename.desc=Auto renames a PDF file based on its detected header
##########################
### TODO: Translate ###
##########################
auto-rename.tags=auto-detect,header-based,organize,relabel
home.adjust-contrast.title=Adjust Colors/Contrast
home.adjust-contrast.desc=Adjust Contrast, Saturation and Brightness of a PDF
##########################
### TODO: Translate ###
##########################
adjust-contrast.tags=color-correction,tune,modify,enhance
home.crop.title=Crop PDF
home.crop.desc=Crop a PDF to reduce its size (maintains text!)
##########################
### TODO: Translate ###
##########################
crop.tags=trim,shrink,edit,shape
home.autoSplitPDF.title=Auto Split Pages
home.autoSplitPDF.desc=Auto Split Scanned PDF with physical scanned page splitter QR Code
##########################
### TODO: Translate ###
##########################
autoSplitPDF.tags=QR-based,separate,scan-segment,organize
home.sanitizePdf.title=Sanitize
home.sanitizePdf.desc=Remove scripts and other elements from PDF files
##########################
### TODO: Translate ###
##########################
sanitizePdf.tags=clean,secure,safe,remove-threats
##########################
### TODO: Translate ###
##########################
home.URLToPDF.title=URL/Website To PDF
home.URLToPDF.desc=Converts any http(s)URL to PDF
URLToPDF.tags=web-capture,save-page,web-to-doc,archive
##########################
### TODO: Translate ###
##########################
home.HTMLToPDF.title=HTML to PDF
home.HTMLToPDF.desc=Converts any HTML file or zip to PDF
HTMLToPDF.tags=markup,web-content,transformation,convert
###########################
# #
# WEB PAGES #
# #
###########################
#url-to-pdf
URLToPDF.title=URL To PDF
URLToPDF.header=URL To PDF
URLToPDF.submit=Convert
URLToPDF.credit=Uses WeasyPrint
#html-to-pdf
HTMLToPDF.title=HTML To PDF
HTMLToPDF.header=HTML To PDF
HTMLToPDF.help=Accepts HTML files and ZIPs containing html/css/images etc required
HTMLToPDF.submit=Convert
HTMLToPDF.credit=Uses WeasyPrint
#sanitizePDF
sanitizePDF.title=Sanitize PDF
sanitizePDF.header=Sanitize a PDF file
sanitizePDF.selectText.1=Remove JavaScript actions
sanitizePDF.selectText.2=Remove embedded files
sanitizePDF.selectText.3=Remove metadata
sanitizePDF.selectText.4=Remove links
sanitizePDF.selectText.5=Remove fonts
sanitizePDF.submit=Sanitize PDF
#addPageNumbers
addPageNumbers.title=Add Page Numbers
addPageNumbers.header=Add Page Numbers
addPageNumbers.selectText.1=Select PDF file:
addPageNumbers.selectText.2=Margin Size
addPageNumbers.selectText.3=Position
addPageNumbers.selectText.4=Starting Number
addPageNumbers.selectText.5=Pages to Number
addPageNumbers.selectText.6=Custom Text
addPageNumbers.submit=Add Page Numbers
#auto-rename
auto-rename.title=Auto Rename
auto-rename.header=Auto Rename PDF
auto-rename.submit=Auto Rename
#adjustContrast
adjustContrast.title=Adjust Contrast
adjustContrast.header=Adjust Contrast
adjustContrast.contrast=Contrast:
adjustContrast.brightness=Brightness:
adjustContrast.saturation=Saturation:
adjustContrast.download=Download
#crop
crop.title=Crop
crop.header=Crop Image
crop.submit=Submit
#autoSplitPDF
autoSplitPDF.title=Auto Split PDF
autoSplitPDF.header=Auto Split PDF
autoSplitPDF.description=Print, Insert, Scan, upload, and let us auto-separate your documents. No manual work sorting needed.
autoSplitPDF.selectText.1=Print out some divider sheets from below (Black and white is fine).
autoSplitPDF.selectText.2=Scan all your documents at once by inserting the divider sheet between them.
autoSplitPDF.selectText.3=Upload the single large scanned PDF file and let Stirling PDF handle the rest.
autoSplitPDF.selectText.4=Divider pages are automatically detected and removed, guaranteeing a neat final document.
autoSplitPDF.formPrompt=Submit PDF containing Stirling-PDF Page dividers:
autoSplitPDF.duplexMode=Duplex Mode (Front and back scanning)
autoSplitPDF.dividerDownload1=Download 'Auto Splitter Divider (minimal).pdf'
autoSplitPDF.dividerDownload2=Download 'Auto Splitter Divider (with instructions).pdf'
autoSplitPDF.submit=Submit
#pipeline
pipeline.title=Pipeline
#pageLayout
pageLayout.title=Multi Page Layout
pageLayout.header=Multi Page Layout
pageLayout.pagesPerSheet=Pages per sheet:
pageLayout.submit=Submit
#scalePages
scalePages.title=Adjust page-scale
scalePages.header=Adjust page-scale
scalePages.pageSize=Size of a page of the document.
scalePages.scaleFactor=Zoom level (crop) of a page.
scalePages.submit=Submit
#certSign
certSign.title=Significació del certificat certSign.title=Significació del certificat
certSign.header=Firmar un PDF amb el vostre certificat (Treball en curs) certSign.header=Firmar un PDF amb el vostre certificat (Treball en curs)
certSign.selectPDF=Seleccioneu un fitxer PDF per signar: certSign.selectPDF=Seleccioneu un fitxer PDF per signar:
@@ -145,6 +469,8 @@ certSign.location=Ubicació
certSign.name=Nom certSign.name=Nom
certSign.submit=Firma PDF certSign.submit=Firma PDF
#removeBlanks
removeBlanks.title=Elimina els espais en blanc removeBlanks.title=Elimina els espais en blanc
removeBlanks.header=Elimina les pàgines en blanc removeBlanks.header=Elimina les pàgines en blanc
removeBlanks.threshold=Llindar: removeBlanks.threshold=Llindar:
@@ -153,12 +479,16 @@ removeBlanks.whitePercent=Percentatge blanc (%):
removeBlanks.whitePercentDesc=Percentatge de pàgina que ha de ser blanca per eliminar-la removeBlanks.whitePercentDesc=Percentatge de pàgina que ha de ser blanca per eliminar-la
removeBlanks.submit=Elimina els espais en blanc removeBlanks.submit=Elimina els espais en blanc
#compare
compare.title=Comparar compare.title=Comparar
compare.header=Compara PDF compare.header=Compara PDF
compare.document.1=Document 1 compare.document.1=Document 1
compare.document.2=Document 2 compare.document.2=Document 2
compare.submit=Comparar compare.submit=Comparar
#sign
sign.title=Sign sign.title=Sign
sign.header=Firma els PDF sign.header=Firma els PDF
sign.upload=Penja la imatge sign.upload=Penja la imatge
@@ -167,14 +497,20 @@ sign.text=Entrada de text
sign.clear=Esborrar sign.clear=Esborrar
sign.add=Afegeix sign.add=Afegeix
#repair
repair.title=Reparar repair.title=Reparar
repair.header=Repara els PDF repair.header=Repara els PDF
repair.submit=Reparar repair.submit=Reparar
#flatten
flatten.title=Aplanar flatten.title=Aplanar
flatten.header=Aplana els PDF flatten.header=Aplana els PDF
flatten.submit=Aplanar flatten.submit=Aplanar
#ScannerImageSplit
ScannerImageSplit.selectText.1=Llindar d'angle: ScannerImageSplit.selectText.1=Llindar d'angle:
ScannerImageSplit.selectText.2=Estableix l'angle absolut mínim necessari perquè la imatge es giri (per defecte: 10). ScannerImageSplit.selectText.2=Estableix l'angle absolut mínim necessari perquè la imatge es giri (per defecte: 10).
ScannerImageSplit.selectText.3=Tolerància: ScannerImageSplit.selectText.3=Tolerància:
@@ -186,19 +522,6 @@ ScannerImageSplit.selectText.8=Estableix el llindar mínim de l'àrea de contorn
ScannerImageSplit.selectText.9=Mida Vora: ScannerImageSplit.selectText.9=Mida Vora:
ScannerImageSplit.selectText.10=Estableix la mida de la vora afegida i eliminada per evitar vores blanques a la sortida (per defecte: 1). ScannerImageSplit.selectText.10=Estableix la mida de la vora afegida i eliminada per evitar vores blanques a la sortida (per defecte: 1).
navbar.settings=Opcions
settings.title=Opcions
settings.update=Actualització Disponible
settings.appVersion=Versió App:
settings.downloadOption.title=Trieu l'opció de descàrrega (per a descàrregues d'un sol fitxer no zip):
settings.downloadOption.1=Obre mateixa finestra
settings.downloadOption.2=Obre mateixa finestra
settings.downloadOption.3=Descarrega Arxiu
settings.zipThreshold=Comprimiu els fitxers quan el nombre de fitxers baixats superi
#OCR #OCR
ocr.title=OCR / Neteja escaneig ocr.title=OCR / Neteja escaneig
@@ -220,7 +543,7 @@ ocr.credit=Aquest servei empra OCRmyPDF i Tesseract per OCR.
ocr.submit=Processa PDF amb OCR ocr.submit=Processa PDF amb OCR
#extractImages
extractImages.title=Extreu Imatges extractImages.title=Extreu Imatges
extractImages.header=Extreu Imatges extractImages.header=Extreu Imatges
extractImages.selectText=Selecciona el format d'imatge al qual convertir les imatges extretes extractImages.selectText=Selecciona el format d'imatge al qual convertir les imatges extretes
@@ -246,10 +569,12 @@ compress.selectText.4=Mode automàtic: ajusta automàticament la qualitat per ta
compress.selectText.5=Mida esperada del PDF (p. ex. 25 MB, 10,8 MB, 25 KB) compress.selectText.5=Mida esperada del PDF (p. ex. 25 MB, 10,8 MB, 25 KB)
compress.submit=Comprimir compress.submit=Comprimir
#Add image #Add image
addImage.title=Afegir Imatge addImage.title=Afegir Imatge
addImage.header=Afegir Imatge a PDF (en construcció) addImage.header=Afegir Imatge a PDF (en construcció)
addImage.everyPage=Totes les pàgines? addImage.everyPage=Totes les pàgines?
addImage.upload=Afegir Imatge
addImage.submit=Afegir Imatge addImage.submit=Afegir Imatge
@@ -258,11 +583,13 @@ merge.title=Fusiona
merge.header=Fusiona múltiples PDFs (2+) merge.header=Fusiona múltiples PDFs (2+)
merge.submit=Fusiona merge.submit=Fusiona
#pdfOrganiser #pdfOrganiser
pdfOrganiser.title=Organitzador de pàgines pdfOrganiser.title=Organitzador de pàgines
pdfOrganiser.header=Organitzador de pàgines PDF pdfOrganiser.header=Organitzador de pàgines PDF
pdfOrganiser.submit=Reorganitza Pàgines pdfOrganiser.submit=Reorganitza Pàgines
#multiTool #multiTool
multiTool.title=PDF Multi Tool multiTool.title=PDF Multi Tool
multiTool.header=PDF Multi Tool multiTool.header=PDF Multi Tool
@@ -274,6 +601,7 @@ pageRemover.header=Eliminació Pàgines PDF
pageRemover.pagesToDelete=Pàgines a esborrar (Números de pàgina) : pageRemover.pagesToDelete=Pàgines a esborrar (Números de pàgina) :
pageRemover.submit=Esborra Pàgines pageRemover.submit=Esborra Pàgines
#rotate #rotate
rotate.title=Rota PDF rotate.title=Rota PDF
rotate.header=Rota PDF rotate.header=Rota PDF
@@ -281,8 +609,6 @@ rotate.selectAngle=Selecciona l'angle de gir (en múltiples de 90 graus):
rotate.submit=Rota rotate.submit=Rota
#merge #merge
split.title=Divideix PDF split.title=Divideix PDF
split.header=Divideix PDF split.header=Divideix PDF
@@ -308,6 +634,7 @@ imageToPDF.selectText.3=Lògica de diversos fitxers (només està activada si es
imageToPDF.selectText.4=Combina en un únic PDF imageToPDF.selectText.4=Combina en un únic PDF
imageToPDF.selectText.5=Converteix per separar PDFs imageToPDF.selectText.5=Converteix per separar PDFs
#pdfToImage #pdfToImage
pdfToImage.title=PDF a Imatge pdfToImage.title=PDF a Imatge
pdfToImage.header=PDF a Imatge pdfToImage.header=PDF a Imatge
@@ -321,6 +648,7 @@ pdfToImage.grey=Escala de Grisos
pdfToImage.blackwhite=Blanc i Negre (Pot perdre dades!) pdfToImage.blackwhite=Blanc i Negre (Pot perdre dades!)
pdfToImage.submit=Converteix pdfToImage.submit=Converteix
#addPassword #addPassword
addPassword.title=Afegir Password addPassword.title=Afegir Password
addPassword.header=Afegir password (Encriptat) addPassword.header=Afegir password (Encriptat)
@@ -337,8 +665,12 @@ addPassword.selectText.10=Evita modificacions
addPassword.selectText.11=Evita modificacions d'annotacions addPassword.selectText.11=Evita modificacions d'annotacions
addPassword.selectText.12=Evita impressió addPassword.selectText.12=Evita impressió
addPassword.selectText.13=Evita impressió de diferents formats addPassword.selectText.13=Evita impressió de diferents formats
addPassword.selectText.14=Owner Password
addPassword.selectText.15=Restricts what can be done with the document once it is opened (Not supported by all readers)
addPassword.selectText.16=Restricts the opening of the document itself
addPassword.submit=Encripta addPassword.submit=Encripta
#watermark #watermark
watermark.title=Afegir Marca d'Aigua watermark.title=Afegir Marca d'Aigua
watermark.header=Afegir Marca d'Aigua watermark.header=Afegir Marca d'Aigua
@@ -351,6 +683,7 @@ watermark.selectText.6=separació d'alçada (Espai vertical entre cada Marca d'A
watermark.selectText.7=Opacitat (0% - 100%): watermark.selectText.7=Opacitat (0% - 100%):
watermark.submit=Afegir Marca d'Aigua watermark.submit=Afegir Marca d'Aigua
#remove-watermark #remove-watermark
remove-watermark.title=Elimina Marca d'Aigua remove-watermark.title=Elimina Marca d'Aigua
remove-watermark.header=Elimina Marca d'Aigua remove-watermark.header=Elimina Marca d'Aigua
@@ -358,6 +691,7 @@ remove-watermark.selectText.1=Seleciona PDF per eliminar Marca d'Aigua:
remove-watermark.selectText.2=Text de la Marca d'Aigua: remove-watermark.selectText.2=Text de la Marca d'Aigua:
remove-watermark.submit=Elimina Marca d'Aigua remove-watermark.submit=Elimina Marca d'Aigua
#Change permissions #Change permissions
permissions.title=Canviar Permissos permissions.title=Canviar Permissos
permissions.header=Canviar Permissos permissions.header=Canviar Permissos
@@ -374,6 +708,7 @@ permissions.selectText.9=Evita impressió
permissions.selectText.10=Evita impressió de diferents formats permissions.selectText.10=Evita impressió de diferents formats
permissions.submit=Canviar Permissos permissions.submit=Canviar Permissos
#remove password #remove password
removePassword.title=Treure Password removePassword.title=Treure Password
removePassword.header=Treure Password (Decriptar) removePassword.header=Treure Password (Decriptar)
@@ -381,7 +716,9 @@ removePassword.selectText.1=Selecciona PDF a Decriptar
removePassword.selectText.2=Password removePassword.selectText.2=Password
removePassword.submit=Treu Password removePassword.submit=Treu Password
changeMetadata.title=Canvia Metadades
#changeMetadata
changeMetadata.title=Títol:
changeMetadata.header=Canvia Metadades changeMetadata.header=Canvia Metadades
changeMetadata.selectText.1=Edit les variables a canviar changeMetadata.selectText.1=Edit les variables a canviar
changeMetadata.selectText.2=Neteja totes les matadades changeMetadata.selectText.2=Neteja totes les matadades
@@ -399,27 +736,30 @@ changeMetadata.selectText.4=Altres Metadades:
changeMetadata.selectText.5=Afegir entrada personalizada changeMetadata.selectText.5=Afegir entrada personalizada
changeMetadata.submit=Canvia changeMetadata.submit=Canvia
#xlsToPdf
xlsToPdf.title=Excel a PDF xlsToPdf.title=Excel a PDF
xlsToPdf.header=Excel a PDF xlsToPdf.header=Excel a PDF
xlsToPdf.selectText.1=Selecciona arxiu XLS o XLSX a convertir xlsToPdf.selectText.1=Selecciona arxiu XLS o XLSX a convertir
xlsToPdf.convert=Converteix xlsToPdf.convert=Converteix
#pdfToPDFA
pdfToPDFA.title=PDF a PDF/A pdfToPDFA.title=PDF a PDF/A
pdfToPDFA.header=PDF a PDF/A pdfToPDFA.header=PDF a PDF/A
pdfToPDFA.credit=Utilitza OCRmyPDF per la conversió a PDF/A pdfToPDFA.credit=Utilitza OCRmyPDF per la conversió a PDF/A
pdfToPDFA.submit=Converteix pdfToPDFA.submit=Converteix
#PDFToWord
PDFToWord.title=PDF a Word PDFToWord.title=PDF a Word
PDFToWord.header=PDF a Word PDFToWord.header=PDF a Word
PDFToWord.selectText.1=Format d'Arxiu de Sortida PDFToWord.selectText.1=Format d'Arxiu de Sortida
PDFToWord.credit=Utilitza LibreOffice per a la conversió d'Arxius. PDFToWord.credit=Utilitza LibreOffice per a la conversió d'Arxius.
PDFToWord.submit=Converteix PDFToWord.submit=Converteix
#PDFToPresentation
PDFToPresentation.title=PDF a Presentació PDFToPresentation.title=PDF a Presentació
PDFToPresentation.header=PDF a Presentació PDFToPresentation.header=PDF a Presentació
PDFToPresentation.selectText.1=Format d'Arxiu de Sortida PDFToPresentation.selectText.1=Format d'Arxiu de Sortida
@@ -427,6 +767,7 @@ PDFToPresentation.credit=Utilitza LibreOffice per a la conversió d'Arxius.
PDFToPresentation.submit=Converteix PDFToPresentation.submit=Converteix
#PDFToText
PDFToText.title=PDF a Text/RTF PDFToText.title=PDF a Text/RTF
PDFToText.header=PDF a Text/RTF PDFToText.header=PDF a Text/RTF
PDFToText.selectText.1=Format d'Arxiu de Sortida PDFToText.selectText.1=Format d'Arxiu de Sortida
@@ -434,24 +775,15 @@ PDFToText.credit=Utilitza LibreOffice per a la conversió d'Arxius.
PDFToText.submit=Converteix PDFToText.submit=Converteix
#PDFToHTML
PDFToHTML.title=PDF a HTML PDFToHTML.title=PDF a HTML
PDFToHTML.header=PDF a HTML PDFToHTML.header=PDF a HTML
PDFToHTML.credit=Utilitza LibreOffice per a la conversió d'Arxius. PDFToHTML.credit=Utilitza LibreOffice per a la conversió d'Arxius.
PDFToHTML.submit=Converteix PDFToHTML.submit=Converteix
#PDFToXML
PDFToXML.title=PDF a XML PDFToXML.title=PDF a XML
PDFToXML.header=PDF a XML PDFToXML.header=PDF a XML
PDFToXML.credit=Utilitza LibreOffice per a la conversió d'Arxius. PDFToXML.credit=Utilitza LibreOffice per a la conversió d'Arxius.
PDFToXML.submit=Converteix PDFToXML.submit=Converteix

View File

@@ -1,7 +1,7 @@
########### ###########
# Generic # # Generic #
########### ###########
# the direction that the language is written (ltr=left to right, rtl=right to left) # the direction that the language is written (ltr=left to right, rtl = right to left)
language.direction=ltr language.direction=ltr
pdfPrompt=PDF auswählen pdfPrompt=PDF auswählen
@@ -20,116 +20,441 @@ close=Schließen
filesSelected=Dateien ausgewählt filesSelected=Dateien ausgewählt
noFavourites=Keine Favoriten hinzugefügt noFavourites=Keine Favoriten hinzugefügt
bored=Gelangweiltes Warten? bored=Gelangweiltes Warten?
############# alphabet=Alphabet
# HOME-PAGE #
#############
home.desc=Ihr lokal gehosteter One-Stop-Shop für alle Ihre PDF-Anforderungen.
navbar.convert=Konvertieren
navbar.security=Sicherheit
navbar.other=Anderes
navbar.darkmode=Dark Mode
navbar.pageOps=Seitenoperationen
home.multiTool.title=PDF-Multitool
home.multiTool.desc=Seiten zusammenführen, drehen, neu anordnen und entfernen
home.merge.title=Zusammenführen
home.merge.desc=Mehrere PDF-Dateien zu einer einzigen zusammenführen.
home.split.title=Aufteilen
home.split.desc=PDFs in mehrere Dokumente aufteilen.
home.rotate.title=Drehen
home.rotate.desc=Drehen Sie Ihre PDFs ganz einfach.
home.imageToPdf.title=Bild zu PDF
home.imageToPdf.desc=Konvertieren Sie ein Bild (PNG, JPEG, GIF) in ein PDF.
home.pdfToImage.title=PDF zu Bild
home.pdfToImage.desc=Konvertieren Sie ein PDF in ein Bild (PNG, JPEG, GIF).
home.pdfOrganiser.title=Organisieren
home.pdfOrganiser.desc=Seiten entfernen und Seitenreihenfolge ändern.
home.addImage.title=Bild einfügen
home.addImage.desc=Fügt ein Bild an eine bestimmte Stelle im PDF ein (Work in progress).
home.watermark.title=Wasserzeichen hinzufügen
home.watermark.desc=Fügen Sie ein eigenes Wasserzeichen zu Ihrem PDF hinzu.
home.remove-watermark.title=Wasserzeichen entfernen
home.remove-watermark.desc=Wasserzeichen aus Ihrem PDF-Dokument entfernen.
home.permissions.title=Berechtigungen ändern
home.permissions.desc=Die Berechtigungen für Ihr PDF-Dokument verändern.
home.removePages.title=Entfernen
home.removePages.desc=Ungewollte Seiten aus dem PDF entfernen.
home.addPassword.title=Passwort hinzufügen
home.addPassword.desc=Das PDF mit einem Passwort verschlüsseln.
home.removePassword.title=Passwort entfernen
home.removePassword.desc=Den Passwortschutz eines PDFs entfernen.
home.compressPdfs.title=Komprimieren
home.compressPdfs.desc=PDF komprimieren um die Dateigröße zu reduzieren.
home.changeMetadata.title=Metadaten ändern
home.changeMetadata.desc=Ändern/Entfernen/Hinzufügen von Metadaten aus einem PDF-Dokument
home.fileToPDF.title=Datei in PDF konvertieren
home.fileToPDF.desc=Konvertieren Sie nahezu jede Datei in PDF (DOCX, PNG, XLS, PPT, TXT und mehr)
home.ocr.title=Führe OCR auf PDF- und/oder Cleanup-Scans aus
home.ocr.desc=Cleanup scannt und erkennt Text aus Bildern in einer PDF-Datei und fügt ihn erneut als Text hinzu.
home.extractImages.title=Bilder extrahieren
home.extractImages.desc=Extrahiert alle Bilder aus einer PDF-Datei und speichert sie als Zip-Datei
home.pdfToPDFA.title=PDF zu PDF/A konvertieren
home.pdfToPDFA.desc=PDF zu PDF/A für Langzeitarchivierung konvertieren
home.PDFToWord.title=PDF zu Word
home.PDFToWord.desc=PDF in Word-Formate konvertieren (DOC, DOCX und ODT)
home.PDFToPresentation.title=PDF zu Präsentation
home.PDFToPresentation.desc=PDF in Präsentationsformate konvertieren (PPT, PPTX und ODP)
home.PDFToText.title=PDF in Text/RTF
home.PDFToText.desc=PDF in Text- oder RTF-Format konvertieren
home.PDFToHTML.title=PDF in HTML
home.PDFToHTML.desc=PDF in HTML-Format konvertieren
home.PDFToXML.title=PDF in XML
home.PDFToXML.desc=PDF in XML-Format konvertieren
home.ScannerImageSplit.title=Gescannte Fotos erkennen/aufteilen
home.ScannerImageSplit.desc=Teilt mehrere Fotos innerhalb eines Fotos/PDF
home.sign.title=Signieren
home.sign.desc=Fügt PDF-Signaturen durch Zeichnung, Text oder Bild hinzu
home.flatten.title=Abflachen
home.flatten.desc=Alle interaktiven Elemente und Formulare aus einem PDF entfernen
home.repair.title=Reparatur
home.repair.desc=Versucht, ein beschädigtes/kaputtes PDF zu reparieren
home.removeBlanks.title=Leere Seiten entfernen
home.removeBlanks.desc=Erkennt und entfernt leere Seiten aus einem Dokument
home.compare.title=Vergleichen
home.compare.desc=Vergleicht und zeigt die Unterschiede zwischen zwei PDF-Dokumenten an
downloadPdf=PDF herunterladen downloadPdf=PDF herunterladen
text=Text text=Text
font=Schriftart font=Schriftart
selectFillter=-- Auswählen -- selectFillter=-- Auswählen --
pageNum=Seitenzahl pageNum=Seitenzahl
sizes.small=Small
sizes.medium=Medium
sizes.large=Large
sizes.x-large=X-Large
error.pdfPassword=The PDF Document is passworded and either the password was not provided or was incorrect
#############
# NAVBAR #
#############
navbar.convert=Konvertieren
navbar.security=Sicherheit
navbar.other=Anderes
navbar.darkmode=Dark Mode
navbar.pageOps=Seitenoperationen
navbar.settings=Einstellungen
#############
# SETTINGS #
#############
settings.title=Einstellungen
settings.update=Update verfügbar
settings.appVersion=App-Version:
settings.downloadOption.title=Download-Option wählen (für einzelne Dateien, die keine Zip-Downloads sind):
settings.downloadOption.1=Im selben Fenster öffnen
settings.downloadOption.2=In neuem Fenster öffnen
settings.downloadOption.3=Datei herunterladen
settings.zipThreshold=Dateien komprimieren, wenn die Anzahl der heruntergeladenen Dateien überschritten wird
#############
# HOME-PAGE #
#############
home.desc=Ihr lokal gehosteter One-Stop-Shop für alle Ihre PDF-Anforderungen.
home.multiTool.title=PDF-Multitool
home.multiTool.desc=Seiten zusammenführen, drehen, neu anordnen und entfernen
multiTool.tags=Multi Tool,Multi operation,UI,click drag,front end,client side
home.merge.title=Zusammenführen
home.merge.desc=Mehrere PDF-Dateien zu einer einzigen zusammenführen.
merge.tags=merge,Page operations,Back end,server side
home.split.title=Aufteilen
home.split.desc=PDFs in mehrere Dokumente aufteilen.
##########################
### TODO: Translate ###
##########################
split.tags=Page operations,divide,Multi Page,cut,server side
home.rotate.title=Drehen
home.rotate.desc=Drehen Sie Ihre PDFs ganz einfach.
##########################
### TODO: Translate ###
##########################
rotate.tags=server side
home.imageToPdf.title=Bild zu PDF
home.imageToPdf.desc=Konvertieren Sie ein Bild (PNG, JPEG, GIF) in ein PDF.
##########################
### TODO: Translate ###
##########################
imageToPdf.tags=conversion,img,jpg,picture,photo
home.pdfToImage.title=PDF zu Bild
home.pdfToImage.desc=Konvertieren Sie ein PDF in ein Bild (PNG, JPEG, GIF).
##########################
### TODO: Translate ###
##########################
pdfToImage.tags=conversion,img,jpg,picture,photo
home.pdfOrganiser.title=Organisieren
home.pdfOrganiser.desc=Seiten entfernen und Seitenreihenfolge ändern.
##########################
### TODO: Translate ###
##########################
pdfOrganiser.tags=duplex,even,odd,sort,move
home.addImage.title=Bild einfügen
home.addImage.desc=Fügt ein Bild an eine bestimmte Stelle im PDF ein (Work in progress).
##########################
### TODO: Translate ###
##########################
addImage.tags=img,jpg,picture,photo
home.watermark.title=Wasserzeichen hinzufügen
home.watermark.desc=Fügen Sie ein eigenes Wasserzeichen zu Ihrem PDF hinzu.
##########################
### TODO: Translate ###
##########################
watermark.tags=Text,repeating,label,own,copyright,trademark,img,jpg,picture,photo
home.permissions.title=Berechtigungen ändern
home.permissions.desc=Die Berechtigungen für Ihr PDF-Dokument verändern.
##########################
### TODO: Translate ###
##########################
permissions.tags=read,write,edit,print
home.removePages.title=Entfernen
home.removePages.desc=Ungewollte Seiten aus dem PDF entfernen.
##########################
### TODO: Translate ###
##########################
removePages.tags=Remove pages,delete pages
home.addPassword.title=Passwort hinzufügen
home.addPassword.desc=Das PDF mit einem Passwort verschlüsseln.
##########################
### TODO: Translate ###
##########################
addPassword.tags=secure,security
home.removePassword.title=Passwort entfernen
home.removePassword.desc=Den Passwortschutz eines PDFs entfernen.
##########################
### TODO: Translate ###
##########################
removePassword.tags=secure,Decrypt,security,unpassword,delete password
home.compressPdfs.title=Komprimieren
home.compressPdfs.desc=PDF komprimieren um die Dateigröße zu reduzieren.
##########################
### TODO: Translate ###
##########################
compressPdfs.tags=squish,small,tiny
home.changeMetadata.title=Metadaten ändern
home.changeMetadata.desc=Ändern/Entfernen/Hinzufügen von Metadaten aus einem PDF-Dokument
##########################
### TODO: Translate ###
##########################
changeMetadata.tags==Title,author,date,creation,time,publisher,producer,stats
home.fileToPDF.title=Datei in PDF konvertieren
home.fileToPDF.desc=Konvertieren Sie nahezu jede Datei in PDF (DOCX, PNG, XLS, PPT, TXT und mehr)
##########################
### TODO: Translate ###
##########################
fileToPDF.tags=transformation,format,document,picture,slide,text,conversion,office,docs,word,excel,powerpoint
home.ocr.title=Führe OCR auf PDF- und/oder Cleanup-Scans aus
home.ocr.desc=Cleanup scannt und erkennt Text aus Bildern in einer PDF-Datei und fügt ihn erneut als Text hinzu.
##########################
### TODO: Translate ###
##########################
ocr.tags=recognition,text,image,scan,read,identify,detection,editable
home.extractImages.title=Bilder extrahieren
home.extractImages.desc=Extrahiert alle Bilder aus einer PDF-Datei und speichert sie als Zip-Datei
##########################
### TODO: Translate ###
##########################
extractImages.tags=picture,photo,save,archive,zip,capture,grab
home.pdfToPDFA.title=PDF zu PDF/A konvertieren
home.pdfToPDFA.desc=PDF zu PDF/A für Langzeitarchivierung konvertieren
##########################
### TODO: Translate ###
##########################
pdfToPDFA.tags=archive,long-term,standard,conversion,storage,preservation
home.PDFToWord.title=PDF zu Word
home.PDFToWord.desc=PDF in Word-Formate konvertieren (DOC, DOCX und ODT)
##########################
### TODO: Translate ###
##########################
PDFToWord.tags=doc,docx,odt,word,transformation,format,conversion,office,microsoft,docfile
home.PDFToPresentation.title=PDF zu Präsentation
home.PDFToPresentation.desc=PDF in Präsentationsformate konvertieren (PPT, PPTX und ODP)
##########################
### TODO: Translate ###
##########################
PDFToPresentation.tags=slides,show,office,microsoft
home.PDFToText.title=PDF in Text/RTF
home.PDFToText.desc=PDF in Text- oder RTF-Format konvertieren
##########################
### TODO: Translate ###
##########################
PDFToText.tags=richformat,richtextformat,rich text format
home.PDFToHTML.title=PDF in HTML
home.PDFToHTML.desc=PDF in HTML-Format konvertieren
##########################
### TODO: Translate ###
##########################
PDFToHTML.tags=web content,browser friendly
home.PDFToXML.title=PDF in XML
home.PDFToXML.desc=PDF in XML-Format konvertieren
##########################
### TODO: Translate ###
##########################
PDFToXML.tags=data-extraction,structured-content,interop,transformation,convert
home.ScannerImageSplit.title=Gescannte Fotos erkennen/aufteilen
home.ScannerImageSplit.desc=Teilt mehrere Fotos innerhalb eines Fotos/PDF
##########################
### TODO: Translate ###
##########################
ScannerImageSplit.tags=separate,auto-detect,scans,multi-photo,organize
home.sign.title=Signieren
home.sign.desc=Fügt PDF-Signaturen durch Zeichnung, Text oder Bild hinzu
##########################
### TODO: Translate ###
##########################
sign.tags=authorize,initials,drawn-signature,text-sign,image-signature
home.flatten.title=Abflachen
home.flatten.desc=Alle interaktiven Elemente und Formulare aus einem PDF entfernen
##########################
### TODO: Translate ###
##########################
flatten.tags=static,deactivate,non-interactive,streamline
home.repair.title=Reparatur
home.repair.desc=Versucht, ein beschädigtes/kaputtes PDF zu reparieren
##########################
### TODO: Translate ###
##########################
repair.tags=fix,restore,correction,recover
home.removeBlanks.title=Leere Seiten entfernen
home.removeBlanks.desc=Erkennt und entfernt leere Seiten aus einem Dokument
##########################
### TODO: Translate ###
##########################
removeBlanks.tags=cleanup,streamline,non-content,organize
home.compare.title=Vergleichen
home.compare.desc=Vergleicht und zeigt die Unterschiede zwischen zwei PDF-Dokumenten an
##########################
### TODO: Translate ###
##########################
compare.tags=differentiate,contrast,changes,analysis
home.certSign.title=Sign with Certificate
home.certSign.desc=Signs a PDF with a Certificate/Key (PEM/P12)
##########################
### TODO: Translate ###
##########################
certSign.tags=authenticate,PEM,P12,official,encrypt
home.pageLayout.title=Multi-Page Layout
home.pageLayout.desc=Merge multiple pages of a PDF document into a single page
##########################
### TODO: Translate ###
##########################
pageLayout.tags=merge,composite,single-view,organize
home.scalePages.title=Adjust page size/scale
home.scalePages.desc=Change the size/scale of page and/or its contents.
##########################
### TODO: Translate ###
##########################
scalePages.tags=resize,modify,dimension,adapt
home.pipeline.title=Pipeline (Advanced)
home.pipeline.desc=Run multiple actions on PDFs by defining pipeline scripts
##########################
### TODO: Translate ###
##########################
pipeline.tags=automate,sequence,scripted,batch-process
home.add-page-numbers.title=Add Page Numbers
home.add-page-numbers.desc=Add Page numbers throughout a document in a set location
##########################
### TODO: Translate ###
##########################
add-page-numbers.tags=paginate,label,organize,index
home.auto-rename.title=Auto Rename PDF File
home.auto-rename.desc=Auto renames a PDF file based on its detected header
##########################
### TODO: Translate ###
##########################
auto-rename.tags=auto-detect,header-based,organize,relabel
home.adjust-contrast.title=Adjust Colors/Contrast
home.adjust-contrast.desc=Adjust Contrast, Saturation and Brightness of a PDF
##########################
### TODO: Translate ###
##########################
adjust-contrast.tags=color-correction,tune,modify,enhance
home.crop.title=Crop PDF
home.crop.desc=Crop a PDF to reduce its size (maintains text!)
##########################
### TODO: Translate ###
##########################
crop.tags=trim,shrink,edit,shape
home.autoSplitPDF.title=Auto Split Pages
home.autoSplitPDF.desc=Auto Split Scanned PDF with physical scanned page splitter QR Code
##########################
### TODO: Translate ###
##########################
autoSplitPDF.tags=QR-based,separate,scan-segment,organize
home.sanitizePdf.title=Sanitize
home.sanitizePdf.desc=Remove scripts and other elements from PDF files
##########################
### TODO: Translate ###
##########################
sanitizePdf.tags=clean,secure,safe,remove-threats
##########################
### TODO: Translate ###
##########################
home.URLToPDF.title=URL/Website To PDF
home.URLToPDF.desc=Converts any http(s)URL to PDF
URLToPDF.tags=web-capture,save-page,web-to-doc,archive
##########################
### TODO: Translate ###
##########################
home.HTMLToPDF.title=HTML to PDF
home.HTMLToPDF.desc=Converts any HTML file or zip to PDF
HTMLToPDF.tags=markup,web-content,transformation,convert
###########################
# #
# WEB PAGES #
# #
###########################
#url-to-pdf
URLToPDF.title=URL To PDF
URLToPDF.header=URL To PDF
URLToPDF.submit=Convert
URLToPDF.credit=Uses WeasyPrint
#html-to-pdf
HTMLToPDF.title=HTML To PDF
HTMLToPDF.header=HTML To PDF
HTMLToPDF.help=Accepts HTML files and ZIPs containing html/css/images etc required
HTMLToPDF.submit=Convert
HTMLToPDF.credit=Uses WeasyPrint
#sanitizePDF
sanitizePDF.title=Sanitize PDF
sanitizePDF.header=Sanitize a PDF file
sanitizePDF.selectText.1=Remove JavaScript actions
sanitizePDF.selectText.2=Remove embedded files
sanitizePDF.selectText.3=Remove metadata
sanitizePDF.selectText.4=Remove links
sanitizePDF.selectText.5=Remove fonts
sanitizePDF.submit=Sanitize PDF
#addPageNumbers
addPageNumbers.title=Add Page Numbers
addPageNumbers.header=Add Page Numbers
addPageNumbers.selectText.1=Select PDF file:
addPageNumbers.selectText.2=Margin Size
addPageNumbers.selectText.3=Position
addPageNumbers.selectText.4=Starting Number
addPageNumbers.selectText.5=Pages to Number
addPageNumbers.selectText.6=Custom Text
addPageNumbers.submit=Add Page Numbers
#auto-rename
auto-rename.title=Auto Rename
auto-rename.header=Auto Rename PDF
auto-rename.submit=Auto Rename
#adjustContrast
adjustContrast.title=Adjust Contrast
adjustContrast.header=Adjust Contrast
adjustContrast.contrast=Contrast:
adjustContrast.brightness=Brightness:
adjustContrast.saturation=Saturation:
adjustContrast.download=Download
#crop
crop.title=Crop
crop.header=Crop Image
crop.submit=Submit
#autoSplitPDF
autoSplitPDF.title=Auto Split PDF
autoSplitPDF.header=Auto Split PDF
autoSplitPDF.description=Print, Insert, Scan, upload, and let us auto-separate your documents. No manual work sorting needed.
autoSplitPDF.selectText.1=Print out some divider sheets from below (Black and white is fine).
autoSplitPDF.selectText.2=Scan all your documents at once by inserting the divider sheet between them.
autoSplitPDF.selectText.3=Upload the single large scanned PDF file and let Stirling PDF handle the rest.
autoSplitPDF.selectText.4=Divider pages are automatically detected and removed, guaranteeing a neat final document.
autoSplitPDF.formPrompt=Submit PDF containing Stirling-PDF Page dividers:
autoSplitPDF.duplexMode=Duplex Mode (Front and back scanning)
autoSplitPDF.dividerDownload1=Download 'Auto Splitter Divider (minimal).pdf'
autoSplitPDF.dividerDownload2=Download 'Auto Splitter Divider (with instructions).pdf'
autoSplitPDF.submit=Submit
#pipeline
pipeline.title=Pipeline
#pageLayout
pageLayout.title=Multi Page Layout
pageLayout.header=Multi Page Layout
pageLayout.pagesPerSheet=Pages per sheet:
pageLayout.submit=Submit
#scalePages
scalePages.title=Adjust page-scale
scalePages.header=Adjust page-scale
scalePages.pageSize=Size of a page of the document.
scalePages.scaleFactor=Zoom level (crop) of a page.
scalePages.submit=Submit
#certSign
certSign.title=Zertifikatsignierung certSign.title=Zertifikatsignierung
certSign.header=Signieren Sie ein PDF mit Ihrem Zertifikat (in Arbeit) certSign.header=Signieren Sie ein PDF mit Ihrem Zertifikat (in Arbeit)
certSign.selectPDF=Wählen Sie eine PDF-Datei zum Signieren aus: certSign.selectPDF=Wählen Sie eine PDF-Datei zum Signieren aus:
@@ -144,6 +469,8 @@ certSign.location=Standort
certSign.name=Name certSign.name=Name
certSign.submit=PDF signieren certSign.submit=PDF signieren
#removeBlanks
removeBlanks.title=Leerzeichen entfernen removeBlanks.title=Leerzeichen entfernen
removeBlanks.header=Leere Seiten entfernen removeBlanks.header=Leere Seiten entfernen
removeBlanks.threshold=Schwellenwert: removeBlanks.threshold=Schwellenwert:
@@ -152,12 +479,16 @@ removeBlanks.whitePercent=Weißprozentsatz (%):
removeBlanks.whitePercentDesc=Prozentsatz der Seite, die weiß sein muss, um entfernt zu werden removeBlanks.whitePercentDesc=Prozentsatz der Seite, die weiß sein muss, um entfernt zu werden
removeBlanks.submit=Leerzeichen entfernen removeBlanks.submit=Leerzeichen entfernen
#compare
compare.title=Vergleichen compare.title=Vergleichen
compare.header=PDFs vergleichen compare.header=PDFs vergleichen
compare.document.1=Dokument 1 compare.document.1=Dokument 1
compare.document.2=Dokument 2 compare.document.2=Dokument 2
compare.submit=Vergleichen compare.submit=Vergleichen
#sign
sign.title=Signieren sign.title=Signieren
sign.header=PDFs signieren sign.header=PDFs signieren
sign.upload=Bild hochladen sign.upload=Bild hochladen
@@ -166,14 +497,20 @@ sign.text=Texteingabe
sign.clear=Klar sign.clear=Klar
sign.add=Hinzufügen sign.add=Hinzufügen
#repair
repair.title=Reparieren repair.title=Reparieren
Repair.header=PDFs reparieren repair.header=Repair PDFs
repair.submit=Reparieren repair.submit=Reparieren
#flatten
flatten.title=Abflachen flatten.title=Abflachen
flatten.header=PDFs reduzieren flatten.header=PDFs reduzieren
flatten.submit=Abflachen flatten.submit=Abflachen
#ScannerImageSplit
ScannerImageSplit.selectText.1=Winkelschwelle: ScannerImageSplit.selectText.1=Winkelschwelle:
ScannerImageSplit.selectText.2=Legt den minimalen absoluten Winkel fest, der erforderlich ist, damit das Bild gedreht werden kann (Standard: 10). ScannerImageSplit.selectText.2=Legt den minimalen absoluten Winkel fest, der erforderlich ist, damit das Bild gedreht werden kann (Standard: 10).
ScannerImageSplit.selectText.3=Toleranz: ScannerImageSplit.selectText.3=Toleranz:
@@ -186,16 +523,6 @@ ScannerImageSplit.selectText.9=Randgröße:
ScannerImageSplit.selectText.10=Legt die Größe des hinzugefügten und entfernten Randes fest, um weiße Ränder in der Ausgabe zu verhindern (Standard: 1). ScannerImageSplit.selectText.10=Legt die Größe des hinzugefügten und entfernten Randes fest, um weiße Ränder in der Ausgabe zu verhindern (Standard: 1).
navbar.settings=Einstellungen
settings.title=Einstellungen
settings.update=Update verfügbar
settings.appVersion=App-Version:
settings.downloadOption.title=Download-Option wählen (für einzelne Dateien, die keine Zip-Downloads sind):
settings.downloadOption.1=Im selben Fenster öffnen
settings.downloadOption.2=In neuem Fenster öffnen
settings.downloadOption.3=Datei herunterladen
settings.zipThreshold=Dateien komprimieren, wenn die Anzahl der heruntergeladenen Dateien überschritten wird
#OCR #OCR
ocr.title=OCR / Scan-Bereinigung ocr.title=OCR / Scan-Bereinigung
ocr.header=Scans bereinigen / OCR (Optical Character Recognition) ocr.header=Scans bereinigen / OCR (Optical Character Recognition)
@@ -216,6 +543,7 @@ ocr.credit=Dieser Dienst verwendet OCRmyPDF und Tesseract für OCR.
ocr.submit=PDF mit OCR verarbeiten ocr.submit=PDF mit OCR verarbeiten
#extractImages
extractImages.title=Bilder extrahieren extractImages.title=Bilder extrahieren
extractImages.header=Bilder extrahieren extractImages.header=Bilder extrahieren
extractImages.selectText=Wählen Sie das Bildformat aus, in das extrahierte Bilder konvertiert werden sollen extractImages.selectText=Wählen Sie das Bildformat aus, in das extrahierte Bilder konvertiert werden sollen
@@ -230,15 +558,6 @@ fileToPDF.supportedFileTypes=Unterstützte Dateitypen sollten die folgenden enth
fileToPDF.submit=In PDF konvertieren fileToPDF.submit=In PDF konvertieren
#Add image
addImage.title=Bild hinzufügen
addImage.header=Ein Bild einfügen
addImage.everyPage=Jede Seite?
addImage.submit=Bild hinzufügen
#compress #compress
compress.title=Komprimieren compress.title=Komprimieren
compress.header=PDF komprimieren compress.header=PDF komprimieren
@@ -251,26 +570,38 @@ compress.selectText.5=Erwartete PDF-Größe (z. B. 25 MB, 10,8 MB, 25 KB)
compress.submit=Komprimieren compress.submit=Komprimieren
#Add image
addImage.title=Bild hinzufügen
addImage.header=Ein Bild einfügen
addImage.everyPage=Jede Seite?
addImage.upload=Bild hinzufügen
addImage.submit=Bild hinzufügen
#merge #merge
merge.title=Zusammenführen merge.title=Zusammenführen
merge.header=Mehrere PDFs zusammenführen (2+) merge.header=Mehrere PDFs zusammenführen (2+)
merge.submit=Zusammenführen merge.submit=Zusammenführen
#pdfOrganiser #pdfOrganiser
pdfOrganiser.title=Seiten anordnen pdfOrganiser.title=Seiten anordnen
pdfOrganiser.header=PDF Seitenorganisation pdfOrganiser.header=PDF Seitenorganisation
pdfOrganiser.submit=Seiten anordnen pdfOrganiser.submit=Seiten anordnen
#Mehrfachwerkzeug
#multiTool
multiTool.title=PDF-Multitool multiTool.title=PDF-Multitool
multiTool.header=PDF-Multitool multiTool.header=PDF-Multitool
#pageRemover #pageRemover
pageRemover.title=Seiten entfernen pageRemover.title=Seiten entfernen
pageRemover.header=PDF Seiten entfernen pageRemover.header=PDF Seiten entfernen
pageRemover.pagesToDelete=Seiten zu entfernen (geben Sie eine Kommagetrennte Liste der Seitenzahlen an): pageRemover.pagesToDelete=Seiten zu entfernen (geben Sie eine Kommagetrennte Liste der Seitenzahlen an):
pageRemover.submit=Seiten löschen pageRemover.submit=Seiten löschen
#rotate #rotate
rotate.title=PDF drehen rotate.title=PDF drehen
rotate.header=PDF drehen rotate.header=PDF drehen
@@ -278,8 +609,6 @@ rotate.selectAngle=Wählen Sie den Winkel (in Vielfachen von 90 Grad):
rotate.submit=Drehen rotate.submit=Drehen
#merge #merge
split.title=PDF aufteilen split.title=PDF aufteilen
split.header=PDF aufteilen split.header=PDF aufteilen
@@ -305,6 +634,7 @@ imageToPDF.selectText.3=Mehrere Dateien verarbeiten (nur aktiv, wenn Sie mit meh
imageToPDF.selectText.4=In ein einziges PDF zusammenführen imageToPDF.selectText.4=In ein einziges PDF zusammenführen
imageToPDF.selectText.5=In separate PDFs konvertieren imageToPDF.selectText.5=In separate PDFs konvertieren
#pdfToImage #pdfToImage
pdfToImage.title=PDF zu Bild pdfToImage.title=PDF zu Bild
pdfToImage.header=PDF zu Bild pdfToImage.header=PDF zu Bild
@@ -318,6 +648,7 @@ pdfToImage.grey=Graustufen
pdfToImage.blackwhite=Schwarzweiß (Datenverlust möglich!) pdfToImage.blackwhite=Schwarzweiß (Datenverlust möglich!)
pdfToImage.submit=Umwandeln pdfToImage.submit=Umwandeln
#addPassword #addPassword
addPassword.title=Passwort hinzufügen addPassword.title=Passwort hinzufügen
addPassword.header=Passwort hinzufügen (Verschlüsseln) addPassword.header=Passwort hinzufügen (Verschlüsseln)
@@ -334,8 +665,12 @@ addPassword.selectText.10=Modifizierung verhindern
addPassword.selectText.11=Ändern von Kommentaren verhindern addPassword.selectText.11=Ändern von Kommentaren verhindern
addPassword.selectText.12=Drucken verhindern addPassword.selectText.12=Drucken verhindern
addPassword.selectText.13=Drucken verschiedener Formate verhindern addPassword.selectText.13=Drucken verschiedener Formate verhindern
addPassword.selectText.14=Owner Password
addPassword.selectText.15=Restricts what can be done with the document once it is opened (Not supported by all readers)
addPassword.selectText.16=Restricts the opening of the document itself
addPassword.submit=Verschlüsseln addPassword.submit=Verschlüsseln
#watermark #watermark
watermark.title=Wasserzeichen hinzufügen watermark.title=Wasserzeichen hinzufügen
watermark.header=Wasserzeichen hinzufügen watermark.header=Wasserzeichen hinzufügen
@@ -348,6 +683,7 @@ watermark.selectText.6=höheSpacer (vertikaler Abstand zwischen den einzelnen Wa
watermark.selectText.7=Deckkraft (0% - 100 %): watermark.selectText.7=Deckkraft (0% - 100 %):
watermark.submit=Wasserzeichen hinzufügen watermark.submit=Wasserzeichen hinzufügen
#remove-watermark #remove-watermark
remove-watermark.title=Wasserzeichen entfernen remove-watermark.title=Wasserzeichen entfernen
remove-watermark.header=Wasserzeichen entfernen remove-watermark.header=Wasserzeichen entfernen
@@ -355,6 +691,7 @@ remove-watermark.selectText.1=PDF auswählen, um Wasserzeichen zu entfernen von:
remove-watermark.selectText.2=Wasserzeichentext: remove-watermark.selectText.2=Wasserzeichentext:
remove-watermark.submit=Wasserzeichen entfernen remove-watermark.submit=Wasserzeichen entfernen
#Change permissions #Change permissions
permissions.title=Berechtigungen ändern permissions.title=Berechtigungen ändern
permissions.header=Berechtigungen ändern permissions.header=Berechtigungen ändern
@@ -371,6 +708,7 @@ permissions.selectText.9=Drucken verhindern
permissions.selectText.10=Drucken verschiedener Formate verhindern permissions.selectText.10=Drucken verschiedener Formate verhindern
permissions.submit=Ändern permissions.submit=Ändern
#remove password #remove password
removePassword.title=Passwort entfernen removePassword.title=Passwort entfernen
removePassword.header=Passwort entfernen (Entschlüsseln) removePassword.header=Passwort entfernen (Entschlüsseln)
@@ -379,7 +717,8 @@ removePassword.selectText.2=Passwort
removePassword.submit=Entfernen removePassword.submit=Entfernen
changeMetadata.title=Metadaten ändern #changeMetadata
changeMetadata.title=Titel:
changeMetadata.header=Metadaten ändern changeMetadata.header=Metadaten ändern
changeMetadata.selectText.1=Bitte bearbeiten Sie die Variablen, die Sie ändern möchten changeMetadata.selectText.1=Bitte bearbeiten Sie die Variablen, die Sie ändern möchten
changeMetadata.selectText.2=Alle Metadaten löschen changeMetadata.selectText.2=Alle Metadaten löschen
@@ -398,28 +737,29 @@ changeMetadata.selectText.5=Benutzerdefinierten Metadateneintrag hinzufügen
changeMetadata.submit=Ändern changeMetadata.submit=Ändern
#xlsToPdf
xlsToPdf.title=Excel in PDF xlsToPdf.title=Excel in PDF
xlsToPdf.header=Excel in PDF xlsToPdf.header=Excel in PDF
xlsToPdf.selectText.1=XLS- oder XLSX-Excel-Tabelle zum Konvertieren auswählen xlsToPdf.selectText.1=XLS- oder XLSX-Excel-Tabelle zum Konvertieren auswählen
xlsToPdf.convert=konvertieren xlsToPdf.convert=konvertieren
#pdfToPDFA
pdfToPDFA.title=PDF zu PDF/A pdfToPDFA.title=PDF zu PDF/A
pdfToPDFA.header=PDF zu PDF/A pdfToPDFA.header=PDF zu PDF/A
pdfToPDFA.credit=Dieser Dienst verwendet OCRmyPDF für die PDF/A-Konvertierung pdfToPDFA.credit=Dieser Dienst verwendet OCRmyPDF für die PDF/A-Konvertierung
pdfToPDFA.submit=Konvertieren pdfToPDFA.submit=Konvertieren
#PDFToWord
PDFToWord.title=PDF zu Word PDFToWord.title=PDF zu Word
PDFToWord.header=PDF zu Word PDFToWord.header=PDF zu Word
PDFToWord.selectText.1=Ausgabedateiformat PDFToWord.selectText.1=Ausgabedateiformat
PDFToWord.credit=Dieser Dienst verwendet LibreOffice für die Dateikonvertierung. PDFToWord.credit=Dieser Dienst verwendet LibreOffice für die Dateikonvertierung.
PDFToWord.submit=Konvertieren PDFToWord.submit=Konvertieren
#PDFToPresentation
PDFToPresentation.title=PDF zu Präsentation PDFToPresentation.title=PDF zu Präsentation
PDFToPresentation.header=PDF zu Präsentation PDFToPresentation.header=PDF zu Präsentation
PDFToPresentation.selectText.1=Ausgabedateiformat PDFToPresentation.selectText.1=Ausgabedateiformat
@@ -427,6 +767,7 @@ PDFToPresentation.credit=Dieser Dienst verwendet LibreOffice für die Dateikonve
PDFToPresentation.submit=Konvertieren PDFToPresentation.submit=Konvertieren
#PDFToText
PDFToText.title=PDF in Text/RTF PDFToText.title=PDF in Text/RTF
PDFToText.header=PDF in Text/RTF PDFToText.header=PDF in Text/RTF
PDFToText.selectText.1=Ausgabedateiformat PDFToText.selectText.1=Ausgabedateiformat
@@ -434,27 +775,15 @@ PDFToText.credit=Dieser Dienst verwendet LibreOffice für die Dateikonvertierung
PDFToText.submit=Konvertieren PDFToText.submit=Konvertieren
#PDFToHTML
PDFToHTML.title=PDF in HTML PDFToHTML.title=PDF in HTML
PDFToHTML.header=PDF in HTML PDFToHTML.header=PDF in HTML
PDFToHTML.credit=Dieser Dienst verwendet LibreOffice für die Dateikonvertierung. PDFToHTML.credit=Dieser Dienst verwendet LibreOffice für die Dateikonvertierung.
PDFToHTML.submit=Konvertieren PDFToHTML.submit=Konvertieren
#PDFToXML
PDFToXML.title=PDF in XML PDFToXML.title=PDF in XML
PDFToXML.header=PDF in XML PDFToXML.header=PDF in XML
PDFToXML.credit=Dieser Dienst verwendet LibreOffice für die Dateikonvertierung. PDFToXML.credit=Dieser Dienst verwendet LibreOffice für die Dateikonvertierung.
PDFToXML.submit=Konvertieren PDFToXML.submit=Konvertieren

View File

@@ -10,7 +10,7 @@ multiPdfDropPrompt=Select (or drag & drop) all PDFs you require
imgPrompt=Select Image(s) imgPrompt=Select Image(s)
genericSubmit=Submit genericSubmit=Submit
processTimeWarning=Warning: This process can take up to a minute depending on file-size processTimeWarning=Warning: This process can take up to a minute depending on file-size
pageOrderPrompt=Page Order (Enter a comma-separated list of page numbers) : pageOrderPrompt=Custom Page Order (Enter a comma-separated list of page numbers or Functions like 2n+1) :
goToPage=Go goToPage=Go
true=True true=True
false=False false=False
@@ -20,121 +20,321 @@ close=Close
filesSelected=files selected filesSelected=files selected
noFavourites=No favourites added noFavourites=No favourites added
bored=Bored Waiting? bored=Bored Waiting?
alphabet=Alphabet
downloadPdf=Download PDF
text=Text
font=Font
selectFillter=-- Select --
pageNum=Page Number
sizes.small=Small
sizes.medium=Medium
sizes.large=Large
sizes.x-large=X-Large
error.pdfPassword=The PDF Document is passworded and either the password was not provided or was incorrect
#############
# NAVBAR #
#############
navbar.convert=Convert
navbar.security=Security
navbar.other=Other
navbar.darkmode=Dark Mode
navbar.pageOps=Page Operations
navbar.settings=Settings
#############
# SETTINGS #
#############
settings.title=Settings
settings.update=Update available
settings.appVersion=App Version:
settings.downloadOption.title=Choose download option (For single file non zip downloads):
settings.downloadOption.1=Open in same window
settings.downloadOption.2=Open in new window
settings.downloadOption.3=Download file
settings.zipThreshold=Zip files when the number of downloaded files exceeds
############# #############
# HOME-PAGE # # HOME-PAGE #
############# #############
home.desc=Your locally hosted one-stop-shop for all your PDF needs. home.desc=Your locally hosted one-stop-shop for all your PDF needs.
navbar.convert=Convert
navbar.security=Security
navbar.other=Other
navbar.darkmode=Dark Mode
navbar.pageOps=Page Operations
home.multiTool.title=PDF Multi Tool home.multiTool.title=PDF Multi Tool
home.multiTool.desc=Merge, Rotate, Rearrange, and Remove pages home.multiTool.desc=Merge, Rotate, Rearrange, and Remove pages
multiTool.tags=Multi Tool,Multi operation,UI,click drag,front end,client side,interactive,intractable,move
home.merge.title=Merge home.merge.title=Merge
home.merge.desc=Easily merge multiple PDFs into one. home.merge.desc=Easily merge multiple PDFs into one.
merge.tags=merge,Page operations,Back end,server side
home.split.title=Split home.split.title=Split
home.split.desc=Split PDFs into multiple documents home.split.desc=Split PDFs into multiple documents
split.tags=Page operations,divide,Multi Page,cut,server side
home.rotate.title=Rotate home.rotate.title=Rotate
home.rotate.desc=Easily rotate your PDFs. home.rotate.desc=Easily rotate your PDFs.
rotate.tags=server side
home.imageToPdf.title=Image to PDF home.imageToPdf.title=Image to PDF
home.imageToPdf.desc=Convert a image (PNG, JPEG, GIF) to PDF. home.imageToPdf.desc=Convert a image (PNG, JPEG, GIF) to PDF.
imageToPdf.tags=conversion,img,jpg,picture,photo
home.pdfToImage.title=PDF to Image home.pdfToImage.title=PDF to Image
home.pdfToImage.desc=Convert a PDF to a image. (PNG, JPEG, GIF) home.pdfToImage.desc=Convert a PDF to a image. (PNG, JPEG, GIF)
pdfToImage.tags=conversion,img,jpg,picture,photo
home.pdfOrganiser.title=Organise home.pdfOrganiser.title=Organise
home.pdfOrganiser.desc=Remove/Rearrange pages in any order home.pdfOrganiser.desc=Remove/Rearrange pages in any order
pdfOrganiser.tags=duplex,even,odd,sort,move
home.addImage.title=Add image home.addImage.title=Add image
home.addImage.desc=Adds a image onto a set location on the PDF (Work in progress) home.addImage.desc=Adds a image onto a set location on the PDF
addImage.tags=img,jpg,picture,photo
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
home.remove-watermark.title=Remove Watermark
home.remove-watermark.desc=Remove watermarks from your PDF document.
home.permissions.title=Change Permissions home.permissions.title=Change Permissions
home.permissions.desc=Change the permissions of your PDF document home.permissions.desc=Change the permissions of your PDF document
permissions.tags=read,write,edit,print
home.removePages.title=Remove home.removePages.title=Remove
home.removePages.desc=Delete unwanted pages from your PDF document. home.removePages.desc=Delete unwanted pages from your PDF document.
removePages.tags=Remove pages,delete pages
home.addPassword.title=Add Password home.addPassword.title=Add Password
home.addPassword.desc=Encrypt your PDF document with a password. home.addPassword.desc=Encrypt your PDF document with a password.
addPassword.tags=secure,security
home.removePassword.title=Remove Password home.removePassword.title=Remove Password
home.removePassword.desc=Remove password protection from your PDF document. home.removePassword.desc=Remove password protection from your PDF document.
removePassword.tags=secure,Decrypt,security,unpassword,delete password
home.compressPdfs.title=Compress home.compressPdfs.title=Compress
home.compressPdfs.desc=Compress PDFs to reduce their file size. home.compressPdfs.desc=Compress PDFs to reduce their file size.
compressPdfs.tags=squish,small,tiny
home.changeMetadata.title=Change Metadata home.changeMetadata.title=Change Metadata
home.changeMetadata.desc=Change/Remove/Add metadata from a PDF document home.changeMetadata.desc=Change/Remove/Add metadata from a PDF document
changeMetadata.tags==Title,author,date,creation,time,publisher,producer,stats
home.fileToPDF.title=Convert file to PDF home.fileToPDF.title=Convert file to PDF
home.fileToPDF.desc=Convert nearly any file to PDF (DOCX, PNG, XLS, PPT, TXT and more) home.fileToPDF.desc=Convert nearly any file to PDF (DOCX, PNG, XLS, PPT, TXT and more)
fileToPDF.tags=transformation,format,document,picture,slide,text,conversion,office,docs,word,excel,powerpoint
home.ocr.title=OCR / Cleanup scans home.ocr.title=OCR / Cleanup scans
home.ocr.desc=Cleanup scans and detects text from images within a PDF and re-adds it as text. home.ocr.desc=Cleanup scans and detects text from images within a PDF and re-adds it as text.
ocr.tags=recognition,text,image,scan,read,identify,detection,editable
home.extractImages.title=Extract Images home.extractImages.title=Extract Images
home.extractImages.desc=Extracts all images from a PDF and saves them to zip home.extractImages.desc=Extracts all images from a PDF and saves them to zip
extractImages.tags=picture,photo,save,archive,zip,capture,grab
home.pdfToPDFA.title=PDF to PDF/A home.pdfToPDFA.title=PDF to PDF/A
home.pdfToPDFA.desc=Convert PDF to PDF/A for long-term storage home.pdfToPDFA.desc=Convert PDF to PDF/A for long-term storage
pdfToPDFA.tags=archive,long-term,standard,conversion,storage,preservation
home.PDFToWord.title=PDF to Word home.PDFToWord.title=PDF to Word
home.PDFToWord.desc=Convert PDF to Word formats (DOC, DOCX and ODT) home.PDFToWord.desc=Convert PDF to Word formats (DOC, DOCX and ODT)
PDFToWord.tags=doc,docx,odt,word,transformation,format,conversion,office,microsoft,docfile
home.PDFToPresentation.title=PDF to Presentation home.PDFToPresentation.title=PDF to Presentation
home.PDFToPresentation.desc=Convert PDF to Presentation formats (PPT, PPTX and ODP) home.PDFToPresentation.desc=Convert PDF to Presentation formats (PPT, PPTX and ODP)
PDFToPresentation.tags=slides,show,office,microsoft
home.PDFToText.title=PDF to Text/RTF home.PDFToText.title=PDF to RTF (Text)
home.PDFToText.desc=Convert PDF to Text or RTF format home.PDFToText.desc=Convert PDF to Text or RTF format
PDFToText.tags=richformat,richtextformat,rich text format
home.PDFToHTML.title=PDF to HTML home.PDFToHTML.title=PDF to HTML
home.PDFToHTML.desc=Convert PDF to HTML format home.PDFToHTML.desc=Convert PDF to HTML format
PDFToHTML.tags=web content,browser friendly
home.PDFToXML.title=PDF to XML home.PDFToXML.title=PDF to XML
home.PDFToXML.desc=Convert PDF to XML format home.PDFToXML.desc=Convert PDF to XML format
PDFToXML.tags=data-extraction,structured-content,interop,transformation,convert
home.ScannerImageSplit.title=Detect/Split Scanned photos home.ScannerImageSplit.title=Detect/Split Scanned photos
home.ScannerImageSplit.desc=Splits multiple photos from within a photo/PDF home.ScannerImageSplit.desc=Splits multiple photos from within a photo/PDF
ScannerImageSplit.tags=separate,auto-detect,scans,multi-photo,organize
home.sign.title=Sign home.sign.title=Sign
home.sign.desc=Adds signature to PDF by drawing, text or image home.sign.desc=Adds signature to PDF by drawing, text or image
sign.tags=authorize,initials,drawn-signature,text-sign,image-signature
home.flatten.title=Flatten home.flatten.title=Flatten
home.flatten.desc=Remove all interactive elements and forms from a PDF home.flatten.desc=Remove all interactive elements and forms from a PDF
flatten.tags=static,deactivate,non-interactive,streamline
home.repair.title=Repair home.repair.title=Repair
home.repair.desc=Tries to repair a corrupt/broken PDF home.repair.desc=Tries to repair a corrupt/broken PDF
repair.tags=fix,restore,correction,recover
home.removeBlanks.title=Remove Blank pages home.removeBlanks.title=Remove Blank pages
home.removeBlanks.desc=Detects and removes blank pages from a document home.removeBlanks.desc=Detects and removes blank pages from a document
removeBlanks.tags=cleanup,streamline,non-content,organize
home.compare.title=Compare home.compare.title=Compare
home.compare.desc=Compares and shows the differences between 2 PDF Documents home.compare.desc=Compares and shows the differences between 2 PDF Documents
compare.tags=differentiate,contrast,changes,analysis
home.certSign.title=Sign with Certificate home.certSign.title=Sign with Certificate
home.certSign.desc=Signs a PDF with a Certificate/Key (PEM/P12) home.certSign.desc=Signs a PDF with a Certificate/Key (PEM/P12)
certSign.tags=authenticate,PEM,P12,official,encrypt
home.pageLayout.title=Multi-Page Layout
home.pageLayout.desc=Merge multiple pages of a PDF document into a single page
pageLayout.tags=merge,composite,single-view,organize
home.scalePages.title=Adjust page size/scale
home.scalePages.desc=Change the size/scale of a page and/or its contents.
scalePages.tags=resize,modify,dimension,adapt
home.pipeline.title=Pipeline (Advanced)
home.pipeline.desc=Run multiple actions on PDFs by defining pipeline scripts
pipeline.tags=automate,sequence,scripted,batch-process
home.add-page-numbers.title=Add Page Numbers
home.add-page-numbers.desc=Add Page numbers throughout a document in a set location
add-page-numbers.tags=paginate,label,organize,index
home.auto-rename.title=Auto Rename PDF File
home.auto-rename.desc=Auto renames a PDF file based on its detected header
auto-rename.tags=auto-detect,header-based,organize,relabel
home.adjust-contrast.title=Adjust Colors/Contrast
home.adjust-contrast.desc=Adjust Contrast, Saturation and Brightness of a PDF
adjust-contrast.tags=color-correction,tune,modify,enhance
home.crop.title=Crop PDF
home.crop.desc=Crop a PDF to reduce its size (maintains text!)
crop.tags=trim,shrink,edit,shape
home.autoSplitPDF.title=Auto Split Pages
home.autoSplitPDF.desc=Auto Split Scanned PDF with physical scanned page splitter QR Code
autoSplitPDF.tags=QR-based,separate,scan-segment,organize
home.sanitizePdf.title=Sanitize
home.sanitizePdf.desc=Remove scripts and other elements from PDF files
sanitizePdf.tags=clean,secure,safe,remove-threats
home.URLToPDF.title=URL/Website To PDF
home.URLToPDF.desc=Converts any http(s)URL to PDF
URLToPDF.tags=web-capture,save-page,web-to-doc,archive
home.HTMLToPDF.title=HTML to PDF
home.HTMLToPDF.desc=Converts any HTML file or zip to PDF
HTMLToPDF.tags=markup,web-content,transformation,convert
downloadPdf=Download PDF ###########################
text=Text # #
font=Font # WEB PAGES #
selectFillter=-- Select -- # #
pageNum=Page Number ###########################
#url-to-pdf
URLToPDF.title=URL To PDF
URLToPDF.header=URL To PDF
URLToPDF.submit=Convert
URLToPDF.credit=Uses WeasyPrint
#html-to-pdf
HTMLToPDF.title=HTML To PDF
HTMLToPDF.header=HTML To PDF
HTMLToPDF.help=Accepts HTML files and ZIPs containing html/css/images etc required
HTMLToPDF.submit=Convert
HTMLToPDF.credit=Uses WeasyPrint
#sanitizePDF
sanitizePDF.title=Sanitize PDF
sanitizePDF.header=Sanitize a PDF file
sanitizePDF.selectText.1=Remove JavaScript actions
sanitizePDF.selectText.2=Remove embedded files
sanitizePDF.selectText.3=Remove metadata
sanitizePDF.selectText.4=Remove links
sanitizePDF.selectText.5=Remove fonts
sanitizePDF.submit=Sanitize PDF
#addPageNumbers
addPageNumbers.title=Add Page Numbers
addPageNumbers.header=Add Page Numbers
addPageNumbers.selectText.1=Select PDF file:
addPageNumbers.selectText.2=Margin Size
addPageNumbers.selectText.3=Position
addPageNumbers.selectText.4=Starting Number
addPageNumbers.selectText.5=Pages to Number
addPageNumbers.selectText.6=Custom Text
addPageNumbers.submit=Add Page Numbers
#auto-rename
auto-rename.title=Auto Rename
auto-rename.header=Auto Rename PDF
auto-rename.submit=Auto Rename
#adjustContrast
adjustContrast.title=Adjust Contrast
adjustContrast.header=Adjust Contrast
adjustContrast.contrast=Contrast:
adjustContrast.brightness=Brightness:
adjustContrast.saturation=Saturation:
adjustContrast.download=Download
#crop
crop.title=Crop
crop.header=Crop Image
crop.submit=Submit
#autoSplitPDF
autoSplitPDF.title=Auto Split PDF
autoSplitPDF.header=Auto Split PDF
autoSplitPDF.description=Print, Insert, Scan, upload, and let us auto-separate your documents. No manual work sorting needed.
autoSplitPDF.selectText.1=Print out some divider sheets from below (Black and white is fine).
autoSplitPDF.selectText.2=Scan all your documents at once by inserting the divider sheet between them.
autoSplitPDF.selectText.3=Upload the single large scanned PDF file and let Stirling PDF handle the rest.
autoSplitPDF.selectText.4=Divider pages are automatically detected and removed, guaranteeing a neat final document.
autoSplitPDF.formPrompt=Submit PDF containing Stirling-PDF Page dividers:
autoSplitPDF.duplexMode=Duplex Mode (Front and back scanning)
autoSplitPDF.dividerDownload1=Download 'Auto Splitter Divider (minimal).pdf'
autoSplitPDF.dividerDownload2=Download 'Auto Splitter Divider (with instructions).pdf'
autoSplitPDF.submit=Submit
#pipeline
pipeline.title=Pipeline
#pageLayout
pageLayout.title=Multi Page Layout
pageLayout.header=Multi Page Layout
pageLayout.pagesPerSheet=Pages per sheet:
pageLayout.submit=Submit
#scalePages
scalePages.title=Adjust page-scale
scalePages.header=Adjust page-scale
scalePages.pageSize=Size of a page of the document.
scalePages.scaleFactor=Zoom level (crop) of a page.
scalePages.submit=Submit
#certSign
certSign.title=Certificate Signing certSign.title=Certificate Signing
certSign.header=Sign a PDF with your certificate (Work in progress) certSign.header=Sign a PDF with your certificate (Work in progress)
certSign.selectPDF=Select a PDF File for Signing: certSign.selectPDF=Select a PDF File for Signing:
@@ -147,11 +347,10 @@ certSign.showSig=Show Signature
certSign.reason=Reason certSign.reason=Reason
certSign.location=Location certSign.location=Location
certSign.name=Name certSign.name=Name
certSign.submit=Sign PDF certSign.submit=Sign PDF
#removeBlanks
removeBlanks.title=Remove Blanks removeBlanks.title=Remove Blanks
removeBlanks.header=Remove Blank Pages removeBlanks.header=Remove Blank Pages
removeBlanks.threshold=Threshold: removeBlanks.threshold=Threshold:
@@ -160,12 +359,16 @@ removeBlanks.whitePercent=White Percent (%):
removeBlanks.whitePercentDesc=Percent of page that must be white to be removed removeBlanks.whitePercentDesc=Percent of page that must be white to be removed
removeBlanks.submit=Remove Blanks removeBlanks.submit=Remove Blanks
#compare
compare.title=Compare compare.title=Compare
compare.header=Compare PDFs compare.header=Compare PDFs
compare.document.1=Document 1 compare.document.1=Document 1
compare.document.2=Document 2 compare.document.2=Document 2
compare.submit=Compare compare.submit=Compare
#sign
sign.title=Sign sign.title=Sign
sign.header=Sign PDFs sign.header=Sign PDFs
sign.upload=Upload Image sign.upload=Upload Image
@@ -174,14 +377,20 @@ sign.text=Text Input
sign.clear=Clear sign.clear=Clear
sign.add=Add sign.add=Add
#repair
repair.title=Repair repair.title=Repair
repair.header=Repair PDFs repair.header=Repair PDFs
repair.submit=Repair repair.submit=Repair
#flatten
flatten.title=Flatten flatten.title=Flatten
flatten.header=Flatten PDFs flatten.header=Flatten PDFs
flatten.submit=Flatten flatten.submit=Flatten
#ScannerImageSplit
ScannerImageSplit.selectText.1=Angle Threshold: ScannerImageSplit.selectText.1=Angle Threshold:
ScannerImageSplit.selectText.2=Sets the minimum absolute angle required for the image to be rotated (default: 10). ScannerImageSplit.selectText.2=Sets the minimum absolute angle required for the image to be rotated (default: 10).
ScannerImageSplit.selectText.3=Tolerance: ScannerImageSplit.selectText.3=Tolerance:
@@ -193,19 +402,6 @@ ScannerImageSplit.selectText.8=Sets the minimum contour area threshold for a pho
ScannerImageSplit.selectText.9=Border Size: ScannerImageSplit.selectText.9=Border Size:
ScannerImageSplit.selectText.10=Sets the size of the border added and removed to prevent white borders in the output (default: 1). ScannerImageSplit.selectText.10=Sets the size of the border added and removed to prevent white borders in the output (default: 1).
navbar.settings=Settings
settings.title=Settings
settings.update=Update available
settings.appVersion=App Version:
settings.downloadOption.title=Choose download option (For single file non zip downloads):
settings.downloadOption.1=Open in same window
settings.downloadOption.2=Open in new window
settings.downloadOption.3=Download file
settings.zipThreshold=Zip files when the number of downloaded files exceeds
#OCR #OCR
ocr.title=OCR / Scan Cleanup ocr.title=OCR / Scan Cleanup
@@ -227,7 +423,7 @@ ocr.credit=This service uses OCRmyPDF and Tesseract for OCR.
ocr.submit=Process PDF with OCR ocr.submit=Process PDF with OCR
#extractImages
extractImages.title=Extract Images extractImages.title=Extract Images
extractImages.header=Extract Images extractImages.header=Extract Images
extractImages.selectText=Select image format to convert extracted images to extractImages.selectText=Select image format to convert extracted images to
@@ -258,6 +454,7 @@ compress.submit=Compress
addImage.title=Add Image addImage.title=Add Image
addImage.header=Add image to PDF addImage.header=Add image to PDF
addImage.everyPage=Every Page? addImage.everyPage=Every Page?
addImage.upload=Add image
addImage.submit=Add image addImage.submit=Add image
@@ -266,11 +463,13 @@ merge.title=Merge
merge.header=Merge multiple PDFs (2+) merge.header=Merge multiple PDFs (2+)
merge.submit=Merge merge.submit=Merge
#pdfOrganiser #pdfOrganiser
pdfOrganiser.title=Page Organiser pdfOrganiser.title=Page Organiser
pdfOrganiser.header=PDF Page Organiser pdfOrganiser.header=PDF Page Organiser
pdfOrganiser.submit=Rearrange Pages pdfOrganiser.submit=Rearrange Pages
#multiTool #multiTool
multiTool.title=PDF Multi Tool multiTool.title=PDF Multi Tool
multiTool.header=PDF Multi Tool multiTool.header=PDF Multi Tool
@@ -282,6 +481,7 @@ pageRemover.header=PDF Page remover
pageRemover.pagesToDelete=Pages to delete (Enter a comma-separated list of page numbers) : pageRemover.pagesToDelete=Pages to delete (Enter a comma-separated list of page numbers) :
pageRemover.submit=Delete Pages pageRemover.submit=Delete Pages
#rotate #rotate
rotate.title=Rotate PDF rotate.title=Rotate PDF
rotate.header=Rotate PDF rotate.header=Rotate PDF
@@ -289,8 +489,6 @@ rotate.selectAngle=Select rotation angle (in multiples of 90 degrees):
rotate.submit=Rotate rotate.submit=Rotate
#merge #merge
split.title=Split PDF split.title=Split PDF
split.header=Split PDF split.header=Split PDF
@@ -316,6 +514,7 @@ imageToPDF.selectText.3=Multi file logic (Only enabled if working with multiple
imageToPDF.selectText.4=Merge into single PDF imageToPDF.selectText.4=Merge into single PDF
imageToPDF.selectText.5=Convert to separate PDFs imageToPDF.selectText.5=Convert to separate PDFs
#pdfToImage #pdfToImage
pdfToImage.title=PDF to Image pdfToImage.title=PDF to Image
pdfToImage.header=PDF to Image pdfToImage.header=PDF to Image
@@ -329,14 +528,15 @@ pdfToImage.grey=Greyscale
pdfToImage.blackwhite=Black and White (May lose data!) pdfToImage.blackwhite=Black and White (May lose data!)
pdfToImage.submit=Convert pdfToImage.submit=Convert
#addPassword #addPassword
addPassword.title=Add Password addPassword.title=Add Password
addPassword.header=Add password (Encrypt) addPassword.header=Add password (Encrypt)
addPassword.selectText.1=Select PDF to encrypt addPassword.selectText.1=Select PDF to encrypt
addPassword.selectText.2=Password addPassword.selectText.2=User Password
addPassword.selectText.3=Encryption Key Length addPassword.selectText.3=Encryption Key Length
addPassword.selectText.4=Higher values are stronger, but lower values have better compatibility. addPassword.selectText.4=Higher values are stronger, but lower values have better compatibility.
addPassword.selectText.5=Permissions to set addPassword.selectText.5=Permissions to set (Recommended to be used along with Owner password)
addPassword.selectText.6=Prevent assembly of document addPassword.selectText.6=Prevent assembly of document
addPassword.selectText.7=Prevent content extraction addPassword.selectText.7=Prevent content extraction
addPassword.selectText.8=Prevent extraction for accessibility addPassword.selectText.8=Prevent extraction for accessibility
@@ -345,8 +545,12 @@ addPassword.selectText.10=Prevent modification
addPassword.selectText.11=Prevent annotation modification addPassword.selectText.11=Prevent annotation modification
addPassword.selectText.12=Prevent printing addPassword.selectText.12=Prevent printing
addPassword.selectText.13=Prevent printing different formats addPassword.selectText.13=Prevent printing different formats
addPassword.selectText.14=Owner Password
addPassword.selectText.15=Restricts what can be done with the document once it is opened (Not supported by all readers)
addPassword.selectText.16=Restricts the opening of the document itself
addPassword.submit=Encrypt addPassword.submit=Encrypt
#watermark #watermark
watermark.title=Add Watermark watermark.title=Add Watermark
watermark.header=Add Watermark watermark.header=Add Watermark
@@ -359,6 +563,7 @@ watermark.selectText.6=heightSpacer (Space between each watermark vertically):
watermark.selectText.7=Opacity (0% - 100%): watermark.selectText.7=Opacity (0% - 100%):
watermark.submit=Add Watermark watermark.submit=Add Watermark
#remove-watermark #remove-watermark
remove-watermark.title=Remove Watermark remove-watermark.title=Remove Watermark
remove-watermark.header=Remove Watermark remove-watermark.header=Remove Watermark
@@ -366,6 +571,7 @@ remove-watermark.selectText.1=Select PDF to remove watermark from:
remove-watermark.selectText.2=Watermark Text: remove-watermark.selectText.2=Watermark Text:
remove-watermark.submit=Remove Watermark remove-watermark.submit=Remove Watermark
#Change permissions #Change permissions
permissions.title=Change Permissions permissions.title=Change Permissions
permissions.header=Change Permissions permissions.header=Change Permissions
@@ -382,6 +588,7 @@ permissions.selectText.9=Prevent printing
permissions.selectText.10=Prevent printing different formats permissions.selectText.10=Prevent printing different formats
permissions.submit=Change permissions.submit=Change
#remove password #remove password
removePassword.title=Remove password removePassword.title=Remove password
removePassword.header=Remove password (Decrypt) removePassword.header=Remove password (Decrypt)
@@ -389,6 +596,8 @@ removePassword.selectText.1=Select PDF to Decrypt
removePassword.selectText.2=Password removePassword.selectText.2=Password
removePassword.submit=Remove removePassword.submit=Remove
#changeMetadata
changeMetadata.title=Change Metadata changeMetadata.title=Change Metadata
changeMetadata.header=Change Metadata changeMetadata.header=Change Metadata
changeMetadata.selectText.1=Please edit the variables you wish to change changeMetadata.selectText.1=Please edit the variables you wish to change
@@ -407,27 +616,30 @@ changeMetadata.selectText.4=Other Metadata:
changeMetadata.selectText.5=Add Custom Metadata Entry changeMetadata.selectText.5=Add Custom Metadata Entry
changeMetadata.submit=Change changeMetadata.submit=Change
#xlsToPdf
xlsToPdf.title=Excel to PDF xlsToPdf.title=Excel to PDF
xlsToPdf.header=Excel to PDF xlsToPdf.header=Excel to PDF
xlsToPdf.selectText.1=Select XLS or XLSX Excel sheet to convert xlsToPdf.selectText.1=Select XLS or XLSX Excel sheet to convert
xlsToPdf.convert=convert xlsToPdf.convert=convert
#pdfToPDFA
pdfToPDFA.title=PDF To PDF/A pdfToPDFA.title=PDF To PDF/A
pdfToPDFA.header=PDF To PDF/A pdfToPDFA.header=PDF To PDF/A
pdfToPDFA.credit=This service uses OCRmyPDF for PDF/A conversion pdfToPDFA.credit=This service uses OCRmyPDF for PDF/A conversion
pdfToPDFA.submit=Convert pdfToPDFA.submit=Convert
#PDFToWord
PDFToWord.title=PDF to Word PDFToWord.title=PDF to Word
PDFToWord.header=PDF to Word PDFToWord.header=PDF to Word
PDFToWord.selectText.1=Output file format PDFToWord.selectText.1=Output file format
PDFToWord.credit=This service uses LibreOffice for file conversion. PDFToWord.credit=This service uses LibreOffice for file conversion.
PDFToWord.submit=Convert PDFToWord.submit=Convert
#PDFToPresentation
PDFToPresentation.title=PDF to Presentation PDFToPresentation.title=PDF to Presentation
PDFToPresentation.header=PDF to Presentation PDFToPresentation.header=PDF to Presentation
PDFToPresentation.selectText.1=Output file format PDFToPresentation.selectText.1=Output file format
@@ -435,31 +647,23 @@ PDFToPresentation.credit=This service uses LibreOffice for file conversion.
PDFToPresentation.submit=Convert PDFToPresentation.submit=Convert
PDFToText.title=PDF to Text/RTF #PDFToText
PDFToText.header=PDF to Text/RTF PDFToText.title=PDF to RTF (Text)
PDFToText.header=PDF to RTF (Text)
PDFToText.selectText.1=Output file format PDFToText.selectText.1=Output file format
PDFToText.credit=This service uses LibreOffice for file conversion. PDFToText.credit=This service uses LibreOffice for file conversion.
PDFToText.submit=Convert PDFToText.submit=Convert
#PDFToHTML
PDFToHTML.title=PDF to HTML PDFToHTML.title=PDF to HTML
PDFToHTML.header=PDF to HTML PDFToHTML.header=PDF to HTML
PDFToHTML.credit=This service uses LibreOffice for file conversion. PDFToHTML.credit=This service uses LibreOffice for file conversion.
PDFToHTML.submit=Convert PDFToHTML.submit=Convert
#PDFToXML
PDFToXML.title=PDF to XML PDFToXML.title=PDF to XML
PDFToXML.header=PDF to XML PDFToXML.header=PDF to XML
PDFToXML.credit=This service uses LibreOffice for file conversion. PDFToXML.credit=This service uses LibreOffice for file conversion.
PDFToXML.submit=Convert PDFToXML.submit=Convert

View File

@@ -1,7 +1,7 @@
########### ###########
# Generic # # Generic #
########### ###########
# the direction that the language is written (ltr = left to right, rtl = right to left) # the direction that the language is written (ltr=left to right, rtl = right to left)
language.direction=ltr language.direction=ltr
pdfPrompt=Seleccionar PDF(s) pdfPrompt=Seleccionar PDF(s)
@@ -11,7 +11,7 @@ imgPrompt=Seleccionar Imagen(es)
genericSubmit=Enviar genericSubmit=Enviar
processTimeWarning=Advertencia: este proceso puede tardar hasta un minuto dependiendo del tamaño del archivo processTimeWarning=Advertencia: este proceso puede tardar hasta un minuto dependiendo del tamaño del archivo
pageOrderPrompt=Orden de páginas (Introduzca una lista de números de página separados por coma): pageOrderPrompt=Orden de páginas (Introduzca una lista de números de página separados por coma):
goToPage=Ir goToPage=Ir a
true=Verdadero true=Verdadero
false=Falso false=Falso
unknown=Desconocido unknown=Desconocido
@@ -20,118 +20,443 @@ close=Cerrar
filesSelected=archivos seleccionados filesSelected=archivos seleccionados
noFavourites=No se agregaron favoritos noFavourites=No se agregaron favoritos
bored=¿Aburrido de esperar? bored=¿Aburrido de esperar?
############# alphabet=Alfabeto
# HOME-PAGE # downloadPdf=Descargar PDF
############# text=Texto
home.desc=Tu autohospedada ventanilla única para todas tus necesidades PDF. font=Fuente
selectFillter=-- Select --
pageNum=Número de página
sizes.small=Small
sizes.medium=Medium
sizes.large=Large
sizes.x-large=X-Large
error.pdfPassword=El documento PDF está protegido con contraseña y no se ha proporcionado o es incorrecta
#############
# NAVBAR #
#############
navbar.convert=Convertir navbar.convert=Convertir
navbar.security=Seguridad navbar.security=Seguridad
navbar.other=Otro navbar.other=Otro
navbar.darkmode=Modo oscuro navbar.darkmode=Modo oscuro
navbar.pageOps=Operaciones de página navbar.pageOps=Operaciones de página
navbar.settings=Ajustes
#############
# SETTINGS #
#############
settings.title=Ajustes
settings.update=Actualización disponible
settings.appVersion=Versión de la aplicación:
settings.downloadOption.title=Elegir la opción de descarga (para descargas de un solo archivo sin ZIP):
settings.downloadOption.1=Abrir en la misma ventana
settings.downloadOption.2=Abrir en una nueva ventana
settings.downloadOption.3=Descargar el fichero
settings.zipThreshold=Ficheros ZIP cuando excede el número de ficheros descargados
#############
# HOME-PAGE #
#############
home.desc=Tu ventanilla única autohospedada para todas tus necesidades PDF
home.multiTool.title=Multi-herramienta PDF home.multiTool.title=Multi-herramienta PDF
home.multiTool.desc=Combinar, rotar, reorganizar y eliminar páginas home.multiTool.desc=Combinar, rotar, reorganizar y eliminar páginas
multiTool.tags=Multi Tool,Multi operation,UI,click drag,front end,client side
home.merge.title=Unir home.merge.title=Unir
home.merge.desc=Unir fácilmente múltiples PDFs en uno. home.merge.desc=Unir fácilmente múltiples PDFs en uno
merge.tags=merge,Page operations,Back end,server side
home.split.title=Dividir home.split.title=Dividir
home.split.desc=Dividir PDFs en múltiples documentos home.split.desc=Dividir PDFs en múltiples documentos
##########################
### TODO: Translate ###
##########################
split.tags=Page operations,divide,Multi Page,cut,server side
home.rotate.title=Rotar home.rotate.title=Rotar
home.rotate.desc=Rotar fácilmente tus PDFs. home.rotate.desc=Rotar fácilmente tus PDFs
##########################
### TODO: Translate ###
##########################
rotate.tags=server side
home.imageToPdf.title=Imagen a PDF home.imageToPdf.title=Imagen a PDF
home.imageToPdf.desc=Convertir una imagen (PNG, JPEG, GIF) a PDF. home.imageToPdf.desc=Convertir una imagen (PNG, JPEG, GIF) a PDF
##########################
### TODO: Translate ###
##########################
imageToPdf.tags=conversion,img,jpg,picture,photo
home.pdfToImage.title=PDF a Imagen home.pdfToImage.title=PDF a Imagen
home.pdfToImage.desc=Convertir un PDF a una imagen. (PNG, JPEG, GIF) home.pdfToImage.desc=Convertir un PDF a una imagen (PNG, JPEG, GIF)
##########################
### TODO: Translate ###
##########################
pdfToImage.tags=conversion,img,jpg,picture,photo
home.pdfOrganiser.title=Organizador home.pdfOrganiser.title=Organizador
home.pdfOrganiser.desc=Eliminar/Reorganizar páginas en cualquier orden home.pdfOrganiser.desc=Eliminar/Reorganizar páginas en cualquier orden
##########################
### TODO: Translate ###
##########################
pdfOrganiser.tags=duplex,even,odd,sort,move
home.addImage.title=Agregar imagen al PDF home.addImage.title=Agregar imagen al PDF
home.addImage.desc=Agregar una imagen en una ubicación establecida en el PDF (trabajo en progreso) home.addImage.desc=Agregar una imagen en una ubicación establecida en el PDF (trabajo en progreso)
##########################
### TODO: Translate ###
##########################
addImage.tags=img,jpg,picture,photo
home.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 a tu documento PDF. home.watermark.desc=Añadir una marca de agua predefinida al documento PDF
##########################
### TODO: Translate ###
##########################
watermark.tags=Text,repeating,label,own,copyright,trademark,img,jpg,picture,photo
home.remove-watermark.title=Eliminar marca de agua home.permissions.title=Cambiar permisos
home.remove-watermark.desc=Eliminar marcas de agua de tu documento PDF. home.permissions.desc=Cambiar los permisos del documento PDF
##########################
### TODO: Translate ###
##########################
permissions.tags=read,write,edit,print
home.permissions.title=Cambiar Permisos
home.permissions.desc=Cambiar los permisos de tu documento PDF
home.removePages.title=Eliminar home.removePages.title=Eliminar
home.removePages.desc=Eliminar páginas no deseadas de tu documento PDF. home.removePages.desc=Eliminar páginas no deseadas del documento PDF
##########################
### TODO: Translate ###
##########################
removePages.tags=Remove pages,delete pages
home.addPassword.title=Añadir Contraseña home.addPassword.title=Añadir contraseña
home.addPassword.desc=Encriptar el documento PDF con una contraseña. home.addPassword.desc=Encriptar el documento PDF con una contraseña
##########################
### TODO: Translate ###
##########################
addPassword.tags=secure,security
home.removePassword.title=Eliminar Contraseña home.removePassword.title=Eliminar contraseña
home.removePassword.desc=Eliminar la contraseña del documento PDF. home.removePassword.desc=Eliminar la contraseña del documento PDF
##########################
### TODO: Translate ###
##########################
removePassword.tags=secure,Decrypt,security,unpassword,delete password
home.compressPdfs.title=Comprimir home.compressPdfs.title=Comprimir
home.compressPdfs.desc=Comprimir PDFs para reducir el tamaño del fichero. home.compressPdfs.desc=Comprimir PDFs para reducir el tamaño del fichero
##########################
### TODO: Translate ###
##########################
compressPdfs.tags=squish,small,tiny
home.changeMetadata.title=Cambiar Metadatos
home.changeMetadata.desc=Cambiar/Eliminar/Añadir metadatos al documento PDF. home.changeMetadata.title=Cambiar metadatos
home.changeMetadata.desc=Cambiar/Eliminar/Añadir metadatos al documento PDF
##########################
### TODO: Translate ###
##########################
changeMetadata.tags==Title,author,date,creation,time,publisher,producer,stats
home.fileToPDF.title=Convertir fichero a PDF home.fileToPDF.title=Convertir fichero a PDF
home.fileToPDF.desc=Convertir casi cualquier archivo a PDF (DOCX, PNG, XLS, PPT, TXT y más) home.fileToPDF.desc=Convertir casi cualquier archivo a PDF (DOCX, PNG, XLS, PPT, TXT y más)
##########################
### TODO: Translate ###
##########################
fileToPDF.tags=transformation,format,document,picture,slide,text,conversion,office,docs,word,excel,powerpoint
home.ocr.title=Ejecutar OCR en PDF y/o escaneos de limpieza home.ocr.title=Ejecutar OCR en PDF y/o escaneos de limpieza
home.ocr.desc=Escaneos de limpieza y detecta texto de imágenes dentro de un PDF y lo vuelve a agregar como texto. home.ocr.desc=Escaneos de limpieza y detectar texto de imágenes dentro de un PDF y volver a agregarlo como texto
##########################
### TODO: Translate ###
##########################
ocr.tags=recognition,text,image,scan,read,identify,detection,editable
home.extractImages.title=Extraer imágenes home.extractImages.title=Extraer imágenes
home.extractImages.desc=Extraer todas las imágenes de un PDF y guardarlas en zip home.extractImages.desc=Extraer todas las imágenes de un PDF y guardarlas en ZIP
##########################
### TODO: Translate ###
##########################
extractImages.tags=picture,photo,save,archive,zip,capture,grab
home.pdfToPDFA.title=Convertir PDF a PDF/A home.pdfToPDFA.title=Convertir PDF a PDF/A
home.pdfToPDFA.desc=Convertir PDF a PDF/A para almacenamiento a largo plazo home.pdfToPDFA.desc=Convertir PDF a PDF/A para almacenamiento a largo plazo
##########################
### TODO: Translate ###
##########################
pdfToPDFA.tags=archive,long-term,standard,conversion,storage,preservation
home.PDFToWord.title=PDF a Word home.PDFToWord.title=PDF a Word
home.PDFToWord.desc=Convertir formatos PDF a Word (DOC, DOCX y ODT) home.PDFToWord.desc=Convertir formatos PDF a Word (DOC, DOCX y ODT)
##########################
### TODO: Translate ###
##########################
PDFToWord.tags=doc,docx,odt,word,transformation,format,conversion,office,microsoft,docfile
home.PDFToPresentation.title=PDF a presentación home.PDFToPresentation.title=PDF a presentación
home.PDFToPresentation.desc=Convertir PDF a formatos de presentación (PPT, PPTX y ODP) home.PDFToPresentation.desc=Convertir PDF a formatos de presentación (PPT, PPTX y ODP)
##########################
### TODO: Translate ###
##########################
PDFToPresentation.tags=slides,show,office,microsoft
home.PDFToText.title=PDF a TXT o RTF home.PDFToText.title=PDF a TXT o RTF
home.PDFToText.desc=Convertir PDF a formato TXT o RTF home.PDFToText.desc=Convertir PDF a formato TXT o RTF
##########################
### TODO: Translate ###
##########################
PDFToText.tags=richformat,richtextformat,rich text format
home.PDFToHTML.title=PDF a HTML home.PDFToHTML.title=PDF a HTML
home.PDFToHTML.desc=Convertir PDF a formato HTML home.PDFToHTML.desc=Convertir PDF a formato HTML
##########################
### TODO: Translate ###
##########################
PDFToHTML.tags=web content,browser friendly
home.PDFToXML.title=PDF a XML home.PDFToXML.title=PDF a XML
home.PDFToXML.desc=Convertir PDF a formato XML home.PDFToXML.desc=Convertir PDF a formato XML
##########################
### TODO: Translate ###
##########################
PDFToXML.tags=data-extraction,structured-content,interop,transformation,convert
home.ScannerImageSplit.title=Detectar/Dividir fotos escaneadas home.ScannerImageSplit.title=Detectar/Dividir fotos escaneadas
home.ScannerImageSplit.desc=Dividir varias fotos dentro de una foto/PDF home.ScannerImageSplit.desc=Dividir varias fotos dentro de una foto/PDF
##########################
### TODO: Translate ###
##########################
ScannerImageSplit.tags=separate,auto-detect,scans,multi-photo,organize
home.sign.title=Firmar home.sign.title=Firmar
home.sign.desc=Añade firma a PDF mediante dibujo, texto o imagen home.sign.desc=Añadir firma a PDF mediante dibujo, texto o imagen
##########################
### TODO: Translate ###
##########################
sign.tags=authorize,initials,drawn-signature,text-sign,image-signature
home.flatten.title=Aplanar home.flatten.title=Aplanar
home.flatten.desc=Eliminar todos los elementos y formularios interactivos de un PDF home.flatten.desc=Eliminar todos los elementos y formularios interactivos de un PDF
##########################
### TODO: Translate ###
##########################
flatten.tags=static,deactivate,non-interactive,streamline
home.repair.title=Reparar home.repair.title=Reparar
home.repair.desc=Intenta reparar un PDF corrupto/roto home.repair.desc=Intentar reparar un PDF corrupto/roto
##########################
### TODO: Translate ###
##########################
repair.tags=fix,restore,correction,recover
home.removeBlanks.title=Eliminar páginas en blanco home.removeBlanks.title=Eliminar páginas en blanco
home.removeBlanks.descdetecta y elimina páginas en blanco de un documento home.removeBlanks.desc=Detectar y eliminar páginas en blanco de un documento
##########################
### TODO: Translate ###
##########################
removeBlanks.tags=cleanup,streamline,non-content,organize
home.compare.title=Comparar home.compare.title=Comparar
home.compare.desc=Compara y muestra las diferencias entre 2 documentos PDF home.compare.desc=Comparar y mostrar las diferencias entre 2 documentos PDF
##########################
### TODO: Translate ###
##########################
compare.tags=differentiate,contrast,changes,analysis
downloadPdf=Descargar PDF home.certSign.title=Firmar con certificado
text=Texto home.certSign.desc=Firmar un PDF con un Certificado/Clave (PEM/P12)
font=Fuente ##########################
selectFilter=-- Seleccionar -- ### TODO: Translate ###
pageNum=Número de página ##########################
certSign.tags=authenticate,PEM,P12,official,encrypt
home.pageLayout.title=Diseño de varias páginas
home.pageLayout.desc=Unir varias páginas de un documento PDF en una sola página
##########################
### TODO: Translate ###
##########################
pageLayout.tags=merge,composite,single-view,organize
home.scalePages.title=Escalar/ajustar tamaño de página
home.scalePages.desc=Escalar/cambiar el tamaño de una pagina y/o su contenido
##########################
### TODO: Translate ###
##########################
scalePages.tags=resize,modify,dimension,adapt
home.pipeline.title=Pipeline (Advanced)
home.pipeline.desc=Run multiple actions on PDFs by defining pipeline scripts
##########################
### TODO: Translate ###
##########################
pipeline.tags=automate,sequence,scripted,batch-process
home.add-page-numbers.title=Add Page Numbers
home.add-page-numbers.desc=Add Page numbers throughout a document in a set location
##########################
### TODO: Translate ###
##########################
add-page-numbers.tags=paginate,label,organize,index
home.auto-rename.title=Auto Rename PDF File
home.auto-rename.desc=Auto renames a PDF file based on its detected header
##########################
### TODO: Translate ###
##########################
auto-rename.tags=auto-detect,header-based,organize,relabel
home.adjust-contrast.title=Adjust Colors/Contrast
home.adjust-contrast.desc=Adjust Contrast, Saturation and Brightness of a PDF
##########################
### TODO: Translate ###
##########################
adjust-contrast.tags=color-correction,tune,modify,enhance
home.crop.title=Crop PDF
home.crop.desc=Crop a PDF to reduce its size (maintains text!)
##########################
### TODO: Translate ###
##########################
crop.tags=trim,shrink,edit,shape
home.autoSplitPDF.title=Auto Split Pages
home.autoSplitPDF.desc=Auto Split Scanned PDF with physical scanned page splitter QR Code
##########################
### TODO: Translate ###
##########################
autoSplitPDF.tags=QR-based,separate,scan-segment,organize
home.sanitizePdf.title=Sanitize
home.sanitizePdf.desc=Remove scripts and other elements from PDF files
##########################
### TODO: Translate ###
##########################
sanitizePdf.tags=clean,secure,safe,remove-threats
##########################
### TODO: Translate ###
##########################
home.URLToPDF.title=URL/Website To PDF
home.URLToPDF.desc=Converts any http(s)URL to PDF
URLToPDF.tags=web-capture,save-page,web-to-doc,archive
##########################
### TODO: Translate ###
##########################
home.HTMLToPDF.title=HTML to PDF
home.HTMLToPDF.desc=Converts any HTML file or zip to PDF
HTMLToPDF.tags=markup,web-content,transformation,convert
###########################
# #
# WEB PAGES #
# #
###########################
#url-to-pdf
URLToPDF.title=URL To PDF
URLToPDF.header=URL To PDF
URLToPDF.submit=Convert
URLToPDF.credit=Uses WeasyPrint
#html-to-pdf
HTMLToPDF.title=HTML To PDF
HTMLToPDF.header=HTML To PDF
HTMLToPDF.help=Accepts HTML files and ZIPs containing html/css/images etc required
HTMLToPDF.submit=Convert
HTMLToPDF.credit=Uses WeasyPrint
#sanitizePDF
sanitizePDF.title=Sanitize PDF
sanitizePDF.header=Sanitize a PDF file
sanitizePDF.selectText.1=Remove JavaScript actions
sanitizePDF.selectText.2=Remove embedded files
sanitizePDF.selectText.3=Remove metadata
sanitizePDF.selectText.4=Remove links
sanitizePDF.selectText.5=Remove fonts
sanitizePDF.submit=Sanitize PDF
#addPageNumbers
addPageNumbers.title=Add Page Numbers
addPageNumbers.header=Add Page Numbers
addPageNumbers.selectText.1=Select PDF file:
addPageNumbers.selectText.2=Margin Size
addPageNumbers.selectText.3=Position
addPageNumbers.selectText.4=Starting Number
addPageNumbers.selectText.5=Pages to Number
addPageNumbers.selectText.6=Custom Text
addPageNumbers.submit=Add Page Numbers
#auto-rename
auto-rename.title=Auto Rename
auto-rename.header=Auto Rename PDF
auto-rename.submit=Auto Rename
#adjustContrast
adjustContrast.title=Adjust Contrast
adjustContrast.header=Adjust Contrast
adjustContrast.contrast=Contrast:
adjustContrast.brightness=Brightness:
adjustContrast.saturation=Saturation:
adjustContrast.download=Download
#crop
crop.title=Crop
crop.header=Crop Image
crop.submit=Submit
#autoSplitPDF
autoSplitPDF.title=Auto Split PDF
autoSplitPDF.header=Auto Split PDF
autoSplitPDF.description=Print, Insert, Scan, upload, and let us auto-separate your documents. No manual work sorting needed.
autoSplitPDF.selectText.1=Print out some divider sheets from below (Black and white is fine).
autoSplitPDF.selectText.2=Scan all your documents at once by inserting the divider sheet between them.
autoSplitPDF.selectText.3=Upload the single large scanned PDF file and let Stirling PDF handle the rest.
autoSplitPDF.selectText.4=Divider pages are automatically detected and removed, guaranteeing a neat final document.
autoSplitPDF.formPrompt=Submit PDF containing Stirling-PDF Page dividers:
autoSplitPDF.duplexMode=Duplex Mode (Front and back scanning)
autoSplitPDF.dividerDownload1=Download 'Auto Splitter Divider (minimal).pdf'
autoSplitPDF.dividerDownload2=Download 'Auto Splitter Divider (with instructions).pdf'
autoSplitPDF.submit=Submit
#pipeline
pipeline.title=Pipeline
#pageLayout
pageLayout.title=Diseño de varias páginas
pageLayout.header=Diseño de varias páginas
pageLayout.pagesPerSheet=Páginas por hoja:
pageLayout.submit=Entregar
#scalePages
scalePages.title=Ajustar escala de la página
scalePages.header=Adjustar escala de la página
scalePages.pageSize=Tamaño de la página del documento
scalePages.scaleFactor=Nivel de zoom (recorte) de la página
scalePages.submit=Entregar
#certSign
certSign.title=Firma de certificado certSign.title=Firma de certificado
certSign.header=Firme un PDF con su certificado (Trabajo en progreso) certSign.header=Firmar un PDF con su certificado (Trabajo en progreso)
certSign.selectPDF=Seleccione un archivo PDF para firmar: certSign.selectPDF=Seleccione un archivo PDF para firmar:
certSign.selectKey=Seleccione su archivo de clave privada (formato PKCS#8, podría ser .pem o .der): certSign.selectKey=Seleccione su archivo de clave privada (formato PKCS#8, podría ser .pem o .der):
certSign.selectCert=Seleccione su archivo de certificado (formato X.509, podría ser .pem o .der): certSign.selectCert=Seleccione su archivo de certificado (formato X.509, podría ser .pem o .der):
@@ -144,6 +469,8 @@ certSign.location=Ubicación
certSign.name=Nombre certSign.name=Nombre
certSign.submit=Firmar PDF certSign.submit=Firmar PDF
#removeBlanks
removeBlanks.title=Eliminar espacios en blanco removeBlanks.title=Eliminar espacios en blanco
removeBlanks.header=Eliminar páginas en blanco removeBlanks.header=Eliminar páginas en blanco
removeBlanks.threshold=Umbral: removeBlanks.threshold=Umbral:
@@ -152,12 +479,16 @@ removeBlanks.whitePercent=Porcentaje de blanco (%):
removeBlanks.whitePercentDesc=Porcentaje de página que debe ser blanca para ser eliminada removeBlanks.whitePercentDesc=Porcentaje de página que debe ser blanca para ser eliminada
removeBlanks.submit=Eliminar espacios en blanco removeBlanks.submit=Eliminar espacios en blanco
#compare
compare.title=Comparar compare.title=Comparar
compare.header=Comparar archivos PDF compare.header=Comparar archivos PDF
compare.document.1=Documento 1 compare.document.1=Documento 1
compare.document.2=Documento 2 compare.document.2=Documento 2
compare.submit=Comparar compare.submit=Comparar
#sign
sign.title=Firmar sign.title=Firmar
sign.header=Firmar archivos PDF sign.header=Firmar archivos PDF
sign.upload=Subir imagen sign.upload=Subir imagen
@@ -166,89 +497,84 @@ sign.text=Entrada de texto
sign.clear=Borrar sign.clear=Borrar
sign.add=Agregar sign.add=Agregar
#repair
repair.title=Reparar repair.title=Reparar
repair.header=Reparar archivos PDF repair.header=Reparar archivos PDF
repair.submit=Reparar repair.submit=Reparar
#flatten
flatten.title=Aplanar flatten.title=Aplanar
flatten.header=Acoplar archivos PDF flatten.header=Acoplar archivos PDF
flatten.submit=Aplanar flatten.submit=Aplanar
#ScannerImageSplit
ScannerImageSplit.selectText.1=Umbral de ángulo: ScannerImageSplit.selectText.1=Umbral de ángulo:
ScannerImageSplit.selectText.2=Establece el ángulo absoluto mínimo requerido para rotar la imagen (predeterminado: 10). ScannerImageSplit.selectText.2=Establecer el ángulo absoluto mínimo requerido para rotar la imagen (predeterminado: 10).
ScannerImageSplit.selectText.3=Tolerancia: ScannerImageSplit.selectText.3=Tolerancia:
ScannerImageSplit.selectText.4=Determina el rango de variación de color alrededor del color de fondo estimado (predeterminado: 30). ScannerImageSplit.selectText.4=Determinar el rango de variación de color alrededor del color de fondo estimado (predeterminado: 30).
ScannerImageSplit.selectText.5=Área mínima: ScannerImageSplit.selectText.5=Área mínima:
ScannerImageSplit.selectText.6=Establece el umbral mínimo de área para una foto (predeterminado: 10000). ScannerImageSplit.selectText.6=Establecer el umbral mínimo de área para una foto (predeterminado: 10000).
ScannerImageSplit.selectText.7=Área de contorno mínima: ScannerImageSplit.selectText.7=Área de contorno mínima:
ScannerImageSplit.selectText.8=Establece el umbral mínimo del área de contorno para una foto ScannerImageSplit.selectText.8=Establecer el umbral mínimo del área de contorno para una foto
ScannerImageSplit.selectText.9=Tamaño del borde: ScannerImageSplit.selectText.9=Tamaño del borde:
ScannerImageSplit.selectText.10=Establece el tamaño del borde agregado y eliminado para evitar bordes blancos en la salida (predeterminado: 1). ScannerImageSplit.selectText.10=Establece el tamaño del borde agregado y eliminado para evitar bordes blancos en la salida (predeterminado: 1).
navbar.settings=Ajustes
settings.title=Ajustes
settings.update=Actualización disponible
settings.appVersion=Versión de la aplicación:
settings.downloadOption.title=Elige la opción de descarga (para descargas de un solo archivo sin ZIP):
settings.downloadOption.1=Abre en la misma ventana
settings.downloadOption.2=Abre en una nueva ventana
settings.downloadOption.3=Descarga el fichero
settings.zipThreshold=Ficheros ZIP cuando excede el número de ficheros descargados
#OCR #OCR
ocr.title=OCR / Escaneo de limpieza ocr.title=OCR / Escaneo de limpieza
ocr.header=Escaneos de limpieza / OCR (Reconocimiento óptico de caracteres) ocr.header=Escaneos de limpieza / OCR (Reconocimiento óptico de caracteres)
ocr.selectText.1=Selecciona los idiomas que se detectarán en el PDF (Los enumerados son los detectados actualmente): ocr.selectText.1=Seleccionar los idiomas que se detectarán en el PDF (Los enumerados son los detectados actualmente):
ocr.selectText.2=Produzca un archivo de texto que contenga texto OCR junto con el PDF editado con OCR ocr.selectText.2=Producir un archivo de texto que contenga texto OCR junto con el PDF editado con OCR
ocr.selectText.3=Corrija las páginas que se escanearon en un ángulo torcido girándolas nuevamente a su lugar ocr.selectText.3=Corregir las páginas que se escanearon en un ángulo torcido girándolas nuevamente a su lugar
ocr.selectText.4=Limpie la página para que sea menos probable que el OCR encuentre texto en el ruido de fondo. (Sin cambio de salida) ocr.selectText.4=Limpiar la página para que sea menos probable que el OCR encuentre texto en el ruido de fondo (Sin cambio de salida)
ocr.selectText.5=Limpie la página para que sea menos probable que el OCR encuentre texto en el ruido de fondo, mantiene la limpieza en la salida. ocr.selectText.5=Limpiar la página para que sea menos probable que el OCR encuentre texto en el ruido de fondo, mantiene la limpieza en la salida.
ocr.selectText.6=Ignora las páginas que tienen texto interactivo, solo las páginas OCR que son imágenes ocr.selectText.6=Ignorar las páginas que tienen texto interactivo, solo las páginas OCR que son imágenes
ocr.selectText.7=Fuerza OCR, OCR eliminará en cada página todo el texto original ocr.selectText.7=Forzar OCR, OCR eliminará en cada página todo el texto original
ocr.selectText.8=Normal (Se producirá un error si el PDF contiene texto) ocr.selectText.8=Normal (se producirá un error si el PDF contiene texto)
ocr.selectText.9=Ajustes Adicionales ocr.selectText.9=Ajustes adicionales
ocr.selectText.10=Modo OCR ocr.selectText.10=Modo OCR
ocr.selectText.11=Eliminar imágenes después de OCR (Elimina TODAS las imágenes, solo es útil si es parte del paso de conversión) ocr.selectText.11=Eliminar imágenes después de OCR (Elimina TODAS las imágenes, solo es útil si es parte del paso de conversión)
ocr.selectText.12=Tipo de procesamiento (avanzado) ocr.selectText.12=Tipo de procesamiento (avanzado)
ocr.help=Lea esta documentación sobre cómo usar esto para otros idiomas y/o no usarlo en docker ocr.help=Lea esta documentación sobre cómo usar esto para otros idiomas y/o no usarlo en Docker
ocr.credit=Este servicio utiliza OCRmyPDF y Tesseract para OCR. ocr.credit=Este servicio utiliza OCRmyPDF y Tesseract para OCR
ocr.submit=Procesa PDF con OCR ocr.submit=Procesar PDF con OCR
#extractImages
extractImages.title=Extraer imágenes extractImages.title=Extraer imágenes
extractImages.header=Extraer imágenes extractImages.header=Extraer imágenes
extractImages.selectText=Selecciona el formato de imagen para convertir las imágenes extraídas extractImages.selectText=Seleccionar el formato de imagen para convertir las imágenes extraídas
extractImages.submit=Extraer extractImages.submit=Extraer
#File to PDF #File to PDF
fileToPDF.title=Fichero a PDF fileToPDF.title=Archivo a PDF
fileToPDF.header=Convierte cualquier fichero a PDF fileToPDF.header=Convertir cualquier archivo a PDF
fileToPDF.credit=Este servicio usa LibreOffice y Unoconv para la conversión de ficheros. fileToPDF.credit=Este servicio usa LibreOffice y Unoconv para la conversión de ficheros
fileToPDF.supportedFileTypes=Los tipos de ficheros soportados deben incluir los de abajo; sin embargo para una completa y acutualizada lista de formatos soportados, por favor consulte la documentación de LibreOffice fileToPDF.supportedFileTypes=Los tipos de ficheros soportados deben incluir los de abajo; sin embargo, para una completa y acutualizada lista de formatos soportados, por favor consulte la documentación de LibreOffice
fileToPDF.submit=Convertir a PDF fileToPDF.submit=Convertir a PDF
#compress #compress
compress.title=Comprimir compress.title=Comprimir
compress.header=Comprimir PDF compress.header=Comprimir PDF
compress.credit=Este servicio utiliza Ghostscript para compresión/optimización de PDF. compress.credit=Este servicio utiliza Ghostscript para compresión/optimización de PDF
compress.selectText.1=Modo manual - De 1 a 4 compress.selectText.1=Modo manual - De 1 a 4
compress.selectText.2=Nivel de optimización: compress.selectText.2=Nivel de optimización:
compress.selectText.3=4 (Terrible para imágenes de texto) compress.selectText.3=4 (Terrible para imágenes de texto)
compress.selectText.4=Modo automático: ajusta automáticamente la calidad para que el PDF tenga el tamaño exacto compress.selectText.4=Modo automático: ajusta automáticamente la calidad para que el PDF tenga el tamaño exacto
compress.selectText.5=Tamaño de PDF esperado (por ejemplo, 25 MB, 10,8 MB, 25 KB) compress.selectText.5=Tamaño esperado del PDF (por ejemplo, 25 MB, 10.8 MB, 25 KB)
compress.submit=Comprimir compress.submit=Comprimir
#Add image #Add image
addImage.title=Añadir Imagen addImage.title=Añadir imagen
addImage.header=Añadir image de PDF addImage.header=Añadir imagen de PDF
addImage.everyPage=¿Todas las páginas? addImage.everyPage=¿Todas las páginas?
addImage.upload=Añadir imagen
addImage.submit=Añadir imagen addImage.submit=Añadir imagen
@@ -257,34 +583,36 @@ merge.title=Unir
merge.header=Unir múltiples PDFs (2+) merge.header=Unir múltiples PDFs (2+)
merge.submit=Unir merge.submit=Unir
#pdfOrganiser #pdfOrganiser
pdfOrganiser.title=Organizador de páginas pdfOrganiser.title=Organizador de páginas
pdfOrganiser.header=Organizador de páginas PDF pdfOrganiser.header=Organizador de páginas PDF
pdfOrganiser.submit=Organizar páginas pdfOrganiser.submit=Organizar páginas
#herramienta multiple
#multiTool
multiTool.title=Multi-herramienta PDF multiTool.title=Multi-herramienta PDF
multiTool.header=Multi-herramienta PDF multiTool.header=Multi-herramienta PDF
#pageRemover #pageRemover
pageRemover.title=Eliminador de páginas pageRemover.title=Eliminador de páginas
pageRemover.header=Eliminador de páginas PDF pageRemover.header=Eliminador de páginas PDF
pageRemover.pagesToDelete=Páginas a eliminar (Introduzca una lista de números de página separados por coma): pageRemover.pagesToDelete=Páginas a eliminar (introducir una lista de números de página separados por coma):
pageRemover.submit=Eliminar Páginas pageRemover.submit=Eliminar Páginas
#rotate #rotate
rotate.title=Rotar PDF rotate.title=Rotar PDF
rotate.header=Rotar PDF rotate.header=Rotar PDF
rotate.SeleccionaAngle=Seleccionar ángulo de rotación (múltiple de 90 grados): rotate.selectAngle=Select rotation angle (in multiples of 90 degrees):
rotate.submit=Rotar rotate.submit=Rotar
#merge #merge
split.title=Dividir PDF split.title=Dividir PDF
split.header=Dividir PDF split.header=Dividir PDF
split.desc.1=Los números que selecciones son el número de página en el que desea hacer una división split.desc.1=Los números que seleccione son el número de página en el que desea hacer una división
split.desc.2=Como tal, seleccionar 1,3,7-8 dividiría un documento de 10 páginas en 6 archivos PDF separados con: split.desc.2=Como tal, seleccionar 1,3,7-8 dividiría un documento de 10 páginas en 6 archivos PDF separados con:
split.desc.3=Documento #1: Página 1 split.desc.3=Documento #1: Página 1
split.desc.4=Documento #2: Páginas 2 y 3 split.desc.4=Documento #2: Páginas 2 y 3
@@ -292,7 +620,7 @@ split.desc.5=Documento #3: Páginas 4, 5 y 6
split.desc.6=Documento #4: Página 7 split.desc.6=Documento #4: Página 7
split.desc.7=Documento #5: Página 8 split.desc.7=Documento #5: Página 8
split.desc.8=Documento #6: Páginas 9 y 10 split.desc.8=Documento #6: Páginas 9 y 10
split.splitPages=Introduce las páginas para dividir: split.splitPages=Introducir las páginas para dividir:
split.submit=Dividir split.submit=Dividir
@@ -302,30 +630,32 @@ imageToPDF.header=Imagen a PDF
imageToPDF.submit=Convertir imageToPDF.submit=Convertir
imageToPDF.selectText.1=Estirar para ajustar imageToPDF.selectText.1=Estirar para ajustar
imageToPDF.selectText.2=Rotación automática del PDF imageToPDF.selectText.2=Rotación automática del PDF
imageToPDF.selectText.3=Lógica de archivos múltiples (Únicamente activado si funciona con multiples imágenes) imageToPDF.selectText.3=Lógica de archivos múltiples (únicamente activado si funciona con multiples imágenes)
imageToPDF.selectText.4=Unir en un único archivo PDF imageToPDF.selectText.4=Unir en un único archivo PDF
imageToPDF.selectText.5=Convertir a PDFs separados imageToPDF.selectText.5=Convertir a PDFs separados
#pdfToImage #pdfToImage
pdfToImage.title=PDF a Imagen pdfToImage.title=PDF a Imagen
pdfToImage.header=PDF a Imagen pdfToImage.header=PDF a Imagen
pdfToImage.selectText=Formato de Imagen pdfToImage.selectText=Formato de Imagen
pdfToImage.singleOrMultiple=Tipo resultante de imagen pdfToImage.singleOrMultiple=Tipo resultante de imagen
pdfToImage.single=Una Imagen Grande Única pdfToImage.single=Una única imagen grande
pdfToImage.multi=Múltiples Imágenes pdfToImage.multi=Múltiples imágenes
pdfToImage.colorType=Tipo de color pdfToImage.colorType=Tipo de color
pdfToImage.color=Color pdfToImage.color=Color
pdfToImage.grey=Escala de Grises pdfToImage.grey=Escala de grises
pdfToImage.blackwhite=Blanco y Negro (¡Puedes perder datos!) pdfToImage.blackwhite=Blanco y Negro (¡Puede perder datos!)
pdfToImage.submit=Convertir pdfToImage.submit=Convertir
#addPassword #addPassword
addPassword.title=Añadir Contraseña addPassword.title=Añadir contraseña
addPassword.header=Añadir contraseña (Encriptar) addPassword.header=Añadir contraseña (encriptar)
addPassword.selectText.1=Seleccionar PDF para encriptar addPassword.selectText.1=Seleccionar PDF para encriptar
addPassword.selectText.2=Contraseña addPassword.selectText.2=Contraseña
addPassword.selectText.3=Longitud de la clave de cifrado addPassword.selectText.3=Longitud de la clave de cifrado
addPassword.selectText.4=Valores altos son más fuertes, pero valores bajos tienen mejor compatibilidad. addPassword.selectText.4=Valores altos son más fuertes, pero valores bajos tienen mejor compatibilidad
addPassword.selectText.5=Permisos para establecer addPassword.selectText.5=Permisos para establecer
addPassword.selectText.6=Impedir el ensamblaje del documento addPassword.selectText.6=Impedir el ensamblaje del documento
addPassword.selectText.7=Impedir la extracción de contenido addPassword.selectText.7=Impedir la extracción de contenido
@@ -335,8 +665,12 @@ addPassword.selectText.10=Impedir modificación
addPassword.selectText.11=Impedir modificación de anotaciones addPassword.selectText.11=Impedir modificación de anotaciones
addPassword.selectText.12=Impedir imprimir addPassword.selectText.12=Impedir imprimir
addPassword.selectText.13=Impedir imprimir diferentes formatos addPassword.selectText.13=Impedir imprimir diferentes formatos
addPassword.selectText.14=Contraseña
addPassword.selectText.15=Restringe qué se puede hacer con el documento una vez abierto (no soportado por todos los lectores)
addPassword.selectText.16=Restringe la apertura del propio documento
addPassword.submit=Encriptar addPassword.submit=Encriptar
#watermark #watermark
watermark.title=Añadir marca de agua watermark.title=Añadir marca de agua
watermark.header=Añadir marca de agua watermark.header=Añadir marca de agua
@@ -349,6 +683,7 @@ watermark.selectText.6=Alto (Espacio entre cada marca de agua verticalmente):
watermark.selectText.7=Opacidad (0% - 100%): watermark.selectText.7=Opacidad (0% - 100%):
watermark.submit=Añadir marca de agua watermark.submit=Añadir marca de agua
#remove-watermark #remove-watermark
remove-watermark.title=Eliminar marca de agua remove-watermark.title=Eliminar marca de agua
remove-watermark.header=Eliminar marca de agua remove-watermark.header=Eliminar marca de agua
@@ -356,9 +691,10 @@ remove-watermark.selectText.1=Seleccionar PDF para eliminar la marca de agua:
remove-watermark.selectText.2=Texto de la marca de agua: remove-watermark.selectText.2=Texto de la marca de agua:
remove-watermark.submit=Eliminar marca de agua remove-watermark.submit=Eliminar marca de agua
#Change permissions #Change permissions
permissions.title=Cambiar Permisos permissions.title=Cambiar permisos
permissions.header=Cambiar Permisos permissions.header=Cambiar permisos
permissions.warning=Advertencia: para que estos permisos no se puedan cambiar, se recomienda configurarlos con una contraseña a través de la página de cambio de contraseña permissions.warning=Advertencia: para que estos permisos no se puedan cambiar, se recomienda configurarlos con una contraseña a través de la página de cambio de contraseña
permissions.selectText.1=Seleccionar PDF para cambiar los permisos permissions.selectText.1=Seleccionar PDF para cambiar los permisos
permissions.selectText.2=Permisos a establecer permissions.selectText.2=Permisos a establecer
@@ -372,23 +708,26 @@ permissions.selectText.9=Impedir imprimir
permissions.selectText.10=Impedir imprimir diferentes formatos permissions.selectText.10=Impedir imprimir diferentes formatos
permissions.submit=Cambiar permissions.submit=Cambiar
#remove password #remove password
removePassword.title=Eliminar contraseña removePassword.title=Eliminar contraseña
removePassword.header=Eliminar contraseña (Desencriptar) removePassword.header=Eliminar contraseña (desencriptar)
removePassword.selectText.1=Seleccionar PDF para Desencriptar removePassword.selectText.1=Seleccionar PDF para desencriptar
removePassword.selectText.2=Contraseña removePassword.selectText.2=Contraseña
removePassword.submit=Eliminar removePassword.submit=Eliminar
changeMetadata.title=Cambiar Metadatos
changeMetadata.header=Cambiar Metadatos #changeMetadata
changeMetadata.title=Título:
changeMetadata.header=Cambiar metadatos
changeMetadata.selectText.1=Editar las variables que desea cambiar changeMetadata.selectText.1=Editar las variables que desea cambiar
changeMetadata.selectText.2=Eliminar todos los metadatos changeMetadata.selectText.2=Eliminar todos los metadatos
changeMetadata.selectText.3=Mostrar metadatos personalizados: changeMetadata.selectText.3=Mostrar metadatos personalizados:
changeMetadata.author=Autor: changeMetadata.author=Autor:
changeMetadata.creationDate=Fecha de Creación (aaaa/MM/dd HH:mm:ss): changeMetadata.creationDate=Fecha de creación (aaaa/MM/dd HH:mm:ss):
changeMetadata.creator=Creador: changeMetadata.creator=Creador:
changeMetadata.keywords=Palabras clave: changeMetadata.keywords=Palabras clave:
changeMetadata.modDate=Fecha de Modificación (aaaa/MM/dd HH:mm:ss): changeMetadata.modDate=Fecha de modificación (aaaa/MM/dd HH:mm:ss):
changeMetadata.producer=Productor: changeMetadata.producer=Productor:
changeMetadata.subject=Asunto: changeMetadata.subject=Asunto:
changeMetadata.title=Título: changeMetadata.title=Título:
@@ -397,47 +736,54 @@ changeMetadata.selectText.4=Otros Metadatos:
changeMetadata.selectText.5=Agregar entrada de metadatos personalizados changeMetadata.selectText.5=Agregar entrada de metadatos personalizados
changeMetadata.submit=Cambiar changeMetadata.submit=Cambiar
#xlsToPdf
xlsToPdf.title=Excel a PDF xlsToPdf.title=Excel a PDF
xlsToPdf.header=Excel a PDF xlsToPdf.header=Excel a PDF
xlsToPdf.selectText.1=Seleccionar hoja de cálculo de Excel XLS o XLSX para convertir xlsToPdf.selectText.1=Seleccionar hoja de cálculo de Excel XLS o XLSX para convertir
xlsToPdf.convert=Convertir xlsToPdf.convert=Convertir
#pdfToPDFA
pdfToPDFA.title=PDF a PDF/A pdfToPDFA.title=PDF a PDF/A
pdfToPDFA.header=PDF a PDF/A pdfToPDFA.header=PDF a PDF/A
pdfToPDFA.credit=Este servicio usa OCRmyPDF para la conversión a PDF/A pdfToPDFA.credit=Este servicio usa OCRmyPDF para la conversión a PDF/A
pdfToPDFA.submit=Convertir pdfToPDFA.submit=Convertir
#PDFToWord
PDFToWord.title=PDF a Word PDFToWord.title=PDF a Word
PDFToWord.header=PDF a Word PDFToWord.header=PDF a Word
PDFToWord.selectText.1=Formato de archivo de salida PDFToWord.selectText.1=Formato de archivo de salida
PDFToWord.credit=Este servicio utiliza LibreOffice para la conversión de archivos. PDFToWord.credit=Este servicio utiliza LibreOffice para la conversión de archivos
PDFToWord.submit=Convertir PDFToWord.submit=Convertir
#PDFToPresentation
PDFToPresentation.title=PDF a presentación PDFToPresentation.title=PDF a presentación
PDFToPresentation.header=PDF a presentación PDFToPresentation.header=PDF a presentación
PDFToPresentation.selectText.1=Formato de archivo de salida PDFToPresentation.selectText.1=Formato de archivo de salida
PDFToPresentation.credit=Este servicio utiliza LibreOffice para la conversión de archivos. PDFToPresentation.credit=Este servicio utiliza LibreOffice para la conversión de archivos
PDFToPresentation.submit=Convertir PDFToPresentation.submit=Convertir
#PDFToText
PDFToText.title=PDF a TXT/RTF PDFToText.title=PDF a TXT/RTF
PDFToText.header=PDF a TXT/RTF PDFToText.header=PDF a TXT/RTF
PDFToText.selectText.1=Formato de archivo de salida PDFToText.selectText.1=Formato de archivo de salida
PDFToText.credit=Este servicio utiliza LibreOffice para la conversión de archivos. PDFToText.credit=Este servicio utiliza LibreOffice para la conversión de archivos
PDFToText.submit=Convertir PDFToText.submit=Convertir
#PDFToHTML
PDFToHTML.title=PDF a HTML PDFToHTML.title=PDF a HTML
PDFToHTML.header=PDF a HTML PDFToHTML.header=PDF a HTML
PDFToHTML.credit=Este servicio utiliza LibreOffice para la conversión de archivos. PDFToHTML.credit=Este servicio utiliza LibreOffice para la conversión de archivos
PDFToHTML.submit=Convertir PDFToHTML.submit=Convertir
#PDFToXML
PDFToXML.title=PDF a XML PDFToXML.title=PDF a XML
PDFToXML.header=PDF a XML PDFToXML.header=PDF a XML
PDFToXML.credit=Este servicio utiliza LibreOffice para la conversión de archivos. PDFToXML.credit=Este servicio utiliza LibreOffice para la conversión de archivos
PDFToXML.submit=Convertir PDFToXML.submit=Convertir

View File

@@ -0,0 +1,789 @@
###########
# Generic #
###########
# the direction that the language is written (ltr=left to right, rtl = right to left)
language.direction=ltr
pdfPrompt=Hautatu PDFa(k)
multiPdfPrompt=Hautatu PDFak (2+)
multiPdfDropPrompt=Hautatu (edo arrastatu eta jaregin) nahi dituzun PDFak
imgPrompt=Hautatu Irudia(k)
genericSubmit=Bidali
processTimeWarning=Oharra: prozesu honetarako minutu bat ere beharko da fitxategiaren tamaiaren arabera
pageOrderPrompt=Orrialdeen ordena (sartu komaz bereizitako orrialde-zenbakien zerrenda)
goToPage=Joan
true=Egiazkoa
false=Faltsua
unknown=Ezezaguna
save=Gorde
close=Itxi
filesSelected=Hautatutako fitxategiak
noFavourites=Ez dira gogokoak gehitu
bored=Itxaroten aspertuta?
alphabet=Alfabetoa
downloadPdf=PDFa deskargatu
text=Testua
font=Letra-tipoa
selectFillter=-- Select --
pageNum=Orrialde-zenbakia
sizes.small=Small
sizes.medium=Medium
sizes.large=Large
sizes.x-large=X-Large
error.pdfPassword=PDF dokumentua pasahitzarekin babestuta dago eta pasahitza ez da sartu edo akastuna da
#############
# NAVBAR #
#############
navbar.convert=Bihurtu
navbar.security=Segurtasuna
navbar.other=Beste bat
navbar.darkmode=Modu iluna
navbar.pageOps=Orrialde-eragiketak
navbar.settings=Ezarpenak
#############
# SETTINGS #
#############
settings.title=Ezarpenak
settings.update=Eguneratze eskuragarria
settings.appVersion=Aplikazioaren bertsioa:
settings.downloadOption.title=Hautatu deskargatzeko aukera (fitxategi bakarra deskargatzeko ZIP gabe):
settings.downloadOption.1=Ireki leiho berean
settings.downloadOption.2=Ireki leiho berrian
settings.downloadOption.3=Deskargatu fitxategia
settings.zipThreshold=ZIP fitxategiak deskargatutako fitxategi kopurua gainditzen denean
#############
# HOME-PAGE #
#############
home.desc=Zure leihatila bakarra autoostatatua zure PDF behar guztietarako
home.multiTool.title=Erabilera anitzeko tresna PDF
home.multiTool.desc=Orriak konbinatu, biratu, berrantolatu eta ezabatu
multiTool.tags=Multi Tool,Multi operation,UI,click drag,front end,client side
home.merge.title=Elkartu
home.merge.desc=Elkartu zenbait PDF dokumentu bakar batean modu errazean
merge.tags=merge,Page operations,Back end,server side
home.split.title=Zatitu
home.split.desc=Zatitu PDFak zenbait dokumentutan
##########################
### TODO: Translate ###
##########################
split.tags=Page operations,divide,Multi Page,cut,server side
home.rotate.title=Biratu
home.rotate.desc=Biratu PDFak modu errazean
##########################
### TODO: Translate ###
##########################
rotate.tags=server side
home.imageToPdf.title=Irudia PDF bihurtu
home.imageToPdf.desc=Irudi bat(PNG, JPEG, GIF)PDF bihurtu
##########################
### TODO: Translate ###
##########################
imageToPdf.tags=conversion,img,jpg,picture,photo
home.pdfToImage.title=PDFa irudi bihurtu
home.pdfToImage.desc=PDF bat irudi (PNG, JPEG, GIF) bihurtu
##########################
### TODO: Translate ###
##########################
pdfToImage.tags=conversion,img,jpg,picture,photo
home.pdfOrganiser.title=Antolatzailea
home.pdfOrganiser.desc=Ezabatu/Berrantolatu orrialdeak edozein ordenatan
##########################
### TODO: Translate ###
##########################
pdfOrganiser.tags=duplex,even,odd,sort,move
home.addImage.title=Gehitu irudia PDFari
home.addImage.desc=Gehitu irudi bat PDFan ezarritako kokaleku batean (lanean)
##########################
### TODO: Translate ###
##########################
addImage.tags=img,jpg,picture,photo
home.watermark.title=Gehitu ur-marka
home.watermark.desc=Gehitu aurrez zehaztutako ur-marka bat PFD dokumentuari
##########################
### TODO: Translate ###
##########################
watermark.tags=Text,repeating,label,own,copyright,trademark,img,jpg,picture,photo
home.permissions.title=Aldatu baimenak
home.permissions.desc=Aldatu PDF dokumentuaren baimenak
##########################
### TODO: Translate ###
##########################
permissions.tags=read,write,edit,print
home.removePages.title=Ezabatu
home.removePages.desc=Ezabatu nahi ez dituzun orrialdeak PDF dokumentutik
##########################
### TODO: Translate ###
##########################
removePages.tags=Remove pages,delete pages
home.addPassword.title=Gehitu pasahitza
home.addPassword.desc=Enkriptatu PDF dokumentua pasahitz batekin
##########################
### TODO: Translate ###
##########################
addPassword.tags=secure,security
home.removePassword.title=Ezabatu pasahitza
home.removePassword.desc=Ezabatu pasahitza PDF dokumentutik
##########################
### TODO: Translate ###
##########################
removePassword.tags=secure,Decrypt,security,unpassword,delete password
home.compressPdfs.title=Konprimatu
home.compressPdfs.desc=Konprimatu PDFak fitxategiaren tamaina murrizteko
##########################
### TODO: Translate ###
##########################
compressPdfs.tags=squish,small,tiny
home.changeMetadata.title=Aldatu metadatuak
home.changeMetadata.desc=Aldatu/Ezabatu/Gehitu metadatuak PDF dokumentuari
##########################
### TODO: Translate ###
##########################
changeMetadata.tags==Title,author,date,creation,time,publisher,producer,stats
home.fileToPDF.title=Fitxategia PDF bihurtu
home.fileToPDF.desc=PDF bihurtu ia edozein fitxategi (DOCX, PNG, XLS, PPT, TXT eta gehiago)
##########################
### TODO: Translate ###
##########################
fileToPDF.tags=transformation,format,document,picture,slide,text,conversion,office,docs,word,excel,powerpoint
home.ocr.title=OCR exekutatu PDFan eta/edo garbiketa-eskaneatzeak
home.ocr.desc=Garbiketa-eskaneatzeak eta irudi-testuak detektatu PDF baten barruan eta berriz ere gehitu testu gisa
##########################
### TODO: Translate ###
##########################
ocr.tags=recognition,text,image,scan,read,identify,detection,editable
home.extractImages.title=Atera irudiak
home.extractImages.desc=Atera irudi guztiak PDF batetik eta ZIPen gorde
##########################
### TODO: Translate ###
##########################
extractImages.tags=picture,photo,save,archive,zip,capture,grab
home.pdfToPDFA.title=PDFa PDF/A bihurtu
home.pdfToPDFA.desc=PDFa PDF/A bihurtu luzaro biltegiratzeko
##########################
### TODO: Translate ###
##########################
pdfToPDFA.tags=archive,long-term,standard,conversion,storage,preservation
home.PDFToWord.title=PDFa Word Bihurtu
home.PDFToWord.desc=PDF formatuak Word bihurtu (DOC, DOCX y ODT)
##########################
### TODO: Translate ###
##########################
PDFToWord.tags=doc,docx,odt,word,transformation,format,conversion,office,microsoft,docfile
home.PDFToPresentation.title=PDFa aurkezpen bihurtu
home.PDFToPresentation.desc=PDFa aurkezpen formatu bihurtu (PPT, PPTX y ODP)
##########################
### TODO: Translate ###
##########################
PDFToPresentation.tags=slides,show,office,microsoft
home.PDFToText.title=PDFa TXT edo RTF bihurtu
home.PDFToText.desc=PDFa TXT edo RTF formatu bihurtu
##########################
### TODO: Translate ###
##########################
PDFToText.tags=richformat,richtextformat,rich text format
home.PDFToHTML.title=PDFa HTML bihurtu
home.PDFToHTML.desc=PDFa HTML formatu bihurtu
##########################
### TODO: Translate ###
##########################
PDFToHTML.tags=web content,browser friendly
home.PDFToXML.title=PDFa XML bihurtu
home.PDFToXML.desc=PDFa XML formatu bihurtu
##########################
### TODO: Translate ###
##########################
PDFToXML.tags=data-extraction,structured-content,interop,transformation,convert
home.ScannerImageSplit.title=Detektatu/Zatitu argazki eskaneatuak
home.ScannerImageSplit.desc=Hainbat argazki zatitu argazki/PDF baten barruan
##########################
### TODO: Translate ###
##########################
ScannerImageSplit.tags=separate,auto-detect,scans,multi-photo,organize
home.sign.title=Sinatu
home.sign.desc=Gehitu sinadura PDFari marrazki, testu edo irudi bidez
##########################
### TODO: Translate ###
##########################
sign.tags=authorize,initials,drawn-signature,text-sign,image-signature
home.flatten.title=Lautu
home.flatten.desc=PDF batetik elementu eta inprimaki interaktibo guztiak ezabatu
##########################
### TODO: Translate ###
##########################
flatten.tags=static,deactivate,non-interactive,streamline
home.repair.title=Konpondu
home.repair.desc=Saiatu PDF hondatu/kaltetu bat konpontzen
##########################
### TODO: Translate ###
##########################
repair.tags=fix,restore,correction,recover
home.removeBlanks.title=Ezabatu orrialde zuriak
home.removeBlanks.desc=Detektatu orrialde zuriak eta dokumentutik ezabatu
##########################
### TODO: Translate ###
##########################
removeBlanks.tags=cleanup,streamline,non-content,organize
home.compare.title=Konparatu
home.compare.desc=Konparatu eta erakutsi 2 PDF dokumenturen aldeak
##########################
### TODO: Translate ###
##########################
compare.tags=differentiate,contrast,changes,analysis
home.certSign.title=Sinatu ziurtagiriarekin
home.certSign.desc=Sinatu PDF bat Ziurtagiri/Gako batekin (PEM/P12)
##########################
### TODO: Translate ###
##########################
certSign.tags=authenticate,PEM,P12,official,encrypt
home.pageLayout.title=Zenbait orrialderen diseinua
home.pageLayout.desc=Elkartu orri bakar batean PDF dokumentu baten zenbait orrialde
##########################
### TODO: Translate ###
##########################
pageLayout.tags=merge,composite,single-view,organize
home.scalePages.title=Eskalatu/Doitu orrialdearen tamaina
home.scalePages.desc=Eskalatu/Aldatu orrialde baten tamaina eta/edo edukia
##########################
### TODO: Translate ###
##########################
scalePages.tags=resize,modify,dimension,adapt
home.pipeline.title=Pipeline (Advanced)
home.pipeline.desc=Run multiple actions on PDFs by defining pipeline scripts
##########################
### TODO: Translate ###
##########################
pipeline.tags=automate,sequence,scripted,batch-process
home.add-page-numbers.title=Add Page Numbers
home.add-page-numbers.desc=Add Page numbers throughout a document in a set location
##########################
### TODO: Translate ###
##########################
add-page-numbers.tags=paginate,label,organize,index
home.auto-rename.title=Auto Rename PDF File
home.auto-rename.desc=Auto renames a PDF file based on its detected header
##########################
### TODO: Translate ###
##########################
auto-rename.tags=auto-detect,header-based,organize,relabel
home.adjust-contrast.title=Adjust Colors/Contrast
home.adjust-contrast.desc=Adjust Contrast, Saturation and Brightness of a PDF
##########################
### TODO: Translate ###
##########################
adjust-contrast.tags=color-correction,tune,modify,enhance
home.crop.title=Crop PDF
home.crop.desc=Crop a PDF to reduce its size (maintains text!)
##########################
### TODO: Translate ###
##########################
crop.tags=trim,shrink,edit,shape
home.autoSplitPDF.title=Auto Split Pages
home.autoSplitPDF.desc=Auto Split Scanned PDF with physical scanned page splitter QR Code
##########################
### TODO: Translate ###
##########################
autoSplitPDF.tags=QR-based,separate,scan-segment,organize
home.sanitizePdf.title=Sanitize
home.sanitizePdf.desc=Remove scripts and other elements from PDF files
##########################
### TODO: Translate ###
##########################
sanitizePdf.tags=clean,secure,safe,remove-threats
##########################
### TODO: Translate ###
##########################
home.URLToPDF.title=URL/Website To PDF
home.URLToPDF.desc=Converts any http(s)URL to PDF
URLToPDF.tags=web-capture,save-page,web-to-doc,archive
##########################
### TODO: Translate ###
##########################
home.HTMLToPDF.title=HTML to PDF
home.HTMLToPDF.desc=Converts any HTML file or zip to PDF
HTMLToPDF.tags=markup,web-content,transformation,convert
###########################
# #
# WEB PAGES #
# #
###########################
#url-to-pdf
URLToPDF.title=URL To PDF
URLToPDF.header=URL To PDF
URLToPDF.submit=Convert
URLToPDF.credit=Uses WeasyPrint
#html-to-pdf
HTMLToPDF.title=HTML To PDF
HTMLToPDF.header=HTML To PDF
HTMLToPDF.help=Accepts HTML files and ZIPs containing html/css/images etc required
HTMLToPDF.submit=Convert
HTMLToPDF.credit=Uses WeasyPrint
#sanitizePDF
sanitizePDF.title=Sanitize PDF
sanitizePDF.header=Sanitize a PDF file
sanitizePDF.selectText.1=Remove JavaScript actions
sanitizePDF.selectText.2=Remove embedded files
sanitizePDF.selectText.3=Remove metadata
sanitizePDF.selectText.4=Remove links
sanitizePDF.selectText.5=Remove fonts
sanitizePDF.submit=Sanitize PDF
#addPageNumbers
addPageNumbers.title=Add Page Numbers
addPageNumbers.header=Add Page Numbers
addPageNumbers.selectText.1=Select PDF file:
addPageNumbers.selectText.2=Margin Size
addPageNumbers.selectText.3=Position
addPageNumbers.selectText.4=Starting Number
addPageNumbers.selectText.5=Pages to Number
addPageNumbers.selectText.6=Custom Text
addPageNumbers.submit=Add Page Numbers
#auto-rename
auto-rename.title=Auto Rename
auto-rename.header=Auto Rename PDF
auto-rename.submit=Auto Rename
#adjustContrast
adjustContrast.title=Adjust Contrast
adjustContrast.header=Adjust Contrast
adjustContrast.contrast=Contrast:
adjustContrast.brightness=Brightness:
adjustContrast.saturation=Saturation:
adjustContrast.download=Download
#crop
crop.title=Crop
crop.header=Crop Image
crop.submit=Submit
#autoSplitPDF
autoSplitPDF.title=Auto Split PDF
autoSplitPDF.header=Auto Split PDF
autoSplitPDF.description=Print, Insert, Scan, upload, and let us auto-separate your documents. No manual work sorting needed.
autoSplitPDF.selectText.1=Print out some divider sheets from below (Black and white is fine).
autoSplitPDF.selectText.2=Scan all your documents at once by inserting the divider sheet between them.
autoSplitPDF.selectText.3=Upload the single large scanned PDF file and let Stirling PDF handle the rest.
autoSplitPDF.selectText.4=Divider pages are automatically detected and removed, guaranteeing a neat final document.
autoSplitPDF.formPrompt=Submit PDF containing Stirling-PDF Page dividers:
autoSplitPDF.duplexMode=Duplex Mode (Front and back scanning)
autoSplitPDF.dividerDownload1=Download 'Auto Splitter Divider (minimal).pdf'
autoSplitPDF.dividerDownload2=Download 'Auto Splitter Divider (with instructions).pdf'
autoSplitPDF.submit=Submit
#pipeline
pipeline.title=Pipeline
#pageLayout
pageLayout.title=Hainbat orrialderen diseinua
pageLayout.header=Hainbat orrialderen diseinua
pageLayout.pagesPerSheet=Orrialdeak orriko:
pageLayout.submit=Entregatu
#scalePages
scalePages.title=Doitu orrialdearen eskala
scalePages.header=Doitu orrialdearen eskala
scalePages.pageSize=Dokumentuaren orrialdearen tamaina
scalePages.scaleFactor=Orriaren zoom maila (moztea)
scalePages.submit=Entregatu
#certSign
certSign.title=Ziurtagiriaren sinadura
certSign.header=Sinatu PDF bat haren ziurtagiriarekin (lanean)
certSign.selectPDF=Hautatu PDF fitxategi bat sinatzeko:
certSign.selectKey=Hautatu gako pribatuko fitxategia (PKCS#8 formatua, .pem edo .der izan liteke):
certSign.selectCert=Hautatu ziurtagiridun fitxategia (X.509 formatua, .pem edo .der izan liteke):
certSign.selectP12=Hautatu gakoak gordetzeko fitxategia PKCS#12 (.p12 o .pfx) (Aukerakoa, ematen bada, gako pribatua eta ziurtagiria izan beharko ditu):
certSign.certType=Ziurtagiri-mota
certSign.password=Sartu zure gakoen biltegia edo gako pribatuko pasahitza (hala badagokio):
certSign.showSig=Erakutsi sinadura
certSign.reason=Arrazoia
certSign.location=Kokalekua
certSign.name=Izena
certSign.submit=Sinatu PDFa
#removeBlanks
removeBlanks.title=Ezabatu zuriuneak
removeBlanks.header=Ezabatu orrialde zuriak
removeBlanks.threshold=Gutxieneko balioa:
removeBlanks.thresholdDesc=Pixel bat zeinen zuri izan behar den ezartzeko gutxieneko balioa
removeBlanks.whitePercent=Zuriaren protzentajea (%):
removeBlanks.whitePercentDesc=Zuria izan behar den orriaren ehunekoa ezabatua izan dadin
removeBlanks.submit=Ezabatu zuriuneak
#compare
compare.title=Konparatu
compare.header=Konparatu PDF fitxategiak
compare.document.1=1. dokumentua
compare.document.2=2. dokumentua
compare.submit=Konparatu
#sign
sign.title=Sinatu
sign.header=Sinatu PDF fitxategiak
sign.upload=Igo irudia
sign.draw=Marraztu sinadura
sign.text=Testua sartzea
sign.clear=Garbitu
sign.add=Gehitu
#repair
repair.title=Konpondu
repair.header=Konpondu PDF fitxategiak
repair.submit=Konpondu
#flatten
flatten.title=Lautu
flatten.header=Akoplatu PDF fitxategiak
flatten.submit=Lautu
#ScannerImageSplit
ScannerImageSplit.selectText.1=Angeluaren gutxieneko balioa:
ScannerImageSplit.selectText.2=Ezarri eskatutako gutxieneko angelu absolutua irudia biratzeko (lehenetsia: 10).
ScannerImageSplit.selectText.3=Tolerantzia:
ScannerImageSplit.selectText.4=Ezarri kalkulatutako atzeko kolorearen inguruko kolorearen aldakuntza tartea (lehenetsia: 30).
ScannerImageSplit.selectText.5=Gutxieneko area:
ScannerImageSplit.selectText.6=Ezarri arearen gutxieneko balioa argazki batentzat (lehenetsia: 10000).
ScannerImageSplit.selectText.7=Inguruko area gutxienekoa:
ScannerImageSplit.selectText.8=Ezarri inguruko arearen gutxieneko balioa argazki batentzat
ScannerImageSplit.selectText.9=Ertzaren tamaina:
ScannerImageSplit.selectText.10=Ezarri gehitutako eta ezabatutako ertzaren tamaina irteeran ertz zuriak saihesteko (lehenetsia: 1).
#OCR
ocr.title=OCR / Garbiketa-eskaneatzea
ocr.header=Garbiketa-eskaneatzea / OCR (Karaktere-ezagutze optikoa)
ocr.selectText.1=Hautatu PDFan detektatuko diren hizkuntzak (zerrendatutakoak gaur egun detektatzen dituenak dira):
ocr.selectText.2=Sortu OCR testua duen testu-fitxategi bat OCR-ren bidez editatutako PDFarekin batera
ocr.selectText.3=Zuzendu angelu okertu batean eskaneatu ziren orrialdeak berriro beren lekura biratuta
ocr.selectText.4=Garbitu orrialdea OCRk hondoko zaratan testua aurkitzeko probabilitate txikiagoa izan dezan (Irteeran aldatu gabe)
ocr.selectText.5=Garbitu orrialdea OCRk hondoko zaratan testua aurkitzeko probabilitate txikiagoa izan dezan, irteeran garbi mantentzen du.
ocr.selectText.6=Alde batera utzi testu interaktiboa duten orrialdeak, bakarrik irudi diren OCR orrialdeak
ocr.selectText.7=OCR behartu, OCRk orrialde bakoitzean jatorrizko testu guztia ezabatuko du
ocr.selectText.8=Normala (Errorea gertatuko da PDFak testua baldin badu)
ocr.selectText.9=Ezarpen gehigarriak
ocr.selectText.10=OCR modua
ocr.selectText.11=Irudiak ezabatu OCR-ren ondoren (Irudi GUZTIAK ezabatzen ditu, bakarrik da erabilgarri bihurketa urratsaren parte baldin bada)
ocr.selectText.12=Prozesaketa-mota (aurreratua)
ocr.help=Irakurri honen erabilerari buruzko dokumentazioa beste hizkuntza batzuetarako eta/edo ez erabili Docker-en
ocr.credit=Zerbitzu honek OCRmyPDF eta OCR-rako Tesseract erabiltzen ditu
ocr.submit=PDF prozesatu OCR-rekin
#extractImages
extractImages.title=Atera irudiak
extractImages.header=Atera irudiak
extractImages.selectText=Hautatu irudi-formatua ateratako irudiak bihurtzeko
extractImages.submit=Atera
#File to PDF
fileToPDF.title=Fitxategia PDF bihurtu
fileToPDF.header=Edozein fitxategi PDF bihurtu
fileToPDF.credit=Zerbitzu honek LibreOffice eta Unoconv erabiltzen ditu fitxategiak bihurtzeko
fileToPDF.supportedFileTypes=Jasandako fitxategi-motek behekoak barne hartu behar dituzte; hala ere, jasandako formatuen zerrenda osoa eta eguneratua izateko, kontsultatu, mesedez, LibreOffice-en dokumentazioa
fileToPDF.submit=PDF bihurtu
#compress
compress.title=Konprimatu
compress.header=PDFa konprimatu
compress.credit=Zerbitzu honek Ghostscript erabiltzen du PDFak komprimatzeko/optimizatzeko
compress.selectText.1=Eskuz 1etik 4ra
compress.selectText.2=Optimizazio maila:
compress.selectText.3=4 (Izugarria testu-irudietarako)
compress.selectText.4=Automatikoa: automatikoki egokitzen du kalitatea PDFak tamaina doi-doia izan dezan
compress.selectText.5=PDFaren espero den tamaina (adibidez, 25 MB, 10.8 MB, 25 KB)
compress.submit=Konprimatu
#Add image
addImage.title=Gehitu irudia
addImage.header=Gehitu PDF-irudia
addImage.everyPage=Orrialde guztiak?
addImage.upload=Gehitu irudia
addImage.submit=Gehitu irudia
#merge
merge.title=Elkartu
merge.header=Elkartu zenbait PDF (2+)
merge.submit=Elkartu
#pdfOrganiser
pdfOrganiser.title=Orrialdeen antolatzailea
pdfOrganiser.header=PDF orrialdeen antolatzailea
pdfOrganiser.submit=Antolatu orrialdeak
#multiTool
multiTool.title=PDF erabilera anitzeko tresna
multiTool.header=PDF erabilera anitzeko tresna
#pageRemover
pageRemover.title=Orrialdeen ezabatzailea
pageRemover.header=PDF orrialdeen ezabatzailea
pageRemover.pagesToDelete=Ezabatu beharreko orrialdeak (sartu komaz bereizitako orrialde-zenbakien zerrenda):
pageRemover.submit=Ezabatu orrialdeak
#rotate
rotate.title=Biratu PDFa
rotate.header=Biratu PDFa
rotate.selectAngle=Select rotation angle (in multiples of 90 degrees):
rotate.submit=Biratu
#merge
split.title=Zatitu PDFa
split.header=Zatitu PDFa
split.desc.1=Hautatzen dituzun zenbakiak zatiketa egin nahi duzun orrialde-zenbakiak dira
split.desc.2=Beraz, 1,3,7-8 hautatzean 10 orrialdeko dokumentua zatituko luke 6 PDF fitxategi bereizituetan
split.desc.3=#1 Dokumentua: 1. orrialdea
split.desc.4=#2 Dokumentua: 2. eta 3. orrialdeak
split.desc.5=#3 Dokumentua: 4., 5. eta 6. orrialdeak
split.desc.6=#4 Dokumentua: 7. orrialdea
split.desc.7=#5 Dokumentua: 8. orrialdea
split.desc.8=#6 Dokumentua: 9. eta 10. orrialdeak
split.splitPages=Sartu orrialdeak zatitzeko:
split.submit=Zatitu
#merge
imageToPDF.title=Irudia PDF bihurtu
imageToPDF.header=Irudia PDF bihurtu
imageToPDF.submit=Bihurtu
imageToPDF.selectText.1=Zabaldu doitzeko
imageToPDF.selectText.2=PDFaren errotazio automatikoa
imageToPDF.selectText.3=Fitxategi askoren logika (gaituta bakarrik zenbait irudirekin ari denean)
imageToPDF.selectText.4=Elkartu PDF bakar batean
imageToPDF.selectText.5=Bihurtu eta PDF bereizituak sortu
#pdfToImage
pdfToImage.title=PDFa irudi bihurtu
pdfToImage.header=PDFa irudi bihurtu
pdfToImage.selectText=Irudi-formatua
pdfToImage.singleOrMultiple=Ondoriozko irudi-mota
pdfToImage.single=Irudi handi bakarra
pdfToImage.multi=Zenbait irudi
pdfToImage.colorType=Kolore-mota
pdfToImage.color=Kolorea
pdfToImage.grey=Gris-eskala
pdfToImage.blackwhite=Zuria eta Beltza (Datuak galdu ditzake!)
pdfToImage.submit=Bihurtu
#addPassword
addPassword.title=Gehitu pasahitza
addPassword.header=Gehitu pasahitza (enkriptatu)
addPassword.selectText.1=Hautatu PDFa enkriptatzeko
addPassword.selectText.2=Pasahitza
addPassword.selectText.3=Gakoaren luzera
addPassword.selectText.4=Balio altuak sendoagoak dira, baina balio baxuek bateragarritasun hobea dute
addPassword.selectText.5=Ezartzeko baimenak
addPassword.selectText.6=Galarazi dokumentuaren mihiztaketa
addPassword.selectText.7=Galarazi edukia ateratzea
addPassword.selectText.8=Galarazi ateratzea irisgarritasunerako
addPassword.selectText.9=Galarazi inprimakia betetzea
addPassword.selectText.10=Galarazi aldaketak egitea
addPassword.selectText.11=Galarazi oharrak aldatzea
addPassword.selectText.12=Galarazi inprimatzea
addPassword.selectText.13=Galarazi zenbait formatu inprimatzea
addPassword.selectText.14=Pasahitza
addPassword.selectText.15=Mugatu zer egin daitekeen dokumentuarekin behin zabalduta (Irakurle guztiek onartu gabe)
addPassword.selectText.16=Mugatu dokumentu bera zabaltzeko aukera
addPassword.submit=Enkriptatu
#watermark
watermark.title=Gehitu ur-marka
watermark.header=Gehitu ur-marka
watermark.selectText.1=Hautatu PDFa ur-marka gehitzeko:
watermark.selectText.2=Ur-markaren testua:
watermark.selectText.3=Letra-tipoaren tamaina:
watermark.selectText.4=Errotazioa (0-360):
watermark.selectText.5=Zabalera (ur-marka bakoitzaren arteko espazioa horizontalean):
watermark.selectText.6=Altuera (ur-marka bakoitzaren arteko espazioa bertikalean):
watermark.selectText.7=Opakutasuna (0% - 100%):
watermark.submit=Gehitu ur-marka
#remove-watermark
remove-watermark.title=Ezabatu ur-marka
remove-watermark.header=Ezabatu ur-marka
remove-watermark.selectText.1=Hautatu PDFa ur-marka ezabatzeko:
remove-watermark.selectText.2=Ur-markaren testua:
remove-watermark.submit=Ezabatu ur-marka
#Change permissions
permissions.title=Aldatu baimenak
permissions.header=Aldatu baimenak
permissions.warning=Oharra: baimen hauek aldatzea ezinezkoa izan dadin, gomendatzen da pasahitz batekin konfiguratzea pasahitza aldatzeko orriaren bitartez
permissions.selectText.1=Hautatu PDFa baimenak aldatzeko
permissions.selectText.2=Baimenak, ezarri beharrekoak
permissions.selectText.3=Galarazi dokumentuaren mihiztaketa
permissions.selectText.4=Galarazi edukia ateratzea
permissions.selectText.5=Galarazi ateratzea irisgarritasunerako
permissions.selectText.6=Galarazi inprimakia betetzea
permissions.selectText.7=Galarazi aldaketak egitea
permissions.selectText.8=Galarazi oharrak aldatzea
permissions.selectText.9=Galarazi inprimatzea
permissions.selectText.10=Galarazi zenbait formatu inprimatzea
permissions.submit=Aldatu
#remove password
removePassword.title=Ezabatu pasahitza
removePassword.header=Ezabatu pasahitza (desenkriptatu)
removePassword.selectText.1=Hautatu PDFa desenkriptatzeko
removePassword.selectText.2=Pasahitza
removePassword.submit=Ezabatu
#changeMetadata
changeMetadata.title=Izenburua:
changeMetadata.header=Aldatu metadatuak
changeMetadata.selectText.1=Editatu aldatu nahi dituzun aldagaiak
changeMetadata.selectText.2=Ezabatu metadatu guztiak
changeMetadata.selectText.3=Erakutsi metadatu pertsonalizatuak:
changeMetadata.author=Egilea:
changeMetadata.creationDate=Sortze-data (aaaa/MM/dd HH:mm:ss):
changeMetadata.creator=Sortzailea:
changeMetadata.keywords=Gako-hitzak:
changeMetadata.modDate=Aldatze-data (aaaa/MM/dd HH:mm:ss):
changeMetadata.producer=Ekoizlea:
changeMetadata.subject=Gaia:
changeMetadata.title=Izenburua:
changeMetadata.trapped=Trapped:
changeMetadata.selectText.4=Beste metadatu batzuk:
changeMetadata.selectText.5=Gehitu metadatu pertsonalizatuen sarrera
changeMetadata.submit=Aldatu
#xlsToPdf
xlsToPdf.title=Excela PDF bihurtu
xlsToPdf.header=Excela PDF bihurtu
xlsToPdf.selectText.1=Hautatu Excel XLSren edo XLSXren kalkulu-orria bihurtzeko
xlsToPdf.convert=Bikurtu
#pdfToPDFA
pdfToPDFA.title=PDFa PDF/A bihurtu
pdfToPDFA.header=PDFa PDF/A bihurtu
pdfToPDFA.credit=Zerbitzu honek OCRmyPDF erabiltzen du PDFak PDF/A bihurtzeko
pdfToPDFA.submit=Bihurtu
#PDFToWord
PDFToWord.title=PDFa Word bihurtu
PDFToWord.header=PDFa Word bihurtu
PDFToWord.selectText.1=Irteerako fitxategiaren formatua
PDFToWord.credit=Zerbitzu honek LibreOffice erabiltzen du fitxategiak bihurtzeko
PDFToWord.submit=Bihurtu
#PDFToPresentation
PDFToPresentation.title=PDFa aurkezpen bihurtu
PDFToPresentation.header=PDFa aurkezpen bihurtu
PDFToPresentation.selectText.1=Irteerako fitxategiaren formatua
PDFToPresentation.credit=Zerbitzu honek LibreOffice erabiltzen du fitxategiak bihurtzeko
PDFToPresentation.submit=Bihurtu
#PDFToText
PDFToText.title=PDFa TXT/RTF bihurtu
PDFToText.header=PDFa TXT/RTF bihurtu
PDFToText.selectText.1=Irteerako fitxategiaren formatua
PDFToText.credit=Zerbitzu honek LibreOffice erabiltzen du fitxategiak bihurtzeko
PDFToText.submit=Bihurtu
#PDFToHTML
PDFToHTML.title=PDFa HTML bihurtu
PDFToHTML.header=PDFa HTML bihurtu
PDFToHTML.credit=Zerbitzu honek LibreOffice erabiltzen du fitxategiak bihurtzeko
PDFToHTML.submit=Bihurtu
#PDFToXML
PDFToXML.title=PDFa XML bihurtu
PDFToXML.header=PDFa XML bihurtu
PDFToXML.credit=Zerbitzu honek LibreOffice erabiltzen du fitxategiak bihurtzeko
PDFToXML.submit=Bihurtu

View File

@@ -1,11 +1,7 @@
#!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!#
# Translated by Google Translate #
#!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!#
########### ###########
# Generic # # Generic #
########### ###########
# the direction that the language is written (ltr=left to right, rtl=right to left) # the direction that the language is written (ltr=left to right, rtl = right to left)
language.direction=ltr language.direction=ltr
pdfPrompt=Choisir PDF pdfPrompt=Choisir PDF
@@ -24,118 +20,441 @@ close=Fermer
filesSelected=fichiers sélectionnés filesSelected=fichiers sélectionnés
noFavourites=Aucun favori ajouté noFavourites=Aucun favori ajouté
bored=Ennuyé d'attendre ? bored=Ennuyé d'attendre ?
############# alphabet=Alphabet
# HOME-PAGE # downloadPdf=Télécharger le PDF
############# text=Texte
home.desc=Votre guichet unique hébergé localement pour tous vos besoins PDF. font=Police
selectFillter=-- Select --
pageNum=numéro de page
sizes.small=Small
sizes.medium=Medium
sizes.large=Large
sizes.x-large=X-Large
error.pdfPassword=The PDF Document is passworded and either the password was not provided or was incorrect
#############
# NAVBAR #
#############
navbar.convert=Convertir navbar.convert=Convertir
navbar.security=Sécurité navbar.security=Sécurité
navbar.other=Autre navbar.other=Autre
navbar.darkmode=Mode sombre navbar.darkmode=Mode sombre
navbar.pageOps=Opérations de page navbar.pageOps=Opérations de page
navbar.settings=Paramètres
#############
# SETTINGS #
#############
settings.title=Paramètres
settings.update=Mise à jour disponible
settings.appVersion=Version de l'application :
settings.downloadOption.title=Choisissez l'option de téléchargement (pour les téléchargements sans fichier unique) :
settings.downloadOption.1=Ouvrir dans la même fenêtre
settings.downloadOption.2=Ouvrir dans une nouvelle fenêtre
settings.downloadOption.3=Fichier téléchargé
settings.zipThreshold=Zip les fichiers lorsque le nombre de fichiers téléchargés dépasse
#############
# HOME-PAGE #
#############
home.desc=Votre guichet unique hébergé localement pour tous vos besoins PDF.
home.multiTool.title=Multi-outil PDF home.multiTool.title=Multi-outil PDF
home.multiTool.desc=Fusionner, faire pivoter, réorganiser et supprimer des pages home.multiTool.desc=Fusionner, faire pivoter, réorganiser et supprimer des pages
multiTool.tags=Multi Tool,Multi operation,UI,click drag,front end,client side
home.merge.title=Fusionnez home.merge.title=Fusionnez
home.merge.desc=Fusionnez facilement plusieurs PDF en un seul. home.merge.desc=Fusionnez facilement plusieurs PDF en un seul.
merge.tags=merge,Page operations,Back end,server side
home.split.title=Fractionner home.split.title=Fractionner
home.split.desc=Diviser les PDF en plusieurs documents home.split.desc=Diviser les PDF en plusieurs documents
##########################
### TODO: Translate ###
##########################
split.tags=Page operations,divide,Multi Page,cut,server side
home.rotate.title=Tourner home.rotate.title=Tourner
home.rotate.desc=Faites pivoter facilement vos PDF. home.rotate.desc=Faites pivoter facilement vos PDF.
##########################
### TODO: Translate ###
##########################
rotate.tags=server side
home.imageToPdf.title=Image au format PDF home.imageToPdf.title=Image au format PDF
home.imageToPdf.desc=Convertir une image (PNG, JPEG, GIF) en PDF. home.imageToPdf.desc=Convertir une image (PNG, JPEG, GIF) en PDF.
##########################
### TODO: Translate ###
##########################
imageToPdf.tags=conversion,img,jpg,picture,photo
home.pdfToImage.title=PDF vers image home.pdfToImage.title=PDF vers image
home.pdfToImage.desc=Convertir un PDF en image. (PNG, JPEG, GIF) home.pdfToImage.desc=Convertir un PDF en image. (PNG, JPEG, GIF)
##########################
### TODO: Translate ###
##########################
pdfToImage.tags=conversion,img,jpg,picture,photo
home.pdfOrganiser.title=Organisateur home.pdfOrganiser.title=Organisateur
home.pdfOrganiser.desc=Supprimer/Réorganiser les pages dans n'importe quel ordre home.pdfOrganiser.desc=Supprimer/Réorganiser les pages dans n'importe quel ordre
##########################
### TODO: Translate ###
##########################
pdfOrganiser.tags=duplex,even,odd,sort,move
home.addImage.title=Ajouter une image au PDF home.addImage.title=Ajouter une image au PDF
home.addImage.desc=Ajoute une image à un emplacement défini sur le PDF (Travail en cours) home.addImage.desc=Ajoute une image à un emplacement défini sur le PDF (Travail en cours)
##########################
### TODO: Translate ###
##########################
addImage.tags=img,jpg,picture,photo
home.watermark.title=Ajouter un filigrane home.watermark.title=Ajouter un filigrane
home.watermark.desc=Ajoutez un filigrane personnalisé à votre document PDF. home.watermark.desc=Ajoutez un filigrane personnalisé à votre document PDF.
##########################
home.remove-watermark.title=Supprimer le filigrane ### TODO: Translate ###
home.remove-watermark.desc=Supprimez les filigranes de votre document PDF. ##########################
watermark.tags=Text,repeating,label,own,copyright,trademark,img,jpg,picture,photo
home.permissions.title=Modifier les autorisations home.permissions.title=Modifier les autorisations
home.permissions.desc=Modifier les permissions de votre document PDF home.permissions.desc=Modifier les permissions de votre document PDF
##########################
### TODO: Translate ###
##########################
permissions.tags=read,write,edit,print
home.removePages.title=Supprimer home.removePages.title=Supprimer
home.removePages.desc=Supprimez les pages inutiles de votre document PDF. home.removePages.desc=Supprimez les pages inutiles de votre document PDF.
##########################
### TODO: Translate ###
##########################
removePages.tags=Remove pages,delete pages
home.addPassword.title=Ajouter un mot de passe home.addPassword.title=Ajouter un mot de passe
home.addPassword.desc=Cryptez votre document PDF avec un mot de passe. home.addPassword.desc=Cryptez votre document PDF avec un mot de passe.
##########################
### TODO: Translate ###
##########################
addPassword.tags=secure,security
home.removePassword.title=Supprimer le mot de passe home.removePassword.title=Supprimer le mot de passe
home.removePassword.desc=Supprimez la protection par mot de passe de votre document PDF. home.removePassword.desc=Supprimez la protection par mot de passe de votre document PDF.
##########################
### TODO: Translate ###
##########################
removePassword.tags=secure,Decrypt,security,unpassword,delete password
home.compressPdfs.title=Compresser home.compressPdfs.title=Compresser
home.compressPdfs.desc=Compressez les PDF pour réduire leur taille de fichier. home.compressPdfs.desc=Compressez les PDF pour réduire leur taille de fichier.
##########################
### TODO: Translate ###
##########################
compressPdfs.tags=squish,small,tiny
home.changeMetadata.title=Modifier les métadonnées home.changeMetadata.title=Modifier les métadonnées
home.changeMetadata.desc=Modifier/Supprimer/Ajouter des métadonnées d'un document PDF home.changeMetadata.desc=Modifier/Supprimer/Ajouter des métadonnées d'un document PDF
##########################
### TODO: Translate ###
##########################
changeMetadata.tags==Title,author,date,creation,time,publisher,producer,stats
home.fileToPDF.title=Convertir un fichier en PDF home.fileToPDF.title=Convertir un fichier en PDF
home.fileToPDF.desc=Convertissez presque n\u2019importe quel fichier en PDF (DOCX, PNG, XLS, PPT, TXT et plus) home.fileToPDF.desc=Convertissez presque n\u2019importe quel fichier en PDF (DOCX, PNG, XLS, PPT, TXT et plus)
##########################
### TODO: Translate ###
##########################
fileToPDF.tags=transformation,format,document,picture,slide,text,conversion,office,docs,word,excel,powerpoint
home.ocr.title=Exécuter l'OCR sur les scans PDF et/ou de nettoyage home.ocr.title=Exécuter l'OCR sur les scans PDF et/ou de nettoyage
home.ocr.desc=Le nettoyage analyse et détecte le texte des images dans un PDF et le rajoute en tant que texte. home.ocr.desc=Le nettoyage analyse et détecte le texte des images dans un PDF et le rajoute en tant que texte.
##########################
### TODO: Translate ###
##########################
ocr.tags=recognition,text,image,scan,read,identify,detection,editable
home.extractImages.title=Extraire les images home.extractImages.title=Extraire les images
home.extractImages.desc=Extrait toutes les images d\u2019un PDF et les enregistre au format zip home.extractImages.desc=Extrait toutes les images d\u2019un PDF et les enregistre au format zip
##########################
### TODO: Translate ###
##########################
extractImages.tags=picture,photo,save,archive,zip,capture,grab
home.pdfToPDFA.title=Convertir PDF en PDF/A home.pdfToPDFA.title=Convertir PDF en PDF/A
home.pdfToPDFA.desc=Convertir un PDF en PDF/A pour un stockage à long terme home.pdfToPDFA.desc=Convertir un PDF en PDF/A pour un stockage à long terme
##########################
### TODO: Translate ###
##########################
pdfToPDFA.tags=archive,long-term,standard,conversion,storage,preservation
home.PDFToWord.title=PDF vers Word home.PDFToWord.title=PDF vers Word
home.PDFToWord.desc=Convertir les formats PDF en Word (DOC, DOCX et ODT) home.PDFToWord.desc=Convertir les formats PDF en Word (DOC, DOCX et ODT)
##########################
### TODO: Translate ###
##########################
PDFToWord.tags=doc,docx,odt,word,transformation,format,conversion,office,microsoft,docfile
home.PDFToPresentation.title=PDF vers présentation home.PDFToPresentation.title=PDF vers présentation
home.PDFToPresentation.desc=Convertir des PDF en formats de présentation (PPT, PPTX et ODP) home.PDFToPresentation.desc=Convertir des PDF en formats de présentation (PPT, PPTX et ODP)
##########################
### TODO: Translate ###
##########################
PDFToPresentation.tags=slides,show,office,microsoft
home.PDFToText.title=PDF vers texte/RTF home.PDFToText.title=PDF vers texte/RTF
home.PDFToText.desc=Convertir un PDF au format Texte ou RTF home.PDFToText.desc=Convertir un PDF au format Texte ou RTF
##########################
### TODO: Translate ###
##########################
PDFToText.tags=richformat,richtextformat,rich text format
home.PDFToHTML.title=PDF vers HTML home.PDFToHTML.title=PDF vers HTML
home.PDFToHTML.desc=Convertir le PDF au format HTML home.PDFToHTML.desc=Convertir le PDF au format HTML
##########################
### TODO: Translate ###
##########################
PDFToHTML.tags=web content,browser friendly
home.PDFToXML.title=PDF vers XML home.PDFToXML.title=PDF vers XML
home.PDFToXML.desc=Convertir le PDF au format XML home.PDFToXML.desc=Convertir le PDF au format XML
##########################
### TODO: Translate ###
##########################
PDFToXML.tags=data-extraction,structured-content,interop,transformation,convert
home.ScannerImageSplit.title=Détecter/diviser les photos numérisées home.ScannerImageSplit.title=Détecter/diviser les photos numérisées
home.ScannerImageSplit.desc=Divise plusieurs photos à partir d'une photo/PDF home.ScannerImageSplit.desc=Divise plusieurs photos à partir d'une photo/PDF
##########################
### TODO: Translate ###
##########################
ScannerImageSplit.tags=separate,auto-detect,scans,multi-photo,organize
home.sign.title=Signe home.sign.title=Signe
home.sign.desc=Ajoute une signature au PDF par dessin, texte ou image home.sign.desc=Ajoute une signature au PDF par dessin, texte ou image
##########################
### TODO: Translate ###
##########################
sign.tags=authorize,initials,drawn-signature,text-sign,image-signature
home.flatten.title=Aplatir home.flatten.title=Aplatir
home.flatten.desc=Supprimer tous les éléments et formulaires interactifs d'un PDF home.flatten.desc=Supprimer tous les éléments et formulaires interactifs d'un PDF
##########################
### TODO: Translate ###
##########################
flatten.tags=static,deactivate,non-interactive,streamline
home.repair.title=Réparer home.repair.title=Réparer
home.repair.desc=Essaye de réparer un PDF corrompu/cassé home.repair.desc=Essaye de réparer un PDF corrompu/cassé
##########################
### TODO: Translate ###
##########################
repair.tags=fix,restore,correction,recover
home.removeBlanks.title=Supprimer les pages vierges home.removeBlanks.title=Supprimer les pages vierges
home.removeBlanks.desc=Détecte et supprime les pages vierges d'un document home.removeBlanks.desc=Détecte et supprime les pages vierges d'un document
##########################
### TODO: Translate ###
##########################
removeBlanks.tags=cleanup,streamline,non-content,organize
home.compare.title=Comparer home.compare.title=Comparer
home.compare.desc=Compare et affiche les différences entre 2 documents PDF home.compare.desc=Compare et affiche les différences entre 2 documents PDF
##########################
### TODO: Translate ###
##########################
compare.tags=differentiate,contrast,changes,analysis
downloadPdf=Télécharger le PDF home.certSign.title=Sign with Certificate
text=Texte home.certSign.desc=Signs a PDF with a Certificate/Key (PEM/P12)
font=Police ##########################
selectFilter=-- Sélectionner -- ### TODO: Translate ###
pageNum=numéro de page ##########################
certSign.tags=authenticate,PEM,P12,official,encrypt
home.pageLayout.title=Multi-Page Layout
home.pageLayout.desc=Merge multiple pages of a PDF document into a single page
##########################
### TODO: Translate ###
##########################
pageLayout.tags=merge,composite,single-view,organize
home.scalePages.title=Adjust page size/scale
home.scalePages.desc=Change the size/scale of page and/or its contents.
##########################
### TODO: Translate ###
##########################
scalePages.tags=resize,modify,dimension,adapt
home.pipeline.title=Pipeline (Advanced)
home.pipeline.desc=Run multiple actions on PDFs by defining pipeline scripts
##########################
### TODO: Translate ###
##########################
pipeline.tags=automate,sequence,scripted,batch-process
home.add-page-numbers.title=Add Page Numbers
home.add-page-numbers.desc=Add Page numbers throughout a document in a set location
##########################
### TODO: Translate ###
##########################
add-page-numbers.tags=paginate,label,organize,index
home.auto-rename.title=Auto Rename PDF File
home.auto-rename.desc=Auto renames a PDF file based on its detected header
##########################
### TODO: Translate ###
##########################
auto-rename.tags=auto-detect,header-based,organize,relabel
home.adjust-contrast.title=Adjust Colors/Contrast
home.adjust-contrast.desc=Adjust Contrast, Saturation and Brightness of a PDF
##########################
### TODO: Translate ###
##########################
adjust-contrast.tags=color-correction,tune,modify,enhance
home.crop.title=Crop PDF
home.crop.desc=Crop a PDF to reduce its size (maintains text!)
##########################
### TODO: Translate ###
##########################
crop.tags=trim,shrink,edit,shape
home.autoSplitPDF.title=Auto Split Pages
home.autoSplitPDF.desc=Auto Split Scanned PDF with physical scanned page splitter QR Code
##########################
### TODO: Translate ###
##########################
autoSplitPDF.tags=QR-based,separate,scan-segment,organize
home.sanitizePdf.title=Sanitize
home.sanitizePdf.desc=Remove scripts and other elements from PDF files
##########################
### TODO: Translate ###
##########################
sanitizePdf.tags=clean,secure,safe,remove-threats
##########################
### TODO: Translate ###
##########################
home.URLToPDF.title=URL/Website To PDF
home.URLToPDF.desc=Converts any http(s)URL to PDF
URLToPDF.tags=web-capture,save-page,web-to-doc,archive
##########################
### TODO: Translate ###
##########################
home.HTMLToPDF.title=HTML to PDF
home.HTMLToPDF.desc=Converts any HTML file or zip to PDF
HTMLToPDF.tags=markup,web-content,transformation,convert
###########################
# #
# WEB PAGES #
# #
###########################
#url-to-pdf
URLToPDF.title=URL To PDF
URLToPDF.header=URL To PDF
URLToPDF.submit=Convert
URLToPDF.credit=Uses WeasyPrint
#html-to-pdf
HTMLToPDF.title=HTML To PDF
HTMLToPDF.header=HTML To PDF
HTMLToPDF.help=Accepts HTML files and ZIPs containing html/css/images etc required
HTMLToPDF.submit=Convert
HTMLToPDF.credit=Uses WeasyPrint
#sanitizePDF
sanitizePDF.title=Sanitize PDF
sanitizePDF.header=Sanitize a PDF file
sanitizePDF.selectText.1=Remove JavaScript actions
sanitizePDF.selectText.2=Remove embedded files
sanitizePDF.selectText.3=Remove metadata
sanitizePDF.selectText.4=Remove links
sanitizePDF.selectText.5=Remove fonts
sanitizePDF.submit=Sanitize PDF
#addPageNumbers
addPageNumbers.title=Add Page Numbers
addPageNumbers.header=Add Page Numbers
addPageNumbers.selectText.1=Select PDF file:
addPageNumbers.selectText.2=Margin Size
addPageNumbers.selectText.3=Position
addPageNumbers.selectText.4=Starting Number
addPageNumbers.selectText.5=Pages to Number
addPageNumbers.selectText.6=Custom Text
addPageNumbers.submit=Add Page Numbers
#auto-rename
auto-rename.title=Auto Rename
auto-rename.header=Auto Rename PDF
auto-rename.submit=Auto Rename
#adjustContrast
adjustContrast.title=Adjust Contrast
adjustContrast.header=Adjust Contrast
adjustContrast.contrast=Contrast:
adjustContrast.brightness=Brightness:
adjustContrast.saturation=Saturation:
adjustContrast.download=Download
#crop
crop.title=Crop
crop.header=Crop Image
crop.submit=Submit
#autoSplitPDF
autoSplitPDF.title=Auto Split PDF
autoSplitPDF.header=Auto Split PDF
autoSplitPDF.description=Print, Insert, Scan, upload, and let us auto-separate your documents. No manual work sorting needed.
autoSplitPDF.selectText.1=Print out some divider sheets from below (Black and white is fine).
autoSplitPDF.selectText.2=Scan all your documents at once by inserting the divider sheet between them.
autoSplitPDF.selectText.3=Upload the single large scanned PDF file and let Stirling PDF handle the rest.
autoSplitPDF.selectText.4=Divider pages are automatically detected and removed, guaranteeing a neat final document.
autoSplitPDF.formPrompt=Submit PDF containing Stirling-PDF Page dividers:
autoSplitPDF.duplexMode=Duplex Mode (Front and back scanning)
autoSplitPDF.dividerDownload1=Download 'Auto Splitter Divider (minimal).pdf'
autoSplitPDF.dividerDownload2=Download 'Auto Splitter Divider (with instructions).pdf'
autoSplitPDF.submit=Submit
#pipeline
pipeline.title=Pipeline
#pageLayout
pageLayout.title=Multi Page Layout
pageLayout.header=Multi Page Layout
pageLayout.pagesPerSheet=Pages per sheet:
pageLayout.submit=Submit
#scalePages
scalePages.title=Adjust page-scale
scalePages.header=Adjust page-scale
scalePages.pageSize=Size of a page of the document.
scalePages.scaleFactor=Zoom level (crop) of a page.
scalePages.submit=Submit
#certSign
certSign.title=Signature du certificat certSign.title=Signature du certificat
certSign.header=Signer un PDF avec votre certificat (Travail en cours) certSign.header=Signer un PDF avec votre certificat (Travail en cours)
certSign.selectPDF=Sélectionnez un fichier PDF à signer : certSign.selectPDF=Sélectionnez un fichier PDF à signer :
@@ -150,6 +469,8 @@ certSign.location=Emplacement
certSign.name=Nom certSign.name=Nom
certSign.submit=Signer le PDF certSign.submit=Signer le PDF
#removeBlanks
removeBlanks.title=Supprimer les blancs removeBlanks.title=Supprimer les blancs
removeBlanks.header=Supprimer les pages vierges removeBlanks.header=Supprimer les pages vierges
removeBlanks.threshold=Seuil : removeBlanks.threshold=Seuil :
@@ -158,12 +479,16 @@ removeBlanks.whitePercent=Pourcentage blanc (%) :
removeBlanks.whitePercentDesc=Pourcentage de page qui doit être blanche pour être supprimée removeBlanks.whitePercentDesc=Pourcentage de page qui doit être blanche pour être supprimée
removeBlanks.submit=Supprimer les blancs removeBlanks.submit=Supprimer les blancs
#compare
compare.title=Comparer compare.title=Comparer
compare.header=Comparer des PDF compare.header=Comparer des PDF
compare.document.1=Document 1 compare.document.1=Document 1
compare.document.2=Document 2 compare.document.2=Document 2
compare.submit=Comparer compare.submit=Comparer
#sign
sign.title=Signe sign.title=Signe
sign.header=Signer des PDF sign.header=Signer des PDF
sign.upload=Télécharger l'image sign.upload=Télécharger l'image
@@ -172,14 +497,20 @@ sign.text=Saisie de texte
sign.clear=Effacer sign.clear=Effacer
sign.add=Ajouter sign.add=Ajouter
#repair
repair.title=Réparer repair.title=Réparer
repair.header=Réparer les PDF repair.header=Réparer les PDF
repair.submit=Réparer repair.submit=Réparer
#flatten
flatten.title=Aplatir flatten.title=Aplatir
flatten.header=Aplatir les PDF flatten.header=Aplatir les PDF
flatten.submit=Aplatir flatten.submit=Aplatir
#ScannerImageSplit
ScannerImageSplit.selectText.1=Seuil d'angle : ScannerImageSplit.selectText.1=Seuil d'angle :
ScannerImageSplit.selectText.2=Définit l'angle absolu minimum requis pour la rotation de l'image (par défaut : 10). ScannerImageSplit.selectText.2=Définit l'angle absolu minimum requis pour la rotation de l'image (par défaut : 10).
ScannerImageSplit.selectText.3=Tolérance : ScannerImageSplit.selectText.3=Tolérance :
@@ -191,16 +522,6 @@ ScannerImageSplit.selectText.8=Définit le seuil de zone de contour minimum pour
ScannerImageSplit.selectText.9=Taille de la bordure : ScannerImageSplit.selectText.9=Taille de la bordure :
ScannerImageSplit.selectText.10=Définit la taille de la bordure ajoutée et supprimée pour éviter les bordures blanches dans la sortie (par défaut : 1). ScannerImageSplit.selectText.10=Définit la taille de la bordure ajoutée et supprimée pour éviter les bordures blanches dans la sortie (par défaut : 1).
navbar.settings=Paramètres
settings.title=Paramètres
settings.update=Mise à jour disponible
settings.appVersion=Version de l'application :
settings.downloadOption.title=Choisissez l'option de téléchargement (pour les téléchargements sans fichier unique) :
settings.downloadOption.1=Ouvrir dans la même fenêtre
settings.downloadOption.2=Ouvrir dans une nouvelle fenêtre
settings.downloadOption.3=Fichier téléchargé
settings.zipThreshold=Zip les fichiers lorsque le nombre de fichiers téléchargés dépasse
#OCR #OCR
ocr.title=OCR / Nettoyage de numérisation ocr.title=OCR / Nettoyage de numérisation
@@ -222,11 +543,13 @@ ocr.credit=Ce service utilise OCRmyPDF et Tesseract pour l'OCR.
ocr.submit=Traiter PDF avec OCR ocr.submit=Traiter PDF avec OCR
#extractImages
extractImages.title=Extraire les images extractImages.title=Extraire les images
extractImages.header=Extraire les images extractImages.header=Extraire les images
extractImages.selectText=Sélectionner le format d'image pour convertir les images extraites en extractImages.selectText=Sélectionner le format d'image pour convertir les images extraites en
extractImages.submit=Extraire extractImages.submit=Extraire
#File to PDF #File to PDF
fileToPDF.title=Fichier au format PDF fileToPDF.title=Fichier au format PDF
fileToPDF.header=Convertir n'importe quel fichier au format PDF fileToPDF.header=Convertir n'importe quel fichier au format PDF
@@ -235,13 +558,6 @@ fileToPDF.supportedFileTypes=Les types de fichiers pris en charge doivent inclur
fileToPDF.submit=Convertir en PDF fileToPDF.submit=Convertir en PDF
#Add image
addImage.title=Ajouter une image
addImage.header=Ajouter une image au PDF
addImage.everyPage=Chaque page?
addImage.submit=Ajouter une image
#compress #compress
compress.title=Compresser compress.title=Compresser
compress.header=Compresser le PDF compress.header=Compresser le PDF
@@ -254,17 +570,27 @@ compress.selectText.5=Taille PDF attendue (par exemple, 25 Mo, 10,8 Mo, 25 Ko
compress.submit=Compresser compress.submit=Compresser
#Add image
addImage.title=Ajouter une image
addImage.header=Ajouter une image au PDF
addImage.everyPage=Chaque page?
addImage.upload=Ajouter une image
addImage.submit=Ajouter une image
#merge #merge
merge.title=Fusionner merge.title=Fusionner
merge.header=Fusionner plusieurs PDF (2+) merge.header=Fusionner plusieurs PDF (2+)
merge.submit=Fusionner merge.submit=Fusionner
#pdfOrganiser #pdfOrganiser
pdfOrganiser.title=Organisateur de pages pdfOrganiser.title=Organisateur de pages
pdfOrganiser.header=Organisateur de pages PDF pdfOrganiser.header=Organisateur de pages PDF
pdfOrganiser.submit=Réorganiser les pages pdfOrganiser.submit=Réorganiser les pages
#Outil Multi-fonction
#multiTool
multiTool.title=Multi-outil PDF multiTool.title=Multi-outil PDF
multiTool.header=Outil multiple PDF multiTool.header=Outil multiple PDF
@@ -275,13 +601,15 @@ pageRemover.header=Outil de suppression de pages PDF
pageRemover.pagesToDelete=Pages à supprimer (Entrez une liste de numéros de page séparés par des virgules): pageRemover.pagesToDelete=Pages à supprimer (Entrez une liste de numéros de page séparés par des virgules):
pageRemover.submit=Supprimer des pages pageRemover.submit=Supprimer des pages
#rotate #rotate
rotate.title=Faire pivoter le PDF rotate.title=Faire pivoter le PDF
rotate.header=Faire pivoter le PDF rotate.header=Faire pivoter le PDF
rotate.selectAngle=Sélectionner l'angle de rotation (en multiples de 90 degrés) : rotate.selectAngle=Sélectionner l'angle de rotation (en multiples de 90 degrés) :
rotate.submit=Rotation rotate.submit=Rotation
#Split PDF
#merge
split.title=Fractionner le PDF split.title=Fractionner le PDF
split.header=Diviser le PDF split.header=Diviser le PDF
split.desc.1=Les numéros que vous sélectionnez sont le numéro de page sur lequel vous souhaitez faire un fractionnement. split.desc.1=Les numéros que vous sélectionnez sont le numéro de page sur lequel vous souhaitez faire un fractionnement.
@@ -295,7 +623,8 @@ split.desc.8=Document #6 : Pages 9 et 10
split.splitPages=Entrez les pages sur lesquelles fractionner : split.splitPages=Entrez les pages sur lesquelles fractionner :
split.submit=Diviser split.submit=Diviser
#imageToPDF
#merge
imageToPDF.title=Image au format PDF imageToPDF.title=Image au format PDF
imageToPDF.header=Image au format PDF imageToPDF.header=Image au format PDF
imageToPDF.submit=Convertir imageToPDF.submit=Convertir
@@ -305,7 +634,8 @@ imageToPDF.selectText.3=Logique de fichiers multiples (activé uniquement si vou
imageToPDF.selectText.4=Fusionner en un seul PDF imageToPDF.selectText.4=Fusionner en un seul PDF
imageToPDF.selectText.5=Convertir en PDFs distincts imageToPDF.selectText.5=Convertir en PDFs distincts
#PDF to Image
#pdfToImage
pdfToImage.title=PDF vers image pdfToImage.title=PDF vers image
pdfToImage.header=PDF vers image pdfToImage.header=PDF vers image
pdfToImage.selectText=Format d'image pdfToImage.selectText=Format d'image
@@ -318,6 +648,7 @@ pdfToImage.grey=Niveaux de gris
pdfToImage.blackwhite=Noir et Blanc (Peut perdre des données !) pdfToImage.blackwhite=Noir et Blanc (Peut perdre des données !)
pdfToImage.submit=Convertir pdfToImage.submit=Convertir
#addPassword #addPassword
addPassword.title=Ajouter un mot de passe addPassword.title=Ajouter un mot de passe
addPassword.header=Ajouter un mot de passe (chiffrer) addPassword.header=Ajouter un mot de passe (chiffrer)
@@ -334,8 +665,12 @@ addPassword.selectText.10=Empêcher la modification
addPassword.selectText.11=Empêcher la modification des annotations addPassword.selectText.11=Empêcher la modification des annotations
addPassword.selectText.12=Empêcher l'impression addPassword.selectText.12=Empêcher l'impression
addPassword.selectText.13=Empêcher l'impression de différents formats addPassword.selectText.13=Empêcher l'impression de différents formats
addPassword.selectText.14=Owner Password
addPassword.selectText.15=Restricts what can be done with the document once it is opened (Not supported by all readers)
addPassword.selectText.16=Restricts the opening of the document itself
addPassword.submit=Crypter addPassword.submit=Crypter
#watermark #watermark
watermark.title=Ajouter un filigrane watermark.title=Ajouter un filigrane
watermark.header=Ajouter un filigrane watermark.header=Ajouter un filigrane
@@ -348,6 +683,7 @@ watermark.selectText.6=heightSpacer (Espace entre chaque filigrane verticalement
watermark.selectText.7=Opacité (0 % - 100 %) : watermark.selectText.7=Opacité (0 % - 100 %) :
watermark.submit=Ajouter un filigrane watermark.submit=Ajouter un filigrane
#remove-watermark #remove-watermark
remove-watermark.title=Supprimer le filigrane remove-watermark.title=Supprimer le filigrane
remove-watermark.header=Supprimer le filigrane remove-watermark.header=Supprimer le filigrane
@@ -355,7 +691,8 @@ remove-watermark.selectText.1=Sélectionnez le PDF pour supprimer le filigrane :
remove-watermark.selectText.2=Texte du filigrane : remove-watermark.selectText.2=Texte du filigrane :
remove-watermark.submit=Supprimer le filigrane remove-watermark.submit=Supprimer le filigrane
#Change Permissions
#Change permissions
permissions.title=Modifier les autorisations permissions.title=Modifier les autorisations
permissions.header=Modifier les autorisations permissions.header=Modifier les autorisations
permissions.warning=Attention pour que ces permissions soient immuables il est recommandé de les définir avec un mot de passe via la page add-password. permissions.warning=Attention pour que ces permissions soient immuables il est recommandé de les définir avec un mot de passe via la page add-password.
@@ -371,15 +708,17 @@ permissions.selectText.9=Employer pour l'impression
permissions.selectText.10=Empêcher l'impression de différents formats permissions.selectText.10=Empêcher l'impression de différents formats
permissions.submit=Modificateur permissions.submit=Modificateur
#supprimer le mot de passe
#remove password
removePassword.title=Supprimer le mot de passe removePassword.title=Supprimer le mot de passe
removePassword.header=Supprimer le mot de passe (Déchiffrer) removePassword.header=Supprimer le mot de passe (Déchiffrer)
removePassword.selectText.1=Sélectionnez le PDF à déchiffrer removePassword.selectText.1=Sélectionnez le PDF à déchiffrer
removePassword.selectText.2=Mot de passe removePassword.selectText.2=Mot de passe
removePassword.submit=Supprimer removePassword.submit=Supprimer
#Change Metadata
changeMetadata.title=Modifier les métadonnées #changeMetadata
changeMetadata.title=Titre :
changeMetadata.header=Modifier les métadonnées changeMetadata.header=Modifier les métadonnées
changeMetadata.selectText.1=Veuillez modifier les variables que vous souhaitez modifier. changeMetadata.selectText.1=Veuillez modifier les variables que vous souhaitez modifier.
changeMetadata.selectText.2=Supprimer toutes les métadonnées. changeMetadata.selectText.2=Supprimer toutes les métadonnées.
@@ -397,26 +736,30 @@ changeMetadata.selectText.4=Autres métadonnées :
changeMetadata.selectText.5=Ajouter une entrée de métadonnées personnalisées changeMetadata.selectText.5=Ajouter une entrée de métadonnées personnalisées
changeMetadata.submit=Modifier changeMetadata.submit=Modifier
#XLS to PDF
#xlsToPdf
xlsToPdf.title=Excel vers PDF xlsToPdf.title=Excel vers PDF
xlsToPdf.header=Excel en PDF xlsToPdf.header=Excel en PDF
xlsToPdf.selectText.1=Sélectionnez une feuille Excel XLS ou XLSX à convertir. xlsToPdf.selectText.1=Sélectionnez une feuille Excel XLS ou XLSX à convertir.
xlsToPdf.convert=Convertir xlsToPdf.convert=Convertir
#pdfToPDFA
pdfToPDFA.title=PDF vers PDF/A pdfToPDFA.title=PDF vers PDF/A
pdfToPDFA.header=PDF vers PDF/A pdfToPDFA.header=PDF vers PDF/A
pdfToPDFA.credit=Ce service utilise OCRmyPDF pour la conversion PDF/A pdfToPDFA.credit=Ce service utilise OCRmyPDF pour la conversion PDF/A
pdfToPDFA.submit=Convertir pdfToPDFA.submit=Convertir
#PDFToWord
PDFToWord.title=PDF vers Word PDFToWord.title=PDF vers Word
PDFToWord.header=PDF vers Word PDFToWord.header=PDF vers Word
PDFToWord.selectText.1=Format du fichier de sortie PDFToWord.selectText.1=Format du fichier de sortie
PDFToWord.credit=Ce service utilise LibreOffice pour la conversion de fichiers. PDFToWord.credit=Ce service utilise LibreOffice pour la conversion de fichiers.
PDFToWord.submit=Convertir PDFToWord.submit=Convertir
#PDFToPresentation
PDFToPresentation.title=PDF vers présentation PDFToPresentation.title=PDF vers présentation
PDFToPresentation.header=PDF vers présentation PDFToPresentation.header=PDF vers présentation
PDFToPresentation.selectText.1=Format du fichier de sortie PDFToPresentation.selectText.1=Format du fichier de sortie
@@ -424,6 +767,7 @@ PDFToPresentation.credit=Ce service utilise LibreOffice pour la conversion de fi
PDFToPresentation.submit=Convertir PDFToPresentation.submit=Convertir
#PDFToText
PDFToText.title=PDF vers Texte/RTF PDFToText.title=PDF vers Texte/RTF
PDFToText.header=PDF vers texte/RTF PDFToText.header=PDF vers texte/RTF
PDFToText.selectText.1=Format du fichier de sortie PDFToText.selectText.1=Format du fichier de sortie
@@ -431,14 +775,15 @@ PDFToText.credit=Ce service utilise LibreOffice pour la conversion de fichiers.
PDFToText.submit=Convertir PDFToText.submit=Convertir
#PDFToHTML
PDFToHTML.title=PDF vers HTML PDFToHTML.title=PDF vers HTML
PDFToHTML.header=PDF vers HTML PDFToHTML.header=PDF vers HTML
PDFToHTML.credit=Ce service utilise LibreOffice pour la conversion de fichiers. PDFToHTML.credit=Ce service utilise LibreOffice pour la conversion de fichiers.
PDFToHTML.submit=Convertir PDFToHTML.submit=Convertir
#PDFToXML
PDFToXML.title=PDF vers XML PDFToXML.title=PDF vers XML
PDFToXML.header=PDF vers XML PDFToXML.header=PDF vers XML
PDFToXML.credit=Ce service utilise LibreOffice pour la conversion de fichiers. PDFToXML.credit=Ce service utilise LibreOffice pour la conversion de fichiers.
PDFToXML.submit=Convertir PDFToXML.submit=Convertir

View File

@@ -1,7 +1,7 @@
########### ###########
# Generic # # Generic #
########### ###########
# the direction that the language is written (ltr = left to right, rtl = right to left) # the direction that the language is written (ltr=left to right, rtl = right to left)
language.direction=ltr language.direction=ltr
pdfPrompt=Scegli PDF pdfPrompt=Scegli PDF
@@ -20,117 +20,441 @@ close=Chiudi
filesSelected=file selezionati filesSelected=file selezionati
noFavourites=Nessun preferito noFavourites=Nessun preferito
bored=Stanco di aspettare? bored=Stanco di aspettare?
alphabet=Alfabeto
downloadPdf=Scarica PDF
text=Testo
font=Font
selectFillter=-- Seleziona --
pageNum=Numero pagina
sizes.small=Small
sizes.medium=Medium
sizes.large=Large
sizes.x-large=X-Large
error.pdfPassword=The PDF Document is passworded and either the password was not provided or was incorrect
#############
# NAVBAR #
#############
navbar.convert=Converti
navbar.security=Sicurezza
navbar.other=Altro
navbar.darkmode=Modalità Scura
navbar.pageOps=Modifica pagine
navbar.settings=Impostazioni
#############
# SETTINGS #
#############
settings.title=Impostazioni
settings.update=Aggiornamento disponibile
settings.appVersion=Versione App:
settings.downloadOption.title=Scegli opzione di download (Per file singoli non compressi):
settings.downloadOption.1=Apri in questa finestra
settings.downloadOption.2=Apri in una nuova finestra
settings.downloadOption.3=Scarica file
settings.zipThreshold=Comprimi file in .zip quando il numero di download supera
############# #############
# HOME-PAGE # # HOME-PAGE #
############# #############
home.desc=La tua pagina self-hostata per gestire qualsiasi PDF. home.desc=La tua pagina self-hostata per gestire qualsiasi PDF.
navbar.convert=Converti
navbar.security=Sicurezza
navbar.other=Altro
navbar.darkmode=Modalità Scura
navbar.pageOps=Modifica pagine
home.multiTool.title=Multifunzione PDF home.multiTool.title=Multifunzione PDF
home.multiTool.desc=Unisci, Ruota, Riordina, e Rimuovi pagine home.multiTool.desc=Unisci, Ruota, Riordina, e Rimuovi pagine
multiTool.tags=Multi Tool,Multi operation,UI,click drag,front end,client side
home.merge.title=Unisci home.merge.title=Unisci
home.merge.desc=Unisci facilmente più PDF in uno. home.merge.desc=Unisci facilmente più PDF in uno.
merge.tags=merge,Page operations,Back end,server side
home.split.title=Dividi home.split.title=Dividi
home.split.desc=Dividi un singolo PDF in più documenti. home.split.desc=Dividi un singolo PDF in più documenti.
##########################
### TODO: Translate ###
##########################
split.tags=Page operations,divide,Multi Page,cut,server side
home.rotate.title=Ruota home.rotate.title=Ruota
home.rotate.desc=Ruota un PDF. home.rotate.desc=Ruota un PDF.
##########################
### TODO: Translate ###
##########################
rotate.tags=server side
home.imageToPdf.title=Da immagine a PDF home.imageToPdf.title=Da immagine a PDF
home.imageToPdf.desc=Converti un'immagine (PNG, JPEG, GIF) in PDF. home.imageToPdf.desc=Converti un'immagine (PNG, JPEG, GIF) in PDF.
##########################
### TODO: Translate ###
##########################
imageToPdf.tags=conversion,img,jpg,picture,photo
home.pdfToImage.title=Da PDF a immagine home.pdfToImage.title=Da PDF a immagine
home.pdfToImage.desc=Converti un PDF in un'immagine. (PNG, JPEG, GIF) home.pdfToImage.desc=Converti un PDF in un'immagine. (PNG, JPEG, GIF)
##########################
### TODO: Translate ###
##########################
pdfToImage.tags=conversion,img,jpg,picture,photo
home.pdfOrganiser.title=Organizza home.pdfOrganiser.title=Organizza
home.pdfOrganiser.desc=Rimuovi/Riordina le pagine in qualsiasi ordine. home.pdfOrganiser.desc=Rimuovi/Riordina le pagine in qualsiasi ordine.
##########################
### TODO: Translate ###
##########################
pdfOrganiser.tags=duplex,even,odd,sort,move
home.addImage.title=Aggiungi Immagine home.addImage.title=Aggiungi Immagine
home.addImage.desc=Aggiungi un'immagine in un punto specifico del PDF (Work in progress) home.addImage.desc=Aggiungi un'immagine in un punto specifico del PDF (Work in progress)
##########################
### TODO: Translate ###
##########################
addImage.tags=img,jpg,picture,photo
home.watermark.title=Aggiungi Filigrana home.watermark.title=Aggiungi Filigrana
home.watermark.desc=Aggiungi una filigrana al tuo PDF. home.watermark.desc=Aggiungi una filigrana al tuo PDF.
##########################
home.remove-watermark.title=Rimuovi Filigrana ### TODO: Translate ###
home.remove-watermark.desc=Rimuovi la filigrana dal tuo PDF. ##########################
watermark.tags=Text,repeating,label,own,copyright,trademark,img,jpg,picture,photo
home.permissions.title=Cambia Permessi home.permissions.title=Cambia Permessi
home.permissions.desc=Cambia i permessi del tuo PDF. home.permissions.desc=Cambia i permessi del tuo PDF.
##########################
### TODO: Translate ###
##########################
permissions.tags=read,write,edit,print
home.removePages.title=Rimuovi home.removePages.title=Rimuovi
home.removePages.desc=Elimina alcune pagine dal PDF. home.removePages.desc=Elimina alcune pagine dal PDF.
##########################
### TODO: Translate ###
##########################
removePages.tags=Remove pages,delete pages
home.addPassword.title=Aggiungi Password home.addPassword.title=Aggiungi Password
home.addPassword.desc=Crittografa il tuo PDF con una password. home.addPassword.desc=Crittografa il tuo PDF con una password.
##########################
### TODO: Translate ###
##########################
addPassword.tags=secure,security
home.removePassword.title=Rimuovi Password home.removePassword.title=Rimuovi Password
home.removePassword.desc=Rimuovi la password dal tuo PDF. home.removePassword.desc=Rimuovi la password dal tuo PDF.
##########################
### TODO: Translate ###
##########################
removePassword.tags=secure,Decrypt,security,unpassword,delete password
home.compressPdfs.title=Comprimi home.compressPdfs.title=Comprimi
home.compressPdfs.desc=Comprimi PDF per ridurne le dimensioni. home.compressPdfs.desc=Comprimi PDF per ridurne le dimensioni.
##########################
### TODO: Translate ###
##########################
compressPdfs.tags=squish,small,tiny
home.changeMetadata.title=Modifica Proprietà home.changeMetadata.title=Modifica Proprietà
home.changeMetadata.desc=Modifica/Aggiungi/Rimuovi le proprietà di un documento PDF. home.changeMetadata.desc=Modifica/Aggiungi/Rimuovi le proprietà di un documento PDF.
##########################
### TODO: Translate ###
##########################
changeMetadata.tags==Title,author,date,creation,time,publisher,producer,stats
home.fileToPDF.title=Converti file in PDF home.fileToPDF.title=Converti file in PDF
home.fileToPDF.desc=Converti quasi ogni file in PDF (DOCX, PNG, XLS, PPT, TXT e altro) home.fileToPDF.desc=Converti quasi ogni file in PDF (DOCX, PNG, XLS, PPT, TXT e altro)
##########################
### TODO: Translate ###
##########################
fileToPDF.tags=transformation,format,document,picture,slide,text,conversion,office,docs,word,excel,powerpoint
home.ocr.title=OCR / Pulisci scansioni home.ocr.title=OCR / Pulisci scansioni
home.ocr.desc=Pulisci scansioni ed estrai testo da immagini, convertendo le immagini in testo puro. home.ocr.desc=Pulisci scansioni ed estrai testo da immagini, convertendo le immagini in testo puro.
##########################
### TODO: Translate ###
##########################
ocr.tags=recognition,text,image,scan,read,identify,detection,editable
home.extractImages.title=Estrai immagini home.extractImages.title=Estrai immagini
home.extractImages.desc=Estrai tutte le immagini da un PDF e salvale come zip. home.extractImages.desc=Estrai tutte le immagini da un PDF e salvale come zip.
##########################
### TODO: Translate ###
##########################
extractImages.tags=picture,photo,save,archive,zip,capture,grab
home.pdfToPDFA.title=Converti in PDF/A home.pdfToPDFA.title=Converti in PDF/A
home.pdfToPDFA.desc=Converti un PDF nel formato PDF/A per archiviazione a lungo termine. home.pdfToPDFA.desc=Converti un PDF nel formato PDF/A per archiviazione a lungo termine.
##########################
### TODO: Translate ###
##########################
pdfToPDFA.tags=archive,long-term,standard,conversion,storage,preservation
home.PDFToWord.title=Da PDF a Word home.PDFToWord.title=Da PDF a Word
home.PDFToWord.desc=Converti un PDF nei formati Word (DOC, DOCX e ODT) home.PDFToWord.desc=Converti un PDF nei formati Word (DOC, DOCX e ODT)
##########################
### TODO: Translate ###
##########################
PDFToWord.tags=doc,docx,odt,word,transformation,format,conversion,office,microsoft,docfile
home.PDFToPresentation.title=Da PDF a presentazioni home.PDFToPresentation.title=Da PDF a presentazioni
home.PDFToPresentation.desc=Converti un PDF in presentazioni (PPT, PPTX and ODP) home.PDFToPresentation.desc=Converti un PDF in presentazioni (PPT, PPTX and ODP)
##########################
### TODO: Translate ###
##########################
PDFToPresentation.tags=slides,show,office,microsoft
home.PDFToText.title=Da PDF a testo/RTF home.PDFToText.title=Da PDF a testo/RTF
home.PDFToText.desc=Converti un PDF in testo o RTF. home.PDFToText.desc=Converti un PDF in testo o RTF.
##########################
### TODO: Translate ###
##########################
PDFToText.tags=richformat,richtextformat,rich text format
home.PDFToHTML.title=Da PDF ad HTML home.PDFToHTML.title=Da PDF ad HTML
home.PDFToHTML.desc=Converti un PDF in HTML. home.PDFToHTML.desc=Converti un PDF in HTML.
##########################
### TODO: Translate ###
##########################
PDFToHTML.tags=web content,browser friendly
home.PDFToXML.title=Da PDF a XML home.PDFToXML.title=Da PDF a XML
home.PDFToXML.desc=Converti un PDF in XML. home.PDFToXML.desc=Converti un PDF in XML.
##########################
### TODO: Translate ###
##########################
PDFToXML.tags=data-extraction,structured-content,interop,transformation,convert
home.ScannerImageSplit.title=Trova/Dividi foto scansionate home.ScannerImageSplit.title=Trova/Dividi foto scansionate
home.ScannerImageSplit.desc=Estrai più foto da una singola foto o PDF. home.ScannerImageSplit.desc=Estrai più foto da una singola foto o PDF.
##########################
### TODO: Translate ###
##########################
ScannerImageSplit.tags=separate,auto-detect,scans,multi-photo,organize
home.sign.title=Firma home.sign.title=Firma
home.sign.desc=Aggiungi una firma al PDF da disegno, testo o immagine. home.sign.desc=Aggiungi una firma al PDF da disegno, testo o immagine.
##########################
### TODO: Translate ###
##########################
sign.tags=authorize,initials,drawn-signature,text-sign,image-signature
home.flatten.title=Appiattisci home.flatten.title=Appiattisci
home.flatten.desc=Rimuovi tutti gli elementi interattivi e moduli da un PDF. home.flatten.desc=Rimuovi tutti gli elementi interattivi e moduli da un PDF.
##########################
### TODO: Translate ###
##########################
flatten.tags=static,deactivate,non-interactive,streamline
home.repair.title=Ripara home.repair.title=Ripara
home.repair.desc=Prova a riparare un PDF corrotto. home.repair.desc=Prova a riparare un PDF corrotto.
##########################
### TODO: Translate ###
##########################
repair.tags=fix,restore,correction,recover
home.removeBlanks.title=Rimuovi pagine vuote home.removeBlanks.title=Rimuovi pagine vuote
home.removeBlanks.desc=Trova e rimuovi pagine vuote da un PDF. home.removeBlanks.desc=Trova e rimuovi pagine vuote da un PDF.
##########################
### TODO: Translate ###
##########################
removeBlanks.tags=cleanup,streamline,non-content,organize
home.compare.title=Compara home.compare.title=Compara
home.compare.desc=Vedi e compara le differenze tra due PDF. home.compare.desc=Vedi e compara le differenze tra due PDF.
##########################
### TODO: Translate ###
##########################
compare.tags=differentiate,contrast,changes,analysis
downloadPdf=Scarica PDF home.certSign.title=Sign with Certificate
text=Testo home.certSign.desc=Signs a PDF with a Certificate/Key (PEM/P12)
font=Font ##########################
selectFillter=-- Seleziona -- ### TODO: Translate ###
pageNum=Numero pagina ##########################
certSign.tags=authenticate,PEM,P12,official,encrypt
home.pageLayout.title=Multi-Page Layout
home.pageLayout.desc=Merge multiple pages of a PDF document into a single page
##########################
### TODO: Translate ###
##########################
pageLayout.tags=merge,composite,single-view,organize
home.scalePages.title=Adjust page size/scale
home.scalePages.desc=Change the size/scale of page and/or its contents.
##########################
### TODO: Translate ###
##########################
scalePages.tags=resize,modify,dimension,adapt
home.pipeline.title=Pipeline (Advanced)
home.pipeline.desc=Run multiple actions on PDFs by defining pipeline scripts
##########################
### TODO: Translate ###
##########################
pipeline.tags=automate,sequence,scripted,batch-process
home.add-page-numbers.title=Add Page Numbers
home.add-page-numbers.desc=Add Page numbers throughout a document in a set location
##########################
### TODO: Translate ###
##########################
add-page-numbers.tags=paginate,label,organize,index
home.auto-rename.title=Auto Rename PDF File
home.auto-rename.desc=Auto renames a PDF file based on its detected header
##########################
### TODO: Translate ###
##########################
auto-rename.tags=auto-detect,header-based,organize,relabel
home.adjust-contrast.title=Adjust Colors/Contrast
home.adjust-contrast.desc=Adjust Contrast, Saturation and Brightness of a PDF
##########################
### TODO: Translate ###
##########################
adjust-contrast.tags=color-correction,tune,modify,enhance
home.crop.title=Crop PDF
home.crop.desc=Crop a PDF to reduce its size (maintains text!)
##########################
### TODO: Translate ###
##########################
crop.tags=trim,shrink,edit,shape
home.autoSplitPDF.title=Auto Split Pages
home.autoSplitPDF.desc=Auto Split Scanned PDF with physical scanned page splitter QR Code
##########################
### TODO: Translate ###
##########################
autoSplitPDF.tags=QR-based,separate,scan-segment,organize
home.sanitizePdf.title=Sanitize
home.sanitizePdf.desc=Remove scripts and other elements from PDF files
##########################
### TODO: Translate ###
##########################
sanitizePdf.tags=clean,secure,safe,remove-threats
##########################
### TODO: Translate ###
##########################
home.URLToPDF.title=URL/Website To PDF
home.URLToPDF.desc=Converts any http(s)URL to PDF
URLToPDF.tags=web-capture,save-page,web-to-doc,archive
##########################
### TODO: Translate ###
##########################
home.HTMLToPDF.title=HTML to PDF
home.HTMLToPDF.desc=Converts any HTML file or zip to PDF
HTMLToPDF.tags=markup,web-content,transformation,convert
###########################
# #
# WEB PAGES #
# #
###########################
#url-to-pdf
URLToPDF.title=URL To PDF
URLToPDF.header=URL To PDF
URLToPDF.submit=Convert
URLToPDF.credit=Uses WeasyPrint
#html-to-pdf
HTMLToPDF.title=HTML To PDF
HTMLToPDF.header=HTML To PDF
HTMLToPDF.help=Accepts HTML files and ZIPs containing html/css/images etc required
HTMLToPDF.submit=Convert
HTMLToPDF.credit=Uses WeasyPrint
#sanitizePDF
sanitizePDF.title=Sanitize PDF
sanitizePDF.header=Sanitize a PDF file
sanitizePDF.selectText.1=Remove JavaScript actions
sanitizePDF.selectText.2=Remove embedded files
sanitizePDF.selectText.3=Remove metadata
sanitizePDF.selectText.4=Remove links
sanitizePDF.selectText.5=Remove fonts
sanitizePDF.submit=Sanitize PDF
#addPageNumbers
addPageNumbers.title=Add Page Numbers
addPageNumbers.header=Add Page Numbers
addPageNumbers.selectText.1=Select PDF file:
addPageNumbers.selectText.2=Margin Size
addPageNumbers.selectText.3=Position
addPageNumbers.selectText.4=Starting Number
addPageNumbers.selectText.5=Pages to Number
addPageNumbers.selectText.6=Custom Text
addPageNumbers.submit=Add Page Numbers
#auto-rename
auto-rename.title=Auto Rename
auto-rename.header=Auto Rename PDF
auto-rename.submit=Auto Rename
#adjustContrast
adjustContrast.title=Adjust Contrast
adjustContrast.header=Adjust Contrast
adjustContrast.contrast=Contrast:
adjustContrast.brightness=Brightness:
adjustContrast.saturation=Saturation:
adjustContrast.download=Download
#crop
crop.title=Crop
crop.header=Crop Image
crop.submit=Submit
#autoSplitPDF
autoSplitPDF.title=Auto Split PDF
autoSplitPDF.header=Auto Split PDF
autoSplitPDF.description=Print, Insert, Scan, upload, and let us auto-separate your documents. No manual work sorting needed.
autoSplitPDF.selectText.1=Print out some divider sheets from below (Black and white is fine).
autoSplitPDF.selectText.2=Scan all your documents at once by inserting the divider sheet between them.
autoSplitPDF.selectText.3=Upload the single large scanned PDF file and let Stirling PDF handle the rest.
autoSplitPDF.selectText.4=Divider pages are automatically detected and removed, guaranteeing a neat final document.
autoSplitPDF.formPrompt=Submit PDF containing Stirling-PDF Page dividers:
autoSplitPDF.duplexMode=Duplex Mode (Front and back scanning)
autoSplitPDF.dividerDownload1=Download 'Auto Splitter Divider (minimal).pdf'
autoSplitPDF.dividerDownload2=Download 'Auto Splitter Divider (with instructions).pdf'
autoSplitPDF.submit=Submit
#pipeline
pipeline.title=Pipeline
#pageLayout
pageLayout.title=Multi Page Layout
pageLayout.header=Multi Page Layout
pageLayout.pagesPerSheet=Pages per sheet:
pageLayout.submit=Submit
#scalePages
scalePages.title=Adjust page-scale
scalePages.header=Adjust page-scale
scalePages.pageSize=Size of a page of the document.
scalePages.scaleFactor=Zoom level (crop) of a page.
scalePages.submit=Submit
#certSign
certSign.title=Firma del certificato certSign.title=Firma del certificato
certSign.header=Firma un PDF con il tuo certificato (Lavoro in corso) certSign.header=Firma un PDF con il tuo certificato (Lavoro in corso)
certSign.selectPDF=Seleziona un file PDF per la firma: certSign.selectPDF=Seleziona un file PDF per la firma:
@@ -145,6 +469,8 @@ certSign.location=Posizione
certSign.name=Nome certSign.name=Nome
certSign.submit=Firma PDF certSign.submit=Firma PDF
#removeBlanks
removeBlanks.title=Rimuovi spazi vuoti removeBlanks.title=Rimuovi spazi vuoti
removeBlanks.header=Rimuovi pagine vuote removeBlanks.header=Rimuovi pagine vuote
removeBlanks.threshold=Soglia: removeBlanks.threshold=Soglia:
@@ -153,12 +479,16 @@ removeBlanks.whitePercent=Percentuale di bianco (%):
removeBlanks.whitePercentDesc=Percentuale della pagina che deve essere bianca per venire rimossa removeBlanks.whitePercentDesc=Percentuale della pagina che deve essere bianca per venire rimossa
removeBlanks.submit=Rimuovi removeBlanks.submit=Rimuovi
#compare
compare.title=Compara compare.title=Compara
compare.header=Compara PDF compare.header=Compara PDF
compare.document.1=Documento 1 compare.document.1=Documento 1
compare.document.2=Documento 2 compare.document.2=Documento 2
compare.submit=Compara compare.submit=Compara
#sign
sign.title=Firma sign.title=Firma
sign.header=Firma PDF sign.header=Firma PDF
sign.upload=Carica immagine sign.upload=Carica immagine
@@ -167,14 +497,20 @@ sign.text=Testo
sign.clear=Cancella sign.clear=Cancella
sign.add=Aggiungi sign.add=Aggiungi
#repair
repair.title=Ripara repair.title=Ripara
repair.header=Ripara PDF repair.header=Ripara PDF
repair.submit=Ripara repair.submit=Ripara
#flatten
flatten.title=Appiattisci flatten.title=Appiattisci
flatten.header=Appiattisci PDF flatten.header=Appiattisci PDF
flatten.submit=Appiattisci flatten.submit=Appiattisci
#ScannerImageSplit
ScannerImageSplit.selectText.1=Soglia angolo: ScannerImageSplit.selectText.1=Soglia angolo:
ScannerImageSplit.selectText.2=Imposta il minimo angolo richiesto perché l'immagine venga ruotata (default: 10). ScannerImageSplit.selectText.2=Imposta il minimo angolo richiesto perché l'immagine venga ruotata (default: 10).
ScannerImageSplit.selectText.3=Tolleranza: ScannerImageSplit.selectText.3=Tolleranza:
@@ -186,19 +522,6 @@ ScannerImageSplit.selectText.8=Imposta l'area minima del contorno di una foto
ScannerImageSplit.selectText.9=Spessore bordo: ScannerImageSplit.selectText.9=Spessore bordo:
ScannerImageSplit.selectText.10=Imposta lo spessore del bordo aggiunto o rimosso per prevenire bordi bianchi nel risultato (default: 1). ScannerImageSplit.selectText.10=Imposta lo spessore del bordo aggiunto o rimosso per prevenire bordi bianchi nel risultato (default: 1).
navbar.settings=Impostazioni
settings.title=Impostazioni
settings.update=Aggiornamento disponibile
settings.appVersion=Versione App:
settings.downloadOption.title=Scegli opzione di download (Per file singoli non compressi):
settings.downloadOption.1=Apri in questa finestra
settings.downloadOption.2=Apri in una nuova finestra
settings.downloadOption.3=Scarica file
settings.zipThreshold=Comprimi file in .zip quando il numero di download supera
#OCR #OCR
ocr.title=OCR / Pulisci scansioni ocr.title=OCR / Pulisci scansioni
@@ -220,7 +543,7 @@ ocr.credit=Questo servizio utilizza OCRmyPDF e Tesseract per l'OCR.
ocr.submit=Scansiona testo nel PDF con OCR ocr.submit=Scansiona testo nel PDF con OCR
#extractImages
extractImages.title=Estrai immagini extractImages.title=Estrai immagini
extractImages.header=Estrai immagini extractImages.header=Estrai immagini
extractImages.selectText=Seleziona il formato in cui salvare le immagini estratte extractImages.selectText=Seleziona il formato in cui salvare le immagini estratte
@@ -246,10 +569,12 @@ compress.selectText.4=Modalità automatica - Regola automaticamente la qualità
compress.selectText.5=Dimensioni PDF previste (ad es. 25 MB, 10,8 MB, 25 KB) compress.selectText.5=Dimensioni PDF previste (ad es. 25 MB, 10,8 MB, 25 KB)
compress.submit=Comprimi compress.submit=Comprimi
#Add image #Add image
addImage.title=Aggiungi Immagine addImage.title=Aggiungi Immagine
addImage.header=Aggiungi un'immagine ad un PDF. addImage.header=Aggiungi un'immagine ad un PDF
addImage.everyPage=Ogni pagina? addImage.everyPage=Ogni pagina?
addImage.upload=Aggiungi immagine
addImage.submit=Aggiungi immagine addImage.submit=Aggiungi immagine
@@ -258,11 +583,13 @@ merge.title=Unisci
merge.header=Unisci 2 o più PDF merge.header=Unisci 2 o più PDF
merge.submit=Unisci merge.submit=Unisci
#pdfOrganiser #pdfOrganiser
pdfOrganiser.title=Organizza pagine pdfOrganiser.title=Organizza pagine
pdfOrganiser.header=Organizza le pagine di un PDF pdfOrganiser.header=Organizza le pagine di un PDF
pdfOrganiser.submit=Riordina pagine pdfOrganiser.submit=Riordina pagine
#multiTool #multiTool
multiTool.title=Multifunzione PDF multiTool.title=Multifunzione PDF
multiTool.header=Multifunzione PDF multiTool.header=Multifunzione PDF
@@ -274,6 +601,7 @@ pageRemover.header=Rimuovi pagine da un PDF
pageRemover.pagesToDelete=Pagine da eliminare (inserisci una lista di numeri separati da virgola): pageRemover.pagesToDelete=Pagine da eliminare (inserisci una lista di numeri separati da virgola):
pageRemover.submit=Rimuovi pagine pageRemover.submit=Rimuovi pagine
#rotate #rotate
rotate.title=Ruota PDF rotate.title=Ruota PDF
rotate.header=Ruota PDF rotate.header=Ruota PDF
@@ -281,9 +609,7 @@ rotate.selectAngle=Scegli angolo di rotazione (in multipli di 90 gradi):
rotate.submit=Ruota rotate.submit=Ruota
#merge
#split
split.title=Dividi PDF split.title=Dividi PDF
split.header=Dividi PDF split.header=Dividi PDF
split.desc.1=I numeri che scegli sono le pagine a cui desideri dividere il documento split.desc.1=I numeri che scegli sono le pagine a cui desideri dividere il documento
@@ -298,7 +624,7 @@ split.splitPages=Inserisci pagine a cui dividere:
split.submit=Dividi split.submit=Dividi
#imageToPDF #merge
imageToPDF.title=Immagine a PDF imageToPDF.title=Immagine a PDF
imageToPDF.header=Immagine a PDF imageToPDF.header=Immagine a PDF
imageToPDF.submit=Converti imageToPDF.submit=Converti
@@ -308,6 +634,7 @@ imageToPDF.selectText.3=Logica multi-file (funziona solo se ci sono più immagin
imageToPDF.selectText.4=Unisci in un unico PDF imageToPDF.selectText.4=Unisci in un unico PDF
imageToPDF.selectText.5=Converti in PDF separati imageToPDF.selectText.5=Converti in PDF separati
#pdfToImage #pdfToImage
pdfToImage.title=PDF a immagine pdfToImage.title=PDF a immagine
pdfToImage.header=PDF a immagine pdfToImage.header=PDF a immagine
@@ -321,6 +648,7 @@ pdfToImage.grey=Scala di grigi
pdfToImage.blackwhite=Bianco e Nero (potresti perdere dettagli!) pdfToImage.blackwhite=Bianco e Nero (potresti perdere dettagli!)
pdfToImage.submit=Converti pdfToImage.submit=Converti
#addPassword #addPassword
addPassword.title=Aggiungi Password addPassword.title=Aggiungi Password
addPassword.header=Aggiungi password (crittografa) addPassword.header=Aggiungi password (crittografa)
@@ -337,8 +665,12 @@ addPassword.selectText.10=Previeni modifiche
addPassword.selectText.11=Previeni annotazioni addPassword.selectText.11=Previeni annotazioni
addPassword.selectText.12=Previeni stampa addPassword.selectText.12=Previeni stampa
addPassword.selectText.13=Previeni stampa in diversi formati addPassword.selectText.13=Previeni stampa in diversi formati
addPassword.selectText.14=Owner Password
addPassword.selectText.15=Restricts what can be done with the document once it is opened (Not supported by all readers)
addPassword.selectText.16=Restricts the opening of the document itself
addPassword.submit=Crittografa addPassword.submit=Crittografa
#watermark #watermark
watermark.title=Aggiungi Filigrana watermark.title=Aggiungi Filigrana
watermark.header=Aggiungi filigrana watermark.header=Aggiungi filigrana
@@ -351,6 +683,7 @@ watermark.selectText.6=spazio verticale (tra ogni filigrana):
watermark.selectText.7=Opacità (0% - 100%): watermark.selectText.7=Opacità (0% - 100%):
watermark.submit=Aggiungi Filigrana watermark.submit=Aggiungi Filigrana
#remove-watermark #remove-watermark
remove-watermark.title=Rimuovi Filigrana remove-watermark.title=Rimuovi Filigrana
remove-watermark.header=Rimuovi filigrana remove-watermark.header=Rimuovi filigrana
@@ -358,6 +691,7 @@ remove-watermark.selectText.1=Seleziona PDF da cui rimuovere la filigrana:
remove-watermark.selectText.2=Testo: remove-watermark.selectText.2=Testo:
remove-watermark.submit=Rimuovi Filigrana remove-watermark.submit=Rimuovi Filigrana
#Change permissions #Change permissions
permissions.title=Cambia Permessi permissions.title=Cambia Permessi
permissions.header=Cambia permessi permissions.header=Cambia permessi
@@ -374,6 +708,7 @@ permissions.selectText.9=Previeni stampa
permissions.selectText.10=Previeni stampa in diversi formati permissions.selectText.10=Previeni stampa in diversi formati
permissions.submit=Cambia Permessi permissions.submit=Cambia Permessi
#remove password #remove password
removePassword.title=Rimuovi Password removePassword.title=Rimuovi Password
removePassword.header=Rimuovi password (de-crittografa) removePassword.header=Rimuovi password (de-crittografa)
@@ -381,7 +716,9 @@ removePassword.selectText.1=Seleziona PDF da decrittare
removePassword.selectText.2=Password removePassword.selectText.2=Password
removePassword.submit=Rimuovi Password removePassword.submit=Rimuovi Password
changeMetadata.title=Cambia Proprietà
#changeMetadata
changeMetadata.title=Titolo:
changeMetadata.header=Cambia Proprietà changeMetadata.header=Cambia Proprietà
changeMetadata.selectText.1=Imposta i dati che vuoi cambiare changeMetadata.selectText.1=Imposta i dati che vuoi cambiare
changeMetadata.selectText.2=Cancella tutte le proprietà changeMetadata.selectText.2=Cancella tutte le proprietà
@@ -399,27 +736,30 @@ changeMetadata.selectText.4=Altre proprietà:
changeMetadata.selectText.5=Aggiungi proprietà personalizzata: changeMetadata.selectText.5=Aggiungi proprietà personalizzata:
changeMetadata.submit=Cambia Proprietà changeMetadata.submit=Cambia Proprietà
#xlsToPdf
xlsToPdf.title=Da Excel a PDF xlsToPdf.title=Da Excel a PDF
xlsToPdf.header=Da Excel a PDF xlsToPdf.header=Da Excel a PDF
xlsToPdf.selectText.1=Seleziona un foglio XLS o XLSX da convertire xlsToPdf.selectText.1=Seleziona un foglio XLS o XLSX da convertire
xlsToPdf.convert=Converti xlsToPdf.convert=Converti
#pdfToPDFA
pdfToPDFA.title=Da PDF a PDF/A pdfToPDFA.title=Da PDF a PDF/A
pdfToPDFA.header=Da PDF a PDF/A pdfToPDFA.header=Da PDF a PDF/A
pdfToPDFA.credit=Questo servizio utilizza OCRmyPDF per la conversione in PDF/A. pdfToPDFA.credit=Questo servizio utilizza OCRmyPDF per la conversione in PDF/A.
pdfToPDFA.submit=Converti pdfToPDFA.submit=Converti
#PDFToWord
PDFToWord.title=Da PDF a Word PDFToWord.title=Da PDF a Word
PDFToWord.header=Da PDF a Word PDFToWord.header=Da PDF a Word
PDFToWord.selectText.1=Formato file di output PDFToWord.selectText.1=Formato file di output
PDFToWord.credit=Questo servizio utilizza LibreOffice per la conversione. PDFToWord.credit=Questo servizio utilizza LibreOffice per la conversione.
PDFToWord.submit=Converti PDFToWord.submit=Converti
#PDFToPresentation
PDFToPresentation.title=Da PDF a presentazione PDFToPresentation.title=Da PDF a presentazione
PDFToPresentation.header=Da PDF a presentazione PDFToPresentation.header=Da PDF a presentazione
PDFToPresentation.selectText.1=Formato file di output PDFToPresentation.selectText.1=Formato file di output
@@ -427,6 +767,7 @@ PDFToPresentation.credit=Questo servizio utilizza LibreOffice per la conversione
PDFToPresentation.submit=Converti PDFToPresentation.submit=Converti
#PDFToText
PDFToText.title=Da PDF a testo/RTF PDFToText.title=Da PDF a testo/RTF
PDFToText.header=Da PDF a testo/RTF PDFToText.header=Da PDF a testo/RTF
PDFToText.selectText.1=Formato file di output PDFToText.selectText.1=Formato file di output
@@ -434,11 +775,14 @@ PDFToText.credit=Questo servizio utilizza LibreOffice per la conversione.
PDFToText.submit=Converti PDFToText.submit=Converti
#PDFToHTML
PDFToHTML.title=Da PDF a HTML PDFToHTML.title=Da PDF a HTML
PDFToHTML.header=Da PDF a HTML PDFToHTML.header=Da PDF a HTML
PDFToHTML.credit=Questo servizio utilizza LibreOffice per la conversione. PDFToHTML.credit=Questo servizio utilizza LibreOffice per la conversione.
PDFToHTML.submit=Converti PDFToHTML.submit=Converti
#PDFToXML
PDFToXML.title=Da PDF a XML PDFToXML.title=Da PDF a XML
PDFToXML.header=Da PDF a XML PDFToXML.header=Da PDF a XML
PDFToXML.credit=Questo servizio utilizza LibreOffice per la conversione. PDFToXML.credit=Questo servizio utilizza LibreOffice per la conversione.

View File

@@ -0,0 +1,825 @@
###########
# Generic #
###########
# the direction that the language is written (ltr=left to right, rtl = right to left)
language.direction=ltr
pdfPrompt=PDFを選択
multiPdfPrompt=PDFを選択 (2つ以上)
multiPdfDropPrompt=PDFを選択 (又はドラッグ&ドロップ)
imgPrompt=画像を選択
genericSubmit=送信
processTimeWarning=警告:この処理はファイルサイズによって1分程度かかることがあります
pageOrderPrompt=ページ順序 (ページ番号をカンマ区切り又は2n+1のような関数で入力):
goToPage=移動
true=True
false=False
unknown=不明
save=保存
close=閉じる
filesSelected=選択されたファイル
noFavourites=お気に入りはありません
bored=待ち時間が退屈
alphabet=\u30A2\u30EB\u30D5\u30A1\u30D9\u30C3\u30C8
downloadPdf=PDFをダウンロード
text=テキスト
font=フォント
selectFillter=-- 選択 --
pageNum=ページ番号
##########################
### TODO: Translate ###
##########################
sizes.small=Small
sizes.medium=Medium
sizes.large=Large
sizes.x-large=X-Large
error.pdfPassword=PDFにパスワードが設定されてますが、パスワードが入力されてないか間違ってます。
#############
# NAVBAR #
#############
navbar.convert=変換
navbar.security=セキュリティ
navbar.other=その他
navbar.darkmode=ダークモード
navbar.pageOps=ページ操作
navbar.settings=設定
#############
# SETTINGS #
#############
settings.title=設定
settings.update=利用可能なアップデート
settings.appVersion=Appバージョン:
settings.downloadOption.title=ダウンロードオプション (zip以外の単一ファイル):
settings.downloadOption.1=同じウィンドウで開く
settings.downloadOption.2=新しいウィンドウで開く
settings.downloadOption.3=ファイルをダウンロード
settings.zipThreshold=このファイル数を超えたときにファイルを圧縮する
#############
# HOME-PAGE #
#############
home.desc=PDFのあらゆるニーズに対応するローカルホスティングされた総合窓口です。
home.multiTool.title=PDFマルチツール
home.multiTool.desc=ページの結合、回転、並べ替え、削除します。
##########################
### TODO: Translate ###
##########################
multiTool.tags=Multi Tool,Multi operation,UI,click drag,front end,client side,interactive,intractable,move
home.merge.title=結合
home.merge.desc=複数のPDFを1つに結合します。
##########################
### TODO: Translate ###
##########################
merge.tags=merge,Page operations,Back end,server side
home.split.title=分割
home.split.desc=PDFを複数のドキュメントに分割します。
##########################
### TODO: Translate ###
##########################
split.tags=Page operations,divide,Multi Page,cut,server side
home.rotate.title=回転
home.rotate.desc=PDFを回転します。
##########################
### TODO: Translate ###
##########################
rotate.tags=server side
home.imageToPdf.title=画像をPDFに変換
home.imageToPdf.desc=画像 (PNG, JPEG, GIF) をPDFに変換します。
##########################
### TODO: Translate ###
##########################
imageToPdf.tags=conversion,img,jpg,picture,photo
home.pdfToImage.title=PDFを画像に変換
home.pdfToImage.desc=PDFを画像 (PNG, JPEG, GIF) に変換します。
##########################
### TODO: Translate ###
##########################
pdfToImage.tags=conversion,img,jpg,picture,photo
home.pdfOrganiser.title=整理
home.pdfOrganiser.desc=ページの削除/並べ替えします。
##########################
### TODO: Translate ###
##########################
pdfOrganiser.tags=duplex,even,odd,sort,move
home.addImage.title=画像の追加
home.addImage.desc=PDF上の任意の場所に画像を追加します。
##########################
### TODO: Translate ###
##########################
addImage.tags=img,jpg,picture,photo
home.watermark.title=透かしの追加
home.watermark.desc=PDFに独自の透かしを追加します。
##########################
### TODO: Translate ###
##########################
watermark.tags=Text,repeating,label,own,copyright,trademark,img,jpg,picture,photo
home.permissions.title=権限の変更
home.permissions.desc=PDFの権限を変更します。
##########################
### TODO: Translate ###
##########################
permissions.tags=read,write,edit,print
home.removePages.title=削除
home.removePages.desc=PDFから不要なページを削除します。
##########################
### TODO: Translate ###
##########################
removePages.tags=Remove pages,delete pages
home.addPassword.title=パスワードの追加
home.addPassword.desc=PDFをパスワードで暗号化します。
##########################
### TODO: Translate ###
##########################
addPassword.tags=secure,security
home.removePassword.title=パスワードの削除
home.removePassword.desc=PDFからパスワードの削除します。
##########################
### TODO: Translate ###
##########################
removePassword.tags=secure,Decrypt,security,unpassword,delete password
home.compressPdfs.title=圧縮
home.compressPdfs.desc=PDFを圧縮してファイルサイズを小さくします。
##########################
### TODO: Translate ###
##########################
compressPdfs.tags=squish,small,tiny
home.changeMetadata.title=メタデータの変更
home.changeMetadata.desc=PDFのメタデータを変更/削除/追加します。
##########################
### TODO: Translate ###
##########################
changeMetadata.tags==Title,author,date,creation,time,publisher,producer,stats
home.fileToPDF.title=ファイルをPDFに変換
home.fileToPDF.desc=ほぼすべてのファイルをPDFに変換します。 (DOCX, PNG, XLS, PPT, TXTなど)
##########################
### TODO: Translate ###
##########################
fileToPDF.tags=transformation,format,document,picture,slide,text,conversion,office,docs,word,excel,powerpoint
home.ocr.title=OCR / クリーンアップ
home.ocr.desc=クリーンアップはPDF内の画像からテキストを検出してテキストとして再追加します。
##########################
### TODO: Translate ###
##########################
ocr.tags=recognition,text,image,scan,read,identify,detection,editable
home.extractImages.title=画像の抽出
home.extractImages.desc=PDFからすべての画像を抽出してzipで保存します。
##########################
### TODO: Translate ###
##########################
extractImages.tags=picture,photo,save,archive,zip,capture,grab
home.pdfToPDFA.title=PDFをPDF/Aに変換
home.pdfToPDFA.desc=長期保存のためにPDFをPDF/Aに変換。
##########################
### TODO: Translate ###
##########################
pdfToPDFA.tags=archive,long-term,standard,conversion,storage,preservation
home.PDFToWord.title=PDFをWordに変換
home.PDFToWord.desc=PDFをWord形式に変換します。 (DOC, DOCX および ODT)
##########################
### TODO: Translate ###
##########################
PDFToWord.tags=doc,docx,odt,word,transformation,format,conversion,office,microsoft,docfile
home.PDFToPresentation.title=PDFをプレゼンテーションに変換
home.PDFToPresentation.desc=PDFをプレゼンテーション形式に変換します。 (PPT, PPTX および ODP)
##########################
### TODO: Translate ###
##########################
PDFToPresentation.tags=slides,show,office,microsoft
home.PDFToText.title=PDFをText/RTFに変換
home.PDFToText.desc=PDFをTextまたはRTF形式に変換します。
##########################
### TODO: Translate ###
##########################
PDFToText.tags=richformat,richtextformat,rich text format
home.PDFToHTML.title=PDFをHTMLに変換
home.PDFToHTML.desc=PDFをHTML形式に変換します。
##########################
### TODO: Translate ###
##########################
PDFToHTML.tags=web content,browser friendly
home.PDFToXML.title=PDFをXMLに変換
home.PDFToXML.desc=PDFをXML形式に変換します。
##########################
### TODO: Translate ###
##########################
PDFToXML.tags=data-extraction,structured-content,interop,transformation,convert
home.ScannerImageSplit.title=スキャンされた画像の検出/分割
home.ScannerImageSplit.desc=1枚の画像/PDFから複数の写真を分割します。
##########################
### TODO: Translate ###
##########################
ScannerImageSplit.tags=separate,auto-detect,scans,multi-photo,organize
home.sign.title=署名
home.sign.desc=手書き、テキストまたは画像によってPDFに署名を追加します。
##########################
### TODO: Translate ###
##########################
sign.tags=authorize,initials,drawn-signature,text-sign,image-signature
home.flatten.title=平坦化
home.flatten.desc=PDFからインタラクティブな要素とフォームをすべて削除します。
##########################
### TODO: Translate ###
##########################
flatten.tags=static,deactivate,non-interactive,streamline
home.repair.title=修復
home.repair.desc=破損したPDFの修復を試みます。
##########################
### TODO: Translate ###
##########################
repair.tags=fix,restore,correction,recover
home.removeBlanks.title=空白ページの削除
home.removeBlanks.desc=ドキュメントから空白ページを検出して削除します。
##########################
### TODO: Translate ###
##########################
removeBlanks.tags=cleanup,streamline,non-content,organize
home.compare.title=比較
home.compare.desc=2つのPDFを比較して表示します。
##########################
### TODO: Translate ###
##########################
compare.tags=differentiate,contrast,changes,analysis
home.certSign.title=証明書による署名
home.certSign.desc=証明書/キーを使用してPDFに署名します。 (PEM/P12)
##########################
### TODO: Translate ###
##########################
certSign.tags=authenticate,PEM,P12,official,encrypt
home.pageLayout.title=マルチページレイアウト
home.pageLayout.desc=PDFの複数のページを1ページに結合します。
##########################
### TODO: Translate ###
##########################
pageLayout.tags=merge,composite,single-view,organize
home.scalePages.title=ページの縮尺の調整
home.scalePages.desc=ページやコンテンツの縮尺を変更します。
##########################
### TODO: Translate ###
##########################
scalePages.tags=resize,modify,dimension,adapt
##########################
### TODO: Translate ###
##########################
home.pipeline.title=Pipeline (Advanced)
home.pipeline.desc=Run multiple actions on PDFs by defining pipeline scripts
pipeline.tags=automate,sequence,scripted,batch-process
##########################
### TODO: Translate ###
##########################
home.add-page-numbers.title=Add Page Numbers
home.add-page-numbers.desc=Add Page numbers throughout a document in a set location
add-page-numbers.tags=paginate,label,organize,index
##########################
### TODO: Translate ###
##########################
home.auto-rename.title=Auto Rename PDF File
home.auto-rename.desc=Auto renames a PDF file based on its detected header
auto-rename.tags=auto-detect,header-based,organize,relabel
##########################
### TODO: Translate ###
##########################
home.adjust-contrast.title=Adjust Colors/Contrast
home.adjust-contrast.desc=Adjust Contrast, Saturation and Brightness of a PDF
adjust-contrast.tags=color-correction,tune,modify,enhance
##########################
### TODO: Translate ###
##########################
home.crop.title=Crop PDF
home.crop.desc=Crop a PDF to reduce its size (maintains text!)
crop.tags=trim,shrink,edit,shape
##########################
### TODO: Translate ###
##########################
home.autoSplitPDF.title=Auto Split Pages
home.autoSplitPDF.desc=Auto Split Scanned PDF with physical scanned page splitter QR Code
autoSplitPDF.tags=QR-based,separate,scan-segment,organize
##########################
### TODO: Translate ###
##########################
home.sanitizePdf.title=Sanitize
home.sanitizePdf.desc=Remove scripts and other elements from PDF files
sanitizePdf.tags=clean,secure,safe,remove-threats
##########################
### TODO: Translate ###
##########################
home.URLToPDF.title=URL/Website To PDF
home.URLToPDF.desc=Converts any http(s)URL to PDF
URLToPDF.tags=web-capture,save-page,web-to-doc,archive
##########################
### TODO: Translate ###
##########################
home.HTMLToPDF.title=HTML to PDF
home.HTMLToPDF.desc=Converts any HTML file or zip to PDF
HTMLToPDF.tags=markup,web-content,transformation,convert
###########################
# #
# WEB PAGES #
# #
###########################
#url-to-pdf
##########################
### TODO: Translate ###
##########################
URLToPDF.title=URL To PDF
URLToPDF.header=URL To PDF
URLToPDF.submit=Convert
URLToPDF.credit=Uses WeasyPrint
#html-to-pdf
##########################
### TODO: Translate ###
##########################
HTMLToPDF.title=HTML To PDF
HTMLToPDF.header=HTML To PDF
HTMLToPDF.help=Accepts HTML files and ZIPs containing html/css/images etc required
HTMLToPDF.submit=Convert
HTMLToPDF.credit=Uses WeasyPrint
#sanitizePDF
##########################
### TODO: Translate ###
##########################
sanitizePDF.title=Sanitize PDF
sanitizePDF.header=Sanitize a PDF file
sanitizePDF.selectText.1=Remove JavaScript actions
sanitizePDF.selectText.2=Remove embedded files
sanitizePDF.selectText.3=Remove metadata
sanitizePDF.selectText.4=Remove links
sanitizePDF.selectText.5=Remove fonts
sanitizePDF.submit=Sanitize PDF
#addPageNumbers
##########################
### TODO: Translate ###
##########################
addPageNumbers.title=Add Page Numbers
addPageNumbers.header=Add Page Numbers
addPageNumbers.selectText.1=Select PDF file:
addPageNumbers.selectText.2=Margin Size
addPageNumbers.selectText.3=Position
addPageNumbers.selectText.4=Starting Number
addPageNumbers.selectText.5=Pages to Number
addPageNumbers.selectText.6=Custom Text
addPageNumbers.submit=Add Page Numbers
#auto-rename
##########################
### TODO: Translate ###
##########################
auto-rename.title=Auto Rename
auto-rename.header=Auto Rename PDF
auto-rename.submit=Auto Rename
#adjustContrast
##########################
### TODO: Translate ###
##########################
adjustContrast.title=Adjust Contrast
adjustContrast.header=Adjust Contrast
adjustContrast.contrast=Contrast:
adjustContrast.brightness=Brightness:
adjustContrast.saturation=Saturation:
adjustContrast.download=Download
#crop
##########################
### TODO: Translate ###
##########################
crop.title=Crop
crop.header=Crop Image
crop.submit=Submit
#autoSplitPDF
##########################
### TODO: Translate ###
##########################
autoSplitPDF.title=Auto Split PDF
autoSplitPDF.header=Auto Split PDF
autoSplitPDF.description=Print, Insert, Scan, upload, and let us auto-separate your documents. No manual work sorting needed.
autoSplitPDF.selectText.1=Print out some divider sheets from below (Black and white is fine).
autoSplitPDF.selectText.2=Scan all your documents at once by inserting the divider sheet between them.
autoSplitPDF.selectText.3=Upload the single large scanned PDF file and let Stirling PDF handle the rest.
autoSplitPDF.selectText.4=Divider pages are automatically detected and removed, guaranteeing a neat final document.
autoSplitPDF.formPrompt=Submit PDF containing Stirling-PDF Page dividers:
autoSplitPDF.duplexMode=Duplex Mode (Front and back scanning)
autoSplitPDF.dividerDownload1=Download 'Auto Splitter Divider (minimal).pdf'
autoSplitPDF.dividerDownload2=Download 'Auto Splitter Divider (with instructions).pdf'
autoSplitPDF.submit=Submit
#pipeline
##########################
### TODO: Translate ###
##########################
pipeline.title=Pipeline
#pageLayout
pageLayout.title=マルチページレイアウト
pageLayout.header=マルチページレイアウト
pageLayout.pagesPerSheet=1枚あたりのページ数:
pageLayout.submit=送信
#scalePages
scalePages.title=ページの縮尺の調整
scalePages.header=ページの縮尺の調整
scalePages.pageSize=1ページのサイズ
scalePages.scaleFactor=1ページの拡大レベル (トリミング)。
scalePages.submit=送信
#certSign
certSign.title=証明書による署名
certSign.header=証明書を使用してPDFに署名します。 (進行中)
certSign.selectPDF=署名するPDFファイルを選択:
certSign.selectKey=秘密キーファイルを選択 (PKCS#8形式、.pemまたは.der) :
certSign.selectCert=証明書ファイルを選択 (X.509形式、.pemまたは.der) :
certSign.selectP12=PKCS#12キーストアファイルを選択 (.p12または.pfx) (オプション。指定する場合は秘密キーと証明書が含まれている必要があります。):
certSign.certType=証明書の種類
certSign.password=キーストアまたは秘密キーのパスワードを入力 (ある場合) :
certSign.showSig=署名を表示
certSign.reason=理由
certSign.location=場所
certSign.name=名前
certSign.submit=PDFに署名
#removeBlanks
removeBlanks.title=空白の削除
removeBlanks.header=空白ページの削除
removeBlanks.threshold=しきい値 :
removeBlanks.thresholdDesc=白色ピクセルの白さを決めるためのしきい値
removeBlanks.whitePercent=白比率
removeBlanks.whitePercentDesc=削除するページの白の割合
removeBlanks.submit=空白ページの削除
#compare
compare.title=比較
compare.header=PDFの比較
compare.document.1=ドキュメント 1
compare.document.2=ドキュメント 2
compare.submit=比較
#sign
sign.title=署名
sign.header=PDFに署名
sign.upload=画像をアップロード
sign.draw=署名を書く
sign.text=テキスト入力
sign.clear=クリア
sign.add=追加
#repair
repair.title=修復
repair.header=PDFを修復
repair.submit=修復
#flatten
flatten.title=平坦化
flatten.header=PDFを平坦化する
flatten.submit=平坦化
#ScannerImageSplit
ScannerImageSplit.selectText.1=角度のしきい値:
ScannerImageSplit.selectText.2=画像を回転させるために必要な絶対角度の最小値を設定 (初期値:10)。
ScannerImageSplit.selectText.3=許容範囲:
ScannerImageSplit.selectText.4=推定された背景色周辺のカラーバリエーションの範囲を決定 (初期値:30)。
ScannerImageSplit.selectText.5=最小面積:
ScannerImageSplit.selectText.6=画像の最小面積のしきい値を設定 (初期値:10000)。
ScannerImageSplit.selectText.7=最小輪郭面積:
ScannerImageSplit.selectText.8=画像の最小の輪郭面積のしきい値を設定。
ScannerImageSplit.selectText.9=境界線サイズ:
ScannerImageSplit.selectText.10=出力に白い縁取りが出ないように追加・削除される境界線の大きさを設定 (初期値:1)。
#OCR
ocr.title=OCR / クリーンアップ
ocr.header=クリーンアップ / OCR (光学式文字認識)
ocr.selectText.1=PDF内で検出される言語を選択 (リストされているものは現在検出されているものです):
ocr.selectText.2=OCR処理されたPDFと一緒に、OCRしたテキストを含むテキストファイルを作成する
ocr.selectText.3=斜めにスキャンされたページを回転させて修正する
ocr.selectText.4=ページをきれいにして背景ノイズの中からテキストを検出しにくくする。(出力は変わりません)
ocr.selectText.5=ページをきれいにして背景ノイズの中からテキストを検出しにくくし、出力はクリーンアップを維持する。
ocr.selectText.6=インタラクティブなテキストを含むページを無視し、画像ページのみをOCRする
ocr.selectText.7=強制OCR、全てのページで元のテキスト要素を全て削除してOCRする
ocr.selectText.8=Normal (PDFにテキストが含まれている場合はエラーになります。)
ocr.selectText.9=追加設定
ocr.selectText.10=OCRモード
ocr.selectText.11=OCR後に画像を削除する (すべての画像を削除します。変換ステップの一部である場合にのみ有効です)。
ocr.selectText.12=レンダリングタイプ (高度)
ocr.help=他の言語でこれを使用する方法やDocker以外で使用する方法についてはこのドキュメントをお読みください。
ocr.credit=本サービスにはOCRにOCRmyPDFとTesseractを使用しています。
ocr.submit=OCRでPDFを処理する
#extractImages
extractImages.title=画像の抽出
extractImages.header=画像の抽出
extractImages.selectText=抽出した画像のフォーマットを選択
extractImages.submit=抽出
#File to PDF
fileToPDF.title=ファイルをPDFに変換
fileToPDF.header=あらゆるファイルをPDFに変換
fileToPDF.credit=本サービスはファイル変換にLibreOfficeとUnoconvを使用しています。
fileToPDF.supportedFileTypes=サポートされるファイル形式には以下が含まれますが、完全な更新リストについてはLibreOfficeのドキュメントを参照してください。
fileToPDF.submit=PDFを変換
#compress
compress.title=圧縮
compress.header=PDFを圧縮
compress.credit=本サービスはPDFの圧縮/最適化にGhostscriptを使用しています。
compress.selectText.1=手動モード - 1 から 4
compress.selectText.2=品質レベル:
compress.selectText.3=4 (テキスト画像は最悪)
compress.selectText.4=自動モード - PDFを正確なサイズにするために品質を自動調整する。
compress.selectText.5=PDFサイズ (例 25MB, 10.8MB, 25KB)
compress.submit=圧縮
#Add image
addImage.title=画像の追加
addImage.header=PDFに画像を追加
addImage.everyPage=全ページ?
addImage.upload=画像の追加
addImage.submit=画像の追加
#merge
merge.title=結合
merge.header=複数のPDFを結合 (2ファイル以上)
merge.submit=結合
#pdfOrganiser
pdfOrganiser.title=整理
pdfOrganiser.header=PDFページの整理
pdfOrganiser.submit=ページの整理
#multiTool
multiTool.title=PDFマルチツール
multiTool.header=PDFマルチツール
#pageRemover
pageRemover.title=ページ削除
pageRemover.header=PDFページ削除
pageRemover.pagesToDelete=削除するページ (ページ番号のカンマ区切りリストを入力してください):
pageRemover.submit=ページ削除
#rotate
rotate.title=PDFの回転
rotate.header=PDFの回転
rotate.selectAngle=回転角度を選択 (90度の倍数):
rotate.submit=回転
#merge
split.title=PDFの分割
split.header=PDFの分割
split.desc.1=選択する番号は分割するページ番号です。
split.desc.2=したがって、1,3,7-8を選択すると、10ページのドキュメントが以下のように6つのPDFに分割されることになります。
split.desc.3=ドキュメント #1: ページ 1
split.desc.4=ドキュメント #2: ページ 2, 3
split.desc.5=ドキュメント #3: ページ 4, 5, 6
split.desc.6=ドキュメント #4: ページ 7
split.desc.7=ドキュメント #5: ページ 8
split.desc.8=ドキュメント #6: ページ 9, 10
split.splitPages=分割するページ番号を入力:
split.submit=分割
#merge
imageToPDF.title=画像をPDFに変換
imageToPDF.header=画像をPDFに変換
imageToPDF.submit=変換
imageToPDF.selectText.1=フィットするように引き伸ばす
imageToPDF.selectText.2=PDFの自動回転
imageToPDF.selectText.3=マルチファイルの処理 (複数の画像を操作する場合に有効になります)
imageToPDF.selectText.4=1つのPDFに結合
imageToPDF.selectText.5=個別のPDFに変換
#pdfToImage
pdfToImage.title=PDFを画像に変換
pdfToImage.header=PDFを画像に変換
pdfToImage.selectText=画像の形式
pdfToImage.singleOrMultiple=画像出力タイプ
pdfToImage.single=単一の大きな画像
pdfToImage.multi=複数の画像
pdfToImage.colorType=カラーモード
pdfToImage.color=カラー
pdfToImage.grey=グレースケール
pdfToImage.blackwhite=白黒 (データが失われる可能性があります!)
pdfToImage.submit=変換
#addPassword
addPassword.title=パスワードの追加
addPassword.header=パスワードの追加 (暗号化)
addPassword.selectText.1=暗号化するPDFを選択
addPassword.selectText.2=ユーザーパスワード
addPassword.selectText.3=暗号化キーの長さ
addPassword.selectText.4=値が大きいほど強力ですが、値が小さいほど互換性が高くなります。
addPassword.selectText.5=権限の設定 (所有者パスワードとの併用をおすすめします)
addPassword.selectText.6=ドキュメントの組立を禁止
addPassword.selectText.7=コンテンツの抽出を禁止
addPassword.selectText.8=アクセシビリティのための抽出を禁止
addPassword.selectText.9=フォームへの入力を禁止
addPassword.selectText.10=変更を禁止
addPassword.selectText.11=注釈の変更を禁止
addPassword.selectText.12=印刷を禁止
addPassword.selectText.13=異なる形式の印刷を禁止
addPassword.selectText.14=所有者パスワード
addPassword.selectText.15=ドキュメントを開いた後に実行できる操作を制限します (すべてのリーダーでサポートされているわけではありません)
addPassword.selectText.16=ドキュメントを開くことを制限します
addPassword.submit=暗号化
#watermark
watermark.title=透かしの追加
watermark.header=透かしの追加
watermark.selectText.1=透かしを追加するPDFを選択:
watermark.selectText.2=透かしのテキスト:
watermark.selectText.3=文字サイズ:
watermark.selectText.4=回転 (0-360):
watermark.selectText.5=幅スペース (各透かし間の水平方向のスペース):
watermark.selectText.6=高さスペース (各透かし間の垂直方向のスペース):
watermark.selectText.7=不透明度 (0% - 100%):
watermark.submit=透かしを追加
#remove-watermark
remove-watermark.title=透かしの削除
remove-watermark.header=透かしの削除
remove-watermark.selectText.1=透かしを削除するPDFを選択:
remove-watermark.selectText.2=透かしのテキスト:
remove-watermark.submit=透かしを削除
#Change permissions
permissions.title=権限の変更
permissions.header=権限の変更
permissions.warning=警告、これらの権限を変更できないようにするため、パスワードの追加ページでパスワードを設定することを推奨します。
permissions.selectText.1=権限を変更するPDFを選択
permissions.selectText.2=権限の設定
permissions.selectText.3=ドキュメントの組立を禁止
permissions.selectText.4=コンテンツの抽出を禁止
permissions.selectText.5=アクセシビリティのための抽出を禁止
permissions.selectText.6=フォームへの入力を禁止
permissions.selectText.7=変更を禁止
permissions.selectText.8=注釈の変更を禁止
permissions.selectText.9=印刷を禁止
permissions.selectText.10=異なる形式の印刷を禁止
permissions.submit=変更
#remove password
removePassword.title=パスワードの削除
removePassword.header=パスワードの削除 (復号化)
removePassword.selectText.1=復号化するPDFを選択
removePassword.selectText.2=パスワード
removePassword.submit=削除
#changeMetadata
changeMetadata.title=タイトル:
changeMetadata.header=メタデータの変更
changeMetadata.selectText.1=変更したい変数を編集してください
changeMetadata.selectText.2=すべてのメタデータを削除
changeMetadata.selectText.3=カスタムメタデータを表示
changeMetadata.author=著者:
changeMetadata.creationDate=作成日 (yyyy/MM/dd HH:mm:ss):
changeMetadata.creator=作成者:
changeMetadata.keywords=キーワード:
changeMetadata.modDate=変更日 (yyyy/MM/dd HH:mm:ss):
changeMetadata.producer=プロデューサー:
changeMetadata.subject=主題:
changeMetadata.title=タイトル:
changeMetadata.trapped=トラッピング:
changeMetadata.selectText.4=その他のメタデータ:
changeMetadata.selectText.5=カスタムメタデータの追加
changeMetadata.submit=変更
#xlsToPdf
xlsToPdf.title=ExcelをPDFに変換
xlsToPdf.header=ExcelをPDFに変換
xlsToPdf.selectText.1=変換するXLSまたはXLSX Execlシートを選択
xlsToPdf.convert=変換
#pdfToPDFA
pdfToPDFA.title=PDFをPDF/Aに変換
pdfToPDFA.header=PDFをPDF/Aに変換
pdfToPDFA.credit=本サービスはPDF/Aの変換にOCRmyPDFを使用しています。
pdfToPDFA.submit=変換
#PDFToWord
PDFToWord.title=PDFをWordに変換
PDFToWord.header=PDFをWordに変換
PDFToWord.selectText.1=出力ファイル形式
PDFToWord.credit=本サービスはファイル変換にLibreOfficeを使用しています。
PDFToWord.submit=変換
#PDFToPresentation
PDFToPresentation.title=PDFをプレゼンテーションに変換
PDFToPresentation.header=PDFをプレゼンテーションに変換
PDFToPresentation.selectText.1=出力ファイル形式
PDFToPresentation.credit=本サービスはファイル変換にLibreOfficeを使用しています。
PDFToPresentation.submit=変換
#PDFToText
PDFToText.title=PDFをText/RTFに変換
PDFToText.header=PDFをText/RTFに変換
PDFToText.selectText.1=出力ファイル形式
PDFToText.credit=本サービスはファイル変換にLibreOfficeを使用しています。
PDFToText.submit=変換
#PDFToHTML
PDFToHTML.title=PDFをHTMLに変換
PDFToHTML.header=PDFをHTMLに変換
PDFToHTML.credit=本サービスはファイル変換にLibreOfficeを使用しています。
PDFToHTML.submit=変換
#PDFToXML
PDFToXML.title=PDFをXMLに変換
PDFToXML.header=PDFをXMLに変換
PDFToXML.credit=本サービスはファイル変換にLibreOfficeを使用しています。
PDFToXML.submit=変換

View File

@@ -1,7 +1,7 @@
########### ###########
# Generic # # Generic #
########### ###########
# the direction that the language is written (ltr = left to right, rtl = right to left) # the direction that the language is written (ltr=left to right, rtl = right to left)
language.direction=ltr language.direction=ltr
pdfPrompt=PDF 선택 pdfPrompt=PDF 선택
@@ -20,121 +20,441 @@ close=닫기
filesSelected=개 파일 선택됨 filesSelected=개 파일 선택됨
noFavourites=즐겨찾기 없음 noFavourites=즐겨찾기 없음
bored=기다리는 게 지루하신가요? bored=기다리는 게 지루하신가요?
alphabet=\uC54C\uD30C\uBCB3
downloadPdf=PDF 다운로드
text=텍스트
font=폰트
selectFillter=-- 선택 --
pageNum=페이지 번호
sizes.small=Small
sizes.medium=Medium
sizes.large=Large
sizes.x-large=X-Large
error.pdfPassword=The PDF Document is passworded and either the password was not provided or was incorrect
#############
# NAVBAR #
#############
navbar.convert=변환
navbar.security=보안
navbar.other=기타
navbar.darkmode=다크 모드
navbar.pageOps=Page Operations
navbar.settings=설정
#############
# SETTINGS #
#############
settings.title=설정
settings.update=업데이트 가능
settings.appVersion=앱 버전:
settings.downloadOption.title=다운로드 옵션 선택 (zip 파일이 아닌 단일 파일 다운로드 시):
settings.downloadOption.1=현재 창에서 열기
settings.downloadOption.2=새 창에서 열기
settings.downloadOption.3=다운로드
settings.zipThreshold=다운로드한 파일 수가 초과된 경우 파일 압축하기
############# #############
# HOME-PAGE # # HOME-PAGE #
############# #############
home.desc=당신의 PDF에 필요한 모든 것이 있는 로컬 호스팅된 원스톱 숍입니다. home.desc=당신의 PDF에 필요한 모든 것이 있는 로컬 호스팅된 원스톱 숍입니다.
navbar.convert=변환
navbar.security=보안
navbar.other=기타
navbar.darkmode=다크 모드
navbar.pageOps=Page Operations
home.multiTool.title=PDF 멀티 툴 home.multiTool.title=PDF 멀티 툴
home.multiTool.desc=페이지를 병합, 회전, 재배열, 제거하세요. home.multiTool.desc=페이지를 병합, 회전, 재배열, 제거하세요.
multiTool.tags=Multi Tool,Multi operation,UI,click drag,front end,client side
home.merge.title=병합 home.merge.title=병합
home.merge.desc=여러 개의 PDF를 쉽게 하나로 합치세요. home.merge.desc=여러 개의 PDF를 쉽게 하나로 합치세요.
merge.tags=merge,Page operations,Back end,server side
home.split.title=분할 home.split.title=분할
home.split.desc=PDF를 여러 개의 문서로 분할하세요. home.split.desc=PDF를 여러 개의 문서로 분할하세요.
##########################
### TODO: Translate ###
##########################
split.tags=Page operations,divide,Multi Page,cut,server side
home.rotate.title=회전 home.rotate.title=회전
home.rotate.desc=PDF를 쉽게 회전하세요. home.rotate.desc=PDF를 쉽게 회전하세요.
##########################
### TODO: Translate ###
##########################
rotate.tags=server side
home.imageToPdf.title=Image to PDF home.imageToPdf.title=Image to PDF
home.imageToPdf.desc=이미지(PNG, JPEG, GIF)를 PDF로 변환하세요. home.imageToPdf.desc=이미지(PNG, JPEG, GIF)를 PDF로 변환하세요.
##########################
### TODO: Translate ###
##########################
imageToPdf.tags=conversion,img,jpg,picture,photo
home.pdfToImage.title=PDF to Image home.pdfToImage.title=PDF to Image
home.pdfToImage.desc=PDF를 이미지(PNG, JPEG, GIF)로 변환하세요. home.pdfToImage.desc=PDF를 이미지(PNG, JPEG, GIF)로 변환하세요.
##########################
### TODO: Translate ###
##########################
pdfToImage.tags=conversion,img,jpg,picture,photo
home.pdfOrganiser.title=정렬 home.pdfOrganiser.title=정렬
home.pdfOrganiser.desc=페이지를 원하는 순서대로 제거/재배열하세요. home.pdfOrganiser.desc=페이지를 원하는 순서대로 제거/재배열하세요.
##########################
### TODO: Translate ###
##########################
pdfOrganiser.tags=duplex,even,odd,sort,move
home.addImage.title=사진 추가 home.addImage.title=사진 추가
home.addImage.desc=PDF의 설정된 위치에 이미지를 추가하세요.(개발 중) home.addImage.desc=PDF의 설정된 위치에 이미지를 추가하세요.(개발 중)
##########################
### TODO: Translate ###
##########################
addImage.tags=img,jpg,picture,photo
home.watermark.title=워터마크 추가 home.watermark.title=워터마크 추가
home.watermark.desc=PDF 문서에 사용자 지정 워터마크를 추가하세요. home.watermark.desc=PDF 문서에 사용자 지정 워터마크를 추가하세요.
##########################
home.remove-watermark.title=워터마크 제거 ### TODO: Translate ###
home.remove-watermark.desc=PDF 문서에서 워터마크를 제거하세요. ##########################
watermark.tags=Text,repeating,label,own,copyright,trademark,img,jpg,picture,photo
home.permissions.title=권한 변경 home.permissions.title=권한 변경
home.permissions.desc=PDF 문서의 권한을 변경하세요. home.permissions.desc=PDF 문서의 권한을 변경하세요.
##########################
### TODO: Translate ###
##########################
permissions.tags=read,write,edit,print
home.removePages.title=제거 home.removePages.title=제거
home.removePages.desc=PDF 문서에서 원치 않는 페이지를 제거하세요. home.removePages.desc=PDF 문서에서 원치 않는 페이지를 제거하세요.
##########################
### TODO: Translate ###
##########################
removePages.tags=Remove pages,delete pages
home.addPassword.title=비밀번호 추가 home.addPassword.title=비밀번호 추가
home.addPassword.desc=PDF 문서를 비밀번호로 암호화하세요. home.addPassword.desc=PDF 문서를 비밀번호로 암호화하세요.
##########################
### TODO: Translate ###
##########################
addPassword.tags=secure,security
home.removePassword.title=비밀번호 제거 home.removePassword.title=비밀번호 제거
home.removePassword.desc=PDF 문서에서 비밀번호를 제거하세요. home.removePassword.desc=PDF 문서에서 비밀번호를 제거하세요.
##########################
### TODO: Translate ###
##########################
removePassword.tags=secure,Decrypt,security,unpassword,delete password
home.compressPdfs.title=압축 home.compressPdfs.title=압축
home.compressPdfs.desc=파일 크기를 줄이기 위해 PDF 문서를 압축하세요. home.compressPdfs.desc=파일 크기를 줄이기 위해 PDF 문서를 압축하세요.
##########################
### TODO: Translate ###
##########################
compressPdfs.tags=squish,small,tiny
home.changeMetadata.title=메타데이터 변경 home.changeMetadata.title=메타데이터 변경
home.changeMetadata.desc=PDF 문서의 메타데이터를 수정/제거/추가하세요. home.changeMetadata.desc=PDF 문서의 메타데이터를 수정/제거/추가하세요.
##########################
### TODO: Translate ###
##########################
changeMetadata.tags==Title,author,date,creation,time,publisher,producer,stats
home.fileToPDF.title=파일을 PDF로 변환 home.fileToPDF.title=파일을 PDF로 변환
home.fileToPDF.desc=거의 모든 파일을 PDF로 변환하세요(DOCX, PNG, XLS, PPT, TXT 등) home.fileToPDF.desc=거의 모든 파일을 PDF로 변환하세요(DOCX, PNG, XLS, PPT, TXT 등)
##########################
### TODO: Translate ###
##########################
fileToPDF.tags=transformation,format,document,picture,slide,text,conversion,office,docs,word,excel,powerpoint
home.ocr.title=OCR / 깔끔하게 스캔 home.ocr.title=OCR / 깔끔하게 스캔
home.ocr.desc=깔끔하게 스캔하고 PDF 내의 이미지에서 텍스트를 감지하여 텍스트로 다시 추가합니다. home.ocr.desc=깔끔하게 스캔하고 PDF 내의 이미지에서 텍스트를 감지하여 텍스트로 다시 추가합니다.
##########################
### TODO: Translate ###
##########################
ocr.tags=recognition,text,image,scan,read,identify,detection,editable
home.extractImages.title=이미지 추출 home.extractImages.title=이미지 추출
home.extractImages.desc=PDF에서 모든 이미지를 추출하여 zip으로 저장합니다. home.extractImages.desc=PDF에서 모든 이미지를 추출하여 zip으로 저장합니다.
##########################
### TODO: Translate ###
##########################
extractImages.tags=picture,photo,save,archive,zip,capture,grab
home.pdfToPDFA.title=PDF to PDF/A home.pdfToPDFA.title=PDF to PDF/A
home.pdfToPDFA.desc=장기 보관을 위해 PDF를 PDF/A 문서로 변환하세요. home.pdfToPDFA.desc=장기 보관을 위해 PDF를 PDF/A 문서로 변환하세요.
##########################
### TODO: Translate ###
##########################
pdfToPDFA.tags=archive,long-term,standard,conversion,storage,preservation
home.PDFToWord.title=PDF to Word home.PDFToWord.title=PDF to Word
home.PDFToWord.desc=PDF를 Word 형식으로 변환하세요. (DOC, DOCX, ODT) home.PDFToWord.desc=PDF를 Word 형식으로 변환하세요. (DOC, DOCX, ODT)
##########################
### TODO: Translate ###
##########################
PDFToWord.tags=doc,docx,odt,word,transformation,format,conversion,office,microsoft,docfile
home.PDFToPresentation.title=PDF to 프리젠테이션 home.PDFToPresentation.title=PDF to 프리젠테이션
home.PDFToPresentation.desc=PDF를 프리젠테이션 형식으로 변환하세요. (PPT, PPTX, ODP) home.PDFToPresentation.desc=PDF를 프리젠테이션 형식으로 변환하세요. (PPT, PPTX, ODP)
##########################
### TODO: Translate ###
##########################
PDFToPresentation.tags=slides,show,office,microsoft
home.PDFToText.title=PDF to 텍스트/RTF home.PDFToText.title=PDF to 텍스트/RTF
home.PDFToText.desc=PDF를 텍스트 또는 RTF 형식으로 변환하세요. home.PDFToText.desc=PDF를 텍스트 또는 RTF 형식으로 변환하세요.
##########################
### TODO: Translate ###
##########################
PDFToText.tags=richformat,richtextformat,rich text format
home.PDFToHTML.title=PDF to HTML home.PDFToHTML.title=PDF to HTML
home.PDFToHTML.desc=PDF를 HTML 형식으로 변환하세요. home.PDFToHTML.desc=PDF를 HTML 형식으로 변환하세요.
##########################
### TODO: Translate ###
##########################
PDFToHTML.tags=web content,browser friendly
home.PDFToXML.title=PDF to XML home.PDFToXML.title=PDF to XML
home.PDFToXML.desc=PDF를 XML 형식으로 변환하세요. home.PDFToXML.desc=PDF를 XML 형식으로 변환하세요.
##########################
### TODO: Translate ###
##########################
PDFToXML.tags=data-extraction,structured-content,interop,transformation,convert
home.ScannerImageSplit.title=스캔한 사진 감지/분할 home.ScannerImageSplit.title=스캔한 사진 감지/분할
home.ScannerImageSplit.desc=사진/PDF 내에서 여러 장의 사진을 분할합니다. home.ScannerImageSplit.desc=사진/PDF 내에서 여러 장의 사진을 분할합니다.
##########################
### TODO: Translate ###
##########################
ScannerImageSplit.tags=separate,auto-detect,scans,multi-photo,organize
home.sign.title=서명 home.sign.title=서명
home.sign.desc=PDF에 그림, 텍스트, 이미지로 서명을 추가합니다. home.sign.desc=PDF에 그림, 텍스트, 이미지로 서명을 추가합니다.
##########################
### TODO: Translate ###
##########################
sign.tags=authorize,initials,drawn-signature,text-sign,image-signature
home.flatten.title=합치기 home.flatten.title=합치기
home.flatten.desc=PDF에서 모든 인터랙션 요소와 양식을 제거하세요. home.flatten.desc=PDF에서 모든 인터랙션 요소와 양식을 제거하세요.
##########################
### TODO: Translate ###
##########################
flatten.tags=static,deactivate,non-interactive,streamline
home.repair.title=복구 home.repair.title=복구
home.repair.desc=손상된 PDF의 복구를 시도합니다. home.repair.desc=손상된 PDF의 복구를 시도합니다.
##########################
### TODO: Translate ###
##########################
repair.tags=fix,restore,correction,recover
home.removeBlanks.title=빈 페이지 제거 home.removeBlanks.title=빈 페이지 제거
home.removeBlanks.desc=문서에서 빈 페이지를 감지하고 제거합니다. home.removeBlanks.desc=문서에서 빈 페이지를 감지하고 제거합니다.
##########################
### TODO: Translate ###
##########################
removeBlanks.tags=cleanup,streamline,non-content,organize
home.compare.title=비교 home.compare.title=비교
home.compare.desc=2개의 PDF 문서를 비교하고 차이를 표시합니다. home.compare.desc=2개의 PDF 문서를 비교하고 차이를 표시합니다.
##########################
### TODO: Translate ###
##########################
compare.tags=differentiate,contrast,changes,analysis
home.certSign.title=인증서로 서명 home.certSign.title=인증서로 서명
home.certSign.desc=PDF에 인증서/키로 서명합니다. (PEM/P12) home.certSign.desc=PDF에 인증서/키로 서명합니다. (PEM/P12)
##########################
### TODO: Translate ###
##########################
certSign.tags=authenticate,PEM,P12,official,encrypt
home.pageLayout.title=Multi-Page Layout
home.pageLayout.desc=Merge multiple pages of a PDF document into a single page
##########################
### TODO: Translate ###
##########################
pageLayout.tags=merge,composite,single-view,organize
home.scalePages.title=Adjust page size/scale
home.scalePages.desc=Change the size/scale of page and/or its contents.
##########################
### TODO: Translate ###
##########################
scalePages.tags=resize,modify,dimension,adapt
home.pipeline.title=Pipeline (Advanced)
home.pipeline.desc=Run multiple actions on PDFs by defining pipeline scripts
##########################
### TODO: Translate ###
##########################
pipeline.tags=automate,sequence,scripted,batch-process
home.add-page-numbers.title=Add Page Numbers
home.add-page-numbers.desc=Add Page numbers throughout a document in a set location
##########################
### TODO: Translate ###
##########################
add-page-numbers.tags=paginate,label,organize,index
home.auto-rename.title=Auto Rename PDF File
home.auto-rename.desc=Auto renames a PDF file based on its detected header
##########################
### TODO: Translate ###
##########################
auto-rename.tags=auto-detect,header-based,organize,relabel
home.adjust-contrast.title=Adjust Colors/Contrast
home.adjust-contrast.desc=Adjust Contrast, Saturation and Brightness of a PDF
##########################
### TODO: Translate ###
##########################
adjust-contrast.tags=color-correction,tune,modify,enhance
home.crop.title=Crop PDF
home.crop.desc=Crop a PDF to reduce its size (maintains text!)
##########################
### TODO: Translate ###
##########################
crop.tags=trim,shrink,edit,shape
home.autoSplitPDF.title=Auto Split Pages
home.autoSplitPDF.desc=Auto Split Scanned PDF with physical scanned page splitter QR Code
##########################
### TODO: Translate ###
##########################
autoSplitPDF.tags=QR-based,separate,scan-segment,organize
home.sanitizePdf.title=Sanitize
home.sanitizePdf.desc=Remove scripts and other elements from PDF files
##########################
### TODO: Translate ###
##########################
sanitizePdf.tags=clean,secure,safe,remove-threats
##########################
### TODO: Translate ###
##########################
home.URLToPDF.title=URL/Website To PDF
home.URLToPDF.desc=Converts any http(s)URL to PDF
URLToPDF.tags=web-capture,save-page,web-to-doc,archive
##########################
### TODO: Translate ###
##########################
home.HTMLToPDF.title=HTML to PDF
home.HTMLToPDF.desc=Converts any HTML file or zip to PDF
HTMLToPDF.tags=markup,web-content,transformation,convert
downloadPdf=PDF 다운로드 ###########################
text=텍스트 # #
font=폰트 # WEB PAGES #
selectFillter=-- 선택 -- # #
pageNum=페이지 번호 ###########################
#url-to-pdf
URLToPDF.title=URL To PDF
URLToPDF.header=URL To PDF
URLToPDF.submit=Convert
URLToPDF.credit=Uses WeasyPrint
#html-to-pdf
HTMLToPDF.title=HTML To PDF
HTMLToPDF.header=HTML To PDF
HTMLToPDF.help=Accepts HTML files and ZIPs containing html/css/images etc required
HTMLToPDF.submit=Convert
HTMLToPDF.credit=Uses WeasyPrint
#sanitizePDF
sanitizePDF.title=Sanitize PDF
sanitizePDF.header=Sanitize a PDF file
sanitizePDF.selectText.1=Remove JavaScript actions
sanitizePDF.selectText.2=Remove embedded files
sanitizePDF.selectText.3=Remove metadata
sanitizePDF.selectText.4=Remove links
sanitizePDF.selectText.5=Remove fonts
sanitizePDF.submit=Sanitize PDF
#addPageNumbers
addPageNumbers.title=Add Page Numbers
addPageNumbers.header=Add Page Numbers
addPageNumbers.selectText.1=Select PDF file:
addPageNumbers.selectText.2=Margin Size
addPageNumbers.selectText.3=Position
addPageNumbers.selectText.4=Starting Number
addPageNumbers.selectText.5=Pages to Number
addPageNumbers.selectText.6=Custom Text
addPageNumbers.submit=Add Page Numbers
#auto-rename
auto-rename.title=Auto Rename
auto-rename.header=Auto Rename PDF
auto-rename.submit=Auto Rename
#adjustContrast
adjustContrast.title=Adjust Contrast
adjustContrast.header=Adjust Contrast
adjustContrast.contrast=Contrast:
adjustContrast.brightness=Brightness:
adjustContrast.saturation=Saturation:
adjustContrast.download=Download
#crop
crop.title=Crop
crop.header=Crop Image
crop.submit=Submit
#autoSplitPDF
autoSplitPDF.title=Auto Split PDF
autoSplitPDF.header=Auto Split PDF
autoSplitPDF.description=Print, Insert, Scan, upload, and let us auto-separate your documents. No manual work sorting needed.
autoSplitPDF.selectText.1=Print out some divider sheets from below (Black and white is fine).
autoSplitPDF.selectText.2=Scan all your documents at once by inserting the divider sheet between them.
autoSplitPDF.selectText.3=Upload the single large scanned PDF file and let Stirling PDF handle the rest.
autoSplitPDF.selectText.4=Divider pages are automatically detected and removed, guaranteeing a neat final document.
autoSplitPDF.formPrompt=Submit PDF containing Stirling-PDF Page dividers:
autoSplitPDF.duplexMode=Duplex Mode (Front and back scanning)
autoSplitPDF.dividerDownload1=Download 'Auto Splitter Divider (minimal).pdf'
autoSplitPDF.dividerDownload2=Download 'Auto Splitter Divider (with instructions).pdf'
autoSplitPDF.submit=Submit
#pipeline
pipeline.title=Pipeline
#pageLayout
pageLayout.title=Multi Page Layout
pageLayout.header=Multi Page Layout
pageLayout.pagesPerSheet=Pages per sheet:
pageLayout.submit=Submit
#scalePages
scalePages.title=Adjust page-scale
scalePages.header=Adjust page-scale
scalePages.pageSize=Size of a page of the document.
scalePages.scaleFactor=Zoom level (crop) of a page.
scalePages.submit=Submit
#certSign
certSign.title=인증서로 서명 certSign.title=인증서로 서명
certSign.header=PDF에 당신의 인증서로 서명하세요 (개발 중) certSign.header=PDF에 당신의 인증서로 서명하세요 (개발 중)
certSign.selectPDF=서명할 PDF를 선택하세요: certSign.selectPDF=서명할 PDF를 선택하세요:
@@ -147,11 +467,10 @@ certSign.showSig=서명 보기
certSign.reason=이유 certSign.reason=이유
certSign.location=위치 certSign.location=위치
certSign.name=이름 certSign.name=이름
certSign.submit=PDF 서명 certSign.submit=PDF 서명
#removeBlanks
removeBlanks.title=빈 페이지 제거 removeBlanks.title=빈 페이지 제거
removeBlanks.header=빈 페이지 제거 removeBlanks.header=빈 페이지 제거
removeBlanks.threshold=임계값: removeBlanks.threshold=임계값:
@@ -160,12 +479,16 @@ removeBlanks.whitePercent=흰색 비율 (%):
removeBlanks.whitePercentDesc=제거될 페이지의 흰색 픽셀 비율 removeBlanks.whitePercentDesc=제거될 페이지의 흰색 픽셀 비율
removeBlanks.submit=빈 페이지 제거 removeBlanks.submit=빈 페이지 제거
#compare
compare.title=비교 compare.title=비교
compare.header=PDF 비교 compare.header=PDF 비교
compare.document.1=문서 1 compare.document.1=문서 1
compare.document.2=문서 2 compare.document.2=문서 2
compare.submit=비교 compare.submit=비교
#sign
sign.title=서명 sign.title=서명
sign.header=PDF에 서명 sign.header=PDF에 서명
sign.upload=이미지 업로드 sign.upload=이미지 업로드
@@ -174,14 +497,20 @@ sign.text=텍스트 입력
sign.clear=초기화 sign.clear=초기화
sign.add=추가 sign.add=추가
#repair
repair.title=복구 repair.title=복구
repair.header=PDF 복구 repair.header=PDF 복구
repair.submit=복구 repair.submit=복구
#flatten
flatten.title=합치기 flatten.title=합치기
flatten.header=PDF 합치기 flatten.header=PDF 합치기
flatten.submit=합치기 flatten.submit=합치기
#ScannerImageSplit
ScannerImageSplit.selectText.1=각도 임계값: ScannerImageSplit.selectText.1=각도 임계값:
ScannerImageSplit.selectText.2=이미지를 회전하는 데 필요한 최소 절대 각도를 설정합니다(기본값: 10). ScannerImageSplit.selectText.2=이미지를 회전하는 데 필요한 최소 절대 각도를 설정합니다(기본값: 10).
ScannerImageSplit.selectText.3=오차 범위: ScannerImageSplit.selectText.3=오차 범위:
@@ -193,19 +522,6 @@ ScannerImageSplit.selectText.8=사진의 최소 윤곽선 영역 임계값을
ScannerImageSplit.selectText.9=테두리 크기: ScannerImageSplit.selectText.9=테두리 크기:
ScannerImageSplit.selectText.10=출력에서 흰색 테두리를 방지하기 위해 추가 및 제거되는 테두리의 크기를 설정합니다(기본값: 1). ScannerImageSplit.selectText.10=출력에서 흰색 테두리를 방지하기 위해 추가 및 제거되는 테두리의 크기를 설정합니다(기본값: 1).
navbar.settings=설정
settings.title=설정
settings.update=업데이트 가능
settings.appVersion=앱 버전:
settings.downloadOption.title=다운로드 옵션 선택 (zip 파일이 아닌 단일 파일 다운로드 시):
settings.downloadOption.1=현재 창에서 열기
settings.downloadOption.2=새 창에서 열기
settings.downloadOption.3=다운로드
settings.zipThreshold=다운로드한 파일 수가 초과된 경우 파일 압축하기
#OCR #OCR
ocr.title=OCR / 깔끔하게 스캔 ocr.title=OCR / 깔끔하게 스캔
@@ -227,7 +543,7 @@ ocr.credit=이 서비스는 OCR에 OCRmyPDF와 Tesseract를 사용합니다.
ocr.submit=OCR로 PDF 처리 ocr.submit=OCR로 PDF 처리
#extractImages
extractImages.title=이미지 추출 extractImages.title=이미지 추출
extractImages.header=이미지 추출 extractImages.header=이미지 추출
extractImages.selectText=추출된 이미지를 변환할 이미지 형식을 선택하세요. extractImages.selectText=추출된 이미지를 변환할 이미지 형식을 선택하세요.
@@ -258,6 +574,7 @@ compress.submit=압축
addImage.title=이미지 추가 addImage.title=이미지 추가
addImage.header=PDF에 이미지 추가 addImage.header=PDF에 이미지 추가
addImage.everyPage=모든 페이지에 적용 addImage.everyPage=모든 페이지에 적용
addImage.upload=이미지 추가
addImage.submit=이미지 추가 addImage.submit=이미지 추가
@@ -266,11 +583,13 @@ merge.title=병합
merge.header=여러 개의 PDF 병합 (2개 이상) merge.header=여러 개의 PDF 병합 (2개 이상)
merge.submit=병합 merge.submit=병합
#pdfOrganiser #pdfOrganiser
pdfOrganiser.title=페이지 정렬 도구 pdfOrganiser.title=페이지 정렬 도구
pdfOrganiser.header=PDF 페이지 정렬 pdfOrganiser.header=PDF 페이지 정렬
pdfOrganiser.submit=페이지 재정렬 pdfOrganiser.submit=페이지 재정렬
#multiTool #multiTool
multiTool.title=PDF 멀티 툴 multiTool.title=PDF 멀티 툴
multiTool.header=PDF 멀티 툴 multiTool.header=PDF 멀티 툴
@@ -282,6 +601,7 @@ pageRemover.header=PDF 페이지 제거 도구
pageRemover.pagesToDelete=제거할 페이지 (쉼표로 구분된 페이지 번호 입력): pageRemover.pagesToDelete=제거할 페이지 (쉼표로 구분된 페이지 번호 입력):
pageRemover.submit=페이지 제거 pageRemover.submit=페이지 제거
#rotate #rotate
rotate.title=PDF 회전 rotate.title=PDF 회전
rotate.header=PDF 회전 rotate.header=PDF 회전
@@ -289,8 +609,6 @@ rotate.selectAngle=회전 각도 선택 (90도의 배수로):
rotate.submit=회전 rotate.submit=회전
#merge #merge
split.title=PDF 분할 split.title=PDF 분할
split.header=PDF 분할 split.header=PDF 분할
@@ -306,31 +624,7 @@ split.splitPages=분할할 페이지 입력:
split.submit=분할 split.submit=분할
#imageToPdf #merge
imageToPDF.title=Image to PDF
imageToPDF.header=이미지를 PDF로 변환
imageToPDF.submit=변환
imageToPDF.selectText.1=맞춤 크기로 늘리기
imageToPDF.selectText.2=PDF 자동 회전
imageToPDF.selectText.3=다중 파일 로직 (여러 이미지로 작업하는 경우에만 활성화됨)
imageToPDF.selectText.4=단일 PDF로 병합
imageToPDF.selectText.5=별개의 PDF로 변환
#pdfToImage
pdfToImage.title=PDF to Image
pdfToImage.header=PDF를 이미지로 변환
pdfToImage.selectText=이미지 형식
pdfToImage.singleOrMultiple=이미지 결과 유형
pdfToImage.single=단일 큰 이미지
pdfToImage.multi=여러 이미지
pdfToImage.colorType=색상 유형
pdfToImage.color=컬러
pdfToImage.grey=그레이스케일
pdfToImage.blackwhite=흑백 (데이터 손실 가능성 있음!)
pdfToImage.submit=변환하기
#imageToPdf
imageToPDF.title=이미지를 PDF로 변환 imageToPDF.title=이미지를 PDF로 변환
imageToPDF.header=이미지를 PDF로 변환 imageToPDF.header=이미지를 PDF로 변환
imageToPDF.submit=변환하기 imageToPDF.submit=변환하기
@@ -340,6 +634,7 @@ imageToPDF.selectText.3=다중 파일 로직 (여러 이미지로 작업하는
imageToPDF.selectText.4=단일 PDF로 병합 imageToPDF.selectText.4=단일 PDF로 병합
imageToPDF.selectText.5=별도의 PDF로 변환 imageToPDF.selectText.5=별도의 PDF로 변환
#pdfToImage #pdfToImage
pdfToImage.title=PDF를 이미지로 변환 pdfToImage.title=PDF를 이미지로 변환
pdfToImage.header=PDF를 이미지로 변환 pdfToImage.header=PDF를 이미지로 변환
@@ -353,6 +648,7 @@ pdfToImage.grey=그레이스케일
pdfToImage.blackwhite=흑백 (데이터 손실 가능성 있음!) pdfToImage.blackwhite=흑백 (데이터 손실 가능성 있음!)
pdfToImage.submit=변환하기 pdfToImage.submit=변환하기
#addPassword #addPassword
addPassword.title=암호 추가 addPassword.title=암호 추가
addPassword.header=암호 추가 (암호화) addPassword.header=암호 추가 (암호화)
@@ -368,9 +664,13 @@ addPassword.selectText.9=양식 작성 방지
addPassword.selectText.10=수정 방지 addPassword.selectText.10=수정 방지
addPassword.selectText.11=주석 수정 방지 addPassword.selectText.11=주석 수정 방지
addPassword.selectText.12=인쇄 방지 addPassword.selectText.12=인쇄 방지
addPassword.selectText.13=다른 형식으로 인쇄 방 addPassword.selectText.13=다른 형식으로 인쇄 방<EFBFBD>
addPassword.selectText.14=Owner Password
addPassword.selectText.15=Restricts what can be done with the document once it is opened (Not supported by all readers)
addPassword.selectText.16=Restricts the opening of the document itself<6C>
addPassword.submit=암호화 addPassword.submit=암호화
#watermark #watermark
watermark.title=워터마크 추가 watermark.title=워터마크 추가
watermark.header=워터마크 추가 watermark.header=워터마크 추가
@@ -383,6 +683,7 @@ watermark.selectText.6=세로 간격 (각 워터마크 사이의 세로 공간):
watermark.selectText.7=투명도 (0% - 100%): watermark.selectText.7=투명도 (0% - 100%):
watermark.submit=워터마크 추가 watermark.submit=워터마크 추가
#remove-watermark #remove-watermark
remove-watermark.title=워터마크 제거 remove-watermark.title=워터마크 제거
remove-watermark.header=워터마크 제거 remove-watermark.header=워터마크 제거
@@ -390,6 +691,7 @@ remove-watermark.selectText.1=워터마크를 제거할 PDF 선택:
remove-watermark.selectText.2=워터마크 텍스트: remove-watermark.selectText.2=워터마크 텍스트:
remove-watermark.submit=워터마크 제거 remove-watermark.submit=워터마크 제거
#Change permissions #Change permissions
permissions.title=권한 변경 permissions.title=권한 변경
permissions.header=권한 변경 permissions.header=권한 변경
@@ -406,6 +708,7 @@ permissions.selectText.9=인쇄 방지
permissions.selectText.10=다른 형식으로 인쇄 방지 permissions.selectText.10=다른 형식으로 인쇄 방지
permissions.submit=변경 permissions.submit=변경
#remove password #remove password
removePassword.title=암호 제거 removePassword.title=암호 제거
removePassword.header=암호 제거 (복호화) removePassword.header=암호 제거 (복호화)
@@ -413,7 +716,9 @@ removePassword.selectText.1=복호화할 PDF 선택
removePassword.selectText.2=암호 removePassword.selectText.2=암호
removePassword.submit=제거 removePassword.submit=제거
changeMetadata.title=메타데이터 변경
#changeMetadata
changeMetadata.title=제목:
changeMetadata.header=메타데이터 변경 changeMetadata.header=메타데이터 변경
changeMetadata.selectText.1=변경하려는 변수를 편집해주세요 changeMetadata.selectText.1=변경하려는 변수를 편집해주세요
changeMetadata.selectText.2=모든 메타데이터 삭제 changeMetadata.selectText.2=모든 메타데이터 삭제
@@ -431,27 +736,30 @@ changeMetadata.selectText.4=기타 메타데이터:
changeMetadata.selectText.5=사용자 정의 메타데이터 항목 추가 changeMetadata.selectText.5=사용자 정의 메타데이터 항목 추가
changeMetadata.submit=변경 changeMetadata.submit=변경
#xlsToPdf
xlsToPdf.title=Excel to PDF xlsToPdf.title=Excel to PDF
xlsToPdf.header=Excel을 PDF로 변환 xlsToPdf.header=Excel을 PDF로 변환
xlsToPdf.selectText.1=변환할 XLS 또는 XLSX Excel 시트 선택 xlsToPdf.selectText.1=변환할 XLS 또는 XLSX Excel 시트 선택
xlsToPdf.convert=변환하기 xlsToPdf.convert=변환하기
#pdfToPDFA
pdfToPDFA.title=PDF To PDF/A pdfToPDFA.title=PDF To PDF/A
pdfToPDFA.header=PDF를 PDF/A로 변환 pdfToPDFA.header=PDF를 PDF/A로 변환
pdfToPDFA.credit=이 서비스는 PDF/A 변환을 위해 OCRmyPDF를 사용합니다. pdfToPDFA.credit=이 서비스는 PDF/A 변환을 위해 OCRmyPDF를 사용합니다.
pdfToPDFA.submit=변환 pdfToPDFA.submit=변환
#PDFToWord
PDFToWord.title=PDF to Word PDFToWord.title=PDF to Word
PDFToWord.header=PDF를 Word로 변환 PDFToWord.header=PDF를 Word로 변환
PDFToWord.selectText.1=출력 파일 형식 PDFToWord.selectText.1=출력 파일 형식
PDFToWord.credit=이 서비스는 파일 변환을 위해 LibreOffice를 사용합니다. PDFToWord.credit=이 서비스는 파일 변환을 위해 LibreOffice를 사용합니다.
PDFToWord.submit=변환 PDFToWord.submit=변환
#PDFToPresentation
PDFToPresentation.title=PDF to Presentation PDFToPresentation.title=PDF to Presentation
PDFToPresentation.header=PDF를 프레젠테이션으로 변환 PDFToPresentation.header=PDF를 프레젠테이션으로 변환
PDFToPresentation.selectText.1=출력 파일 형식 PDFToPresentation.selectText.1=출력 파일 형식
@@ -459,31 +767,23 @@ PDFToPresentation.credit=이 서비스는 파일 변환을 위해 LibreOffice를
PDFToPresentation.submit=변환 PDFToPresentation.submit=변환
PDFToText.title=PDF to Text/RTF #PDFToText
PDFToText.title=PDF to RTF (Text)
PDFToText.header=PDF를 텍스트/RTF로 변환 PDFToText.header=PDF를 텍스트/RTF로 변환
PDFToText.selectText.1=출력 파일 형식 PDFToText.selectText.1=출력 파일 형식
PDFToText.credit=이 서비스는 파일 변환을 위해 LibreOffice를 사용합니다. PDFToText.credit=이 서비스는 파일 변환을 위해 LibreOffice를 사용합니다.
PDFToText.submit=변환 PDFToText.submit=변환
#PDFToHTML
PDFToHTML.title=PDF to HTML PDFToHTML.title=PDF to HTML
PDFToHTML.header=PDF를 HTML로 변환 PDFToHTML.header=PDF를 HTML로 변환
PDFToHTML.credit=이 서비스는 파일 변환을 위해 LibreOffice를 사용합니다. PDFToHTML.credit=이 서비스는 파일 변환을 위해 LibreOffice를 사용합니다.
PDFToHTML.submit=변환 PDFToHTML.submit=변환
#PDFToXML
PDFToXML.title=PDF to XML PDFToXML.title=PDF to XML
PDFToXML.header=PDF를 XML로 변환 PDFToXML.header=PDF를 XML로 변환
PDFToXML.credit=이 서비스는 파일 변환을 위해 LibreOffice를 사용합니다. PDFToXML.credit=이 서비스는 파일 변환을 위해 LibreOffice를 사용합니다.
PDFToXML.submit=변환 PDFToXML.submit=변환

View File

@@ -1,7 +1,7 @@
########### ###########
# Generic # # Generic #
########### ###########
# the direction that the language is written (ltr = left to right, rtl = right to left) # the direction that the language is written (ltr=left to right, rtl = right to left)
language.direction=ltr language.direction=ltr
pdfPrompt=Wybierz PDF pdfPrompt=Wybierz PDF
@@ -12,142 +12,465 @@ genericSubmit=Wyślij
processTimeWarning=Ostrzeżenie: Ten proces może potrwać do minuty, w zależności od rozmiaru pliku processTimeWarning=Ostrzeżenie: Ten proces może potrwać do minuty, w zależności od rozmiaru pliku
pageOrderPrompt=Kolejność stron (wprowadź listę numerów stron oddzielonych przecinkami) : pageOrderPrompt=Kolejność stron (wprowadź listę numerów stron oddzielonych przecinkami) :
goToPage=Idź goToPage=Idź
true=Prawda true=Tak
false=Fałsz false=Nie
unknown=Nieznany unknown=Nieznany
save=Zapisz save=Zapisz
close=Zamknij close=Zamknij
filesSelected=wybrane pliki filesSelected=wybrane pliki
noFavourites=Nie dodano ulubionych noFavourites=Nie dodano ulubionych
bored=Znudzony czekaniem? bored=Znudzony czekaniem?
alphabet=Alfabet
downloadPdf=Pobierz PDF
text=Tekst
font=Czcionka
selectFillter=-- Wybierz --
pageNum=Numer strony
sizes.small=Small
sizes.medium=Medium
sizes.large=Large
sizes.x-large=X-Large
error.pdfPassword=Dokument PDF jest zabezpieczony hasłem, musisz podać prawidłowe hasło.
#############
# NAVBAR #
#############
navbar.convert=Konwertuj
navbar.security=Bezpieczeństwo
navbar.other=Inne
navbar.darkmode=Tryb nocny
navbar.pageOps=Strony
navbar.settings=Ustawienia
#############
# SETTINGS #
#############
settings.title=Ustawienia
settings.update=Dostępna aktualizacja
settings.appVersion=Wersia aplikacji:
settings.downloadOption.title=Wybierz opcję pobierania (w przypadku pobierania pojedynczych plików innych niż ZIP):
settings.downloadOption.1=Otwórz w tym samym oknie
settings.downloadOption.2=Otwórz w nowym oknie
settings.downloadOption.3=Pobierz plik
settings.zipThreshold=Spakuj pliki, gdy liczba pobranych plików przekroczy
############# #############
# HOME-PAGE # # HOME-PAGE #
############# #############
home.desc=Twoja lokalna aplikacja do kompleksowej obsługi Twoich potrzeb związanych z dokumentami PDF. home.desc=Twoja lokalna aplikacja do kompleksowej obsługi Twoich potrzeb związanych z dokumentami PDF.
navbar.convert=Konwertuj
navbar.security=Bezpieczeństwo
navbar.other=Inne
navbar.darkmode=Tryb nocny
navbar.pageOps=Strony
home.multiTool.title=Multi narzędzie PDF home.multiTool.title=Multi narzędzie PDF
home.multiTool.desc=Łącz, dziel, obracaj, zmieniaj kolejność i usuwaj strony home.multiTool.desc=Łącz, dziel, obracaj, zmieniaj kolejność i usuwaj strony
multiTool.tags=Multi Tool,Multi operation,UI,click drag,front end,client side
home.merge.title=Połącz home.merge.title=Połącz
home.merge.desc=Łatwe łączenie wielu dokumentów PDF w jeden. home.merge.desc=Łatwe łączenie wielu dokumentów PDF w jeden.
merge.tags=merge,Page operations,Back end,server side
home.split.title=Podziel home.split.title=Podziel
home.split.desc=Podziel dokument PDF na wiele dokumentów home.split.desc=Podziel dokument PDF na wiele dokumentów
##########################
### TODO: Translate ###
##########################
split.tags=Page operations,divide,Multi Page,cut,server side
home.rotate.title=Obróć home.rotate.title=Obróć
home.rotate.desc=Łatwo obracaj dokumenty PDF. home.rotate.desc=Łatwo obracaj dokumenty PDF.
##########################
### TODO: Translate ###
##########################
rotate.tags=server side
home.imageToPdf.title=Obraz na PDF home.imageToPdf.title=Obraz na PDF
home.imageToPdf.desc=Konwertuj obraz (PNG, JPEG, GIF) do dokumentu PDF. home.imageToPdf.desc=Konwertuj obraz (PNG, JPEG, GIF) do dokumentu PDF.
##########################
### TODO: Translate ###
##########################
imageToPdf.tags=conversion,img,jpg,picture,photo
home.pdfToImage.title=PDF na Obraz home.pdfToImage.title=PDF na Obraz
home.pdfToImage.desc=Konwertuj plik PDF na obraz (PNG, JPEG, GIF). home.pdfToImage.desc=Konwertuj plik PDF na obraz (PNG, JPEG, GIF).
##########################
### TODO: Translate ###
##########################
pdfToImage.tags=conversion,img,jpg,picture,photo
home.pdfOrganiser.title=Uporządkuj home.pdfOrganiser.title=Uporządkuj
home.pdfOrganiser.desc=Usuń/Zmień kolejność stron w dowolnej kolejności home.pdfOrganiser.desc=Usuń/Zmień kolejność stron w dowolnej kolejności
##########################
### TODO: Translate ###
##########################
pdfOrganiser.tags=duplex,even,odd,sort,move
home.addImage.title=Dodaj obraz home.addImage.title=Dodaj obraz
home.addImage.desc=Dodaje obraz w wybranym miejscu w dokumencie PDF (komponent w budowie) home.addImage.desc=Dodaje obraz w wybranym miejscu w dokumencie PDF (moduł w budowie)
##########################
### TODO: Translate ###
##########################
addImage.tags=img,jpg,picture,photo
home.watermark.title=Dodaj znak wodny home.watermark.title=Dodaj znak wodny
home.watermark.desc=Dodaj niestandardowy znak wodny do dokumentu PDF. home.watermark.desc=Dodaj niestandardowy znak wodny do dokumentu PDF.
##########################
home.remove-watermark.title=Usuń znak wodny ### TODO: Translate ###
home.remove-watermark.desc=Usuń znaki wodne z dokumentu PDF. ##########################
watermark.tags=Text,repeating,label,own,copyright,trademark,img,jpg,picture,photo
home.permissions.title=Zmień uprawnienia home.permissions.title=Zmień uprawnienia
home.permissions.desc=Zmień uprawnienia dokumentu PDF home.permissions.desc=Zmień uprawnienia dokumentu PDF
##########################
### TODO: Translate ###
##########################
permissions.tags=read,write,edit,print
home.removePages.title=Usuń home.removePages.title=Usuń
home.removePages.desc=Usuń niechciane strony z dokumentu PDF. home.removePages.desc=Usuń niechciane strony z dokumentu PDF.
##########################
### TODO: Translate ###
##########################
removePages.tags=Remove pages,delete pages
home.addPassword.title=Dodaj hasło home.addPassword.title=Dodaj hasło
home.addPassword.desc=Zaszyfruj dokument PDF za pomocą hasła. home.addPassword.desc=Zaszyfruj dokument PDF za pomocą hasła.
##########################
### TODO: Translate ###
##########################
addPassword.tags=secure,security
home.removePassword.title=Usuń hasło home.removePassword.title=Usuń hasło
home.removePassword.desc=Usuń ochronę hasłem z dokumentu PDF. home.removePassword.desc=Usuń ochronę hasłem z dokumentu PDF.
##########################
### TODO: Translate ###
##########################
removePassword.tags=secure,Decrypt,security,unpassword,delete password
home.compressPdfs.title=Kompresuj home.compressPdfs.title=Kompresuj
home.compressPdfs.desc=Kompresuj dokumenty PDF, aby zmniejszyć ich rozmiar. home.compressPdfs.desc=Kompresuj dokumenty PDF, aby zmniejszyć ich rozmiar.
##########################
### TODO: Translate ###
##########################
compressPdfs.tags=squish,small,tiny
home.changeMetadata.title=Zmień metadane home.changeMetadata.title=Zmień metadane
home.changeMetadata.desc=Zmień/Usuń/Dodaj metadane w dokumencie PDF home.changeMetadata.desc=Zmień/Usuń/Dodaj metadane w dokumencie PDF
##########################
### TODO: Translate ###
##########################
changeMetadata.tags==Title,author,date,creation,time,publisher,producer,stats
home.fileToPDF.title=Konwertuj plik do dokumentu PDF home.fileToPDF.title=Konwertuj plik do PDF
home.fileToPDF.desc=Konwertuj prawie każdy plik do dokumentu PDF (DOCX, PNG, XLS, PPT, TXT i więcej) home.fileToPDF.desc=Konwertuj dowolny plik do dokumentu PDF (DOCX, PNG, XLS, PPT, TXT i więcej)
##########################
### TODO: Translate ###
##########################
fileToPDF.tags=transformation,format,document,picture,slide,text,conversion,office,docs,word,excel,powerpoint
home.ocr.title=OCR / Zamiana na tekst home.ocr.title=OCR / Zamiana na tekst
home.ocr.desc=OCR skanuje i wykrywa tekst z obrazów w dokumencie PDF i zamienia go na tekst. home.ocr.desc=OCR skanuje i wykrywa tekst z obrazów w dokumencie PDF i zamienia go na tekst.
##########################
### TODO: Translate ###
##########################
ocr.tags=recognition,text,image,scan,read,identify,detection,editable
home.extractImages.title=Wyodrębnij obrazy home.extractImages.title=Wyodrębnij obrazy
home.extractImages.desc=Wyodrębnia wszystkie obrazy z dokumentu PDF i zapisuje je w formacie zip home.extractImages.desc=Wyodrębnia wszystkie obrazy z dokumentu PDF i zapisuje je w wybranym formacie
##########################
### TODO: Translate ###
##########################
extractImages.tags=picture,photo,save,archive,zip,capture,grab
home.pdfToPDFA.title=PDF na PDF/A home.pdfToPDFA.title=PDF na PDF/A
home.pdfToPDFA.desc=Konwertuj dokument PDF na PDF/A w celu długoterminowego przechowywania home.pdfToPDFA.desc=Konwertuj dokument PDF na PDF/A w celu długoterminowego przechowywania
##########################
### TODO: Translate ###
##########################
pdfToPDFA.tags=archive,long-term,standard,conversion,storage,preservation
home.PDFToWord.title=PDF na Word home.PDFToWord.title=PDF na Word
home.PDFToWord.desc=Konwertuj dokument PDF na formaty Word (DOC, DOCX i ODT) home.PDFToWord.desc=Konwertuj dokument PDF na formaty Word (DOC, DOCX i ODT)
##########################
### TODO: Translate ###
##########################
PDFToWord.tags=doc,docx,odt,word,transformation,format,conversion,office,microsoft,docfile
home.PDFToPresentation.title=PDF na Prezentację home.PDFToPresentation.title=PDF na Prezentację
home.PDFToPresentation.desc=Konwertuj dokument PDF na formaty prezentacji (PPT, PPTX i ODP) home.PDFToPresentation.desc=Konwertuj dokument PDF na formaty prezentacji (PPT, PPTX i ODP)
##########################
### TODO: Translate ###
##########################
PDFToPresentation.tags=slides,show,office,microsoft
home.PDFToText.title=PDF na Tekst/RTF home.PDFToText.title=PDF na Tekst/RTF
home.PDFToText.desc=Konwertuj dokument PDF na tekst lub format RTF home.PDFToText.desc=Konwertuj dokument PDF na tekst lub format RTF
##########################
### TODO: Translate ###
##########################
PDFToText.tags=richformat,richtextformat,rich text format
home.PDFToHTML.title=PDF na HTML home.PDFToHTML.title=PDF na HTML
home.PDFToHTML.desc=Konwertuj dokument PDF na format HTML home.PDFToHTML.desc=Konwertuj dokument PDF na format HTML
##########################
### TODO: Translate ###
##########################
PDFToHTML.tags=web content,browser friendly
home.PDFToXML.title=PDF na XML home.PDFToXML.title=PDF na XML
home.PDFToXML.desc=Konwertuj dokument PDF na format XML home.PDFToXML.desc=Konwertuj dokument PDF na format XML
##########################
### TODO: Translate ###
##########################
PDFToXML.tags=data-extraction,structured-content,interop,transformation,convert
home.ScannerImageSplit.title=Wykryj/Podziel zeskanowane zdjęcia home.ScannerImageSplit.title=Wykryj/Podziel zeskanowane zdjęcia
home.ScannerImageSplit.desc=Podziel na wiele zdjęć z jednego zdjęcia/PDF home.ScannerImageSplit.desc=Podziel na wiele zdjęć z jednego zdjęcia/PDF
##########################
### TODO: Translate ###
##########################
ScannerImageSplit.tags=separate,auto-detect,scans,multi-photo,organize
home.sign.title=Podpis home.sign.title=Podpis
home.sign.desc=Dodaje podpis do dokument PDF za pomocą rysunku, tekstu lub obrazu home.sign.desc=Dodaje podpis do dokument PDF za pomocą rysunku, tekstu lub obrazu
##########################
### TODO: Translate ###
##########################
sign.tags=authorize,initials,drawn-signature,text-sign,image-signature
home.flatten.title=Spłaszcz home.flatten.title=Spłaszcz
home.flatten.desc=Usuń wszystkie interaktywne elementy i formularze z dokumentu PDF home.flatten.desc=Usuń wszystkie interaktywne elementy i formularze z dokumentu PDF
##########################
### TODO: Translate ###
##########################
flatten.tags=static,deactivate,non-interactive,streamline
home.repair.title=Napraw home.repair.title=Napraw
home.repair.desc=Spróbuj naprawić uszkodzony dokument PDF home.repair.desc=Spróbuj naprawić uszkodzony dokument PDF
##########################
### TODO: Translate ###
##########################
repair.tags=fix,restore,correction,recover
home.removeBlanks.title=Usuń puste strony home.removeBlanks.title=Usuń puste strony
home.removeBlanks.desc=Wykrywa i usuwa puste strony z dokumentu PDF home.removeBlanks.desc=Wykrywa i usuwa puste strony z dokumentu PDF
##########################
### TODO: Translate ###
##########################
removeBlanks.tags=cleanup,streamline,non-content,organize
home.compare.title=Porównaj home.compare.title=Porównaj
home.compare.desc=Porównuje i pokazuje różnice między 2 dokumentami PDF home.compare.desc=Porównuje i pokazuje różnice między dwoma dokumentami PDF
##########################
### TODO: Translate ###
##########################
compare.tags=differentiate,contrast,changes,analysis
home.certSign.title=Podpisz certyfikatem osobistym home.certSign.title=Podpisz certyfikatem
home.certSign.desc=Podpisz dokument PDF za pomocą certyfikatu/klucza osobistego (PEM/P12) home.certSign.desc=Podpisz dokument PDF za pomocą certyfikatu/klucza prywatnego (PEM/P12)
##########################
### TODO: Translate ###
##########################
certSign.tags=authenticate,PEM,P12,official,encrypt
downloadPdf=Pobierz PDF home.pageLayout.title=Układ wielu stron
text=Tekst home.pageLayout.desc=Scal wiele stron dokumentu PDF w jedną stronę
font=Czcionka ##########################
selectFillter=-- Wybierz -- ### TODO: Translate ###
pageNum=Numer strony ##########################
pageLayout.tags=merge,composite,single-view,organize
home.scalePages.title=Dopasuj rozmiar stron
home.scalePages.desc=Dopasuj rozmiar stron wybranego dokumentu PDF
##########################
### TODO: Translate ###
##########################
scalePages.tags=resize,modify,dimension,adapt
home.pipeline.title=Pipeline (Advanced)
home.pipeline.desc=Run multiple actions on PDFs by defining pipeline scripts
##########################
### TODO: Translate ###
##########################
pipeline.tags=automate,sequence,scripted,batch-process
home.add-page-numbers.title=Add Page Numbers
home.add-page-numbers.desc=Add Page numbers throughout a document in a set location
##########################
### TODO: Translate ###
##########################
add-page-numbers.tags=paginate,label,organize,index
home.auto-rename.title=Auto Rename PDF File
home.auto-rename.desc=Auto renames a PDF file based on its detected header
##########################
### TODO: Translate ###
##########################
auto-rename.tags=auto-detect,header-based,organize,relabel
home.adjust-contrast.title=Adjust Colors/Contrast
home.adjust-contrast.desc=Adjust Contrast, Saturation and Brightness of a PDF
##########################
### TODO: Translate ###
##########################
adjust-contrast.tags=color-correction,tune,modify,enhance
home.crop.title=Crop PDF
home.crop.desc=Crop a PDF to reduce its size (maintains text!)
##########################
### TODO: Translate ###
##########################
crop.tags=trim,shrink,edit,shape
home.autoSplitPDF.title=Auto Split Pages
home.autoSplitPDF.desc=Auto Split Scanned PDF with physical scanned page splitter QR Code
##########################
### TODO: Translate ###
##########################
autoSplitPDF.tags=QR-based,separate,scan-segment,organize
home.sanitizePdf.title=Sanitize
home.sanitizePdf.desc=Remove scripts and other elements from PDF files
##########################
### TODO: Translate ###
##########################
sanitizePdf.tags=clean,secure,safe,remove-threats
##########################
### TODO: Translate ###
##########################
home.URLToPDF.title=URL/Website To PDF
home.URLToPDF.desc=Converts any http(s)URL to PDF
URLToPDF.tags=web-capture,save-page,web-to-doc,archive
##########################
### TODO: Translate ###
##########################
home.HTMLToPDF.title=HTML to PDF
home.HTMLToPDF.desc=Converts any HTML file or zip to PDF
HTMLToPDF.tags=markup,web-content,transformation,convert
###########################
# #
# WEB PAGES #
# #
###########################
#url-to-pdf
URLToPDF.title=URL To PDF
URLToPDF.header=URL To PDF
URLToPDF.submit=Convert
URLToPDF.credit=Uses WeasyPrint
#html-to-pdf
HTMLToPDF.title=HTML To PDF
HTMLToPDF.header=HTML To PDF
HTMLToPDF.help=Accepts HTML files and ZIPs containing html/css/images etc required
HTMLToPDF.submit=Convert
HTMLToPDF.credit=Uses WeasyPrint
#sanitizePDF
sanitizePDF.title=Sanitize PDF
sanitizePDF.header=Sanitize a PDF file
sanitizePDF.selectText.1=Remove JavaScript actions
sanitizePDF.selectText.2=Remove embedded files
sanitizePDF.selectText.3=Remove metadata
sanitizePDF.selectText.4=Remove links
sanitizePDF.selectText.5=Remove fonts
sanitizePDF.submit=Sanitize PDF
#addPageNumbers
addPageNumbers.title=Add Page Numbers
addPageNumbers.header=Add Page Numbers
addPageNumbers.selectText.1=Select PDF file:
addPageNumbers.selectText.2=Margin Size
addPageNumbers.selectText.3=Position
addPageNumbers.selectText.4=Starting Number
addPageNumbers.selectText.5=Pages to Number
addPageNumbers.selectText.6=Custom Text
addPageNumbers.submit=Add Page Numbers
#auto-rename
auto-rename.title=Auto Rename
auto-rename.header=Auto Rename PDF
auto-rename.submit=Auto Rename
#adjustContrast
adjustContrast.title=Adjust Contrast
adjustContrast.header=Adjust Contrast
adjustContrast.contrast=Contrast:
adjustContrast.brightness=Brightness:
adjustContrast.saturation=Saturation:
adjustContrast.download=Download
#crop
crop.title=Crop
crop.header=Crop Image
crop.submit=Submit
#autoSplitPDF
autoSplitPDF.title=Auto Split PDF
autoSplitPDF.header=Auto Split PDF
autoSplitPDF.description=Print, Insert, Scan, upload, and let us auto-separate your documents. No manual work sorting needed.
autoSplitPDF.selectText.1=Print out some divider sheets from below (Black and white is fine).
autoSplitPDF.selectText.2=Scan all your documents at once by inserting the divider sheet between them.
autoSplitPDF.selectText.3=Upload the single large scanned PDF file and let Stirling PDF handle the rest.
autoSplitPDF.selectText.4=Divider pages are automatically detected and removed, guaranteeing a neat final document.
autoSplitPDF.formPrompt=Submit PDF containing Stirling-PDF Page dividers:
autoSplitPDF.duplexMode=Duplex Mode (Front and back scanning)
autoSplitPDF.dividerDownload1=Download 'Auto Splitter Divider (minimal).pdf'
autoSplitPDF.dividerDownload2=Download 'Auto Splitter Divider (with instructions).pdf'
autoSplitPDF.submit=Submit
#pipeline
pipeline.title=Pipeline
#pageLayout
pageLayout.title=Układ wielu stron
pageLayout.header=Układ wielu stron
pageLayout.pagesPerSheet=Stron na jednym arkuszu:
pageLayout.submit=Wykonaj
#scalePages
scalePages.title=Dopasuj rozmiar stron
scalePages.header=Dopasuj rozmiar stron
scalePages.pageSize=Rozmiar stron dokumentu:
scalePages.scaleFactor=Poziom powiększenia (przycięcia) stron:
scalePages.submit=Wykonaj
#certSign
certSign.title=Podpisywanie certyfikatem certSign.title=Podpisywanie certyfikatem
certSign.header=Podpisz dokument PDF certyfikatem osobistym (prace w toku) certSign.header=Podpisz dokument PDF certyfikatem prywatnym (moduł w budowie)
certSign.selectPDF=Wybierz dokument PDF do podpisania: certSign.selectPDF=Wybierz dokument PDF do podpisania:
certSign.selectKey=Wybierz plik klucza prywatnego (format PKCS#8, może to być .pem lub .der): certSign.selectKey=Wybierz plik klucza prywatnego (format PKCS#8, może to być .pem lub .der):
certSign.selectCert=Wybierz plik certyfikatu (format X.509, może to być .pem lub .der): certSign.selectCert=Wybierz plik certyfikatu (format X.509, może to być .pem lub .der):
certSign.selectP12=Wybierz plik magazynu kluczy PKCS#12 (.p12 lub .pfx) (opcjonalnie, jeśli jest podany, powinien zawierać klucz prywatny i certyfikat): certSign.selectP12=Wybierz plik magazynu kluczy PKCS#12 (.p12 lub .pfx) (opcjonalnie, jeśli jest podany, powinien zawierać klucz prywatny i certyfikat):
certSign.certType=Typ certyfikatu certSign.certType=Typ certyfikatu
certSign.password=Wprowadź hasło do magazynu kluczy lub klucza prywatnego (jeśli istnieje): certSign.password=Wprowadź hasło do magazynu kluczy lub klucza prywatnego (jeśli istnieje):
certSign.showSig=Pokaż podpis certSign.showSig=Wyświetl podpis
certSign.reason=Powód certSign.reason=Organizacja
certSign.location=Lokalizacja certSign.location=Lokalizacja
certSign.name=Nazwa certSign.name=Nazwa
certSign.submit=Podpisz PDF certSign.submit=Podpisz PDF
#removeBlanks
removeBlanks.title=Usuń puste removeBlanks.title=Usuń puste
removeBlanks.header=Usuń puste strony removeBlanks.header=Usuń puste strony
removeBlanks.threshold=Próg: removeBlanks.threshold=Próg:
@@ -156,12 +479,16 @@ removeBlanks.whitePercent=Procent białego (%):
removeBlanks.whitePercentDesc=Procent strony, która musi być biała, aby została usunięta removeBlanks.whitePercentDesc=Procent strony, która musi być biała, aby została usunięta
removeBlanks.submit=Usuń puste removeBlanks.submit=Usuń puste
#compare
compare.title=Porównaj compare.title=Porównaj
compare.header=Porównaj PDF(y) compare.header=Porównaj PDF(y)
compare.document.1=Dokument 1 compare.document.1=Dokument 1
compare.document.2=Dokument 2 compare.document.2=Dokument 2
compare.submit=Porównaj compare.submit=Porównaj
#sign
sign.title=Podpis sign.title=Podpis
sign.header=Dodaj podpis do dokumentu PDF sign.header=Dodaj podpis do dokumentu PDF
sign.upload=Wczytaj opbraz sign.upload=Wczytaj opbraz
@@ -170,14 +497,20 @@ sign.text=Wprowadź tekst
sign.clear=Wyczyść sign.clear=Wyczyść
sign.add=Dodaj sign.add=Dodaj
#repair
repair.title=Napraw repair.title=Napraw
repair.header=Napraw dokument(y) PDF repair.header=Napraw dokument(y) PDF
repair.submit=Napraw repair.submit=Napraw
#flatten
flatten.title=Spłaszcz flatten.title=Spłaszcz
flatten.header=Spłaszcz dokument(y) PDF flatten.header=Spłaszcz dokument(y) PDF
flatten.submit=Spłaszcz flatten.submit=Spłaszcz
#ScannerImageSplit
ScannerImageSplit.selectText.1=Próg kąta: ScannerImageSplit.selectText.1=Próg kąta:
ScannerImageSplit.selectText.2=Ustawia minimalny kąt bezwzględny wymagany do obrócenia obrazu (domyślnie: 10). ScannerImageSplit.selectText.2=Ustawia minimalny kąt bezwzględny wymagany do obrócenia obrazu (domyślnie: 10).
ScannerImageSplit.selectText.3=Tolerancja: ScannerImageSplit.selectText.3=Tolerancja:
@@ -189,19 +522,6 @@ ScannerImageSplit.selectText.8=Ustawia próg minimalnego obszaru konturu dla zdj
ScannerImageSplit.selectText.9=Rozmiar obramowania: ScannerImageSplit.selectText.9=Rozmiar obramowania:
ScannerImageSplit.selectText.10=Ustawia rozmiar dodawanego i usuwanego obramowania, aby uniknąć białych obramowań na wyjściu (domyślnie: 1). ScannerImageSplit.selectText.10=Ustawia rozmiar dodawanego i usuwanego obramowania, aby uniknąć białych obramowań na wyjściu (domyślnie: 1).
navbar.settings=Ustawienia
settings.title=Ustawienia
settings.update=Dostępna aktualizacja
settings.appVersion=Wersia aplikacji:
settings.downloadOption.title=Wybierz opcję pobierania (w przypadku pobierania pojedynczych plików innych niż ZIP):
settings.downloadOption.1=Otwórz w tym samym oknie
settings.downloadOption.2=Otwórz w nowym oknie
settings.downloadOption.3=Pobierz plik
settings.zipThreshold=Spakuj pliki, gdy liczba pobranych plików przekroczy
#OCR #OCR
ocr.title=OCR / Zamiana na tekst ocr.title=OCR / Zamiana na tekst
@@ -223,16 +543,16 @@ ocr.credit=Ta usługa używa OCRmyPDF i Tesseract do OCR.
ocr.submit=Przetwarzaj PDF za pomocą OCR ocr.submit=Przetwarzaj PDF za pomocą OCR
#extractImages
extractImages.title=Wyodrębnij obrazy extractImages.title=Wyodrębnij obrazy
extractImages.header=Wyodrębnij obrazy extractImages.header=Wyodrębnij obrazy
extractImages.selectText=Wybierz format obrazu, aby je przekonwertować extractImages.selectText=Wybierz format obrazu, na który chcesz przekonwertować wyodrębniony obraz.
extractImages.submit=Wyodrębnij extractImages.submit=Wyodrębnij
#File to PDF #File to PDF
fileToPDF.title=Plik na PDF fileToPDF.title=Plik na PDF
fileToPDF.header=Konwertuj kady plik na dokument PDF fileToPDF.header=Konwertuj dowolny plik na dokument PDF
fileToPDF.credit=Ta usługa używa LibreOffice i Unoconv do konwersji plików. fileToPDF.credit=Ta usługa używa LibreOffice i Unoconv do konwersji plików.
fileToPDF.supportedFileTypes=Obsługiwane typy plików powinny być zgodne z poniższymi, jednak pełną zaktualizowaną listę obsługiwanych formatów można znaleźć w dokumentacji LibreOffice fileToPDF.supportedFileTypes=Obsługiwane typy plików powinny być zgodne z poniższymi, jednak pełną zaktualizowaną listę obsługiwanych formatów można znaleźć w dokumentacji LibreOffice
fileToPDF.submit=Konwertuj na PDF fileToPDF.submit=Konwertuj na PDF
@@ -249,10 +569,12 @@ compress.selectText.4=Tryb automatyczny - Automatycznie dostosowuje jakość, ab
compress.selectText.5=Oczekiwany rozmiar pliku PDF (np. 25 MB, 10,8 MB, 25 KB) compress.selectText.5=Oczekiwany rozmiar pliku PDF (np. 25 MB, 10,8 MB, 25 KB)
compress.submit=Kompresuj compress.submit=Kompresuj
#Add image #Add image
addImage.title=Dodaj obraz addImage.title=Dodaj obraz
addImage.header=Dodaj obraz do PDF addImage.header=Dodaj obraz do PDF
addImage.everyPage=Każda strona? addImage.everyPage=Każda strona?
addImage.upload=Dodaj obraz
addImage.submit=Dodaj obraz addImage.submit=Dodaj obraz
@@ -261,11 +583,13 @@ merge.title=Połącz
merge.header=Połącz wiele dokumentów PDF (2+) merge.header=Połącz wiele dokumentów PDF (2+)
merge.submit=Połącz merge.submit=Połącz
#pdfOrganiser #pdfOrganiser
pdfOrganiser.title=Kolejność stron pdfOrganiser.title=Kolejność stron
pdfOrganiser.header=Kolejność stron PDF pdfOrganiser.header=Kolejność stron PDF
pdfOrganiser.submit=Zmień kolejność stron pdfOrganiser.submit=Zmień kolejność stron
#multiTool #multiTool
multiTool.title=Multi narzędzie PDF multiTool.title=Multi narzędzie PDF
multiTool.header=Multi narzędzie PDF multiTool.header=Multi narzędzie PDF
@@ -277,6 +601,7 @@ pageRemover.header=Narzędzie do usuwania stron w dokumentach PDF
pageRemover.pagesToDelete=Strony do usunięcia (wprowadź listę numerów stron oddzielonych przecinkami): pageRemover.pagesToDelete=Strony do usunięcia (wprowadź listę numerów stron oddzielonych przecinkami):
pageRemover.submit=Usuń strony pageRemover.submit=Usuń strony
#rotate #rotate
rotate.title=Obróć dokument PDF rotate.title=Obróć dokument PDF
rotate.header=Obróć dokument PDF rotate.header=Obróć dokument PDF
@@ -284,8 +609,6 @@ rotate.selectAngle=Wybierz kąt obrotu (domyślnie 90 stopni):
rotate.submit=Obróć rotate.submit=Obróć
#merge #merge
split.title=Podziel dokument PDF split.title=Podziel dokument PDF
split.header=Podziel dokument PDF split.header=Podziel dokument PDF
@@ -311,6 +634,7 @@ imageToPDF.selectText.3=Logika wielu plików (dostępna tylko w przypadku pracy
imageToPDF.selectText.4=Połącz w jeden dokument PDF imageToPDF.selectText.4=Połącz w jeden dokument PDF
imageToPDF.selectText.5=Konwertuj na osobne dokumenty PDF imageToPDF.selectText.5=Konwertuj na osobne dokumenty PDF
#pdfToImage #pdfToImage
pdfToImage.title=PDF na Obraz pdfToImage.title=PDF na Obraz
pdfToImage.header=PDF na Obraz pdfToImage.header=PDF na Obraz
@@ -324,6 +648,7 @@ pdfToImage.grey=Odcień szarości
pdfToImage.blackwhite=Czarno-biały (może spowodować utratę danych!) pdfToImage.blackwhite=Czarno-biały (może spowodować utratę danych!)
pdfToImage.submit=Konwertuj pdfToImage.submit=Konwertuj
#addPassword #addPassword
addPassword.title=Dodaj hasło addPassword.title=Dodaj hasło
addPassword.header=Dodaj hasło (zaszyfruj) addPassword.header=Dodaj hasło (zaszyfruj)
@@ -340,8 +665,12 @@ addPassword.selectText.10=Zablokuj modyfikacje
addPassword.selectText.11=Zablokuj modyfikacje adnotacji addPassword.selectText.11=Zablokuj modyfikacje adnotacji
addPassword.selectText.12=Zablokuj drukowanie addPassword.selectText.12=Zablokuj drukowanie
addPassword.selectText.13=Zablokuj drukowanie różnych formatów addPassword.selectText.13=Zablokuj drukowanie różnych formatów
addPassword.selectText.14=Owner Password
addPassword.selectText.15=Restricts what can be done with the document once it is opened (Not supported by all readers)
addPassword.selectText.16=Restricts the opening of the document itself
addPassword.submit=Zablokuj addPassword.submit=Zablokuj
#watermark #watermark
watermark.title=Dodaj znak wodny watermark.title=Dodaj znak wodny
watermark.header=Dodaj znak wodny watermark.header=Dodaj znak wodny
@@ -349,11 +678,12 @@ watermark.selectText.1=Wybierz dokument PDF, do którego chcesz dodać znak wodn
watermark.selectText.2=Treść znaku wodnego: watermark.selectText.2=Treść znaku wodnego:
watermark.selectText.3=Rozmiar czcionki: watermark.selectText.3=Rozmiar czcionki:
watermark.selectText.4=Obrót (0-360): watermark.selectText.4=Obrót (0-360):
watermark.selectText.5=odstępy poziomo (odstęp między każdym znakiem wodnym w poziomie): watermark.selectText.5=Odstęp w poziomie (odstęp między każdym znakiem wodnym w poziomie):
watermark.selectText.6=odstępy pionowo (odstęp między każdym znakiem wodnym w pionie): watermark.selectText.6=Odstęp w pionie (odstęp między każdym znakiem wodnym w pionie):
watermark.selectText.7=Nieprzezroczystość (0% - 100%): watermark.selectText.7=Nieprzezroczystość (0% - 100%):
watermark.submit=Dodaj znak wodny watermark.submit=Dodaj znak wodny
#remove-watermark #remove-watermark
remove-watermark.title=Usuń znak wodny remove-watermark.title=Usuń znak wodny
remove-watermark.header=Usuń znak wodny remove-watermark.header=Usuń znak wodny
@@ -361,6 +691,7 @@ remove-watermark.selectText.1=Wybierz dokument PDF, aby usunąć znak wodny z:
remove-watermark.selectText.2=Treść zanku wodnego: remove-watermark.selectText.2=Treść zanku wodnego:
remove-watermark.submit=Usuń znak wodny remove-watermark.submit=Usuń znak wodny
#Change permissions #Change permissions
permissions.title=Zmień uprawnienia permissions.title=Zmień uprawnienia
permissions.header=Zmień uprawnienia permissions.header=Zmień uprawnienia
@@ -377,6 +708,7 @@ permissions.selectText.9=Zablokuj drukowanie
permissions.selectText.10=Zablokuj drukowanie różnych formatów permissions.selectText.10=Zablokuj drukowanie różnych formatów
permissions.submit=Zmień permissions.submit=Zmień
#remove password #remove password
removePassword.title=Usuń hasło removePassword.title=Usuń hasło
removePassword.header=Usuń hasło (odszyfruj) removePassword.header=Usuń hasło (odszyfruj)
@@ -384,45 +716,50 @@ removePassword.selectText.1=Wybierz dokument PDF do odszyfrowania
removePassword.selectText.2=Hasło removePassword.selectText.2=Hasło
removePassword.submit=Usuń removePassword.submit=Usuń
changeMetadata.title=Zmień metadane
#changeMetadata
changeMetadata.title=Tytuł:
changeMetadata.header=Zmień metadane changeMetadata.header=Zmień metadane
changeMetadata.selectText.1=Edytuj zmienne, które chcesz zmienić changeMetadata.selectText.1=Edytuj zmienne, które chcesz zmienić
changeMetadata.selectText.2=Usuń wszystkie metadane changeMetadata.selectText.2=Usuń wszystkie metadane
changeMetadata.selectText.3=Pokaż niestandardowe metadane: changeMetadata.selectText.3=Pokaż niestandardowe metadane:
changeMetadata.author=Autor: changeMetadata.author=Autor:
changeMetadata.creationDate=Data utworzenia (dd/MM/yyyy HH:mm:ss): changeMetadata.creationDate=Data utworzenia (yyyy/MM/dd HH:mm:ss):
changeMetadata.creator=Twórca: changeMetadata.creator=Twórca:
changeMetadata.keywords=Słowa kluczowe: changeMetadata.keywords=Słowa kluczowe:
changeMetadata.modDate=Data modyfikacji (dd/MM/yyyy HH:mm:ss): changeMetadata.modDate=Data modyfikacji (yyyy/MM/dd HH:mm:ss):
changeMetadata.producer=Producent: changeMetadata.producer=Producent:
changeMetadata.subject=Temat: changeMetadata.subject=Temat:
changeMetadata.title=Tytuł: changeMetadata.title=Tytuł:
changeMetadata.trapped=Uwięziony: changeMetadata.trapped=Zablokowany:
changeMetadata.selectText.4=Inne metadane: changeMetadata.selectText.4=Inne metadane:
changeMetadata.selectText.5=Dodaj niestandardowy wpis w metadanych changeMetadata.selectText.5=Dodaj niestandardowy wpis w metadanych
changeMetadata.submit=Zmień changeMetadata.submit=Zmień
#xlsToPdf
xlsToPdf.title=Excel na PDF xlsToPdf.title=Excel na PDF
xlsToPdf.header=Excel na PDF xlsToPdf.header=Excel na PDF
xlsToPdf.selectText.1=Wybierz arkusz Microsoft Excel XLS lub XLSX do konwersji xlsToPdf.selectText.1=Wybierz arkusz Microsoft Excel XLS lub XLSX do konwersji
xlsToPdf.convert=Konwertuj xlsToPdf.convert=Konwertuj
#pdfToPDFA
pdfToPDFA.title=PDF na PDF/A pdfToPDFA.title=PDF na PDF/A
pdfToPDFA.header=PDF na PDF/A pdfToPDFA.header=PDF na PDF/A
pdfToPDFA.credit=Ta usługa używa OCRmyPDF do konwersji PDF/A pdfToPDFA.credit=Ta usługa używa OCRmyPDF do konwersji PDF/A
pdfToPDFA.submit=Konwertuj pdfToPDFA.submit=Konwertuj
#PDFToWord
PDFToWord.title=PDF na Word PDFToWord.title=PDF na Word
PDFToWord.header=PDF na Word PDFToWord.header=PDF na Word
PDFToWord.selectText.1=Format pliku wyjściowego PDFToWord.selectText.1=Format pliku wyjściowego
PDFToWord.credit=Ta usługa używa LibreOffice do konwersji plików. PDFToWord.credit=Ta usługa używa LibreOffice do konwersji plików.
PDFToWord.submit=Konwertuj PDFToWord.submit=Konwertuj
#PDFToPresentation
PDFToPresentation.title=PDF na Prezentację PDFToPresentation.title=PDF na Prezentację
PDFToPresentation.header=PDF na Prezentację PDFToPresentation.header=PDF na Prezentację
PDFToPresentation.selectText.1=Format pliku wyjściowego PDFToPresentation.selectText.1=Format pliku wyjściowego
@@ -430,6 +767,7 @@ PDFToPresentation.credit=Ta usługa używa LibreOffice do konwersji plików.
PDFToPresentation.submit=Konwertuj PDFToPresentation.submit=Konwertuj
#PDFToText
PDFToText.title=PDF na Tekst/RTF PDFToText.title=PDF na Tekst/RTF
PDFToText.header=PDF na Tekst/RTF PDFToText.header=PDF na Tekst/RTF
PDFToText.selectText.1=Format pliku wyjściowego PDFToText.selectText.1=Format pliku wyjściowego
@@ -437,11 +775,14 @@ PDFToText.credit=Ta usługa używa LibreOffice do konwersji plików.
PDFToText.submit=Konwertuj PDFToText.submit=Konwertuj
#PDFToHTML
PDFToHTML.title=PDF na HTML PDFToHTML.title=PDF na HTML
PDFToHTML.header=PDF na HTML PDFToHTML.header=PDF na HTML
PDFToHTML.credit=Ta usługa używa LibreOffice do konwersji plików. PDFToHTML.credit=Ta usługa używa LibreOffice do konwersji plików.
PDFToHTML.submit=Konwertuj PDFToHTML.submit=Konwertuj
#PDFToXML
PDFToXML.title=PDF na XML PDFToXML.title=PDF na XML
PDFToXML.header=PDF na XML PDFToXML.header=PDF na XML
PDFToXML.credit=Ta usługa używa LibreOffice do konwersji plików. PDFToXML.credit=Ta usługa używa LibreOffice do konwersji plików.

View File

@@ -0,0 +1,789 @@
###########
# Generic #
###########
# the direction that the language is written (ltr=left to right, rtl = right to left)
language.direction=ltr
pdfPrompt=Selecione PDF(s)
multiPdfPrompt=Selecione PDFs (2+)
multiPdfDropPrompt=Selecione (ou arraste e solte) todos os PDFs necessários
imgPrompt=Selecione a(s) imagem(ns)
genericSubmit=Enviar
processTimeWarning=Aviso: esse processo pode levar até um minuto, dependendo do tamanho do arquivo
pageOrderPrompt=Ordem das páginas (digite uma lista separada por vírgulas de números de página):
goToPage=Ir
true=Verdadeiro
false=Falso
unknown=Desconhecido
save=Salvar
close=Fechar
filesSelected=arquivos selecionados
noFavourites=Nenhum favorito adicionado
bored=Entediado esperando?
alphabet=Alfabeto
downloadPdf=baixar PDF
text=Texto
font=Fonte
selectFillter=-- Selecione --
pageNum=Número de página
sizes.small=Small
sizes.medium=Medium
sizes.large=Large
sizes.x-large=X-Large
error.pdfPassword=The PDF Document is passworded and either the password was not provided or was incorrect
#############
# NAVBAR #
#############
navbar.convert=Converter
navbar.security=Segurança
navbar.other=Outro
navbar.darkmode=Modo Escuro
navbar.pageOps=Operações de página
navbar.settings=Configurações
#############
# SETTINGS #
#############
settings.title=Configurações
settings.update=Atualização disponível
settings.appVersion=Versão do aplicativo:
settings.downloadOption.title=Escolha a opção de download (para downloads não compactados de arquivo único):
settings.downloadOption.1=Abrir na mesma janela
settings.downloadOption.2=Abrir em nova janela
settings.downloadOption.3=⇬ Fazer download do arquivo
settings.zipThreshold=Compactar arquivos quando o número de arquivos baixados exceder
#############
# HOME-PAGE #
#############
home.desc=Seu melhor utilitário para as necessidades de PDF.
home.multiTool.title=Multiferramenta de PDF
home.multiTool.desc=Mesclar, girar, reorganizar e remover páginas
multiTool.tags=Multi Tool,Multi operation,UI,click drag,front end,client side
home.merge.title=mesclar
home.merge.desc=Mescle facilmente vários PDFs em um.
merge.tags=merge,Page operations,Back end,server side
home.split.title=Dividir
home.split.desc=Dividir PDFs em vários documentos
##########################
### TODO: Translate ###
##########################
split.tags=Page operations,divide,Multi Page,cut,server side
home.rotate.title=Girar
home.rotate.desc=Gire facilmente seus PDFs.
##########################
### TODO: Translate ###
##########################
rotate.tags=server side
home.imageToPdf.title=Imagem para PDF
home.imageToPdf.desc=Converta uma imagem (PNG, JPEG, GIF) em PDF.
##########################
### TODO: Translate ###
##########################
imageToPdf.tags=conversion,img,jpg,picture,photo
home.pdfToImage.title=PDF para imagem
home.pdfToImage.desc=Converta um PDF em uma imagem. (PNG, JPG, GIF)
##########################
### TODO: Translate ###
##########################
pdfToImage.tags=conversion,img,jpg,picture,photo
home.pdfOrganiser.title=Organizar
home.pdfOrganiser.desc=Remova/reorganize as páginas em qualquer ordem
##########################
### TODO: Translate ###
##########################
pdfOrganiser.tags=duplex,even,odd,sort,move
home.addImage.title=Adicionar imagem
home.addImage.desc=Adiciona uma imagem em um local definido no PDF (trabalho em andamento)
##########################
### TODO: Translate ###
##########################
addImage.tags=img,jpg,picture,photo
home.watermark.title=Adicione uma Marca d'água
home.watermark.desc=Adicione uma marca d'água personalizada ao seu documento PDF.
##########################
### TODO: Translate ###
##########################
watermark.tags=Text,repeating,label,own,copyright,trademark,img,jpg,picture,photo
home.permissions.title=Alterar permissões
home.permissions.desc=Altere as permissões do seu documento PDF
##########################
### TODO: Translate ###
##########################
permissions.tags=read,write,edit,print
home.removePages.title=Remover
home.removePages.desc=Exclua as páginas indesejadas do seu documento PDF.
##########################
### TODO: Translate ###
##########################
removePages.tags=Remove pages,delete pages
home.addPassword.title=Adicionar senha
home.addPassword.desc=Criptografe seu documento PDF com uma senha.
##########################
### TODO: Translate ###
##########################
addPassword.tags=secure,security
home.removePassword.title=Remover senha
home.removePassword.desc=Remova a proteção por senha do seu documento PDF.
##########################
### TODO: Translate ###
##########################
removePassword.tags=secure,Decrypt,security,unpassword,delete password
home.compressPdfs.title=Comprimir
home.compressPdfs.desc=Comprima PDFs para reduzir o tamanho do arquivo.
##########################
### TODO: Translate ###
##########################
compressPdfs.tags=squish,small,tiny
home.changeMetadata.title=Alterar metadados
home.changeMetadata.desc=Alterar/remover/adicionar metadados de um documento PDF
##########################
### TODO: Translate ###
##########################
changeMetadata.tags==Title,author,date,creation,time,publisher,producer,stats
home.fileToPDF.title=Converter arquivo para PDF
home.fileToPDF.desc=Converta praticamente qualquer arquivo em PDF (DOCX, PNG, XLS, PPT, TXT e mais)
##########################
### TODO: Translate ###
##########################
fileToPDF.tags=transformation,format,document,picture,slide,text,conversion,office,docs,word,excel,powerpoint
home.ocr.title=OCR / Varreduras de limpeza
home.ocr.desc=A limpeza verifica e detecta texto de imagens em um PDF e o adiciona novamente como texto.
##########################
### TODO: Translate ###
##########################
ocr.tags=recognition,text,image,scan,read,identify,detection,editable
home.extractImages.title=Extrair imagens
home.extractImages.desc=Extrai todas as imagens de um PDF e as salva em zip
##########################
### TODO: Translate ###
##########################
extractImages.tags=picture,photo,save,archive,zip,capture,grab
home.pdfToPDFA.title=PDF para PDF/A
home.pdfToPDFA.desc=Converta PDF para PDF/A para armazenamento de longo prazo
##########################
### TODO: Translate ###
##########################
pdfToPDFA.tags=archive,long-term,standard,conversion,storage,preservation
home.PDFToWord.title=PDF para Word
home.PDFToWord.desc=Converter PDF para formatos Word (DOC, DOCX e ODT)
##########################
### TODO: Translate ###
##########################
PDFToWord.tags=doc,docx,odt,word,transformation,format,conversion,office,microsoft,docfile
home.PDFToPresentation.title=PDF para apresentação
home.PDFToPresentation.desc=Converter PDF para formatos de apresentação (PPT, PPTX e ODP)
##########################
### TODO: Translate ###
##########################
PDFToPresentation.tags=slides,show,office,microsoft
home.PDFToText.title=PDF para Texto/RTF
home.PDFToText.desc=Converter PDF em formato de texto ou RTF
##########################
### TODO: Translate ###
##########################
PDFToText.tags=richformat,richtextformat,rich text format
home.PDFToHTML.title=PDF para HTML
home.PDFToHTML.desc=Converter PDF para o formato HTML
##########################
### TODO: Translate ###
##########################
PDFToHTML.tags=web content,browser friendly
home.PDFToXML.title=PDF para XML
home.PDFToXML.desc=Converter PDF para o formato XML
##########################
### TODO: Translate ###
##########################
PDFToXML.tags=data-extraction,structured-content,interop,transformation,convert
home.ScannerImageSplit.title=Detectar/dividir fotos digitalizadas
home.ScannerImageSplit.desc=Divide várias fotos de dentro de uma foto/PDF
##########################
### TODO: Translate ###
##########################
ScannerImageSplit.tags=separate,auto-detect,scans,multi-photo,organize
home.sign.title=Sinal
home.sign.desc=Adiciona assinatura ao PDF por desenho, texto ou imagem
##########################
### TODO: Translate ###
##########################
sign.tags=authorize,initials,drawn-signature,text-sign,image-signature
home.flatten.title=achatar
home.flatten.desc=Remova todos os elementos e formulários interativos de um PDF
##########################
### TODO: Translate ###
##########################
flatten.tags=static,deactivate,non-interactive,streamline
home.repair.title=Reparar
home.repair.desc=Tenta reparar um PDF corrompido/quebrado
##########################
### TODO: Translate ###
##########################
repair.tags=fix,restore,correction,recover
home.removeBlanks.title=Remover páginas em branco
home.removeBlanks.desc=Detecta e remove páginas em branco de um documento
##########################
### TODO: Translate ###
##########################
removeBlanks.tags=cleanup,streamline,non-content,organize
home.compare.title=Comparar
home.compare.desc=Compara e mostra as diferenças entre 2 documentos PDF
##########################
### TODO: Translate ###
##########################
compare.tags=differentiate,contrast,changes,analysis
home.certSign.title=Assinar com certificado
home.certSign.desc=Assina um PDF com um Certificado/Chave (PEM/P12)
##########################
### TODO: Translate ###
##########################
certSign.tags=authenticate,PEM,P12,official,encrypt
home.pageLayout.title=Multi-Page Layout
home.pageLayout.desc=Merge multiple pages of a PDF document into a single page
##########################
### TODO: Translate ###
##########################
pageLayout.tags=merge,composite,single-view,organize
home.scalePages.title=Adjust page size/scale
home.scalePages.desc=Change the size/scale of page and/or its contents.
##########################
### TODO: Translate ###
##########################
scalePages.tags=resize,modify,dimension,adapt
home.pipeline.title=Pipeline (Advanced)
home.pipeline.desc=Run multiple actions on PDFs by defining pipeline scripts
##########################
### TODO: Translate ###
##########################
pipeline.tags=automate,sequence,scripted,batch-process
home.add-page-numbers.title=Add Page Numbers
home.add-page-numbers.desc=Add Page numbers throughout a document in a set location
##########################
### TODO: Translate ###
##########################
add-page-numbers.tags=paginate,label,organize,index
home.auto-rename.title=Auto Rename PDF File
home.auto-rename.desc=Auto renames a PDF file based on its detected header
##########################
### TODO: Translate ###
##########################
auto-rename.tags=auto-detect,header-based,organize,relabel
home.adjust-contrast.title=Adjust Colors/Contrast
home.adjust-contrast.desc=Adjust Contrast, Saturation and Brightness of a PDF
##########################
### TODO: Translate ###
##########################
adjust-contrast.tags=color-correction,tune,modify,enhance
home.crop.title=Crop PDF
home.crop.desc=Crop a PDF to reduce its size (maintains text!)
##########################
### TODO: Translate ###
##########################
crop.tags=trim,shrink,edit,shape
home.autoSplitPDF.title=Auto Split Pages
home.autoSplitPDF.desc=Auto Split Scanned PDF with physical scanned page splitter QR Code
##########################
### TODO: Translate ###
##########################
autoSplitPDF.tags=QR-based,separate,scan-segment,organize
home.sanitizePdf.title=Sanitize
home.sanitizePdf.desc=Remove scripts and other elements from PDF files
##########################
### TODO: Translate ###
##########################
sanitizePdf.tags=clean,secure,safe,remove-threats
##########################
### TODO: Translate ###
##########################
home.URLToPDF.title=URL/Website To PDF
home.URLToPDF.desc=Converts any http(s)URL to PDF
URLToPDF.tags=web-capture,save-page,web-to-doc,archive
##########################
### TODO: Translate ###
##########################
home.HTMLToPDF.title=HTML to PDF
home.HTMLToPDF.desc=Converts any HTML file or zip to PDF
HTMLToPDF.tags=markup,web-content,transformation,convert
###########################
# #
# WEB PAGES #
# #
###########################
#url-to-pdf
URLToPDF.title=URL To PDF
URLToPDF.header=URL To PDF
URLToPDF.submit=Convert
URLToPDF.credit=Uses WeasyPrint
#html-to-pdf
HTMLToPDF.title=HTML To PDF
HTMLToPDF.header=HTML To PDF
HTMLToPDF.help=Accepts HTML files and ZIPs containing html/css/images etc required
HTMLToPDF.submit=Convert
HTMLToPDF.credit=Uses WeasyPrint
#sanitizePDF
sanitizePDF.title=Sanitize PDF
sanitizePDF.header=Sanitize a PDF file
sanitizePDF.selectText.1=Remove JavaScript actions
sanitizePDF.selectText.2=Remove embedded files
sanitizePDF.selectText.3=Remove metadata
sanitizePDF.selectText.4=Remove links
sanitizePDF.selectText.5=Remove fonts
sanitizePDF.submit=Sanitize PDF
#addPageNumbers
addPageNumbers.title=Add Page Numbers
addPageNumbers.header=Add Page Numbers
addPageNumbers.selectText.1=Select PDF file:
addPageNumbers.selectText.2=Margin Size
addPageNumbers.selectText.3=Position
addPageNumbers.selectText.4=Starting Number
addPageNumbers.selectText.5=Pages to Number
addPageNumbers.selectText.6=Custom Text
addPageNumbers.submit=Add Page Numbers
#auto-rename
auto-rename.title=Auto Rename
auto-rename.header=Auto Rename PDF
auto-rename.submit=Auto Rename
#adjustContrast
adjustContrast.title=Adjust Contrast
adjustContrast.header=Adjust Contrast
adjustContrast.contrast=Contrast:
adjustContrast.brightness=Brightness:
adjustContrast.saturation=Saturation:
adjustContrast.download=Download
#crop
crop.title=Crop
crop.header=Crop Image
crop.submit=Submit
#autoSplitPDF
autoSplitPDF.title=Auto Split PDF
autoSplitPDF.header=Auto Split PDF
autoSplitPDF.description=Print, Insert, Scan, upload, and let us auto-separate your documents. No manual work sorting needed.
autoSplitPDF.selectText.1=Print out some divider sheets from below (Black and white is fine).
autoSplitPDF.selectText.2=Scan all your documents at once by inserting the divider sheet between them.
autoSplitPDF.selectText.3=Upload the single large scanned PDF file and let Stirling PDF handle the rest.
autoSplitPDF.selectText.4=Divider pages are automatically detected and removed, guaranteeing a neat final document.
autoSplitPDF.formPrompt=Submit PDF containing Stirling-PDF Page dividers:
autoSplitPDF.duplexMode=Duplex Mode (Front and back scanning)
autoSplitPDF.dividerDownload1=Download 'Auto Splitter Divider (minimal).pdf'
autoSplitPDF.dividerDownload2=Download 'Auto Splitter Divider (with instructions).pdf'
autoSplitPDF.submit=Submit
#pipeline
pipeline.title=Pipeline
#pageLayout
pageLayout.title=Multi Page Layout
pageLayout.header=Multi Page Layout
pageLayout.pagesPerSheet=Pages per sheet:
pageLayout.submit=Submit
#scalePages
scalePages.title=Adjust page-scale
scalePages.header=Adjust page-scale
scalePages.pageSize=Size of a page of the document.
scalePages.scaleFactor=Zoom level (crop) of a page.
scalePages.submit=Submit
#certSign
certSign.title=Assinatura de certificado
certSign.header=Assine um PDF com seu certificado (Trabalho em andamento)
certSign.selectPDF=Selecione um arquivo PDF para assinatura:
certSign.selectKey=Selecione seu arquivo de chave privada (formato PKCS#8, pode ser .pem ou .der):
certSign.selectCert=Selecione seu arquivo de certificado (formato X.509, pode ser .pem ou .der):
certSign.selectP12=Selecione seu arquivo de armazenamento de chave PKCS#12 (.p12 ou .pfx) (opcional, se fornecido, deve conter sua chave privada e certificado):
certSign.certType=tipo de certificado
certSign.password=Digite seu armazenamento de chave ou senha de chave privada (se houver):
certSign.showSig=Mostrar assinatura
certSign.reason=Razão
certSign.location=Localização
certSign.name=Nome
certSign.submit=Assinar PDF
#removeBlanks
removeBlanks.title=Remover espaços em branco
removeBlanks.header=Remover páginas em branco
removeBlanks.threshold=Limite:
removeBlanks.thresholdDesc=Limiar para determinar quão branco um pixel branco deve ser
removeBlanks.whitePercent=Porcentagem branca (%):
removeBlanks.whitePercentDesc=Porcentagem da página que deve ser branca para ser removida
removeBlanks.submit=Remover espaços em branco
#compare
compare.title=Comparar
compare.header=Comparar PDFs
compare.document.1=Documento 1
compare.document.2=Documento 2
compare.submit=Comparar
#sign
sign.title=Sinal
sign.header=Assinar PDFs
sign.upload=Enviar Imagem
sign.draw=Desenhar Assinatura
sign.text=Entrada de texto
sign.clear=Claro
sign.add=Adicionar
#repair
repair.title=Reparar
repair.header=Reparar PDFs
repair.submit=Reparar
#flatten
flatten.title=achatar
flatten.header=Achatar PDFs
flatten.submit=achatar
#ScannerImageSplit
ScannerImageSplit.selectText.1=Limite de Ângulo:
ScannerImageSplit.selectText.2=Define o ângulo absoluto mínimo necessário para que a imagem seja girada (padrão: 10).
ScannerImageSplit.selectText.3=Tolerância:
ScannerImageSplit.selectText.4=Determina o intervalo de variação de cor em torno da cor de fundo estimada (padrão: 30).
ScannerImageSplit.selectText.5=Área Mínima:
ScannerImageSplit.selectText.6=Define o limite mínimo de área para uma foto (padrão: 10000).
ScannerImageSplit.selectText.7=Área mínima de contorno:
ScannerImageSplit.selectText.8=Define o limite mínimo da área de contorno para uma foto
ScannerImageSplit.selectText.9=Tamanho da Borda:
ScannerImageSplit.selectText.10=Define o tamanho da borda adicionada e removida para evitar bordas brancas na saída (padrão: 1).
#OCR
ocr.title=OCR / Limpeza de digitalização
ocr.header=Varreduras de limpeza / OCR (reconhecimento óptico de caracteres)
ocr.selectText.1=Selecione os idiomas que devem ser detectados no PDF (os listados são os atualmente detectados):
ocr.selectText.2=Produzir arquivo de texto contendo texto OCR ao lado do PDF com OCR
ocr.selectText.3=As páginas corretas foram digitalizadas em um ângulo inclinado girando-as de volta ao lugar
ocr.selectText.4=Limpe a página para que seja menos provável que o OCR encontre o texto no ruído de fundo. (Sem mudança de saída)
ocr.selectText.5=Limpe a página para que seja menos provável que o OCR encontre texto no ruído de fundo, mantendo a limpeza na saída.
ocr.selectText.6=Ignora as páginas que contêm texto interativo, apenas as páginas de OCR que são imagens
ocr.selectText.7=Forçar OCR, irá OCR Todas as páginas removendo todos os elementos de texto originais
ocr.selectText.8=Normal (será um erro se o PDF contiver texto)
ocr.selectText.9=Configurações adicionais
ocr.selectText.10=Modo OCR
ocr.selectText.11=Remova as imagens após o OCR (remove TODAS as imagens, útil apenas se fizer parte da etapa de conversão)
ocr.selectText.12=Tipo de renderização (avançado)
ocr.help=Por favor, leia esta documentação sobre como usar isso para outros idiomas e/ou não usar no docker
ocr.credit=Este serviço usa OCRmyPDF e Tesseract para OCR.
ocr.submit=Processar PDF com OCR
#extractImages
extractImages.title=Extrair Imagens
extractImages.header=Extrair Imagens
extractImages.selectText=Selecione o formato de imagem para converter as imagens extraídas em
extractImages.submit=Extrair
#File to PDF
fileToPDF.title=Arquivo para PDF
fileToPDF.header=Converta qualquer arquivo para PDF
fileToPDF.credit=Este serviço usa LibreOffice e Unoconv para conversão de arquivos.
fileToPDF.supportedFileTypes=Os tipos de arquivo suportados devem incluir o abaixo, no entanto, para obter uma lista atualizada completa de formatos suportados, consulte a documentação do LibreOffice
fileToPDF.submit=Converter para PDF
#compress
compress.title=Comprimir
compress.header=Comprimir PDF
compress.credit=Este serviço usa o Ghostscript para compressão/otimização de PDF.
compress.selectText.1=Modo Manual - De 1 a 4
compress.selectText.2=Nível de otimização:
compress.selectText.3=4 (Péssimo para imagens de texto)
compress.selectText.4=Modo automático - Auto ajusta a qualidade para obter o tamanho exato do PDF
compress.selectText.5=Tamanho esperado do PDF (por exemplo, 25 MB, 10,8 MB, 25 KB)
compress.submit=Comprimir
#Add image
addImage.title=Adicionar imagem
addImage.header=Adicionar imagem ao PDF
addImage.everyPage=Cada página?
addImage.upload=Adicionar imagem
addImage.submit=Adicionar imagem
#merge
merge.title=mesclar
merge.header=Mesclar vários PDFs (2+)
merge.submit=mesclar
#pdfOrganiser
pdfOrganiser.title=Organizador de página
pdfOrganiser.header=Organizador de páginas PDF
pdfOrganiser.submit=Reorganizar páginas
#multiTool
multiTool.title=Multiferramenta de PDF
multiTool.header=Multiferramenta de PDF
#pageRemover
pageRemover.title=Removedor de página
pageRemover.header=Removedor de página PDF
pageRemover.pagesToDelete=Páginas a serem excluídas (digite uma lista separada por vírgulas de números de página):
pageRemover.submit=Excluir páginas
#rotate
rotate.title=Girar PDF
rotate.header=Girar PDF
rotate.selectAngle=Selecione o ângulo de rotação (em múltiplos de 90 graus):
rotate.submit=Girar
#merge
split.title=PDF dividido
split.header=PDF dividido
split.desc.1=Os números que você selecionar são o número da página na qual você deseja fazer uma divisão
split.desc.2=Assim, selecionar 1,3,7-8 dividiria um documento de 10 páginas em 6 PDFS separados com:
split.desc.3=Documento nº 1: página 1
split.desc.4=Documento nº 2: páginas 2 e 3
split.desc.5=Documento nº 3: Página 4, 5 e 6
split.desc.6=Documento nº 4: página 7
split.desc.7=Documento nº 5: página 8
split.desc.8=Documento nº 6: páginas 9 e 10
split.splitPages=Digite as páginas para dividir:
split.submit=Dividir
#merge
imageToPDF.title=Imagem para PDF
imageToPDF.header=Imagem para PDF
imageToPDF.submit=Converter
imageToPDF.selectText.1=Esticar para caber
imageToPDF.selectText.2=Girar PDF automaticamente
imageToPDF.selectText.3=Lógica de vários arquivos (Ativado apenas se estiver trabalhando com várias imagens)
imageToPDF.selectText.4=Mesclar em um único PDF
imageToPDF.selectText.5=Converter em PDFs separados
#pdfToImage
pdfToImage.title=PDF para imagem
pdfToImage.header=PDF para imagem
pdfToImage.selectText=Formato de imagem
pdfToImage.singleOrMultiple=Tipo de resultado de imagem
pdfToImage.single=Imagem grande única
pdfToImage.multi=Imagens múltiplas
pdfToImage.colorType=tipo de cor
pdfToImage.color=Cor
pdfToImage.grey=Escala de cinza
pdfToImage.blackwhite=Preto e branco (pode perder dados!)
pdfToImage.submit=Converter
#addPassword
addPassword.title=Adicionar senha
addPassword.header=Adicionar senha (Criptografar)
addPassword.selectText.1=Selecione PDF para criptografar
addPassword.selectText.2=Senha
addPassword.selectText.3=Comprimento da chave de criptografia
addPassword.selectText.4=Valores mais altos são mais fortes, mas valores mais baixos têm melhor compatibilidade.
addPassword.selectText.5=Permissões para definir
addPassword.selectText.6=Impedir a montagem do documento
addPassword.selectText.7=Impedir a extração de conteúdo
addPassword.selectText.8=Impedir a extração para acessibilidade
addPassword.selectText.9=Impedir o preenchimento do formulário
addPassword.selectText.10=Impedir modificação
addPassword.selectText.11=Impedir a modificação da anotação
addPassword.selectText.12=Impedir a impressão
addPassword.selectText.13=Impedir a impressão de formatos diferentes
addPassword.selectText.14=Owner Password
addPassword.selectText.15=Restricts what can be done with the document once it is opened (Not supported by all readers)
addPassword.selectText.16=Restricts the opening of the document itself
addPassword.submit=criptografar
#watermark
watermark.title=Adicione uma Marca d'água
watermark.header=Adicione uma Marca d'água
watermark.selectText.1=Selecione PDF para adicionar marca d'água a:
watermark.selectText.2=Texto da marca d'água:
watermark.selectText.3=Tamanho da fonte:
watermark.selectText.4=Rotação (0-360):
watermark.selectText.5=widthSpacer (espaço entre cada marca d'água horizontalmente):
watermark.selectText.6=heightSpacer (espaço entre cada marca d'água verticalmente):
watermark.selectText.7=Opacidade (0% - 100%):
watermark.submit=Adicione uma Marca d'água
#remove-watermark
remove-watermark.title=Remover marca d'água
remove-watermark.header=Remover marca d'água
remove-watermark.selectText.1=Selecione PDF para remover a marca d'água de:
remove-watermark.selectText.2=Texto da marca d'água:
remove-watermark.submit=Remover marca d'água
#Change permissions
permissions.title=Alterar permissões
permissions.header=Alterar permissões
permissions.warning=Aviso para que essas permissões sejam inalteráveis, é recomendável defini-las com uma senha por meio da página adicionar senha
permissions.selectText.1=Selecione o PDF para alterar as permissões
permissions.selectText.2=Permissões para definir
permissions.selectText.3=Impedir a montagem do documento
permissions.selectText.4=Impedir a extração de conteúdo
permissions.selectText.5=Impedir extração para acessibilidade
permissions.selectText.6=Impedir o preenchimento do formulário
permissions.selectText.7=Impedir modificações
permissions.selectText.8=Impedir a modificação da anotação
permissions.selectText.9=Impedir a impressão
permissions.selectText.10=Impedir a impressão de formatos diferentes
permissions.submit=Mudar
#remove password
removePassword.title=Remover senha
removePassword.header=Remover senha (Descriptografar)
removePassword.selectText.1=Selecione PDF para descriptografar
removePassword.selectText.2=Senha
removePassword.submit=Remover
#changeMetadata
changeMetadata.title=Título:
changeMetadata.header=Alterar metadados
changeMetadata.selectText.1=Edite as variáveis que deseja alterar
changeMetadata.selectText.2=Excluir todos os metadados
changeMetadata.selectText.3=Mostrar metadados personalizados:
changeMetadata.author=Autor:
changeMetadata.creationDate=Data de Criação (aaaa/MM/dd HH:mm:ss):
changeMetadata.creator=O Criador:
changeMetadata.keywords=Palavras-chave:
changeMetadata.modDate=Data de modificação (aaaa/MM/dd HH:mm:ss):
changeMetadata.producer=Produtor:
changeMetadata.subject=Assunto:
changeMetadata.title=Título:
changeMetadata.trapped=Encurralado:
changeMetadata.selectText.4=Outros metadados:
changeMetadata.selectText.5=Adicionar entrada de metadados personalizados
changeMetadata.submit=Mudar
#xlsToPdf
xlsToPdf.title=Excel para PDF
xlsToPdf.header=Excel para PDF
xlsToPdf.selectText.1=Selecione planilha Excel XLS ou XLSX para converter
xlsToPdf.convert=converter
#pdfToPDFA
pdfToPDFA.title=PDF para PDF/A
pdfToPDFA.header=PDF para PDF/A
pdfToPDFA.credit=Este serviço usa OCRmyPDF para conversão de PDF/A
pdfToPDFA.submit=Converter
#PDFToWord
PDFToWord.title=PDF para Word
PDFToWord.header=PDF para Word
PDFToWord.selectText.1=Formato do arquivo de saída
PDFToWord.credit=Este serviço usa o LibreOffice para conversão de arquivos.
PDFToWord.submit=Converter
#PDFToPresentation
PDFToPresentation.title=PDF para apresentação
PDFToPresentation.header=PDF para apresentação
PDFToPresentation.selectText.1=Formato do arquivo de saída
PDFToPresentation.credit=Este serviço usa o LibreOffice para conversão de arquivos.
PDFToPresentation.submit=Converter
#PDFToText
PDFToText.title=PDF para Texto/RTF
PDFToText.header=PDF para Texto/RTF
PDFToText.selectText.1=Formato do arquivo de saída
PDFToText.credit=Este serviço usa o LibreOffice para conversão de arquivos.
PDFToText.submit=Converter
#PDFToHTML
PDFToHTML.title=PDF para HTML
PDFToHTML.header=PDF para HTML
PDFToHTML.credit=Este serviço usa o LibreOffice para conversão de arquivos.
PDFToHTML.submit=Converter
#PDFToXML
PDFToXML.title=PDF para XML
PDFToXML.header=PDF para XML
PDFToXML.credit=Este serviço usa o LibreOffice para conversão de arquivos.
PDFToXML.submit=Converter

View File

@@ -1,7 +1,7 @@
########### ###########
# Generic # # Generic #
########### ###########
# the direction that the language is written (ltr = left to right, rtl = right to left) # the direction that the language is written (ltr=left to right, rtl = right to left)
language.direction=ltr language.direction=ltr
pdfPrompt=Selectează fișiere PDF pdfPrompt=Selectează fișiere PDF
@@ -20,116 +20,457 @@ close=Închide
filesSelected=fișiere selectate filesSelected=fișiere selectate
noFavourites=Niciun favorit adăugat noFavourites=Niciun favorit adăugat
bored=Plictisit așteptând? bored=Plictisit așteptând?
############# alphabet=Alfabet
# HOME-PAGE #
#############
home.desc=Un singur punct de oprire găzduit local pentru toate nevoile tale legate de fișiere PDF.
navbar.convert=Converteste
navbar.security=Securitate
navbar.other=Altele
navbar.darkmode=Mod întunecat
navbar.pageOps=Operații pe pagină
home.multiTool.title=Instrument multiplu PDF
home.multiTool.desc=Unifică, rotește, rearanjează și elimină pagini
home.merge.title=Unifică
home.merge.desc=Unifică cu ușurință mai multe fișiere PDF într-unul singur.
home.split.title=Desparte
home.split.desc=Desparte fișierele PDF în mai multe documente.
home.rotate.title=Rotește
home.rotate.desc=Rotește cu ușurință fișierele PDF.
home.imageToPdf.title=Imagine în PDF
home.imageToPdf.desc=Convertește o imagine (PNG, JPEG, GIF) în PDF.
home.pdfToImage.title=PDF în Imagine
home.pdfToImage.desc=Convertește un fișier PDF în imagine (PNG, JPEG, GIF).
home.pdfOrganiser.title=Organizează
home.pdfOrganiser.desc=Elimină/rearanjează pagini în orice ordine
home.addImage.title=Adaugă imagine
home.addImage.desc=Adaugă o imagine într-o locație specifică pe PDF (în curs de dezvoltare)
home.watermark.title=Adaugă Filigran
home.watermark.desc=Adaugă un filigran personalizat la documentul PDF.
home.remove-watermark.title=Elimină Filigran
home.remove-watermark.desc=Elimină filigranele din documentul PDF.
home.permissions.title=Schimbă permisiuni
home.permissions.desc=Schimbă permisiunile documentului PDF
home.removePages.title=Elimină
home.removePages.desc=Șterge paginile nedorite din documentul PDF.
home.addPassword.title=Adaugă Parolă
home.addPassword.desc=Criptează documentul PDF cu o parolă.
home.removePassword.title=Elimină Parola
home.removePassword.desc=Elimină protecția cu parolă din documentul PDF.
home.compressPdfs.title=Comprimă
home.compressPdfs.desc=Comprimă fișierele PDF pentru a reduce dimensiunea lor.
home.changeMetadata.title=Schimbă Metadatele
home.changeMetadata.desc=Schimbă/Elimină/Adaugă metadate într-un document PDF.
home.fileToPDF.title=Convertește fișierul în PDF
home.fileToPDF.desc=Convertește aproape orice fișier în format PDF (DOCX, PNG, XLS, PPT, TXT și altele).
home.ocr.title=OCR / Curățare scanări
home.ocr.desc=Curăță scanările și detectează textul din imaginile dintr-un PDF și îl adaugă ca text.
home.extractImages.title=Extrage Imagini
home.extractImages.desc=Extrage toate imaginile dintr-un PDF și le salvează într-un fișier zip.
home.pdfToPDFA.title=PDF în PDF/A
home.pdfToPDFA.desc=Convertește un document PDF în format PDF/A pentru stocare pe termen lung.
home.PDFToWord.title=PDF în Word
home.PDFToWord.desc=Convertește un document PDF în formate Word (DOC, DOCX și ODT).
home.PDFToPresentation.title=PDF în Prezentare
home.PDFToPresentation.desc=Convertește un document PDF în formate de prezentare (PPT, PPTX și ODP).
home.PDFToText.title=PDF în Text/RTF
home.PDFToText.desc=Convertește un document PDF în format Text sau RTF.
home.PDFToHTML.title=PDF în HTML
home.PDFToHTML.desc=Convertește un document PDF în format HTML.
home.PDFToXML.title=PDF în XML
home.PDFToXML.desc=Convertește un document PDF în format XML.
home.ScannerImageSplit.title=Detectează/Împarte poze scanate
home.ScannerImageSplit.desc=Împarte mai multe poze dintr-o poză/PDF.
home.sign.title=Semnează
home.sign.desc=Adaugă o semnătură la documentul PDF prin desenare, text sau imagine.
home.flatten.title=Nivelare
home.flatten.desc=Elimină toate elementele interactive și formularele dintr-un PDF.
home.repair.title=Repară
home.repair.desc=Încearcă să repare un document PDF corupt/defect.
home.removeBlanks.title=Elimină pagini goale
home.removeBlanks.desc=Detectează și elimină paginile goale dintr-un document.
home.compare.title=Compară
home.compare.desc=Compară și arată diferențele dintre 2 documente PDF.
home.certSign.title=Semnare cu certificat
home.certSign.desc=Semnează un PDF cu un certificat/cheie (PEM/P12)
downloadPdf=Descarcă PDF downloadPdf=Descarcă PDF
text=Text text=Text
font=Font font=Font
selectFillter=-- Selectează -- selectFillter=-- Selectează --
pageNum=Numărul paginii pageNum=Numărul paginii
sizes.small=Small
sizes.medium=Medium
sizes.large=Large
sizes.x-large=X-Large
error.pdfPassword=The PDF Document is passworded and either the password was not provided or was incorrect
certSign.title = Semnare certificat
certSign.header = Semnează un fișier PDF cu certificatul tău (În curs de desfășurare)
certSign.selectPDF = Selectează un fișier PDF pentru semnare:
certSign.selectKey = Selectează fișierul cheie privată (format PKCS#8, poate fi .pem sau .der):
certSign.selectCert = Selectează fișierul de certificat (format X.509, poate fi .pem sau .der):
certSign.selectP12 = Selectează fișierul de stocare cheie PKCS#12 (.p12 sau .pfx) (Opțional, dacă este furnizat, ar trebui să conțină cheia privată și certificatul tău):
certSign.certType = Tipul certificatului
certSign.password = Introdu parola pentru stocarea cheie sau cheia privată (dacă există):
certSign.showSig = Afișează semnătura
certSign.reason = Motivul
certSign.location = Locația
certSign.name = Numele
certSign.submit = Semnează PDF #############
# NAVBAR #
#############
navbar.convert=Converteste
navbar.security=Securitate
navbar.other=Altele
navbar.darkmode=Mod întunecat
navbar.pageOps=Operații pe pagină
navbar.settings=Setări
#############
# SETTINGS #
#############
settings.title=Setări
settings.update=Actualizare disponibilă
settings.appVersion=Versiune aplicație:
settings.downloadOption.title=Alege opțiunea de descărcare (pentru descărcarea unui singur fișier non-zip):
settings.downloadOption.1=Deschide în aceeași fereastră
settings.downloadOption.2=Deschide într-o fereastră nouă
settings.downloadOption.3=Descarcă fișierul
settings.zipThreshold=Împachetează fișierele când numărul de fișiere descărcate depășește
#############
# HOME-PAGE #
#############
home.desc=Un singur punct de oprire găzduit local pentru toate nevoile tale legate de fișiere PDF.
home.multiTool.title=Instrument multiplu PDF
home.multiTool.desc=Unifică, rotește, rearanjează și elimină pagini
multiTool.tags=Multi Tool,Multi operation,UI,click drag,front end,client side
home.merge.title=Unifică
home.merge.desc=Unifică cu ușurință mai multe fișiere PDF într-unul singur.
merge.tags=merge,Page operations,Back end,server side
home.split.title=Desparte
home.split.desc=Desparte fișierele PDF în mai multe documente.
##########################
### TODO: Translate ###
##########################
split.tags=Page operations,divide,Multi Page,cut,server side
home.rotate.title=Rotește
home.rotate.desc=Rotește cu ușurință fișierele PDF.
##########################
### TODO: Translate ###
##########################
rotate.tags=server side
home.imageToPdf.title=Imagine în PDF
home.imageToPdf.desc=Convertește o imagine (PNG, JPEG, GIF) în PDF.
##########################
### TODO: Translate ###
##########################
imageToPdf.tags=conversion,img,jpg,picture,photo
home.pdfToImage.title=PDF în Imagine
home.pdfToImage.desc=Convertește un fișier PDF în imagine (PNG, JPEG, GIF).
##########################
### TODO: Translate ###
##########################
pdfToImage.tags=conversion,img,jpg,picture,photo
home.pdfOrganiser.title=Organizează
home.pdfOrganiser.desc=Elimină/rearanjează pagini în orice ordine
##########################
### TODO: Translate ###
##########################
pdfOrganiser.tags=duplex,even,odd,sort,move
home.addImage.title=Adaugă imagine
home.addImage.desc=Adaugă o imagine într-o locație specifică pe PDF (în curs de dezvoltare)
##########################
### TODO: Translate ###
##########################
addImage.tags=img,jpg,picture,photo
home.watermark.title=Adaugă Filigran
home.watermark.desc=Adaugă un filigran personalizat la documentul PDF.
##########################
### TODO: Translate ###
##########################
watermark.tags=Text,repeating,label,own,copyright,trademark,img,jpg,picture,photo
home.permissions.title=Schimbă permisiuni
home.permissions.desc=Schimbă permisiunile documentului PDF
##########################
### TODO: Translate ###
##########################
permissions.tags=read,write,edit,print
home.removePages.title=Elimină
home.removePages.desc=Șterge paginile nedorite din documentul PDF.
##########################
### TODO: Translate ###
##########################
removePages.tags=Remove pages,delete pages
home.addPassword.title=Adaugă Parolă
home.addPassword.desc=Criptează documentul PDF cu o parolă.
##########################
### TODO: Translate ###
##########################
addPassword.tags=secure,security
home.removePassword.title=Elimină Parola
home.removePassword.desc=Elimină protecția cu parolă din documentul PDF.
##########################
### TODO: Translate ###
##########################
removePassword.tags=secure,Decrypt,security,unpassword,delete password
home.compressPdfs.title=Comprimă
home.compressPdfs.desc=Comprimă fișierele PDF pentru a reduce dimensiunea lor.
##########################
### TODO: Translate ###
##########################
compressPdfs.tags=squish,small,tiny
home.changeMetadata.title=Schimbă Metadatele
home.changeMetadata.desc=Schimbă/Elimină/Adaugă metadate într-un document PDF.
##########################
### TODO: Translate ###
##########################
changeMetadata.tags==Title,author,date,creation,time,publisher,producer,stats
home.fileToPDF.title=Convertește fișierul în PDF
home.fileToPDF.desc=Convertește aproape orice fișier în format PDF (DOCX, PNG, XLS, PPT, TXT și altele).
##########################
### TODO: Translate ###
##########################
fileToPDF.tags=transformation,format,document,picture,slide,text,conversion,office,docs,word,excel,powerpoint
home.ocr.title=OCR / Curățare scanări
home.ocr.desc=Curăță scanările și detectează textul din imaginile dintr-un PDF și îl adaugă ca text.
##########################
### TODO: Translate ###
##########################
ocr.tags=recognition,text,image,scan,read,identify,detection,editable
home.extractImages.title=Extrage Imagini
home.extractImages.desc=Extrage toate imaginile dintr-un PDF și le salvează într-un fișier zip.
##########################
### TODO: Translate ###
##########################
extractImages.tags=picture,photo,save,archive,zip,capture,grab
home.pdfToPDFA.title=PDF în PDF/A
home.pdfToPDFA.desc=Convertește un document PDF în format PDF/A pentru stocare pe termen lung.
##########################
### TODO: Translate ###
##########################
pdfToPDFA.tags=archive,long-term,standard,conversion,storage,preservation
home.PDFToWord.title=PDF în Word
home.PDFToWord.desc=Convertește un document PDF în formate Word (DOC, DOCX și ODT).
##########################
### TODO: Translate ###
##########################
PDFToWord.tags=doc,docx,odt,word,transformation,format,conversion,office,microsoft,docfile
home.PDFToPresentation.title=PDF în Prezentare
home.PDFToPresentation.desc=Convertește un document PDF în formate de prezentare (PPT, PPTX și ODP).
##########################
### TODO: Translate ###
##########################
PDFToPresentation.tags=slides,show,office,microsoft
home.PDFToText.title=PDF în Text/RTF
home.PDFToText.desc=Convertește un document PDF în format Text sau RTF.
##########################
### TODO: Translate ###
##########################
PDFToText.tags=richformat,richtextformat,rich text format
home.PDFToHTML.title=PDF în HTML
home.PDFToHTML.desc=Convertește un document PDF în format HTML.
##########################
### TODO: Translate ###
##########################
PDFToHTML.tags=web content,browser friendly
home.PDFToXML.title=PDF în XML
home.PDFToXML.desc=Convertește un document PDF în format XML.
##########################
### TODO: Translate ###
##########################
PDFToXML.tags=data-extraction,structured-content,interop,transformation,convert
home.ScannerImageSplit.title=Detectează/Împarte poze scanate
home.ScannerImageSplit.desc=Împarte mai multe poze dintr-o poză/PDF.
##########################
### TODO: Translate ###
##########################
ScannerImageSplit.tags=separate,auto-detect,scans,multi-photo,organize
home.sign.title=Semnează
home.sign.desc=Adaugă o semnătură la documentul PDF prin desenare, text sau imagine.
##########################
### TODO: Translate ###
##########################
sign.tags=authorize,initials,drawn-signature,text-sign,image-signature
home.flatten.title=Nivelare
home.flatten.desc=Elimină toate elementele interactive și formularele dintr-un PDF.
##########################
### TODO: Translate ###
##########################
flatten.tags=static,deactivate,non-interactive,streamline
home.repair.title=Repară
home.repair.desc=Încearcă să repare un document PDF corupt/defect.
##########################
### TODO: Translate ###
##########################
repair.tags=fix,restore,correction,recover
home.removeBlanks.title=Elimină pagini goale
home.removeBlanks.desc=Detectează și elimină paginile goale dintr-un document.
##########################
### TODO: Translate ###
##########################
removeBlanks.tags=cleanup,streamline,non-content,organize
home.compare.title=Compară
home.compare.desc=Compară și arată diferențele dintre 2 documente PDF.
##########################
### TODO: Translate ###
##########################
compare.tags=differentiate,contrast,changes,analysis
home.certSign.title=Semnare cu certificat
home.certSign.desc=Semnează un PDF cu un certificat/cheie (PEM/P12)
##########################
### TODO: Translate ###
##########################
certSign.tags=authenticate,PEM,P12,official,encrypt
home.pageLayout.title=Multi-Page Layout
home.pageLayout.desc=Merge multiple pages of a PDF document into a single page
##########################
### TODO: Translate ###
##########################
pageLayout.tags=merge,composite,single-view,organize
home.scalePages.title=Adjust page size/scale
home.scalePages.desc=Change the size/scale of page and/or its contents.
##########################
### TODO: Translate ###
##########################
scalePages.tags=resize,modify,dimension,adapt
home.pipeline.title=Pipeline (Advanced)
home.pipeline.desc=Run multiple actions on PDFs by defining pipeline scripts
##########################
### TODO: Translate ###
##########################
pipeline.tags=automate,sequence,scripted,batch-process
home.add-page-numbers.title=Add Page Numbers
home.add-page-numbers.desc=Add Page numbers throughout a document in a set location
##########################
### TODO: Translate ###
##########################
add-page-numbers.tags=paginate,label,organize,index
home.auto-rename.title=Auto Rename PDF File
home.auto-rename.desc=Auto renames a PDF file based on its detected header
##########################
### TODO: Translate ###
##########################
auto-rename.tags=auto-detect,header-based,organize,relabel
home.adjust-contrast.title=Adjust Colors/Contrast
home.adjust-contrast.desc=Adjust Contrast, Saturation and Brightness of a PDF
##########################
### TODO: Translate ###
##########################
adjust-contrast.tags=color-correction,tune,modify,enhance
home.crop.title=Crop PDF
home.crop.desc=Crop a PDF to reduce its size (maintains text!)
##########################
### TODO: Translate ###
##########################
crop.tags=trim,shrink,edit,shape
home.autoSplitPDF.title=Auto Split Pages
home.autoSplitPDF.desc=Auto Split Scanned PDF with physical scanned page splitter QR Code
##########################
### TODO: Translate ###
##########################
autoSplitPDF.tags=QR-based,separate,scan-segment,organize
home.sanitizePdf.title=Sanitize
home.sanitizePdf.desc=Remove scripts and other elements from PDF files
##########################
### TODO: Translate ###
##########################
sanitizePdf.tags=clean,secure,safe,remove-threats
##########################
### TODO: Translate ###
##########################
home.URLToPDF.title=URL/Website To PDF
home.URLToPDF.desc=Converts any http(s)URL to PDF
URLToPDF.tags=web-capture,save-page,web-to-doc,archive
##########################
### TODO: Translate ###
##########################
home.HTMLToPDF.title=HTML to PDF
home.HTMLToPDF.desc=Converts any HTML file or zip to PDF
HTMLToPDF.tags=markup,web-content,transformation,convert
###########################
# #
# WEB PAGES #
# #
###########################
#url-to-pdf
URLToPDF.title=URL To PDF
URLToPDF.header=URL To PDF
URLToPDF.submit=Convert
URLToPDF.credit=Uses WeasyPrint
#html-to-pdf
HTMLToPDF.title=HTML To PDF
HTMLToPDF.header=HTML To PDF
HTMLToPDF.help=Accepts HTML files and ZIPs containing html/css/images etc required
HTMLToPDF.submit=Convert
HTMLToPDF.credit=Uses WeasyPrint
#sanitizePDF
sanitizePDF.title=Sanitize PDF
sanitizePDF.header=Sanitize a PDF file
sanitizePDF.selectText.1=Remove JavaScript actions
sanitizePDF.selectText.2=Remove embedded files
sanitizePDF.selectText.3=Remove metadata
sanitizePDF.selectText.4=Remove links
sanitizePDF.selectText.5=Remove fonts
sanitizePDF.submit=Sanitize PDF
#addPageNumbers
addPageNumbers.title=Add Page Numbers
addPageNumbers.header=Add Page Numbers
addPageNumbers.selectText.1=Select PDF file:
addPageNumbers.selectText.2=Margin Size
addPageNumbers.selectText.3=Position
addPageNumbers.selectText.4=Starting Number
addPageNumbers.selectText.5=Pages to Number
addPageNumbers.selectText.6=Custom Text
addPageNumbers.submit=Add Page Numbers
#auto-rename
auto-rename.title=Auto Rename
auto-rename.header=Auto Rename PDF
auto-rename.submit=Auto Rename
#adjustContrast
adjustContrast.title=Adjust Contrast
adjustContrast.header=Adjust Contrast
adjustContrast.contrast=Contrast:
adjustContrast.brightness=Brightness:
adjustContrast.saturation=Saturation:
adjustContrast.download=Download
#crop
crop.title=Crop
crop.header=Crop Image
crop.submit=Submit
#autoSplitPDF
autoSplitPDF.title=Auto Split PDF
autoSplitPDF.header=Auto Split PDF
autoSplitPDF.description=Print, Insert, Scan, upload, and let us auto-separate your documents. No manual work sorting needed.
autoSplitPDF.selectText.1=Print out some divider sheets from below (Black and white is fine).
autoSplitPDF.selectText.2=Scan all your documents at once by inserting the divider sheet between them.
autoSplitPDF.selectText.3=Upload the single large scanned PDF file and let Stirling PDF handle the rest.
autoSplitPDF.selectText.4=Divider pages are automatically detected and removed, guaranteeing a neat final document.
autoSplitPDF.formPrompt=Submit PDF containing Stirling-PDF Page dividers:
autoSplitPDF.duplexMode=Duplex Mode (Front and back scanning)
autoSplitPDF.dividerDownload1=Download 'Auto Splitter Divider (minimal).pdf'
autoSplitPDF.dividerDownload2=Download 'Auto Splitter Divider (with instructions).pdf'
autoSplitPDF.submit=Submit
#pipeline
pipeline.title=Pipeline
#pageLayout
pageLayout.title=Multi Page Layout
pageLayout.header=Multi Page Layout
pageLayout.pagesPerSheet=Pages per sheet:
pageLayout.submit=Submit
#scalePages
scalePages.title=Adjust page-scale
scalePages.header=Adjust page-scale
scalePages.pageSize=Size of a page of the document.
scalePages.scaleFactor=Zoom level (crop) of a page.
scalePages.submit=Submit
#certSign
certSign.title=Semnare certificat
certSign.header=Semnează un fișier PDF cu certificatul tău (În curs de desfășurare)
certSign.selectPDF=Selectează un fișier PDF pentru semnare:
certSign.selectKey=Selectează fișierul cheie privată (format PKCS#8, poate fi .pem sau .der):
certSign.selectCert=Selectează fișierul de certificat (format X.509, poate fi .pem sau .der):
certSign.selectP12=Selectează fișierul de stocare cheie PKCS#12 (.p12 sau .pfx) (Opțional, dacă este furnizat, ar trebui să conțină cheia privată și certificatul tău):
certSign.certType=Tipul certificatului
certSign.password=Introdu parola pentru stocarea cheie sau cheia privată (dacă există):
certSign.showSig=Afișează semnătura
certSign.reason=Motivul
certSign.location=Locația
certSign.name=Numele
certSign.submit=Semnează PDF
#removeBlanks
removeBlanks.title=Elimină pagini goale removeBlanks.title=Elimină pagini goale
removeBlanks.header=Elimină pagini goale removeBlanks.header=Elimină pagini goale
removeBlanks.threshold=Prag: removeBlanks.threshold=Prag:
@@ -137,12 +478,17 @@ removeBlanks.thresholdDesc=Prag pentru determinarea cât de alb trebuie să fie
removeBlanks.whitePercent=Procent alb (%): removeBlanks.whitePercent=Procent alb (%):
removeBlanks.whitePercentDesc=Procentul paginii care trebuie să fie alb pentru a fi eliminată removeBlanks.whitePercentDesc=Procentul paginii care trebuie să fie alb pentru a fi eliminată
removeBlanks.submit=Elimină pagini goale removeBlanks.submit=Elimină pagini goale
#compare
compare.title=Compară compare.title=Compară
compare.header=Compară PDF-uri compare.header=Compară PDF-uri
compare.document.1=Document 1 compare.document.1=Document 1
compare.document.2=Document 2 compare.document.2=Document 2
compare.submit=Compară compare.submit=Compară
#sign
sign.title=Semnează sign.title=Semnează
sign.header=Semnează documente PDF sign.header=Semnează documente PDF
sign.upload=Încarcă Imaginea sign.upload=Încarcă Imaginea
@@ -151,14 +497,20 @@ sign.text=Introdu Textul
sign.clear=Curăță sign.clear=Curăță
sign.add=Adaugă sign.add=Adaugă
#repair
repair.title=Repară repair.title=Repară
repair.header=Repară documente PDF repair.header=Repară documente PDF
repair.submit=Repară repair.submit=Repară
#flatten
flatten.title=Nivelare flatten.title=Nivelare
flatten.header=Nivelează documente PDF flatten.header=Nivelează documente PDF
flatten.submit=Nivelează flatten.submit=Nivelează
#ScannerImageSplit
ScannerImageSplit.selectText.1=Prag unghi: ScannerImageSplit.selectText.1=Prag unghi:
ScannerImageSplit.selectText.2=Stabilește unghiul absolut minim necesar pentru ca imaginea să fie rotită (implicit: 5). ScannerImageSplit.selectText.2=Stabilește unghiul absolut minim necesar pentru ca imaginea să fie rotită (implicit: 5).
ScannerImageSplit.selectText.3=Toleranță: ScannerImageSplit.selectText.3=Toleranță:
@@ -170,19 +522,6 @@ ScannerImageSplit.selectText.8=Stabilește pragul minim de arie a conturului pen
ScannerImageSplit.selectText.9=Mărimea marginii: ScannerImageSplit.selectText.9=Mărimea marginii:
ScannerImageSplit.selectText.10=Stabilește mărimea marginii adăugate și eliminate pentru a evita marginile albe în rezultat (implicit: 1). ScannerImageSplit.selectText.10=Stabilește mărimea marginii adăugate și eliminate pentru a evita marginile albe în rezultat (implicit: 1).
navbar.settings=Setări
settings.title=Setări
settings.update=Actualizare disponibilă
settings.appVersion=Versiune aplicație:
settings.downloadOption.title=Alege opțiunea de descărcare (pentru descărcarea unui singur fișier non-zip):
settings.downloadOption.1=Deschide în aceeași fereastră
settings.downloadOption.2=Deschide într-o fereastră nouă
settings.downloadOption.3=Descarcă fișierul
settings.zipThreshold=Împachetează fișierele când numărul de fișiere descărcate depășește
#OCR #OCR
ocr.title=OCR / Curățare scanare ocr.title=OCR / Curățare scanare
@@ -203,6 +542,8 @@ ocr.help=Citiți documentația pentru a afla cum să utilizați acest serviciu p
ocr.credit=Acest serviciu utilizează OCRmyPDF și Tesseract pentru OCR. ocr.credit=Acest serviciu utilizează OCRmyPDF și Tesseract pentru OCR.
ocr.submit=Procesează PDF-ul cu OCR ocr.submit=Procesează PDF-ul cu OCR
#extractImages
extractImages.title=Extrage Imagini extractImages.title=Extrage Imagini
extractImages.header=Extrage Imagini extractImages.header=Extrage Imagini
extractImages.selectText=Selectați formatul imaginii în care să se convertească imaginile extrase extractImages.selectText=Selectați formatul imaginii în care să se convertească imaginile extrase
@@ -226,42 +567,48 @@ compress.selectText.2=0 (Fără optimizare)
compress.selectText.3=1 (Implicit, optimizare fără pierdere) compress.selectText.3=1 (Implicit, optimizare fără pierdere)
compress.selectText.4=2 (Optimizare cu pierdere) compress.selectText.4=2 (Optimizare cu pierdere)
compress.selectText.5=3 (Optimizare cu pierdere, mai agresivă) compress.selectText.5=3 (Optimizare cu pierdere, mai agresivă)
compress.selectText.6=Activare vizualizare rapidă pe web (linearizare PDF)
compress.selectText.7=Activare codificare JBIG2 cu pierdere
compress.submit=Comprimare compress.submit=Comprimare
#Add image #Add image
addImage.title=Adăugare imagine addImage.title=Adăugare imagine
addImage.header=Adăugare imagine în PDF addImage.header=Adăugare imagine în PDF
addImage.everyPage=Pe fiecare pagină? addImage.everyPage=Pe fiecare pagină?
addImage.upload=Adăugare imagine
addImage.submit=Adăugare imagine addImage.submit=Adăugare imagine
#merge #merge
merge.title=Unire merge.title=Unire
merge.header=Unirea mai multor PDF-uri (2+) merge.header=Unirea mai multor PDF-uri (2+)
merge.submit=Unire merge.submit=Unire
#pdfOrganiser #pdfOrganiser
pdfOrganiser.title=Organizator de pagini pdfOrganiser.title=Organizator de pagini
pdfOrganiser.header=Organizator de pagini PDF pdfOrganiser.header=Organizator de pagini PDF
pdfOrganiser.submit=Rearanjați paginile pdfOrganiser.submit=Rearanjați paginile
#multiTool #multiTool
multiTool.title=Instrument PDF multiplu multiTool.title=Instrument PDF multiplu
multiTool.header=Instrument PDF multiplu multiTool.header=Instrument PDF multiplu
#pageRemover #pageRemover
pageRemover.title=Înlăturare pagini pageRemover.title=Înlăturare pagini
pageRemover.header=Înlăturare pagini din PDF pageRemover.header=Înlăturare pagini din PDF
pageRemover.pagesToDelete=Pagini de șters (Introduceți o listă de numere de pagini separate prin virgulă): pageRemover.pagesToDelete=Pagini de șters (Introduceți o listă de numere de pagini separate prin virgulă):
pageRemover.submit=Ștergere pagini pageRemover.submit=Ștergere pagini
#rotate #rotate
rotate.title=Rotește PDF rotate.title=Rotește PDF
rotate.header=Rotește PDF rotate.header=Rotește PDF
rotate.selectAngle=Selectați un unghi de rotație (în multiplicate de 90 de grade): rotate.selectAngle=Selectați un unghi de rotație (în multiplicate de 90 de grade):
rotate.submit=Rotește rotate.submit=Rotește
#merge #merge
split.title=Împarte PDF split.title=Împarte PDF
split.header=Împarte PDF split.header=Împarte PDF
@@ -287,6 +634,7 @@ imageToPDF.selectText.3=Logica pentru mai multe fișiere (activată numai dacă
imageToPDF.selectText.4=Unifică într-un singur PDF imageToPDF.selectText.4=Unifică într-un singur PDF
imageToPDF.selectText.5=Convertă în PDF-uri separate imageToPDF.selectText.5=Convertă în PDF-uri separate
#pdfToImage #pdfToImage
pdfToImage.title=PDF în Imagine pdfToImage.title=PDF în Imagine
pdfToImage.header=PDF în Imagine pdfToImage.header=PDF în Imagine
@@ -300,6 +648,7 @@ pdfToImage.grey=Scală de gri
pdfToImage.blackwhite=Alb și negru (Poate pierde date!) pdfToImage.blackwhite=Alb și negru (Poate pierde date!)
pdfToImage.submit=Convertă pdfToImage.submit=Convertă
#addPassword #addPassword
addPassword.title=Adăugați parolă addPassword.title=Adăugați parolă
addPassword.header=Adăugați o parolă (Criptare) addPassword.header=Adăugați o parolă (Criptare)
@@ -316,8 +665,12 @@ addPassword.selectText.10=Preveniți modificarea
addPassword.selectText.11=Preveniți modificarea adnotărilor addPassword.selectText.11=Preveniți modificarea adnotărilor
addPassword.selectText.12=Preveniți tipărirea addPassword.selectText.12=Preveniți tipărirea
addPassword.selectText.13=Preveniți tipărirea în formate diferite addPassword.selectText.13=Preveniți tipărirea în formate diferite
addPassword.selectText.14=Owner Password
addPassword.selectText.15=Restricts what can be done with the document once it is opened (Not supported by all readers)
addPassword.selectText.16=Restricts the opening of the document itself
addPassword.submit=Criptare addPassword.submit=Criptare
#watermark #watermark
watermark.title=Adăugați Filigran watermark.title=Adăugați Filigran
watermark.header=Adăugați Filigran watermark.header=Adăugați Filigran
@@ -330,6 +683,7 @@ watermark.selectText.6=heightSpacer (Spațiu între fiecare filigran pe vertical
watermark.selectText.7=Opacitate (0% - 100%): watermark.selectText.7=Opacitate (0% - 100%):
watermark.submit=Adăugați Filigran watermark.submit=Adăugați Filigran
#remove-watermark #remove-watermark
remove-watermark.title=Eliminați Filigran remove-watermark.title=Eliminați Filigran
remove-watermark.header=Eliminați Filigran remove-watermark.header=Eliminați Filigran
@@ -337,6 +691,7 @@ remove-watermark.selectText.1=Selectați PDF-ul de la care să eliminați filigr
remove-watermark.selectText.2=Textul Filigranului: remove-watermark.selectText.2=Textul Filigranului:
remove-watermark.submit=Eliminați Filigran remove-watermark.submit=Eliminați Filigran
#Change permissions #Change permissions
permissions.title=Schimbați Permisiunile permissions.title=Schimbați Permisiunile
permissions.header=Schimbați Permisiunile permissions.header=Schimbați Permisiunile
@@ -353,6 +708,7 @@ permissions.selectText.9=Preveniți tipărirea
permissions.selectText.10=Preveniți tipărirea în formate diferite permissions.selectText.10=Preveniți tipărirea în formate diferite
permissions.submit=Schimbare permissions.submit=Schimbare
#remove password #remove password
removePassword.title=Eliminați parola removePassword.title=Eliminați parola
removePassword.header=Eliminați parola (Decodificați) removePassword.header=Eliminați parola (Decodificați)
@@ -360,7 +716,9 @@ removePassword.selectText.1=Selectați PDF-ul pentru decodificare
removePassword.selectText.2=Parolă removePassword.selectText.2=Parolă
removePassword.submit=Eliminați removePassword.submit=Eliminați
changeMetadata.title=Schimbați Metadatele
#changeMetadata
changeMetadata.title=Titlu:
changeMetadata.header=Schimbați Metadatele changeMetadata.header=Schimbați Metadatele
changeMetadata.selectText.1=Vă rugăm să editați variabilele pe care doriți să le schimbați changeMetadata.selectText.1=Vă rugăm să editați variabilele pe care doriți să le schimbați
changeMetadata.selectText.2=Ștergeți toate metadatele changeMetadata.selectText.2=Ștergeți toate metadatele
@@ -378,39 +736,53 @@ changeMetadata.selectText.4=Alte Metadate:
changeMetadata.selectText.5=Adăugați Intrare Metadate Personalizate changeMetadata.selectText.5=Adăugați Intrare Metadate Personalizate
changeMetadata.submit=Schimbare changeMetadata.submit=Schimbare
#xlsToPdf
xlsToPdf.title=Excel to PDF xlsToPdf.title=Excel to PDF
xlsToPdf.header=Excel to PDF xlsToPdf.header=Excel to PDF
xlsToPdf.selectText.1=Selectați fișierul Excel XLS sau XLSX pentru a converti xlsToPdf.selectText.1=Selectați fișierul Excel XLS sau XLSX pentru a converti
xlsToPdf.convert=convert xlsToPdf.convert=convert
#pdfToPDFA
pdfToPDFA.title=PDF către PDF/A pdfToPDFA.title=PDF către PDF/A
pdfToPDFA.header=PDF către PDF/A pdfToPDFA.header=PDF către PDF/A
pdfToPDFA.credit=Acest serviciu utilizează OCRmyPDF pentru conversia în PDF/A pdfToPDFA.credit=Acest serviciu utilizează OCRmyPDF pentru conversia în PDF/A
pdfToPDFA.submit=Convert pdfToPDFA.submit=Convert
#PDFToWord
PDFToWord.title=PDF către Word PDFToWord.title=PDF către Word
PDFToWord.header=PDF către Word PDFToWord.header=PDF către Word
PDFToWord.selectText.1=Format fișier de ieșire PDFToWord.selectText.1=Format fișier de ieșire
PDFToWord.credit=Acest serviciu utilizează LibreOffice pentru conversia fișierului. PDFToWord.credit=Acest serviciu utilizează LibreOffice pentru conversia fișierului.
PDFToWord.submit=Convert PDFToWord.submit=Convert
#PDFToPresentation
PDFToPresentation.title=PDF către Prezentare PDFToPresentation.title=PDF către Prezentare
PDFToPresentation.header=PDF către Prezentare PDFToPresentation.header=PDF către Prezentare
PDFToPresentation.selectText.1=Format fișier de ieșire PDFToPresentation.selectText.1=Format fișier de ieșire
PDFToPresentation.credit=Acest serviciu utilizează LibreOffice pentru conversia fișierului. PDFToPresentation.credit=Acest serviciu utilizează LibreOffice pentru conversia fișierului.
PDFToPresentation.submit=Convert PDFToPresentation.submit=Convert
#PDFToText
PDFToText.title=PDF către Text/RTF PDFToText.title=PDF către Text/RTF
PDFToText.header=PDF către Text/RTF PDFToText.header=PDF către Text/RTF
PDFToText.selectText.1=Format fișier de ieșire PDFToText.selectText.1=Format fișier de ieșire
PDFToText.credit=Acest serviciu utilizează LibreOffice pentru conversia fișierului. PDFToText.credit=Acest serviciu utilizează LibreOffice pentru conversia fișierului.
PDFToText.submit=Convert PDFToText.submit=Convert
#PDFToHTML
PDFToHTML.title=PDF către HTML PDFToHTML.title=PDF către HTML
PDFToHTML.header=PDF către HTML PDFToHTML.header=PDF către HTML
PDFToHTML.credit=Acest serviciu utilizează LibreOffice pentru conversia fișierului. PDFToHTML.credit=Acest serviciu utilizează LibreOffice pentru conversia fișierului.
PDFToHTML.submit=Convert PDFToHTML.submit=Convert
#PDFToXML
PDFToXML.title=PDF către XML PDFToXML.title=PDF către XML
PDFToXML.header=PDF către XML PDFToXML.header=PDF către XML
PDFToXML.credit=Acest serviciu utilizează LibreOffice pentru conversia fișierului. PDFToXML.credit=Acest serviciu utilizează LibreOffice pentru conversia fișierului.

View File

@@ -1,7 +1,7 @@
########### ###########
# Generic # # Generic #
########### ###########
# the direction that the language is written (ltr = left to right, rtl = right to left) # the direction that the language is written (ltr=left to right, rtl = right to left)
language.direction=ltr language.direction=ltr
pdfPrompt=Выберите PDF(ы) pdfPrompt=Выберите PDF(ы)
@@ -20,117 +20,441 @@ close=Закрыть
filesSelected=файлов выбрано filesSelected=файлов выбрано
noFavourites=Нет избранного noFavourites=Нет избранного
bored=Скучно ждать? bored=Скучно ждать?
alphabet=\u0430\u043B\u0444\u0430\u0432\u0438\u0442
downloadPdf=Скачать PDF
text=Текст
font=Шрифт
selectFillter=-- Выбрать --
pageNum=номер страницы
sizes.small=Small
sizes.medium=Medium
sizes.large=Large
sizes.x-large=X-Large
error.pdfPassword=The PDF Document is passworded and either the password was not provided or was incorrect
#############
# NAVBAR #
#############
navbar.convert=Конвертировать
navbar.security=Безопасность
navbar.other=Другое
navbar.darkmode=Темный режим
navbar.pageOps=Операции со страницей
navbar.settings=Настройки
#############
# SETTINGS #
#############
settings.title=Настройки
settings.update=Доступно обновление
settings.appVersion=Версия приложения:
settings.downloadOption.title=Выберите вариант загрузки (для загрузки одного файла без zip):
settings.downloadOption.1=Открыть в том же окне
settings.downloadOption.2=Открыть в новом окне
settings.downloadOption.3=Загрузить файл
settings.zipThreshold=Zip-файлы, когда количество загруженных файлов превышает
############# #############
# HOME-PAGE # # HOME-PAGE #
############# #############
home.desc=Ваш локальный универсальный магазин для всех ваших потребностей в PDF. home.desc=Ваш локальный универсальный магазин для всех ваших потребностей в PDF.
navbar.convert=Конвертировать
navbar.security=Безопасность
navbar.other=Другое
navbar.darkmode=Темный режим
navbar.pageOps=Операции со страницей
home.multiTool.title=Мультиинструмент PDF home.multiTool.title=Мультиинструмент PDF
home.multiTool.desc=Объединение, поворот, изменение порядка и удаление страниц home.multiTool.desc=Объединение, поворот, изменение порядка и удаление страниц
multiTool.tags=Multi Tool,Multi operation,UI,click drag,front end,client side
home.merge.title=Объединить home.merge.title=Объединить
home.merge.desc=Легко объединяйте несколько PDF-файлов в один. home.merge.desc=Легко объединяйте несколько PDF-файлов в один.
merge.tags=merge,Page operations,Back end,server side
home.split.title=Разделить home.split.title=Разделить
home.split.desc=Разделить PDF-файлы на несколько документов home.split.desc=Разделить PDF-файлы на несколько документов
##########################
### TODO: Translate ###
##########################
split.tags=Page operations,divide,Multi Page,cut,server side
home.rotate.title=Повернуть home.rotate.title=Повернуть
home.rotate.desc=Легко поворачивайте свои PDF-файлы. home.rotate.desc=Легко поворачивайте свои PDF-файлы.
##########################
### TODO: Translate ###
##########################
rotate.tags=server side
home.imageToPdf.title=Изображение в PDF home.imageToPdf.title=Изображение в PDF
home.imageToPdf.desc=Преобразование изображения (PNG, JPEG, GIF) в PDF. home.imageToPdf.desc=Преобразование изображения (PNG, JPEG, GIF) в PDF.
##########################
### TODO: Translate ###
##########################
imageToPdf.tags=conversion,img,jpg,picture,photo
home.pdfToImage.title=PDF в изображение home.pdfToImage.title=PDF в изображение
home.pdfToImage.desc=Преобразование PDF в изображение. (PNG, JPEG, GIF) home.pdfToImage.desc=Преобразование PDF в изображение. (PNG, JPEG, GIF)
##########################
### TODO: Translate ###
##########################
pdfToImage.tags=conversion,img,jpg,picture,photo
home.pdfOrganiser.title=Реорганизация home.pdfOrganiser.title=Реорганизация
home.pdfOrganiser.desc=Удалить/переставить страницы в любом порядке home.pdfOrganiser.desc=Удалить/переставить страницы в любом порядке
##########################
### TODO: Translate ###
##########################
pdfOrganiser.tags=duplex,even,odd,sort,move
home.addImage.title=Добавить изображение home.addImage.title=Добавить изображение
home.addImage.desc=Добавляет изображение в заданное место в PDF (в процессе) home.addImage.desc=Добавляет изображение в заданное место в PDF (в процессе)
##########################
### TODO: Translate ###
##########################
addImage.tags=img,jpg,picture,photo
home.watermark.title=Добавить водяной знак home.watermark.title=Добавить водяной знак
home.watermark.desc=Добавьте собственный водяной знак в документ PDF. home.watermark.desc=Добавьте собственный водяной знак в документ PDF.
##########################
home.remove-watermark.title=Удалить водяной знак ### TODO: Translate ###
home.remove-watermark.desc=Удалите водяные знаки из документа PDF. ##########################
watermark.tags=Text,repeating,label,own,copyright,trademark,img,jpg,picture,photo
home.permissions.title=Изменить разрешения home.permissions.title=Изменить разрешения
home.permissions.desc=Измените разрешения вашего PDF-документа home.permissions.desc=Измените разрешения вашего PDF-документа
##########################
### TODO: Translate ###
##########################
permissions.tags=read,write,edit,print
home.removePages.title=Удаление home.removePages.title=Удаление
home.removePages.desc=Удалите ненужные страницы из документа PDF. home.removePages.desc=Удалите ненужные страницы из документа PDF.
##########################
### TODO: Translate ###
##########################
removePages.tags=Remove pages,delete pages
home.addPassword.title=Добавить пароль home.addPassword.title=Добавить пароль
home.addPassword.desc=Зашифруйте PDF-документ паролем. home.addPassword.desc=Зашифруйте PDF-документ паролем.
##########################
### TODO: Translate ###
##########################
addPassword.tags=secure,security
home.removePassword.title=Удалить пароль home.removePassword.title=Удалить пароль
home.removePassword.desc=Снимите защиту паролем с вашего PDF-документа. home.removePassword.desc=Снимите защиту паролем с вашего PDF-документа.
##########################
### TODO: Translate ###
##########################
removePassword.tags=secure,Decrypt,security,unpassword,delete password
home.compressPdfs.title=Сжать home.compressPdfs.title=Сжать
home.compressPdfs.desc=Сжимайте PDF-файлы, чтобы уменьшить их размер. home.compressPdfs.desc=Сжимайте PDF-файлы, чтобы уменьшить их размер.
##########################
### TODO: Translate ###
##########################
compressPdfs.tags=squish,small,tiny
home.changeMetadata.title=Изменить метаданные home.changeMetadata.title=Изменить метаданные
home.changeMetadata.desc=Изменить/удалить/добавить метаданные из документа PDF home.changeMetadata.desc=Изменить/удалить/добавить метаданные из документа PDF
##########################
### TODO: Translate ###
##########################
changeMetadata.tags==Title,author,date,creation,time,publisher,producer,stats
home.fileToPDF.title=Конвертировать файл в PDF home.fileToPDF.title=Конвертировать файл в PDF
home.fileToPDF.desc=Конвертируйте практически любой файл в PDF (DOCX, PNG, XLS, PPT, TXT и другие) home.fileToPDF.desc=Конвертируйте практически любой файл в PDF (DOCX, PNG, XLS, PPT, TXT и другие)
##########################
### TODO: Translate ###
##########################
fileToPDF.tags=transformation,format,document,picture,slide,text,conversion,office,docs,word,excel,powerpoint
home.ocr.title=OCR / Очистка сканирования home.ocr.title=OCR / Очистка сканирования
home.ocr.desc=Очистка сканирования и обнаружение текста на изображениях в PDF-файле и повторно добавляет его как текст. home.ocr.desc=Очистка сканирования и обнаружение текста на изображениях в PDF-файле и повторно добавляет его как текст.
##########################
### TODO: Translate ###
##########################
ocr.tags=recognition,text,image,scan,read,identify,detection,editable
home.extractImages.title=Извлечь изображения home.extractImages.title=Извлечь изображения
home.extractImages.desc=Извлекает все изображения из PDF и сохраняет их в zip home.extractImages.desc=Извлекает все изображения из PDF и сохраняет их в zip
##########################
### TODO: Translate ###
##########################
extractImages.tags=picture,photo,save,archive,zip,capture,grab
home.pdfToPDFA.title=PDF в PDF/A home.pdfToPDFA.title=PDF в PDF/A
home.pdfToPDFA.desc=Преобразование PDF в PDF/A для длительного хранения home.pdfToPDFA.desc=Преобразование PDF в PDF/A для длительного хранения
##########################
### TODO: Translate ###
##########################
pdfToPDFA.tags=archive,long-term,standard,conversion,storage,preservation
home.PDFToWord.title=PDF в Word home.PDFToWord.title=PDF в Word
home.PDFToWord.desc=Преобразование PDF в форматы Word (DOC, DOCX и ODT) home.PDFToWord.desc=Преобразование PDF в форматы Word (DOC, DOCX и ODT)
##########################
### TODO: Translate ###
##########################
PDFToWord.tags=doc,docx,odt,word,transformation,format,conversion,office,microsoft,docfile
home.PDFToPresentation.title=PDF в презентацию home.PDFToPresentation.title=PDF в презентацию
home.PDFToPresentation.desc=Преобразование PDF в форматы презентаций (PPT, PPTX и ODP) home.PDFToPresentation.desc=Преобразование PDF в форматы презентаций (PPT, PPTX и ODP)
##########################
### TODO: Translate ###
##########################
PDFToPresentation.tags=slides,show,office,microsoft
home.PDFToText.title=PDF в Text/RTF home.PDFToText.title=PDF в Text/RTF
home.PDFToText.desc=Преобразование PDF в текстовый или RTF формат home.PDFToText.desc=Преобразование PDF в текстовый или RTF формат
##########################
### TODO: Translate ###
##########################
PDFToText.tags=richformat,richtextformat,rich text format
home.PDFToHTML.title=PDF в HTML home.PDFToHTML.title=PDF в HTML
home.PDFToHTML.desc=Преобразование PDF в формат HTML home.PDFToHTML.desc=Преобразование PDF в формат HTML
##########################
### TODO: Translate ###
##########################
PDFToHTML.tags=web content,browser friendly
home.PDFToXML.title=PDF в XML home.PDFToXML.title=PDF в XML
home.PDFToXML.desc=Преобразование PDF в формат XML home.PDFToXML.desc=Преобразование PDF в формат XML
##########################
### TODO: Translate ###
##########################
PDFToXML.tags=data-extraction,structured-content,interop,transformation,convert
home.ScannerImageSplit.title=Обнаружение/разделение отсканированных фотографий home.ScannerImageSplit.title=Обнаружение/разделение отсканированных фотографий
home.ScannerImageSplit.desc=Разделяет несколько фотографий из фото/PDF home.ScannerImageSplit.desc=Разделяет несколько фотографий из фото/PDF
##########################
### TODO: Translate ###
##########################
ScannerImageSplit.tags=separate,auto-detect,scans,multi-photo,organize
home.sign.title=Подпись home.sign.title=Подпись
home.sign.desc=Добавляет подпись в PDF с помощью рисунка, текста или изображения home.sign.desc=Добавляет подпись в PDF с помощью рисунка, текста или изображения
##########################
### TODO: Translate ###
##########################
sign.tags=authorize,initials,drawn-signature,text-sign,image-signature
home.flatten.title=Сглаживание home.flatten.title=Сглаживание
home.flatten.desc=Удалить все интерактивные элементы и формы из PDF home.flatten.desc=Удалить все интерактивные элементы и формы из PDF
##########################
### TODO: Translate ###
##########################
flatten.tags=static,deactivate,non-interactive,streamline
home.repair.title=Ремонт home.repair.title=Ремонт
home.repair.desc=Пытается восстановить поврежденный/сломанный PDF home.repair.desc=Пытается восстановить поврежденный/сломанный PDF
##########################
### TODO: Translate ###
##########################
repair.tags=fix,restore,correction,recover
home.removeBlanks.title=Удалить пустые страницы home.removeBlanks.title=Удалить пустые страницы
home.removeBlanks.desc=Обнаруживает и удаляет пустые страницы из документа home.removeBlanks.desc=Обнаруживает и удаляет пустые страницы из документа
##########################
### TODO: Translate ###
##########################
removeBlanks.tags=cleanup,streamline,non-content,organize
home.compare.title=Сравнение home.compare.title=Сравнение
home.compare.desc=Сравнивает и показывает различия между двумя PDF-документами home.compare.desc=Сравнивает и показывает различия между двумя PDF-документами
##########################
### TODO: Translate ###
##########################
compare.tags=differentiate,contrast,changes,analysis
downloadPdf=Скачать PDF home.certSign.title=Sign with Certificate
text=Текст home.certSign.desc=Signs a PDF with a Certificate/Key (PEM/P12)
font=Шрифт ##########################
selectFillter=-- Выбрать -- ### TODO: Translate ###
pageNum=номер страницы ##########################
certSign.tags=authenticate,PEM,P12,official,encrypt
home.pageLayout.title=Multi-Page Layout
home.pageLayout.desc=Merge multiple pages of a PDF document into a single page
##########################
### TODO: Translate ###
##########################
pageLayout.tags=merge,composite,single-view,organize
home.scalePages.title=Adjust page size/scale
home.scalePages.desc=Change the size/scale of page and/or its contents.
##########################
### TODO: Translate ###
##########################
scalePages.tags=resize,modify,dimension,adapt
home.pipeline.title=Pipeline (Advanced)
home.pipeline.desc=Run multiple actions on PDFs by defining pipeline scripts
##########################
### TODO: Translate ###
##########################
pipeline.tags=automate,sequence,scripted,batch-process
home.add-page-numbers.title=Add Page Numbers
home.add-page-numbers.desc=Add Page numbers throughout a document in a set location
##########################
### TODO: Translate ###
##########################
add-page-numbers.tags=paginate,label,organize,index
home.auto-rename.title=Auto Rename PDF File
home.auto-rename.desc=Auto renames a PDF file based on its detected header
##########################
### TODO: Translate ###
##########################
auto-rename.tags=auto-detect,header-based,organize,relabel
home.adjust-contrast.title=Adjust Colors/Contrast
home.adjust-contrast.desc=Adjust Contrast, Saturation and Brightness of a PDF
##########################
### TODO: Translate ###
##########################
adjust-contrast.tags=color-correction,tune,modify,enhance
home.crop.title=Crop PDF
home.crop.desc=Crop a PDF to reduce its size (maintains text!)
##########################
### TODO: Translate ###
##########################
crop.tags=trim,shrink,edit,shape
home.autoSplitPDF.title=Auto Split Pages
home.autoSplitPDF.desc=Auto Split Scanned PDF with physical scanned page splitter QR Code
##########################
### TODO: Translate ###
##########################
autoSplitPDF.tags=QR-based,separate,scan-segment,organize
home.sanitizePdf.title=Sanitize
home.sanitizePdf.desc=Remove scripts and other elements from PDF files
##########################
### TODO: Translate ###
##########################
sanitizePdf.tags=clean,secure,safe,remove-threats
##########################
### TODO: Translate ###
##########################
home.URLToPDF.title=URL/Website To PDF
home.URLToPDF.desc=Converts any http(s)URL to PDF
URLToPDF.tags=web-capture,save-page,web-to-doc,archive
##########################
### TODO: Translate ###
##########################
home.HTMLToPDF.title=HTML to PDF
home.HTMLToPDF.desc=Converts any HTML file or zip to PDF
HTMLToPDF.tags=markup,web-content,transformation,convert
###########################
# #
# WEB PAGES #
# #
###########################
#url-to-pdf
URLToPDF.title=URL To PDF
URLToPDF.header=URL To PDF
URLToPDF.submit=Convert
URLToPDF.credit=Uses WeasyPrint
#html-to-pdf
HTMLToPDF.title=HTML To PDF
HTMLToPDF.header=HTML To PDF
HTMLToPDF.help=Accepts HTML files and ZIPs containing html/css/images etc required
HTMLToPDF.submit=Convert
HTMLToPDF.credit=Uses WeasyPrint
#sanitizePDF
sanitizePDF.title=Sanitize PDF
sanitizePDF.header=Sanitize a PDF file
sanitizePDF.selectText.1=Remove JavaScript actions
sanitizePDF.selectText.2=Remove embedded files
sanitizePDF.selectText.3=Remove metadata
sanitizePDF.selectText.4=Remove links
sanitizePDF.selectText.5=Remove fonts
sanitizePDF.submit=Sanitize PDF
#addPageNumbers
addPageNumbers.title=Add Page Numbers
addPageNumbers.header=Add Page Numbers
addPageNumbers.selectText.1=Select PDF file:
addPageNumbers.selectText.2=Margin Size
addPageNumbers.selectText.3=Position
addPageNumbers.selectText.4=Starting Number
addPageNumbers.selectText.5=Pages to Number
addPageNumbers.selectText.6=Custom Text
addPageNumbers.submit=Add Page Numbers
#auto-rename
auto-rename.title=Auto Rename
auto-rename.header=Auto Rename PDF
auto-rename.submit=Auto Rename
#adjustContrast
adjustContrast.title=Adjust Contrast
adjustContrast.header=Adjust Contrast
adjustContrast.contrast=Contrast:
adjustContrast.brightness=Brightness:
adjustContrast.saturation=Saturation:
adjustContrast.download=Download
#crop
crop.title=Crop
crop.header=Crop Image
crop.submit=Submit
#autoSplitPDF
autoSplitPDF.title=Auto Split PDF
autoSplitPDF.header=Auto Split PDF
autoSplitPDF.description=Print, Insert, Scan, upload, and let us auto-separate your documents. No manual work sorting needed.
autoSplitPDF.selectText.1=Print out some divider sheets from below (Black and white is fine).
autoSplitPDF.selectText.2=Scan all your documents at once by inserting the divider sheet between them.
autoSplitPDF.selectText.3=Upload the single large scanned PDF file and let Stirling PDF handle the rest.
autoSplitPDF.selectText.4=Divider pages are automatically detected and removed, guaranteeing a neat final document.
autoSplitPDF.formPrompt=Submit PDF containing Stirling-PDF Page dividers:
autoSplitPDF.duplexMode=Duplex Mode (Front and back scanning)
autoSplitPDF.dividerDownload1=Download 'Auto Splitter Divider (minimal).pdf'
autoSplitPDF.dividerDownload2=Download 'Auto Splitter Divider (with instructions).pdf'
autoSplitPDF.submit=Submit
#pipeline
pipeline.title=Pipeline
#pageLayout
pageLayout.title=Multi Page Layout
pageLayout.header=Multi Page Layout
pageLayout.pagesPerSheet=Pages per sheet:
pageLayout.submit=Submit
#scalePages
scalePages.title=Adjust page-scale
scalePages.header=Adjust page-scale
scalePages.pageSize=Size of a page of the document.
scalePages.scaleFactor=Zoom level (crop) of a page.
scalePages.submit=Submit
#certSign
certSign.title=Подписание сертификата certSign.title=Подписание сертификата
certSign.header=Подпишите PDF своим сертификатом (работа в процессе) certSign.header=Подпишите PDF своим сертификатом (работа в процессе)
certSign.selectPDF=Выберите файл PDF для подписи: certSign.selectPDF=Выберите файл PDF для подписи:
@@ -145,6 +469,8 @@ certSign.location=Местоположение
certSign.name=Имя certSign.name=Имя
certSign.submit=Подписать PDF certSign.submit=Подписать PDF
#removeBlanks
removeBlanks.title=Удалить Пустые removeBlanks.title=Удалить Пустые
removeBlanks.header=Удалить Пустые Страницы removeBlanks.header=Удалить Пустые Страницы
removeBlanks.threshold=Порог: removeBlanks.threshold=Порог:
@@ -153,12 +479,16 @@ removeBlanks.whitePercent=Процент Белого (%):
removeBlanks.whitePercentDesc=Общий процент белого на странице, для удаления removeBlanks.whitePercentDesc=Общий процент белого на странице, для удаления
removeBlanks.submit=Удалить Пустые removeBlanks.submit=Удалить Пустые
#compare
compare.title=Сравнение compare.title=Сравнение
compare.header=Сравнение PDFы compare.header=Сравнение PDFы
compare.document.1=Документ 1 compare.document.1=Документ 1
compare.document.2=Документ 2 compare.document.2=Документ 2
compare.submit=Сравнить compare.submit=Сравнить
#sign
sign.title=Подпись sign.title=Подпись
sign.header=Подписать PDFы sign.header=Подписать PDFы
sign.upload=Загрузить изображение sign.upload=Загрузить изображение
@@ -167,14 +497,20 @@ sign.text=Ввод текста
sign.clear=Очистить sign.clear=Очистить
sign.add=Добавить sign.add=Добавить
#repair
repair.title=Ремонт repair.title=Ремонт
repair.header=Ремонт PDF ов repair.header=Ремонт PDF ов
repair.submit=Ремонт repair.submit=Ремонт
#flatten
flatten.title=Сглаживание flatten.title=Сглаживание
flatten.header=Сглаживание PDF ов flatten.header=Сглаживание PDF ов
flatten.submit=Сгладить flatten.submit=Сгладить
#ScannerImageSplit
ScannerImageSplit.selectText.1=Угловой порог: ScannerImageSplit.selectText.1=Угловой порог:
ScannerImageSplit.selectText.2=Устанавливает минимальный абсолютный угол, необходимый для поворота изображения (по умолчанию: 10). ScannerImageSplit.selectText.2=Устанавливает минимальный абсолютный угол, необходимый для поворота изображения (по умолчанию: 10).
ScannerImageSplit.selectText.3=Допуск: ScannerImageSplit.selectText.3=Допуск:
@@ -186,19 +522,6 @@ ScannerImageSplit.selectText.8=Устанавливает минимальный
ScannerImageSplit.selectText.9=Размер границы: ScannerImageSplit.selectText.9=Размер границы:
ScannerImageSplit.selectText.10=Устанавливает размер добавляемой и удаляемой границы, чтобы предотвратить появление белых границ на выходе (по умолчанию: 1). ScannerImageSplit.selectText.10=Устанавливает размер добавляемой и удаляемой границы, чтобы предотвратить появление белых границ на выходе (по умолчанию: 1).
navbar.settings=Настройки
settings.title=Настройки
settings.update=Доступно обновление
settings.appVersion=Версия приложения:
settings.downloadOption.title=Выберите вариант загрузки (для загрузки одного файла без zip):
settings.downloadOption.1=Открыть в том же окне
settings.downloadOption.2=Открыть в новом окне
settings.downloadOption.3=Загрузить файл
settings.zipThreshold=Zip-файлы, когда количество загруженных файлов превышает
#OCR #OCR
ocr.title=OCR / Очистка сканирования ocr.title=OCR / Очистка сканирования
@@ -220,7 +543,7 @@ ocr.credit=Этот сервис использует OCRmyPDF и Tesseract дл
ocr.submit=Обработка PDF с OCR ocr.submit=Обработка PDF с OCR
#extractImages
extractImages.title=Извлечь изображения extractImages.title=Извлечь изображения
extractImages.header=Извлечь изображения extractImages.header=Извлечь изображения
extractImages.selectText=Выберите формат изображения для преобразования извлеченных изображений в extractImages.selectText=Выберите формат изображения для преобразования извлеченных изображений в
@@ -251,6 +574,7 @@ compress.submit=Сжать
addImage.title=Добавить изображение addImage.title=Добавить изображение
addImage.header=Добавить изображение в PDF addImage.header=Добавить изображение в PDF
addImage.everyPage=Каждая страница? addImage.everyPage=Каждая страница?
addImage.upload=Добавить изображение
addImage.submit=Добавить изображение addImage.submit=Добавить изображение
@@ -259,11 +583,13 @@ merge.title=Объединить
merge.header=Объединение нескольких PDF-файлов (2+) merge.header=Объединение нескольких PDF-файлов (2+)
merge.submit=Объединить merge.submit=Объединить
#pdfOrganiser #pdfOrganiser
pdfOrganiser.title=Организатор страниц pdfOrganiser.title=Организатор страниц
pdfOrganiser.header=Организатор PDF-страниц pdfOrganiser.header=Организатор PDF-страниц
pdfOrganiser.submit=Переупорядочить страницы pdfOrganiser.submit=Переупорядочить страницы
#multiTool #multiTool
multiTool.title=Мультиинструмент PDF multiTool.title=Мультиинструмент PDF
multiTool.header=Мультиинструмент PDF multiTool.header=Мультиинструмент PDF
@@ -275,6 +601,7 @@ pageRemover.header=Удаление PDF-страниц
pageRemover.pagesToDelete=Страницы для удаления (введите список номеров страниц через запятую): pageRemover.pagesToDelete=Страницы для удаления (введите список номеров страниц через запятую):
pageRemover.submit=Удалить страницы pageRemover.submit=Удалить страницы
#rotate #rotate
rotate.title=Повернуть PDF rotate.title=Повернуть PDF
rotate.header=Повернуть PDF rotate.header=Повернуть PDF
@@ -282,8 +609,6 @@ rotate.selectAngle=Выберите угол поворота (кратный 90
rotate.submit=Повернуть rotate.submit=Повернуть
#merge #merge
split.title=Разделить PDF split.title=Разделить PDF
split.header=Разделить PDF split.header=Разделить PDF
@@ -309,6 +634,7 @@ imageToPDF.selectText.3=Многофайловая логика (включен
imageToPDF.selectText.4=Объединить в один PDF imageToPDF.selectText.4=Объединить в один PDF
imageToPDF.selectText.5=Преобразование в отдельные PDF-файлы imageToPDF.selectText.5=Преобразование в отдельные PDF-файлы
#pdfToImage #pdfToImage
pdfToImage.title=PDF в изображение pdfToImage.title=PDF в изображение
pdfToImage.header=PDF в изображение pdfToImage.header=PDF в изображение
@@ -322,6 +648,7 @@ pdfToImage.grey=Оттенки серого
pdfToImage.blackwhite=Черно-белый (может потерять данные!) pdfToImage.blackwhite=Черно-белый (может потерять данные!)
pdfToImage.submit=Конвертировать pdfToImage.submit=Конвертировать
#addPassword #addPassword
addPassword.title=Добавить пароль addPassword.title=Добавить пароль
addPassword.header=Добавить пароль (зашифровать) addPassword.header=Добавить пароль (зашифровать)
@@ -338,8 +665,12 @@ addPassword.selectText.10=Предотвратить модификацию
addPassword.selectText.11=Запретить модификацию аннотаций addPassword.selectText.11=Запретить модификацию аннотаций
addPassword.selectText.12=Запретить печать addPassword.selectText.12=Запретить печать
addPassword.selectText.13=Запретить печать разных форматов addPassword.selectText.13=Запретить печать разных форматов
addPassword.selectText.14=Owner Password
addPassword.selectText.15=Restricts what can be done with the document once it is opened (Not supported by all readers)
addPassword.selectText.16=Restricts the opening of the document itself
addPassword.submit=Шифровать addPassword.submit=Шифровать
#watermark #watermark
watermark.title=Добавить водяной знак watermark.title=Добавить водяной знак
watermark.header=Добавить водяной знак watermark.header=Добавить водяной знак
@@ -352,6 +683,7 @@ watermark.selectText.6=heightSpacer (пробел между каждым вод
watermark.selectText.7=Непрозрачность (0% - 100%): watermark.selectText.7=Непрозрачность (0% - 100%):
watermark.submit=Добавить водяной знак watermark.submit=Добавить водяной знак
#remove-watermark #remove-watermark
remove-watermark.title=Удалить водяной знак remove-watermark.title=Удалить водяной знак
remove-watermark.header=Удалить водяной знак remove-watermark.header=Удалить водяной знак
@@ -359,6 +691,7 @@ remove-watermark.selectText.1=Выберите PDF, чтобы удалить в
remove-watermark.selectText.2=Текст водяного знака: remove-watermark.selectText.2=Текст водяного знака:
remove-watermark.submit=Удалить водяной знак remove-watermark.submit=Удалить водяной знак
#Change permissions #Change permissions
permissions.title=Изменить разрешения permissions.title=Изменить разрешения
permissions.header=Изменить разрешения permissions.header=Изменить разрешения
@@ -375,6 +708,7 @@ permissions.selectText.9=Запретить печать
permissions.selectText.10=Запретить печать разных форматов permissions.selectText.10=Запретить печать разных форматов
permissions.submit=Изменить permissions.submit=Изменить
#remove password #remove password
removePassword.title=Удалить пароль removePassword.title=Удалить пароль
removePassword.header=Удалить пароль (Расшифровка) removePassword.header=Удалить пароль (Расшифровка)
@@ -382,7 +716,9 @@ removePassword.selectText.1=Выберите PDF для расшифровки
removePassword.selectText.2=Пароль removePassword.selectText.2=Пароль
removePassword.submit=Удалить removePassword.submit=Удалить
changeMetadata.title=Изменить метаданные
#changeMetadata
changeMetadata.title=Заголовок:
changeMetadata.header=Изменить метаданные changeMetadata.header=Изменить метаданные
changeMetadata.selectText.1=Пожалуйста, отредактируйте переменные, которые вы хотите изменить changeMetadata.selectText.1=Пожалуйста, отредактируйте переменные, которые вы хотите изменить
changeMetadata.selectText.2=Удалить все метаданные changeMetadata.selectText.2=Удалить все метаданные
@@ -400,27 +736,30 @@ changeMetadata.selectText.4=Другие метаданные:
changeMetadata.selectText.5=Добавить пользовательскую запись метаданных changeMetadata.selectText.5=Добавить пользовательскую запись метаданных
changeMetadata.submit=Изменить changeMetadata.submit=Изменить
#xlsToPdf
xlsToPdf.title=Excel в PDF xlsToPdf.title=Excel в PDF
xlsToPdf.header=Excel в PDF xlsToPdf.header=Excel в PDF
xlsToPdf.selectText.1=Выберите книгу Excel XLS или XLSX для преобразования xlsToPdf.selectText.1=Выберите книгу Excel XLS или XLSX для преобразования
xlsToPdf.convert=Конвертировать xlsToPdf.convert=Конвертировать
#pdfToPDFA
pdfToPDFA.title=PDF в PDF/A pdfToPDFA.title=PDF в PDF/A
pdfToPDFA.header=PDF в PDF/A pdfToPDFA.header=PDF в PDF/A
pdfToPDFA.credit=Этот сервис использует OCRmyPDF для преобразования PDF/A pdfToPDFA.credit=Этот сервис использует OCRmyPDF для преобразования PDF/A
pdfToPDFA.submit=Конвертировать pdfToPDFA.submit=Конвертировать
#PDFToWord
PDFToWord.title=PDF в Word PDFToWord.title=PDF в Word
PDFToWord.header=PDF в Word PDFToWord.header=PDF в Word
PDFToWord.selectText.1=Формат выходного файла PDFToWord.selectText.1=Формат выходного файла
PDFToWord.credit=Этот сервис использует LibreOffice для преобразования файлов. PDFToWord.credit=Этот сервис использует LibreOffice для преобразования файлов.
PDFToWord.submit=Конвертировать PDFToWord.submit=Конвертировать
#PDFToPresentation
PDFToPresentation.title=PDF в Презентацию PDFToPresentation.title=PDF в Презентацию
PDFToPresentation.header=PDF в Презентацию PDFToPresentation.header=PDF в Презентацию
PDFToPresentation.selectText.1=Формат выходного файла PDFToPresentation.selectText.1=Формат выходного файла
@@ -428,6 +767,7 @@ PDFToPresentation.credit=Этот сервис использует LibreOffice
PDFToPresentation.submit=Конвертировать PDFToPresentation.submit=Конвертировать
#PDFToText
PDFToText.title=PDF в Text/RTF PDFToText.title=PDF в Text/RTF
PDFToText.header=PDF в Text/RTF PDFToText.header=PDF в Text/RTF
PDFToText.selectText.1=Формат выходного файла PDFToText.selectText.1=Формат выходного файла
@@ -435,24 +775,15 @@ PDFToText.credit=Этот сервис использует LibreOffice для
PDFToText.submit=Конвертировать PDFToText.submit=Конвертировать
#PDFToHTML
PDFToHTML.title=PDF в HTML PDFToHTML.title=PDF в HTML
PDFToHTML.header=PDF в HTML PDFToHTML.header=PDF в HTML
PDFToHTML.credit=Этот сервис использует LibreOffice для преобразования файлов. PDFToHTML.credit=Этот сервис использует LibreOffice для преобразования файлов.
PDFToHTML.submit=Конвертировать PDFToHTML.submit=Конвертировать
#PDFToXML
PDFToXML.title=PDF в XML PDFToXML.title=PDF в XML
PDFToXML.header=PDF в XML PDFToXML.header=PDF в XML
PDFToXML.credit=Этот сервис использует LibreOffice для преобразования файлов. PDFToXML.credit=Этот сервис использует LibreOffice для преобразования файлов.
PDFToXML.submit=Конвертировать PDFToXML.submit=Конвертировать

View File

@@ -1,7 +1,7 @@
########### ###########
# Generisk # # Generic #
########### ###########
# riktningen som språket skrivs (ltr = vänster till höger, rtl = höger till vänster) # the direction that the language is written (ltr=left to right, rtl = right to left)
language.direction=ltr language.direction=ltr
pdfPrompt=Välj PDF(er) pdfPrompt=Välj PDF(er)
@@ -12,7 +12,7 @@ genericSubmit=Skicka
processTimeWarning=Varning: Denna process kan ta upp till en minut beroende på filstorlek processTimeWarning=Varning: Denna process kan ta upp till en minut beroende på filstorlek
pageOrderPrompt=Sidordning (Ange en kommaseparerad lista med sidnummer) : pageOrderPrompt=Sidordning (Ange en kommaseparerad lista med sidnummer) :
goToPage=Gå till goToPage=Gå till
sant=Sant true=True
false=Falskt false=Falskt
unknown=Okänt unknown=Okänt
save=Spara save=Spara
@@ -20,117 +20,441 @@ close=Stäng
filesSelected=filer valda filesSelected=filer valda
noFavourites=Inga favoriter har lagts till noFavourites=Inga favoriter har lagts till
bored=Utråkad att vänta? bored=Utråkad att vänta?
############# alphabet=Alfabet
# HEMSIDA #
#############
home.desc=Din lokala one-stop-shop för alla dina PDF-behov.
navbar.convert=Konvertera
navbar.security=Säkerhet
navbar.other=Annat
navbar.darkmode=Mörkt läge
navbar.pageOps=Sidoperationer
home.multiTool.title=PDF Multi-verktyg
home.multiTool.desc=Sammanfoga, rotera, ordna om och ta bort sidor
home.merge.title=Sammanfoga
home.merge.desc=Sammanfoga enkelt flera PDF-filer till en.
home.split.title=Dela
home.split.desc=Dela upp PDF-filer i flera dokument
home.rotate.title=Rotera
home.rotate.desc=Rotera enkelt dina PDF-filer.
home.imageToPdf.title=Bild till PDF
home.imageToPdf.desc=Konvertera en bild (PNG, JPEG, GIF) till PDF.
home.pdfToImage.title=PDF till bild
home.pdfToImage.desc=Konvertera en PDF till en bild. (PNG, JPEG, GIF)
home.pdfOrganiser.title=Ordna
home.pdfOrganiser.desc=Ta bort/ordna om sidor i valfri ordning
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.watermark.title=Lägg till vattenstämpel
home.watermark.desc=Lägg till en anpassad vattenstämpel till ditt PDF-dokument.
home.remove-watermark.title=Ta bort vattenstämpel
home.remove-watermark.desc=Ta bort vattenstämplar från ditt PDF-dokument.
home.permissions.title=Ändra behörigheter
home.permissions.desc=Ändra behörigheterna för ditt PDF-dokument
home.removePages.title=Ta bort
home.removePages.desc=Ta bort oönskade sidor från ditt PDF-dokument.
home.addPassword.title=Lägg till lösenord
home.addPassword.desc=Kryptera ditt PDF-dokument med ett lösenord.
home.removePassword.title=Ta bort lösenord
home.removePassword.desc=Ta bort lösenordsskydd från ditt PDF-dokument.
home.compressPdfs.title=Komprimera
home.compressPdfs.desc=Komprimera PDF-filer för att minska deras filstorlek.
home.changeMetadata.title=Ändra metadata
home.changeMetadata.desc=Ändra/ta bort/lägg till metadata från ett PDF-dokument
home.fileToPDF.title=Konvertera fil till PDF
home.fileToPDF.desc=Konvertera nästan vilken fil som helst till PDF (DOCX, PNG, XLS, PPT, TXT och mer)
home.ocr.title=OCR / Rensningsskanningar
home.ocr.desc=Cleanup skannar och upptäcker text från bilder i en PDF och lägger till den igen som text.
home.extractImages.title=Extrahera bilder
home.extractImages.desc=Extraherar alla bilder från en PDF och sparar dem till zip
home.pdfToPDFA.title=PDF till PDF/A
home.pdfToPDFA.desc=Konvertera PDF till PDF/A för långtidslagring
home.PDFToWord.title=PDF till Word
home.PDFToWord.desc=Konvertera PDF till Word-format (DOC, DOCX och ODT)
home.PDFToPresentation.title=PDF till presentation
home.PDFToPresentation.desc=Konvertera PDF till presentationsformat (PPT, PPTX och ODP)
home.PDFToText.title=PDF till text/RTF
home.PDFToText.desc=Konvertera PDF till text- eller RTF-format
home.PDFToHTML.title=PDF till HTML
home.PDFToHTML.desc=Konvertera PDF till HTML-format
home.PDFToXML.title=PDF till XML
home.PDFToXML.desc=Konvertera PDF till XML-format
home.ScannerImageSplit.title=Detektera/Dela skannade foton
home.ScannerImageSplit.desc=Delar flera foton från ett foto/PDF
home.sign.title=Signera
home.sign.desc=Lägger till signatur till PDF genom ritning, text eller bild
home.flatten.title=Platta till
home.flatten.desc=Ta bort alla interaktiva element och formulär från en PDF
home.repair.title=Reparera
home.repair.desc=Försöker reparera en korrupt/trasig PDF
home.removeBlanks.title=Ta bort tomma sidor
home.removeBlanks.desc=Känner av och tar bort tomma sidor från ett dokument
home.compare.title=Jämför
home.compare.desc=Jämför och visar skillnaderna mellan 2 PDF-dokument
downloadPdf=Ladda ner PDF downloadPdf=Ladda ner PDF
text=Text text=Text
font=Teckensnitt font=Teckensnitt
selectFillter=-- Välj -- selectFillter=-- Välj --
pageNum=Sidnummer pageNum=Sidnummer
sizes.small=Small
sizes.medium=Medium
sizes.large=Large
sizes.x-large=X-Large
error.pdfPassword=The PDF Document is passworded and either the password was not provided or was incorrect
#############
# NAVBAR #
#############
navbar.convert=Konvertera
navbar.security=Säkerhet
navbar.other=Annat
navbar.darkmode=Mörkt läge
navbar.pageOps=Sidoperationer
navbar.settings=Inställningar
#############
# SETTINGS #
#############
settings.title=Inställningar
settings.update=Uppdatering tillgänglig
settings.appVersion=Appversion:
settings.downloadOption.title=Välj nedladdningsalternativ (för nedladdning av en fil utan zip):
settings.downloadOption.1=Öppnas i samma fönster
settings.downloadOption.2=Öppna i nytt fönster
settings.downloadOption.3=Ladda ner fil
settings.zipThreshold=Zip-filer när antalet nedladdade filer överskrider
#############
# HOME-PAGE #
#############
home.desc=Din lokala one-stop-shop för alla dina PDF-behov.
home.multiTool.title=PDF Multi-verktyg
home.multiTool.desc=Sammanfoga, rotera, ordna om och ta bort sidor
multiTool.tags=Multi Tool,Multi operation,UI,click drag,front end,client side
home.merge.title=Sammanfoga
home.merge.desc=Sammanfoga enkelt flera PDF-filer till en.
merge.tags=merge,Page operations,Back end,server side
home.split.title=Dela
home.split.desc=Dela upp PDF-filer i flera dokument
##########################
### TODO: Translate ###
##########################
split.tags=Page operations,divide,Multi Page,cut,server side
home.rotate.title=Rotera
home.rotate.desc=Rotera enkelt dina PDF-filer.
##########################
### TODO: Translate ###
##########################
rotate.tags=server side
home.imageToPdf.title=Bild till PDF
home.imageToPdf.desc=Konvertera en bild (PNG, JPEG, GIF) till PDF.
##########################
### TODO: Translate ###
##########################
imageToPdf.tags=conversion,img,jpg,picture,photo
home.pdfToImage.title=PDF till bild
home.pdfToImage.desc=Konvertera en PDF till en bild. (PNG, JPEG, GIF)
##########################
### TODO: Translate ###
##########################
pdfToImage.tags=conversion,img,jpg,picture,photo
home.pdfOrganiser.title=Ordna
home.pdfOrganiser.desc=Ta bort/ordna om sidor i valfri ordning
##########################
### TODO: Translate ###
##########################
pdfOrganiser.tags=duplex,even,odd,sort,move
home.addImage.title=Lägg till bild
home.addImage.desc=Lägger till en bild på en angiven plats i PDF:en (pågår arbete)
##########################
### TODO: Translate ###
##########################
addImage.tags=img,jpg,picture,photo
home.watermark.title=Lägg till vattenstämpel
home.watermark.desc=Lägg till en anpassad vattenstämpel till ditt PDF-dokument.
##########################
### TODO: Translate ###
##########################
watermark.tags=Text,repeating,label,own,copyright,trademark,img,jpg,picture,photo
home.permissions.title=Ändra behörigheter
home.permissions.desc=Ändra behörigheterna för ditt PDF-dokument
##########################
### TODO: Translate ###
##########################
permissions.tags=read,write,edit,print
home.removePages.title=Ta bort
home.removePages.desc=Ta bort oönskade sidor från ditt PDF-dokument.
##########################
### TODO: Translate ###
##########################
removePages.tags=Remove pages,delete pages
home.addPassword.title=Lägg till lösenord
home.addPassword.desc=Kryptera ditt PDF-dokument med ett lösenord.
##########################
### TODO: Translate ###
##########################
addPassword.tags=secure,security
home.removePassword.title=Ta bort lösenord
home.removePassword.desc=Ta bort lösenordsskydd från ditt PDF-dokument.
##########################
### TODO: Translate ###
##########################
removePassword.tags=secure,Decrypt,security,unpassword,delete password
home.compressPdfs.title=Komprimera
home.compressPdfs.desc=Komprimera PDF-filer för att minska deras filstorlek.
##########################
### TODO: Translate ###
##########################
compressPdfs.tags=squish,small,tiny
home.changeMetadata.title=Ändra metadata
home.changeMetadata.desc=Ändra/ta bort/lägg till metadata från ett PDF-dokument
##########################
### TODO: Translate ###
##########################
changeMetadata.tags==Title,author,date,creation,time,publisher,producer,stats
home.fileToPDF.title=Konvertera fil till PDF
home.fileToPDF.desc=Konvertera nästan vilken fil som helst till PDF (DOCX, PNG, XLS, PPT, TXT och mer)
##########################
### TODO: Translate ###
##########################
fileToPDF.tags=transformation,format,document,picture,slide,text,conversion,office,docs,word,excel,powerpoint
home.ocr.title=OCR / Rensningsskanningar
home.ocr.desc=Cleanup skannar och upptäcker text från bilder i en PDF och lägger till den igen som text.
##########################
### TODO: Translate ###
##########################
ocr.tags=recognition,text,image,scan,read,identify,detection,editable
home.extractImages.title=Extrahera bilder
home.extractImages.desc=Extraherar alla bilder från en PDF och sparar dem till zip
##########################
### TODO: Translate ###
##########################
extractImages.tags=picture,photo,save,archive,zip,capture,grab
home.pdfToPDFA.title=PDF till PDF/A
home.pdfToPDFA.desc=Konvertera PDF till PDF/A för långtidslagring
##########################
### TODO: Translate ###
##########################
pdfToPDFA.tags=archive,long-term,standard,conversion,storage,preservation
home.PDFToWord.title=PDF till Word
home.PDFToWord.desc=Konvertera PDF till Word-format (DOC, DOCX och ODT)
##########################
### TODO: Translate ###
##########################
PDFToWord.tags=doc,docx,odt,word,transformation,format,conversion,office,microsoft,docfile
home.PDFToPresentation.title=PDF till presentation
home.PDFToPresentation.desc=Konvertera PDF till presentationsformat (PPT, PPTX och ODP)
##########################
### TODO: Translate ###
##########################
PDFToPresentation.tags=slides,show,office,microsoft
home.PDFToText.title=PDF till text/RTF
home.PDFToText.desc=Konvertera PDF till text- eller RTF-format
##########################
### TODO: Translate ###
##########################
PDFToText.tags=richformat,richtextformat,rich text format
home.PDFToHTML.title=PDF till HTML
home.PDFToHTML.desc=Konvertera PDF till HTML-format
##########################
### TODO: Translate ###
##########################
PDFToHTML.tags=web content,browser friendly
home.PDFToXML.title=PDF till XML
home.PDFToXML.desc=Konvertera PDF till XML-format
##########################
### TODO: Translate ###
##########################
PDFToXML.tags=data-extraction,structured-content,interop,transformation,convert
home.ScannerImageSplit.title=Detektera/Dela skannade foton
home.ScannerImageSplit.desc=Delar flera foton från ett foto/PDF
##########################
### TODO: Translate ###
##########################
ScannerImageSplit.tags=separate,auto-detect,scans,multi-photo,organize
home.sign.title=Signera
home.sign.desc=Lägger till signatur till PDF genom ritning, text eller bild
##########################
### TODO: Translate ###
##########################
sign.tags=authorize,initials,drawn-signature,text-sign,image-signature
home.flatten.title=Platta till
home.flatten.desc=Ta bort alla interaktiva element och formulär från en PDF
##########################
### TODO: Translate ###
##########################
flatten.tags=static,deactivate,non-interactive,streamline
home.repair.title=Reparera
home.repair.desc=Försöker reparera en korrupt/trasig PDF
##########################
### TODO: Translate ###
##########################
repair.tags=fix,restore,correction,recover
home.removeBlanks.title=Ta bort tomma sidor
home.removeBlanks.desc=Känner av och tar bort tomma sidor från ett dokument
##########################
### TODO: Translate ###
##########################
removeBlanks.tags=cleanup,streamline,non-content,organize
home.compare.title=Jämför
home.compare.desc=Jämför och visar skillnaderna mellan 2 PDF-dokument
##########################
### TODO: Translate ###
##########################
compare.tags=differentiate,contrast,changes,analysis
home.certSign.title=Sign with Certificate
home.certSign.desc=Signs a PDF with a Certificate/Key (PEM/P12)
##########################
### TODO: Translate ###
##########################
certSign.tags=authenticate,PEM,P12,official,encrypt
home.pageLayout.title=Multi-Page Layout
home.pageLayout.desc=Merge multiple pages of a PDF document into a single page
##########################
### TODO: Translate ###
##########################
pageLayout.tags=merge,composite,single-view,organize
home.scalePages.title=Adjust page size/scale
home.scalePages.desc=Change the size/scale of page and/or its contents.
##########################
### TODO: Translate ###
##########################
scalePages.tags=resize,modify,dimension,adapt
home.pipeline.title=Pipeline (Advanced)
home.pipeline.desc=Run multiple actions on PDFs by defining pipeline scripts
##########################
### TODO: Translate ###
##########################
pipeline.tags=automate,sequence,scripted,batch-process
home.add-page-numbers.title=Add Page Numbers
home.add-page-numbers.desc=Add Page numbers throughout a document in a set location
##########################
### TODO: Translate ###
##########################
add-page-numbers.tags=paginate,label,organize,index
home.auto-rename.title=Auto Rename PDF File
home.auto-rename.desc=Auto renames a PDF file based on its detected header
##########################
### TODO: Translate ###
##########################
auto-rename.tags=auto-detect,header-based,organize,relabel
home.adjust-contrast.title=Adjust Colors/Contrast
home.adjust-contrast.desc=Adjust Contrast, Saturation and Brightness of a PDF
##########################
### TODO: Translate ###
##########################
adjust-contrast.tags=color-correction,tune,modify,enhance
home.crop.title=Crop PDF
home.crop.desc=Crop a PDF to reduce its size (maintains text!)
##########################
### TODO: Translate ###
##########################
crop.tags=trim,shrink,edit,shape
home.autoSplitPDF.title=Auto Split Pages
home.autoSplitPDF.desc=Auto Split Scanned PDF with physical scanned page splitter QR Code
##########################
### TODO: Translate ###
##########################
autoSplitPDF.tags=QR-based,separate,scan-segment,organize
home.sanitizePdf.title=Sanitize
home.sanitizePdf.desc=Remove scripts and other elements from PDF files
##########################
### TODO: Translate ###
##########################
sanitizePdf.tags=clean,secure,safe,remove-threats
##########################
### TODO: Translate ###
##########################
home.URLToPDF.title=URL/Website To PDF
home.URLToPDF.desc=Converts any http(s)URL to PDF
URLToPDF.tags=web-capture,save-page,web-to-doc,archive
##########################
### TODO: Translate ###
##########################
home.HTMLToPDF.title=HTML to PDF
home.HTMLToPDF.desc=Converts any HTML file or zip to PDF
HTMLToPDF.tags=markup,web-content,transformation,convert
###########################
# #
# WEB PAGES #
# #
###########################
#url-to-pdf
URLToPDF.title=URL To PDF
URLToPDF.header=URL To PDF
URLToPDF.submit=Convert
URLToPDF.credit=Uses WeasyPrint
#html-to-pdf
HTMLToPDF.title=HTML To PDF
HTMLToPDF.header=HTML To PDF
HTMLToPDF.help=Accepts HTML files and ZIPs containing html/css/images etc required
HTMLToPDF.submit=Convert
HTMLToPDF.credit=Uses WeasyPrint
#sanitizePDF
sanitizePDF.title=Sanitize PDF
sanitizePDF.header=Sanitize a PDF file
sanitizePDF.selectText.1=Remove JavaScript actions
sanitizePDF.selectText.2=Remove embedded files
sanitizePDF.selectText.3=Remove metadata
sanitizePDF.selectText.4=Remove links
sanitizePDF.selectText.5=Remove fonts
sanitizePDF.submit=Sanitize PDF
#addPageNumbers
addPageNumbers.title=Add Page Numbers
addPageNumbers.header=Add Page Numbers
addPageNumbers.selectText.1=Select PDF file:
addPageNumbers.selectText.2=Margin Size
addPageNumbers.selectText.3=Position
addPageNumbers.selectText.4=Starting Number
addPageNumbers.selectText.5=Pages to Number
addPageNumbers.selectText.6=Custom Text
addPageNumbers.submit=Add Page Numbers
#auto-rename
auto-rename.title=Auto Rename
auto-rename.header=Auto Rename PDF
auto-rename.submit=Auto Rename
#adjustContrast
adjustContrast.title=Adjust Contrast
adjustContrast.header=Adjust Contrast
adjustContrast.contrast=Contrast:
adjustContrast.brightness=Brightness:
adjustContrast.saturation=Saturation:
adjustContrast.download=Download
#crop
crop.title=Crop
crop.header=Crop Image
crop.submit=Submit
#autoSplitPDF
autoSplitPDF.title=Auto Split PDF
autoSplitPDF.header=Auto Split PDF
autoSplitPDF.description=Print, Insert, Scan, upload, and let us auto-separate your documents. No manual work sorting needed.
autoSplitPDF.selectText.1=Print out some divider sheets from below (Black and white is fine).
autoSplitPDF.selectText.2=Scan all your documents at once by inserting the divider sheet between them.
autoSplitPDF.selectText.3=Upload the single large scanned PDF file and let Stirling PDF handle the rest.
autoSplitPDF.selectText.4=Divider pages are automatically detected and removed, guaranteeing a neat final document.
autoSplitPDF.formPrompt=Submit PDF containing Stirling-PDF Page dividers:
autoSplitPDF.duplexMode=Duplex Mode (Front and back scanning)
autoSplitPDF.dividerDownload1=Download 'Auto Splitter Divider (minimal).pdf'
autoSplitPDF.dividerDownload2=Download 'Auto Splitter Divider (with instructions).pdf'
autoSplitPDF.submit=Submit
#pipeline
pipeline.title=Pipeline
#pageLayout
pageLayout.title=Multi Page Layout
pageLayout.header=Multi Page Layout
pageLayout.pagesPerSheet=Pages per sheet:
pageLayout.submit=Submit
#scalePages
scalePages.title=Adjust page-scale
scalePages.header=Adjust page-scale
scalePages.pageSize=Size of a page of the document.
scalePages.scaleFactor=Zoom level (crop) of a page.
scalePages.submit=Submit
#certSign
certSign.title=Certifikatsignering certSign.title=Certifikatsignering
certSign.header=Skriv under en PDF med ditt certifikat (Pågående arbete) certSign.header=Skriv under en PDF med ditt certifikat (Pågående arbete)
certSign.selectPDF=Välj en PDF-fil för signering: certSign.selectPDF=Välj en PDF-fil för signering:
@@ -145,6 +469,8 @@ certSign.location=Plats
certSign.name=Namn certSign.name=Namn
certSign.submit=Skriv under PDF certSign.submit=Skriv under PDF
#removeBlanks
removeBlanks.title=Ta bort tomrum removeBlanks.title=Ta bort tomrum
removeBlanks.header=Ta bort tomma sidor removeBlanks.header=Ta bort tomma sidor
removeBlanks.threshold=Tröskel: removeBlanks.threshold=Tröskel:
@@ -153,12 +479,16 @@ removeBlanks.whitePercent=Vit procent (%):
removeBlanks.whitePercentDesc=Procentandel av sidan som måste vara vit för att kunna tas bort removeBlanks.whitePercentDesc=Procentandel av sidan som måste vara vit för att kunna tas bort
removeBlanks.submit=Ta bort tomrum removeBlanks.submit=Ta bort tomrum
#compare
compare.title=Jämför compare.title=Jämför
compare.header=Jämför PDF-filer compare.header=Jämför PDF-filer
compare.document.1=Dokument 1 compare.document.1=Dokument 1
compare.document.2=Dokument 2 compare.document.2=Dokument 2
compare.submit=Jämför compare.submit=Jämför
#sign
sign.title=Signera sign.title=Signera
sign.header=Skriv under PDF-filer sign.header=Skriv under PDF-filer
sign.upload=Ladda upp bild sign.upload=Ladda upp bild
@@ -167,14 +497,20 @@ sign.text=Textinmatning
sign.clear=Rensa sign.clear=Rensa
sign.add=Lägg till sign.add=Lägg till
#repair
repair.title=Reparera repair.title=Reparera
repair.header=Reparera PDF-filer repair.header=Reparera PDF-filer
repair.submit=Reparera repair.submit=Reparera
#flatten
flatten.title=Platta till flatten.title=Platta till
flatten.header=Placera PDF-filer flatten.header=Placera PDF-filer
flatten.submit=Platta till flatten.submit=Platta till
#ScannerImageSplit
ScannerImageSplit.selectText.1=Vinkeltröskel: ScannerImageSplit.selectText.1=Vinkeltröskel:
ScannerImageSplit.selectText.2=Ställer in den minsta absoluta vinkeln som krävs för att bilden ska roteras (standard: 10). ScannerImageSplit.selectText.2=Ställer in den minsta absoluta vinkeln som krävs för att bilden ska roteras (standard: 10).
ScannerImageSplit.selectText.3=Tolerans: ScannerImageSplit.selectText.3=Tolerans:
@@ -186,19 +522,6 @@ ScannerImageSplit.selectText.8=Ställer in minsta tröskelvärde för konturarea
ScannerImageSplit.selectText.9=Kantstorlek: ScannerImageSplit.selectText.9=Kantstorlek:
ScannerImageSplit.selectText.10=Ställer in storleken på kanten som läggs till och tas bort för att förhindra vita kanter i utdata (standard: 1). ScannerImageSplit.selectText.10=Ställer in storleken på kanten som läggs till och tas bort för att förhindra vita kanter i utdata (standard: 1).
navbar.settings=Inställningar
settings.title=Inställningar
settings.update=Uppdatering tillgänglig
settings.appVersion=Appversion:
settings.downloadOption.title=Välj nedladdningsalternativ (för nedladdning av en fil utan zip):
settings.downloadOption.1=Öppnas i samma fönster
settings.downloadOption.2=Öppna i nytt fönster
settings.downloadOption.3=Ladda ner fil
settings.zipThreshold=Zip-filer när antalet nedladdade filer överskrider
#OCR #OCR
ocr.title=OCR / Scan Cleanup ocr.title=OCR / Scan Cleanup
@@ -220,14 +543,14 @@ ocr.credit=Denna tjänst använder OCRmyPDF och Tesseract för OCR.
ocr.submit=Bearbeta PDF med OCR ocr.submit=Bearbeta PDF med OCR
#extractImages
extractImages.title=Extrahera bilder extractImages.title=Extrahera bilder
extractImages.header=Extrahera bilder extractImages.header=Extrahera bilder
extractImages.selectText=Välj bildformat att konvertera extraherade bilder till extractImages.selectText=Välj bildformat att konvertera extraherade bilder till
extractImages.submit=Extrahera extractImages.submit=Extrahera
#Fil till PDF #File to PDF
fileToPDF.title=Fil till PDF fileToPDF.title=Fil till PDF
fileToPDF.header=Konvertera valfri fil till PDF fileToPDF.header=Konvertera valfri fil till PDF
fileToPDF.credit=Denna tjänst använder LibreOffice och Unoconv för filkonvertering. fileToPDF.credit=Denna tjänst använder LibreOffice och Unoconv för filkonvertering.
@@ -235,7 +558,7 @@ fileToPDF.supportedFileTypes=Filtyper som stöds bör inkludera nedanstående me
fileToPDF.submit=Konvertera till PDF fileToPDF.submit=Konvertera till PDF
#komprimera #compress
compress.title=Komprimera compress.title=Komprimera
compress.header=Komprimera PDF compress.header=Komprimera PDF
compress.credit=Denna tjänst använder Ghostscript för PDF-komprimering/optimering. compress.credit=Denna tjänst använder Ghostscript för PDF-komprimering/optimering.
@@ -247,24 +570,27 @@ compress.selectText.5=Förväntad PDF-storlek (t.ex. 25MB, 10,8MB, 25KB)
compress.submit=Komprimera compress.submit=Komprimera
#Lägg till bild #Add image
addImage.title=Lägg till bild addImage.title=Lägg till bild
addImage.header=Lägg till bild till PDF addImage.header=Lägg till bild till PDF
addImage.everyPage=Varje sida? addImage.everyPage=Varje sida?
addImage.upload=Lägg till bild
addImage.submit=Lägg till bild addImage.submit=Lägg till bild
#sammanfoga #merge
merge.title=Sammanfoga merge.title=Sammanfoga
merge.header=Slå samman flera PDF-filer (2+) merge.header=Slå samman flera PDF-filer (2+)
merge.submit=Slå samman merge.submit=Slå samman
#pdfArrangör
#pdfOrganiser
pdfOrganiser.title=Sidorganisatör pdfOrganiser.title=Sidorganisatör
pdfOrganiser.header=PDF-sidorganisatör pdfOrganiser.header=PDF-sidorganisatör
pdfOrganiser.submit=Ordna om sidor pdfOrganiser.submit=Ordna om sidor
#multiverktyg
#multiTool
multiTool.title=PDF-multiverktyg multiTool.title=PDF-multiverktyg
multiTool.header=PDF Multi-verktyg multiTool.header=PDF Multi-verktyg
@@ -275,16 +601,15 @@ pageRemover.header=PDF Sidborttagning
pageRemover.pagesToDelete=Sidor att radera (Ange en kommaseparerad lista med sidnummer) : pageRemover.pagesToDelete=Sidor att radera (Ange en kommaseparerad lista med sidnummer) :
pageRemover.submit=Ta bort sidor pageRemover.submit=Ta bort sidor
#rotera
#rotate
rotate.title=Rotera PDF rotate.title=Rotera PDF
rotate.header=Rotera PDF rotate.header=Rotera PDF
rotate.selectAngle=Välj rotationsvinkel (i multipler av 90 grader): rotate.selectAngle=Välj rotationsvinkel (i multipler av 90 grader):
rotate.submit=Rotera rotate.submit=Rotera
#merge
#sammanfoga
split.title=Dela upp PDF split.title=Dela upp PDF
split.header=Dela upp PDF split.header=Dela upp PDF
split.desc.1=Siffrorna du väljer är sidnumret du vill göra en split på split.desc.1=Siffrorna du väljer är sidnumret du vill göra en split på
@@ -299,7 +624,7 @@ split.splitPages=Ange sidor att dela på:
split.submit=Dela split.submit=Dela
#sammanfoga #merge
imageToPDF.title=Bild till PDF imageToPDF.title=Bild till PDF
imageToPDF.header=Bild till PDF imageToPDF.header=Bild till PDF
imageToPDF.submit=Konvertera imageToPDF.submit=Konvertera
@@ -309,6 +634,7 @@ imageToPDF.selectText.3=Multifillogik (Endast aktiverad om man arbetar med flera
imageToPDF.selectText.4=Slå samman till en enda PDF imageToPDF.selectText.4=Slå samman till en enda PDF
imageToPDF.selectText.5=Konvertera till separata PDF-filer imageToPDF.selectText.5=Konvertera till separata PDF-filer
#pdfToImage #pdfToImage
pdfToImage.title=PDF till bild pdfToImage.title=PDF till bild
pdfToImage.header=PDF till bild pdfToImage.header=PDF till bild
@@ -322,6 +648,7 @@ pdfToImage.grey=Gråskala
pdfToImage.blackwhite=Svartvitt (kan förlora data!) pdfToImage.blackwhite=Svartvitt (kan förlora data!)
pdfToImage.submit=Konvertera pdfToImage.submit=Konvertera
#addPassword #addPassword
addPassword.title=Lägg till lösenord addPassword.title=Lägg till lösenord
addPassword.header=Lägg till lösenord (kryptera) addPassword.header=Lägg till lösenord (kryptera)
@@ -338,9 +665,13 @@ addPassword.selectText.10=Förhindra modifiering
addPassword.selectText.11=Förhindra anteckningsändring addPassword.selectText.11=Förhindra anteckningsändring
addPassword.selectText.12=Förhindra utskrift addPassword.selectText.12=Förhindra utskrift
addPassword.selectText.13=Förhindra utskrift av olika format addPassword.selectText.13=Förhindra utskrift av olika format
addPassword.selectText.14=Owner Password
addPassword.selectText.15=Restricts what can be done with the document once it is opened (Not supported by all readers)
addPassword.selectText.16=Restricts the opening of the document itself
addPassword.submit=Kryptera addPassword.submit=Kryptera
#vattenstämpel
#watermark
watermark.title=Lägg till vattenstämpel watermark.title=Lägg till vattenstämpel
watermark.header=Lägg till vattenstämpel watermark.header=Lägg till vattenstämpel
watermark.selectText.1=Välj PDF för att lägga till vattenstämpel till: watermark.selectText.1=Välj PDF för att lägga till vattenstämpel till:
@@ -352,6 +683,7 @@ watermark.selectText.6=heightSpacer (mellanrum mellan varje vattenstämpel verti
watermark.selectText.7=Opacitet (0% - 100%): watermark.selectText.7=Opacitet (0% - 100%):
watermark.submit=Lägg till vattenstämpel watermark.submit=Lägg till vattenstämpel
#remove-watermark #remove-watermark
remove-watermark.title=Ta bort vattenstämpel remove-watermark.title=Ta bort vattenstämpel
remove-watermark.header=Ta bort vattenstämpel remove-watermark.header=Ta bort vattenstämpel
@@ -359,7 +691,8 @@ remove-watermark.selectText.1=Välj PDF för att ta bort vattenstämpel från:
remove-watermark.selectText.2=Vattenstämpeltext: remove-watermark.selectText.2=Vattenstämpeltext:
remove-watermark.submit=Ta bort vattenstämpel remove-watermark.submit=Ta bort vattenstämpel
#Ändra behörigheter
#Change permissions
permissions.title=Ändra behörigheter permissions.title=Ändra behörigheter
permissions.header=Ändra behörigheter permissions.header=Ändra behörigheter
permissions.warning=Varning för att dessa behörigheter ska vara oföränderliga, det rekommenderas att ställa in dem med ett lösenord via sidan Lägg till lösenord permissions.warning=Varning för att dessa behörigheter ska vara oföränderliga, det rekommenderas att ställa in dem med ett lösenord via sidan Lägg till lösenord
@@ -375,14 +708,17 @@ permissions.selectText.9=Förhindra utskrift
permissions.selectText.10=Förhindra utskrift av olika format permissions.selectText.10=Förhindra utskrift av olika format
permissions.submit=Ändra permissions.submit=Ändra
#ta bort lösenord
#remove password
removePassword.title=Ta bort lösenord removePassword.title=Ta bort lösenord
removePassword.header=Ta bort lösenord (Dekryptera) removePassword.header=Ta bort lösenord (Dekryptera)
removePassword.selectText.1=Välj PDF att dekryptera removePassword.selectText.1=Välj PDF att dekryptera
removePassword.selectText.2=Lösenord removePassword.selectText.2=Lösenord
removePassword.submit=Ta bort removePassword.submit=Ta bort
changeMetadata.title=Ändra metadata
#changeMetadata
changeMetadata.title=Titel:
changeMetadata.header=Ändra metadata changeMetadata.header=Ändra metadata
changeMetadata.selectText.1=Redigera de variabler du vill ändra changeMetadata.selectText.1=Redigera de variabler du vill ändra
changeMetadata.selectText.2=Ta bort all metadata changeMetadata.selectText.2=Ta bort all metadata
@@ -400,27 +736,30 @@ changeMetadata.selectText.4=Andra metadata:
changeMetadata.selectText.5=Lägg till anpassad metadatapost changeMetadata.selectText.5=Lägg till anpassad metadatapost
changeMetadata.submit=Ändra changeMetadata.submit=Ändra
#xlsToPdf
xlsToPdf.title=Excel till PDF xlsToPdf.title=Excel till PDF
xlsToPdf.header=Excel till PDF xlsToPdf.header=Excel till PDF
xlsToPdf.selectText.1=Välj XLS eller XLSX Excel-ark att konvertera xlsToPdf.selectText.1=Välj XLS eller XLSX Excel-ark att konvertera
xlsToPdf.convert=konvertera xlsToPdf.convert=konvertera
#pdfToPDFA
pdfToPDFA.title=PDF till PDF/A pdfToPDFA.title=PDF till PDF/A
pdfToPDFA.header=PDF till PDF/A pdfToPDFA.header=PDF till PDF/A
pdfToPDFA.credit=Denna tjänst använder OCRmyPDF för PDF/A-konvertering pdfToPDFA.credit=Denna tjänst använder OCRmyPDF för PDF/A-konvertering
pdfToPDFA.submit=Konvertera pdfToPDFA.submit=Konvertera
#PDFToWord
PDFToWord.title=PDF till Word PDFToWord.title=PDF till Word
PDFToWord.header=PDF till Word PDFToWord.header=PDF till Word
PDFToWord.selectText.1=Utdatafilformat PDFToWord.selectText.1=Utdatafilformat
PDFToWord.credit=Denna tjänst använder LibreOffice för filkonvertering. PDFToWord.credit=Denna tjänst använder LibreOffice för filkonvertering.
PDFToWord.submit=Konvertera PDFToWord.submit=Konvertera
#PDFToPresentation
PDFToPresentation.title=PDF till presentation PDFToPresentation.title=PDF till presentation
PDFToPresentation.header=PDF till presentation PDFToPresentation.header=PDF till presentation
PDFToPresentation.selectText.1=Utdatafilformat PDFToPresentation.selectText.1=Utdatafilformat
@@ -428,6 +767,7 @@ PDFToPresentation.credit=Denna tjänst använder LibreOffice för filkonverterin
PDFToPresentation.submit=Konvertera PDFToPresentation.submit=Konvertera
#PDFToText
PDFToText.title=PDF till text/RTF PDFToText.title=PDF till text/RTF
PDFToText.header=PDF till text/RTF PDFToText.header=PDF till text/RTF
PDFToText.selectText.1=Utdatafilformat PDFToText.selectText.1=Utdatafilformat
@@ -435,24 +775,15 @@ PDFToText.credit=Denna tjänst använder LibreOffice för filkonvertering.
PDFToText.submit=Konvertera PDFToText.submit=Konvertera
#PDFToHTML
PDFToHTML.title=PDF till HTML PDFToHTML.title=PDF till HTML
PDFToHTML.header=PDF till HTML PDFToHTML.header=PDF till HTML
PDFToHTML.credit=Denna tjänst använder LibreOffice för filkonvertering. PDFToHTML.credit=Denna tjänst använder LibreOffice för filkonvertering.
PDFToHTML.submit=Konvertera PDFToHTML.submit=Konvertera
#PDFToXML
PDFToXML.title=PDF till XML PDFToXML.title=PDF till XML
PDFToXML.header=PDF till XML PDFToXML.header=PDF till XML
PDFToXML.credit=Denna tjänst använder LibreOffice för filkonvertering. PDFToXML.credit=Denna tjänst använder LibreOffice för filkonvertering.
PDFToXML.submit=Konvertera PDFToXML.submit=Konvertera

View File

@@ -1,7 +1,7 @@
########### ###########
# Generic # # Generic #
########### ###########
# the direction that the language is written (ltr = left to right, rtl = right to left) # the direction that the language is written (ltr=left to right, rtl = right to left)
language.direction=ltr language.direction=ltr
pdfPrompt=选择PDF pdfPrompt=选择PDF
@@ -20,117 +20,441 @@ close=关闭
filesSelected=\u9009\u62E9\u7684\u6587\u4EF6 filesSelected=\u9009\u62E9\u7684\u6587\u4EF6
noFavourites=\u6CA1\u6709\u6DFB\u52A0\u6536\u85CF\u5939 noFavourites=\u6CA1\u6709\u6DFB\u52A0\u6536\u85CF\u5939
bored=\u65E0\u804A\u7B49\u5F85\uFF1F bored=\u65E0\u804A\u7B49\u5F85\uFF1F
alphabet=\u5B57\u6BCD\u8868
downloadPdf=\u4E0B\u8F7DPDF
text=\u6587\u672C
font=\u5B57\u4F53
selectFillter=-- 选择--
pageNum=页码
sizes.small=Small
sizes.medium=Medium
sizes.large=Large
sizes.x-large=X-Large
error.pdfPassword=The PDF Document is passworded and either the password was not provided or was incorrect
#############
# NAVBAR #
#############
navbar.convert=转换
navbar.security=安全
navbar.other=其他
navbar.darkmode=暗模式
navbar.pageOps=页面操作
navbar.settings=设置
#############
# SETTINGS #
#############
settings.title=设置
settings.update=可更新
settings.appVersion=应用程序版本:
settings.downloadOption.title=选择下载选项(单个文件非压缩文件):
settings.downloadOption.1=在同一窗口打开
settings.downloadOption.2=在新窗口中打开
settings.downloadOption.3=下载文件
settings.zipThreshold=当下载的文件数量超过限制时,将文件压缩。
############# #############
# HOME-PAGE # # HOME-PAGE #
############# #############
home.desc=您的本地托管一站式服务满足您的所有PDF需求。 home.desc=您的本地托管一站式服务满足您的所有PDF需求。
navbar.convert=转换
navbar.security=安全
navbar.other=其他
navbar.darkmode=暗模式
navbar.pageOps=页面操作
home.multiTool.title=PDF多功能工具 home.multiTool.title=PDF多功能工具
home.multiTool.desc=合并、旋转、重新排列和删除PDF页面 home.multiTool.desc=合并、旋转、重新排列和删除PDF页面
multiTool.tags=Multi Tool,Multi operation,UI,click drag,front end,client side
home.merge.title=合并 home.merge.title=合并
home.merge.desc=轻松合并多个PDF为一个。 home.merge.desc=轻松合并多个PDF为一个。
merge.tags=merge,Page operations,Back end,server side
home.split.title=拆分 home.split.title=拆分
home.split.desc=将 PDF 拆分为多个文档。 home.split.desc=将 PDF 拆分为多个文档。
##########################
### TODO: Translate ###
##########################
split.tags=Page operations,divide,Multi Page,cut,server side
home.rotate.title=旋转 home.rotate.title=旋转
home.rotate.desc=旋转PDF。 home.rotate.desc=旋转PDF。
##########################
### TODO: Translate ###
##########################
rotate.tags=server side
home.imageToPdf.title=转换图像到PDF home.imageToPdf.title=转换图像到PDF
home.imageToPdf.desc=转换图像PNG, JPEG, GIF到 PDF。 home.imageToPdf.desc=转换图像PNG, JPEG, GIF到 PDF。
##########################
### TODO: Translate ###
##########################
imageToPdf.tags=conversion,img,jpg,picture,photo
home.pdfToImage.title=转换PDF到图像 home.pdfToImage.title=转换PDF到图像
home.pdfToImage.desc=转换PDF到图像PNG, JPEG, GIF home.pdfToImage.desc=转换PDF到图像PNG, JPEG, GIF
##########################
### TODO: Translate ###
##########################
pdfToImage.tags=conversion,img,jpg,picture,photo
home.pdfOrganiser.title=整理 home.pdfOrganiser.title=整理
home.pdfOrganiser.desc=按任何顺序删除/重新排列页面。 home.pdfOrganiser.desc=按任何顺序删除/重新排列页面。
##########################
### TODO: Translate ###
##########################
pdfOrganiser.tags=duplex,even,odd,sort,move
home.addImage.title=在PDF中添加图片 home.addImage.title=在PDF中添加图片
home.addImage.desc=将图像添加到PDF的设定位置上 home.addImage.desc=将图像添加到PDF的设定位置上
##########################
### TODO: Translate ###
##########################
addImage.tags=img,jpg,picture,photo
home.watermark.title=添加水印 home.watermark.title=添加水印
home.watermark.desc=在PDF中添加一个自定义的水印。 home.watermark.desc=在PDF中添加一个自定义的水印。
##########################
home.remove-watermark.title=去除水印 ### TODO: Translate ###
home.remove-watermark.desc=从你的PDF文档中去除水印。 ##########################
watermark.tags=Text,repeating,label,own,copyright,trademark,img,jpg,picture,photo
home.permissions.title=更改权限 home.permissions.title=更改权限
home.permissions.desc=改变你的PDF文档的权限。 home.permissions.desc=改变你的PDF文档的权限。
##########################
### TODO: Translate ###
##########################
permissions.tags=read,write,edit,print
home.removePages.title=删除 home.removePages.title=删除
home.removePages.desc=从你的PDF文档中删除不需要的页面。 home.removePages.desc=从你的PDF文档中删除不需要的页面。
##########################
### TODO: Translate ###
##########################
removePages.tags=Remove pages,delete pages
home.addPassword.title=添加密码 home.addPassword.title=添加密码
home.addPassword.desc=用密码来加密你的PDF文档。 home.addPassword.desc=用密码来加密你的PDF文档。
##########################
### TODO: Translate ###
##########################
addPassword.tags=secure,security
home.removePassword.title=删除密码 home.removePassword.title=删除密码
home.removePassword.desc=从你的PDF文档中移除密码保护。 home.removePassword.desc=从你的PDF文档中移除密码保护。
##########################
### TODO: Translate ###
##########################
removePassword.tags=secure,Decrypt,security,unpassword,delete password
home.compressPdfs.title=压缩 home.compressPdfs.title=压缩
home.compressPdfs.desc=压缩PDF文件以减少其文件大小。 home.compressPdfs.desc=压缩PDF文件以减少其文件大小。
##########################
### TODO: Translate ###
##########################
compressPdfs.tags=squish,small,tiny
home.changeMetadata.title=更改元数据 home.changeMetadata.title=更改元数据
home.changeMetadata.desc=更改/删除/添加PDF文档的元数据。 home.changeMetadata.desc=更改/删除/添加PDF文档的元数据。
##########################
### TODO: Translate ###
##########################
changeMetadata.tags==Title,author,date,creation,time,publisher,producer,stats
home.fileToPDF.title=将文件转换为PDF文件 home.fileToPDF.title=将文件转换为PDF文件
home.fileToPDF.desc=将几乎所有文件转换为PDFDOCX、PNG、XLS、PPT、TXT等 home.fileToPDF.desc=将几乎所有文件转换为PDFDOCX、PNG、XLS、PPT、TXT等
##########################
### TODO: Translate ###
##########################
fileToPDF.tags=transformation,format,document,picture,slide,text,conversion,office,docs,word,excel,powerpoint
home.ocr.title=运行OCR/清理扫描 home.ocr.title=运行OCR/清理扫描
home.ocr.desc=清理和检测PDF中的文本图像并将其重新添加为文本。 home.ocr.desc=清理和检测PDF中的文本图像并将其重新添加为文本。
##########################
### TODO: Translate ###
##########################
ocr.tags=recognition,text,image,scan,read,identify,detection,editable
home.extractImages.title=提取图像 home.extractImages.title=提取图像
home.extractImages.desc=从PDF中提取所有的图像并将其保存到压缩包中。 home.extractImages.desc=从PDF中提取所有的图像并将其保存到压缩包中。
##########################
### TODO: Translate ###
##########################
extractImages.tags=picture,photo,save,archive,zip,capture,grab
home.pdfToPDFA.title=PDF To PDF/A home.pdfToPDFA.title=PDF To PDF/A
home.pdfToPDFA.desc=将PDF转换为PDF/A以便长期保存 home.pdfToPDFA.desc=将PDF转换为PDF/A以便长期保存
##########################
### TODO: Translate ###
##########################
pdfToPDFA.tags=archive,long-term,standard,conversion,storage,preservation
home.PDFToWord.title=PDF to Word home.PDFToWord.title=PDF to Word
home.PDFToWord.desc=将PDF转换为Word格式DOC、DOCX和ODT home.PDFToWord.desc=将PDF转换为Word格式DOC、DOCX和ODT
##########################
### TODO: Translate ###
##########################
PDFToWord.tags=doc,docx,odt,word,transformation,format,conversion,office,microsoft,docfile
home.PDFToPresentation.title=PDF To Presentation home.PDFToPresentation.title=PDF To Presentation
home.PDFToPresentation.desc=将PDF转换成演示文稿格式PPT、PPTX和ODP home.PDFToPresentation.desc=将PDF转换成演示文稿格式PPT、PPTX和ODP
##########################
### TODO: Translate ###
##########################
PDFToPresentation.tags=slides,show,office,microsoft
home.PDFToText.title=PDF To Text/RTF home.PDFToText.title=PDF to RTF (Text)
home.PDFToText.desc=将PDF转换为文本或RTF格式 home.PDFToText.desc=将PDF转换为文本或RTF格式
##########################
### TODO: Translate ###
##########################
PDFToText.tags=richformat,richtextformat,rich text format
home.PDFToHTML.title=PDF To HTML home.PDFToHTML.title=PDF To HTML
home.PDFToHTML.desc=将PDF转换为HTML格式 home.PDFToHTML.desc=将PDF转换为HTML格式
##########################
### TODO: Translate ###
##########################
PDFToHTML.tags=web content,browser friendly
home.PDFToXML.title=PDF To XML home.PDFToXML.title=PDF To XML
home.PDFToXML.desc=将PDF转换为XML格式 home.PDFToXML.desc=将PDF转换为XML格式
##########################
### TODO: Translate ###
##########################
PDFToXML.tags=data-extraction,structured-content,interop,transformation,convert
home.ScannerImageSplit.title=检测/分割扫描的照片 home.ScannerImageSplit.title=检测/分割扫描的照片
home.ScannerImageSplit.desc=从一张照片/PDF中分割出多张照片 home.ScannerImageSplit.desc=从一张照片/PDF中分割出多张照片
##########################
### TODO: Translate ###
##########################
ScannerImageSplit.tags=separate,auto-detect,scans,multi-photo,organize
home.sign.title=\u6807\u5FD7 home.sign.title=\u6807\u5FD7
home.sign.desc=\u901A\u8FC7\u7ED8\u56FE\u3001\u6587\u672C\u6216\u56FE\u50CF\u5411 PDF \u6DFB\u52A0\u7B7E\u540D home.sign.desc=\u901A\u8FC7\u7ED8\u56FE\u3001\u6587\u672C\u6216\u56FE\u50CF\u5411 PDF \u6DFB\u52A0\u7B7E\u540D
##########################
### TODO: Translate ###
##########################
sign.tags=authorize,initials,drawn-signature,text-sign,image-signature
home.flatten.title=\u5C55\u5E73 home.flatten.title=\u5C55\u5E73
home.flatten.desc=\u4ECE PDF \u4E2D\u5220\u9664\u6240\u6709\u4EA4\u4E92\u5143\u7D20\u548C\u8868\u5355 home.flatten.desc=\u4ECE PDF \u4E2D\u5220\u9664\u6240\u6709\u4EA4\u4E92\u5143\u7D20\u548C\u8868\u5355
##########################
### TODO: Translate ###
##########################
flatten.tags=static,deactivate,non-interactive,streamline
home.repair.title=\u4FEE\u590D home.repair.title=\u4FEE\u590D
home.repair.desc=\u5C1D\u8BD5\u4FEE\u590D\u635F\u574F/\u635F\u574F\u7684 PDF home.repair.desc=\u5C1D\u8BD5\u4FEE\u590D\u635F\u574F/\u635F\u574F\u7684 PDF
##########################
### TODO: Translate ###
##########################
repair.tags=fix,restore,correction,recover
home.removeBlanks.title=\u5220\u9664\u7A7A\u767D\u9875 home.removeBlanks.title=\u5220\u9664\u7A7A\u767D\u9875
home.removeBlanks.desc=\u68C0\u6D4B\u5E76\u5220\u9664\u6587\u6863\u4E2D\u7684\u7A7A\u767D\u9875 home.removeBlanks.desc=\u68C0\u6D4B\u5E76\u5220\u9664\u6587\u6863\u4E2D\u7684\u7A7A\u767D\u9875
##########################
### TODO: Translate ###
##########################
removeBlanks.tags=cleanup,streamline,non-content,organize
home.compare.title=\u6BD4\u8F83 home.compare.title=\u6BD4\u8F83
home.compare.desc=\u6BD4\u8F83\u5E76\u663E\u793A 2 \u4E2A PDF \u6587\u6863\u4E4B\u95F4\u7684\u5DEE\u5F02 home.compare.desc=\u6BD4\u8F83\u5E76\u663E\u793A 2 \u4E2A PDF \u6587\u6863\u4E4B\u95F4\u7684\u5DEE\u5F02
##########################
### TODO: Translate ###
##########################
compare.tags=differentiate,contrast,changes,analysis
downloadPdf=\u4E0B\u8F7DPDF home.certSign.title=Sign with Certificate
text=\u6587\u672C home.certSign.desc=Signs a PDF with a Certificate/Key (PEM/P12)
font=\u5B57\u4F53 ##########################
selectFillter=-- 选择-- ### TODO: Translate ###
pageNum=页码 ##########################
certSign.tags=authenticate,PEM,P12,official,encrypt
home.pageLayout.title=Multi-Page Layout
home.pageLayout.desc=Merge multiple pages of a PDF document into a single page
##########################
### TODO: Translate ###
##########################
pageLayout.tags=merge,composite,single-view,organize
home.scalePages.title=Adjust page size/scale
home.scalePages.desc=Change the size/scale of page and/or its contents.
##########################
### TODO: Translate ###
##########################
scalePages.tags=resize,modify,dimension,adapt
home.pipeline.title=Pipeline (Advanced)
home.pipeline.desc=Run multiple actions on PDFs by defining pipeline scripts
##########################
### TODO: Translate ###
##########################
pipeline.tags=automate,sequence,scripted,batch-process
home.add-page-numbers.title=Add Page Numbers
home.add-page-numbers.desc=Add Page numbers throughout a document in a set location
##########################
### TODO: Translate ###
##########################
add-page-numbers.tags=paginate,label,organize,index
home.auto-rename.title=Auto Rename PDF File
home.auto-rename.desc=Auto renames a PDF file based on its detected header
##########################
### TODO: Translate ###
##########################
auto-rename.tags=auto-detect,header-based,organize,relabel
home.adjust-contrast.title=Adjust Colors/Contrast
home.adjust-contrast.desc=Adjust Contrast, Saturation and Brightness of a PDF
##########################
### TODO: Translate ###
##########################
adjust-contrast.tags=color-correction,tune,modify,enhance
home.crop.title=Crop PDF
home.crop.desc=Crop a PDF to reduce its size (maintains text!)
##########################
### TODO: Translate ###
##########################
crop.tags=trim,shrink,edit,shape
home.autoSplitPDF.title=Auto Split Pages
home.autoSplitPDF.desc=Auto Split Scanned PDF with physical scanned page splitter QR Code
##########################
### TODO: Translate ###
##########################
autoSplitPDF.tags=QR-based,separate,scan-segment,organize
home.sanitizePdf.title=Sanitize
home.sanitizePdf.desc=Remove scripts and other elements from PDF files
##########################
### TODO: Translate ###
##########################
sanitizePdf.tags=clean,secure,safe,remove-threats
##########################
### TODO: Translate ###
##########################
home.URLToPDF.title=URL/Website To PDF
home.URLToPDF.desc=Converts any http(s)URL to PDF
URLToPDF.tags=web-capture,save-page,web-to-doc,archive
##########################
### TODO: Translate ###
##########################
home.HTMLToPDF.title=HTML to PDF
home.HTMLToPDF.desc=Converts any HTML file or zip to PDF
HTMLToPDF.tags=markup,web-content,transformation,convert
###########################
# #
# WEB PAGES #
# #
###########################
#url-to-pdf
URLToPDF.title=URL To PDF
URLToPDF.header=URL To PDF
URLToPDF.submit=Convert
URLToPDF.credit=Uses WeasyPrint
#html-to-pdf
HTMLToPDF.title=HTML To PDF
HTMLToPDF.header=HTML To PDF
HTMLToPDF.help=Accepts HTML files and ZIPs containing html/css/images etc required
HTMLToPDF.submit=Convert
HTMLToPDF.credit=Uses WeasyPrint
#sanitizePDF
sanitizePDF.title=Sanitize PDF
sanitizePDF.header=Sanitize a PDF file
sanitizePDF.selectText.1=Remove JavaScript actions
sanitizePDF.selectText.2=Remove embedded files
sanitizePDF.selectText.3=Remove metadata
sanitizePDF.selectText.4=Remove links
sanitizePDF.selectText.5=Remove fonts
sanitizePDF.submit=Sanitize PDF
#addPageNumbers
addPageNumbers.title=Add Page Numbers
addPageNumbers.header=Add Page Numbers
addPageNumbers.selectText.1=Select PDF file:
addPageNumbers.selectText.2=Margin Size
addPageNumbers.selectText.3=Position
addPageNumbers.selectText.4=Starting Number
addPageNumbers.selectText.5=Pages to Number
addPageNumbers.selectText.6=Custom Text
addPageNumbers.submit=Add Page Numbers
#auto-rename
auto-rename.title=Auto Rename
auto-rename.header=Auto Rename PDF
auto-rename.submit=Auto Rename
#adjustContrast
adjustContrast.title=Adjust Contrast
adjustContrast.header=Adjust Contrast
adjustContrast.contrast=Contrast:
adjustContrast.brightness=Brightness:
adjustContrast.saturation=Saturation:
adjustContrast.download=Download
#crop
crop.title=Crop
crop.header=Crop Image
crop.submit=Submit
#autoSplitPDF
autoSplitPDF.title=Auto Split PDF
autoSplitPDF.header=Auto Split PDF
autoSplitPDF.description=Print, Insert, Scan, upload, and let us auto-separate your documents. No manual work sorting needed.
autoSplitPDF.selectText.1=Print out some divider sheets from below (Black and white is fine).
autoSplitPDF.selectText.2=Scan all your documents at once by inserting the divider sheet between them.
autoSplitPDF.selectText.3=Upload the single large scanned PDF file and let Stirling PDF handle the rest.
autoSplitPDF.selectText.4=Divider pages are automatically detected and removed, guaranteeing a neat final document.
autoSplitPDF.formPrompt=Submit PDF containing Stirling-PDF Page dividers:
autoSplitPDF.duplexMode=Duplex Mode (Front and back scanning)
autoSplitPDF.dividerDownload1=Download 'Auto Splitter Divider (minimal).pdf'
autoSplitPDF.dividerDownload2=Download 'Auto Splitter Divider (with instructions).pdf'
autoSplitPDF.submit=Submit
#pipeline
pipeline.title=Pipeline
#pageLayout
pageLayout.title=Multi Page Layout
pageLayout.header=Multi Page Layout
pageLayout.pagesPerSheet=Pages per sheet:
pageLayout.submit=Submit
#scalePages
scalePages.title=Adjust page-scale
scalePages.header=Adjust page-scale
scalePages.pageSize=Size of a page of the document.
scalePages.scaleFactor=Zoom level (crop) of a page.
scalePages.submit=Submit
#certSign
certSign.title=证书签名 certSign.title=证书签名
certSign.header=使用您的证书签署 PDF进行中 certSign.header=使用您的证书签署 PDF进行中
certSign.selectPDF=选择要签名的 PDF 文件: certSign.selectPDF=选择要签名的 PDF 文件:
@@ -145,6 +469,8 @@ certSign.location=位置
certSign.name=名称 certSign.name=名称
certSign.submit=签署 PDF certSign.submit=签署 PDF
#removeBlanks
removeBlanks.title=\u5220\u9664\u7A7A\u767D removeBlanks.title=\u5220\u9664\u7A7A\u767D
removeBlanks.header=\u5220\u9664\u7A7A\u767D\u9875 removeBlanks.header=\u5220\u9664\u7A7A\u767D\u9875
removeBlanks.threshold=\u9608\u503C\uFF1A removeBlanks.threshold=\u9608\u503C\uFF1A
@@ -153,12 +479,16 @@ removeBlanks.whitePercent=\u767D\u8272\u767E\u5206\u6BD4\uFF08%\uFF09\uFF1A
removeBlanks.whitePercentDesc=\u5FC5\u987B\u4E3A\u767D\u8272\u624D\u80FD\u5220\u9664\u7684\u9875\u9762\u767E\u5206\u6BD4 removeBlanks.whitePercentDesc=\u5FC5\u987B\u4E3A\u767D\u8272\u624D\u80FD\u5220\u9664\u7684\u9875\u9762\u767E\u5206\u6BD4
removeBlanks.submit=\u5220\u9664\u7A7A\u767D removeBlanks.submit=\u5220\u9664\u7A7A\u767D
#compare
compare.title=\u6BD4\u8F83 compare.title=\u6BD4\u8F83
compare.header=\u6BD4\u8F83 PDF compare.header=\u6BD4\u8F83 PDF
compare.document.1=\u6587\u6863 1 compare.document.1=\u6587\u6863 1
compare.document.2=\u6587\u6863 2 compare.document.2=\u6587\u6863 2
compare.submit=\u6BD4\u8F83 compare.submit=\u6BD4\u8F83
#sign
sign.title=\u7B7E\u540D sign.title=\u7B7E\u540D
sign.header=\u7B7E\u7F72 PDF sign.header=\u7B7E\u7F72 PDF
sign.upload=\u4E0A\u4F20\u56FE\u7247 sign.upload=\u4E0A\u4F20\u56FE\u7247
@@ -167,14 +497,20 @@ sign.text=\u6587\u672C\u8F93\u5165
sign.clear=\u6E05\u9664 sign.clear=\u6E05\u9664
sign.add=\u6DFB\u52A0 sign.add=\u6DFB\u52A0
#repair
repair.title=\u4FEE\u590D repair.title=\u4FEE\u590D
repair.header=\u4FEE\u590D PDF repair.header=\u4FEE\u590D PDF
repair.submit=\u4FEE\u590D repair.submit=\u4FEE\u590D
#flatten
flatten.title=\u5C55\u5E73 flatten.title=\u5C55\u5E73
flatten.header=\u5C55\u5E73 PDF flatten.header=\u5C55\u5E73 PDF
flatten.submit=\u5C55\u5E73 flatten.submit=\u5C55\u5E73
#ScannerImageSplit
ScannerImageSplit.selectText.1=角度阈值: ScannerImageSplit.selectText.1=角度阈值:
ScannerImageSplit.selectText.2=设置图像被旋转所需的最小绝对角度默认10 ScannerImageSplit.selectText.2=设置图像被旋转所需的最小绝对角度默认10
ScannerImageSplit.selectText.3=公差: ScannerImageSplit.selectText.3=公差:
@@ -186,18 +522,6 @@ ScannerImageSplit.selectText.8=设置照片的最小轮廓面积阈值。
ScannerImageSplit.selectText.9=边框尺寸: ScannerImageSplit.selectText.9=边框尺寸:
ScannerImageSplit.selectText.10=设置添加和删除的边框大小以防止输出中出现白边默认值1 ScannerImageSplit.selectText.10=设置添加和删除的边框大小以防止输出中出现白边默认值1
navbar.settings=设置
settings.title=设置
settings.update=可更新
settings.appVersion=应用程序版本:
settings.downloadOption.title=选择下载选项(单个文件非压缩文件):
settings.downloadOption.1=在同一窗口打开
settings.downloadOption.2=在新窗口中打开
settings.downloadOption.3=下载文件
settings.zipThreshold=当下载的文件数量超过限制时,将文件压缩。
#OCR #OCR
ocr.title=OCR/扫描清理 ocr.title=OCR/扫描清理
@@ -219,7 +543,7 @@ ocr.credit=此服务使用OCRmyPDF和Tesseract进行OCR。
ocr.submit=用OCR处理PDF ocr.submit=用OCR处理PDF
#extractImages
extractImages.title=提取图像 extractImages.title=提取图像
extractImages.header=提取图像 extractImages.header=提取图像
extractImages.selectText=选择图像格式,将提取的图像转换为 extractImages.selectText=选择图像格式,将提取的图像转换为
@@ -250,6 +574,7 @@ compress.submit=压缩
addImage.title=添加图像 addImage.title=添加图像
addImage.header=添加图片到PDF (Work in progress) addImage.header=添加图片到PDF (Work in progress)
addImage.everyPage=每一页? addImage.everyPage=每一页?
addImage.upload=添加图片
addImage.submit=添加图片 addImage.submit=添加图片
@@ -258,11 +583,13 @@ merge.title=合并
merge.header=合并多个PDF2个以上 merge.header=合并多个PDF2个以上
merge.submit=合并 merge.submit=合并
#pdfOrganiser #pdfOrganiser
pdfOrganiser.title=页面排序 pdfOrganiser.title=页面排序
pdfOrganiser.header=PDF页面排序 pdfOrganiser.header=PDF页面排序
pdfOrganiser.submit=重新排列页面 pdfOrganiser.submit=重新排列页面
#multiTool #multiTool
multiTool.title=PDF多功能工具 multiTool.title=PDF多功能工具
multiTool.header=PDF多功能工具 multiTool.header=PDF多功能工具
@@ -274,6 +601,7 @@ pageRemover.header=PDF页面移除器
pageRemover.pagesToDelete=要删除的页面(输入一个用逗号分隔的页码列表): pageRemover.pagesToDelete=要删除的页面(输入一个用逗号分隔的页码列表):
pageRemover.submit=删除页面 pageRemover.submit=删除页面
#rotate #rotate
rotate.title=旋转PDF rotate.title=旋转PDF
rotate.header=旋转PDF rotate.header=旋转PDF
@@ -281,8 +609,6 @@ rotate.selectAngle=选择旋转角度以90度的倍数
rotate.submit=旋转 rotate.submit=旋转
#merge #merge
split.title=拆分PDF split.title=拆分PDF
split.header=拆分PDF split.header=拆分PDF
@@ -308,6 +634,7 @@ imageToPDF.selectText.3=多文件逻辑(仅在处理多个图像时启用)
imageToPDF.selectText.4=合并成一个PDF文件 imageToPDF.selectText.4=合并成一个PDF文件
imageToPDF.selectText.5=转换为独立的PDF文件 imageToPDF.selectText.5=转换为独立的PDF文件
#pdfToImage #pdfToImage
pdfToImage.title=PDF to Image pdfToImage.title=PDF to Image
pdfToImage.header=PDF转图片 pdfToImage.header=PDF转图片
@@ -321,6 +648,7 @@ pdfToImage.grey=灰度
pdfToImage.blackwhite=黑白(可能会丢失数据!)。 pdfToImage.blackwhite=黑白(可能会丢失数据!)。
pdfToImage.submit=转换 pdfToImage.submit=转换
#addPassword #addPassword
addPassword.title=添加密码 addPassword.title=添加密码
addPassword.header=添加密码(加密)。 addPassword.header=添加密码(加密)。
@@ -336,9 +664,13 @@ addPassword.selectText.9=防止填写表格
addPassword.selectText.10=防止修改 addPassword.selectText.10=防止修改
addPassword.selectText.11=防止修改注释 addPassword.selectText.11=防止修改注释
addPassword.selectText.12=防止打印 addPassword.selectText.12=防止打印
addPassword.selectText.13=防止打印不同的格 addPassword.selectText.13=防止打印不同的格<EFBFBD>
addPassword.selectText.14=Owner Password
addPassword.selectText.15=Restricts what can be done with the document once it is opened (Not supported by all readers)
addPassword.selectText.16=Restricts the opening of the document itself<6C>
addPassword.submit=加密 addPassword.submit=加密
#watermark #watermark
watermark.title=添加水印 watermark.title=添加水印
watermark.header=添加水印 watermark.header=添加水印
@@ -351,6 +683,7 @@ watermark.selectText.6=heightSpacer每个水印之间的垂直空间
watermark.selectText.7=透明度0% - 100% watermark.selectText.7=透明度0% - 100%
watermark.submit=添加水印 watermark.submit=添加水印
#remove-watermark #remove-watermark
remove-watermark.title=去除水印 remove-watermark.title=去除水印
remove-watermark.header=去除水印 remove-watermark.header=去除水印
@@ -358,6 +691,7 @@ remove-watermark.selectText.1=选择要去除水印的PDF
remove-watermark.selectText.2=水印文本: remove-watermark.selectText.2=水印文本:
remove-watermark.submit=移除水印 remove-watermark.submit=移除水印
#Change permissions #Change permissions
permissions.title=更改权限 permissions.title=更改权限
permissions.header=改变权限 permissions.header=改变权限
@@ -374,6 +708,7 @@ permissions.selectText.9=防止打印
permissions.selectText.10=防止打印不同的格式 permissions.selectText.10=防止打印不同的格式
permissions.submit=改变 permissions.submit=改变
#remove password #remove password
removePassword.title=删除密码 removePassword.title=删除密码
removePassword.header=移除密码(解密)。 removePassword.header=移除密码(解密)。
@@ -381,7 +716,9 @@ removePassword.selectText.1=选择要解密的PDF
removePassword.selectText.2=密码 removePassword.selectText.2=密码
removePassword.submit=删除 removePassword.submit=删除
changeMetadata.title=更改元数据
#changeMetadata
changeMetadata.title=标题:
changeMetadata.header=更改元数据 changeMetadata.header=更改元数据
changeMetadata.selectText.1=请编辑你想要改变的变量。 changeMetadata.selectText.1=请编辑你想要改变的变量。
changeMetadata.selectText.2=删除所有元数据 changeMetadata.selectText.2=删除所有元数据
@@ -399,27 +736,30 @@ changeMetadata.selectText.4=其他元数据:
changeMetadata.selectText.5=添加自定义元数据条目 changeMetadata.selectText.5=添加自定义元数据条目
changeMetadata.submit=更改 changeMetadata.submit=更改
#xlsToPdf
xlsToPdf.title=Excel转PDF xlsToPdf.title=Excel转PDF
xlsToPdf.header=Excel转PDF xlsToPdf.header=Excel转PDF
xlsToPdf.selectText.1=选择要转换的XLS或XLSX Excel表格 xlsToPdf.selectText.1=选择要转换的XLS或XLSX Excel表格
xlsToPdf.convert=转换 xlsToPdf.convert=转换
#pdfToPDFA
pdfToPDFA.title=PDF To PDF/A pdfToPDFA.title=PDF To PDF/A
pdfToPDFA.header=PDF to PDF/A pdfToPDFA.header=PDF to PDF/A
pdfToPDFA.credit=此服务使用OCRmyPDF进行PDF/A转换 pdfToPDFA.credit=此服务使用OCRmyPDF进行PDF/A转换
pdfToPDFA.submit=转换 pdfToPDFA.submit=转换
#PDFToWord
PDFToWord.title=PDF to Word PDFToWord.title=PDF to Word
PDFToWord.header=将PDF转换成Word PDFToWord.header=将PDF转换成Word
PDFToWord.selectText.1=输出文件格式 PDFToWord.selectText.1=输出文件格式
PDFToWord.credit=此服务使用LibreOffice进行文件转换。 PDFToWord.credit=此服务使用LibreOffice进行文件转换。
PDFToWord.submit=转换 PDFToWord.submit=转换
#PDFToPresentation
PDFToPresentation.title=PDF To Presentation PDFToPresentation.title=PDF To Presentation
PDFToPresentation.header=将PDF转为演示文稿 PDFToPresentation.header=将PDF转为演示文稿
PDFToPresentation.selectText.1=输出文件格式 PDFToPresentation.selectText.1=输出文件格式
@@ -427,18 +767,22 @@ PDFToPresentation.credit=该服务使用LibreOffice进行文件转换。
PDFToPresentation.submit=转换 PDFToPresentation.submit=转换
PDFToText.title=PDF To Text/RTF #PDFToText
PDFToText.title=PDF to RTF (Text)
PDFToText.header=将PDF转换成文本/RTF PDFToText.header=将PDF转换成文本/RTF
PDFToText.selectText.1=输出文件格式 PDFToText.selectText.1=输出文件格式
PDFToText.credit=该服务使用LibreOffice进行文件转换。 PDFToText.credit=该服务使用LibreOffice进行文件转换。
PDFToText.submit=转换 PDFToText.submit=转换
#PDFToHTML
PDFToHTML.title=PDF To HTML PDFToHTML.title=PDF To HTML
PDFToHTML.header=将PDF转换成HTML PDFToHTML.header=将PDF转换成HTML
PDFToHTML.credit=此服务使用LibreOffice进行文件转换。 PDFToHTML.credit=此服务使用LibreOffice进行文件转换。
PDFToHTML.submit=转换 PDFToHTML.submit=转换
#PDFToXML
PDFToXML.title=PDF To XML PDFToXML.title=PDF To XML
PDFToXML.header=将PDF转换为XML PDFToXML.header=将PDF转换为XML
PDFToXML.credit=此服务使用LibreOffice进行文件转换。 PDFToXML.credit=此服务使用LibreOffice进行文件转换。

View File

@@ -0,0 +1,94 @@
#errorContainer {
margin: 20px; /* adjust this value as needed */
}
#helpModalDialog {
width: 90%;
max-width: 800px;
}
#helpModal h1 {
text-align: center;
margin-top: 10%;
}
#helpModal p {
text-align: center;
margin-top: 2em;
}
#helpModal .button:hover {
background-color: #005b7f;
}
#helpModal .features-container {
display: grid;
grid-template-columns: repeat(auto-fill, minmax(21rem, 3fr));
gap: 25px 30px;
}
#helpModal .feature-card {
border: 1px solid rgba(0, 0, 0, .125);
border-radius: 0.25rem;
padding: 1.25rem;
display: flex;
flex-direction: column;
align-items: flex-start;
}
#helpModal .feature-card .card-text {
flex: 1;
}
#support-section {
background-color: #f9f9f9;
padding: 4rem;
margin-top: 1rem;
text-align: center;
}
#support-section h1 {
margin-top: 0;
}
#support-section p {
margin-top: 0;
}
#button-group {
display: flex;
justify-content: center;
flex-wrap: wrap;
}
#github-button, #discord-button {
display: inline-block;
padding: 1rem 2rem;
margin: 1rem;
background-color: #008CBA;
color: #fff;
font-size: 1.2rem;
text-align: center;
text-decoration: none;
border-radius: 3rem;
transition: all 0.3s ease-in-out;
}
#github-button:hover, #discord-button:hover, #home-button:hover {
background-color: #005b7f;
}
#home-button {
display: block;
width: 200px;
height: 50px;
margin: 2em auto;
background-color: #008CBA;
color: white;
text-align: center;
line-height: 50px;
text-decoration: none;
font-weight: bold;
border-radius: 25px;
transition: all 0.3s ease-in-out;
}

View File

@@ -0,0 +1,10 @@
.custom-file-label {
padding-right: 90px;
}
.selected-files {
margin-top: 10px;
max-height: 150px;
overflow-y: auto;
white-space: pre-wrap;
}

View File

@@ -0,0 +1,49 @@
#game-container {
position: relative;
width: 100vh;
height: 0;
padding-bottom: 75%; /* 4:3 aspect ratio */
background-color: transparent;
margin: auto;
overflow: hidden;
border: 2px solid black; /* Add border */
}
.pdf, .player, .projectile {
position: absolute;
}
.pdf {
width: 50px;
height: 50px;
}
.player {
width: 50px;
height: 50px;
}
.projectile {
background-color: black !important;
width: 5px;
height: 10px;
}
#score, #level, #lives, #high-score {
color: black;
font-family: sans-serif;
position: absolute;
font-size: calc(14px + 0.25vw); /* Reduced font size */
}
#score {
top: 10px;
left: 10px;
}
#lives {
top: 10px;
left: calc(7vw); /* Adjusted position */
}
#high-score {
top: 10px;
left: calc(14vw); /* Adjusted position */
}
#level {
top: 10px;
right: 10px;
}

View File

@@ -12,6 +12,18 @@
bottom: 0; bottom: 0;
width: 100%; width: 100%;
} }
.navbar {
height: auto; /* Adjusts height automatically based on content */
white-space: nowrap; /* Prevents wrapping of navbar contents */
}
/* TODO enable later
.navbar .container {
max-width: 100%; //Allows the container to expand up to full width
margin-left: auto;
margin-right: auto;
}*/
html[lang-direction=ltr] * { html[lang-direction=ltr] * {
direction: ltr; direction: ltr;
@@ -66,3 +78,17 @@ html[lang-direction="rtl"] label.form-check-label {
.margin-center { .margin-center {
margin: 0 auto; margin: 0 auto;
} }
#pdf-canvas {
box-shadow: 0px 0px 8px rgba(0, 0, 0, 0.384);
width: 100%;
}
.fixed-shadow-canvas {
box-shadow: 0px 0px 8px rgba(0, 0, 0, 0.384);
width: 100%;
}
.shadow-canvas {
box-shadow: 0px 0px 8px rgba(0, 0, 0, 0.384);
}
.hidden {
display: none;
}

View File

@@ -0,0 +1,84 @@
#searchBar {
background-image: url('/images/search.svg');
background-position: 16px 16px;
background-repeat: no-repeat;
width: 100%;
font-size: 16px;
margin-bottom: 12px;
padding: 12px 20px 12px 40px;
border: 1px solid #ddd;
}
.features-container {
display: grid;
grid-template-columns: repeat(auto-fill, minmax(21rem, 3fr));
gap: 25px 30px;
}
.feature-card {
border: 2px solid rgba(0, 0, 0, .25);
border-radius: 0.25rem;
padding: 1.25rem;
display: flex;
flex-direction: column;
align-items: flex-start;
background: rgba(13, 110, 253, 0.05);
transition: transform 0.3s, border 0.3s;
}
.feature-card a {
text-decoration: none;
color: inherit;
display: flex;
flex-direction: column;
width: 100%;
height: 100%;
}
.feature-card .card-text {
flex: 1;
}
.feature-card:hover {
border: 1px solid rgba(0, 0, 0, .5);
cursor: pointer;
transform: scale(1.1);
}
.feature-card:hover .card-title {
text-decoration: underline;
}
.card-title.text-primary {
color: #000; /* Replace with your desired shade of blue */
}
.home-card-icon {
width: 30px;
height: 30px;
transform: translateY(-5px);
}
.home-card-icon-colour {
filter: invert(0.2) sepia(2) saturate(50) hue-rotate(190deg);
}
.favorite-icon {
display: none;
position: absolute;
top: 10px;
right: 10px;
}
/* Only show the favorite icons when the parent card is being hovered over */
.feature-card:hover .favorite-icon {
display: block;
}
.favorite-icon img {
filter: brightness(0);
}
.jumbotron {
padding: 3rem 3rem; /* Reduce vertical padding */
}

View File

@@ -0,0 +1,29 @@
.list-group-item {
display: flex;
justify-content: space-between;
align-items: center;
}
.filename {
flex-grow: 1;
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
margin-right: 10px;
}
.arrows {
flex-shrink: 0;
display: flex;
justify-content: flex-end;
}
.arrows .btn {
margin: 0 3px;
}
.move-up span,
.move-down span {
font-weight: bold;
font-size: 1.2em;
}

View File

@@ -0,0 +1,80 @@
#navbarSearch {
top: 100%;
right: 0;
}
#searchForm {
width: 200px; /* Adjust this value as needed */
}
/* Style the search results to match the navbar */
#searchResults {
max-height: 200px; /* Adjust this value as needed */
overflow-y: auto;
width: 100%;
}
#searchResults .dropdown-item {
display: flex;
align-items: center;
white-space: nowrap;
height: 50px; /* Fixed height */
overflow: hidden; /* Hide overflow */
}
#searchResults .icon {
margin-right: 10px;
}
#searchResults .icon-text {
display: inline;
overflow: hidden; /* Hide overflow */
text-overflow: ellipsis; /* Add ellipsis for long text */
}
.main-icon {
width: 36px;
height: 36px;
vertical-align: middle;
transform: translateY(-2px);
}
.icon {
width: 16px;
height: 16px;
vertical-align: middle;
transform: translateY(-2px);
}
.icon+.icon {
margin-left: -4px;
}
.icon-text {
margin-left: 4px;
}
.nav-item-separator {
position: relative;
margin: 0 4px; /* Adjust the margin as needed */
}
.nav-item-separator::before {
content: '';
position: absolute;
left: 0;
top: 10%; /* Adjust the top and bottom margins as needed */
bottom: 10%;
width: 1px;
background-color: #ccc; /* Adjust the color as needed */
}
.navbar-icon {
width: 20px;
height: 20px;
transform: translateY(-2px);
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 201 KiB

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