Merge branch 'Stirling-Tools:main' into main
This commit is contained in:
commit
7e4d8f45f6
253 changed files with 19791 additions and 18387 deletions
|
@ -1,2 +1,5 @@
|
||||||
# Formatting
|
# Formatting
|
||||||
5f771b785130154ed47952635b7acef371ffe0ec
|
5f771b785130154ed47952635b7acef371ffe0ec
|
||||||
|
|
||||||
|
# Normalize files
|
||||||
|
55d4fda01b2f39f5b7d7b4fda5214bd7ff0fd5dd
|
||||||
|
|
18
.github/pull_request_template.md
vendored
18
.github/pull_request_template.md
vendored
|
@ -1,4 +1,18 @@
|
||||||
# License Agreement for Contributions
|
# Description
|
||||||
By submitting this pull request, I acknowledge and agree that my contributions will be included in Stirling-PDF and that they can be relicensed in the future under MPL 2.0 (Mozilla Public License Version 2.0) license.
|
|
||||||
|
Please provide a summary of the changes, including relevant motivation and context.
|
||||||
|
|
||||||
|
Closes #(issue_number)
|
||||||
|
|
||||||
|
## Checklist:
|
||||||
|
|
||||||
|
- [ ] I have read the [Contribution Guidelines](https://github.com/Stirling-Tools/Stirling-PDF/blob/main/CONTRIBUTING.md)
|
||||||
|
- [ ] I have performed a self-review of my own code
|
||||||
|
- [ ] I have commented my code, particularly in hard-to-understand areas
|
||||||
|
- [ ] My changes generate no new warnings
|
||||||
|
|
||||||
|
## Contributor License Agreement
|
||||||
|
|
||||||
|
By submitting this pull request, I acknowledge and agree that my contributions will be included in Stirling-PDF and that they can be relicensed in the future under the MPL 2.0 (Mozilla Public License Version 2.0) license.
|
||||||
|
|
||||||
(This does not change the general open-source nature of Stirling-PDF, simply moving from one license to another license)
|
(This does not change the general open-source nature of Stirling-PDF, simply moving from one license to another license)
|
||||||
|
|
3
.github/workflows/pull_request_template.md
vendored
3
.github/workflows/pull_request_template.md
vendored
|
@ -1,3 +0,0 @@
|
||||||
# License Agreement for Contributions
|
|
||||||
By submitting this pull request, I acknowledge and agree that my contributions will be included in Stirling-PDF and that they can be relicensed in the future under MPL 2.0 (Mozilla Public License Version 2.0) license.
|
|
||||||
(This does not change the open-source nature of Stirling-PDF, simply moving from one license to another license)
|
|
60
Dockerfile
60
Dockerfile
|
@ -1,5 +1,32 @@
|
||||||
# Use the base image
|
# Main stage
|
||||||
FROM frooodle/stirling-pdf-base:version8
|
FROM alpine:3.19.1
|
||||||
|
|
||||||
|
# JDK for app
|
||||||
|
RUN echo "@testing https://dl-cdn.alpinelinux.org/alpine/edge/main" | tee -a /etc/apk/repositories && \
|
||||||
|
echo "@testing https://dl-cdn.alpinelinux.org/alpine/edge/community" | tee -a /etc/apk/repositories && \
|
||||||
|
echo "@testing https://dl-cdn.alpinelinux.org/alpine/edge/testing" | tee -a /etc/apk/repositories && \
|
||||||
|
apk add --no-cache \
|
||||||
|
ca-certificates \
|
||||||
|
tzdata \
|
||||||
|
tini \
|
||||||
|
bash \
|
||||||
|
curl \
|
||||||
|
openjdk17-jre \
|
||||||
|
# Doc conversion
|
||||||
|
libreoffice@testing \
|
||||||
|
# OCR MY PDF (unpaper for descew and other advanced featues)
|
||||||
|
ocrmypdf \
|
||||||
|
tesseract-ocr-data-eng \
|
||||||
|
# CV
|
||||||
|
py3-opencv \
|
||||||
|
# python3/pip
|
||||||
|
python3 && \
|
||||||
|
wget https://bootstrap.pypa.io/get-pip.py -qO - | python3 - --break-system-packages --no-cache-dir --upgrade && \
|
||||||
|
# uno unoconv and HTML
|
||||||
|
pip install --break-system-packages --no-cache-dir --upgrade unoconv WeasyPrint && \
|
||||||
|
mv /usr/share/tessdata /usr/share/tessdata-original
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
ARG VERSION_TAG
|
ARG VERSION_TAG
|
||||||
|
|
||||||
|
@ -12,36 +39,31 @@ ENV DOCKER_ENABLE_SECURITY=false \
|
||||||
# PGID=1000 \
|
# PGID=1000 \
|
||||||
# UMASK=022 \
|
# UMASK=022 \
|
||||||
|
|
||||||
|
# Copy necessary files
|
||||||
|
COPY scripts /scripts
|
||||||
|
COPY pipeline /pipeline
|
||||||
|
COPY src/main/resources/static/fonts/*.ttf /usr/share/fonts/opentype/noto
|
||||||
|
COPY src/main/resources/static/fonts/*.otf /usr/share/fonts/opentype/noto
|
||||||
|
COPY build/libs/*.jar app.jar
|
||||||
|
|
||||||
# Create user and group
|
# Create user and group
|
||||||
##RUN groupadd -g $PGID stirlingpdfgroup && \
|
##RUN groupadd -g $PGID stirlingpdfgroup && \
|
||||||
## useradd -u $PUID -g stirlingpdfgroup -s /bin/sh stirlingpdfuser && \
|
## useradd -u $PUID -g stirlingpdfgroup -s /bin/sh stirlingpdfuser && \
|
||||||
## mkdir -p $HOME && chown stirlingpdfuser:stirlingpdfgroup $HOME
|
## mkdir -p $HOME && chown stirlingpdfuser:stirlingpdfgroup $HOME && \
|
||||||
|
|
||||||
# Set up necessary directories and permissions
|
# Set up necessary directories and permissions
|
||||||
RUN mkdir -p /scripts /usr/share/fonts/opentype/noto /usr/share/tesseract-ocr /configs /logs /customFiles /pipeline /pipeline/defaultWebUIConfigs /pipeline/watchedFolders /pipeline/finishedFolders
|
RUN mkdir -p /configs /logs /customFiles /pipeline/watchedFolders /pipeline/finishedFolders && \
|
||||||
##&& \
|
##&& \
|
||||||
## chown -R stirlingpdfuser:stirlingpdfgroup /scripts /usr/share/fonts/opentype/noto /usr/share/tesseract-ocr /configs /customFiles && \
|
## chown -R stirlingpdfuser:stirlingpdfgroup /scripts /usr/share/fonts/opentype/noto /usr/share/tesseract-ocr /configs /customFiles && \
|
||||||
## chown -R stirlingpdfuser:stirlingpdfgroup /usr/share/tesseract-ocr-original
|
## chown -R stirlingpdfuser:stirlingpdfgroup /usr/share/tesseract-ocr-original && \
|
||||||
|
|
||||||
# Copy necessary files
|
|
||||||
COPY ./scripts/* /scripts/
|
|
||||||
COPY ./pipeline/ /pipeline/
|
|
||||||
COPY src/main/resources/static/fonts/*.ttf /usr/share/fonts/opentype/noto/
|
|
||||||
COPY src/main/resources/static/fonts/*.otf /usr/share/fonts/opentype/noto/
|
|
||||||
COPY build/libs/*.jar app.jar
|
|
||||||
|
|
||||||
# Set font cache and permissions
|
# Set font cache and permissions
|
||||||
RUN fc-cache -f -v && chmod +x /scripts/*
|
fc-cache -f -v && \
|
||||||
|
chmod +x /scripts/*
|
||||||
##&& \
|
|
||||||
## chown stirlingpdfuser:stirlingpdfgroup /app.jar && \
|
## chown stirlingpdfuser:stirlingpdfgroup /app.jar && \
|
||||||
## chmod +x /scripts/init.sh
|
## chmod +x /scripts/init.sh
|
||||||
|
|
||||||
# Expose necessary ports
|
|
||||||
EXPOSE 8080
|
EXPOSE 8080
|
||||||
|
|
||||||
# Set user and run command
|
# Set user and run command
|
||||||
##USER stirlingpdfuser
|
##USER stirlingpdfuser
|
||||||
ENTRYPOINT ["/scripts/init.sh"]
|
ENTRYPOINT ["tini", "--", "/scripts/init.sh"]
|
||||||
CMD ["java", "-Dfile.encoding=UTF-8", "-jar", "/app.jar"]
|
CMD ["java", "-Dfile.encoding=UTF-8", "-jar", "/app.jar"]
|
||||||
|
|
|
@ -1,19 +1,8 @@
|
||||||
# Build jbig2enc in a separate stage
|
# use alpine
|
||||||
FROM bellsoft/liberica-openjdk-debian:17
|
FROM alpine:3.19.1
|
||||||
|
|
||||||
ARG VERSION_TAG
|
ARG VERSION_TAG
|
||||||
|
|
||||||
RUN apt-get update && \
|
|
||||||
apt-get install -y --no-install-recommends \
|
|
||||||
libreoffice-core \
|
|
||||||
libreoffice-common \
|
|
||||||
libreoffice-writer \
|
|
||||||
libreoffice-calc \
|
|
||||||
libreoffice-impress \
|
|
||||||
unoconv && \
|
|
||||||
rm -rf /var/lib/apt/lists/*
|
|
||||||
|
|
||||||
|
|
||||||
# Set Environment Variables
|
# Set Environment Variables
|
||||||
ENV DOCKER_ENABLE_SECURITY=false \
|
ENV DOCKER_ENABLE_SECURITY=false \
|
||||||
HOME=/home/stirlingpdfuser \
|
HOME=/home/stirlingpdfuser \
|
||||||
|
@ -23,43 +12,50 @@ ENV DOCKER_ENABLE_SECURITY=false \
|
||||||
# PGID=1000 \
|
# PGID=1000 \
|
||||||
# UMASK=022 \
|
# UMASK=022 \
|
||||||
|
|
||||||
|
# Copy necessary files
|
||||||
|
COPY scripts/download-security-jar.sh /scripts/download-security-jar.sh
|
||||||
|
COPY scripts/init-without-ocr.sh /scripts/init-without-ocr.sh
|
||||||
|
COPY pipeline /pipeline
|
||||||
|
COPY src/main/resources/static/fonts/*.ttf /usr/share/fonts/opentype/noto
|
||||||
|
COPY src/main/resources/static/fonts/*.otf /usr/share/fonts/opentype/noto
|
||||||
|
COPY build/libs/*.jar app.jar
|
||||||
|
|
||||||
|
RUN echo "@testing https://dl-cdn.alpinelinux.org/alpine/edge/main" | tee -a /etc/apk/repositories && \
|
||||||
|
echo "@testing https://dl-cdn.alpinelinux.org/alpine/edge/community" | tee -a /etc/apk/repositories && \
|
||||||
|
echo "@testing https://dl-cdn.alpinelinux.org/alpine/edge/testing" | tee -a /etc/apk/repositories && \
|
||||||
|
apk add --no-cache \
|
||||||
|
ca-certificates \
|
||||||
|
tzdata \
|
||||||
|
tini \
|
||||||
|
bash \
|
||||||
|
curl \
|
||||||
|
openjdk17-jre \
|
||||||
|
# Doc conversion
|
||||||
|
libreoffice@testing \
|
||||||
|
# python and pip
|
||||||
|
python3 && \
|
||||||
|
wget https://bootstrap.pypa.io/get-pip.py -qO - | python3 - --break-system-packages --no-cache-dir --upgrade && \
|
||||||
|
# uno unoconv and HTML
|
||||||
|
pip install --break-system-packages --no-cache-dir --upgrade unoconv WeasyPrint && \
|
||||||
# Create user and group
|
# Create user and group
|
||||||
#RUN groupadd -g $PGID stirlingpdfgroup && \
|
#RUN groupadd -g $PGID stirlingpdfgroup && \
|
||||||
# useradd -u $PUID -g stirlingpdfgroup -s /bin/sh stirlingpdfuser && \
|
# useradd -u $PUID -g stirlingpdfgroup -s /bin/sh stirlingpdfuser && \
|
||||||
# mkdir -p $HOME && chown stirlingpdfuser:stirlingpdfgroup $HOME
|
# mkdir -p $HOME && chown stirlingpdfuser:stirlingpdfgroup $HOME
|
||||||
|
|
||||||
# Set up necessary directories and permissions
|
# Set up necessary directories and permissions
|
||||||
RUN mkdir -p /scripts /usr/share/fonts/opentype/noto /configs /customFiles /logs /pipeline /pipeline/defaultWebUIConfigs /pipeline/watchedFolders /pipeline/finishedFolders
|
mkdir -p /configs /logs /customFiles /pipeline/watchedFolders /pipeline/finishedFolders && \
|
||||||
|
|
||||||
# chown -R stirlingpdfuser:stirlingpdfgroup /usr/share/fonts/opentype/noto /configs /customFiles
|
# chown -R stirlingpdfuser:stirlingpdfgroup /usr/share/fonts/opentype/noto /configs /customFiles
|
||||||
|
|
||||||
# Copy necessary files
|
|
||||||
COPY ./scripts/download-security-jar.sh /scripts/download-security-jar.sh
|
|
||||||
COPY ./scripts/init-without-ocr.sh /scripts/init-without-ocr.sh
|
|
||||||
COPY ./pipeline/ /pipeline/
|
|
||||||
COPY src/main/resources/static/fonts/*.ttf /usr/share/fonts/opentype/noto/
|
|
||||||
COPY src/main/resources/static/fonts/*.otf /usr/share/fonts/opentype/noto/
|
|
||||||
COPY build/libs/*.jar app.jar
|
|
||||||
|
|
||||||
# Set font cache and permissions
|
# Set font cache and permissions
|
||||||
RUN fc-cache -f -v && \
|
fc-cache -f -v && \
|
||||||
chmod +x /scripts/init-without-ocr.sh && \
|
chmod +x /scripts/*.sh
|
||||||
chmod +x /scripts/download-security-jar.sh
|
|
||||||
|
|
||||||
|
|
||||||
# chown stirlingpdfuser:stirlingpdfgroup /app.jar
|
# chown stirlingpdfuser:stirlingpdfgroup /app.jar
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
# Expose the application port
|
|
||||||
EXPOSE 8080
|
|
||||||
|
|
||||||
# Set environment variables
|
# Set environment variables
|
||||||
ENV ENDPOINTS_GROUPS_TO_REMOVE=Python,OpenCV,OCRmyPDF
|
ENV ENDPOINTS_GROUPS_TO_REMOVE=OpenCV,OCRmyPDF
|
||||||
ENV DOCKER_ENABLE_SECURITY=false
|
ENV DOCKER_ENABLE_SECURITY=false
|
||||||
|
|
||||||
|
EXPOSE 8080
|
||||||
|
|
||||||
# Run the application
|
# Run the application
|
||||||
#USER stirlingpdfuser
|
#USER stirlingpdfuser
|
||||||
ENTRYPOINT ["/scripts/init-without-ocr.sh"]
|
ENTRYPOINT ["tini", "--", "/scripts/init-without-ocr.sh"]
|
||||||
CMD ["java", "-Dfile.encoding=UTF-8", "-jar", "/app.jar"]
|
CMD ["java", "-Dfile.encoding=UTF-8", "-jar", "/app.jar"]
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
# Build jbig2enc in a separate stage
|
# use alpine
|
||||||
FROM bellsoft/liberica-openjdk-alpine:17
|
FROM alpine:3.19.1
|
||||||
|
|
||||||
ARG VERSION_TAG
|
ARG VERSION_TAG
|
||||||
|
|
||||||
|
@ -12,35 +12,40 @@ ENV DOCKER_ENABLE_SECURITY=false \
|
||||||
# PGID=1000 \
|
# PGID=1000 \
|
||||||
# UMASK=022 \
|
# UMASK=022 \
|
||||||
|
|
||||||
|
# Copy necessary files
|
||||||
|
COPY scripts/download-security-jar.sh /scripts/download-security-jar.sh
|
||||||
|
COPY scripts/init-without-ocr.sh /scripts/init-without-ocr.sh
|
||||||
|
COPY pipeline /pipeline
|
||||||
|
COPY build/libs/*.jar app.jar
|
||||||
|
|
||||||
# Create user and group using Alpine's addgroup and adduser
|
# Create user and group using Alpine's addgroup and adduser
|
||||||
#RUN addgroup -g $PGID stirlingpdfgroup && \
|
#RUN addgroup -g $PGID stirlingpdfgroup && \
|
||||||
# adduser -u $PUID -G stirlingpdfgroup -s /bin/sh -D stirlingpdfuser && \
|
# adduser -u $PUID -G stirlingpdfgroup -s /bin/sh -D stirlingpdfuser && \
|
||||||
# mkdir -p $HOME && chown stirlingpdfuser:stirlingpdfgroup $HOME
|
# mkdir -p $HOME && chown stirlingpdfuser:stirlingpdfgroup $HOME
|
||||||
|
|
||||||
# Set up necessary directories and permissions
|
# Set up necessary directories and permissions
|
||||||
#RUN mkdir -p /scripts /configs /customFiles && \
|
#RUN mkdir -p /scripts /configs /customFiles && \
|
||||||
# chown -R stirlingpdfuser:stirlingpdfgroup /scripts /configs /customFiles /logs /pipeline /pipeline/defaultWebUIConfigs /pipeline/watchedFolders /pipeline/finishedFolders
|
# chown -R stirlingpdfuser:stirlingpdfgroup /scripts /configs /customFiles /logs /pipeline /pipeline/defaultWebUIConfigs /pipeline/watchedFolders /pipeline/finishedFolders
|
||||||
|
RUN mkdir /configs /logs /customFiles && \
|
||||||
RUN mkdir -p /scripts /usr/share/fonts/opentype/noto /configs /customFiles
|
|
||||||
COPY ./scripts/download-security-jar.sh /scripts/download-security-jar.sh
|
|
||||||
COPY ./scripts/init-without-ocr.sh /scripts/init-without-ocr.sh
|
|
||||||
COPY ./pipeline/ /pipeline/
|
|
||||||
COPY build/libs/*.jar app.jar
|
|
||||||
|
|
||||||
# Set font cache and permissions
|
# Set font cache and permissions
|
||||||
#RUN chown stirlingpdfuser:stirlingpdfgroup /app.jar
|
#RUN chown stirlingpdfuser:stirlingpdfgroup /app.jar
|
||||||
|
chmod +x /scripts/*.sh && \
|
||||||
RUN chmod +x /scripts/init-without-ocr.sh && \
|
apk add --no-cache \
|
||||||
chmod +x /scripts/download-security-jar.sh && \
|
ca-certificates \
|
||||||
apk add --no-cache curl
|
tzdata \
|
||||||
|
tini \
|
||||||
# Expose the application port
|
bash \
|
||||||
EXPOSE 8080
|
curl \
|
||||||
|
openjdk17-jre && \
|
||||||
|
echo "@testing https://dl-cdn.alpinelinux.org/alpine/edge/main" | tee -a /etc/apk/repositories && \
|
||||||
|
echo "@testing https://dl-cdn.alpinelinux.org/alpine/edge/community" | tee -a /etc/apk/repositories && \
|
||||||
|
echo "@testing https://dl-cdn.alpinelinux.org/alpine/edge/testing" | tee -a /etc/apk/repositories
|
||||||
|
|
||||||
# Set environment variables
|
# Set environment variables
|
||||||
ENV ENDPOINTS_GROUPS_TO_REMOVE=CLI
|
ENV ENDPOINTS_GROUPS_TO_REMOVE=CLI
|
||||||
|
|
||||||
ENTRYPOINT ["/scripts/init-without-ocr.sh"]
|
EXPOSE 8080
|
||||||
|
|
||||||
|
ENTRYPOINT ["tini", "--", "/scripts/init-without-ocr.sh"]
|
||||||
|
|
||||||
# Run the application
|
# Run the application
|
||||||
CMD ["java", "-Dfile.encoding=UTF-8", "-jar", "/app.jar"]
|
CMD ["java", "-Dfile.encoding=UTF-8", "-jar", "/app.jar"]
|
||||||
|
|
|
@ -1,43 +0,0 @@
|
||||||
# Main stage
|
|
||||||
FROM ubuntu:latest AS base
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
# JDK for app
|
|
||||||
RUN apt-get update && \
|
|
||||||
apt-get install -y --no-install-recommends \
|
|
||||||
openjdk-17-jre && \
|
|
||||||
rm -rf /var/lib/apt/lists/*
|
|
||||||
|
|
||||||
# Doc conversion
|
|
||||||
RUN apt-get update && \
|
|
||||||
apt-get install -y --no-install-recommends \
|
|
||||||
libreoffice-core \
|
|
||||||
libreoffice-common \
|
|
||||||
libreoffice-writer \
|
|
||||||
libreoffice-calc \
|
|
||||||
libreoffice-impress \
|
|
||||||
python3-uno \
|
|
||||||
curl \
|
|
||||||
unoconv && \
|
|
||||||
rm -rf /var/lib/apt/lists/*
|
|
||||||
|
|
||||||
|
|
||||||
# OCR MY PDF (unpaper for descew and other advanced featues)
|
|
||||||
RUN apt-get update && apt-get install -y --no-install-recommends software-properties-common gnupg2 && \
|
|
||||||
add-apt-repository ppa:alex-p/tesseract-ocr5 && apt install -y --no-install-recommends tesseract-ocr && \
|
|
||||||
apt-get update && \
|
|
||||||
apt-get install -y --no-install-recommends \
|
|
||||||
ghostscript \
|
|
||||||
python3-pip \
|
|
||||||
ocrmypdf \
|
|
||||||
unpaper && \
|
|
||||||
rm -rf /var/lib/apt/lists/* && \
|
|
||||||
mv /usr/share/tesseract-ocr /usr/share/tesseract-ocr-original && \
|
|
||||||
pip install --no-cache-dir --upgrade pip && \
|
|
||||||
pip install --no-cache-dir --upgrade ocrmypdf && \
|
|
||||||
pip install --no-cache-dir --upgrade pillow==10.0.1 reportlab==3.6.13 wheel==0.38.1 setuptools==65.5.1 pyjwt==2.4.0 cryptography==39.0.1
|
|
||||||
|
|
||||||
|
|
||||||
#CV and HTML
|
|
||||||
RUN pip install --no-cache-dir opencv-python-headless WeasyPrint
|
|
|
@ -21,7 +21,7 @@ Depending on your requirements, you can choose the appropriate language pack for
|
||||||
### Installing Language Packs
|
### Installing Language Packs
|
||||||
|
|
||||||
1. Download the desired language pack(s) by selecting the `.traineddata` file(s) for the language(s) you need.
|
1. Download the desired language pack(s) by selecting the `.traineddata` file(s) for the language(s) you need.
|
||||||
2. Place the `.traineddata` files in the Tesseract tessdata directory: `/usr/share/tesseract-ocr/5/tessdata` (Debian) or `/usr/share/tesseract/tessdata` (Fedora)
|
2. Place the `.traineddata` files in the Tesseract tessdata directory: `/usr/share/tessdata`
|
||||||
|
|
||||||
# DO NOT REMOVE EXISTING ENG.TRAINEDDATA, IT'S REQUIRED.
|
# DO NOT REMOVE EXISTING ENG.TRAINEDDATA, IT'S REQUIRED.
|
||||||
|
|
||||||
|
@ -37,14 +37,14 @@ services:
|
||||||
your_service_name:
|
your_service_name:
|
||||||
image: your_docker_image_name
|
image: your_docker_image_name
|
||||||
volumes:
|
volumes:
|
||||||
- /location/of/trainingData:/usr/share/tesseract-ocr/5/tessdata
|
- /location/of/trainingData:/usr/share/tessdata
|
||||||
```
|
```
|
||||||
|
|
||||||
|
|
||||||
#### Docker run
|
#### Docker run
|
||||||
Add the following to your existing docker run command
|
Add the following to your existing docker run command
|
||||||
```bash
|
```bash
|
||||||
-v /location/of/trainingData:/usr/share/tesseract-ocr/5/tessdata
|
-v /location/of/trainingData:/usr/share/tessdata
|
||||||
```
|
```
|
||||||
|
|
||||||
#### Non-Docker
|
#### Non-Docker
|
||||||
|
|
|
@ -139,7 +139,7 @@ Easiest is to use the langpacks provided by your repositories. Skip the other st
|
||||||
Manual:
|
Manual:
|
||||||
|
|
||||||
1. Download the desired language pack(s) by selecting the `.traineddata` file(s) for the language(s) you need.
|
1. Download the desired language pack(s) by selecting the `.traineddata` file(s) for the language(s) you need.
|
||||||
2. Place the `.traineddata` files in the Tesseract tessdata directory: `/usr/share/tesseract-ocr/5/tessdata`
|
2. Place the `.traineddata` files in the Tesseract tessdata directory: `/usr/share/tessdata`
|
||||||
3.
|
3.
|
||||||
Please view [OCRmyPDF install guide](https://ocrmypdf.readthedocs.io/en/latest/installation.html) for more info.
|
Please view [OCRmyPDF install guide](https://ocrmypdf.readthedocs.io/en/latest/installation.html) for more info.
|
||||||
**IMPORTANT:** DO NOT REMOVE EXISTING `eng.traineddata`, IT'S REQUIRED.
|
**IMPORTANT:** DO NOT REMOVE EXISTING `eng.traineddata`, IT'S REQUIRED.
|
||||||
|
|
|
@ -110,7 +110,7 @@ Docker Run
|
||||||
```bash
|
```bash
|
||||||
docker run -d \
|
docker run -d \
|
||||||
-p 8080:8080 \
|
-p 8080:8080 \
|
||||||
-v /location/of/trainingData:/usr/share/tesseract-ocr/5/tessdata \
|
-v /location/of/trainingData:/usr/share/tessdata \
|
||||||
-v /location/of/extraConfigs:/configs \
|
-v /location/of/extraConfigs:/configs \
|
||||||
-v /location/of/logs:/logs \
|
-v /location/of/logs:/logs \
|
||||||
-e DOCKER_ENABLE_SECURITY=false \
|
-e DOCKER_ENABLE_SECURITY=false \
|
||||||
|
@ -131,7 +131,7 @@ services:
|
||||||
ports:
|
ports:
|
||||||
- '8080:8080'
|
- '8080:8080'
|
||||||
volumes:
|
volumes:
|
||||||
- /location/of/trainingData:/usr/share/tesseract-ocr/5/tessdata #Required for extra OCR languages
|
- /location/of/trainingData:/usr/share/tessdata #Required for extra OCR languages
|
||||||
- /location/of/extraConfigs:/configs
|
- /location/of/extraConfigs:/configs
|
||||||
# - /location/of/customFiles:/customFiles/
|
# - /location/of/customFiles:/customFiles/
|
||||||
# - /location/of/logs:/logs/
|
# - /location/of/logs:/logs/
|
||||||
|
|
24
build.gradle
24
build.gradle
|
@ -1,18 +1,18 @@
|
||||||
plugins {
|
plugins {
|
||||||
id 'java'
|
id 'java'
|
||||||
id 'org.springframework.boot' version '3.2.1'
|
id 'org.springframework.boot' version '3.2.2'
|
||||||
id 'io.spring.dependency-management' version '1.1.3'
|
id 'io.spring.dependency-management' version '1.1.3'
|
||||||
id 'org.springdoc.openapi-gradle-plugin' version '1.8.0'
|
id 'org.springdoc.openapi-gradle-plugin' version '1.8.0'
|
||||||
id "io.swagger.swaggerhub" version "1.3.2"
|
id "io.swagger.swaggerhub" version "1.3.2"
|
||||||
id 'edu.sc.seis.launch4j' version '3.0.5'
|
id 'edu.sc.seis.launch4j' version '3.0.5'
|
||||||
id 'com.diffplug.spotless' version '6.23.3'
|
id 'com.diffplug.spotless' version '6.25.0'
|
||||||
id 'com.github.jk1.dependency-license-report' version '2.5'
|
id 'com.github.jk1.dependency-license-report' version '2.5'
|
||||||
}
|
}
|
||||||
|
|
||||||
import com.github.jk1.license.render.*
|
import com.github.jk1.license.render.*
|
||||||
|
|
||||||
group = 'stirling.software'
|
group = 'stirling.software'
|
||||||
version = '0.20.0'
|
version = '0.21.0'
|
||||||
sourceCompatibility = '17'
|
sourceCompatibility = '17'
|
||||||
|
|
||||||
repositories {
|
repositories {
|
||||||
|
@ -91,20 +91,22 @@ dependencies {
|
||||||
implementation 'ch.qos.logback:logback-core:1.4.14'
|
implementation 'ch.qos.logback:logback-core:1.4.14'
|
||||||
implementation 'org.springframework:spring-webmvc:6.1.2'
|
implementation 'org.springframework:spring-webmvc:6.1.2'
|
||||||
|
|
||||||
|
implementation("io.github.pixee:java-security-toolkit:1.1.2")
|
||||||
|
|
||||||
implementation 'org.yaml:snakeyaml:2.2'
|
implementation 'org.yaml:snakeyaml:2.2'
|
||||||
implementation 'org.springframework.boot:spring-boot-starter-web:3.2.1'
|
implementation 'org.springframework.boot:spring-boot-starter-web:3.2.2'
|
||||||
implementation 'org.springframework.boot:spring-boot-starter-thymeleaf:3.2.1'
|
implementation 'org.springframework.boot:spring-boot-starter-thymeleaf:3.2.2'
|
||||||
|
|
||||||
if (System.getenv('DOCKER_ENABLE_SECURITY') != 'false') {
|
if (System.getenv('DOCKER_ENABLE_SECURITY') != 'false') {
|
||||||
implementation 'org.springframework.boot:spring-boot-starter-security:3.2.1'
|
implementation 'org.springframework.boot:spring-boot-starter-security:3.2.2'
|
||||||
implementation 'org.thymeleaf.extras:thymeleaf-extras-springsecurity5:3.1.2.RELEASE'
|
implementation 'org.thymeleaf.extras:thymeleaf-extras-springsecurity5:3.1.2.RELEASE'
|
||||||
implementation "org.springframework.boot:spring-boot-starter-data-jpa:3.2.1"
|
implementation "org.springframework.boot:spring-boot-starter-data-jpa:3.2.2"
|
||||||
|
|
||||||
//2.2.x requires rebuild of DB file.. need migration path
|
//2.2.x requires rebuild of DB file.. need migration path
|
||||||
implementation "com.h2database:h2:2.1.214"
|
implementation "com.h2database:h2:2.1.214"
|
||||||
}
|
}
|
||||||
|
|
||||||
testImplementation 'org.springframework.boot:spring-boot-starter-test:3.2.1'
|
testImplementation 'org.springframework.boot:spring-boot-starter-test:3.2.2'
|
||||||
|
|
||||||
// Batik
|
// Batik
|
||||||
implementation 'org.apache.xmlgraphics:batik-all:1.17'
|
implementation 'org.apache.xmlgraphics:batik-all:1.17'
|
||||||
|
@ -147,8 +149,8 @@ dependencies {
|
||||||
|
|
||||||
implementation 'org.bouncycastle:bcprov-jdk18on:1.77'
|
implementation 'org.bouncycastle:bcprov-jdk18on:1.77'
|
||||||
implementation 'org.bouncycastle:bcpkix-jdk18on:1.77'
|
implementation 'org.bouncycastle:bcpkix-jdk18on:1.77'
|
||||||
implementation 'org.springframework.boot:spring-boot-starter-actuator'
|
implementation 'org.springframework.boot:spring-boot-starter-actuator:3.2.2'
|
||||||
implementation 'io.micrometer:micrometer-core'
|
implementation 'io.micrometer:micrometer-core:1.12.2'
|
||||||
implementation group: 'com.google.zxing', name: 'core', version: '3.5.2'
|
implementation group: 'com.google.zxing', name: 'core', version: '3.5.2'
|
||||||
// https://mvnrepository.com/artifact/org.commonmark/commonmark
|
// https://mvnrepository.com/artifact/org.commonmark/commonmark
|
||||||
implementation 'org.commonmark:commonmark:0.21.0'
|
implementation 'org.commonmark:commonmark:0.21.0'
|
||||||
|
@ -156,7 +158,7 @@ dependencies {
|
||||||
// https://mvnrepository.com/artifact/com.github.vladimir-bukhtoyarov/bucket4j-core
|
// https://mvnrepository.com/artifact/com.github.vladimir-bukhtoyarov/bucket4j-core
|
||||||
implementation 'com.github.vladimir-bukhtoyarov:bucket4j-core:7.6.0'
|
implementation 'com.github.vladimir-bukhtoyarov:bucket4j-core:7.6.0'
|
||||||
|
|
||||||
developmentOnly("org.springframework.boot:spring-boot-devtools")
|
developmentOnly("org.springframework.boot:spring-boot-devtools:3.2.2")
|
||||||
compileOnly 'org.projectlombok:lombok:1.18.30'
|
compileOnly 'org.projectlombok:lombok:1.18.30'
|
||||||
annotationProcessor 'org.projectlombok:lombok:1.18.28'
|
annotationProcessor 'org.projectlombok:lombok:1.18.28'
|
||||||
}
|
}
|
||||||
|
|
Binary file not shown.
Before Width: | Height: | Size: 53 KiB After Width: | Height: | Size: 8.7 KiB |
|
@ -1,310 +1,110 @@
|
||||||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||||
<!-- Created with Inkscape (http://www.inkscape.org/) -->
|
<!-- Generator: Adobe Illustrator 19.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
|
||||||
|
|
||||||
<svg
|
<svg
|
||||||
width="99.537987mm"
|
|
||||||
height="95.209366mm"
|
|
||||||
viewBox="0 0 99.537987 95.209366"
|
|
||||||
version="1.1"
|
version="1.1"
|
||||||
id="svg745"
|
id="Layer_1"
|
||||||
|
x="0px"
|
||||||
|
y="0px"
|
||||||
|
viewBox="0 0 512 512"
|
||||||
|
style="enable-background:new 0 0 512 512;"
|
||||||
xml:space="preserve"
|
xml:space="preserve"
|
||||||
inkscape:version="1.2.1 (9c6d41e4, 2022-07-14)"
|
sodipodi:docname="favicon.svg"
|
||||||
sodipodi:docname="stirling.svg"
|
inkscape:version="1.2.2 (732a01da63, 2022-12-09)"
|
||||||
inkscape:export-filename="stirling.png"
|
inkscape:export-filename="favicon.png"
|
||||||
inkscape:export-xdpi="80"
|
inkscape:export-xdpi="96"
|
||||||
inkscape:export-ydpi="80"
|
inkscape:export-ydpi="96"
|
||||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||||
xmlns:xlink="http://www.w3.org/1999/xlink"
|
|
||||||
xmlns="http://www.w3.org/2000/svg"
|
xmlns="http://www.w3.org/2000/svg"
|
||||||
xmlns:svg="http://www.w3.org/2000/svg"><sodipodi:namedview
|
xmlns:svg="http://www.w3.org/2000/svg"><defs
|
||||||
id="namedview747"
|
id="defs173">
|
||||||
|
|
||||||
|
|
||||||
|
<linearGradient
|
||||||
|
id="XMLID_5_"
|
||||||
|
gradientUnits="userSpaceOnUse"
|
||||||
|
x1="304.496"
|
||||||
|
y1="422.9102"
|
||||||
|
x2="316.036"
|
||||||
|
y2="326.2626">
|
||||||
|
<stop
|
||||||
|
offset="0"
|
||||||
|
style="stop-color:#DCF1F3"
|
||||||
|
id="stop156" />
|
||||||
|
<stop
|
||||||
|
offset="1"
|
||||||
|
style="stop-color:#C2C2C9"
|
||||||
|
id="stop158" />
|
||||||
|
</linearGradient>
|
||||||
|
|
||||||
|
</defs><sodipodi:namedview
|
||||||
|
id="namedview171"
|
||||||
pagecolor="#ffffff"
|
pagecolor="#ffffff"
|
||||||
bordercolor="#666666"
|
bordercolor="#000000"
|
||||||
borderopacity="1.0"
|
borderopacity="0.25"
|
||||||
inkscape:showpageshadow="2"
|
inkscape:showpageshadow="2"
|
||||||
inkscape:pageopacity="0.0"
|
inkscape:pageopacity="0.0"
|
||||||
inkscape:pagecheckerboard="0"
|
inkscape:pagecheckerboard="0"
|
||||||
inkscape:deskcolor="#d1d1d1"
|
inkscape:deskcolor="#d1d1d1"
|
||||||
inkscape:document-units="mm"
|
|
||||||
showgrid="false"
|
showgrid="false"
|
||||||
inkscape:zoom="0.914906"
|
inkscape:zoom="1.4142136"
|
||||||
inkscape:cx="184.17193"
|
inkscape:cx="219.91021"
|
||||||
inkscape:cy="509.88845"
|
inkscape:cy="232.63813"
|
||||||
inkscape:window-width="2293"
|
inkscape:window-width="3840"
|
||||||
inkscape:window-height="1387"
|
inkscape:window-height="2054"
|
||||||
inkscape:window-x="122"
|
inkscape:window-x="2869"
|
||||||
inkscape:window-y="25"
|
inkscape:window-y="-11"
|
||||||
inkscape:window-maximized="0"
|
inkscape:window-maximized="1"
|
||||||
inkscape:current-layer="svg745" /><defs
|
inkscape:current-layer="XMLID_4_" />
|
||||||
id="defs742"><linearGradient
|
<style
|
||||||
inkscape:collect="always"
|
type="text/css"
|
||||||
id="linearGradient72198"><stop
|
id="style150">
|
||||||
style="stop-color:#ccd6d7;stop-opacity:1;"
|
.st0{fill:#FFFFFF;}
|
||||||
|
.st1{fill:#C02223;}
|
||||||
|
.st2{fill:#882425;}
|
||||||
|
.st3{fill:url(#XMLID_5_);}
|
||||||
|
.st4{fill:url(#XMLID_7_);}
|
||||||
|
</style>
|
||||||
|
|
||||||
|
<g
|
||||||
|
id="XMLID_4_">
|
||||||
|
<path
|
||||||
|
id="XMLID_131_"
|
||||||
|
class="st1"
|
||||||
|
d="M 347.01402,14.355825 98.978019,69.02261 C 73.825483,74.547445 55.942464,96.792175 55.942464,122.52628 v 315.06096 c 0,22.39012 16.719895,41.14548 38.819234,43.76251 L 224.8861,498.36042 339.48636,384.26465 455.76603,265.15425 453.73057,84.870162 C 453.43979,62.916214 433.08513,46.632491 411.71274,51.284984 l -28.78729,6.251786 0.14539,-13.666697 C 383.36162,24.678542 365.62399,10.284894 347.01402,14.355825 Z"
|
||||||
|
sodipodi:nodetypes="ccssccccccccc"
|
||||||
|
style="stroke-width:1.45391" /><path
|
||||||
|
id="XMLID_117_"
|
||||||
|
class="st2"
|
||||||
|
d="m 383.21622,57.53677 v 285.8375 L 456.05681,265.00885 454.02135,78.763767 C 453.87595,59.863016 436.28372,45.905539 417.81914,49.97647 Z"
|
||||||
|
style="stroke-width:1.45391" /><polygon
|
||||||
|
id="XMLID_18_"
|
||||||
|
class="st3"
|
||||||
|
points="234.7,422.6 368.5,387.7 393.5,262.2 "
|
||||||
|
style="fill:url(#XMLID_5_)"
|
||||||
|
transform="matrix(1.4556308,0,0,1.4548265,-116.73161,-116.45231)" />
|
||||||
|
<linearGradient
|
||||||
|
id="XMLID_7_"
|
||||||
|
gradientUnits="userSpaceOnUse"
|
||||||
|
x1="223.0838"
|
||||||
|
y1="372.7559"
|
||||||
|
x2="241.4174"
|
||||||
|
y2="114.557"
|
||||||
|
gradientTransform="matrix(1.4539039,0,0,1.4539039,-116.19976,-116.20474)">
|
||||||
|
<stop
|
||||||
offset="0"
|
offset="0"
|
||||||
id="stop72194" /><stop
|
style="stop-color:#DCF1F3"
|
||||||
style="stop-color:#0f3a3f;stop-opacity:1;"
|
id="stop163" />
|
||||||
|
<stop
|
||||||
offset="1"
|
offset="1"
|
||||||
id="stop72196" /></linearGradient><linearGradient
|
style="stop-color:#C2C2C9"
|
||||||
inkscape:collect="always"
|
id="stop165" />
|
||||||
id="linearGradient71928"><stop
|
</linearGradient>
|
||||||
style="stop-color:#4b0005;stop-opacity:1;"
|
<path
|
||||||
offset="0"
|
id="XMLID_6_"
|
||||||
id="stop71924" /><stop
|
class="st4"
|
||||||
style="stop-color:#8f000c;stop-opacity:1;"
|
d="m 282.89686,214.84917 c 0,0 -22.24473,-28.93269 -38.67384,-36.78377 -10.46811,-4.94327 -26.02489,-6.83335 -38.23768,-0.72695 -18.02841,9.0142 -19.91848,34.31213 -3.34397,44.34406 3.92553,2.47165 9.15959,4.50711 15.99294,6.10641 36.63838,8.43264 97.12077,25.87949 89.70587,96.10304 0,0 -4.21633,65.86185 -73.56753,73.42215 -12.2128,1.30851 -24.57098,0.43617 -36.493,-2.32625 -16.42911,-3.63476 -45.50719,-11.04967 -59.75545,-19.91849 l -2.61703,-75.16682 h 6.97875 c 0,0 13.81208,33.43978 53.06749,49.57812 7.26952,2.90781 15.26599,4.07093 22.97168,2.90781 9.74116,-1.45391 21.22699,-6.68796 25.87949,-22.53551 0,0 7.85108,-23.11707 -32.85823,-35.76604 -32.56744,-10.17733 -63.24481,-20.64543 -75.89378,-54.95757 -5.961,-16.28371 -6.97874,-34.31212 -2.90781,-51.61358 5.37944,-22.53551 20.79082,-54.23062 64.40794,-67.89732 0,0 57.28381,-15.55677 96.53922,5.52484 l -1.74468,89.70587 z"
|
||||||
offset="1"
|
style="fill:url(#XMLID_7_);stroke-width:1.45391" />
|
||||||
id="stop71926" /></linearGradient><linearGradient
|
</g>
|
||||||
inkscape:collect="always"
|
</svg>
|
||||||
id="linearGradient71920"><stop
|
|
||||||
style="stop-color:#4b0005;stop-opacity:1;"
|
|
||||||
offset="0"
|
|
||||||
id="stop71916" /><stop
|
|
||||||
style="stop-color:#8f000c;stop-opacity:1;"
|
|
||||||
offset="1"
|
|
||||||
id="stop71918" /></linearGradient><linearGradient
|
|
||||||
inkscape:collect="always"
|
|
||||||
id="linearGradient69598"><stop
|
|
||||||
style="stop-color:#6a0007;stop-opacity:1;"
|
|
||||||
offset="0"
|
|
||||||
id="stop69594" /><stop
|
|
||||||
style="stop-color:#b8000f;stop-opacity:1;"
|
|
||||||
offset="1"
|
|
||||||
id="stop69596" /></linearGradient><linearGradient
|
|
||||||
inkscape:collect="always"
|
|
||||||
id="linearGradient46361"><stop
|
|
||||||
style="stop-color:#f7f6f8;stop-opacity:1;"
|
|
||||||
offset="0"
|
|
||||||
id="stop46359" /><stop
|
|
||||||
style="stop-color:#b7b7b5;stop-opacity:1;"
|
|
||||||
offset="1"
|
|
||||||
id="stop46357" /></linearGradient><linearGradient
|
|
||||||
inkscape:collect="always"
|
|
||||||
id="linearGradient40554"><stop
|
|
||||||
style="stop-color:#f4f2f4;stop-opacity:1;"
|
|
||||||
offset="0"
|
|
||||||
id="stop40550" /><stop
|
|
||||||
style="stop-color:#57767b;stop-opacity:1;"
|
|
||||||
offset="1"
|
|
||||||
id="stop40552" /></linearGradient><linearGradient
|
|
||||||
inkscape:collect="always"
|
|
||||||
id="linearGradient39095"><stop
|
|
||||||
style="stop-color:#285459;stop-opacity:1;"
|
|
||||||
offset="0"
|
|
||||||
id="stop39093" /><stop
|
|
||||||
style="stop-color:#a6b6af;stop-opacity:1;"
|
|
||||||
offset="1"
|
|
||||||
id="stop39091" /></linearGradient><linearGradient
|
|
||||||
inkscape:collect="always"
|
|
||||||
id="linearGradient36672"><stop
|
|
||||||
style="stop-color:#da453f;stop-opacity:1;"
|
|
||||||
offset="0"
|
|
||||||
id="stop36668" /><stop
|
|
||||||
style="stop-color:#a60008;stop-opacity:1;"
|
|
||||||
offset="1"
|
|
||||||
id="stop36670" /></linearGradient><linearGradient
|
|
||||||
inkscape:collect="always"
|
|
||||||
id="linearGradient19524"><stop
|
|
||||||
style="stop-color:#3a4b4f;stop-opacity:1;"
|
|
||||||
offset="0"
|
|
||||||
id="stop19522" /><stop
|
|
||||||
style="stop-color:#617979;stop-opacity:0.97461927;"
|
|
||||||
offset="1"
|
|
||||||
id="stop19520" /></linearGradient><linearGradient
|
|
||||||
inkscape:collect="always"
|
|
||||||
id="linearGradient17996"><stop
|
|
||||||
style="stop-color:#401016;stop-opacity:1;"
|
|
||||||
offset="0"
|
|
||||||
id="stop17994" /><stop
|
|
||||||
style="stop-color:#761f19;stop-opacity:1;"
|
|
||||||
offset="1"
|
|
||||||
id="stop17992" /></linearGradient><linearGradient
|
|
||||||
inkscape:collect="always"
|
|
||||||
id="linearGradient15569"><stop
|
|
||||||
style="stop-color:#8ea8ad;stop-opacity:1;"
|
|
||||||
offset="0"
|
|
||||||
id="stop15565" /><stop
|
|
||||||
style="stop-color:#e9e7eb;stop-opacity:1;"
|
|
||||||
offset="1"
|
|
||||||
id="stop15567" /></linearGradient><linearGradient
|
|
||||||
inkscape:collect="always"
|
|
||||||
id="linearGradient15557"><stop
|
|
||||||
style="stop-color:#9b0e11;stop-opacity:1;"
|
|
||||||
offset="0"
|
|
||||||
id="stop15553" /><stop
|
|
||||||
style="stop-color:#370707;stop-opacity:1;"
|
|
||||||
offset="1"
|
|
||||||
id="stop15555" /></linearGradient><linearGradient
|
|
||||||
inkscape:collect="always"
|
|
||||||
xlink:href="#linearGradient15557"
|
|
||||||
id="linearGradient15559"
|
|
||||||
x1="120.06672"
|
|
||||||
y1="63.25761"
|
|
||||||
x2="135.16347"
|
|
||||||
y2="78.078682"
|
|
||||||
gradientUnits="userSpaceOnUse" /><linearGradient
|
|
||||||
inkscape:collect="always"
|
|
||||||
xlink:href="#linearGradient15569"
|
|
||||||
id="linearGradient15571"
|
|
||||||
x1="127.97037"
|
|
||||||
y1="101.66144"
|
|
||||||
x2="133.88971"
|
|
||||||
y2="104.77026"
|
|
||||||
gradientUnits="userSpaceOnUse" /><linearGradient
|
|
||||||
inkscape:collect="always"
|
|
||||||
xlink:href="#linearGradient17996"
|
|
||||||
id="linearGradient17998"
|
|
||||||
x1="117.9284"
|
|
||||||
y1="86.055084"
|
|
||||||
x2="130.67392"
|
|
||||||
y2="76.945541"
|
|
||||||
gradientUnits="userSpaceOnUse" /><linearGradient
|
|
||||||
inkscape:collect="always"
|
|
||||||
xlink:href="#linearGradient19524"
|
|
||||||
id="linearGradient19528"
|
|
||||||
x1="130.98172"
|
|
||||||
y1="82.402977"
|
|
||||||
x2="135.72115"
|
|
||||||
y2="86.45166"
|
|
||||||
gradientUnits="userSpaceOnUse" /><linearGradient
|
|
||||||
inkscape:collect="always"
|
|
||||||
xlink:href="#linearGradient36672"
|
|
||||||
id="linearGradient36674"
|
|
||||||
x1="63.797714"
|
|
||||||
y1="74.81752"
|
|
||||||
x2="96.636673"
|
|
||||||
y2="120.29293"
|
|
||||||
gradientUnits="userSpaceOnUse" /><linearGradient
|
|
||||||
inkscape:collect="always"
|
|
||||||
xlink:href="#linearGradient39095"
|
|
||||||
id="linearGradient39097"
|
|
||||||
x1="120.54506"
|
|
||||||
y1="124.76902"
|
|
||||||
x2="128.04152"
|
|
||||||
y2="126.0704"
|
|
||||||
gradientUnits="userSpaceOnUse" /><linearGradient
|
|
||||||
inkscape:collect="always"
|
|
||||||
xlink:href="#linearGradient40554"
|
|
||||||
id="linearGradient40556"
|
|
||||||
x1="113.84585"
|
|
||||||
y1="114.04285"
|
|
||||||
x2="119.65858"
|
|
||||||
y2="128.50244"
|
|
||||||
gradientUnits="userSpaceOnUse" /><linearGradient
|
|
||||||
inkscape:collect="always"
|
|
||||||
xlink:href="#linearGradient46361"
|
|
||||||
id="linearGradient46363"
|
|
||||||
x1="73.993439"
|
|
||||||
y1="114.13906"
|
|
||||||
x2="94.845322"
|
|
||||||
y2="71.247383"
|
|
||||||
gradientUnits="userSpaceOnUse" /><linearGradient
|
|
||||||
inkscape:collect="always"
|
|
||||||
xlink:href="#linearGradient69598"
|
|
||||||
id="linearGradient69600"
|
|
||||||
x1="95.854446"
|
|
||||||
y1="114.66749"
|
|
||||||
x2="103.77842"
|
|
||||||
y2="120.1887"
|
|
||||||
gradientUnits="userSpaceOnUse" /><linearGradient
|
|
||||||
inkscape:collect="always"
|
|
||||||
xlink:href="#linearGradient71920"
|
|
||||||
id="linearGradient71922"
|
|
||||||
x1="98.580376"
|
|
||||||
y1="87.186958"
|
|
||||||
x2="118.09738"
|
|
||||||
y2="101.19449"
|
|
||||||
gradientUnits="userSpaceOnUse" /><linearGradient
|
|
||||||
inkscape:collect="always"
|
|
||||||
xlink:href="#linearGradient71928"
|
|
||||||
id="linearGradient71930"
|
|
||||||
x1="78.278267"
|
|
||||||
y1="97.433273"
|
|
||||||
x2="92.313202"
|
|
||||||
y2="104.33479"
|
|
||||||
gradientUnits="userSpaceOnUse" /><linearGradient
|
|
||||||
inkscape:collect="always"
|
|
||||||
xlink:href="#linearGradient72198"
|
|
||||||
id="linearGradient72200"
|
|
||||||
x1="125.76636"
|
|
||||||
y1="138.46817"
|
|
||||||
x2="123.3327"
|
|
||||||
y2="126.03291"
|
|
||||||
gradientUnits="userSpaceOnUse" /></defs><g
|
|
||||||
inkscape:groupmode="layer"
|
|
||||||
id="layer4"
|
|
||||||
inkscape:label="background"
|
|
||||||
style="display:inline"
|
|
||||||
sodipodi:insensitive="true"
|
|
||||||
transform="translate(-51.420144,-44.470286)"><rect
|
|
||||||
style="display:inline;fill:#ccd6d7;fill-opacity:1;stroke:none;stroke-width:4.13755;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:3.2"
|
|
||||||
id="rect72067"
|
|
||||||
width="99.481979"
|
|
||||||
height="94.999512"
|
|
||||||
x="51.476147"
|
|
||||||
y="44.680138" /></g><g
|
|
||||||
inkscape:groupmode="layer"
|
|
||||||
id="layer5"
|
|
||||||
inkscape:label="shadow"
|
|
||||||
style="display:inline"
|
|
||||||
sodipodi:insensitive="true"
|
|
||||||
transform="translate(-51.420144,-44.470286)"><path
|
|
||||||
style="display:inline;fill:url(#linearGradient72200);fill-opacity:1;stroke:none;stroke-width:0.264583px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
|
||||||
d="m 84.146049,134.73858 c 0,0 11.721038,2.48294 17.938661,2.91673 6.21763,0.43378 14.75251,0.59994 22.41237,-0.43379 8.01008,-1.081 13.19907,-2.22733 14.50043,-2.66112 1.30136,-0.43379 4.00784,-1.24297 4.15244,-2.25514 0.1446,-1.01217 -3.4703,-2.74733 -6.21763,-3.32571 -2.74732,-0.57838 -12.72444,-1.44596 -14.89337,-1.44596 -2.16894,0 -37.892901,7.20499 -37.892901,7.20499 z"
|
|
||||||
id="path72192"
|
|
||||||
sodipodi:nodetypes="cssssssc" /></g><g
|
|
||||||
inkscape:groupmode="layer"
|
|
||||||
id="layer2"
|
|
||||||
inkscape:label="Origami"
|
|
||||||
style="display:inline"
|
|
||||||
sodipodi:insensitive="true"
|
|
||||||
transform="translate(-51.420144,-44.470286)"><path
|
|
||||||
style="display:inline;fill:url(#linearGradient40556);fill-opacity:1;stroke:none;stroke-width:0.264583px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
|
||||||
d="m 84.460552,134.86721 35.165798,-6.85679 16.15467,-42.7383 z"
|
|
||||||
id="path960"
|
|
||||||
sodipodi:nodetypes="cccc" /><path
|
|
||||||
style="fill:url(#linearGradient15571);fill-opacity:1;stroke:none;stroke-width:0.264583px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
|
||||||
d="m 135.71493,85.428056 0.3984,45.049024 -9.66213,-20.46173 z"
|
|
||||||
id="path964"
|
|
||||||
sodipodi:nodetypes="cccc" /><path
|
|
||||||
style="display:inline;fill:url(#linearGradient39097);fill-opacity:1;stroke:none;stroke-width:0.264583px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
|
||||||
d="m 119.60518,128.00293 16.5337,2.48693 -9.68769,-20.5512 z"
|
|
||||||
id="path966"
|
|
||||||
sodipodi:nodetypes="cccc" /><path
|
|
||||||
style="display:inline;fill:url(#linearGradient15559);fill-opacity:1;stroke:none;stroke-width:0.264583px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
|
||||||
d="m 118.42209,57.022622 12.70423,-2.766809 -0.0785,25.087175 -12.43878,-13.376518 z"
|
|
||||||
id="path968"
|
|
||||||
sodipodi:nodetypes="ccccc" /><path
|
|
||||||
style="display:inline;fill:url(#linearGradient19528);fill-opacity:1;stroke:none;stroke-width:0.264583px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
|
||||||
d="m 135.72114,85.386768 -4.84219,-6.459493 0.0305,11.126604 z"
|
|
||||||
id="path970"
|
|
||||||
sodipodi:nodetypes="cccc" /><path
|
|
||||||
style="display:inline;fill:url(#linearGradient17998);fill-opacity:1;stroke:none;stroke-width:0.264583px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
|
||||||
d="m 119.10273,65.682415 11.96883,13.44935 -0.0899,10.819868 -11.88577,11.430427 z"
|
|
||||||
id="path972"
|
|
||||||
sodipodi:nodetypes="ccccc" /><path
|
|
||||||
style="display:inline;fill:url(#linearGradient36674);fill-opacity:1;stroke:none;stroke-width:0.264583px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
|
||||||
d="M 62.145635,130.15618 62.043392,65.435258 c 0,0 0.179321,-2.778132 1.89516,-4.036097 1.874923,-1.374597 4.341768,-1.894096 4.341768,-1.894096 l 50.91788,-11.349167 -0.0113,53.144272 -34.733274,33.56547 z"
|
|
||||||
id="path958"
|
|
||||||
sodipodi:nodetypes="ccsccccc" /></g><g
|
|
||||||
inkscape:groupmode="layer"
|
|
||||||
id="layer3"
|
|
||||||
inkscape:label="Letter"
|
|
||||||
style="display:inline"
|
|
||||||
sodipodi:insensitive="true"
|
|
||||||
transform="translate(-51.420144,-44.470286)"><path
|
|
||||||
style="display:inline;fill:url(#linearGradient69600);fill-opacity:1;stroke:none;stroke-width:0.264583px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
|
||||||
d="m 94.780881,91.406803 16.870379,17.074877 -23.723345,23.00249 -18.122131,-17.99816 5.497473,-2.80607 18.404054,-0.0511 2.35163,-8.23071 z"
|
|
||||||
id="path54894"
|
|
||||||
sodipodi:nodetypes="cccccccc" /><path
|
|
||||||
style="display:inline;fill:url(#linearGradient71930);fill-opacity:1;stroke:none;stroke-width:0.264583px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
|
||||||
d="m 72.440405,92.224764 16.15467,15.745686 4.089788,-6.79927 z"
|
|
||||||
id="path54892" /><path
|
|
||||||
style="display:inline;fill:url(#linearGradient71922);fill-opacity:1;stroke:none;stroke-width:0.264583px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
|
||||||
d="m 95.138739,84.965385 1.124691,-14.109776 22.92453,22.286787 0.008,8.164604 -3.28863,3.16649 z"
|
|
||||||
id="path54890"
|
|
||||||
sodipodi:nodetypes="cccccc"
|
|
||||||
inkscape:label="path54890" /><path
|
|
||||||
style="display:inline;fill:url(#linearGradient46363);fill-opacity:1;stroke:none;stroke-width:0.264583px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
|
|
||||||
d="m 95.138739,84.965385 h 1.226936 l -0.05112,-14.109776 c 0,0 -5.776827,-3.220709 -12.167126,-2.40275 -6.390296,0.817957 -8.151582,2.1248 -10.58233,4.396523 -1.90229,1.777838 -2.913974,3.527446 -3.987546,7.157132 -0.512646,1.733226 -0.281963,5.988892 0.613471,8.537436 0.664591,1.891528 2.453873,4.294281 4.958868,6.134686 2.662335,1.956002 8.281825,3.527443 8.281825,3.527443 0,0 5.134614,1.887351 5.572338,4.294281 0.308137,1.69437 -0.102243,3.22071 -1.635914,4.95887 -1.258314,1.42609 -3.62969,1.99377 -6.288054,1.07357 -2.658364,-0.92021 -6.139514,-3.85065 -7.106009,-4.90775 -0.817958,-0.89464 -2.820665,-3.06173 -2.890231,-4.294021 -0.01209,-0.214205 -1.229505,-0.0963 -1.229505,-0.0963 l -0.0723,14.256941 5.879073,2.24938 c 0,0 5.214483,1.78929 8.946415,1.43143 3.731934,-0.35786 7.617235,-0.51122 11.604778,-5.16336 3.987542,-4.65213 3.680812,-12.831715 2.147141,-15.899056 -1.533673,-3.067344 -3.561212,-6.138812 -10.480087,-8.281826 -5.776829,-1.789283 -7.872846,-3.01622 -8.128458,-4.396524 -0.255611,-1.380305 0.0091,-4.253646 2.760607,-5.214481 3.220711,-1.124693 5.623462,-0.05112 7.05489,1.12469 1.431425,1.175817 5.572339,5.623462 5.572339,5.623462 z"
|
|
||||||
id="path46355"
|
|
||||||
sodipodi:nodetypes="cccssssscssssscccssssssscc" /></g></svg>
|
|
||||||
|
|
Before Width: | Height: | Size: 14 KiB After Width: | Height: | Size: 4 KiB |
|
@ -21,7 +21,7 @@ services:
|
||||||
environment:
|
environment:
|
||||||
DOCKER_ENABLE_SECURITY: "true"
|
DOCKER_ENABLE_SECURITY: "true"
|
||||||
SECURITY_ENABLELOGIN: "true"
|
SECURITY_ENABLELOGIN: "true"
|
||||||
SYSTEM_DEFAULTLOCALE: en_US
|
SYSTEM_DEFAULTLOCALE: en-US
|
||||||
UI_APPNAME: Stirling-PDF-Lite
|
UI_APPNAME: Stirling-PDF-Lite
|
||||||
UI_HOMEDESCRIPTION: Demo site for Stirling-PDF-Lite Latest with Security
|
UI_HOMEDESCRIPTION: Demo site for Stirling-PDF-Lite Latest with Security
|
||||||
UI_APPNAMENAVBAR: Stirling-PDF-Lite Latest
|
UI_APPNAMENAVBAR: Stirling-PDF-Lite Latest
|
||||||
|
|
|
@ -20,7 +20,7 @@ services:
|
||||||
environment:
|
environment:
|
||||||
DOCKER_ENABLE_SECURITY: "false"
|
DOCKER_ENABLE_SECURITY: "false"
|
||||||
SECURITY_ENABLELOGIN: "false"
|
SECURITY_ENABLELOGIN: "false"
|
||||||
SYSTEM_DEFAULTLOCALE: en_US
|
SYSTEM_DEFAULTLOCALE: en-US
|
||||||
UI_APPNAME: Stirling-PDF-Lite
|
UI_APPNAME: Stirling-PDF-Lite
|
||||||
UI_HOMEDESCRIPTION: Demo site for Stirling-PDF-Lite Latest
|
UI_HOMEDESCRIPTION: Demo site for Stirling-PDF-Lite Latest
|
||||||
UI_APPNAMENAVBAR: Stirling-PDF-Lite Latest
|
UI_APPNAMENAVBAR: Stirling-PDF-Lite Latest
|
||||||
|
|
|
@ -21,7 +21,7 @@ services:
|
||||||
environment:
|
environment:
|
||||||
DOCKER_ENABLE_SECURITY: "true"
|
DOCKER_ENABLE_SECURITY: "true"
|
||||||
SECURITY_ENABLELOGIN: "true"
|
SECURITY_ENABLELOGIN: "true"
|
||||||
SYSTEM_DEFAULTLOCALE: en_US
|
SYSTEM_DEFAULTLOCALE: en-US
|
||||||
UI_APPNAME: Stirling-PDF
|
UI_APPNAME: Stirling-PDF
|
||||||
UI_HOMEDESCRIPTION: Demo site for Stirling-PDF Latest with Security
|
UI_HOMEDESCRIPTION: Demo site for Stirling-PDF Latest with Security
|
||||||
UI_APPNAMENAVBAR: Stirling-PDF Latest
|
UI_APPNAMENAVBAR: Stirling-PDF Latest
|
||||||
|
|
|
@ -21,7 +21,7 @@ services:
|
||||||
environment:
|
environment:
|
||||||
DOCKER_ENABLE_SECURITY: "true"
|
DOCKER_ENABLE_SECURITY: "true"
|
||||||
SECURITY_ENABLELOGIN: "true"
|
SECURITY_ENABLELOGIN: "true"
|
||||||
SYSTEM_DEFAULTLOCALE: en_US
|
SYSTEM_DEFAULTLOCALE: en-US
|
||||||
UI_APPNAME: Stirling-PDF-Lite
|
UI_APPNAME: Stirling-PDF-Lite
|
||||||
UI_HOMEDESCRIPTION: Demo site for Stirling-PDF-Lite Latest with Security
|
UI_HOMEDESCRIPTION: Demo site for Stirling-PDF-Lite Latest with Security
|
||||||
UI_APPNAMENAVBAR: Stirling-PDF-Lite Latest
|
UI_APPNAMENAVBAR: Stirling-PDF-Lite Latest
|
||||||
|
|
|
@ -20,7 +20,7 @@ services:
|
||||||
environment:
|
environment:
|
||||||
DOCKER_ENABLE_SECURITY: "false"
|
DOCKER_ENABLE_SECURITY: "false"
|
||||||
SECURITY_ENABLELOGIN: "false"
|
SECURITY_ENABLELOGIN: "false"
|
||||||
SYSTEM_DEFAULTLOCALE: en_US
|
SYSTEM_DEFAULTLOCALE: en-US
|
||||||
UI_APPNAME: Stirling-PDF-Ultra-lite
|
UI_APPNAME: Stirling-PDF-Ultra-lite
|
||||||
UI_HOMEDESCRIPTION: Demo site for Stirling-PDF-Ultra-lite Latest
|
UI_HOMEDESCRIPTION: Demo site for Stirling-PDF-Ultra-lite Latest
|
||||||
UI_APPNAMENAVBAR: Stirling-PDF-Ultra-lite Latest
|
UI_APPNAMENAVBAR: Stirling-PDF-Ultra-lite Latest
|
||||||
|
|
|
@ -21,7 +21,7 @@ services:
|
||||||
environment:
|
environment:
|
||||||
DOCKER_ENABLE_SECURITY: "false"
|
DOCKER_ENABLE_SECURITY: "false"
|
||||||
SECURITY_ENABLELOGIN: "false"
|
SECURITY_ENABLELOGIN: "false"
|
||||||
SYSTEM_DEFAULTLOCALE: en_US
|
SYSTEM_DEFAULTLOCALE: en-US
|
||||||
UI_APPNAME: Stirling-PDF
|
UI_APPNAME: Stirling-PDF
|
||||||
UI_HOMEDESCRIPTION: Demo site for Stirling-PDF Latest
|
UI_HOMEDESCRIPTION: Demo site for Stirling-PDF Latest
|
||||||
UI_APPNAMENAVBAR: Stirling-PDF Latest
|
UI_APPNAMENAVBAR: Stirling-PDF Latest
|
||||||
|
|
|
@ -16,7 +16,7 @@ public class PropSync {
|
||||||
Map<String, String> enProps = linesToProps(enLines);
|
Map<String, String> enProps = linesToProps(enLines);
|
||||||
|
|
||||||
for (File file : files) {
|
for (File file : files) {
|
||||||
if (!file.getName().equals("messages_en_GB.properties")) {
|
if (!"messages_en_GB.properties".equals(file.getName())) {
|
||||||
System.out.println("Processing file: " + file.getName());
|
System.out.println("Processing file: " + file.getName());
|
||||||
List<String> lines;
|
List<String> lines;
|
||||||
try {
|
try {
|
||||||
|
|
|
@ -2,11 +2,15 @@
|
||||||
|
|
||||||
# Copy the original tesseract-ocr files to the volume directory without overwriting existing files
|
# Copy the original tesseract-ocr files to the volume directory without overwriting existing files
|
||||||
echo "Copying original files without overwriting existing files"
|
echo "Copying original files without overwriting existing files"
|
||||||
mkdir -p /usr/share/tesseract-ocr
|
mkdir -p /usr/share/tessdata
|
||||||
cp -rn /usr/share/tesseract-ocr-original/* /usr/share/tesseract-ocr
|
cp -rn /usr/share/tessdata-original/* /usr/share/tessdata
|
||||||
|
|
||||||
if [ -d /usr/share/tesseract-ocr/4.00/tessdata ]; then
|
if [ -d /usr/share/tesseract-ocr/4.00/tessdata ]; then
|
||||||
cp -r /usr/share/tesseract-ocr/4.00/tessdata/* /usr/share/tesseract-ocr/5/tessdata/ || true;
|
cp -r /usr/share/tesseract-ocr/4.00/tessdata/* /usr/share/tessdata || true;
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ -d /usr/share/tesseract-ocr/5/tessdata ]; then
|
||||||
|
cp -r /usr/share/tesseract-ocr/5/tessdata/* /usr/share/tessdata || true;
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# Check if TESSERACT_LANGS environment variable is set and is not empty
|
# Check if TESSERACT_LANGS environment variable is set and is not empty
|
||||||
|
|
|
@ -6,6 +6,8 @@ import java.net.Socket;
|
||||||
import java.util.concurrent.ExecutorService;
|
import java.util.concurrent.ExecutorService;
|
||||||
import java.util.concurrent.Executors;
|
import java.util.concurrent.Executors;
|
||||||
|
|
||||||
|
import io.github.pixee.security.SystemCommand;
|
||||||
|
|
||||||
public class LibreOfficeListener {
|
public class LibreOfficeListener {
|
||||||
|
|
||||||
private static final long ACTIVITY_TIMEOUT = 20 * 60 * 1000; // 20 minutes
|
private static final long ACTIVITY_TIMEOUT = 20 * 60 * 1000; // 20 minutes
|
||||||
|
@ -44,7 +46,7 @@ public class LibreOfficeListener {
|
||||||
}
|
}
|
||||||
|
|
||||||
// Start the listener process
|
// Start the listener process
|
||||||
process = Runtime.getRuntime().exec("unoconv --listener");
|
process = SystemCommand.runCommand(Runtime.getRuntime(), "unoconv --listener");
|
||||||
lastActivityTime = System.currentTimeMillis();
|
lastActivityTime = System.currentTimeMillis();
|
||||||
|
|
||||||
// Start a background thread to monitor the activity timeout
|
// Start a background thread to monitor the activity timeout
|
||||||
|
|
|
@ -10,6 +10,8 @@ import org.springframework.boot.autoconfigure.SpringBootApplication;
|
||||||
import org.springframework.core.env.Environment;
|
import org.springframework.core.env.Environment;
|
||||||
import org.springframework.scheduling.annotation.EnableScheduling;
|
import org.springframework.scheduling.annotation.EnableScheduling;
|
||||||
|
|
||||||
|
import io.github.pixee.security.SystemCommand;
|
||||||
|
|
||||||
import jakarta.annotation.PostConstruct;
|
import jakarta.annotation.PostConstruct;
|
||||||
import stirling.software.SPDF.config.ConfigInitializer;
|
import stirling.software.SPDF.config.ConfigInitializer;
|
||||||
import stirling.software.SPDF.utils.GeneralUtils;
|
import stirling.software.SPDF.utils.GeneralUtils;
|
||||||
|
@ -24,7 +26,7 @@ public class SPdfApplication {
|
||||||
public void init() {
|
public void init() {
|
||||||
// Check if the BROWSER_OPEN environment variable is set to true
|
// Check if the BROWSER_OPEN environment variable is set to true
|
||||||
String browserOpenEnv = env.getProperty("BROWSER_OPEN");
|
String browserOpenEnv = env.getProperty("BROWSER_OPEN");
|
||||||
boolean browserOpen = browserOpenEnv != null && browserOpenEnv.equalsIgnoreCase("true");
|
boolean browserOpen = browserOpenEnv != null && "true".equalsIgnoreCase(browserOpenEnv);
|
||||||
|
|
||||||
if (browserOpen) {
|
if (browserOpen) {
|
||||||
try {
|
try {
|
||||||
|
@ -34,7 +36,7 @@ public class SPdfApplication {
|
||||||
Runtime rt = Runtime.getRuntime();
|
Runtime rt = Runtime.getRuntime();
|
||||||
if (os.contains("win")) {
|
if (os.contains("win")) {
|
||||||
// For Windows
|
// For Windows
|
||||||
rt.exec("rundll32 url.dll,FileProtocolHandler " + url);
|
SystemCommand.runCommand(rt, "rundll32 url.dll,FileProtocolHandler " + url);
|
||||||
}
|
}
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
e.printStackTrace();
|
e.printStackTrace();
|
||||||
|
|
|
@ -77,16 +77,11 @@ public class AppConfig {
|
||||||
return Files.exists(Paths.get("/.dockerenv"));
|
return Files.exists(Paths.get("/.dockerenv"));
|
||||||
}
|
}
|
||||||
|
|
||||||
@Bean(name = "bookFormatsInstalled")
|
@Bean(name = "bookAndHtmlFormatsInstalled")
|
||||||
public boolean bookFormatsInstalled() {
|
public boolean bookAndHtmlFormatsInstalled() {
|
||||||
return applicationProperties.getSystem().getCustomApplications().isInstallBookFormats();
|
|
||||||
}
|
|
||||||
|
|
||||||
@Bean(name = "htmlFormatsInstalled")
|
|
||||||
public boolean htmlFormatsInstalled() {
|
|
||||||
return applicationProperties
|
return applicationProperties
|
||||||
.getSystem()
|
.getSystem()
|
||||||
.getCustomApplications()
|
.getCustomApplications()
|
||||||
.isInstallAdvancedHtmlToPDF();
|
.isInstallBookAndHtmlFormats();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -84,7 +84,7 @@ public class ConfigInitializer
|
||||||
for (String line : templateLines) {
|
for (String line : templateLines) {
|
||||||
String key = extractKey.apply(line);
|
String key = extractKey.apply(line);
|
||||||
|
|
||||||
if (line.trim().equalsIgnoreCase("AutomaticallyGenerated:")) {
|
if ("AutomaticallyGenerated:".equalsIgnoreCase(line.trim())) {
|
||||||
insideAutoGenerated = true;
|
insideAutoGenerated = true;
|
||||||
mergedLines.add(line);
|
mergedLines.add(line);
|
||||||
continue;
|
continue;
|
||||||
|
|
|
@ -16,7 +16,7 @@ import org.springframework.stereotype.Service;
|
||||||
import stirling.software.SPDF.model.ApplicationProperties;
|
import stirling.software.SPDF.model.ApplicationProperties;
|
||||||
|
|
||||||
@Service
|
@Service
|
||||||
@DependsOn({"bookFormatsInstalled"})
|
@DependsOn({"bookAndHtmlFormatsInstalled"})
|
||||||
public class EndpointConfiguration {
|
public class EndpointConfiguration {
|
||||||
private static final Logger logger = LoggerFactory.getLogger(EndpointConfiguration.class);
|
private static final Logger logger = LoggerFactory.getLogger(EndpointConfiguration.class);
|
||||||
private Map<String, Boolean> endpointStatuses = new ConcurrentHashMap<>();
|
private Map<String, Boolean> endpointStatuses = new ConcurrentHashMap<>();
|
||||||
|
@ -24,14 +24,14 @@ public class EndpointConfiguration {
|
||||||
|
|
||||||
private final ApplicationProperties applicationProperties;
|
private final ApplicationProperties applicationProperties;
|
||||||
|
|
||||||
private boolean bookFormatsInstalled;
|
private boolean bookAndHtmlFormatsInstalled;
|
||||||
|
|
||||||
@Autowired
|
@Autowired
|
||||||
public EndpointConfiguration(
|
public EndpointConfiguration(
|
||||||
ApplicationProperties applicationProperties,
|
ApplicationProperties applicationProperties,
|
||||||
@Qualifier("bookFormatsInstalled") boolean bookFormatsInstalled) {
|
@Qualifier("bookAndHtmlFormatsInstalled") boolean bookAndHtmlFormatsInstalled) {
|
||||||
this.applicationProperties = applicationProperties;
|
this.applicationProperties = applicationProperties;
|
||||||
this.bookFormatsInstalled = bookFormatsInstalled;
|
this.bookAndHtmlFormatsInstalled = bookAndHtmlFormatsInstalled;
|
||||||
init();
|
init();
|
||||||
processEnvironmentConfigs();
|
processEnvironmentConfigs();
|
||||||
}
|
}
|
||||||
|
@ -229,7 +229,7 @@ public class EndpointConfiguration {
|
||||||
private void processEnvironmentConfigs() {
|
private void processEnvironmentConfigs() {
|
||||||
List<String> endpointsToRemove = applicationProperties.getEndpoints().getToRemove();
|
List<String> endpointsToRemove = applicationProperties.getEndpoints().getToRemove();
|
||||||
List<String> groupsToRemove = applicationProperties.getEndpoints().getGroupsToRemove();
|
List<String> groupsToRemove = applicationProperties.getEndpoints().getGroupsToRemove();
|
||||||
if (!bookFormatsInstalled) {
|
if (!bookAndHtmlFormatsInstalled) {
|
||||||
groupsToRemove.add("Calibre");
|
groupsToRemove.add("Calibre");
|
||||||
}
|
}
|
||||||
if (endpointsToRemove != null) {
|
if (endpointsToRemove != null) {
|
||||||
|
|
|
@ -26,12 +26,8 @@ public class PostStartupProcesses {
|
||||||
private boolean runningInDocker;
|
private boolean runningInDocker;
|
||||||
|
|
||||||
@Autowired
|
@Autowired
|
||||||
@Qualifier("bookFormatsInstalled")
|
@Qualifier("bookAndHtmlFormatsInstalled")
|
||||||
private boolean bookFormatsInstalled;
|
private boolean bookAndHtmlFormatsInstalled;
|
||||||
|
|
||||||
@Autowired
|
|
||||||
@Qualifier("htmlFormatsInstalled")
|
|
||||||
private boolean htmlFormatsInstalled;
|
|
||||||
|
|
||||||
private static final Logger logger = LoggerFactory.getLogger(PostStartupProcesses.class);
|
private static final Logger logger = LoggerFactory.getLogger(PostStartupProcesses.class);
|
||||||
|
|
||||||
|
@ -39,34 +35,11 @@ public class PostStartupProcesses {
|
||||||
public void runInstallCommandBasedOnEnvironment() throws IOException, InterruptedException {
|
public void runInstallCommandBasedOnEnvironment() throws IOException, InterruptedException {
|
||||||
List<List<String>> commands = new ArrayList<>();
|
List<List<String>> commands = new ArrayList<>();
|
||||||
// Checking for DOCKER_INSTALL_BOOK_FORMATS environment variable
|
// Checking for DOCKER_INSTALL_BOOK_FORMATS environment variable
|
||||||
if (bookFormatsInstalled) {
|
if (bookAndHtmlFormatsInstalled) {
|
||||||
List<String> tmpList = new ArrayList<>();
|
List<String> tmpList = new ArrayList<>();
|
||||||
// Set up the timezone configuration commands
|
|
||||||
tmpList.addAll(
|
|
||||||
Arrays.asList(
|
|
||||||
"sh",
|
|
||||||
"-c",
|
|
||||||
"echo 'tzdata tzdata/Areas select Europe' | debconf-set-selections; "
|
|
||||||
+ "echo 'tzdata tzdata/Zones/Europe select Berlin' | debconf-set-selections"));
|
|
||||||
commands.add(tmpList);
|
|
||||||
|
|
||||||
// Install calibre with DEBIAN_FRONTEND set to noninteractive
|
|
||||||
tmpList = new ArrayList<>();
|
tmpList = new ArrayList<>();
|
||||||
tmpList.addAll(
|
tmpList.addAll(Arrays.asList("apk add --no-cache calibre"));
|
||||||
Arrays.asList(
|
|
||||||
"sh",
|
|
||||||
"-c",
|
|
||||||
"DEBIAN_FRONTEND=noninteractive apt-get install -y --no-install-recommends calibre"));
|
|
||||||
commands.add(tmpList);
|
|
||||||
}
|
|
||||||
|
|
||||||
// Checking for DOCKER_INSTALL_HTML_FORMATS environment variable
|
|
||||||
if (htmlFormatsInstalled) {
|
|
||||||
List<String> tmpList = new ArrayList<>();
|
|
||||||
// Add -y flag for automatic yes to prompts and --no-install-recommends to reduce size
|
|
||||||
tmpList.addAll(
|
|
||||||
Arrays.asList(
|
|
||||||
"apt-get", "install", "wkhtmltopdf", "-y", "--no-install-recommends"));
|
|
||||||
commands.add(tmpList);
|
commands.add(tmpList);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -74,8 +47,6 @@ public class PostStartupProcesses {
|
||||||
// Run the command
|
// Run the command
|
||||||
if (runningInDocker) {
|
if (runningInDocker) {
|
||||||
List<String> tmpList = new ArrayList<>();
|
List<String> tmpList = new ArrayList<>();
|
||||||
tmpList.addAll(Arrays.asList("apt-get", "update"));
|
|
||||||
commands.add(0, tmpList);
|
|
||||||
|
|
||||||
for (List<String> list : commands) {
|
for (List<String> list : commands) {
|
||||||
ProcessExecutorResult returnCode =
|
ProcessExecutorResult returnCode =
|
||||||
|
|
|
@ -21,6 +21,7 @@ import org.springframework.web.bind.annotation.RequestMapping;
|
||||||
import org.springframework.web.bind.annotation.RestController;
|
import org.springframework.web.bind.annotation.RestController;
|
||||||
import org.springframework.web.multipart.MultipartFile;
|
import org.springframework.web.multipart.MultipartFile;
|
||||||
|
|
||||||
|
import io.github.pixee.security.Filenames;
|
||||||
import io.swagger.v3.oas.annotations.Operation;
|
import io.swagger.v3.oas.annotations.Operation;
|
||||||
import io.swagger.v3.oas.annotations.tags.Tag;
|
import io.swagger.v3.oas.annotations.tags.Tag;
|
||||||
|
|
||||||
|
@ -136,6 +137,7 @@ public class MultiPageLayoutController {
|
||||||
byte[] result = baos.toByteArray();
|
byte[] result = baos.toByteArray();
|
||||||
return WebResponseUtils.bytesToWebResponse(
|
return WebResponseUtils.bytesToWebResponse(
|
||||||
result,
|
result,
|
||||||
file.getOriginalFilename().replaceFirst("[.][^.]+$", "") + "_layoutChanged.pdf");
|
Filenames.toSimpleFileName(file.getOriginalFilename()).replaceFirst("[.][^.]+$", "")
|
||||||
|
+ "_layoutChanged.pdf");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -3,6 +3,7 @@ package stirling.software.SPDF.controller.api;
|
||||||
import java.io.ByteArrayOutputStream;
|
import java.io.ByteArrayOutputStream;
|
||||||
import java.io.File;
|
import java.io.File;
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
|
import java.nio.file.Files;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
@ -19,6 +20,7 @@ import org.springframework.web.bind.annotation.RequestMapping;
|
||||||
import org.springframework.web.bind.annotation.RestController;
|
import org.springframework.web.bind.annotation.RestController;
|
||||||
import org.springframework.web.multipart.MultipartFile;
|
import org.springframework.web.multipart.MultipartFile;
|
||||||
|
|
||||||
|
import io.github.pixee.security.Filenames;
|
||||||
import io.swagger.v3.oas.annotations.Operation;
|
import io.swagger.v3.oas.annotations.Operation;
|
||||||
import io.swagger.v3.oas.annotations.tags.Tag;
|
import io.swagger.v3.oas.annotations.tags.Tag;
|
||||||
|
|
||||||
|
@ -75,7 +77,8 @@ public class PdfOverlayController {
|
||||||
overlay.overlay(overlayGuide).save(outputStream);
|
overlay.overlay(overlayGuide).save(outputStream);
|
||||||
byte[] data = outputStream.toByteArray();
|
byte[] data = outputStream.toByteArray();
|
||||||
String outputFilename =
|
String outputFilename =
|
||||||
baseFile.getOriginalFilename().replaceFirst("[.][^.]+$", "")
|
Filenames.toSimpleFileName(baseFile.getOriginalFilename())
|
||||||
|
.replaceFirst("[.][^.]+$", "")
|
||||||
+ "_overlayed.pdf"; // Remove file extension and append .pdf
|
+ "_overlayed.pdf"; // Remove file extension and append .pdf
|
||||||
|
|
||||||
return WebResponseUtils.bytesToWebResponse(
|
return WebResponseUtils.bytesToWebResponse(
|
||||||
|
@ -135,7 +138,7 @@ public class PdfOverlayController {
|
||||||
try (PDDocument overlayPdf = Loader.loadPDF(overlayFiles[overlayFileIndex])) {
|
try (PDDocument overlayPdf = Loader.loadPDF(overlayFiles[overlayFileIndex])) {
|
||||||
PDDocument singlePageDocument = new PDDocument();
|
PDDocument singlePageDocument = new PDDocument();
|
||||||
singlePageDocument.addPage(overlayPdf.getPage(pageCountInCurrentOverlay));
|
singlePageDocument.addPage(overlayPdf.getPage(pageCountInCurrentOverlay));
|
||||||
File tempFile = File.createTempFile("overlay-page-", ".pdf");
|
File tempFile = Files.createTempFile("overlay-page-", ".pdf").toFile();
|
||||||
singlePageDocument.save(tempFile);
|
singlePageDocument.save(tempFile);
|
||||||
singlePageDocument.close();
|
singlePageDocument.close();
|
||||||
|
|
||||||
|
|
|
@ -16,6 +16,7 @@ import org.springframework.web.bind.annotation.RequestMapping;
|
||||||
import org.springframework.web.bind.annotation.RestController;
|
import org.springframework.web.bind.annotation.RestController;
|
||||||
import org.springframework.web.multipart.MultipartFile;
|
import org.springframework.web.multipart.MultipartFile;
|
||||||
|
|
||||||
|
import io.github.pixee.security.Filenames;
|
||||||
import io.swagger.v3.oas.annotations.Operation;
|
import io.swagger.v3.oas.annotations.Operation;
|
||||||
import io.swagger.v3.oas.annotations.tags.Tag;
|
import io.swagger.v3.oas.annotations.tags.Tag;
|
||||||
|
|
||||||
|
@ -57,7 +58,9 @@ public class RearrangePagesPDFController {
|
||||||
}
|
}
|
||||||
return WebResponseUtils.pdfDocToWebResponse(
|
return WebResponseUtils.pdfDocToWebResponse(
|
||||||
document,
|
document,
|
||||||
pdfFile.getOriginalFilename().replaceFirst("[.][^.]+$", "") + "_removed_pages.pdf");
|
Filenames.toSimpleFileName(pdfFile.getOriginalFilename())
|
||||||
|
.replaceFirst("[.][^.]+$", "")
|
||||||
|
+ "_removed_pages.pdf");
|
||||||
}
|
}
|
||||||
|
|
||||||
private List<Integer> removeFirst(int totalPages) {
|
private List<Integer> removeFirst(int totalPages) {
|
||||||
|
@ -211,7 +214,8 @@ public class RearrangePagesPDFController {
|
||||||
|
|
||||||
return WebResponseUtils.pdfDocToWebResponse(
|
return WebResponseUtils.pdfDocToWebResponse(
|
||||||
document,
|
document,
|
||||||
pdfFile.getOriginalFilename().replaceFirst("[.][^.]+$", "")
|
Filenames.toSimpleFileName(pdfFile.getOriginalFilename())
|
||||||
|
.replaceFirst("[.][^.]+$", "")
|
||||||
+ "_rearranged.pdf");
|
+ "_rearranged.pdf");
|
||||||
} catch (IOException e) {
|
} catch (IOException e) {
|
||||||
logger.error("Failed rearranging documents", e);
|
logger.error("Failed rearranging documents", e);
|
||||||
|
|
|
@ -15,6 +15,7 @@ import org.springframework.web.bind.annotation.RequestMapping;
|
||||||
import org.springframework.web.bind.annotation.RestController;
|
import org.springframework.web.bind.annotation.RestController;
|
||||||
import org.springframework.web.multipart.MultipartFile;
|
import org.springframework.web.multipart.MultipartFile;
|
||||||
|
|
||||||
|
import io.github.pixee.security.Filenames;
|
||||||
import io.swagger.v3.oas.annotations.Operation;
|
import io.swagger.v3.oas.annotations.Operation;
|
||||||
import io.swagger.v3.oas.annotations.tags.Tag;
|
import io.swagger.v3.oas.annotations.tags.Tag;
|
||||||
|
|
||||||
|
@ -49,6 +50,8 @@ public class RotationController {
|
||||||
|
|
||||||
return WebResponseUtils.pdfDocToWebResponse(
|
return WebResponseUtils.pdfDocToWebResponse(
|
||||||
document,
|
document,
|
||||||
pdfFile.getOriginalFilename().replaceFirst("[.][^.]+$", "") + "_rotated.pdf");
|
Filenames.toSimpleFileName(pdfFile.getOriginalFilename())
|
||||||
|
.replaceFirst("[.][^.]+$", "")
|
||||||
|
+ "_rotated.pdf");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -22,6 +22,7 @@ import org.springframework.web.bind.annotation.RequestMapping;
|
||||||
import org.springframework.web.bind.annotation.RestController;
|
import org.springframework.web.bind.annotation.RestController;
|
||||||
import org.springframework.web.multipart.MultipartFile;
|
import org.springframework.web.multipart.MultipartFile;
|
||||||
|
|
||||||
|
import io.github.pixee.security.Filenames;
|
||||||
import io.swagger.v3.oas.annotations.Operation;
|
import io.swagger.v3.oas.annotations.Operation;
|
||||||
import io.swagger.v3.oas.annotations.tags.Tag;
|
import io.swagger.v3.oas.annotations.tags.Tag;
|
||||||
|
|
||||||
|
@ -112,6 +113,7 @@ public class ScalePagesController {
|
||||||
|
|
||||||
return WebResponseUtils.bytesToWebResponse(
|
return WebResponseUtils.bytesToWebResponse(
|
||||||
baos.toByteArray(),
|
baos.toByteArray(),
|
||||||
file.getOriginalFilename().replaceFirst("[.][^.]+$", "") + "_scaled.pdf");
|
Filenames.toSimpleFileName(file.getOriginalFilename()).replaceFirst("[.][^.]+$", "")
|
||||||
|
+ "_scaled.pdf");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -23,6 +23,7 @@ import org.springframework.web.bind.annotation.RequestMapping;
|
||||||
import org.springframework.web.bind.annotation.RestController;
|
import org.springframework.web.bind.annotation.RestController;
|
||||||
import org.springframework.web.multipart.MultipartFile;
|
import org.springframework.web.multipart.MultipartFile;
|
||||||
|
|
||||||
|
import io.github.pixee.security.Filenames;
|
||||||
import io.swagger.v3.oas.annotations.Operation;
|
import io.swagger.v3.oas.annotations.Operation;
|
||||||
import io.swagger.v3.oas.annotations.tags.Tag;
|
import io.swagger.v3.oas.annotations.tags.Tag;
|
||||||
|
|
||||||
|
@ -49,7 +50,7 @@ public class SplitPDFController {
|
||||||
|
|
||||||
PDDocument document = Loader.loadPDF(file.getBytes());
|
PDDocument document = Loader.loadPDF(file.getBytes());
|
||||||
|
|
||||||
List<Integer> pageNumbers = request.getPageNumbersList(document);
|
List<Integer> pageNumbers = request.getPageNumbersList(document, true);
|
||||||
if (!pageNumbers.contains(document.getNumberOfPages() - 1))
|
if (!pageNumbers.contains(document.getNumberOfPages() - 1))
|
||||||
pageNumbers.add(document.getNumberOfPages() - 1);
|
pageNumbers.add(document.getNumberOfPages() - 1);
|
||||||
logger.info(
|
logger.info(
|
||||||
|
@ -83,7 +84,9 @@ public class SplitPDFController {
|
||||||
|
|
||||||
Path zipFile = Files.createTempFile("split_documents", ".zip");
|
Path zipFile = Files.createTempFile("split_documents", ".zip");
|
||||||
|
|
||||||
String filename = file.getOriginalFilename().replaceFirst("[.][^.]+$", "");
|
String filename =
|
||||||
|
Filenames.toSimpleFileName(file.getOriginalFilename())
|
||||||
|
.replaceFirst("[.][^.]+$", "");
|
||||||
try (ZipOutputStream zipOut = new ZipOutputStream(Files.newOutputStream(zipFile))) {
|
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++) {
|
||||||
|
|
|
@ -26,6 +26,7 @@ import org.springframework.web.bind.annotation.RequestMapping;
|
||||||
import org.springframework.web.bind.annotation.RestController;
|
import org.springframework.web.bind.annotation.RestController;
|
||||||
import org.springframework.web.multipart.MultipartFile;
|
import org.springframework.web.multipart.MultipartFile;
|
||||||
|
|
||||||
|
import io.github.pixee.security.Filenames;
|
||||||
import io.swagger.v3.oas.annotations.Operation;
|
import io.swagger.v3.oas.annotations.Operation;
|
||||||
import io.swagger.v3.oas.annotations.tags.Tag;
|
import io.swagger.v3.oas.annotations.tags.Tag;
|
||||||
|
|
||||||
|
@ -64,7 +65,9 @@ public class SplitPdfBySectionsController {
|
||||||
sourceDocument.close();
|
sourceDocument.close();
|
||||||
|
|
||||||
Path zipFile = Files.createTempFile("split_documents", ".zip");
|
Path zipFile = Files.createTempFile("split_documents", ".zip");
|
||||||
String filename = file.getOriginalFilename().replaceFirst("[.][^.]+$", "");
|
String filename =
|
||||||
|
Filenames.toSimpleFileName(file.getOriginalFilename())
|
||||||
|
.replaceFirst("[.][^.]+$", "");
|
||||||
byte[] data;
|
byte[] data;
|
||||||
|
|
||||||
try (ZipOutputStream zipOut = new ZipOutputStream(Files.newOutputStream(zipFile))) {
|
try (ZipOutputStream zipOut = new ZipOutputStream(Files.newOutputStream(zipFile))) {
|
||||||
|
@ -122,7 +125,7 @@ public class SplitPdfBySectionsController {
|
||||||
// Set clipping area and position
|
// Set clipping area and position
|
||||||
float translateX = -subPageWidth * i;
|
float translateX = -subPageWidth * i;
|
||||||
|
|
||||||
//float translateY = height - subPageHeight * (verticalDivisions - j);
|
// float translateY = height - subPageHeight * (verticalDivisions - j);
|
||||||
float translateY = -subPageHeight * (verticalDivisions - 1 - j);
|
float translateY = -subPageHeight * (verticalDivisions - 1 - j);
|
||||||
|
|
||||||
contentStream.saveGraphicsState();
|
contentStream.saveGraphicsState();
|
||||||
|
|
|
@ -20,6 +20,7 @@ import org.springframework.web.bind.annotation.RequestMapping;
|
||||||
import org.springframework.web.bind.annotation.RestController;
|
import org.springframework.web.bind.annotation.RestController;
|
||||||
import org.springframework.web.multipart.MultipartFile;
|
import org.springframework.web.multipart.MultipartFile;
|
||||||
|
|
||||||
|
import io.github.pixee.security.Filenames;
|
||||||
import io.swagger.v3.oas.annotations.Operation;
|
import io.swagger.v3.oas.annotations.Operation;
|
||||||
import io.swagger.v3.oas.annotations.tags.Tag;
|
import io.swagger.v3.oas.annotations.tags.Tag;
|
||||||
|
|
||||||
|
@ -120,7 +121,9 @@ public class SplitPdfBySizeController {
|
||||||
sourceDocument.close();
|
sourceDocument.close();
|
||||||
|
|
||||||
Path zipFile = Files.createTempFile("split_documents", ".zip");
|
Path zipFile = Files.createTempFile("split_documents", ".zip");
|
||||||
String filename = file.getOriginalFilename().replaceFirst("[.][^.]+$", "");
|
String filename =
|
||||||
|
Filenames.toSimpleFileName(file.getOriginalFilename())
|
||||||
|
.replaceFirst("[.][^.]+$", "");
|
||||||
byte[] data;
|
byte[] data;
|
||||||
|
|
||||||
try (ZipOutputStream zipOut = new ZipOutputStream(Files.newOutputStream(zipFile))) {
|
try (ZipOutputStream zipOut = new ZipOutputStream(Files.newOutputStream(zipFile))) {
|
||||||
|
|
|
@ -9,6 +9,7 @@ import org.springframework.web.bind.annotation.RequestMapping;
|
||||||
import org.springframework.web.bind.annotation.RestController;
|
import org.springframework.web.bind.annotation.RestController;
|
||||||
import org.springframework.web.multipart.MultipartFile;
|
import org.springframework.web.multipart.MultipartFile;
|
||||||
|
|
||||||
|
import io.github.pixee.security.Filenames;
|
||||||
import io.swagger.v3.oas.annotations.Operation;
|
import io.swagger.v3.oas.annotations.Operation;
|
||||||
import io.swagger.v3.oas.annotations.tags.Tag;
|
import io.swagger.v3.oas.annotations.tags.Tag;
|
||||||
|
|
||||||
|
@ -22,28 +23,28 @@ import stirling.software.SPDF.utils.WebResponseUtils;
|
||||||
public class ConvertBookToPDFController {
|
public class ConvertBookToPDFController {
|
||||||
|
|
||||||
@Autowired
|
@Autowired
|
||||||
@Qualifier("bookFormatsInstalled")
|
@Qualifier("bookAndHtmlFormatsInstalled")
|
||||||
private boolean bookFormatsInstalled;
|
private boolean bookAndHtmlFormatsInstalled;
|
||||||
|
|
||||||
@PostMapping(consumes = "multipart/form-data", value = "/book/pdf")
|
@PostMapping(consumes = "multipart/form-data", value = "/book/pdf")
|
||||||
@Operation(
|
@Operation(
|
||||||
summary =
|
summary =
|
||||||
"Convert a BOOK/comic (*.epub | *.mobi | *.azw3 | *.fb2 | *.txt | *.docx) to PDF",
|
"Convert a BOOK/comic (*.epub | *.mobi | *.azw3 | *.fb2 | *.txt | *.docx) to PDF",
|
||||||
description =
|
description =
|
||||||
"(Requires bookFormatsInstalled flag and Calibre installed) This endpoint takes an BOOK/comic (*.epub | *.mobi | *.azw3 | *.fb2 | *.txt | *.docx) input and converts it to PDF format.")
|
"(Requires bookAndHtmlFormatsInstalled flag and Calibre installed) This endpoint takes an BOOK/comic (*.epub | *.mobi | *.azw3 | *.fb2 | *.txt | *.docx) input and converts it to PDF format.")
|
||||||
public ResponseEntity<byte[]> HtmlToPdf(@ModelAttribute GeneralFile request) throws Exception {
|
public ResponseEntity<byte[]> HtmlToPdf(@ModelAttribute GeneralFile request) throws Exception {
|
||||||
MultipartFile fileInput = request.getFileInput();
|
MultipartFile fileInput = request.getFileInput();
|
||||||
|
|
||||||
if (!bookFormatsInstalled) {
|
if (!bookAndHtmlFormatsInstalled) {
|
||||||
throw new IllegalArgumentException(
|
throw new IllegalArgumentException(
|
||||||
"bookFormatsInstalled flag is False, this functionality is not avaiable");
|
"bookAndHtmlFormatsInstalled flag is False, this functionality is not avaiable");
|
||||||
}
|
}
|
||||||
|
|
||||||
if (fileInput == null) {
|
if (fileInput == null) {
|
||||||
throw new IllegalArgumentException("Please provide a file for conversion.");
|
throw new IllegalArgumentException("Please provide a file for conversion.");
|
||||||
}
|
}
|
||||||
|
|
||||||
String originalFilename = fileInput.getOriginalFilename();
|
String originalFilename = Filenames.toSimpleFileName(fileInput.getOriginalFilename());
|
||||||
|
|
||||||
if (originalFilename != null) {
|
if (originalFilename != null) {
|
||||||
String originalFilenameLower = originalFilename.toLowerCase();
|
String originalFilenameLower = originalFilename.toLowerCase();
|
||||||
|
|
|
@ -9,10 +9,11 @@ import org.springframework.web.bind.annotation.RequestMapping;
|
||||||
import org.springframework.web.bind.annotation.RestController;
|
import org.springframework.web.bind.annotation.RestController;
|
||||||
import org.springframework.web.multipart.MultipartFile;
|
import org.springframework.web.multipart.MultipartFile;
|
||||||
|
|
||||||
|
import io.github.pixee.security.Filenames;
|
||||||
import io.swagger.v3.oas.annotations.Operation;
|
import io.swagger.v3.oas.annotations.Operation;
|
||||||
import io.swagger.v3.oas.annotations.tags.Tag;
|
import io.swagger.v3.oas.annotations.tags.Tag;
|
||||||
|
|
||||||
import stirling.software.SPDF.model.api.GeneralFile;
|
import stirling.software.SPDF.model.api.converters.HTMLToPdfRequest;
|
||||||
import stirling.software.SPDF.utils.FileToPdf;
|
import stirling.software.SPDF.utils.FileToPdf;
|
||||||
import stirling.software.SPDF.utils.WebResponseUtils;
|
import stirling.software.SPDF.utils.WebResponseUtils;
|
||||||
|
|
||||||
|
@ -22,15 +23,16 @@ import stirling.software.SPDF.utils.WebResponseUtils;
|
||||||
public class ConvertHtmlToPDF {
|
public class ConvertHtmlToPDF {
|
||||||
|
|
||||||
@Autowired
|
@Autowired
|
||||||
@Qualifier("htmlFormatsInstalled")
|
@Qualifier("bookAndHtmlFormatsInstalled")
|
||||||
private boolean htmlFormatsInstalled;
|
private boolean bookAndHtmlFormatsInstalled;
|
||||||
|
|
||||||
@PostMapping(consumes = "multipart/form-data", value = "/html/pdf")
|
@PostMapping(consumes = "multipart/form-data", value = "/html/pdf")
|
||||||
@Operation(
|
@Operation(
|
||||||
summary = "Convert an HTML or ZIP (containing HTML and CSS) to PDF",
|
summary = "Convert an HTML or ZIP (containing HTML and CSS) to PDF",
|
||||||
description =
|
description =
|
||||||
"This endpoint takes an HTML or ZIP file input and converts it to a PDF format.")
|
"This endpoint takes an HTML or ZIP file input and converts it to a PDF format.")
|
||||||
public ResponseEntity<byte[]> HtmlToPdf(@ModelAttribute GeneralFile request) throws Exception {
|
public ResponseEntity<byte[]> HtmlToPdf(@ModelAttribute HTMLToPdfRequest request)
|
||||||
|
throws Exception {
|
||||||
MultipartFile fileInput = request.getFileInput();
|
MultipartFile fileInput = request.getFileInput();
|
||||||
|
|
||||||
if (fileInput == null) {
|
if (fileInput == null) {
|
||||||
|
@ -38,14 +40,17 @@ public class ConvertHtmlToPDF {
|
||||||
"Please provide an HTML or ZIP file for conversion.");
|
"Please provide an HTML or ZIP file for conversion.");
|
||||||
}
|
}
|
||||||
|
|
||||||
String originalFilename = fileInput.getOriginalFilename();
|
String originalFilename = Filenames.toSimpleFileName(fileInput.getOriginalFilename());
|
||||||
if (originalFilename == null
|
if (originalFilename == null
|
||||||
|| (!originalFilename.endsWith(".html") && !originalFilename.endsWith(".zip"))) {
|
|| (!originalFilename.endsWith(".html") && !originalFilename.endsWith(".zip"))) {
|
||||||
throw new IllegalArgumentException("File must be either .html or .zip format.");
|
throw new IllegalArgumentException("File must be either .html or .zip format.");
|
||||||
}
|
}
|
||||||
byte[] pdfBytes =
|
byte[] pdfBytes =
|
||||||
FileToPdf.convertHtmlToPdf(
|
FileToPdf.convertHtmlToPdf(
|
||||||
fileInput.getBytes(), originalFilename, htmlFormatsInstalled);
|
request,
|
||||||
|
fileInput.getBytes(),
|
||||||
|
originalFilename,
|
||||||
|
bookAndHtmlFormatsInstalled);
|
||||||
|
|
||||||
String outputFilename =
|
String outputFilename =
|
||||||
originalFilename.replaceFirst("[.][^.]+$", "")
|
originalFilename.replaceFirst("[.][^.]+$", "")
|
||||||
|
|
|
@ -18,6 +18,7 @@ import org.springframework.web.bind.annotation.RequestMapping;
|
||||||
import org.springframework.web.bind.annotation.RestController;
|
import org.springframework.web.bind.annotation.RestController;
|
||||||
import org.springframework.web.multipart.MultipartFile;
|
import org.springframework.web.multipart.MultipartFile;
|
||||||
|
|
||||||
|
import io.github.pixee.security.Filenames;
|
||||||
import io.swagger.v3.oas.annotations.Operation;
|
import io.swagger.v3.oas.annotations.Operation;
|
||||||
import io.swagger.v3.oas.annotations.tags.Tag;
|
import io.swagger.v3.oas.annotations.tags.Tag;
|
||||||
|
|
||||||
|
@ -54,9 +55,11 @@ public class ConvertImgPDFController {
|
||||||
colorTypeResult = ImageType.BINARY;
|
colorTypeResult = ImageType.BINARY;
|
||||||
}
|
}
|
||||||
// returns bytes for image
|
// returns bytes for image
|
||||||
boolean singleImage = singleOrMultiple.equals("single");
|
boolean singleImage = "single".equals(singleOrMultiple);
|
||||||
byte[] result = null;
|
byte[] result = null;
|
||||||
String filename = file.getOriginalFilename().replaceFirst("[.][^.]+$", "");
|
String filename =
|
||||||
|
Filenames.toSimpleFileName(file.getOriginalFilename())
|
||||||
|
.replaceFirst("[.][^.]+$", "");
|
||||||
try {
|
try {
|
||||||
result =
|
result =
|
||||||
PdfUtils.convertFromPdf(
|
PdfUtils.convertFromPdf(
|
||||||
|
@ -96,7 +99,7 @@ public class ConvertImgPDFController {
|
||||||
@Operation(
|
@Operation(
|
||||||
summary = "Convert images to a PDF file",
|
summary = "Convert images to a PDF file",
|
||||||
description =
|
description =
|
||||||
"This endpoint converts one or more images to a PDF file. Users can specify whether to stretch the images to fit the PDF page, and whether to automatically rotate the images. Input:Image Output:PDF Type:SISO?")
|
"This endpoint converts one or more images to a PDF file. Users can specify whether to stretch the images to fit the PDF page, and whether to automatically rotate the images. Input:Image Output:PDF Type:MISO")
|
||||||
public ResponseEntity<byte[]> convertToPdf(@ModelAttribute ConvertToPdfRequest request)
|
public ResponseEntity<byte[]> convertToPdf(@ModelAttribute ConvertToPdfRequest request)
|
||||||
throws IOException {
|
throws IOException {
|
||||||
MultipartFile[] file = request.getFileInput();
|
MultipartFile[] file = request.getFileInput();
|
||||||
|
@ -113,6 +116,6 @@ public class ConvertImgPDFController {
|
||||||
|
|
||||||
private String getMediaType(String imageFormat) {
|
private String getMediaType(String imageFormat) {
|
||||||
String mimeType = URLConnection.guessContentTypeFromName("." + imageFormat);
|
String mimeType = URLConnection.guessContentTypeFromName("." + imageFormat);
|
||||||
return mimeType.equals("null") ? "application/octet-stream" : mimeType;
|
return "null".equals(mimeType) ? "application/octet-stream" : mimeType;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -19,6 +19,7 @@ import org.springframework.web.bind.annotation.RequestMapping;
|
||||||
import org.springframework.web.bind.annotation.RestController;
|
import org.springframework.web.bind.annotation.RestController;
|
||||||
import org.springframework.web.multipart.MultipartFile;
|
import org.springframework.web.multipart.MultipartFile;
|
||||||
|
|
||||||
|
import io.github.pixee.security.Filenames;
|
||||||
import io.swagger.v3.oas.annotations.Operation;
|
import io.swagger.v3.oas.annotations.Operation;
|
||||||
import io.swagger.v3.oas.annotations.tags.Tag;
|
import io.swagger.v3.oas.annotations.tags.Tag;
|
||||||
|
|
||||||
|
@ -32,14 +33,14 @@ import stirling.software.SPDF.utils.WebResponseUtils;
|
||||||
public class ConvertMarkdownToPdf {
|
public class ConvertMarkdownToPdf {
|
||||||
|
|
||||||
@Autowired
|
@Autowired
|
||||||
@Qualifier("htmlFormatsInstalled")
|
@Qualifier("bookAndHtmlFormatsInstalled")
|
||||||
private boolean htmlFormatsInstalled;
|
private boolean bookAndHtmlFormatsInstalled;
|
||||||
|
|
||||||
@PostMapping(consumes = "multipart/form-data", value = "/markdown/pdf")
|
@PostMapping(consumes = "multipart/form-data", value = "/markdown/pdf")
|
||||||
@Operation(
|
@Operation(
|
||||||
summary = "Convert a Markdown file to PDF",
|
summary = "Convert a Markdown file to PDF",
|
||||||
description =
|
description =
|
||||||
"This endpoint takes a Markdown file input, converts it to HTML, and then to PDF format.")
|
"This endpoint takes a Markdown file input, converts it to HTML, and then to PDF format. Input:MARKDOWN Output:PDF Type:SISO")
|
||||||
public ResponseEntity<byte[]> markdownToPdf(@ModelAttribute GeneralFile request)
|
public ResponseEntity<byte[]> markdownToPdf(@ModelAttribute GeneralFile request)
|
||||||
throws Exception {
|
throws Exception {
|
||||||
MultipartFile fileInput = request.getFileInput();
|
MultipartFile fileInput = request.getFileInput();
|
||||||
|
@ -48,7 +49,7 @@ public class ConvertMarkdownToPdf {
|
||||||
throw new IllegalArgumentException("Please provide a Markdown file for conversion.");
|
throw new IllegalArgumentException("Please provide a Markdown file for conversion.");
|
||||||
}
|
}
|
||||||
|
|
||||||
String originalFilename = fileInput.getOriginalFilename();
|
String originalFilename = Filenames.toSimpleFileName(fileInput.getOriginalFilename());
|
||||||
if (originalFilename == null || !originalFilename.endsWith(".md")) {
|
if (originalFilename == null || !originalFilename.endsWith(".md")) {
|
||||||
throw new IllegalArgumentException("File must be in .md format.");
|
throw new IllegalArgumentException("File must be in .md format.");
|
||||||
}
|
}
|
||||||
|
@ -68,7 +69,10 @@ public class ConvertMarkdownToPdf {
|
||||||
|
|
||||||
byte[] pdfBytes =
|
byte[] pdfBytes =
|
||||||
FileToPdf.convertHtmlToPdf(
|
FileToPdf.convertHtmlToPdf(
|
||||||
htmlContent.getBytes(), "converted.html", htmlFormatsInstalled);
|
null,
|
||||||
|
htmlContent.getBytes(),
|
||||||
|
"converted.html",
|
||||||
|
bookAndHtmlFormatsInstalled);
|
||||||
|
|
||||||
String outputFilename =
|
String outputFilename =
|
||||||
originalFilename.replaceFirst("[.][^.]+$", "")
|
originalFilename.replaceFirst("[.][^.]+$", "")
|
||||||
|
|
|
@ -16,6 +16,7 @@ import org.springframework.web.bind.annotation.RequestMapping;
|
||||||
import org.springframework.web.bind.annotation.RestController;
|
import org.springframework.web.bind.annotation.RestController;
|
||||||
import org.springframework.web.multipart.MultipartFile;
|
import org.springframework.web.multipart.MultipartFile;
|
||||||
|
|
||||||
|
import io.github.pixee.security.Filenames;
|
||||||
import io.swagger.v3.oas.annotations.Operation;
|
import io.swagger.v3.oas.annotations.Operation;
|
||||||
import io.swagger.v3.oas.annotations.tags.Tag;
|
import io.swagger.v3.oas.annotations.tags.Tag;
|
||||||
|
|
||||||
|
@ -31,7 +32,7 @@ public class ConvertOfficeController {
|
||||||
|
|
||||||
public byte[] convertToPdf(MultipartFile inputFile) throws IOException, InterruptedException {
|
public byte[] convertToPdf(MultipartFile inputFile) throws IOException, InterruptedException {
|
||||||
// Check for valid file extension
|
// Check for valid file extension
|
||||||
String originalFilename = inputFile.getOriginalFilename();
|
String originalFilename = Filenames.toSimpleFileName(inputFile.getOriginalFilename());
|
||||||
if (originalFilename == null
|
if (originalFilename == null
|
||||||
|| !isValidFileExtension(FilenameUtils.getExtension(originalFilename))) {
|
|| !isValidFileExtension(FilenameUtils.getExtension(originalFilename))) {
|
||||||
throw new IllegalArgumentException("Invalid file extension");
|
throw new IllegalArgumentException("Invalid file extension");
|
||||||
|
@ -89,7 +90,8 @@ public class ConvertOfficeController {
|
||||||
byte[] pdfByteArray = convertToPdf(inputFile);
|
byte[] pdfByteArray = convertToPdf(inputFile);
|
||||||
return WebResponseUtils.bytesToWebResponse(
|
return WebResponseUtils.bytesToWebResponse(
|
||||||
pdfByteArray,
|
pdfByteArray,
|
||||||
inputFile.getOriginalFilename().replaceFirst("[.][^.]+$", "")
|
Filenames.toSimpleFileName(inputFile.getOriginalFilename())
|
||||||
|
.replaceFirst("[.][^.]+$", "")
|
||||||
+ "_convertedToPDF.pdf");
|
+ "_convertedToPDF.pdf");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -15,6 +15,7 @@ import org.springframework.web.bind.annotation.RequestMapping;
|
||||||
import org.springframework.web.bind.annotation.RestController;
|
import org.springframework.web.bind.annotation.RestController;
|
||||||
import org.springframework.web.multipart.MultipartFile;
|
import org.springframework.web.multipart.MultipartFile;
|
||||||
|
|
||||||
|
import io.github.pixee.security.Filenames;
|
||||||
import io.swagger.v3.oas.annotations.Operation;
|
import io.swagger.v3.oas.annotations.Operation;
|
||||||
import io.swagger.v3.oas.annotations.tags.Tag;
|
import io.swagger.v3.oas.annotations.tags.Tag;
|
||||||
|
|
||||||
|
@ -29,22 +30,22 @@ import stirling.software.SPDF.utils.WebResponseUtils;
|
||||||
public class ConvertPDFToBookController {
|
public class ConvertPDFToBookController {
|
||||||
|
|
||||||
@Autowired
|
@Autowired
|
||||||
@Qualifier("bookFormatsInstalled")
|
@Qualifier("bookAndHtmlFormatsInstalled")
|
||||||
private boolean bookFormatsInstalled;
|
private boolean bookAndHtmlFormatsInstalled;
|
||||||
|
|
||||||
@PostMapping(consumes = "multipart/form-data", value = "/pdf/book")
|
@PostMapping(consumes = "multipart/form-data", value = "/pdf/book")
|
||||||
@Operation(
|
@Operation(
|
||||||
summary =
|
summary =
|
||||||
"Convert a PDF to a Book/comic (*.epub | *.mobi | *.azw3 | *.fb2 | *.txt | *.docx .. (others to include by chatgpt) to PDF",
|
"Convert a PDF to a Book/comic (*.epub | *.mobi | *.azw3 | *.fb2 | *.txt | *.docx .. (others to include by chatgpt) to PDF",
|
||||||
description =
|
description =
|
||||||
"(Requires bookFormatsInstalled flag and Calibre installed) This endpoint Convert a PDF to a Book/comic (*.epub | *.mobi | *.azw3 | *.fb2 | *.txt | *.docx .. (others to include by chatgpt) to PDF")
|
"(Requires bookAndHtmlFormatsInstalled flag and Calibre installed) This endpoint Convert a PDF to a Book/comic (*.epub | *.mobi | *.azw3 | *.fb2 | *.txt | *.docx .. (others to include by chatgpt) to PDF")
|
||||||
public ResponseEntity<byte[]> HtmlToPdf(@ModelAttribute PdfToBookRequest request)
|
public ResponseEntity<byte[]> HtmlToPdf(@ModelAttribute PdfToBookRequest request)
|
||||||
throws Exception {
|
throws Exception {
|
||||||
MultipartFile fileInput = request.getFileInput();
|
MultipartFile fileInput = request.getFileInput();
|
||||||
|
|
||||||
if (!bookFormatsInstalled) {
|
if (!bookAndHtmlFormatsInstalled) {
|
||||||
throw new IllegalArgumentException(
|
throw new IllegalArgumentException(
|
||||||
"bookFormatsInstalled flag is False, this functionality is not avaiable");
|
"bookAndHtmlFormatsInstalled flag is False, this functionality is not avaiable");
|
||||||
}
|
}
|
||||||
|
|
||||||
if (fileInput == null) {
|
if (fileInput == null) {
|
||||||
|
@ -92,7 +93,8 @@ public class ConvertPDFToBookController {
|
||||||
}
|
}
|
||||||
|
|
||||||
String outputFilename =
|
String outputFilename =
|
||||||
fileInput.getOriginalFilename().replaceFirst("[.][^.]+$", "")
|
Filenames.toSimpleFileName(fileInput.getOriginalFilename())
|
||||||
|
.replaceFirst("[.][^.]+$", "")
|
||||||
+ "."
|
+ "."
|
||||||
+ outputFormat; // Remove file extension and append .pdf
|
+ outputFormat; // Remove file extension and append .pdf
|
||||||
|
|
||||||
|
|
|
@ -2,6 +2,10 @@ package stirling.software.SPDF.controller.api.converters;
|
||||||
|
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
|
|
||||||
|
import org.apache.pdfbox.Loader;
|
||||||
|
import org.apache.pdfbox.pdmodel.PDDocument;
|
||||||
|
import org.apache.pdfbox.text.PDFTextStripper;
|
||||||
|
import org.springframework.http.MediaType;
|
||||||
import org.springframework.http.ResponseEntity;
|
import org.springframework.http.ResponseEntity;
|
||||||
import org.springframework.web.bind.annotation.ModelAttribute;
|
import org.springframework.web.bind.annotation.ModelAttribute;
|
||||||
import org.springframework.web.bind.annotation.PostMapping;
|
import org.springframework.web.bind.annotation.PostMapping;
|
||||||
|
@ -9,6 +13,7 @@ import org.springframework.web.bind.annotation.RequestMapping;
|
||||||
import org.springframework.web.bind.annotation.RestController;
|
import org.springframework.web.bind.annotation.RestController;
|
||||||
import org.springframework.web.multipart.MultipartFile;
|
import org.springframework.web.multipart.MultipartFile;
|
||||||
|
|
||||||
|
import io.github.pixee.security.Filenames;
|
||||||
import io.swagger.v3.oas.annotations.Operation;
|
import io.swagger.v3.oas.annotations.Operation;
|
||||||
import io.swagger.v3.oas.annotations.tags.Tag;
|
import io.swagger.v3.oas.annotations.tags.Tag;
|
||||||
|
|
||||||
|
@ -17,6 +22,7 @@ import stirling.software.SPDF.model.api.converters.PdfToPresentationRequest;
|
||||||
import stirling.software.SPDF.model.api.converters.PdfToTextOrRTFRequest;
|
import stirling.software.SPDF.model.api.converters.PdfToTextOrRTFRequest;
|
||||||
import stirling.software.SPDF.model.api.converters.PdfToWordRequest;
|
import stirling.software.SPDF.model.api.converters.PdfToWordRequest;
|
||||||
import stirling.software.SPDF.utils.PDFToFile;
|
import stirling.software.SPDF.utils.PDFToFile;
|
||||||
|
import stirling.software.SPDF.utils.WebResponseUtils;
|
||||||
|
|
||||||
@RestController
|
@RestController
|
||||||
@RequestMapping("/api/v1/convert")
|
@RequestMapping("/api/v1/convert")
|
||||||
|
@ -59,10 +65,22 @@ public class ConvertPDFToOffice {
|
||||||
throws IOException, InterruptedException {
|
throws IOException, InterruptedException {
|
||||||
MultipartFile inputFile = request.getFileInput();
|
MultipartFile inputFile = request.getFileInput();
|
||||||
String outputFormat = request.getOutputFormat();
|
String outputFormat = request.getOutputFormat();
|
||||||
|
if ("txt".equals(request.getOutputFormat())) {
|
||||||
|
try (PDDocument document = Loader.loadPDF(inputFile.getBytes())) {
|
||||||
|
PDFTextStripper stripper = new PDFTextStripper();
|
||||||
|
String text = stripper.getText(document);
|
||||||
|
return WebResponseUtils.bytesToWebResponse(
|
||||||
|
text.getBytes(),
|
||||||
|
Filenames.toSimpleFileName(inputFile.getOriginalFilename())
|
||||||
|
.replaceFirst("[.][^.]+$", "")
|
||||||
|
+ ".txt",
|
||||||
|
MediaType.TEXT_PLAIN);
|
||||||
|
}
|
||||||
|
} else {
|
||||||
PDFToFile pdfToFile = new PDFToFile();
|
PDFToFile pdfToFile = new PDFToFile();
|
||||||
return pdfToFile.processPdfToOfficeFormat(inputFile, outputFormat, "writer_pdf_import");
|
return pdfToFile.processPdfToOfficeFormat(inputFile, outputFormat, "writer_pdf_import");
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
@PostMapping(consumes = "multipart/form-data", value = "/pdf/word")
|
@PostMapping(consumes = "multipart/form-data", value = "/pdf/word")
|
||||||
@Operation(
|
@Operation(
|
||||||
|
|
|
@ -12,6 +12,7 @@ import org.springframework.web.bind.annotation.RequestMapping;
|
||||||
import org.springframework.web.bind.annotation.RestController;
|
import org.springframework.web.bind.annotation.RestController;
|
||||||
import org.springframework.web.multipart.MultipartFile;
|
import org.springframework.web.multipart.MultipartFile;
|
||||||
|
|
||||||
|
import io.github.pixee.security.Filenames;
|
||||||
import io.swagger.v3.oas.annotations.Operation;
|
import io.swagger.v3.oas.annotations.Operation;
|
||||||
import io.swagger.v3.oas.annotations.tags.Tag;
|
import io.swagger.v3.oas.annotations.tags.Tag;
|
||||||
|
|
||||||
|
@ -63,7 +64,9 @@ public class ConvertPDFToPDFA {
|
||||||
|
|
||||||
// Return the optimized PDF as a response
|
// Return the optimized PDF as a response
|
||||||
String outputFilename =
|
String outputFilename =
|
||||||
inputFile.getOriginalFilename().replaceFirst("[.][^.]+$", "") + "_PDFA.pdf";
|
Filenames.toSimpleFileName(inputFile.getOriginalFilename())
|
||||||
|
.replaceFirst("[.][^.]+$", "")
|
||||||
|
+ "_PDFA.pdf";
|
||||||
return WebResponseUtils.bytesToWebResponse(pdfBytes, outputFilename);
|
return WebResponseUtils.bytesToWebResponse(pdfBytes, outputFilename);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -29,8 +29,8 @@ import stirling.software.SPDF.utils.WebResponseUtils;
|
||||||
public class ConvertWebsiteToPDF {
|
public class ConvertWebsiteToPDF {
|
||||||
|
|
||||||
@Autowired
|
@Autowired
|
||||||
@Qualifier("htmlFormatsInstalled")
|
@Qualifier("bookAndHtmlFormatsInstalled")
|
||||||
private boolean htmlFormatsInstalled;
|
private boolean bookAndHtmlFormatsInstalled;
|
||||||
|
|
||||||
@PostMapping(consumes = "multipart/form-data", value = "/url/pdf")
|
@PostMapping(consumes = "multipart/form-data", value = "/url/pdf")
|
||||||
@Operation(
|
@Operation(
|
||||||
|
@ -53,7 +53,7 @@ public class ConvertWebsiteToPDF {
|
||||||
|
|
||||||
// Prepare the OCRmyPDF command
|
// Prepare the OCRmyPDF command
|
||||||
List<String> command = new ArrayList<>();
|
List<String> command = new ArrayList<>();
|
||||||
if (!htmlFormatsInstalled) {
|
if (!bookAndHtmlFormatsInstalled) {
|
||||||
command.add("weasyprint");
|
command.add("weasyprint");
|
||||||
} else {
|
} else {
|
||||||
command.add("wkhtmltopdf");
|
command.add("wkhtmltopdf");
|
||||||
|
|
|
@ -13,6 +13,7 @@ import org.springframework.web.bind.annotation.RequestMapping;
|
||||||
import org.springframework.web.bind.annotation.RestController;
|
import org.springframework.web.bind.annotation.RestController;
|
||||||
import org.springframework.web.multipart.MultipartFile;
|
import org.springframework.web.multipart.MultipartFile;
|
||||||
|
|
||||||
|
import io.github.pixee.security.Filenames;
|
||||||
import io.swagger.v3.oas.annotations.Operation;
|
import io.swagger.v3.oas.annotations.Operation;
|
||||||
import io.swagger.v3.oas.annotations.tags.Tag;
|
import io.swagger.v3.oas.annotations.tags.Tag;
|
||||||
|
|
||||||
|
@ -43,7 +44,7 @@ public class FilterController {
|
||||||
PDDocument pdfDocument = Loader.loadPDF(inputFile.getBytes());
|
PDDocument pdfDocument = Loader.loadPDF(inputFile.getBytes());
|
||||||
if (PdfUtils.hasText(pdfDocument, pageNumber, text))
|
if (PdfUtils.hasText(pdfDocument, pageNumber, text))
|
||||||
return WebResponseUtils.pdfDocToWebResponse(
|
return WebResponseUtils.pdfDocToWebResponse(
|
||||||
pdfDocument, inputFile.getOriginalFilename());
|
pdfDocument, Filenames.toSimpleFileName(inputFile.getOriginalFilename()));
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -60,7 +61,7 @@ public class FilterController {
|
||||||
PDDocument pdfDocument = Loader.loadPDF(inputFile.getBytes());
|
PDDocument pdfDocument = Loader.loadPDF(inputFile.getBytes());
|
||||||
if (PdfUtils.hasImages(pdfDocument, pageNumber))
|
if (PdfUtils.hasImages(pdfDocument, pageNumber))
|
||||||
return WebResponseUtils.pdfDocToWebResponse(
|
return WebResponseUtils.pdfDocToWebResponse(
|
||||||
pdfDocument, inputFile.getOriginalFilename());
|
pdfDocument, Filenames.toSimpleFileName(inputFile.getOriginalFilename()));
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -18,6 +18,7 @@ import org.springframework.web.bind.annotation.RequestMapping;
|
||||||
import org.springframework.web.bind.annotation.RestController;
|
import org.springframework.web.bind.annotation.RestController;
|
||||||
import org.springframework.web.multipart.MultipartFile;
|
import org.springframework.web.multipart.MultipartFile;
|
||||||
|
|
||||||
|
import io.github.pixee.security.Filenames;
|
||||||
import io.swagger.v3.oas.annotations.Operation;
|
import io.swagger.v3.oas.annotations.Operation;
|
||||||
import io.swagger.v3.oas.annotations.tags.Tag;
|
import io.swagger.v3.oas.annotations.tags.Tag;
|
||||||
|
|
||||||
|
@ -133,7 +134,8 @@ public class AutoRenameController {
|
||||||
return WebResponseUtils.pdfDocToWebResponse(document, header + ".pdf");
|
return WebResponseUtils.pdfDocToWebResponse(document, header + ".pdf");
|
||||||
} else {
|
} else {
|
||||||
logger.info("File has no good title to be found");
|
logger.info("File has no good title to be found");
|
||||||
return WebResponseUtils.pdfDocToWebResponse(document, file.getOriginalFilename());
|
return WebResponseUtils.pdfDocToWebResponse(
|
||||||
|
document, Filenames.toSimpleFileName(file.getOriginalFilename()));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -31,6 +31,7 @@ import com.google.zxing.PlanarYUVLuminanceSource;
|
||||||
import com.google.zxing.Result;
|
import com.google.zxing.Result;
|
||||||
import com.google.zxing.common.HybridBinarizer;
|
import com.google.zxing.common.HybridBinarizer;
|
||||||
|
|
||||||
|
import io.github.pixee.security.Filenames;
|
||||||
import io.swagger.v3.oas.annotations.Operation;
|
import io.swagger.v3.oas.annotations.Operation;
|
||||||
import io.swagger.v3.oas.annotations.tags.Tag;
|
import io.swagger.v3.oas.annotations.tags.Tag;
|
||||||
|
|
||||||
|
@ -43,6 +44,7 @@ import stirling.software.SPDF.utils.WebResponseUtils;
|
||||||
public class AutoSplitPdfController {
|
public class AutoSplitPdfController {
|
||||||
|
|
||||||
private static final String QR_CONTENT = "https://github.com/Stirling-Tools/Stirling-PDF";
|
private static final String QR_CONTENT = "https://github.com/Stirling-Tools/Stirling-PDF";
|
||||||
|
private static final String QR_CONTENT_OLD = "https://github.com/Frooodle/Stirling-PDF";
|
||||||
|
|
||||||
@PostMapping(value = "/auto-split-pdf", consumes = "multipart/form-data")
|
@PostMapping(value = "/auto-split-pdf", consumes = "multipart/form-data")
|
||||||
@Operation(
|
@Operation(
|
||||||
|
@ -63,12 +65,13 @@ public class AutoSplitPdfController {
|
||||||
for (int page = 0; page < document.getNumberOfPages(); ++page) {
|
for (int page = 0; page < document.getNumberOfPages(); ++page) {
|
||||||
BufferedImage bim = pdfRenderer.renderImageWithDPI(page, 150);
|
BufferedImage bim = pdfRenderer.renderImageWithDPI(page, 150);
|
||||||
String result = decodeQRCode(bim);
|
String result = decodeQRCode(bim);
|
||||||
|
if ((QR_CONTENT.equals(result) || QR_CONTENT_OLD.equals(result)) && page != 0) {
|
||||||
if (QR_CONTENT.equals(result) && page != 0) {
|
|
||||||
splitDocuments.add(new PDDocument());
|
splitDocuments.add(new PDDocument());
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!splitDocuments.isEmpty() && !QR_CONTENT.equals(result)) {
|
if (!splitDocuments.isEmpty()
|
||||||
|
&& !QR_CONTENT.equals(result)
|
||||||
|
&& !QR_CONTENT_OLD.equals(result)) {
|
||||||
splitDocuments.get(splitDocuments.size() - 1).addPage(document.getPage(page));
|
splitDocuments.get(splitDocuments.size() - 1).addPage(document.getPage(page));
|
||||||
} else if (page == 0) {
|
} else if (page == 0) {
|
||||||
PDDocument firstDocument = new PDDocument();
|
PDDocument firstDocument = new PDDocument();
|
||||||
|
@ -77,7 +80,7 @@ public class AutoSplitPdfController {
|
||||||
}
|
}
|
||||||
|
|
||||||
// If duplexMode is true and current page is a divider, then skip next page
|
// If duplexMode is true and current page is a divider, then skip next page
|
||||||
if (duplexMode && QR_CONTENT.equals(result)) {
|
if (duplexMode && (QR_CONTENT.equals(result) || QR_CONTENT_OLD.equals(result))) {
|
||||||
page++;
|
page++;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -95,7 +98,9 @@ public class AutoSplitPdfController {
|
||||||
document.close();
|
document.close();
|
||||||
|
|
||||||
Path zipFile = Files.createTempFile("split_documents", ".zip");
|
Path zipFile = Files.createTempFile("split_documents", ".zip");
|
||||||
String filename = file.getOriginalFilename().replaceFirst("[.][^.]+$", "");
|
String filename =
|
||||||
|
Filenames.toSimpleFileName(file.getOriginalFilename())
|
||||||
|
.replaceFirst("[.][^.]+$", "");
|
||||||
byte[] data;
|
byte[] data;
|
||||||
|
|
||||||
try (ZipOutputStream zipOut = new ZipOutputStream(Files.newOutputStream(zipFile))) {
|
try (ZipOutputStream zipOut = new ZipOutputStream(Files.newOutputStream(zipFile))) {
|
||||||
|
|
|
@ -2,23 +2,20 @@ package stirling.software.SPDF.controller.api.misc;
|
||||||
|
|
||||||
import java.awt.image.BufferedImage;
|
import java.awt.image.BufferedImage;
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.nio.file.Files;
|
|
||||||
import java.nio.file.Path;
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.Arrays;
|
|
||||||
import java.util.Collections;
|
import java.util.Collections;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.stream.Collectors;
|
import java.util.stream.Collectors;
|
||||||
import java.util.stream.IntStream;
|
import java.util.stream.IntStream;
|
||||||
|
|
||||||
import javax.imageio.ImageIO;
|
|
||||||
|
|
||||||
import org.apache.pdfbox.Loader;
|
import org.apache.pdfbox.Loader;
|
||||||
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.PDPageTree;
|
import org.apache.pdfbox.pdmodel.PDPageTree;
|
||||||
import org.apache.pdfbox.rendering.PDFRenderer;
|
import org.apache.pdfbox.rendering.PDFRenderer;
|
||||||
import org.apache.pdfbox.text.PDFTextStripper;
|
import org.apache.pdfbox.text.PDFTextStripper;
|
||||||
|
import org.slf4j.Logger;
|
||||||
|
import org.slf4j.LoggerFactory;
|
||||||
import org.springframework.http.HttpStatus;
|
import org.springframework.http.HttpStatus;
|
||||||
import org.springframework.http.ResponseEntity;
|
import org.springframework.http.ResponseEntity;
|
||||||
import org.springframework.web.bind.annotation.ModelAttribute;
|
import org.springframework.web.bind.annotation.ModelAttribute;
|
||||||
|
@ -27,13 +24,12 @@ import org.springframework.web.bind.annotation.RequestMapping;
|
||||||
import org.springframework.web.bind.annotation.RestController;
|
import org.springframework.web.bind.annotation.RestController;
|
||||||
import org.springframework.web.multipart.MultipartFile;
|
import org.springframework.web.multipart.MultipartFile;
|
||||||
|
|
||||||
|
import io.github.pixee.security.Filenames;
|
||||||
import io.swagger.v3.oas.annotations.Operation;
|
import io.swagger.v3.oas.annotations.Operation;
|
||||||
import io.swagger.v3.oas.annotations.tags.Tag;
|
import io.swagger.v3.oas.annotations.tags.Tag;
|
||||||
|
|
||||||
import stirling.software.SPDF.model.api.misc.RemoveBlankPagesRequest;
|
import stirling.software.SPDF.model.api.misc.RemoveBlankPagesRequest;
|
||||||
import stirling.software.SPDF.utils.PdfUtils;
|
import stirling.software.SPDF.utils.PdfUtils;
|
||||||
import stirling.software.SPDF.utils.ProcessExecutor;
|
|
||||||
import stirling.software.SPDF.utils.ProcessExecutor.ProcessExecutorResult;
|
|
||||||
import stirling.software.SPDF.utils.WebResponseUtils;
|
import stirling.software.SPDF.utils.WebResponseUtils;
|
||||||
|
|
||||||
@RestController
|
@RestController
|
||||||
|
@ -41,6 +37,8 @@ import stirling.software.SPDF.utils.WebResponseUtils;
|
||||||
@Tag(name = "Misc", description = "Miscellaneous APIs")
|
@Tag(name = "Misc", description = "Miscellaneous APIs")
|
||||||
public class BlankPageController {
|
public class BlankPageController {
|
||||||
|
|
||||||
|
private static final Logger logger = LoggerFactory.getLogger(BlankPageController.class);
|
||||||
|
|
||||||
@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",
|
||||||
|
@ -63,56 +61,35 @@ public class BlankPageController {
|
||||||
PDFRenderer pdfRenderer = new PDFRenderer(document);
|
PDFRenderer pdfRenderer = new PDFRenderer(document);
|
||||||
|
|
||||||
for (PDPage page : pages) {
|
for (PDPage page : pages) {
|
||||||
System.out.println("checking page " + pageIndex);
|
logger.info("checking page " + pageIndex);
|
||||||
textStripper.setStartPage(pageIndex + 1);
|
textStripper.setStartPage(pageIndex + 1);
|
||||||
textStripper.setEndPage(pageIndex + 1);
|
textStripper.setEndPage(pageIndex + 1);
|
||||||
String pageText = textStripper.getText(document);
|
String pageText = textStripper.getText(document);
|
||||||
boolean hasText = !pageText.trim().isEmpty();
|
boolean hasText = !pageText.trim().isEmpty();
|
||||||
|
|
||||||
|
Boolean blank = false;
|
||||||
if (hasText) {
|
if (hasText) {
|
||||||
pagesToKeepIndex.add(pageIndex);
|
logger.info("page " + pageIndex + " has text, not blank");
|
||||||
System.out.println("page " + pageIndex + " has text");
|
blank = false;
|
||||||
} else {
|
} else {
|
||||||
boolean hasImages = PdfUtils.hasImagesOnPage(page);
|
boolean hasImages = PdfUtils.hasImagesOnPage(page);
|
||||||
if (hasImages) {
|
if (hasImages) {
|
||||||
System.out.println("page " + pageIndex + " has image");
|
logger.info("page " + pageIndex + " has image, running blank detection");
|
||||||
|
|
||||||
Path tempFile = Files.createTempFile("image_", ".png");
|
|
||||||
|
|
||||||
// Render image and save as temp file
|
// Render image and save as temp file
|
||||||
BufferedImage image = pdfRenderer.renderImageWithDPI(pageIndex, 300);
|
BufferedImage image = pdfRenderer.renderImageWithDPI(pageIndex, 30);
|
||||||
ImageIO.write(image, "png", tempFile.toFile());
|
blank = isBlankImage(image, threshold, whitePercent, threshold);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
List<String> command =
|
if (blank) {
|
||||||
new ArrayList<>(
|
logger.info("Skipping, Image was blank for page #" + pageIndex);
|
||||||
Arrays.asList(
|
|
||||||
"python3",
|
|
||||||
System.getProperty("user.dir")
|
|
||||||
+ "/scripts/detect-blank-pages.py",
|
|
||||||
tempFile.toString(),
|
|
||||||
"--threshold",
|
|
||||||
String.valueOf(threshold),
|
|
||||||
"--white_percent",
|
|
||||||
String.valueOf(whitePercent)));
|
|
||||||
|
|
||||||
// Run CLI command
|
|
||||||
ProcessExecutorResult returnCode =
|
|
||||||
ProcessExecutor.getInstance(ProcessExecutor.Processes.PYTHON_OPENCV)
|
|
||||||
.runCommandWithOutputHandling(command);
|
|
||||||
|
|
||||||
// does contain data
|
|
||||||
if (returnCode.getRc() == 0) {
|
|
||||||
System.out.println(
|
|
||||||
"page " + pageIndex + " has image which is not blank");
|
|
||||||
pagesToKeepIndex.add(pageIndex);
|
|
||||||
} else {
|
} else {
|
||||||
System.out.println("Skipping, Image was blank for page #" + pageIndex);
|
logger.info("page " + pageIndex + " has image which is not blank");
|
||||||
}
|
pagesToKeepIndex.add(pageIndex);
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
pageIndex++;
|
pageIndex++;
|
||||||
}
|
}
|
||||||
System.out.print("pagesToKeep=" + pagesToKeepIndex.size());
|
|
||||||
|
|
||||||
// Remove pages not present in pagesToKeepIndex
|
// Remove pages not present in pagesToKeepIndex
|
||||||
List<Integer> pageIndices =
|
List<Integer> pageIndices =
|
||||||
IntStream.range(0, pages.getCount()).boxed().collect(Collectors.toList());
|
IntStream.range(0, pages.getCount()).boxed().collect(Collectors.toList());
|
||||||
|
@ -125,7 +102,8 @@ public class BlankPageController {
|
||||||
|
|
||||||
return WebResponseUtils.pdfDocToWebResponse(
|
return WebResponseUtils.pdfDocToWebResponse(
|
||||||
document,
|
document,
|
||||||
inputFile.getOriginalFilename().replaceFirst("[.][^.]+$", "")
|
Filenames.toSimpleFileName(inputFile.getOriginalFilename())
|
||||||
|
.replaceFirst("[.][^.]+$", "")
|
||||||
+ "_blanksRemoved.pdf");
|
+ "_blanksRemoved.pdf");
|
||||||
} catch (IOException e) {
|
} catch (IOException e) {
|
||||||
e.printStackTrace();
|
e.printStackTrace();
|
||||||
|
@ -134,4 +112,30 @@ public class BlankPageController {
|
||||||
if (document != null) document.close();
|
if (document != null) document.close();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static boolean isBlankImage(
|
||||||
|
BufferedImage image, int threshold, double whitePercent, int blurSize) {
|
||||||
|
if (image == null) {
|
||||||
|
logger.info("Error: Image is null");
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Convert to binary image based on the threshold
|
||||||
|
int whitePixels = 0;
|
||||||
|
int totalPixels = image.getWidth() * image.getHeight();
|
||||||
|
|
||||||
|
for (int i = 0; i < image.getHeight(); i++) {
|
||||||
|
for (int j = 0; j < image.getWidth(); j++) {
|
||||||
|
int color = image.getRGB(j, i) & 0xFF;
|
||||||
|
if (color >= 255 - threshold) {
|
||||||
|
whitePixels++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
double whitePixelPercentage = (whitePixels / (double) totalPixels) * 100;
|
||||||
|
logger.info(String.format("Page has white pixel percent of %.2f%%", whitePixelPercentage));
|
||||||
|
|
||||||
|
return whitePixelPercentage >= whitePercent;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -29,6 +29,7 @@ import org.springframework.web.bind.annotation.RequestMapping;
|
||||||
import org.springframework.web.bind.annotation.RestController;
|
import org.springframework.web.bind.annotation.RestController;
|
||||||
import org.springframework.web.multipart.MultipartFile;
|
import org.springframework.web.multipart.MultipartFile;
|
||||||
|
|
||||||
|
import io.github.pixee.security.Filenames;
|
||||||
import io.swagger.v3.oas.annotations.Operation;
|
import io.swagger.v3.oas.annotations.Operation;
|
||||||
import io.swagger.v3.oas.annotations.tags.Tag;
|
import io.swagger.v3.oas.annotations.tags.Tag;
|
||||||
|
|
||||||
|
@ -264,7 +265,9 @@ public class CompressController {
|
||||||
|
|
||||||
// Return the optimized PDF as a response
|
// Return the optimized PDF as a response
|
||||||
String outputFilename =
|
String outputFilename =
|
||||||
inputFile.getOriginalFilename().replaceFirst("[.][^.]+$", "") + "_Optimized.pdf";
|
Filenames.toSimpleFileName(inputFile.getOriginalFilename())
|
||||||
|
.replaceFirst("[.][^.]+$", "")
|
||||||
|
+ "_Optimized.pdf";
|
||||||
return WebResponseUtils.bytesToWebResponse(pdfBytes, outputFilename);
|
return WebResponseUtils.bytesToWebResponse(pdfBytes, outputFilename);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -74,7 +74,7 @@ public class ExtractImageScansController {
|
||||||
List<String> images = new ArrayList<>();
|
List<String> images = new ArrayList<>();
|
||||||
|
|
||||||
// Check if input file is a PDF
|
// Check if input file is a PDF
|
||||||
if (extension.equalsIgnoreCase("pdf")) {
|
if ("pdf".equalsIgnoreCase(extension)) {
|
||||||
// Load PDF document
|
// Load PDF document
|
||||||
try (PDDocument document = Loader.loadPDF(form.getFileInput().getBytes())) {
|
try (PDDocument document = Loader.loadPDF(form.getFileInput().getBytes())) {
|
||||||
PDFRenderer pdfRenderer = new PDFRenderer(document);
|
PDFRenderer pdfRenderer = new PDFRenderer(document);
|
||||||
|
|
|
@ -29,6 +29,7 @@ import org.springframework.web.bind.annotation.RequestMapping;
|
||||||
import org.springframework.web.bind.annotation.RestController;
|
import org.springframework.web.bind.annotation.RestController;
|
||||||
import org.springframework.web.multipart.MultipartFile;
|
import org.springframework.web.multipart.MultipartFile;
|
||||||
|
|
||||||
|
import io.github.pixee.security.Filenames;
|
||||||
import io.swagger.v3.oas.annotations.Operation;
|
import io.swagger.v3.oas.annotations.Operation;
|
||||||
import io.swagger.v3.oas.annotations.tags.Tag;
|
import io.swagger.v3.oas.annotations.tags.Tag;
|
||||||
|
|
||||||
|
@ -66,7 +67,9 @@ public class ExtractImagesController {
|
||||||
zos.setLevel(Deflater.BEST_COMPRESSION);
|
zos.setLevel(Deflater.BEST_COMPRESSION);
|
||||||
|
|
||||||
int imageIndex = 1;
|
int imageIndex = 1;
|
||||||
String filename = file.getOriginalFilename().replaceFirst("[.][^.]+$", "");
|
String filename =
|
||||||
|
Filenames.toSimpleFileName(file.getOriginalFilename())
|
||||||
|
.replaceFirst("[.][^.]+$", "");
|
||||||
int pageNum = 0;
|
int pageNum = 0;
|
||||||
Set<Integer> processedImages = new HashSet<>();
|
Set<Integer> processedImages = new HashSet<>();
|
||||||
// Iterate over each page
|
// Iterate over each page
|
||||||
|
@ -85,19 +88,19 @@ public class ExtractImagesController {
|
||||||
// Convert image to desired format
|
// Convert image to desired format
|
||||||
RenderedImage renderedImage = image.getImage();
|
RenderedImage renderedImage = image.getImage();
|
||||||
BufferedImage bufferedImage = null;
|
BufferedImage bufferedImage = null;
|
||||||
if (format.equalsIgnoreCase("png")) {
|
if ("png".equalsIgnoreCase(format)) {
|
||||||
bufferedImage =
|
bufferedImage =
|
||||||
new BufferedImage(
|
new BufferedImage(
|
||||||
renderedImage.getWidth(),
|
renderedImage.getWidth(),
|
||||||
renderedImage.getHeight(),
|
renderedImage.getHeight(),
|
||||||
BufferedImage.TYPE_INT_ARGB);
|
BufferedImage.TYPE_INT_ARGB);
|
||||||
} else if (format.equalsIgnoreCase("jpeg") || format.equalsIgnoreCase("jpg")) {
|
} else if ("jpeg".equalsIgnoreCase(format) || "jpg".equalsIgnoreCase(format)) {
|
||||||
bufferedImage =
|
bufferedImage =
|
||||||
new BufferedImage(
|
new BufferedImage(
|
||||||
renderedImage.getWidth(),
|
renderedImage.getWidth(),
|
||||||
renderedImage.getHeight(),
|
renderedImage.getHeight(),
|
||||||
BufferedImage.TYPE_INT_RGB);
|
BufferedImage.TYPE_INT_RGB);
|
||||||
} else if (format.equalsIgnoreCase("gif")) {
|
} else if ("gif".equalsIgnoreCase(format)) {
|
||||||
bufferedImage =
|
bufferedImage =
|
||||||
new BufferedImage(
|
new BufferedImage(
|
||||||
renderedImage.getWidth(),
|
renderedImage.getWidth(),
|
||||||
|
|
|
@ -29,11 +29,11 @@ import org.slf4j.Logger;
|
||||||
import org.slf4j.LoggerFactory;
|
import org.slf4j.LoggerFactory;
|
||||||
import org.springframework.http.ResponseEntity;
|
import org.springframework.http.ResponseEntity;
|
||||||
import org.springframework.web.bind.annotation.ModelAttribute;
|
import org.springframework.web.bind.annotation.ModelAttribute;
|
||||||
import org.springframework.web.bind.annotation.PostMapping;
|
|
||||||
import org.springframework.web.bind.annotation.RequestMapping;
|
import org.springframework.web.bind.annotation.RequestMapping;
|
||||||
import org.springframework.web.bind.annotation.RestController;
|
import org.springframework.web.bind.annotation.RestController;
|
||||||
import org.springframework.web.multipart.MultipartFile;
|
import org.springframework.web.multipart.MultipartFile;
|
||||||
|
|
||||||
|
import io.github.pixee.security.Filenames;
|
||||||
import io.swagger.v3.oas.annotations.Hidden;
|
import io.swagger.v3.oas.annotations.Hidden;
|
||||||
import io.swagger.v3.oas.annotations.Operation;
|
import io.swagger.v3.oas.annotations.Operation;
|
||||||
import io.swagger.v3.oas.annotations.tags.Tag;
|
import io.swagger.v3.oas.annotations.tags.Tag;
|
||||||
|
@ -50,7 +50,7 @@ public class FakeScanControllerWIP {
|
||||||
|
|
||||||
// TODO
|
// TODO
|
||||||
@Hidden
|
@Hidden
|
||||||
@PostMapping(consumes = "multipart/form-data", value = "/fakeScan")
|
// @PostMapping(consumes = "multipart/form-data", value = "/fakeScan")
|
||||||
@Operation(
|
@Operation(
|
||||||
summary = "Repair a PDF file",
|
summary = "Repair a PDF file",
|
||||||
description =
|
description =
|
||||||
|
@ -142,7 +142,9 @@ public class FakeScanControllerWIP {
|
||||||
|
|
||||||
// Return the optimized PDF as a response
|
// Return the optimized PDF as a response
|
||||||
String outputFilename =
|
String outputFilename =
|
||||||
inputFile.getOriginalFilename().replaceFirst("[.][^.]+$", "") + "_scanned.pdf";
|
Filenames.toSimpleFileName(inputFile.getOriginalFilename())
|
||||||
|
.replaceFirst("[.][^.]+$", "")
|
||||||
|
+ "_scanned.pdf";
|
||||||
return WebResponseUtils.boasToWebResponse(baos, outputFilename);
|
return WebResponseUtils.boasToWebResponse(baos, outputFilename);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -18,6 +18,7 @@ import org.springframework.web.bind.annotation.RequestMapping;
|
||||||
import org.springframework.web.bind.annotation.RestController;
|
import org.springframework.web.bind.annotation.RestController;
|
||||||
import org.springframework.web.multipart.MultipartFile;
|
import org.springframework.web.multipart.MultipartFile;
|
||||||
|
|
||||||
|
import io.github.pixee.security.Filenames;
|
||||||
import io.swagger.v3.oas.annotations.Operation;
|
import io.swagger.v3.oas.annotations.Operation;
|
||||||
import io.swagger.v3.oas.annotations.tags.Tag;
|
import io.swagger.v3.oas.annotations.tags.Tag;
|
||||||
|
|
||||||
|
@ -109,15 +110,15 @@ public class MetadataController {
|
||||||
for (Entry<String, String> entry : allRequestParams.entrySet()) {
|
for (Entry<String, String> entry : allRequestParams.entrySet()) {
|
||||||
String key = entry.getKey();
|
String key = entry.getKey();
|
||||||
// Check if the key is a standard metadata key
|
// Check if the key is a standard metadata key
|
||||||
if (!key.equalsIgnoreCase("Author")
|
if (!"Author".equalsIgnoreCase(key)
|
||||||
&& !key.equalsIgnoreCase("CreationDate")
|
&& !"CreationDate".equalsIgnoreCase(key)
|
||||||
&& !key.equalsIgnoreCase("Creator")
|
&& !"Creator".equalsIgnoreCase(key)
|
||||||
&& !key.equalsIgnoreCase("Keywords")
|
&& !"Keywords".equalsIgnoreCase(key)
|
||||||
&& !key.equalsIgnoreCase("modificationDate")
|
&& !"modificationDate".equalsIgnoreCase(key)
|
||||||
&& !key.equalsIgnoreCase("Producer")
|
&& !"Producer".equalsIgnoreCase(key)
|
||||||
&& !key.equalsIgnoreCase("Subject")
|
&& !"Subject".equalsIgnoreCase(key)
|
||||||
&& !key.equalsIgnoreCase("Title")
|
&& !"Title".equalsIgnoreCase(key)
|
||||||
&& !key.equalsIgnoreCase("Trapped")
|
&& !"Trapped".equalsIgnoreCase(key)
|
||||||
&& !key.contains("customKey")
|
&& !key.contains("customKey")
|
||||||
&& !key.contains("customValue")) {
|
&& !key.contains("customValue")) {
|
||||||
info.setCustomMetadataValue(key, entry.getValue());
|
info.setCustomMetadataValue(key, entry.getValue());
|
||||||
|
@ -164,6 +165,8 @@ public class MetadataController {
|
||||||
document.setDocumentInformation(info);
|
document.setDocumentInformation(info);
|
||||||
return WebResponseUtils.pdfDocToWebResponse(
|
return WebResponseUtils.pdfDocToWebResponse(
|
||||||
document,
|
document,
|
||||||
pdfFile.getOriginalFilename().replaceFirst("[.][^.]+$", "") + "_metadata.pdf");
|
Filenames.toSimpleFileName(pdfFile.getOriginalFilename())
|
||||||
|
.replaceFirst("[.][^.]+$", "")
|
||||||
|
+ "_metadata.pdf");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -24,6 +24,7 @@ import org.springframework.web.bind.annotation.RequestMapping;
|
||||||
import org.springframework.web.bind.annotation.RestController;
|
import org.springframework.web.bind.annotation.RestController;
|
||||||
import org.springframework.web.multipart.MultipartFile;
|
import org.springframework.web.multipart.MultipartFile;
|
||||||
|
|
||||||
|
import io.github.pixee.security.Filenames;
|
||||||
import io.swagger.v3.oas.annotations.Operation;
|
import io.swagger.v3.oas.annotations.Operation;
|
||||||
import io.swagger.v3.oas.annotations.tags.Tag;
|
import io.swagger.v3.oas.annotations.tags.Tag;
|
||||||
|
|
||||||
|
@ -74,7 +75,7 @@ public class OCRController {
|
||||||
throw new IOException("Please select at least one language.");
|
throw new IOException("Please select at least one language.");
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!ocrRenderType.equals("hocr") && !ocrRenderType.equals("sandwich")) {
|
if (!"hocr".equals(ocrRenderType) && !"sandwich".equals(ocrRenderType)) {
|
||||||
throw new IOException("ocrRenderType wrong");
|
throw new IOException("ocrRenderType wrong");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -127,7 +128,7 @@ public class OCRController {
|
||||||
if (cleanFinal != null && cleanFinal) {
|
if (cleanFinal != null && cleanFinal) {
|
||||||
command.add("--clean-final");
|
command.add("--clean-final");
|
||||||
}
|
}
|
||||||
if (ocrType != null && !ocrType.equals("")) {
|
if (ocrType != null && !"".equals(ocrType)) {
|
||||||
if ("skip-text".equals(ocrType)) {
|
if ("skip-text".equals(ocrType)) {
|
||||||
command.add("--skip-text");
|
command.add("--skip-text");
|
||||||
} else if ("force-ocr".equals(ocrType)) {
|
} else if ("force-ocr".equals(ocrType)) {
|
||||||
|
@ -182,12 +183,16 @@ public class OCRController {
|
||||||
|
|
||||||
// Return the OCR processed PDF as a response
|
// Return the OCR processed PDF as a response
|
||||||
String outputFilename =
|
String outputFilename =
|
||||||
inputFile.getOriginalFilename().replaceFirst("[.][^.]+$", "") + "_OCR.pdf";
|
Filenames.toSimpleFileName(inputFile.getOriginalFilename())
|
||||||
|
.replaceFirst("[.][^.]+$", "")
|
||||||
|
+ "_OCR.pdf";
|
||||||
|
|
||||||
if (sidecar != null && sidecar) {
|
if (sidecar != null && sidecar) {
|
||||||
// Create a zip file containing both the PDF and the text file
|
// Create a zip file containing both the PDF and the text file
|
||||||
String outputZipFilename =
|
String outputZipFilename =
|
||||||
inputFile.getOriginalFilename().replaceFirst("[.][^.]+$", "") + "_OCR.zip";
|
Filenames.toSimpleFileName(inputFile.getOriginalFilename())
|
||||||
|
.replaceFirst("[.][^.]+$", "")
|
||||||
|
+ "_OCR.zip";
|
||||||
Path tempZipFile = Files.createTempFile("output_", ".zip");
|
Path tempZipFile = Files.createTempFile("output_", ".zip");
|
||||||
|
|
||||||
try (ZipOutputStream zipOut =
|
try (ZipOutputStream zipOut =
|
||||||
|
|
|
@ -12,6 +12,7 @@ import org.springframework.web.bind.annotation.RequestMapping;
|
||||||
import org.springframework.web.bind.annotation.RestController;
|
import org.springframework.web.bind.annotation.RestController;
|
||||||
import org.springframework.web.multipart.MultipartFile;
|
import org.springframework.web.multipart.MultipartFile;
|
||||||
|
|
||||||
|
import io.github.pixee.security.Filenames;
|
||||||
import io.swagger.v3.oas.annotations.Operation;
|
import io.swagger.v3.oas.annotations.Operation;
|
||||||
import io.swagger.v3.oas.annotations.tags.Tag;
|
import io.swagger.v3.oas.annotations.tags.Tag;
|
||||||
|
|
||||||
|
@ -30,7 +31,7 @@ public class OverlayImageController {
|
||||||
@Operation(
|
@Operation(
|
||||||
summary = "Overlay image onto a PDF file",
|
summary = "Overlay image onto a PDF file",
|
||||||
description =
|
description =
|
||||||
"This endpoint overlays an image onto a PDF file at the specified coordinates. The image can be overlaid on every page of the PDF if specified. Input:PDF/IMAGE Output:PDF Type:MF-SISO")
|
"This endpoint overlays an image onto a PDF file at the specified coordinates. The image can be overlaid on every page of the PDF if specified. Input:PDF/IMAGE Output:PDF Type:SISO")
|
||||||
public ResponseEntity<byte[]> overlayImage(@ModelAttribute OverlayImageRequest request) {
|
public ResponseEntity<byte[]> overlayImage(@ModelAttribute OverlayImageRequest request) {
|
||||||
MultipartFile pdfFile = request.getFileInput();
|
MultipartFile pdfFile = request.getFileInput();
|
||||||
MultipartFile imageFile = request.getImageFile();
|
MultipartFile imageFile = request.getImageFile();
|
||||||
|
@ -44,7 +45,9 @@ public class OverlayImageController {
|
||||||
|
|
||||||
return WebResponseUtils.bytesToWebResponse(
|
return WebResponseUtils.bytesToWebResponse(
|
||||||
result,
|
result,
|
||||||
pdfFile.getOriginalFilename().replaceFirst("[.][^.]+$", "") + "_overlayed.pdf");
|
Filenames.toSimpleFileName(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);
|
||||||
|
|
|
@ -21,6 +21,7 @@ import org.springframework.web.bind.annotation.RequestMapping;
|
||||||
import org.springframework.web.bind.annotation.RestController;
|
import org.springframework.web.bind.annotation.RestController;
|
||||||
import org.springframework.web.multipart.MultipartFile;
|
import org.springframework.web.multipart.MultipartFile;
|
||||||
|
|
||||||
|
import io.github.pixee.security.Filenames;
|
||||||
import io.swagger.v3.oas.annotations.Operation;
|
import io.swagger.v3.oas.annotations.Operation;
|
||||||
import io.swagger.v3.oas.annotations.tags.Tag;
|
import io.swagger.v3.oas.annotations.tags.Tag;
|
||||||
|
|
||||||
|
@ -93,7 +94,7 @@ public class PageNumbersController {
|
||||||
.replace("{total}", String.valueOf(document.getNumberOfPages()))
|
.replace("{total}", String.valueOf(document.getNumberOfPages()))
|
||||||
.replace(
|
.replace(
|
||||||
"{filename}",
|
"{filename}",
|
||||||
file.getOriginalFilename()
|
Filenames.toSimpleFileName(file.getOriginalFilename())
|
||||||
.replaceFirst("[.][^.]+$", ""))
|
.replaceFirst("[.][^.]+$", ""))
|
||||||
: String.valueOf(pageNumber);
|
: String.valueOf(pageNumber);
|
||||||
|
|
||||||
|
@ -145,7 +146,8 @@ public class PageNumbersController {
|
||||||
|
|
||||||
return WebResponseUtils.bytesToWebResponse(
|
return WebResponseUtils.bytesToWebResponse(
|
||||||
baos.toByteArray(),
|
baos.toByteArray(),
|
||||||
file.getOriginalFilename().replaceFirst("[.][^.]+$", "") + "_numbersAdded.pdf",
|
Filenames.toSimpleFileName(file.getOriginalFilename()).replaceFirst("[.][^.]+$", "")
|
||||||
|
+ "_numbersAdded.pdf",
|
||||||
MediaType.APPLICATION_PDF);
|
MediaType.APPLICATION_PDF);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -15,6 +15,7 @@ import org.springframework.web.bind.annotation.RequestMapping;
|
||||||
import org.springframework.web.bind.annotation.RestController;
|
import org.springframework.web.bind.annotation.RestController;
|
||||||
import org.springframework.web.multipart.MultipartFile;
|
import org.springframework.web.multipart.MultipartFile;
|
||||||
|
|
||||||
|
import io.github.pixee.security.Filenames;
|
||||||
import io.swagger.v3.oas.annotations.Operation;
|
import io.swagger.v3.oas.annotations.Operation;
|
||||||
import io.swagger.v3.oas.annotations.tags.Tag;
|
import io.swagger.v3.oas.annotations.tags.Tag;
|
||||||
|
|
||||||
|
@ -65,7 +66,9 @@ public class RepairController {
|
||||||
|
|
||||||
// Return the optimized PDF as a response
|
// Return the optimized PDF as a response
|
||||||
String outputFilename =
|
String outputFilename =
|
||||||
inputFile.getOriginalFilename().replaceFirst("[.][^.]+$", "") + "_repaired.pdf";
|
Filenames.toSimpleFileName(inputFile.getOriginalFilename())
|
||||||
|
.replaceFirst("[.][^.]+$", "")
|
||||||
|
+ "_repaired.pdf";
|
||||||
return WebResponseUtils.bytesToWebResponse(pdfBytes, outputFilename);
|
return WebResponseUtils.bytesToWebResponse(pdfBytes, outputFilename);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -16,6 +16,7 @@ import org.springframework.web.bind.annotation.RequestMapping;
|
||||||
import org.springframework.web.bind.annotation.RestController;
|
import org.springframework.web.bind.annotation.RestController;
|
||||||
import org.springframework.web.multipart.MultipartFile;
|
import org.springframework.web.multipart.MultipartFile;
|
||||||
|
|
||||||
|
import io.github.pixee.security.Filenames;
|
||||||
import io.swagger.v3.oas.annotations.Operation;
|
import io.swagger.v3.oas.annotations.Operation;
|
||||||
import io.swagger.v3.oas.annotations.tags.Tag;
|
import io.swagger.v3.oas.annotations.tags.Tag;
|
||||||
|
|
||||||
|
@ -54,7 +55,8 @@ public class ShowJavascript {
|
||||||
|
|
||||||
script +=
|
script +=
|
||||||
"// File: "
|
"// File: "
|
||||||
+ inputFile.getOriginalFilename()
|
+ Filenames.toSimpleFileName(
|
||||||
|
inputFile.getOriginalFilename())
|
||||||
+ ", Script: "
|
+ ", Script: "
|
||||||
+ name
|
+ name
|
||||||
+ "\n"
|
+ "\n"
|
||||||
|
@ -66,12 +68,14 @@ public class ShowJavascript {
|
||||||
|
|
||||||
if (script.isEmpty()) {
|
if (script.isEmpty()) {
|
||||||
script =
|
script =
|
||||||
"PDF '" + inputFile.getOriginalFilename() + "' does not contain Javascript";
|
"PDF '"
|
||||||
|
+ Filenames.toSimpleFileName(inputFile.getOriginalFilename())
|
||||||
|
+ "' does not contain Javascript";
|
||||||
}
|
}
|
||||||
|
|
||||||
return WebResponseUtils.bytesToWebResponse(
|
return WebResponseUtils.bytesToWebResponse(
|
||||||
script.getBytes(StandardCharsets.UTF_8),
|
script.getBytes(StandardCharsets.UTF_8),
|
||||||
inputFile.getOriginalFilename() + ".js");
|
Filenames.toSimpleFileName(inputFile.getOriginalFilename()) + ".js");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -0,0 +1,320 @@
|
||||||
|
package stirling.software.SPDF.controller.api.misc;
|
||||||
|
|
||||||
|
import java.awt.Color;
|
||||||
|
import java.awt.image.BufferedImage;
|
||||||
|
import java.io.File;
|
||||||
|
import java.io.FileOutputStream;
|
||||||
|
import java.io.IOException;
|
||||||
|
import java.io.InputStream;
|
||||||
|
import java.nio.file.Files;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
import javax.imageio.ImageIO;
|
||||||
|
|
||||||
|
import org.apache.commons.io.IOUtils;
|
||||||
|
import org.apache.pdfbox.Loader;
|
||||||
|
import org.apache.pdfbox.pdmodel.PDDocument;
|
||||||
|
import org.apache.pdfbox.pdmodel.PDPage;
|
||||||
|
import org.apache.pdfbox.pdmodel.PDPageContentStream;
|
||||||
|
import org.apache.pdfbox.pdmodel.common.PDRectangle;
|
||||||
|
import org.apache.pdfbox.pdmodel.font.PDFont;
|
||||||
|
import org.apache.pdfbox.pdmodel.font.PDType0Font;
|
||||||
|
import org.apache.pdfbox.pdmodel.font.PDType1Font;
|
||||||
|
import org.apache.pdfbox.pdmodel.font.Standard14Fonts;
|
||||||
|
import org.apache.pdfbox.pdmodel.graphics.image.LosslessFactory;
|
||||||
|
import org.apache.pdfbox.pdmodel.graphics.image.PDImageXObject;
|
||||||
|
import org.apache.pdfbox.pdmodel.graphics.state.PDExtendedGraphicsState;
|
||||||
|
import org.apache.pdfbox.util.Matrix;
|
||||||
|
import org.springframework.core.io.ClassPathResource;
|
||||||
|
import org.springframework.http.ResponseEntity;
|
||||||
|
import org.springframework.web.bind.annotation.ModelAttribute;
|
||||||
|
import org.springframework.web.bind.annotation.PostMapping;
|
||||||
|
import org.springframework.web.bind.annotation.RequestMapping;
|
||||||
|
import org.springframework.web.bind.annotation.RestController;
|
||||||
|
import org.springframework.web.multipart.MultipartFile;
|
||||||
|
|
||||||
|
import io.github.pixee.security.Filenames;
|
||||||
|
import io.swagger.v3.oas.annotations.Operation;
|
||||||
|
import io.swagger.v3.oas.annotations.tags.Tag;
|
||||||
|
|
||||||
|
import stirling.software.SPDF.model.api.misc.AddStampRequest;
|
||||||
|
import stirling.software.SPDF.utils.WebResponseUtils;
|
||||||
|
|
||||||
|
@RestController
|
||||||
|
@RequestMapping("/api/v1/misc")
|
||||||
|
@Tag(name = "Misc", description = "Miscellaneous APIs")
|
||||||
|
public class StampController {
|
||||||
|
|
||||||
|
@PostMapping(consumes = "multipart/form-data", value = "/add-stamp")
|
||||||
|
@Operation(
|
||||||
|
summary = "Add stamp to a PDF file",
|
||||||
|
description =
|
||||||
|
"This endpoint adds a stamp to a given PDF file. Users can specify the stamp type (text or image), rotation, opacity, width spacer, and height spacer. Input:PDF Output:PDF Type:SISO")
|
||||||
|
public ResponseEntity<byte[]> addStamp(@ModelAttribute AddStampRequest request)
|
||||||
|
throws IOException, Exception {
|
||||||
|
MultipartFile pdfFile = request.getFileInput();
|
||||||
|
String stampType = request.getStampType();
|
||||||
|
String stampText = request.getStampText();
|
||||||
|
MultipartFile stampImage = request.getStampImage();
|
||||||
|
String alphabet = request.getAlphabet();
|
||||||
|
float fontSize = request.getFontSize();
|
||||||
|
float rotation = request.getRotation();
|
||||||
|
float opacity = request.getOpacity();
|
||||||
|
int position = request.getPosition(); // Updated to use 1-9 positioning logic
|
||||||
|
float overrideX = request.getOverrideX(); // New field for X override
|
||||||
|
float overrideY = request.getOverrideY(); // New field for Y override
|
||||||
|
|
||||||
|
String customColor = request.getCustomColor();
|
||||||
|
float marginFactor;
|
||||||
|
|
||||||
|
switch (request.getCustomMargin().toLowerCase()) {
|
||||||
|
case "small":
|
||||||
|
marginFactor = 0.02f;
|
||||||
|
break;
|
||||||
|
case "medium":
|
||||||
|
marginFactor = 0.035f;
|
||||||
|
break;
|
||||||
|
case "large":
|
||||||
|
marginFactor = 0.05f;
|
||||||
|
break;
|
||||||
|
case "x-large":
|
||||||
|
marginFactor = 0.075f;
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
marginFactor = 0.035f;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Load the input PDF
|
||||||
|
PDDocument document = Loader.loadPDF(pdfFile.getBytes());
|
||||||
|
|
||||||
|
List<Integer> pageNumbers = request.getPageNumbersList(document, false);
|
||||||
|
|
||||||
|
for (int pageIndex : pageNumbers) {
|
||||||
|
int zeroBasedIndex = pageIndex - 1;
|
||||||
|
if (zeroBasedIndex >= 0 && zeroBasedIndex < document.getNumberOfPages()) {
|
||||||
|
PDPage page = document.getPage(zeroBasedIndex);
|
||||||
|
PDRectangle pageSize = page.getMediaBox();
|
||||||
|
float margin = marginFactor * (pageSize.getWidth() + pageSize.getHeight()) / 2;
|
||||||
|
|
||||||
|
PDPageContentStream contentStream =
|
||||||
|
new PDPageContentStream(
|
||||||
|
document, page, PDPageContentStream.AppendMode.APPEND, true, true);
|
||||||
|
|
||||||
|
PDExtendedGraphicsState graphicsState = new PDExtendedGraphicsState();
|
||||||
|
graphicsState.setNonStrokingAlphaConstant(opacity);
|
||||||
|
contentStream.setGraphicsStateParameters(graphicsState);
|
||||||
|
|
||||||
|
if ("text".equalsIgnoreCase(stampType)) {
|
||||||
|
addTextStamp(
|
||||||
|
contentStream,
|
||||||
|
stampText,
|
||||||
|
document,
|
||||||
|
page,
|
||||||
|
rotation,
|
||||||
|
position,
|
||||||
|
fontSize,
|
||||||
|
alphabet,
|
||||||
|
overrideX,
|
||||||
|
overrideY,
|
||||||
|
margin,
|
||||||
|
customColor);
|
||||||
|
} else if ("image".equalsIgnoreCase(stampType)) {
|
||||||
|
addImageStamp(
|
||||||
|
contentStream,
|
||||||
|
stampImage,
|
||||||
|
document,
|
||||||
|
page,
|
||||||
|
rotation,
|
||||||
|
position,
|
||||||
|
fontSize,
|
||||||
|
overrideX,
|
||||||
|
overrideY,
|
||||||
|
margin);
|
||||||
|
}
|
||||||
|
|
||||||
|
contentStream.close();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return WebResponseUtils.pdfDocToWebResponse(
|
||||||
|
document,
|
||||||
|
Filenames.toSimpleFileName(pdfFile.getOriginalFilename())
|
||||||
|
.replaceFirst("[.][^.]+$", "")
|
||||||
|
+ "_stamped.pdf");
|
||||||
|
}
|
||||||
|
|
||||||
|
private void addTextStamp(
|
||||||
|
PDPageContentStream contentStream,
|
||||||
|
String stampText,
|
||||||
|
PDDocument document,
|
||||||
|
PDPage page,
|
||||||
|
float rotation,
|
||||||
|
int position, // 1-9 positioning logic
|
||||||
|
float fontSize,
|
||||||
|
String alphabet,
|
||||||
|
float overrideX, // X override
|
||||||
|
float overrideY,
|
||||||
|
float margin,
|
||||||
|
String colorString) // Y override
|
||||||
|
throws IOException {
|
||||||
|
String resourceDir = "";
|
||||||
|
PDFont font = new PDType1Font(Standard14Fonts.FontName.HELVETICA);
|
||||||
|
switch (alphabet) {
|
||||||
|
case "arabic":
|
||||||
|
resourceDir = "static/fonts/NotoSansArabic-Regular.ttf";
|
||||||
|
break;
|
||||||
|
case "japanese":
|
||||||
|
resourceDir = "static/fonts/Meiryo.ttf";
|
||||||
|
break;
|
||||||
|
case "korean":
|
||||||
|
resourceDir = "static/fonts/malgun.ttf";
|
||||||
|
break;
|
||||||
|
case "chinese":
|
||||||
|
resourceDir = "static/fonts/SimSun.ttf";
|
||||||
|
break;
|
||||||
|
case "roman":
|
||||||
|
default:
|
||||||
|
resourceDir = "static/fonts/NotoSans-Regular.ttf";
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!"".equals(resourceDir)) {
|
||||||
|
ClassPathResource classPathResource = new ClassPathResource(resourceDir);
|
||||||
|
String fileExtension = resourceDir.substring(resourceDir.lastIndexOf("."));
|
||||||
|
File tempFile = Files.createTempFile("NotoSansFont", fileExtension).toFile();
|
||||||
|
try (InputStream is = classPathResource.getInputStream();
|
||||||
|
FileOutputStream os = new FileOutputStream(tempFile)) {
|
||||||
|
IOUtils.copy(is, os);
|
||||||
|
}
|
||||||
|
|
||||||
|
font = PDType0Font.load(document, tempFile);
|
||||||
|
tempFile.deleteOnExit();
|
||||||
|
}
|
||||||
|
|
||||||
|
contentStream.setFont(font, fontSize);
|
||||||
|
|
||||||
|
Color redactColor;
|
||||||
|
try {
|
||||||
|
if (!colorString.startsWith("#")) {
|
||||||
|
colorString = "#" + colorString;
|
||||||
|
}
|
||||||
|
redactColor = Color.decode(colorString);
|
||||||
|
} catch (NumberFormatException e) {
|
||||||
|
|
||||||
|
redactColor = Color.LIGHT_GRAY;
|
||||||
|
}
|
||||||
|
|
||||||
|
contentStream.setNonStrokingColor(redactColor);
|
||||||
|
|
||||||
|
PDRectangle pageSize = page.getMediaBox();
|
||||||
|
float x, y;
|
||||||
|
|
||||||
|
if (overrideX >= 0 && overrideY >= 0) {
|
||||||
|
// Use override values if provided
|
||||||
|
x = overrideX;
|
||||||
|
y = overrideY;
|
||||||
|
} else {
|
||||||
|
x = calculatePositionX(pageSize, position, fontSize, font, fontSize, stampText, margin);
|
||||||
|
y =
|
||||||
|
calculatePositionY(
|
||||||
|
pageSize, position, calculateTextCapHeight(font, fontSize), margin);
|
||||||
|
}
|
||||||
|
|
||||||
|
contentStream.beginText();
|
||||||
|
contentStream.setTextMatrix(Matrix.getRotateInstance(Math.toRadians(rotation), x, y));
|
||||||
|
contentStream.showText(stampText);
|
||||||
|
contentStream.endText();
|
||||||
|
}
|
||||||
|
|
||||||
|
private void addImageStamp(
|
||||||
|
PDPageContentStream contentStream,
|
||||||
|
MultipartFile stampImage,
|
||||||
|
PDDocument document,
|
||||||
|
PDPage page,
|
||||||
|
float rotation,
|
||||||
|
int position, // 1-9 positioning logic
|
||||||
|
float fontSize,
|
||||||
|
float overrideX,
|
||||||
|
float overrideY,
|
||||||
|
float margin)
|
||||||
|
throws IOException {
|
||||||
|
|
||||||
|
// Load the stamp image
|
||||||
|
BufferedImage image = ImageIO.read(stampImage.getInputStream());
|
||||||
|
|
||||||
|
// Compute width based on original aspect ratio
|
||||||
|
float aspectRatio = (float) image.getWidth() / (float) image.getHeight();
|
||||||
|
|
||||||
|
// Desired physical height (in PDF points)
|
||||||
|
float desiredPhysicalHeight = fontSize;
|
||||||
|
|
||||||
|
// Desired physical width based on the aspect ratio
|
||||||
|
float desiredPhysicalWidth = desiredPhysicalHeight * aspectRatio;
|
||||||
|
|
||||||
|
// Convert the BufferedImage to PDImageXObject
|
||||||
|
PDImageXObject xobject = LosslessFactory.createFromImage(document, image);
|
||||||
|
|
||||||
|
PDRectangle pageSize = page.getMediaBox();
|
||||||
|
float x, y;
|
||||||
|
|
||||||
|
if (overrideX >= 0 && overrideY >= 0) {
|
||||||
|
// Use override values if provided
|
||||||
|
x = overrideX;
|
||||||
|
y = overrideY;
|
||||||
|
} else {
|
||||||
|
x = calculatePositionX(pageSize, position, desiredPhysicalWidth, null, 0, null, margin);
|
||||||
|
y = calculatePositionY(pageSize, position, fontSize, margin);
|
||||||
|
}
|
||||||
|
|
||||||
|
contentStream.saveGraphicsState();
|
||||||
|
contentStream.transform(Matrix.getTranslateInstance(x, y));
|
||||||
|
contentStream.transform(Matrix.getRotateInstance(Math.toRadians(rotation), 0, 0));
|
||||||
|
contentStream.drawImage(xobject, 0, 0, desiredPhysicalWidth, desiredPhysicalHeight);
|
||||||
|
contentStream.restoreGraphicsState();
|
||||||
|
}
|
||||||
|
|
||||||
|
private float calculatePositionX(
|
||||||
|
PDRectangle pageSize,
|
||||||
|
int position,
|
||||||
|
float contentWidth,
|
||||||
|
PDFont font,
|
||||||
|
float fontSize,
|
||||||
|
String text,
|
||||||
|
float margin)
|
||||||
|
throws IOException {
|
||||||
|
float actualWidth =
|
||||||
|
(text != null) ? calculateTextWidth(text, font, fontSize) : contentWidth;
|
||||||
|
switch (position % 3) {
|
||||||
|
case 1: // Left
|
||||||
|
return pageSize.getLowerLeftX() + margin;
|
||||||
|
case 2: // Center
|
||||||
|
return (pageSize.getWidth() - actualWidth) / 2;
|
||||||
|
case 0: // Right
|
||||||
|
return pageSize.getUpperRightX() - actualWidth - margin;
|
||||||
|
default:
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private float calculatePositionY(
|
||||||
|
PDRectangle pageSize, int position, float height, float margin) {
|
||||||
|
switch ((position - 1) / 3) {
|
||||||
|
case 0: // Top
|
||||||
|
return pageSize.getUpperRightY() - height - margin;
|
||||||
|
case 1: // Middle
|
||||||
|
return (pageSize.getHeight() - height) / 2;
|
||||||
|
case 2: // Bottom
|
||||||
|
return pageSize.getLowerLeftY() + margin;
|
||||||
|
default:
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private float calculateTextWidth(String text, PDFont font, float fontSize) throws IOException {
|
||||||
|
return font.getStringWidth(text) / 1000 * fontSize;
|
||||||
|
}
|
||||||
|
|
||||||
|
private float calculateTextCapHeight(PDFont font, float fontSize) {
|
||||||
|
return font.getFontDescriptor().getCapHeight() / 1000 * fontSize;
|
||||||
|
}
|
||||||
|
}
|
|
@ -1,6 +1,8 @@
|
||||||
package stirling.software.SPDF.controller.api.pipeline;
|
package stirling.software.SPDF.controller.api.pipeline;
|
||||||
|
|
||||||
|
import java.util.Arrays;
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
|
import java.util.List;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
import java.util.regex.Matcher;
|
import java.util.regex.Matcher;
|
||||||
import java.util.regex.Pattern;
|
import java.util.regex.Pattern;
|
||||||
|
@ -39,6 +41,57 @@ public class ApiDocService {
|
||||||
return "http://localhost:" + port + contextPath + "/v1/api-docs";
|
return "http://localhost:" + port + contextPath + "/v1/api-docs";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Map<String, List<String>> outputToFileTypes = new HashMap<>();
|
||||||
|
|
||||||
|
public List getExtensionTypes(boolean output, String operationName) {
|
||||||
|
if (outputToFileTypes.size() == 0) {
|
||||||
|
outputToFileTypes.put("PDF", Arrays.asList("pdf"));
|
||||||
|
outputToFileTypes.put(
|
||||||
|
"IMAGE",
|
||||||
|
Arrays.asList(
|
||||||
|
"png", "jpg", "jpeg", "gif", "webp", "bmp", "tif", "tiff", "svg", "psd",
|
||||||
|
"ai", "eps"));
|
||||||
|
outputToFileTypes.put(
|
||||||
|
"ZIP",
|
||||||
|
Arrays.asList("zip", "rar", "7z", "tar", "gz", "bz2", "xz", "lz", "lzma", "z"));
|
||||||
|
outputToFileTypes.put("WORD", Arrays.asList("doc", "docx", "odt", "rtf"));
|
||||||
|
outputToFileTypes.put("CSV", Arrays.asList("csv"));
|
||||||
|
outputToFileTypes.put("JS", Arrays.asList("js", "jsx"));
|
||||||
|
outputToFileTypes.put("HTML", Arrays.asList("html", "htm", "xhtml"));
|
||||||
|
outputToFileTypes.put("JSON", Arrays.asList("json"));
|
||||||
|
outputToFileTypes.put("TXT", Arrays.asList("txt", "text", "md", "markdown"));
|
||||||
|
outputToFileTypes.put("PPT", Arrays.asList("ppt", "pptx", "odp"));
|
||||||
|
outputToFileTypes.put("XML", Arrays.asList("xml", "xsd", "xsl"));
|
||||||
|
outputToFileTypes.put(
|
||||||
|
"BOOK", Arrays.asList("epub", "mobi", "azw3", "fb2", "txt", "docx"));
|
||||||
|
// type.
|
||||||
|
}
|
||||||
|
|
||||||
|
if (apiDocsJsonRootNode == null || apiDocumentation.size() == 0) {
|
||||||
|
loadApiDocumentation();
|
||||||
|
}
|
||||||
|
if (!apiDocumentation.containsKey(operationName)) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
ApiEndpoint endpoint = apiDocumentation.get(operationName);
|
||||||
|
String description = endpoint.getDescription();
|
||||||
|
Pattern pattern = null;
|
||||||
|
if (output) {
|
||||||
|
pattern = Pattern.compile("Output:(\\w+)");
|
||||||
|
} else {
|
||||||
|
pattern = Pattern.compile("Input:(\\w+)");
|
||||||
|
}
|
||||||
|
Matcher matcher = pattern.matcher(description);
|
||||||
|
while (matcher.find()) {
|
||||||
|
String type = matcher.group(1).toUpperCase();
|
||||||
|
if (outputToFileTypes.containsKey(type)) {
|
||||||
|
return outputToFileTypes.get(type);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
@Autowired(required = false)
|
@Autowired(required = false)
|
||||||
private UserServiceInterface userService;
|
private UserServiceInterface userService;
|
||||||
|
|
||||||
|
|
|
@ -11,6 +11,7 @@ import java.nio.file.Files;
|
||||||
import java.nio.file.Path;
|
import java.nio.file.Path;
|
||||||
import java.nio.file.Paths;
|
import java.nio.file.Paths;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
|
import java.util.Arrays;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
import java.util.Map.Entry;
|
import java.util.Map.Entry;
|
||||||
|
@ -35,6 +36,9 @@ import org.springframework.util.MultiValueMap;
|
||||||
import org.springframework.web.client.RestTemplate;
|
import org.springframework.web.client.RestTemplate;
|
||||||
import org.springframework.web.multipart.MultipartFile;
|
import org.springframework.web.multipart.MultipartFile;
|
||||||
|
|
||||||
|
import io.github.pixee.security.Filenames;
|
||||||
|
import io.github.pixee.security.ZipSecurity;
|
||||||
|
|
||||||
import jakarta.servlet.ServletContext;
|
import jakarta.servlet.ServletContext;
|
||||||
import stirling.software.SPDF.SPdfApplication;
|
import stirling.software.SPDF.SPdfApplication;
|
||||||
import stirling.software.SPDF.model.PipelineConfig;
|
import stirling.software.SPDF.model.PipelineConfig;
|
||||||
|
@ -82,15 +86,11 @@ public class PipelineProcessor {
|
||||||
operation,
|
operation,
|
||||||
isMultiInputOperation);
|
isMultiInputOperation);
|
||||||
Map<String, Object> parameters = pipelineOperation.getParameters();
|
Map<String, Object> parameters = pipelineOperation.getParameters();
|
||||||
String inputFileExtension = "";
|
List<String> inputFileTypes = apiDocService.getExtensionTypes(false, operation);
|
||||||
|
if (inputFileTypes == null) {
|
||||||
// TODO
|
inputFileTypes = new ArrayList<String>(Arrays.asList("ALL"));
|
||||||
// if (operationNode.has("inputFileType")) {
|
}
|
||||||
// inputFileExtension = operationNode.get("inputFileType").asText();
|
// List outputFileTypes = apiDocService.getExtensionTypes(true, operation);
|
||||||
// } else {
|
|
||||||
inputFileExtension = ".pdf";
|
|
||||||
// }
|
|
||||||
final String finalInputFileExtension = inputFileExtension;
|
|
||||||
|
|
||||||
String url = getBaseUrl() + operation;
|
String url = getBaseUrl() + operation;
|
||||||
|
|
||||||
|
@ -98,7 +98,8 @@ public class PipelineProcessor {
|
||||||
if (!isMultiInputOperation) {
|
if (!isMultiInputOperation) {
|
||||||
for (Resource file : outputFiles) {
|
for (Resource file : outputFiles) {
|
||||||
boolean hasInputFileType = false;
|
boolean hasInputFileType = false;
|
||||||
if (file.getFilename().endsWith(inputFileExtension)) {
|
for (String extension : inputFileTypes) {
|
||||||
|
if ("ALL".equals(extension) || file.getFilename().endsWith(extension)) {
|
||||||
hasInputFileType = true;
|
hasInputFileType = true;
|
||||||
MultiValueMap<String, Object> body = new LinkedMultiValueMap<>();
|
MultiValueMap<String, Object> body = new LinkedMultiValueMap<>();
|
||||||
body.add("fileInput", file);
|
body.add("fileInput", file);
|
||||||
|
@ -109,11 +110,13 @@ public class PipelineProcessor {
|
||||||
|
|
||||||
ResponseEntity<byte[]> response = sendWebRequest(url, body);
|
ResponseEntity<byte[]> response = sendWebRequest(url, body);
|
||||||
|
|
||||||
// If the operation is filter and the response body is null or empty, skip
|
// If the operation is filter and the response body is null or empty,
|
||||||
|
// skip
|
||||||
// this
|
// this
|
||||||
// file
|
// file
|
||||||
if (operation.startsWith("filter-")
|
if (operation.startsWith("filter-")
|
||||||
&& (response.getBody() == null || response.getBody().length == 0)) {
|
&& (response.getBody() == null
|
||||||
|
|| response.getBody().length == 0)) {
|
||||||
logger.info("Skipping file due to failing {}", operation);
|
logger.info("Skipping file due to failing {}", operation);
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
@ -123,13 +126,14 @@ public class PipelineProcessor {
|
||||||
hasErrors = true;
|
hasErrors = true;
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
processOutputFiles(operation, file.getFilename(), response, newOutputFiles);
|
processOutputFiles(operation, response, newOutputFiles);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!hasInputFileType) {
|
if (!hasInputFileType) {
|
||||||
logPrintStream.println(
|
logPrintStream.println(
|
||||||
"No files with extension "
|
"No files with extension "
|
||||||
+ inputFileExtension
|
+ String.join(", ", inputFileTypes)
|
||||||
+ " found for operation "
|
+ " found for operation "
|
||||||
+ operation);
|
+ operation);
|
||||||
hasErrors = true;
|
hasErrors = true;
|
||||||
|
@ -138,13 +142,19 @@ public class PipelineProcessor {
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
// Filter and collect all files that match the inputFileExtension
|
// Filter and collect all files that match the inputFileExtension
|
||||||
List<Resource> matchingFiles =
|
List<Resource> matchingFiles;
|
||||||
|
if (inputFileTypes.contains("ALL")) {
|
||||||
|
matchingFiles = new ArrayList<>(outputFiles);
|
||||||
|
} else {
|
||||||
|
final List<String> finalinputFileTypes = inputFileTypes;
|
||||||
|
matchingFiles =
|
||||||
outputFiles.stream()
|
outputFiles.stream()
|
||||||
.filter(
|
.filter(
|
||||||
file ->
|
file ->
|
||||||
file.getFilename()
|
finalinputFileTypes.stream()
|
||||||
.endsWith(finalInputFileExtension))
|
.anyMatch(file.getFilename()::endsWith))
|
||||||
.collect(Collectors.toList());
|
.collect(Collectors.toList());
|
||||||
|
}
|
||||||
|
|
||||||
// Check if there are matching files
|
// Check if there are matching files
|
||||||
if (!matchingFiles.isEmpty()) {
|
if (!matchingFiles.isEmpty()) {
|
||||||
|
@ -164,11 +174,7 @@ public class PipelineProcessor {
|
||||||
|
|
||||||
// Handle the response
|
// Handle the response
|
||||||
if (response.getStatusCode().equals(HttpStatus.OK)) {
|
if (response.getStatusCode().equals(HttpStatus.OK)) {
|
||||||
processOutputFiles(
|
processOutputFiles(operation, response, newOutputFiles);
|
||||||
operation,
|
|
||||||
matchingFiles.get(0).getFilename(),
|
|
||||||
response,
|
|
||||||
newOutputFiles);
|
|
||||||
} else {
|
} else {
|
||||||
// Log error if the response status is not OK
|
// Log error if the response status is not OK
|
||||||
logPrintStream.println(
|
logPrintStream.println(
|
||||||
|
@ -178,7 +184,7 @@ public class PipelineProcessor {
|
||||||
} else {
|
} else {
|
||||||
logPrintStream.println(
|
logPrintStream.println(
|
||||||
"No files with extension "
|
"No files with extension "
|
||||||
+ inputFileExtension
|
+ String.join(", ", inputFileTypes)
|
||||||
+ " found for multi-input operation "
|
+ " found for multi-input operation "
|
||||||
+ operation);
|
+ operation);
|
||||||
hasErrors = true;
|
hasErrors = true;
|
||||||
|
@ -211,11 +217,29 @@ public class PipelineProcessor {
|
||||||
return restTemplate.exchange(url, HttpMethod.POST, entity, byte[].class);
|
return restTemplate.exchange(url, HttpMethod.POST, entity, byte[].class);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static String removeTrailingNaming(String filename) {
|
||||||
|
// Splitting filename into name and extension
|
||||||
|
int dotIndex = filename.lastIndexOf(".");
|
||||||
|
if (dotIndex == -1) {
|
||||||
|
// No extension found
|
||||||
|
return filename;
|
||||||
|
}
|
||||||
|
String name = filename.substring(0, dotIndex);
|
||||||
|
String extension = filename.substring(dotIndex);
|
||||||
|
|
||||||
|
// Finding the last underscore
|
||||||
|
int underscoreIndex = name.lastIndexOf("_");
|
||||||
|
if (underscoreIndex == -1) {
|
||||||
|
// No underscore found
|
||||||
|
return filename;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Removing the last part and reattaching the extension
|
||||||
|
return name.substring(0, underscoreIndex) + extension;
|
||||||
|
}
|
||||||
|
|
||||||
private List<Resource> processOutputFiles(
|
private List<Resource> processOutputFiles(
|
||||||
String operation,
|
String operation, ResponseEntity<byte[]> response, List<Resource> newOutputFiles)
|
||||||
String fileName,
|
|
||||||
ResponseEntity<byte[]> response,
|
|
||||||
List<Resource> newOutputFiles)
|
|
||||||
throws IOException {
|
throws IOException {
|
||||||
// Define filename
|
// Define filename
|
||||||
String newFilename;
|
String newFilename;
|
||||||
|
@ -227,7 +251,7 @@ public class PipelineProcessor {
|
||||||
newFilename = extractFilename(response);
|
newFilename = extractFilename(response);
|
||||||
} else {
|
} else {
|
||||||
// Otherwise, keep the original filename.
|
// Otherwise, keep the original filename.
|
||||||
newFilename = fileName;
|
newFilename = removeTrailingNaming(extractFilename(response));
|
||||||
}
|
}
|
||||||
|
|
||||||
// Check if the response body is a zip file
|
// Check if the response body is a zip file
|
||||||
|
@ -312,7 +336,7 @@ public class PipelineProcessor {
|
||||||
new ByteArrayResource(file.getBytes()) {
|
new ByteArrayResource(file.getBytes()) {
|
||||||
@Override
|
@Override
|
||||||
public String getFilename() {
|
public String getFilename() {
|
||||||
return file.getOriginalFilename();
|
return Filenames.toSimpleFileName(file.getOriginalFilename());
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
outputFiles.add(fileResource);
|
outputFiles.add(fileResource);
|
||||||
|
@ -335,7 +359,7 @@ public class PipelineProcessor {
|
||||||
List<Resource> unzippedFiles = new ArrayList<>();
|
List<Resource> unzippedFiles = new ArrayList<>();
|
||||||
|
|
||||||
try (ByteArrayInputStream bais = new ByteArrayInputStream(data);
|
try (ByteArrayInputStream bais = new ByteArrayInputStream(data);
|
||||||
ZipInputStream zis = new ZipInputStream(bais)) {
|
ZipInputStream zis = ZipSecurity.createHardenedInputStream(bais)) {
|
||||||
|
|
||||||
ZipEntry entry;
|
ZipEntry entry;
|
||||||
while ((entry = zis.getNextEntry()) != null) {
|
while ((entry = zis.getNextEntry()) != null) {
|
||||||
|
|
|
@ -42,6 +42,7 @@ import org.springframework.web.bind.annotation.RequestMapping;
|
||||||
import org.springframework.web.bind.annotation.RestController;
|
import org.springframework.web.bind.annotation.RestController;
|
||||||
import org.springframework.web.multipart.MultipartFile;
|
import org.springframework.web.multipart.MultipartFile;
|
||||||
|
|
||||||
|
import io.github.pixee.security.Filenames;
|
||||||
import io.swagger.v3.oas.annotations.Operation;
|
import io.swagger.v3.oas.annotations.Operation;
|
||||||
import io.swagger.v3.oas.annotations.tags.Tag;
|
import io.swagger.v3.oas.annotations.tags.Tag;
|
||||||
|
|
||||||
|
@ -74,7 +75,7 @@ public class CertSignController {
|
||||||
@Operation(
|
@Operation(
|
||||||
summary = "Sign PDF with a Digital Certificate",
|
summary = "Sign PDF with a Digital Certificate",
|
||||||
description =
|
description =
|
||||||
"This endpoint accepts a PDF file, a digital certificate and related information to sign the PDF. It then returns the digitally signed PDF file. Input:PDF Output:PDF Type:MF-SISO")
|
"This endpoint accepts a PDF file, a digital certificate and related information to sign the PDF. It then returns the digitally signed PDF file. Input:PDF Output:PDF Type:SISO")
|
||||||
public ResponseEntity<byte[]> signPDFWithCert(@ModelAttribute SignPDFWithCertRequest request)
|
public ResponseEntity<byte[]> signPDFWithCert(@ModelAttribute SignPDFWithCertRequest request)
|
||||||
throws Exception {
|
throws Exception {
|
||||||
MultipartFile pdf = request.getFileInput();
|
MultipartFile pdf = request.getFileInput();
|
||||||
|
@ -123,7 +124,9 @@ public class CertSignController {
|
||||||
ByteArrayOutputStream baos = new ByteArrayOutputStream();
|
ByteArrayOutputStream baos = new ByteArrayOutputStream();
|
||||||
sign(pdf.getBytes(), baos, createSignature, name, location, reason);
|
sign(pdf.getBytes(), baos, createSignature, name, location, reason);
|
||||||
return WebResponseUtils.boasToWebResponse(
|
return WebResponseUtils.boasToWebResponse(
|
||||||
baos, pdf.getOriginalFilename().replaceFirst("[.][^.]+$", "") + "_signed.pdf");
|
baos,
|
||||||
|
Filenames.toSimpleFileName(pdf.getOriginalFilename()).replaceFirst("[.][^.]+$", "")
|
||||||
|
+ "_signed.pdf");
|
||||||
}
|
}
|
||||||
|
|
||||||
private static void sign(
|
private static void sign(
|
||||||
|
|
|
@ -15,6 +15,7 @@ import org.springframework.web.bind.annotation.RequestMapping;
|
||||||
import org.springframework.web.bind.annotation.RestController;
|
import org.springframework.web.bind.annotation.RestController;
|
||||||
import org.springframework.web.multipart.MultipartFile;
|
import org.springframework.web.multipart.MultipartFile;
|
||||||
|
|
||||||
|
import io.github.pixee.security.Filenames;
|
||||||
import io.swagger.v3.oas.annotations.Operation;
|
import io.swagger.v3.oas.annotations.Operation;
|
||||||
import io.swagger.v3.oas.annotations.tags.Tag;
|
import io.swagger.v3.oas.annotations.tags.Tag;
|
||||||
|
|
||||||
|
@ -43,7 +44,8 @@ public class PasswordController {
|
||||||
document.setAllSecurityToBeRemoved(true);
|
document.setAllSecurityToBeRemoved(true);
|
||||||
return WebResponseUtils.pdfDocToWebResponse(
|
return WebResponseUtils.pdfDocToWebResponse(
|
||||||
document,
|
document,
|
||||||
fileInput.getOriginalFilename().replaceFirst("[.][^.]+$", "")
|
Filenames.toSimpleFileName(fileInput.getOriginalFilename())
|
||||||
|
.replaceFirst("[.][^.]+$", "")
|
||||||
+ "_password_removed.pdf");
|
+ "_password_removed.pdf");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -88,10 +90,13 @@ public class PasswordController {
|
||||||
if ("".equals(ownerPassword) && "".equals(password))
|
if ("".equals(ownerPassword) && "".equals(password))
|
||||||
return WebResponseUtils.pdfDocToWebResponse(
|
return WebResponseUtils.pdfDocToWebResponse(
|
||||||
document,
|
document,
|
||||||
fileInput.getOriginalFilename().replaceFirst("[.][^.]+$", "")
|
Filenames.toSimpleFileName(fileInput.getOriginalFilename())
|
||||||
|
.replaceFirst("[.][^.]+$", "")
|
||||||
+ "_permissions.pdf");
|
+ "_permissions.pdf");
|
||||||
return WebResponseUtils.pdfDocToWebResponse(
|
return WebResponseUtils.pdfDocToWebResponse(
|
||||||
document,
|
document,
|
||||||
fileInput.getOriginalFilename().replaceFirst("[.][^.]+$", "") + "_passworded.pdf");
|
Filenames.toSimpleFileName(fileInput.getOriginalFilename())
|
||||||
|
.replaceFirst("[.][^.]+$", "")
|
||||||
|
+ "_passworded.pdf");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -25,6 +25,7 @@ import org.springframework.web.bind.annotation.RequestMapping;
|
||||||
import org.springframework.web.bind.annotation.RestController;
|
import org.springframework.web.bind.annotation.RestController;
|
||||||
import org.springframework.web.multipart.MultipartFile;
|
import org.springframework.web.multipart.MultipartFile;
|
||||||
|
|
||||||
|
import io.github.pixee.security.Filenames;
|
||||||
import io.swagger.v3.oas.annotations.Operation;
|
import io.swagger.v3.oas.annotations.Operation;
|
||||||
import io.swagger.v3.oas.annotations.tags.Tag;
|
import io.swagger.v3.oas.annotations.tags.Tag;
|
||||||
|
|
||||||
|
@ -104,7 +105,8 @@ public class RedactController {
|
||||||
byte[] pdfContent = baos.toByteArray();
|
byte[] pdfContent = baos.toByteArray();
|
||||||
return WebResponseUtils.bytesToWebResponse(
|
return WebResponseUtils.bytesToWebResponse(
|
||||||
pdfContent,
|
pdfContent,
|
||||||
file.getOriginalFilename().replaceFirst("[.][^.]+$", "") + "_redacted.pdf");
|
Filenames.toSimpleFileName(file.getOriginalFilename()).replaceFirst("[.][^.]+$", "")
|
||||||
|
+ "_redacted.pdf");
|
||||||
}
|
}
|
||||||
|
|
||||||
private void redactFoundText(
|
private void redactFoundText(
|
||||||
|
|
|
@ -28,6 +28,7 @@ import org.springframework.web.bind.annotation.RequestMapping;
|
||||||
import org.springframework.web.bind.annotation.RestController;
|
import org.springframework.web.bind.annotation.RestController;
|
||||||
import org.springframework.web.multipart.MultipartFile;
|
import org.springframework.web.multipart.MultipartFile;
|
||||||
|
|
||||||
|
import io.github.pixee.security.Filenames;
|
||||||
import io.swagger.v3.oas.annotations.Operation;
|
import io.swagger.v3.oas.annotations.Operation;
|
||||||
import io.swagger.v3.oas.annotations.tags.Tag;
|
import io.swagger.v3.oas.annotations.tags.Tag;
|
||||||
|
|
||||||
|
@ -76,7 +77,8 @@ public class SanitizeController {
|
||||||
|
|
||||||
return WebResponseUtils.pdfDocToWebResponse(
|
return WebResponseUtils.pdfDocToWebResponse(
|
||||||
document,
|
document,
|
||||||
inputFile.getOriginalFilename().replaceFirst("[.][^.]+$", "")
|
Filenames.toSimpleFileName(inputFile.getOriginalFilename())
|
||||||
|
.replaceFirst("[.][^.]+$", "")
|
||||||
+ "_sanitized.pdf");
|
+ "_sanitized.pdf");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -6,6 +6,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.nio.file.Files;
|
||||||
|
|
||||||
import javax.imageio.ImageIO;
|
import javax.imageio.ImageIO;
|
||||||
|
|
||||||
|
@ -30,6 +31,7 @@ import org.springframework.web.bind.annotation.RequestMapping;
|
||||||
import org.springframework.web.bind.annotation.RestController;
|
import org.springframework.web.bind.annotation.RestController;
|
||||||
import org.springframework.web.multipart.MultipartFile;
|
import org.springframework.web.multipart.MultipartFile;
|
||||||
|
|
||||||
|
import io.github.pixee.security.Filenames;
|
||||||
import io.swagger.v3.oas.annotations.Operation;
|
import io.swagger.v3.oas.annotations.Operation;
|
||||||
import io.swagger.v3.oas.annotations.tags.Tag;
|
import io.swagger.v3.oas.annotations.tags.Tag;
|
||||||
|
|
||||||
|
@ -75,7 +77,7 @@ public class WatermarkController {
|
||||||
graphicsState.setNonStrokingAlphaConstant(opacity);
|
graphicsState.setNonStrokingAlphaConstant(opacity);
|
||||||
contentStream.setGraphicsStateParameters(graphicsState);
|
contentStream.setGraphicsStateParameters(graphicsState);
|
||||||
|
|
||||||
if (watermarkType.equalsIgnoreCase("text")) {
|
if ("text".equalsIgnoreCase(watermarkType)) {
|
||||||
addTextWatermark(
|
addTextWatermark(
|
||||||
contentStream,
|
contentStream,
|
||||||
watermarkText,
|
watermarkText,
|
||||||
|
@ -86,7 +88,7 @@ public class WatermarkController {
|
||||||
heightSpacer,
|
heightSpacer,
|
||||||
fontSize,
|
fontSize,
|
||||||
alphabet);
|
alphabet);
|
||||||
} else if (watermarkType.equalsIgnoreCase("image")) {
|
} else if ("image".equalsIgnoreCase(watermarkType)) {
|
||||||
addImageWatermark(
|
addImageWatermark(
|
||||||
contentStream,
|
contentStream,
|
||||||
watermarkImage,
|
watermarkImage,
|
||||||
|
@ -104,7 +106,9 @@ public class WatermarkController {
|
||||||
|
|
||||||
return WebResponseUtils.pdfDocToWebResponse(
|
return WebResponseUtils.pdfDocToWebResponse(
|
||||||
document,
|
document,
|
||||||
pdfFile.getOriginalFilename().replaceFirst("[.][^.]+$", "") + "_watermarked.pdf");
|
Filenames.toSimpleFileName(pdfFile.getOriginalFilename())
|
||||||
|
.replaceFirst("[.][^.]+$", "")
|
||||||
|
+ "_watermarked.pdf");
|
||||||
}
|
}
|
||||||
|
|
||||||
private void addTextWatermark(
|
private void addTextWatermark(
|
||||||
|
@ -139,10 +143,10 @@ public class WatermarkController {
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!resourceDir.equals("")) {
|
if (!"".equals(resourceDir)) {
|
||||||
ClassPathResource classPathResource = new ClassPathResource(resourceDir);
|
ClassPathResource classPathResource = new ClassPathResource(resourceDir);
|
||||||
String fileExtension = resourceDir.substring(resourceDir.lastIndexOf("."));
|
String fileExtension = resourceDir.substring(resourceDir.lastIndexOf("."));
|
||||||
File tempFile = File.createTempFile("NotoSansFont", fileExtension);
|
File tempFile = Files.createTempFile("NotoSansFont", fileExtension).toFile();
|
||||||
try (InputStream is = classPathResource.getInputStream();
|
try (InputStream is = classPathResource.getInputStream();
|
||||||
FileOutputStream os = new FileOutputStream(tempFile)) {
|
FileOutputStream os = new FileOutputStream(tempFile)) {
|
||||||
IOUtils.copy(is, os);
|
IOUtils.copy(is, os);
|
||||||
|
@ -155,9 +159,16 @@ public class WatermarkController {
|
||||||
contentStream.setFont(font, fontSize);
|
contentStream.setFont(font, fontSize);
|
||||||
contentStream.setNonStrokingColor(Color.LIGHT_GRAY);
|
contentStream.setNonStrokingColor(Color.LIGHT_GRAY);
|
||||||
|
|
||||||
|
String[] textLines = watermarkText.split("\\\\n");
|
||||||
|
float maxLineWidth = 0;
|
||||||
|
|
||||||
|
for (int i = 0; i < textLines.length; ++i) {
|
||||||
|
maxLineWidth = Math.max(maxLineWidth, font.getStringWidth(textLines[i]));
|
||||||
|
}
|
||||||
|
|
||||||
// Set size and location of text watermark
|
// Set size and location of text watermark
|
||||||
float watermarkWidth = widthSpacer + font.getStringWidth(watermarkText) * fontSize / 1000;
|
float watermarkWidth = widthSpacer + maxLineWidth * fontSize / 1000;
|
||||||
float watermarkHeight = heightSpacer + fontSize;
|
float watermarkHeight = heightSpacer + fontSize * textLines.length;
|
||||||
float pageWidth = page.getMediaBox().getWidth();
|
float pageWidth = page.getMediaBox().getWidth();
|
||||||
float pageHeight = page.getMediaBox().getHeight();
|
float pageHeight = page.getMediaBox().getHeight();
|
||||||
int watermarkRows = (int) (pageHeight / watermarkHeight + 1);
|
int watermarkRows = (int) (pageHeight / watermarkHeight + 1);
|
||||||
|
@ -172,7 +183,12 @@ public class WatermarkController {
|
||||||
(float) Math.toRadians(rotation),
|
(float) Math.toRadians(rotation),
|
||||||
j * watermarkWidth,
|
j * watermarkWidth,
|
||||||
i * watermarkHeight));
|
i * watermarkHeight));
|
||||||
contentStream.showText(watermarkText);
|
|
||||||
|
for (int k = 0; k < textLines.length; ++k) {
|
||||||
|
contentStream.showText(textLines[k]);
|
||||||
|
contentStream.newLineAtOffset(0, -fontSize);
|
||||||
|
}
|
||||||
|
|
||||||
contentStream.endText();
|
contentStream.endText();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -13,7 +13,7 @@ import io.swagger.v3.oas.annotations.tags.Tag;
|
||||||
@Tag(name = "Convert", description = "Convert APIs")
|
@Tag(name = "Convert", description = "Convert APIs")
|
||||||
public class ConverterWebController {
|
public class ConverterWebController {
|
||||||
|
|
||||||
@ConditionalOnExpression("#{bookFormatsInstalled}")
|
@ConditionalOnExpression("#{bookAndHtmlFormatsInstalled}")
|
||||||
@GetMapping("/book-to-pdf")
|
@GetMapping("/book-to-pdf")
|
||||||
@Hidden
|
@Hidden
|
||||||
public String convertBookToPdfForm(Model model) {
|
public String convertBookToPdfForm(Model model) {
|
||||||
|
@ -21,7 +21,7 @@ public class ConverterWebController {
|
||||||
return "convert/book-to-pdf";
|
return "convert/book-to-pdf";
|
||||||
}
|
}
|
||||||
|
|
||||||
@ConditionalOnExpression("#{bookFormatsInstalled}")
|
@ConditionalOnExpression("#{bookAndHtmlFormatsInstalled}")
|
||||||
@GetMapping("/pdf-to-book")
|
@GetMapping("/pdf-to-book")
|
||||||
@Hidden
|
@Hidden
|
||||||
public String convertPdfToBookForm(Model model) {
|
public String convertPdfToBookForm(Model model) {
|
||||||
|
|
|
@ -84,7 +84,7 @@ public class MetricsController {
|
||||||
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 && "GET".equals(method)) {
|
||||||
|
|
||||||
if (endpoint.isPresent() && !endpoint.get().isBlank()) {
|
if (endpoint.isPresent() && !endpoint.get().isBlank()) {
|
||||||
if (!endpoint.get().startsWith("/")) {
|
if (!endpoint.get().startsWith("/")) {
|
||||||
|
@ -129,7 +129,7 @@ public class MetricsController {
|
||||||
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 && "GET".equals(method)) {
|
||||||
String uri = meter.getId().getTag("uri");
|
String uri = meter.getId().getTag("uri");
|
||||||
if (uri != null) {
|
if (uri != null) {
|
||||||
double currentCount = counts.getOrDefault(uri, 0.0);
|
double currentCount = counts.getOrDefault(uri, 0.0);
|
||||||
|
@ -197,7 +197,7 @@ public class MetricsController {
|
||||||
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("POST")) {
|
if (method != null && "POST".equals(method)) {
|
||||||
if (endpoint.isPresent() && !endpoint.get().isBlank()) {
|
if (endpoint.isPresent() && !endpoint.get().isBlank()) {
|
||||||
if (!endpoint.get().startsWith("/")) {
|
if (!endpoint.get().startsWith("/")) {
|
||||||
endpoint = Optional.of("/" + endpoint.get());
|
endpoint = Optional.of("/" + endpoint.get());
|
||||||
|
@ -235,7 +235,7 @@ public class MetricsController {
|
||||||
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("POST")) {
|
if (method != null && "POST".equals(method)) {
|
||||||
String uri = meter.getId().getTag("uri");
|
String uri = meter.getId().getTag("uri");
|
||||||
if (uri != null) {
|
if (uri != null) {
|
||||||
double currentCount = counts.getOrDefault(uri, 0.0);
|
double currentCount = counts.getOrDefault(uri, 0.0);
|
||||||
|
|
|
@ -39,6 +39,13 @@ public class OtherWebController {
|
||||||
return "misc/show-javascript";
|
return "misc/show-javascript";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@GetMapping("/stamp")
|
||||||
|
@Hidden
|
||||||
|
public String stampForm(Model model) {
|
||||||
|
model.addAttribute("currentPage", "stamp");
|
||||||
|
return "misc/stamp";
|
||||||
|
}
|
||||||
|
|
||||||
@GetMapping("/add-page-numbers")
|
@GetMapping("/add-page-numbers")
|
||||||
@Hidden
|
@Hidden
|
||||||
public String addPageNumbersForm(Model model) {
|
public String addPageNumbersForm(Model model) {
|
||||||
|
|
|
@ -290,31 +290,20 @@ public class ApplicationProperties {
|
||||||
}
|
}
|
||||||
|
|
||||||
public static class CustomApplications {
|
public static class CustomApplications {
|
||||||
private boolean installBookFormats;
|
private boolean installBookAndHtmlFormats;
|
||||||
private boolean installAdvancedHtmlToPDF;
|
|
||||||
|
|
||||||
public boolean isInstallBookFormats() {
|
public boolean isInstallBookAndHtmlFormats() {
|
||||||
return installBookFormats;
|
return installBookAndHtmlFormats;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setInstallBookFormats(boolean installBookFormats) {
|
public void setInstallBookAndHtmlFormats(boolean installBookAndHtmlFormats) {
|
||||||
this.installBookFormats = installBookFormats;
|
this.installBookAndHtmlFormats = installBookAndHtmlFormats;
|
||||||
}
|
|
||||||
|
|
||||||
public boolean isInstallAdvancedHtmlToPDF() {
|
|
||||||
return installAdvancedHtmlToPDF;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setInstallAdvancedHtmlToPDF(boolean installAdvancedHtmlToPDF) {
|
|
||||||
this.installAdvancedHtmlToPDF = installAdvancedHtmlToPDF;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public String toString() {
|
public String toString() {
|
||||||
return "CustomApplications [installBookFormats="
|
return "CustomApplications [installBookAndHtmlFormats="
|
||||||
+ installBookFormats
|
+ installBookAndHtmlFormats
|
||||||
+ ", installAdvancedHtmlToPDF="
|
|
||||||
+ installAdvancedHtmlToPDF
|
|
||||||
+ "]";
|
+ "]";
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -25,7 +25,7 @@ public class PDFWithPageNums extends PDFFile {
|
||||||
private String pageNumbers;
|
private String pageNumbers;
|
||||||
|
|
||||||
@Hidden
|
@Hidden
|
||||||
public List<Integer> getPageNumbersList() {
|
public List<Integer> getPageNumbersList(boolean zeroCount) {
|
||||||
int pageCount = 0;
|
int pageCount = 0;
|
||||||
try {
|
try {
|
||||||
pageCount = Loader.loadPDF(getFileInput().getBytes()).getNumberOfPages();
|
pageCount = Loader.loadPDF(getFileInput().getBytes()).getNumberOfPages();
|
||||||
|
@ -33,13 +33,13 @@ public class PDFWithPageNums extends PDFFile {
|
||||||
// TODO Auto-generated catch block
|
// TODO Auto-generated catch block
|
||||||
e.printStackTrace();
|
e.printStackTrace();
|
||||||
}
|
}
|
||||||
return GeneralUtils.parsePageString(pageNumbers, pageCount);
|
return GeneralUtils.parsePageString(pageNumbers, pageCount, zeroCount);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Hidden
|
@Hidden
|
||||||
public List<Integer> getPageNumbersList(PDDocument doc) {
|
public List<Integer> getPageNumbersList(PDDocument doc, boolean zeroCount) {
|
||||||
int pageCount = 0;
|
int pageCount = 0;
|
||||||
pageCount = doc.getNumberOfPages();
|
pageCount = doc.getNumberOfPages();
|
||||||
return GeneralUtils.parsePageString(pageNumbers, pageCount);
|
return GeneralUtils.parsePageString(pageNumbers, pageCount, zeroCount);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -0,0 +1,17 @@
|
||||||
|
package stirling.software.SPDF.model.api.converters;
|
||||||
|
|
||||||
|
import io.swagger.v3.oas.annotations.media.Schema;
|
||||||
|
|
||||||
|
import lombok.Data;
|
||||||
|
import lombok.EqualsAndHashCode;
|
||||||
|
import stirling.software.SPDF.model.api.PDFFile;
|
||||||
|
|
||||||
|
@Data
|
||||||
|
@EqualsAndHashCode(callSuper = true)
|
||||||
|
public class HTMLToPdfRequest extends PDFFile {
|
||||||
|
|
||||||
|
@Schema(
|
||||||
|
description = "Zoom level for displaying the website. Default is '1'.",
|
||||||
|
defaultValue = "1")
|
||||||
|
private float zoom;
|
||||||
|
}
|
|
@ -12,6 +12,6 @@ public class PdfToTextOrRTFRequest extends PDFFile {
|
||||||
|
|
||||||
@Schema(
|
@Schema(
|
||||||
description = "The output Text or RTF format",
|
description = "The output Text or RTF format",
|
||||||
allowableValues = {"rtf", "txt:Text"})
|
allowableValues = {"rtf", "txt"})
|
||||||
private String outputFormat;
|
private String outputFormat;
|
||||||
}
|
}
|
||||||
|
|
|
@ -0,0 +1,68 @@
|
||||||
|
package stirling.software.SPDF.model.api.misc;
|
||||||
|
|
||||||
|
import org.springframework.web.multipart.MultipartFile;
|
||||||
|
|
||||||
|
import io.swagger.v3.oas.annotations.media.Schema;
|
||||||
|
|
||||||
|
import lombok.Data;
|
||||||
|
import lombok.EqualsAndHashCode;
|
||||||
|
import stirling.software.SPDF.model.api.PDFWithPageNums;
|
||||||
|
|
||||||
|
@Data
|
||||||
|
@EqualsAndHashCode(callSuper = true)
|
||||||
|
public class AddStampRequest extends PDFWithPageNums {
|
||||||
|
|
||||||
|
@Schema(
|
||||||
|
description = "The stamp type (text or image)",
|
||||||
|
allowableValues = {"text", "image"},
|
||||||
|
required = true)
|
||||||
|
private String stampType;
|
||||||
|
|
||||||
|
@Schema(description = "The stamp text")
|
||||||
|
private String stampText;
|
||||||
|
|
||||||
|
@Schema(description = "The stamp image")
|
||||||
|
private MultipartFile stampImage;
|
||||||
|
|
||||||
|
@Schema(
|
||||||
|
description = "The selected alphabet",
|
||||||
|
allowableValues = {"roman", "arabic", "japanese", "korean", "chinese"},
|
||||||
|
defaultValue = "roman")
|
||||||
|
private String alphabet = "roman";
|
||||||
|
|
||||||
|
@Schema(description = "The font size of the stamp text", example = "30")
|
||||||
|
private float fontSize = 30;
|
||||||
|
|
||||||
|
@Schema(description = "The rotation of the stamp in degrees", example = "0")
|
||||||
|
private float rotation = 0;
|
||||||
|
|
||||||
|
@Schema(description = "The opacity of the stamp (0.0 - 1.0)", example = "0.5")
|
||||||
|
private float opacity;
|
||||||
|
|
||||||
|
@Schema(
|
||||||
|
description =
|
||||||
|
"Position for stamp placement based on a 1-9 grid (1: bottom-left, 2: bottom-center, ..., 9: top-right)",
|
||||||
|
example = "1")
|
||||||
|
private int position;
|
||||||
|
|
||||||
|
@Schema(
|
||||||
|
description =
|
||||||
|
"Override X coordinate for stamp placement. If set, it will override the position-based calculation. Negative value means no override.",
|
||||||
|
example = "-1")
|
||||||
|
private float overrideX = -1; // Default to -1 indicating no override
|
||||||
|
|
||||||
|
@Schema(
|
||||||
|
description =
|
||||||
|
"Override Y coordinate for stamp placement. If set, it will override the position-based calculation. Negative value means no override.",
|
||||||
|
example = "-1")
|
||||||
|
private float overrideY = -1; // Default to -1 indicating no override
|
||||||
|
|
||||||
|
@Schema(
|
||||||
|
description = "Specifies the margin size for the stamp.",
|
||||||
|
allowableValues = {"small", "medium", "large", "x-large"},
|
||||||
|
defaultValue = "medium")
|
||||||
|
private String customMargin = "medium";
|
||||||
|
|
||||||
|
@Schema(description = "The color for stamp", defaultValue = "#d3d3d3")
|
||||||
|
private String customColor = "#d3d3d3";
|
||||||
|
}
|
|
@ -1,131 +0,0 @@
|
||||||
package stirling.software.SPDF.pdf;
|
|
||||||
|
|
||||||
import java.awt.geom.Point2D;
|
|
||||||
import java.io.IOException;
|
|
||||||
import java.util.List;
|
|
||||||
|
|
||||||
import org.apache.pdfbox.contentstream.operator.Operator;
|
|
||||||
import org.apache.pdfbox.contentstream.operator.OperatorName;
|
|
||||||
import org.apache.pdfbox.cos.COSBase;
|
|
||||||
import org.apache.pdfbox.cos.COSName;
|
|
||||||
import org.apache.pdfbox.pdmodel.PDPage;
|
|
||||||
import org.apache.pdfbox.pdmodel.graphics.PDXObject;
|
|
||||||
import org.apache.pdfbox.pdmodel.graphics.form.PDFormXObject;
|
|
||||||
import org.apache.pdfbox.pdmodel.graphics.image.PDImage;
|
|
||||||
import org.apache.pdfbox.pdmodel.graphics.image.PDImageXObject;
|
|
||||||
|
|
||||||
public class ImageFinder extends org.apache.pdfbox.contentstream.PDFGraphicsStreamEngine {
|
|
||||||
private boolean hasImages = false;
|
|
||||||
|
|
||||||
public ImageFinder(PDPage page) {
|
|
||||||
super(page);
|
|
||||||
}
|
|
||||||
|
|
||||||
public boolean hasImages() {
|
|
||||||
return hasImages;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
protected void processOperator(Operator operator, List<COSBase> operands) throws IOException {
|
|
||||||
String operation = operator.getName();
|
|
||||||
if (operation.equals(OperatorName.DRAW_OBJECT)) {
|
|
||||||
COSBase base = operands.get(0);
|
|
||||||
if (base instanceof COSName) {
|
|
||||||
COSName objectName = (COSName) base;
|
|
||||||
PDXObject xobject = getResources().getXObject(objectName);
|
|
||||||
if (xobject instanceof PDImageXObject) {
|
|
||||||
hasImages = true;
|
|
||||||
} else if (xobject instanceof PDFormXObject) {
|
|
||||||
PDFormXObject form = (PDFormXObject) xobject;
|
|
||||||
ImageFinder innerFinder = new ImageFinder(getPage());
|
|
||||||
innerFinder.processPage(getPage());
|
|
||||||
if (innerFinder.hasImages()) {
|
|
||||||
hasImages = true;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
super.processOperator(operator, operands);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void appendRectangle(Point2D p0, Point2D p1, Point2D p2, Point2D p3) throws IOException {
|
|
||||||
// TODO Auto-generated method stub
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void drawImage(PDImage pdImage) throws IOException {
|
|
||||||
// TODO Auto-generated method stub
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void clip(int windingRule) throws IOException {
|
|
||||||
// TODO Auto-generated method stub
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void moveTo(float x, float y) throws IOException {
|
|
||||||
// TODO Auto-generated method stub
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void lineTo(float x, float y) throws IOException {
|
|
||||||
// TODO Auto-generated method stub
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void curveTo(float x1, float y1, float x2, float y2, float x3, float y3)
|
|
||||||
throws IOException {
|
|
||||||
// TODO Auto-generated method stub
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public Point2D getCurrentPoint() throws IOException {
|
|
||||||
// TODO Auto-generated method stub
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void closePath() throws IOException {
|
|
||||||
// TODO Auto-generated method stub
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void endPath() throws IOException {
|
|
||||||
// TODO Auto-generated method stub
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void strokePath() throws IOException {
|
|
||||||
// TODO Auto-generated method stub
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void fillPath(int windingRule) throws IOException {
|
|
||||||
// TODO Auto-generated method stub
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void fillAndStrokePath(int windingRule) throws IOException {
|
|
||||||
// TODO Auto-generated method stub
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void shadingFill(COSName shadingName) throws IOException {
|
|
||||||
// TODO Auto-generated method stub
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
// ... rest of the overridden methods
|
|
||||||
}
|
|
|
@ -1,6 +1,8 @@
|
||||||
package stirling.software.SPDF.utils;
|
package stirling.software.SPDF.utils;
|
||||||
|
|
||||||
import java.io.ByteArrayInputStream;
|
import java.io.ByteArrayInputStream;
|
||||||
|
import java.io.File;
|
||||||
|
import java.io.FileWriter;
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.nio.file.Files;
|
import java.nio.file.Files;
|
||||||
import java.nio.file.Path;
|
import java.nio.file.Path;
|
||||||
|
@ -11,12 +13,18 @@ import java.util.stream.Stream;
|
||||||
import java.util.zip.ZipEntry;
|
import java.util.zip.ZipEntry;
|
||||||
import java.util.zip.ZipInputStream;
|
import java.util.zip.ZipInputStream;
|
||||||
|
|
||||||
|
import io.github.pixee.security.ZipSecurity;
|
||||||
|
|
||||||
|
import stirling.software.SPDF.model.api.converters.HTMLToPdfRequest;
|
||||||
import stirling.software.SPDF.utils.ProcessExecutor.ProcessExecutorResult;
|
import stirling.software.SPDF.utils.ProcessExecutor.ProcessExecutorResult;
|
||||||
|
|
||||||
public class FileToPdf {
|
public class FileToPdf {
|
||||||
|
|
||||||
public static byte[] convertHtmlToPdf(
|
public static byte[] convertHtmlToPdf(
|
||||||
byte[] fileBytes, String fileName, boolean htmlFormatsInstalled)
|
HTMLToPdfRequest request,
|
||||||
|
byte[] fileBytes,
|
||||||
|
String fileName,
|
||||||
|
boolean htmlFormatsInstalled)
|
||||||
throws IOException, InterruptedException {
|
throws IOException, InterruptedException {
|
||||||
|
|
||||||
Path tempOutputFile = Files.createTempFile("output_", ".pdf");
|
Path tempOutputFile = Files.createTempFile("output_", ".pdf");
|
||||||
|
@ -27,46 +35,52 @@ public class FileToPdf {
|
||||||
tempInputFile = Files.createTempFile("input_", ".html");
|
tempInputFile = Files.createTempFile("input_", ".html");
|
||||||
Files.write(tempInputFile, fileBytes);
|
Files.write(tempInputFile, fileBytes);
|
||||||
} else {
|
} else {
|
||||||
tempInputFile = unzipAndGetMainHtml(fileBytes);
|
tempInputFile = Files.createTempFile("input_", ".zip");
|
||||||
|
Files.write(tempInputFile, fileBytes);
|
||||||
}
|
}
|
||||||
|
|
||||||
List<String> command = new ArrayList<>();
|
List<String> command = new ArrayList<>();
|
||||||
if (!htmlFormatsInstalled) {
|
if (!htmlFormatsInstalled) {
|
||||||
command.add("weasyprint");
|
command.add("weasyprint");
|
||||||
} else {
|
|
||||||
command.add("wkhtmltopdf");
|
|
||||||
command.add("--enable-local-file-access");
|
|
||||||
}
|
|
||||||
|
|
||||||
command.add(tempInputFile.toString());
|
command.add(tempInputFile.toString());
|
||||||
command.add(tempOutputFile.toString());
|
command.add(tempOutputFile.toString());
|
||||||
ProcessExecutorResult returnCode;
|
|
||||||
if (fileName.endsWith(".zip")) {
|
|
||||||
|
|
||||||
if (htmlFormatsInstalled) {
|
|
||||||
// command.add(1, "--allow");
|
|
||||||
// command.add(2, tempInputFile.getParent().toString());
|
|
||||||
}
|
|
||||||
returnCode =
|
|
||||||
ProcessExecutor.getInstance(ProcessExecutor.Processes.WEASYPRINT)
|
|
||||||
.runCommandWithOutputHandling(
|
|
||||||
command, tempInputFile.getParent().toFile());
|
|
||||||
} else {
|
} else {
|
||||||
|
command.add("ebook-convert");
|
||||||
|
command.add(tempInputFile.toString());
|
||||||
|
command.add(tempOutputFile.toString());
|
||||||
|
command.add("--paper-size");
|
||||||
|
command.add("a4");
|
||||||
|
|
||||||
|
if (request.getZoom() != 1.0) {
|
||||||
|
// Create a temporary CSS file
|
||||||
|
File tempCssFile = Files.createTempFile("customStyle", ".css").toFile();
|
||||||
|
try (FileWriter writer = new FileWriter(tempCssFile)) {
|
||||||
|
// Write the CSS rule to the file
|
||||||
|
writer.write("body { zoom: " + request.getZoom() + "; }");
|
||||||
|
}
|
||||||
|
command.add("--extra-css");
|
||||||
|
command.add(tempCssFile.getAbsolutePath());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
ProcessExecutorResult returnCode;
|
||||||
|
|
||||||
returnCode =
|
returnCode =
|
||||||
ProcessExecutor.getInstance(ProcessExecutor.Processes.WEASYPRINT)
|
ProcessExecutor.getInstance(ProcessExecutor.Processes.WEASYPRINT)
|
||||||
.runCommandWithOutputHandling(command);
|
.runCommandWithOutputHandling(command);
|
||||||
}
|
|
||||||
|
|
||||||
pdfBytes = Files.readAllBytes(tempOutputFile);
|
pdfBytes = Files.readAllBytes(tempOutputFile);
|
||||||
|
} catch (IOException e) {
|
||||||
|
pdfBytes = Files.readAllBytes(tempOutputFile);
|
||||||
|
if (pdfBytes.length < 1) {
|
||||||
|
throw e;
|
||||||
|
}
|
||||||
} finally {
|
} finally {
|
||||||
|
|
||||||
// Clean up temporary files
|
// Clean up temporary files
|
||||||
Files.delete(tempOutputFile);
|
Files.delete(tempOutputFile);
|
||||||
Files.delete(tempInputFile);
|
Files.delete(tempInputFile);
|
||||||
|
|
||||||
if (fileName.endsWith(".zip")) {
|
|
||||||
GeneralUtils.deleteDirectory(tempInputFile.getParent());
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return pdfBytes;
|
return pdfBytes;
|
||||||
|
@ -74,7 +88,8 @@ public class FileToPdf {
|
||||||
|
|
||||||
private static Path unzipAndGetMainHtml(byte[] fileBytes) throws IOException {
|
private static Path unzipAndGetMainHtml(byte[] fileBytes) throws IOException {
|
||||||
Path tempDirectory = Files.createTempDirectory("unzipped_");
|
Path tempDirectory = Files.createTempDirectory("unzipped_");
|
||||||
try (ZipInputStream zipIn = new ZipInputStream(new ByteArrayInputStream(fileBytes))) {
|
try (ZipInputStream zipIn =
|
||||||
|
ZipSecurity.createHardenedInputStream(new ByteArrayInputStream(fileBytes))) {
|
||||||
ZipEntry entry = zipIn.getNextEntry();
|
ZipEntry entry = zipIn.getNextEntry();
|
||||||
while (entry != null) {
|
while (entry != null) {
|
||||||
Path filePath = tempDirectory.resolve(entry.getName());
|
Path filePath = tempDirectory.resolve(entry.getName());
|
||||||
|
@ -102,7 +117,7 @@ public class FileToPdf {
|
||||||
|
|
||||||
// Prioritize 'index.html' if it exists, otherwise use the first .html file
|
// Prioritize 'index.html' if it exists, otherwise use the first .html file
|
||||||
for (Path htmlFile : htmlFiles) {
|
for (Path htmlFile : htmlFiles) {
|
||||||
if (htmlFile.getFileName().toString().equals("index.html")) {
|
if ("index.html".equals(htmlFile.getFileName().toString())) {
|
||||||
return htmlFile;
|
return htmlFile;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -130,7 +145,6 @@ public class FileToPdf {
|
||||||
command.add("ebook-convert");
|
command.add("ebook-convert");
|
||||||
command.add(tempInputFile.toString());
|
command.add(tempInputFile.toString());
|
||||||
command.add(tempOutputFile.toString());
|
command.add(tempOutputFile.toString());
|
||||||
|
|
||||||
ProcessExecutorResult returnCode =
|
ProcessExecutorResult returnCode =
|
||||||
ProcessExecutor.getInstance(ProcessExecutor.Processes.CALIBRE)
|
ProcessExecutor.getInstance(ProcessExecutor.Processes.CALIBRE)
|
||||||
.runCommandWithOutputHandling(command);
|
.runCommandWithOutputHandling(command);
|
||||||
|
|
|
@ -5,7 +5,6 @@ import java.io.FileOutputStream;
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.io.InputStream;
|
import java.io.InputStream;
|
||||||
import java.net.MalformedURLException;
|
import java.net.MalformedURLException;
|
||||||
import java.net.URL;
|
|
||||||
import java.nio.file.FileVisitResult;
|
import java.nio.file.FileVisitResult;
|
||||||
import java.nio.file.Files;
|
import java.nio.file.Files;
|
||||||
import java.nio.file.Path;
|
import java.nio.file.Path;
|
||||||
|
@ -13,14 +12,18 @@ import java.nio.file.Paths;
|
||||||
import java.nio.file.SimpleFileVisitor;
|
import java.nio.file.SimpleFileVisitor;
|
||||||
import java.nio.file.attribute.BasicFileAttributes;
|
import java.nio.file.attribute.BasicFileAttributes;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
|
import java.util.Collections;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
import org.springframework.web.multipart.MultipartFile;
|
import org.springframework.web.multipart.MultipartFile;
|
||||||
|
|
||||||
|
import io.github.pixee.security.HostValidator;
|
||||||
|
import io.github.pixee.security.Urls;
|
||||||
|
|
||||||
public class GeneralUtils {
|
public class GeneralUtils {
|
||||||
|
|
||||||
public static File convertMultipartFileToFile(MultipartFile multipartFile) throws IOException {
|
public static File convertMultipartFileToFile(MultipartFile multipartFile) throws IOException {
|
||||||
File tempFile = File.createTempFile("temp", null);
|
File tempFile = Files.createTempFile("temp", null).toFile();
|
||||||
try (FileOutputStream os = new FileOutputStream(tempFile)) {
|
try (FileOutputStream os = new FileOutputStream(tempFile)) {
|
||||||
os.write(multipartFile.getBytes());
|
os.write(multipartFile.getBytes());
|
||||||
}
|
}
|
||||||
|
@ -57,7 +60,8 @@ public class GeneralUtils {
|
||||||
|
|
||||||
public static boolean isValidURL(String urlStr) {
|
public static boolean isValidURL(String urlStr) {
|
||||||
try {
|
try {
|
||||||
new URL(urlStr);
|
Urls.create(
|
||||||
|
urlStr, Urls.HTTP_PROTOCOLS, HostValidator.DENY_COMMON_INFRASTRUCTURE_TARGETS);
|
||||||
return true;
|
return true;
|
||||||
} catch (MalformedURLException e) {
|
} catch (MalformedURLException e) {
|
||||||
return false;
|
return false;
|
||||||
|
@ -112,17 +116,36 @@ public class GeneralUtils {
|
||||||
}
|
}
|
||||||
|
|
||||||
public static List<Integer> parsePageString(String pageOrder, int totalPages) {
|
public static List<Integer> parsePageString(String pageOrder, int totalPages) {
|
||||||
return parsePageList(pageOrder.split(","), totalPages);
|
return parsePageString(pageOrder, totalPages, false);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static List<Integer> parsePageString(
|
||||||
|
String pageOrder, int totalPages, boolean isOneBased) {
|
||||||
|
if (pageOrder == null || pageOrder.isEmpty()) {
|
||||||
|
return Collections.singletonList(1);
|
||||||
|
}
|
||||||
|
if (pageOrder.matches("\\d+")) {
|
||||||
|
// Convert the single number string to an integer and return it in a list
|
||||||
|
return Collections.singletonList(Integer.parseInt(pageOrder));
|
||||||
|
}
|
||||||
|
return parsePageList(pageOrder.split(","), totalPages, isOneBased);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static List<Integer> parsePageList(String[] pageOrderArr, int totalPages) {
|
public static List<Integer> parsePageList(String[] pageOrderArr, int totalPages) {
|
||||||
|
return parsePageList(pageOrderArr, totalPages, false);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static List<Integer> parsePageList(
|
||||||
|
String[] pageOrderArr, int totalPages, boolean isOneBased) {
|
||||||
List<Integer> newPageOrder = new ArrayList<>();
|
List<Integer> newPageOrder = new ArrayList<>();
|
||||||
|
|
||||||
|
int adjustmentFactor = isOneBased ? 1 : 0;
|
||||||
|
|
||||||
// loop through the page order array
|
// loop through the page order array
|
||||||
for (String element : pageOrderArr) {
|
for (String element : pageOrderArr) {
|
||||||
if (element.equalsIgnoreCase("all")) {
|
if ("all".equalsIgnoreCase(element)) {
|
||||||
for (int i = 0; i < totalPages; i++) {
|
for (int i = 0; i < totalPages; i++) {
|
||||||
newPageOrder.add(i);
|
newPageOrder.add(i + adjustmentFactor);
|
||||||
}
|
}
|
||||||
// As all pages are already added, no need to check further
|
// As all pages are already added, no need to check further
|
||||||
break;
|
break;
|
||||||
|
@ -135,11 +158,11 @@ public class GeneralUtils {
|
||||||
|
|
||||||
if (element.contains("n")) {
|
if (element.contains("n")) {
|
||||||
String[] parts = element.split("n");
|
String[] parts = element.split("n");
|
||||||
if (!parts[0].equals("") && parts[0] != null) {
|
if (!"".equals(parts[0]) && parts[0] != null) {
|
||||||
coefficient = Integer.parseInt(parts[0]);
|
coefficient = Integer.parseInt(parts[0]);
|
||||||
coefficientExists = true;
|
coefficientExists = true;
|
||||||
}
|
}
|
||||||
if (parts.length > 1 && !parts[1].equals("") && parts[1] != null) {
|
if (parts.length > 1 && !"".equals(parts[1]) && parts[1] != null) {
|
||||||
constant = Integer.parseInt(parts[1]);
|
constant = Integer.parseInt(parts[1]);
|
||||||
constantExists = true;
|
constantExists = true;
|
||||||
}
|
}
|
||||||
|
@ -153,7 +176,7 @@ public class GeneralUtils {
|
||||||
pageNum += constantExists ? constant : 0;
|
pageNum += constantExists ? constant : 0;
|
||||||
|
|
||||||
if (pageNum <= totalPages && pageNum > 0) {
|
if (pageNum <= totalPages && pageNum > 0) {
|
||||||
newPageOrder.add(pageNum - 1);
|
newPageOrder.add(pageNum - adjustmentFactor);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} else if (element.contains("-")) {
|
} else if (element.contains("-")) {
|
||||||
|
@ -168,11 +191,11 @@ public class GeneralUtils {
|
||||||
// loop through the range of pages
|
// loop through the range of pages
|
||||||
for (int j = start; j <= end; j++) {
|
for (int j = start; j <= end; j++) {
|
||||||
// print the current index
|
// print the current index
|
||||||
newPageOrder.add(j - 1);
|
newPageOrder.add(j - adjustmentFactor);
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
// if the element is a single page
|
// if the element is a single page
|
||||||
newPageOrder.add(Integer.parseInt(element) - 1);
|
newPageOrder.add(Integer.parseInt(element) - adjustmentFactor);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -20,6 +20,8 @@ import org.springframework.http.MediaType;
|
||||||
import org.springframework.http.ResponseEntity;
|
import org.springframework.http.ResponseEntity;
|
||||||
import org.springframework.web.multipart.MultipartFile;
|
import org.springframework.web.multipart.MultipartFile;
|
||||||
|
|
||||||
|
import io.github.pixee.security.Filenames;
|
||||||
|
|
||||||
import stirling.software.SPDF.utils.ProcessExecutor.ProcessExecutorResult;
|
import stirling.software.SPDF.utils.ProcessExecutor.ProcessExecutorResult;
|
||||||
|
|
||||||
public class PDFToFile {
|
public class PDFToFile {
|
||||||
|
@ -32,7 +34,7 @@ public class PDFToFile {
|
||||||
}
|
}
|
||||||
|
|
||||||
// Get the original PDF file name without the extension
|
// Get the original PDF file name without the extension
|
||||||
String originalPdfFileName = inputFile.getOriginalFilename();
|
String originalPdfFileName = Filenames.toSimpleFileName(inputFile.getOriginalFilename());
|
||||||
String pdfBaseName = originalPdfFileName.substring(0, originalPdfFileName.lastIndexOf('.'));
|
String pdfBaseName = originalPdfFileName.substring(0, originalPdfFileName.lastIndexOf('.'));
|
||||||
|
|
||||||
// Validate output format
|
// Validate output format
|
||||||
|
@ -87,7 +89,7 @@ public class PDFToFile {
|
||||||
if (outputFiles.size() == 1) {
|
if (outputFiles.size() == 1) {
|
||||||
// Return single output file
|
// Return single output file
|
||||||
File outputFile = outputFiles.get(0);
|
File outputFile = outputFiles.get(0);
|
||||||
if (outputFormat.equals("txt:Text")) {
|
if ("txt:Text".equals(outputFormat)) {
|
||||||
outputFormat = "txt";
|
outputFormat = "txt";
|
||||||
}
|
}
|
||||||
fileName = pdfBaseName + "." + outputFormat;
|
fileName = pdfBaseName + "." + outputFormat;
|
||||||
|
|
|
@ -2,8 +2,10 @@ package stirling.software.SPDF.utils;
|
||||||
|
|
||||||
import java.awt.Graphics;
|
import java.awt.Graphics;
|
||||||
import java.awt.image.BufferedImage;
|
import java.awt.image.BufferedImage;
|
||||||
|
import java.awt.image.RenderedImage;
|
||||||
import java.io.ByteArrayOutputStream;
|
import java.io.ByteArrayOutputStream;
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
|
import java.util.ArrayList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.zip.ZipEntry;
|
import java.util.zip.ZipEntry;
|
||||||
import java.util.zip.ZipOutputStream;
|
import java.util.zip.ZipOutputStream;
|
||||||
|
@ -16,11 +18,15 @@ import javax.imageio.ImageWriter;
|
||||||
import javax.imageio.stream.ImageOutputStream;
|
import javax.imageio.stream.ImageOutputStream;
|
||||||
|
|
||||||
import org.apache.pdfbox.Loader;
|
import org.apache.pdfbox.Loader;
|
||||||
|
import org.apache.pdfbox.cos.COSName;
|
||||||
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.PDPageContentStream.AppendMode;
|
import org.apache.pdfbox.pdmodel.PDPageContentStream.AppendMode;
|
||||||
|
import org.apache.pdfbox.pdmodel.PDResources;
|
||||||
import org.apache.pdfbox.pdmodel.common.PDRectangle;
|
import org.apache.pdfbox.pdmodel.common.PDRectangle;
|
||||||
|
import org.apache.pdfbox.pdmodel.graphics.PDXObject;
|
||||||
|
import org.apache.pdfbox.pdmodel.graphics.form.PDFormXObject;
|
||||||
import org.apache.pdfbox.pdmodel.graphics.image.JPEGFactory;
|
import org.apache.pdfbox.pdmodel.graphics.image.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;
|
||||||
|
@ -31,7 +37,7 @@ import org.slf4j.Logger;
|
||||||
import org.slf4j.LoggerFactory;
|
import org.slf4j.LoggerFactory;
|
||||||
import org.springframework.web.multipart.MultipartFile;
|
import org.springframework.web.multipart.MultipartFile;
|
||||||
|
|
||||||
import stirling.software.SPDF.pdf.ImageFinder;
|
import io.github.pixee.security.Filenames;
|
||||||
|
|
||||||
public class PdfUtils {
|
public class PdfUtils {
|
||||||
|
|
||||||
|
@ -62,6 +68,23 @@ public class PdfUtils {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static List<RenderedImage> getAllImages(PDResources resources) throws IOException {
|
||||||
|
List<RenderedImage> images = new ArrayList<>();
|
||||||
|
|
||||||
|
for (COSName name : resources.getXObjectNames()) {
|
||||||
|
PDXObject object = resources.getXObject(name);
|
||||||
|
|
||||||
|
if (object instanceof PDImageXObject) {
|
||||||
|
images.add(((PDImageXObject) object).getImage());
|
||||||
|
|
||||||
|
} else if (object instanceof PDFormXObject) {
|
||||||
|
images.addAll(getAllImages(((PDFormXObject) object).getResources()));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return images;
|
||||||
|
}
|
||||||
|
|
||||||
public static boolean hasImages(PDDocument document, String pagesToCheck) throws IOException {
|
public static boolean hasImages(PDDocument document, String pagesToCheck) throws IOException {
|
||||||
String[] pageOrderArr = pagesToCheck.split(",");
|
String[] pageOrderArr = pagesToCheck.split(",");
|
||||||
List<Integer> pageList =
|
List<Integer> pageList =
|
||||||
|
@ -94,9 +117,7 @@ public class PdfUtils {
|
||||||
}
|
}
|
||||||
|
|
||||||
public static boolean hasImagesOnPage(PDPage page) throws IOException {
|
public static boolean hasImagesOnPage(PDPage page) throws IOException {
|
||||||
ImageFinder imageFinder = new ImageFinder(page);
|
return getAllImages(page.getResources()).size() > 0;
|
||||||
imageFinder.processPage(page);
|
|
||||||
return imageFinder.hasImages();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public static boolean hasTextOnPage(PDPage page, String phrase) throws IOException {
|
public static boolean hasTextOnPage(PDPage page, String phrase) throws IOException {
|
||||||
|
@ -113,7 +134,7 @@ public class PdfUtils {
|
||||||
PDFTextStripper textStripper = new PDFTextStripper();
|
PDFTextStripper textStripper = new PDFTextStripper();
|
||||||
String pdfText = "";
|
String pdfText = "";
|
||||||
|
|
||||||
if (pagesToCheck == null || pagesToCheck.equals("all")) {
|
if (pagesToCheck == null || "all".equals(pagesToCheck)) {
|
||||||
pdfText = textStripper.getText(pdfDocument);
|
pdfText = textStripper.getText(pdfDocument);
|
||||||
} else {
|
} else {
|
||||||
// remove whitespaces
|
// remove whitespaces
|
||||||
|
@ -199,8 +220,8 @@ public class PdfUtils {
|
||||||
ByteArrayOutputStream baos = new ByteArrayOutputStream();
|
ByteArrayOutputStream baos = new ByteArrayOutputStream();
|
||||||
|
|
||||||
if (singleImage) {
|
if (singleImage) {
|
||||||
if (imageType.toLowerCase().equals("tiff")
|
if ("tiff".equals(imageType.toLowerCase())
|
||||||
|| imageType.toLowerCase().equals("tif")) {
|
|| "tif".equals(imageType.toLowerCase())) {
|
||||||
// Write the images to the output stream as a TIFF with multiple frames
|
// Write the images to the output stream as a TIFF with multiple frames
|
||||||
ImageWriter writer = ImageIO.getImageWritersByFormatName("tiff").next();
|
ImageWriter writer = ImageIO.getImageWritersByFormatName("tiff").next();
|
||||||
ImageWriteParam param = writer.getDefaultWriteParam();
|
ImageWriteParam param = writer.getDefaultWriteParam();
|
||||||
|
@ -280,7 +301,7 @@ public class PdfUtils {
|
||||||
try (PDDocument doc = new PDDocument()) {
|
try (PDDocument doc = new PDDocument()) {
|
||||||
for (MultipartFile file : files) {
|
for (MultipartFile file : files) {
|
||||||
String contentType = file.getContentType();
|
String contentType = file.getContentType();
|
||||||
String originalFilename = file.getOriginalFilename();
|
String originalFilename = Filenames.toSimpleFileName(file.getOriginalFilename());
|
||||||
if (originalFilename != null
|
if (originalFilename != null
|
||||||
&& (originalFilename.toLowerCase().endsWith(".tiff")
|
&& (originalFilename.toLowerCase().endsWith(".tiff")
|
||||||
|| originalFilename.toLowerCase().endsWith(".tif"))) {
|
|| originalFilename.toLowerCase().endsWith(".tif"))) {
|
||||||
|
@ -301,7 +322,7 @@ public class PdfUtils {
|
||||||
ImageProcessingUtils.convertColorType(image, colorType);
|
ImageProcessingUtils.convertColorType(image, colorType);
|
||||||
// Use JPEGFactory if it's JPEG since JPEG is lossy
|
// Use JPEGFactory if it's JPEG since JPEG is lossy
|
||||||
PDImageXObject pdImage =
|
PDImageXObject pdImage =
|
||||||
(contentType != null && contentType.equals("image/jpeg"))
|
(contentType != null && "image/jpeg".equals(contentType))
|
||||||
? JPEGFactory.createFromImage(doc, convertedImage)
|
? JPEGFactory.createFromImage(doc, convertedImage)
|
||||||
: LosslessFactory.createFromImage(doc, convertedImage);
|
: LosslessFactory.createFromImage(doc, convertedImage);
|
||||||
addImageToDocument(doc, pdImage, fitOption, autoRotate);
|
addImageToDocument(doc, pdImage, fitOption, autoRotate);
|
||||||
|
|
|
@ -16,6 +16,8 @@ import java.util.concurrent.TimeUnit;
|
||||||
import org.slf4j.Logger;
|
import org.slf4j.Logger;
|
||||||
import org.slf4j.LoggerFactory;
|
import org.slf4j.LoggerFactory;
|
||||||
|
|
||||||
|
import io.github.pixee.security.BoundedLineReader;
|
||||||
|
|
||||||
public class ProcessExecutor {
|
public class ProcessExecutor {
|
||||||
|
|
||||||
private static final Logger logger = LoggerFactory.getLogger(ProcessExecutor.class);
|
private static final Logger logger = LoggerFactory.getLogger(ProcessExecutor.class);
|
||||||
|
@ -109,7 +111,10 @@ public class ProcessExecutor {
|
||||||
process.getErrorStream(),
|
process.getErrorStream(),
|
||||||
StandardCharsets.UTF_8))) {
|
StandardCharsets.UTF_8))) {
|
||||||
String line;
|
String line;
|
||||||
while ((line = errorReader.readLine()) != null) {
|
while ((line =
|
||||||
|
BoundedLineReader.readLine(
|
||||||
|
errorReader, 5_000_000))
|
||||||
|
!= null) {
|
||||||
errorLines.add(line);
|
errorLines.add(line);
|
||||||
if (liveUpdates) logger.info(line);
|
if (liveUpdates) logger.info(line);
|
||||||
}
|
}
|
||||||
|
@ -130,7 +135,10 @@ public class ProcessExecutor {
|
||||||
process.getInputStream(),
|
process.getInputStream(),
|
||||||
StandardCharsets.UTF_8))) {
|
StandardCharsets.UTF_8))) {
|
||||||
String line;
|
String line;
|
||||||
while ((line = outputReader.readLine()) != null) {
|
while ((line =
|
||||||
|
BoundedLineReader.readLine(
|
||||||
|
outputReader, 5_000_000))
|
||||||
|
!= null) {
|
||||||
outputLines.add(line);
|
outputLines.add(line);
|
||||||
if (liveUpdates) logger.info(line);
|
if (liveUpdates) logger.info(line);
|
||||||
}
|
}
|
||||||
|
|
|
@ -12,6 +12,8 @@ import org.springframework.http.MediaType;
|
||||||
import org.springframework.http.ResponseEntity;
|
import org.springframework.http.ResponseEntity;
|
||||||
import org.springframework.web.multipart.MultipartFile;
|
import org.springframework.web.multipart.MultipartFile;
|
||||||
|
|
||||||
|
import io.github.pixee.security.Filenames;
|
||||||
|
|
||||||
public class WebResponseUtils {
|
public class WebResponseUtils {
|
||||||
|
|
||||||
public static ResponseEntity<byte[]> boasToWebResponse(
|
public static ResponseEntity<byte[]> boasToWebResponse(
|
||||||
|
@ -26,7 +28,7 @@ public class WebResponseUtils {
|
||||||
|
|
||||||
public static ResponseEntity<byte[]> multiPartFileToWebResponse(MultipartFile file)
|
public static ResponseEntity<byte[]> multiPartFileToWebResponse(MultipartFile file)
|
||||||
throws IOException {
|
throws IOException {
|
||||||
String fileName = file.getOriginalFilename();
|
String fileName = Filenames.toSimpleFileName(file.getOriginalFilename());
|
||||||
MediaType mediaType = MediaType.parseMediaType(file.getContentType());
|
MediaType mediaType = MediaType.parseMediaType(file.getContentType());
|
||||||
|
|
||||||
byte[] bytes = file.getBytes();
|
byte[] bytes = file.getBytes();
|
||||||
|
|
|
@ -11,6 +11,7 @@ imgPrompt=اختر صورة
|
||||||
genericSubmit=إرسال
|
genericSubmit=إرسال
|
||||||
processTimeWarning=تحذير: يمكن أن تستغرق هذه العملية ما يصل إلى دقيقة حسب حجم الملف
|
processTimeWarning=تحذير: يمكن أن تستغرق هذه العملية ما يصل إلى دقيقة حسب حجم الملف
|
||||||
pageOrderPrompt=ترتيب الصفحات (أدخل قائمة بأرقام الصفحات مفصولة بفواصل):
|
pageOrderPrompt=ترتيب الصفحات (أدخل قائمة بأرقام الصفحات مفصولة بفواصل):
|
||||||
|
pageSelectionPrompt=Custom Page Selection (Enter a comma-separated list of page numbers 1,5,6 or Functions like 2n+1) :
|
||||||
goToPage=اذهب
|
goToPage=اذهب
|
||||||
true=\u0635\u062D\u064A\u062D
|
true=\u0635\u062D\u064A\u062D
|
||||||
false=\u062E\u0637\u0623
|
false=\u062E\u0637\u0623
|
||||||
|
@ -42,9 +43,10 @@ red=Red
|
||||||
green=Green
|
green=Green
|
||||||
blue=Blue
|
blue=Blue
|
||||||
custom=Custom...
|
custom=Custom...
|
||||||
WorkInProgess=Work in progress, May not work or be buggy, Please report any ploblems!
|
WorkInProgess=Work in progress, May not work or be buggy, Please report any problems!
|
||||||
poweredBy=Powered by
|
poweredBy=Powered by
|
||||||
|
yes=Yes
|
||||||
|
no=No
|
||||||
changedCredsMessage=Credentials changed!
|
changedCredsMessage=Credentials changed!
|
||||||
notAuthenticatedMessage=User not authenticated.
|
notAuthenticatedMessage=User not authenticated.
|
||||||
userNotFoundMessage=User not found.
|
userNotFoundMessage=User not found.
|
||||||
|
@ -68,6 +70,7 @@ pipelineOptions.header=Pipeline Configuration
|
||||||
pipelineOptions.pipelineNameLabel=Pipeline Name
|
pipelineOptions.pipelineNameLabel=Pipeline Name
|
||||||
pipelineOptions.saveSettings=Save Operation Settings
|
pipelineOptions.saveSettings=Save Operation Settings
|
||||||
pipelineOptions.pipelineNamePrompt=Enter pipeline name here
|
pipelineOptions.pipelineNamePrompt=Enter pipeline name here
|
||||||
|
pipelineOptions.selectOperation=Select Operation
|
||||||
pipelineOptions.addOperationButton=Add operation
|
pipelineOptions.addOperationButton=Add operation
|
||||||
pipelineOptions.pipelineHeader=Pipeline:
|
pipelineOptions.pipelineHeader=Pipeline:
|
||||||
pipelineOptions.saveButton=Download
|
pipelineOptions.saveButton=Download
|
||||||
|
@ -118,7 +121,7 @@ account.accountSettings=Account Settings
|
||||||
account.adminSettings=Admin Settings - View and Add Users
|
account.adminSettings=Admin Settings - View and Add Users
|
||||||
account.userControlSettings=User Control Settings
|
account.userControlSettings=User Control Settings
|
||||||
account.changeUsername=Change Username
|
account.changeUsername=Change Username
|
||||||
account.changeUsername=Change Username
|
account.newUsername=New Username
|
||||||
account.password=Confirmation Password
|
account.password=Confirmation Password
|
||||||
account.oldPassword=Old password
|
account.oldPassword=Old password
|
||||||
account.newPassword=New Password
|
account.newPassword=New Password
|
||||||
|
@ -364,7 +367,7 @@ showJS.tags=JS
|
||||||
|
|
||||||
home.autoRedact.title=Auto Redact
|
home.autoRedact.title=Auto Redact
|
||||||
home.autoRedact.desc=Auto Redacts(Blacks out) text in a PDF based on input text
|
home.autoRedact.desc=Auto Redacts(Blacks out) text in a PDF based on input text
|
||||||
showJS.tags=JS
|
autoRedact.tags=Redact,Hide,black out,black,marker,hidden
|
||||||
|
|
||||||
home.tableExtraxt.title=PDF to CSV
|
home.tableExtraxt.title=PDF to CSV
|
||||||
home.tableExtraxt.desc=Extracts Tables from a PDF converting it to CSV
|
home.tableExtraxt.desc=Extracts Tables from a PDF converting it to CSV
|
||||||
|
@ -384,6 +387,11 @@ home.split-by-sections.title=Split PDF by Sections
|
||||||
home.split-by-sections.desc=Divide each page of a PDF into smaller horizontal and vertical sections
|
home.split-by-sections.desc=Divide each page of a PDF into smaller horizontal and vertical sections
|
||||||
split-by-sections.tags=Section Split, Divide, Customize
|
split-by-sections.tags=Section Split, Divide, Customize
|
||||||
|
|
||||||
|
home.AddStampRequest.title=Add Stamp to PDF
|
||||||
|
home.AddStampRequest.desc=Add text or add image stamps at set locations
|
||||||
|
AddStampRequest.tags=Stamp, Add image, center image, Watermark, PDF, Embed, Customize
|
||||||
|
|
||||||
|
|
||||||
###########################
|
###########################
|
||||||
# #
|
# #
|
||||||
# WEB PAGES #
|
# WEB PAGES #
|
||||||
|
@ -459,6 +467,37 @@ HTMLToPDF.header=HTML To PDF
|
||||||
HTMLToPDF.help=Accepts HTML files and ZIPs containing html/css/images etc required
|
HTMLToPDF.help=Accepts HTML files and ZIPs containing html/css/images etc required
|
||||||
HTMLToPDF.submit=Convert
|
HTMLToPDF.submit=Convert
|
||||||
HTMLToPDF.credit=Uses WeasyPrint
|
HTMLToPDF.credit=Uses WeasyPrint
|
||||||
|
HTMLToPDF.zoom=Zoom level for displaying the website.
|
||||||
|
HTMLToPDF.pageWidth=Width of the page in centimeters. (Blank to default)
|
||||||
|
HTMLToPDF.pageHeight=Height of the page in centimeters. (Blank to default)
|
||||||
|
HTMLToPDF.marginTop=Top margin of the page in millimeters. (Blank to default)
|
||||||
|
HTMLToPDF.marginBottom=Bottom margin of the page in millimeters. (Blank to default)
|
||||||
|
HTMLToPDF.marginLeft=Left margin of the page in millimeters. (Blank to default)
|
||||||
|
HTMLToPDF.marginRight=Right margin of the page in millimeters. (Blank to default)
|
||||||
|
HTMLToPDF.printBackground=Render the background of websites.
|
||||||
|
HTMLToPDF.defaultHeader=Enable Default Header (Name and page number)
|
||||||
|
HTMLToPDF.cssMediaType=Change the CSS media type of the page.
|
||||||
|
HTMLToPDF.none=None
|
||||||
|
HTMLToPDF.print=Print
|
||||||
|
HTMLToPDF.screen=Screen
|
||||||
|
|
||||||
|
|
||||||
|
#AddStampRequest
|
||||||
|
AddStampRequest.header=Stamp PDF
|
||||||
|
AddStampRequest.title=Stamp PDF
|
||||||
|
AddStampRequest.stampType=Stamp Type
|
||||||
|
AddStampRequest.stampText=Stamp Text
|
||||||
|
AddStampRequest.stampImage=Stamp Image
|
||||||
|
AddStampRequest.alphabet=Alphabet
|
||||||
|
AddStampRequest.fontSize=Font/Image Size
|
||||||
|
AddStampRequest.rotation=Rotation
|
||||||
|
AddStampRequest.opacity=Opacity
|
||||||
|
AddStampRequest.position=Position
|
||||||
|
AddStampRequest.overrideX=Override X Coordinate
|
||||||
|
AddStampRequest.overrideY=Override Y Coordinate
|
||||||
|
AddStampRequest.customMargin=Custom Margin
|
||||||
|
AddStampRequest.customColor=Custom Text Color
|
||||||
|
AddStampRequest.submit=Submit
|
||||||
|
|
||||||
|
|
||||||
#sanitizePDF
|
#sanitizePDF
|
||||||
|
@ -829,7 +868,6 @@ changeMetadata.keywords=\u0627\u0644\u0643\u0644\u0645\u0627\u062A \u0627\u0644\
|
||||||
changeMetadata.modDate=\u062A\u0627\u0631\u064A\u062E \u0627\u0644\u062A\u0639\u062F\u064A\u0644 (yyyy / MM / dd HH: mm: ss):
|
changeMetadata.modDate=\u062A\u0627\u0631\u064A\u062E \u0627\u0644\u062A\u0639\u062F\u064A\u0644 (yyyy / MM / dd HH: mm: ss):
|
||||||
changeMetadata.producer=\u0627\u0644\u0645\u0646\u062A\u062C:
|
changeMetadata.producer=\u0627\u0644\u0645\u0646\u062A\u062C:
|
||||||
changeMetadata.subject=\u0627\u0644\u0645\u0648\u0636\u0648\u0639:
|
changeMetadata.subject=\u0627\u0644\u0645\u0648\u0636\u0648\u0639:
|
||||||
changeMetadata.title=\u0627\u0644\u0639\u0646\u0648\u0627\u0646:
|
|
||||||
changeMetadata.trapped=\u0645\u062D\u0627\u0635\u0631:
|
changeMetadata.trapped=\u0645\u062D\u0627\u0635\u0631:
|
||||||
changeMetadata.selectText.4=\u0628\u064A\u0627\u0646\u0627\u062A \u0648\u0635\u0641\u064A\u0629 \u0623\u062E\u0631\u0649:
|
changeMetadata.selectText.4=\u0628\u064A\u0627\u0646\u0627\u062A \u0648\u0635\u0641\u064A\u0629 \u0623\u062E\u0631\u0649:
|
||||||
changeMetadata.selectText.5=\u0625\u0636\u0627\u0641\u0629 \u0625\u062F\u062E\u0627\u0644 \u0628\u064A\u0627\u0646\u0627\u062A \u0623\u0648\u0644\u064A\u0629 \u0645\u062E\u0635\u0635
|
changeMetadata.selectText.5=\u0625\u0636\u0627\u0641\u0629 \u0625\u062F\u062E\u0627\u0644 \u0628\u064A\u0627\u0646\u0627\u062A \u0623\u0648\u0644\u064A\u0629 \u0645\u062E\u0635\u0635
|
||||||
|
|
|
@ -11,6 +11,7 @@ imgPrompt=Изберете изображение(я)
|
||||||
genericSubmit=Подайте
|
genericSubmit=Подайте
|
||||||
processTimeWarning=Предупреждение: Този процес може да отнеме до минута в зависимост от размера на файла
|
processTimeWarning=Предупреждение: Този процес може да отнеме до минута в зависимост от размера на файла
|
||||||
pageOrderPrompt=Персонализиран ред на страниците (Въведете разделен със запетаи списък с номера на страници или функции като 2n+1):
|
pageOrderPrompt=Персонализиран ред на страниците (Въведете разделен със запетаи списък с номера на страници или функции като 2n+1):
|
||||||
|
pageSelectionPrompt=Custom Page Selection (Enter a comma-separated list of page numbers 1,5,6 or Functions like 2n+1) :
|
||||||
goToPage=Давай
|
goToPage=Давай
|
||||||
true=Вярно
|
true=Вярно
|
||||||
false=Невярно
|
false=Невярно
|
||||||
|
@ -42,9 +43,10 @@ red=Червено
|
||||||
green=Зелено
|
green=Зелено
|
||||||
blue=Синьо
|
blue=Синьо
|
||||||
custom=Персонализиране...
|
custom=Персонализиране...
|
||||||
WorkInProgess=Work in progress, May not work or be buggy, Please report any ploblems!
|
WorkInProgess=Work in progress, May not work or be buggy, Please report any problems!
|
||||||
poweredBy=Powered by
|
poweredBy=Powered by
|
||||||
|
yes=Yes
|
||||||
|
no=No
|
||||||
changedCredsMessage=Идентификационните данни са променени!
|
changedCredsMessage=Идентификационните данни са променени!
|
||||||
notAuthenticatedMessage=Потребителят не е автентикиран.
|
notAuthenticatedMessage=Потребителят не е автентикиран.
|
||||||
userNotFoundMessage=Потребителят не е намерен
|
userNotFoundMessage=Потребителят не е намерен
|
||||||
|
@ -68,6 +70,7 @@ pipelineOptions.header=Pipeline Configuration
|
||||||
pipelineOptions.pipelineNameLabel=Pipeline Name
|
pipelineOptions.pipelineNameLabel=Pipeline Name
|
||||||
pipelineOptions.saveSettings=Save Operation Settings
|
pipelineOptions.saveSettings=Save Operation Settings
|
||||||
pipelineOptions.pipelineNamePrompt=Enter pipeline name here
|
pipelineOptions.pipelineNamePrompt=Enter pipeline name here
|
||||||
|
pipelineOptions.selectOperation=Select Operation
|
||||||
pipelineOptions.addOperationButton=Add operation
|
pipelineOptions.addOperationButton=Add operation
|
||||||
pipelineOptions.pipelineHeader=Pipeline:
|
pipelineOptions.pipelineHeader=Pipeline:
|
||||||
pipelineOptions.saveButton=Download
|
pipelineOptions.saveButton=Download
|
||||||
|
@ -118,7 +121,7 @@ account.accountSettings=Настройки на акаунта
|
||||||
account.adminSettings=Настройки на администратора - Преглед и добавяне на потребители
|
account.adminSettings=Настройки на администратора - Преглед и добавяне на потребители
|
||||||
account.userControlSettings=Настройки за потребителски контрол
|
account.userControlSettings=Настройки за потребителски контрол
|
||||||
account.changeUsername=Промени потребител
|
account.changeUsername=Промени потребител
|
||||||
account.changeUsername=Промени потребител
|
account.newUsername=Ново потребителско име
|
||||||
account.password=Парола за потвърждение
|
account.password=Парола за потвърждение
|
||||||
account.oldPassword=Стара парола
|
account.oldPassword=Стара парола
|
||||||
account.newPassword=Нова парола
|
account.newPassword=Нова парола
|
||||||
|
@ -360,11 +363,11 @@ PdfToSinglePage.tags=единична страница
|
||||||
|
|
||||||
home.showJS.title=Показване на Javascript
|
home.showJS.title=Показване на Javascript
|
||||||
home.showJS.desc=Търси и показва всеки JS, инжектиран в PDF
|
home.showJS.desc=Търси и показва всеки JS, инжектиран в PDF
|
||||||
showJS.tags=Редактиране,Скриване,затъмняване,черен,маркер,скрит
|
showJS.tags=JS
|
||||||
|
|
||||||
home.autoRedact.title=Автоматично редактиране
|
home.autoRedact.title=Автоматично редактиране
|
||||||
home.autoRedact.desc=Автоматично редактира (зачернява) текст в PDF въз основа на въведен текст
|
home.autoRedact.desc=Автоматично редактира (зачернява) текст в PDF въз основа на въведен текст
|
||||||
showJS.tags=Редактиране,Скриване,затъмняване,черен,маркер,скрит
|
autoRedact.tags=Редактиране,Скриване,затъмняване,черен,маркер,скрит
|
||||||
|
|
||||||
home.tableExtraxt.title=PDF to CSV
|
home.tableExtraxt.title=PDF to CSV
|
||||||
home.tableExtraxt.desc=Extracts Tables from a PDF converting it to CSV
|
home.tableExtraxt.desc=Extracts Tables from a PDF converting it to CSV
|
||||||
|
@ -384,6 +387,11 @@ home.split-by-sections.title=Split PDF by Sections
|
||||||
home.split-by-sections.desc=Divide each page of a PDF into smaller horizontal and vertical sections
|
home.split-by-sections.desc=Divide each page of a PDF into smaller horizontal and vertical sections
|
||||||
split-by-sections.tags=Section Split, Divide, Customize
|
split-by-sections.tags=Section Split, Divide, Customize
|
||||||
|
|
||||||
|
home.AddStampRequest.title=Add Stamp to PDF
|
||||||
|
home.AddStampRequest.desc=Add text or add image stamps at set locations
|
||||||
|
AddStampRequest.tags=Stamp, Add image, center image, Watermark, PDF, Embed, Customize
|
||||||
|
|
||||||
|
|
||||||
###########################
|
###########################
|
||||||
# #
|
# #
|
||||||
# WEB PAGES #
|
# WEB PAGES #
|
||||||
|
@ -459,6 +467,37 @@ HTMLToPDF.header=HTML към PDF
|
||||||
HTMLToPDF.help=Приема HTML файлове и ZIP файлове, съдържащи html/css/изображения и т.н
|
HTMLToPDF.help=Приема HTML файлове и ZIP файлове, съдържащи html/css/изображения и т.н
|
||||||
HTMLToPDF.submit=Преобразуване
|
HTMLToPDF.submit=Преобразуване
|
||||||
HTMLToPDF.credit=Използва WeasyPrint
|
HTMLToPDF.credit=Използва WeasyPrint
|
||||||
|
HTMLToPDF.zoom=Zoom level for displaying the website.
|
||||||
|
HTMLToPDF.pageWidth=Width of the page in centimeters. (Blank to default)
|
||||||
|
HTMLToPDF.pageHeight=Height of the page in centimeters. (Blank to default)
|
||||||
|
HTMLToPDF.marginTop=Top margin of the page in millimeters. (Blank to default)
|
||||||
|
HTMLToPDF.marginBottom=Bottom margin of the page in millimeters. (Blank to default)
|
||||||
|
HTMLToPDF.marginLeft=Left margin of the page in millimeters. (Blank to default)
|
||||||
|
HTMLToPDF.marginRight=Right margin of the page in millimeters. (Blank to default)
|
||||||
|
HTMLToPDF.printBackground=Render the background of websites.
|
||||||
|
HTMLToPDF.defaultHeader=Enable Default Header (Name and page number)
|
||||||
|
HTMLToPDF.cssMediaType=Change the CSS media type of the page.
|
||||||
|
HTMLToPDF.none=None
|
||||||
|
HTMLToPDF.print=Print
|
||||||
|
HTMLToPDF.screen=Screen
|
||||||
|
|
||||||
|
|
||||||
|
#AddStampRequest
|
||||||
|
AddStampRequest.header=Stamp PDF
|
||||||
|
AddStampRequest.title=Stamp PDF
|
||||||
|
AddStampRequest.stampType=Stamp Type
|
||||||
|
AddStampRequest.stampText=Stamp Text
|
||||||
|
AddStampRequest.stampImage=Stamp Image
|
||||||
|
AddStampRequest.alphabet=Alphabet
|
||||||
|
AddStampRequest.fontSize=Font/Image Size
|
||||||
|
AddStampRequest.rotation=Rotation
|
||||||
|
AddStampRequest.opacity=Opacity
|
||||||
|
AddStampRequest.position=Position
|
||||||
|
AddStampRequest.overrideX=Override X Coordinate
|
||||||
|
AddStampRequest.overrideY=Override Y Coordinate
|
||||||
|
AddStampRequest.customMargin=Custom Margin
|
||||||
|
AddStampRequest.customColor=Custom Text Color
|
||||||
|
AddStampRequest.submit=Submit
|
||||||
|
|
||||||
|
|
||||||
#sanitizePDF
|
#sanitizePDF
|
||||||
|
@ -829,7 +868,6 @@ changeMetadata.keywords=Ключови думи:
|
||||||
changeMetadata.modDate=Дата на промяна (гггг/ММ/дд ЧЧ:мм:сс):
|
changeMetadata.modDate=Дата на промяна (гггг/ММ/дд ЧЧ:мм:сс):
|
||||||
changeMetadata.producer=Продуцент:
|
changeMetadata.producer=Продуцент:
|
||||||
changeMetadata.subject=Тема:
|
changeMetadata.subject=Тема:
|
||||||
changeMetadata.title=Заглавие:
|
|
||||||
changeMetadata.trapped=В капан:
|
changeMetadata.trapped=В капан:
|
||||||
changeMetadata.selectText.4=Други метаданни:
|
changeMetadata.selectText.4=Други метаданни:
|
||||||
changeMetadata.selectText.5=Добавяне на персонализиране метаданни
|
changeMetadata.selectText.5=Добавяне на персонализиране метаданни
|
||||||
|
|
|
@ -11,6 +11,7 @@ imgPrompt=Selecciona Imatge(s)
|
||||||
genericSubmit=Envia
|
genericSubmit=Envia
|
||||||
processTimeWarning=Alerta: Aquest procés pot tardar 1 minut depenent de la mida de l'arxiu
|
processTimeWarning=Alerta: Aquest procés pot tardar 1 minut depenent de la mida de l'arxiu
|
||||||
pageOrderPrompt=Ordre de Pàgines (Llista separada per comes) :
|
pageOrderPrompt=Ordre de Pàgines (Llista separada per comes) :
|
||||||
|
pageSelectionPrompt=Custom Page Selection (Enter a comma-separated list of page numbers 1,5,6 or Functions like 2n+1) :
|
||||||
goToPage=Anar
|
goToPage=Anar
|
||||||
true=Verdader
|
true=Verdader
|
||||||
false=Fals
|
false=Fals
|
||||||
|
@ -42,9 +43,10 @@ red=Vermell
|
||||||
green=Verd
|
green=Verd
|
||||||
blue=Blau
|
blue=Blau
|
||||||
custom=Personalitzat...
|
custom=Personalitzat...
|
||||||
WorkInProgess=Work in progress, May not work or be buggy, Please report any ploblems!
|
WorkInProgess=Work in progress, May not work or be buggy, Please report any problems!
|
||||||
poweredBy=Powered by
|
poweredBy=Powered by
|
||||||
|
yes=Yes
|
||||||
|
no=No
|
||||||
changedCredsMessage=Credentials changed!
|
changedCredsMessage=Credentials changed!
|
||||||
notAuthenticatedMessage=User not authenticated.
|
notAuthenticatedMessage=User not authenticated.
|
||||||
userNotFoundMessage=User not found.
|
userNotFoundMessage=User not found.
|
||||||
|
@ -68,6 +70,7 @@ pipelineOptions.header=Pipeline Configuration
|
||||||
pipelineOptions.pipelineNameLabel=Pipeline Name
|
pipelineOptions.pipelineNameLabel=Pipeline Name
|
||||||
pipelineOptions.saveSettings=Save Operation Settings
|
pipelineOptions.saveSettings=Save Operation Settings
|
||||||
pipelineOptions.pipelineNamePrompt=Enter pipeline name here
|
pipelineOptions.pipelineNamePrompt=Enter pipeline name here
|
||||||
|
pipelineOptions.selectOperation=Select Operation
|
||||||
pipelineOptions.addOperationButton=Add operation
|
pipelineOptions.addOperationButton=Add operation
|
||||||
pipelineOptions.pipelineHeader=Pipeline:
|
pipelineOptions.pipelineHeader=Pipeline:
|
||||||
pipelineOptions.saveButton=Download
|
pipelineOptions.saveButton=Download
|
||||||
|
@ -118,7 +121,7 @@ account.accountSettings=Opcions del compte
|
||||||
account.adminSettings=Opcions d'Admin - Veure i afegir usuaris
|
account.adminSettings=Opcions d'Admin - Veure i afegir usuaris
|
||||||
account.userControlSettings=Opcions de Control d'Usuari
|
account.userControlSettings=Opcions de Control d'Usuari
|
||||||
account.changeUsername=Canvia nom usuari
|
account.changeUsername=Canvia nom usuari
|
||||||
account.changeUsername=Canvia nom usuari
|
account.newUsername=Nom d'usuari nou
|
||||||
account.password=Confirma contrasenya
|
account.password=Confirma contrasenya
|
||||||
account.oldPassword=Password Antic
|
account.oldPassword=Password Antic
|
||||||
account.newPassword=Password Nou
|
account.newPassword=Password Nou
|
||||||
|
@ -364,7 +367,7 @@ showJS.tags=JS
|
||||||
|
|
||||||
home.autoRedact.title=Auto Redact
|
home.autoRedact.title=Auto Redact
|
||||||
home.autoRedact.desc=Auto Redacts(Blacks out) text in a PDF based on input text
|
home.autoRedact.desc=Auto Redacts(Blacks out) text in a PDF based on input text
|
||||||
showJS.tags=JS
|
autoRedact.tags=Redact,Hide,black out,black,marker,hidden
|
||||||
|
|
||||||
home.tableExtraxt.title=PDF to CSV
|
home.tableExtraxt.title=PDF to CSV
|
||||||
home.tableExtraxt.desc=Extracts Tables from a PDF converting it to CSV
|
home.tableExtraxt.desc=Extracts Tables from a PDF converting it to CSV
|
||||||
|
@ -384,6 +387,11 @@ home.split-by-sections.title=Split PDF by Sections
|
||||||
home.split-by-sections.desc=Divide each page of a PDF into smaller horizontal and vertical sections
|
home.split-by-sections.desc=Divide each page of a PDF into smaller horizontal and vertical sections
|
||||||
split-by-sections.tags=Section Split, Divide, Customize
|
split-by-sections.tags=Section Split, Divide, Customize
|
||||||
|
|
||||||
|
home.AddStampRequest.title=Add Stamp to PDF
|
||||||
|
home.AddStampRequest.desc=Add text or add image stamps at set locations
|
||||||
|
AddStampRequest.tags=Stamp, Add image, center image, Watermark, PDF, Embed, Customize
|
||||||
|
|
||||||
|
|
||||||
###########################
|
###########################
|
||||||
# #
|
# #
|
||||||
# WEB PAGES #
|
# WEB PAGES #
|
||||||
|
@ -459,6 +467,37 @@ HTMLToPDF.header=HTML To PDF
|
||||||
HTMLToPDF.help=Accepts HTML files and ZIPs containing html/css/images etc required
|
HTMLToPDF.help=Accepts HTML files and ZIPs containing html/css/images etc required
|
||||||
HTMLToPDF.submit=Convert
|
HTMLToPDF.submit=Convert
|
||||||
HTMLToPDF.credit=Uses WeasyPrint
|
HTMLToPDF.credit=Uses WeasyPrint
|
||||||
|
HTMLToPDF.zoom=Zoom level for displaying the website.
|
||||||
|
HTMLToPDF.pageWidth=Width of the page in centimeters. (Blank to default)
|
||||||
|
HTMLToPDF.pageHeight=Height of the page in centimeters. (Blank to default)
|
||||||
|
HTMLToPDF.marginTop=Top margin of the page in millimeters. (Blank to default)
|
||||||
|
HTMLToPDF.marginBottom=Bottom margin of the page in millimeters. (Blank to default)
|
||||||
|
HTMLToPDF.marginLeft=Left margin of the page in millimeters. (Blank to default)
|
||||||
|
HTMLToPDF.marginRight=Right margin of the page in millimeters. (Blank to default)
|
||||||
|
HTMLToPDF.printBackground=Render the background of websites.
|
||||||
|
HTMLToPDF.defaultHeader=Enable Default Header (Name and page number)
|
||||||
|
HTMLToPDF.cssMediaType=Change the CSS media type of the page.
|
||||||
|
HTMLToPDF.none=None
|
||||||
|
HTMLToPDF.print=Print
|
||||||
|
HTMLToPDF.screen=Screen
|
||||||
|
|
||||||
|
|
||||||
|
#AddStampRequest
|
||||||
|
AddStampRequest.header=Stamp PDF
|
||||||
|
AddStampRequest.title=Stamp PDF
|
||||||
|
AddStampRequest.stampType=Stamp Type
|
||||||
|
AddStampRequest.stampText=Stamp Text
|
||||||
|
AddStampRequest.stampImage=Stamp Image
|
||||||
|
AddStampRequest.alphabet=Alphabet
|
||||||
|
AddStampRequest.fontSize=Font/Image Size
|
||||||
|
AddStampRequest.rotation=Rotation
|
||||||
|
AddStampRequest.opacity=Opacity
|
||||||
|
AddStampRequest.position=Position
|
||||||
|
AddStampRequest.overrideX=Override X Coordinate
|
||||||
|
AddStampRequest.overrideY=Override Y Coordinate
|
||||||
|
AddStampRequest.customMargin=Custom Margin
|
||||||
|
AddStampRequest.customColor=Custom Text Color
|
||||||
|
AddStampRequest.submit=Submit
|
||||||
|
|
||||||
|
|
||||||
#sanitizePDF
|
#sanitizePDF
|
||||||
|
@ -829,7 +868,6 @@ changeMetadata.keywords=Keywords:
|
||||||
changeMetadata.modDate=Data Modificació (yyyy/MM/dd HH:mm:ss):
|
changeMetadata.modDate=Data Modificació (yyyy/MM/dd HH:mm:ss):
|
||||||
changeMetadata.producer=Productor:
|
changeMetadata.producer=Productor:
|
||||||
changeMetadata.subject=Assumpte:
|
changeMetadata.subject=Assumpte:
|
||||||
changeMetadata.title=Títol:
|
|
||||||
changeMetadata.trapped=Atrapat:
|
changeMetadata.trapped=Atrapat:
|
||||||
changeMetadata.selectText.4=Altres Metadades:
|
changeMetadata.selectText.4=Altres Metadades:
|
||||||
changeMetadata.selectText.5=Afegir entrada personalizada
|
changeMetadata.selectText.5=Afegir entrada personalizada
|
||||||
|
|
|
@ -11,6 +11,7 @@ imgPrompt=Wählen Sie ein Bild
|
||||||
genericSubmit=Einreichen
|
genericSubmit=Einreichen
|
||||||
processTimeWarning=Achtung: Abhängig von der Dateigröße kann dieser Prozess bis zu einer Minute dauern
|
processTimeWarning=Achtung: Abhängig von der Dateigröße kann dieser Prozess bis zu einer Minute dauern
|
||||||
pageOrderPrompt=Seitenreihenfolge (Geben Sie eine durch Komma getrennte Liste von Seitenzahlen ein):
|
pageOrderPrompt=Seitenreihenfolge (Geben Sie eine durch Komma getrennte Liste von Seitenzahlen ein):
|
||||||
|
pageSelectionPrompt=Benutzerdefinierte Seitenauswahl (Geben Sie eine durch Kommas getrennte Liste von Seitenzahlen 1,5,6 oder Funktionen wie 2n+1 ein):
|
||||||
goToPage=Los
|
goToPage=Los
|
||||||
true=Wahr
|
true=Wahr
|
||||||
false=Falsch
|
false=Falsch
|
||||||
|
@ -42,9 +43,10 @@ red=Rot
|
||||||
green=Grün
|
green=Grün
|
||||||
blue=Blau
|
blue=Blau
|
||||||
custom=benutzerdefiniert...
|
custom=benutzerdefiniert...
|
||||||
WorkInProgess=Work in progress, May not work or be buggy, Please report any ploblems!
|
WorkInProgess=In Arbeit, funktioniert möglicherweise nicht oder ist fehlerhaft. Bitte melden Sie alle Probleme!
|
||||||
poweredBy=Powered by
|
poweredBy=Powered by
|
||||||
|
yes=Ja
|
||||||
|
no=Nein
|
||||||
changedCredsMessage=Anmeldedaten geändert!
|
changedCredsMessage=Anmeldedaten geändert!
|
||||||
notAuthenticatedMessage=Benutzer nicht authentifiziert.
|
notAuthenticatedMessage=Benutzer nicht authentifiziert.
|
||||||
userNotFoundMessage=Benutzer nicht gefunden.
|
userNotFoundMessage=Benutzer nicht gefunden.
|
||||||
|
@ -55,23 +57,24 @@ usernameExistsMessage=Neuer Benutzername existiert bereits.
|
||||||
###############
|
###############
|
||||||
# Pipeline #
|
# Pipeline #
|
||||||
###############
|
###############
|
||||||
pipeline.header=Pipeline Menu (Alpha)
|
pipeline.header=Pipeline-Menü (Alpha)
|
||||||
pipeline.uploadButton=Upload Custom
|
pipeline.uploadButton=Benutzerdefinierter Upload
|
||||||
pipeline.configureButton=Configure
|
pipeline.configureButton=Konfigurieren
|
||||||
pipeline.defaultOption=Custom
|
pipeline.defaultOption=Benutzerdefiniert
|
||||||
pipeline.submitButton=Submit
|
pipeline.submitButton=Speichern
|
||||||
|
|
||||||
######################
|
######################
|
||||||
# Pipeline Options #
|
# Pipeline Options #
|
||||||
######################
|
######################
|
||||||
pipelineOptions.header=Pipeline Configuration
|
pipelineOptions.header=Pipeline-Konfiguration
|
||||||
pipelineOptions.pipelineNameLabel=Pipeline Name
|
pipelineOptions.pipelineNameLabel=Pipeline-Name
|
||||||
pipelineOptions.saveSettings=Save Operation Settings
|
pipelineOptions.saveSettings=Save Operation Settings
|
||||||
pipelineOptions.pipelineNamePrompt=Enter pipeline name here
|
pipelineOptions.pipelineNamePrompt=Geben Sie hier den Namen der Pipeline ein
|
||||||
pipelineOptions.addOperationButton=Add operation
|
pipelineOptions.selectOperation=Vorgang auswählen
|
||||||
|
pipelineOptions.addOperationButton=Vorgang hinzufügen
|
||||||
pipelineOptions.pipelineHeader=Pipeline:
|
pipelineOptions.pipelineHeader=Pipeline:
|
||||||
pipelineOptions.saveButton=Download
|
pipelineOptions.saveButton=Downloaden
|
||||||
pipelineOptions.validateButton=Validate
|
pipelineOptions.validateButton=Validieren
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@ -118,11 +121,11 @@ account.accountSettings=Kontoeinstellungen
|
||||||
account.adminSettings=Admin Einstellungen - Benutzer anzeigen und hinzufügen
|
account.adminSettings=Admin Einstellungen - Benutzer anzeigen und hinzufügen
|
||||||
account.userControlSettings=Benutzerkontrolle
|
account.userControlSettings=Benutzerkontrolle
|
||||||
account.changeUsername=Benutzername ändern
|
account.changeUsername=Benutzername ändern
|
||||||
account.changeUsername=Benutzername ändern
|
account.newUsername=Neuer Benutzername
|
||||||
account.password=Bestätigungspasswort
|
account.password=Bestätigungspasswort
|
||||||
account.oldPassword=Altes Passwort
|
account.oldPassword=Altes Passwort
|
||||||
account.newPassword=Neues Passwort
|
account.newPassword=Neues Passwort
|
||||||
account.changePassword=Password ändern
|
account.changePassword=Passwort ändern
|
||||||
account.confirmNewPassword=Neues Passwort bestätigen
|
account.confirmNewPassword=Neues Passwort bestätigen
|
||||||
account.signOut=Abmelden
|
account.signOut=Abmelden
|
||||||
account.yourApiKey=Dein API Schlüssel
|
account.yourApiKey=Dein API Schlüssel
|
||||||
|
@ -144,7 +147,7 @@ adminUserSettings.role=Rolle
|
||||||
adminUserSettings.actions=Aktion
|
adminUserSettings.actions=Aktion
|
||||||
adminUserSettings.apiUser=Eingeschränkter API-Benutzer
|
adminUserSettings.apiUser=Eingeschränkter API-Benutzer
|
||||||
adminUserSettings.webOnlyUser=Nur Web-Benutzer
|
adminUserSettings.webOnlyUser=Nur Web-Benutzer
|
||||||
adminUserSettings.demoUser=Demo User (No custom settings)
|
adminUserSettings.demoUser=Demo-Benutzer (Keine benutzerdefinierten Einstellungen)
|
||||||
adminUserSettings.forceChange=Benutzer dazu zwingen, Benutzernamen/Passwort bei der Anmeldung zu ändern
|
adminUserSettings.forceChange=Benutzer dazu zwingen, Benutzernamen/Passwort bei der Anmeldung zu ändern
|
||||||
adminUserSettings.submit=Benutzer speichern
|
adminUserSettings.submit=Benutzer speichern
|
||||||
|
|
||||||
|
@ -281,8 +284,8 @@ home.removeBlanks.title=Leere Seiten entfernen
|
||||||
home.removeBlanks.desc=Erkennt und entfernt leere Seiten aus einem Dokument
|
home.removeBlanks.desc=Erkennt und entfernt leere Seiten aus einem Dokument
|
||||||
removeBlanks.tags=cleanup,streamline,non-content,organize
|
removeBlanks.tags=cleanup,streamline,non-content,organize
|
||||||
|
|
||||||
home.removeAnnotations.title=Remove Annotations
|
home.removeAnnotations.title=Anmerkungen entfernen
|
||||||
home.removeAnnotations.desc=Removes all comments/annotations from a PDF
|
home.removeAnnotations.desc=Entfernt alle Kommentare/Anmerkungen aus einem PDF
|
||||||
removeAnnotations.tags=comments,highlight,notes,markup,remove
|
removeAnnotations.tags=comments,highlight,notes,markup,remove
|
||||||
|
|
||||||
home.compare.title=Vergleichen
|
home.compare.title=Vergleichen
|
||||||
|
@ -302,7 +305,7 @@ home.scalePages.desc=Größe/Skalierung der Seite und/oder des Inhalts ändern
|
||||||
scalePages.tags=resize,modify,dimension,adapt
|
scalePages.tags=resize,modify,dimension,adapt
|
||||||
|
|
||||||
home.pipeline.title=Pipeline (Fortgeschritten)
|
home.pipeline.title=Pipeline (Fortgeschritten)
|
||||||
home.pipeline.desc=Mehrere Aktionen auf ein PDF anwenden, definiert durch einen Pipeline Skript
|
home.pipeline.desc=Mehrere Aktionen auf ein PDF anwenden, definiert durch ein Pipeline Skript
|
||||||
pipeline.tags=automate,sequence,scripted,batch-process
|
pipeline.tags=automate,sequence,scripted,batch-process
|
||||||
|
|
||||||
home.add-page-numbers.title=Seitenzahlen hinzufügen
|
home.add-page-numbers.title=Seitenzahlen hinzufügen
|
||||||
|
@ -340,22 +343,22 @@ HTMLToPDF.tags=markup,web-content,transformation,convert
|
||||||
|
|
||||||
home.MarkdownToPDF.title=Markdown zu PDF
|
home.MarkdownToPDF.title=Markdown zu PDF
|
||||||
home.MarkdownToPDF.desc=Konvertiert jede Markdown-Datei zu PDF
|
home.MarkdownToPDF.desc=Konvertiert jede Markdown-Datei zu PDF
|
||||||
MarkdownToPDF.tags=markup,web-content,transformation,convert
|
MarkdownToPDF.tags=markup,web-content,transformation,konvertieren
|
||||||
|
|
||||||
|
|
||||||
home.getPdfInfo.title=Alle Informationen anzeigen
|
home.getPdfInfo.title=Alle Informationen anzeigen
|
||||||
home.getPdfInfo.desc=Erfasst alle möglichen Informationen in einer PDF
|
home.getPdfInfo.desc=Erfasst alle möglichen Informationen in einer PDF
|
||||||
getPdfInfo.tags=infomation,data,stats,statistics
|
getPdfInfo.tags=infomation,daten,statistik
|
||||||
|
|
||||||
|
|
||||||
home.extractPage.title=Seite(n) extrahieren
|
home.extractPage.title=Seite(n) extrahieren
|
||||||
home.extractPage.desc=Extrahiert ausgewählte Seiten aus einer PDF
|
home.extractPage.desc=Extrahiert ausgewählte Seiten aus einer PDF
|
||||||
extractPage.tags=extract
|
extractPage.tags=extrahieren
|
||||||
|
|
||||||
|
|
||||||
home.PdfToSinglePage.title=PDF zu einer Seite zusammenfassen
|
home.PdfToSinglePage.title=PDF zu einer Seite zusammenfassen
|
||||||
home.PdfToSinglePage.desc=Fügt alle PDF-Seiten zu einer einzigen großen Seite zusammen
|
home.PdfToSinglePage.desc=Fügt alle PDF-Seiten zu einer einzigen großen Seite zusammen
|
||||||
PdfToSinglePage.tags=single page
|
PdfToSinglePage.tags=einzelseite
|
||||||
|
|
||||||
|
|
||||||
home.showJS.title=Javascript anzeigen
|
home.showJS.title=Javascript anzeigen
|
||||||
|
@ -363,26 +366,31 @@ home.showJS.desc=Alle Javascript Funktionen in einer PDF anzeigen
|
||||||
showJS.tags=JS
|
showJS.tags=JS
|
||||||
|
|
||||||
home.autoRedact.title=Automatisch zensieren/schwärzen
|
home.autoRedact.title=Automatisch zensieren/schwärzen
|
||||||
home.autoRedact.desc=Automatisches zensierten (Schwärzen) von Text in einer PDF-Datei basierend auf dem eingegebenen Text
|
home.autoRedact.desc=Automatisches Zensieren (Schwärzen) von Text in einer PDF-Datei basierend auf dem eingegebenen Text
|
||||||
showJS.tags=JS
|
autoRedact.tags=zensieren,schwärzen
|
||||||
|
|
||||||
home.tableExtraxt.title=Tabelle extrahieren
|
home.tableExtraxt.title=Tabelle extrahieren
|
||||||
home.tableExtraxt.desc=Tabelle aus PDF in CSV extrahieren
|
home.tableExtraxt.desc=Tabelle aus PDF in CSV extrahieren
|
||||||
tableExtraxt.tags=CSV
|
tableExtraxt.tags=CSV
|
||||||
|
|
||||||
|
|
||||||
home.autoSizeSplitPDF.title=Auto Split by Size/Count
|
home.autoSizeSplitPDF.title=Teilen nach Größe/Anzahl
|
||||||
home.autoSizeSplitPDF.desc=Split a single PDF into multiple documents based on size, page count, or document count
|
home.autoSizeSplitPDF.desc=Teilen Sie ein einzelnes PDF basierend auf Größe, Seitenanzahl oder Dokumentanzahl in mehrere Dokumente auf
|
||||||
autoSizeSplitPDF.tags=pdf,split,document,organization
|
autoSizeSplitPDF.tags=pdf,teilen,dokument,organisation
|
||||||
|
|
||||||
|
|
||||||
home.overlay-pdfs.title=Overlay PDFs
|
home.overlay-pdfs.title=PDF mit Overlay versehen
|
||||||
home.overlay-pdfs.desc=Overlays PDFs on-top of another PDF
|
home.overlay-pdfs.desc=Überlagert eine PDF über eine andere PDF
|
||||||
overlay-pdfs.tags=Overlay
|
overlay-pdfs.tags=overlay,überlagern
|
||||||
|
|
||||||
|
home.split-by-sections.title=PDF in Abschnitte teilen
|
||||||
|
home.split-by-sections.desc=Teilen Sie jede Seite einer PDF-Datei in kleinere horizontale und vertikale Abschnitte auf
|
||||||
|
split-by-sections.tags=abschnitte,teilen,bearbeiten
|
||||||
|
|
||||||
|
home.AddStampRequest.title=Stempel zu PDF hinzufügen
|
||||||
|
home.AddStampRequest.desc=Fügen Sie an festgelegten Stellen Text oder Bildstempel hinzu
|
||||||
|
AddStampRequest.tags=Stamp, Add image, center image, Watermark, PDF, Embed, Customize
|
||||||
|
|
||||||
home.split-by-sections.title=Split PDF by Sections
|
|
||||||
home.split-by-sections.desc=Divide each page of a PDF into smaller horizontal and vertical sections
|
|
||||||
split-by-sections.tags=Section Split, Divide, Customize
|
|
||||||
|
|
||||||
###########################
|
###########################
|
||||||
# #
|
# #
|
||||||
|
@ -408,7 +416,7 @@ autoRedact.useRegexLabel=Regex verwenden
|
||||||
autoRedact.wholeWordSearchLabel=Ganzes Wort suchen
|
autoRedact.wholeWordSearchLabel=Ganzes Wort suchen
|
||||||
autoRedact.customPaddingLabel=Benutzerdefinierte Extra-Padding
|
autoRedact.customPaddingLabel=Benutzerdefinierte Extra-Padding
|
||||||
autoRedact.convertPDFToImageLabel=PDF in PDF-Bild konvertieren (zum Entfernen von Text hinter dem Kasten)
|
autoRedact.convertPDFToImageLabel=PDF in PDF-Bild konvertieren (zum Entfernen von Text hinter dem Kasten)
|
||||||
autoRedact.submitButton=zensieren
|
autoRedact.submitButton=Zensieren
|
||||||
|
|
||||||
|
|
||||||
#showJS
|
#showJS
|
||||||
|
@ -459,6 +467,37 @@ HTMLToPDF.header=HTML zu PDF
|
||||||
HTMLToPDF.help=Akzeptiert HTML-Dateien und ZIPs mit html/css/images etc.
|
HTMLToPDF.help=Akzeptiert HTML-Dateien und ZIPs mit html/css/images etc.
|
||||||
HTMLToPDF.submit=Konvertieren
|
HTMLToPDF.submit=Konvertieren
|
||||||
HTMLToPDF.credit=Verwendet WeasyPrint
|
HTMLToPDF.credit=Verwendet WeasyPrint
|
||||||
|
HTMLToPDF.zoom=Zoomstufe zur Darstellung der Website.
|
||||||
|
HTMLToPDF.pageWidth=Breite der Seite in Zentimetern. (Leer auf Standard)
|
||||||
|
HTMLToPDF.pageHeight=Höhe der Seite in Zentimetern. (Leer auf Standard)
|
||||||
|
HTMLToPDF.marginTop=Oberer Rand der Seite in Millimetern. (Leer auf Standard)
|
||||||
|
HTMLToPDF.marginBottom=Unterer Rand der Seite in Millimetern. (Leer auf Standard)
|
||||||
|
HTMLToPDF.marginLeft=Linker Rand der Seite in Millimetern. (Leer auf Standard)
|
||||||
|
HTMLToPDF.marginRight=Linker Rand der Seite in Millimetern. (Leer auf Standard)
|
||||||
|
HTMLToPDF.printBackground=Den Hintergrund der Website rendern.
|
||||||
|
HTMLToPDF.defaultHeader=Standardkopfzeile aktivieren (Name und Seitenzahl)
|
||||||
|
HTMLToPDF.cssMediaType=CSS-Medientyp der Seite ändern.
|
||||||
|
HTMLToPDF.none=Keine
|
||||||
|
HTMLToPDF.print=Drucken
|
||||||
|
HTMLToPDF.screen=Bildschirm
|
||||||
|
|
||||||
|
|
||||||
|
#AddStampRequest
|
||||||
|
AddStampRequest.header=PDF Stempel
|
||||||
|
AddStampRequest.title=PDF Stempel
|
||||||
|
AddStampRequest.stampType=Stempeltyp
|
||||||
|
AddStampRequest.stampText=Stempeltext
|
||||||
|
AddStampRequest.stampImage=Stampelbild
|
||||||
|
AddStampRequest.alphabet=Alphabet
|
||||||
|
AddStampRequest.fontSize=Schriftart/Bildgröße
|
||||||
|
AddStampRequest.rotation=Rotation
|
||||||
|
AddStampRequest.opacity=Deckkraft
|
||||||
|
AddStampRequest.position=Position
|
||||||
|
AddStampRequest.overrideX=X-Koordinate überschreiben
|
||||||
|
AddStampRequest.overrideY=Y-Koordinate überschreiben
|
||||||
|
AddStampRequest.customMargin=Benutzerdefinierter Rand
|
||||||
|
AddStampRequest.customColor=Benutzerdefinierte Textfarbe
|
||||||
|
AddStampRequest.submit=Abschicken
|
||||||
|
|
||||||
|
|
||||||
#sanitizePDF
|
#sanitizePDF
|
||||||
|
@ -511,7 +550,7 @@ crop.submit=Abschicken
|
||||||
#autoSplitPDF
|
#autoSplitPDF
|
||||||
autoSplitPDF.title=PDF automatisch teilen
|
autoSplitPDF.title=PDF automatisch teilen
|
||||||
autoSplitPDF.header=PDF automatisch teilen
|
autoSplitPDF.header=PDF automatisch teilen
|
||||||
autoSplitPDF.description=Drucken Sie, fügen Sie ein, scannen Sie, laden Sie hoch, und lassen Sie uns Ihre Dokumente automatisch trennen. Kein manuelles Sortieren erforderlich.
|
autoSplitPDF.description=Drucken Sie, fügen Sie ein, scannen Sie, laden Sie hoch und lassen Sie uns Ihre Dokumente automatisch trennen. Kein manuelles Sortieren erforderlich.
|
||||||
autoSplitPDF.selectText.1=Drucken Sie einige Trennblätter aus (schwarz/weiß ist ausreichend).
|
autoSplitPDF.selectText.1=Drucken Sie einige Trennblätter aus (schwarz/weiß ist ausreichend).
|
||||||
autoSplitPDF.selectText.2=Scannen Sie alle Dokumente auf einmal, indem Sie das Trennblatt zwischen die Dokumente einlegen.
|
autoSplitPDF.selectText.2=Scannen Sie alle Dokumente auf einmal, indem Sie das Trennblatt zwischen die Dokumente einlegen.
|
||||||
autoSplitPDF.selectText.3=Laden Sie die einzelne große gescannte PDF-Datei hoch und überlassen Sie Stirling PDF den Rest.
|
autoSplitPDF.selectText.3=Laden Sie die einzelne große gescannte PDF-Datei hoch und überlassen Sie Stirling PDF den Rest.
|
||||||
|
@ -531,7 +570,7 @@ pipeline.title=Pipeline
|
||||||
pageLayout.title=Mehrseitiges Layout
|
pageLayout.title=Mehrseitiges Layout
|
||||||
pageLayout.header=Mehrseitiges Layout
|
pageLayout.header=Mehrseitiges Layout
|
||||||
pageLayout.pagesPerSheet=Seiten pro Blatt:
|
pageLayout.pagesPerSheet=Seiten pro Blatt:
|
||||||
pageLayout.addBorder=Add Borders
|
pageLayout.addBorder=Ränder hinzufügen
|
||||||
pageLayout.submit=Abschicken
|
pageLayout.submit=Abschicken
|
||||||
|
|
||||||
|
|
||||||
|
@ -547,11 +586,11 @@ scalePages.submit=Abschicken
|
||||||
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:
|
||||||
certSign.jksNote=Note: If your certificate type is not listed below, please convert it to a Java Keystore (.jks) file using the keytool command line tool. Then, choose the .jks file option below.
|
certSign.jksNote=Hinweis: Wenn Ihr Zertifikatstyp unten nicht aufgeführt ist, konvertieren Sie ihn bitte mit dem Befehlszeilentool keytool in eine Java Keystore-Datei (.jks). Wählen Sie dann unten die Option „.jks-Datei“ aus.
|
||||||
certSign.selectKey=Wählen Sie Ihre private Schlüsseldatei aus (PKCS#8-Format, könnte .pem oder .der sein):
|
certSign.selectKey=Wählen Sie Ihre private Schlüsseldatei aus (PKCS#8-Format, könnte .pem oder .der sein):
|
||||||
certSign.selectCert=Wählen Sie Ihre Zertifikatsdatei aus (X.509-Format, könnte .pem oder .der sein):
|
certSign.selectCert=Wählen Sie Ihre Zertifikatsdatei aus (X.509-Format, könnte .pem oder .der sein):
|
||||||
certSign.selectP12=Wählen Sie Ihre PKCS#12-Keystore-Datei (.p12 oder .pfx) aus (optional, falls angegeben, sollte sie Ihren privaten Schlüssel und Ihr Zertifikat enthalten):
|
certSign.selectP12=Wählen Sie Ihre PKCS#12-Keystore-Datei (.p12 oder .pfx) aus (optional, falls angegeben, sollte sie Ihren privaten Schlüssel und Ihr Zertifikat enthalten):
|
||||||
certSign.selectJKS=Select Your Java Keystore File (.jks or .keystore):
|
certSign.selectJKS=Wählen Sie Ihre Java Keystore-Datei (.jks oder .keystore):
|
||||||
certSign.certType=Zertifikattyp
|
certSign.certType=Zertifikattyp
|
||||||
certSign.password=Geben Sie Ihr Keystore- oder Private-Key-Passwort ein (falls vorhanden):
|
certSign.password=Geben Sie Ihr Keystore- oder Private-Key-Passwort ein (falls vorhanden):
|
||||||
certSign.showSig=Signatur anzeigen
|
certSign.showSig=Signatur anzeigen
|
||||||
|
@ -572,9 +611,9 @@ removeBlanks.submit=Leere Seiten entfernen
|
||||||
|
|
||||||
|
|
||||||
#removeAnnotations
|
#removeAnnotations
|
||||||
removeAnnotations.title=Remove Annotations
|
removeAnnotations.title=Kommentare entfernen
|
||||||
removeAnnotations.header=Remove Annotations
|
removeAnnotations.header=Kommentare entfernen
|
||||||
removeAnnotations.submit=Remove
|
removeAnnotations.submit=Entfernen
|
||||||
|
|
||||||
|
|
||||||
#compare
|
#compare
|
||||||
|
@ -591,7 +630,7 @@ sign.header=PDFs signieren
|
||||||
sign.upload=Bild hochladen
|
sign.upload=Bild hochladen
|
||||||
sign.draw=Signatur zeichnen
|
sign.draw=Signatur zeichnen
|
||||||
sign.text=Texteingabe
|
sign.text=Texteingabe
|
||||||
sign.clear=Klar
|
sign.clear=Leeren
|
||||||
sign.add=Signieren
|
sign.add=Signieren
|
||||||
|
|
||||||
|
|
||||||
|
@ -663,7 +702,7 @@ compress.selectText.1=Manueller Modus – Von 1 bis 4
|
||||||
compress.selectText.2=Optimierungsstufe:
|
compress.selectText.2=Optimierungsstufe:
|
||||||
compress.selectText.3=4 (Schrecklich für Textbilder)
|
compress.selectText.3=4 (Schrecklich für Textbilder)
|
||||||
compress.selectText.4=Automatischer Modus – Passt die Qualität automatisch an, um das PDF auf die exakte Größe zu bringen
|
compress.selectText.4=Automatischer Modus – Passt die Qualität automatisch an, um das PDF auf die exakte Größe zu bringen
|
||||||
compress.selectText.5=Erwartete PDF-Größe (z. B. 25 MB, 10,8 MB, 25 KB)
|
compress.selectText.5=Erwartete PDF-Größe (z.B. 25 MB, 10,8 MB, 25 KB)
|
||||||
compress.submit=Komprimieren
|
compress.submit=Komprimieren
|
||||||
|
|
||||||
|
|
||||||
|
@ -694,8 +733,8 @@ multiTool.title=PDF-Multitool
|
||||||
multiTool.header=PDF-Multitool
|
multiTool.header=PDF-Multitool
|
||||||
|
|
||||||
#view pdf
|
#view pdf
|
||||||
viewPdf.title=View PDF
|
viewPdf.title=PDF anzeigen
|
||||||
viewPdf.header=View PDF
|
viewPdf.header=PDF anzeigen
|
||||||
|
|
||||||
#pageRemover
|
#pageRemover
|
||||||
pageRemover.title=Seiten entfernen
|
pageRemover.title=Seiten entfernen
|
||||||
|
@ -730,10 +769,10 @@ split.submit=Aufteilen
|
||||||
imageToPDF.title=Bild zu PDF
|
imageToPDF.title=Bild zu PDF
|
||||||
imageToPDF.header=Bild zu PDF
|
imageToPDF.header=Bild zu PDF
|
||||||
imageToPDF.submit=Umwandeln
|
imageToPDF.submit=Umwandeln
|
||||||
imageToPDF.selectLabel=Image Fit Options
|
imageToPDF.selectLabel=Bild anpassen
|
||||||
imageToPDF.fillPage=Fill Page
|
imageToPDF.fillPage=Seite füllen
|
||||||
imageToPDF.fitDocumentToImage=Fit Page to Image
|
imageToPDF.fitDocumentToImage=Seite an Bild anpassen
|
||||||
imageToPDF.maintainAspectRatio=Maintain Aspect Ratios
|
imageToPDF.maintainAspectRatio=Seitenverhältnisse beibehalten
|
||||||
imageToPDF.selectText.2=PDF automatisch drehen
|
imageToPDF.selectText.2=PDF automatisch drehen
|
||||||
imageToPDF.selectText.3=Mehrere Dateien verarbeiten (nur aktiv, wenn Sie mit mehreren Bildern arbeiten)
|
imageToPDF.selectText.3=Mehrere Dateien verarbeiten (nur aktiv, wenn Sie mit mehreren Bildern arbeiten)
|
||||||
imageToPDF.selectText.4=In ein einziges PDF zusammenführen
|
imageToPDF.selectText.4=In ein einziges PDF zusammenführen
|
||||||
|
@ -823,13 +862,12 @@ changeMetadata.selectText.1=Bitte bearbeiten Sie die Variablen, die Sie ändern
|
||||||
changeMetadata.selectText.2=Alle Metadaten löschen
|
changeMetadata.selectText.2=Alle Metadaten löschen
|
||||||
changeMetadata.selectText.3=Benutzerdefinierte Metadaten anzeigen:
|
changeMetadata.selectText.3=Benutzerdefinierte Metadaten anzeigen:
|
||||||
changeMetadata.author=Autor:
|
changeMetadata.author=Autor:
|
||||||
changeMetadata.creationDate=Erstellungsdatum (jjjj/MM/tt HH:mm:ss):
|
changeMetadata.creationDate=Erstellungsdatum (JJJJ/MM/TT HH:mm:ss):
|
||||||
changeMetadata.creator=Ersteller:
|
changeMetadata.creator=Ersteller:
|
||||||
changeMetadata.keywords=Schlüsselwörter:
|
changeMetadata.keywords=Schlüsselwörter:
|
||||||
changeMetadata.modDate=Änderungsdatum (JJJJ/MM/TT HH:mm:ss):
|
changeMetadata.modDate=Änderungsdatum (JJJJ/MM/TT HH:mm:ss):
|
||||||
changeMetadata.producer=Produzent:
|
changeMetadata.producer=Produzent:
|
||||||
changeMetadata.subject=Betreff:
|
changeMetadata.subject=Betreff:
|
||||||
changeMetadata.title=Titel:
|
|
||||||
changeMetadata.trapped=Gefangen:
|
changeMetadata.trapped=Gefangen:
|
||||||
changeMetadata.selectText.4=Andere Metadaten:
|
changeMetadata.selectText.4=Andere Metadaten:
|
||||||
changeMetadata.selectText.5=Benutzerdefinierten Metadateneintrag hinzufügen
|
changeMetadata.selectText.5=Benutzerdefinierten Metadateneintrag hinzufügen
|
||||||
|
@ -883,52 +921,52 @@ PDFToXML.submit=Konvertieren
|
||||||
#PDFToCSV
|
#PDFToCSV
|
||||||
PDFToCSV.title=PDF zu CSV
|
PDFToCSV.title=PDF zu CSV
|
||||||
PDFToCSV.header=PDF zu CSV
|
PDFToCSV.header=PDF zu CSV
|
||||||
PDFToCSV.prompt=Choose page to extract table
|
PDFToCSV.prompt=Seite mit der zu extrahierenden Tabelle wählen
|
||||||
PDFToCSV.submit=Extrakt
|
PDFToCSV.submit=Extrahieren
|
||||||
|
|
||||||
#split-by-size-or-count
|
#split-by-size-or-count
|
||||||
split-by-size-or-count.header=Split PDF by Size or Count
|
split-by-size-or-count.header=PDF nach Größe oder Anzahl teilen
|
||||||
split-by-size-or-count.type.label=Select Split Type
|
split-by-size-or-count.type.label=Teil-Modus wählen
|
||||||
split-by-size-or-count.type.size=By Size
|
split-by-size-or-count.type.size=Nach Größe
|
||||||
split-by-size-or-count.type.pageCount=By Page Count
|
split-by-size-or-count.type.pageCount=Nach Anzahl Seiten
|
||||||
split-by-size-or-count.type.docCount=By Document Count
|
split-by-size-or-count.type.docCount=Nach Anzahl Dokumenten
|
||||||
split-by-size-or-count.value.label=Enter Value
|
split-by-size-or-count.value.label=Wert eingeben
|
||||||
split-by-size-or-count.value.placeholder=Enter size (e.g., 2MB or 3KB) or count (e.g., 5)
|
split-by-size-or-count.value.placeholder=Größe eingeben (z.B.: 2MB oder 3KB) oder Anzahl (z.B.: 5)
|
||||||
split-by-size-or-count.submit=Submit
|
split-by-size-or-count.submit=Erstellen
|
||||||
|
|
||||||
|
|
||||||
#overlay-pdfs
|
#overlay-pdfs
|
||||||
overlay-pdfs.header=Overlay PDF Files
|
overlay-pdfs.header=PDF mit Overlay versehen
|
||||||
overlay-pdfs.baseFile.label=Select Base PDF File
|
overlay-pdfs.baseFile.label=Basis-PDF-Datei auswählen
|
||||||
overlay-pdfs.overlayFiles.label=Select Overlay PDF Files
|
overlay-pdfs.overlayFiles.label=Overlay-PDF-Datei auswählen
|
||||||
overlay-pdfs.mode.label=Select Overlay Mode
|
overlay-pdfs.mode.label=Overlay-Modus auswählen
|
||||||
overlay-pdfs.mode.sequential=Sequential Overlay
|
overlay-pdfs.mode.sequential=Sequentielles Overlay
|
||||||
overlay-pdfs.mode.interleaved=Interleaved Overlay
|
overlay-pdfs.mode.interleaved=Verschachteltes Overlay
|
||||||
overlay-pdfs.mode.fixedRepeat=Fixed Repeat Overlay
|
overlay-pdfs.mode.fixedRepeat=Feste-Wiederholung Overlay
|
||||||
overlay-pdfs.counts.label=Overlay Counts (for Fixed Repeat Mode)
|
overlay-pdfs.counts.label=Overlay Anzahl (für Feste-Wiederholung)
|
||||||
overlay-pdfs.counts.placeholder=Enter comma-separated counts (e.g., 2,3,1)
|
overlay-pdfs.counts.placeholder=Komma-separierte Anzahl eingeben (z.B.: 2,3,1)
|
||||||
overlay-pdfs.position.label=Select Overlay Position
|
overlay-pdfs.position.label=Overlay Position auswählen
|
||||||
overlay-pdfs.position.foreground=Foreground
|
overlay-pdfs.position.foreground=Vordergrund
|
||||||
overlay-pdfs.position.background=Background
|
overlay-pdfs.position.background=Hintergrund
|
||||||
overlay-pdfs.submit=Submit
|
overlay-pdfs.submit=Erstellen
|
||||||
|
|
||||||
|
|
||||||
#split-by-sections
|
#split-by-sections
|
||||||
split-by-sections.title=Split PDF by Sections
|
split-by-sections.title=PDF in Abschnitte teilen
|
||||||
split-by-sections.header=Split PDF into Sections
|
split-by-sections.header=PDF in Abschnitte teilen
|
||||||
split-by-sections.horizontal.label=Horizontal Divisions
|
split-by-sections.horizontal.label=Horizontale Teiler
|
||||||
split-by-sections.vertical.label=Vertical Divisions
|
split-by-sections.vertical.label=Vertikale Teiler
|
||||||
split-by-sections.horizontal.placeholder=Enter number of horizontal divisions
|
split-by-sections.horizontal.placeholder=Anzahl horizontaler Teiler eingeben
|
||||||
split-by-sections.vertical.placeholder=Enter number of vertical divisions
|
split-by-sections.vertical.placeholder=Anzahl vertikaler Teiler eingeben
|
||||||
split-by-sections.submit=Split PDF
|
split-by-sections.submit=PDF teilen
|
||||||
|
|
||||||
|
|
||||||
#licenses
|
#licenses
|
||||||
licenses.nav=Licenses
|
licenses.nav=Lizenzen
|
||||||
licenses.title=3rd Party Licenses
|
licenses.title=Lizenzen von Drittanbietern
|
||||||
licenses.header=3rd Party Licenses
|
licenses.header=Lizenzen von Drittanbietern
|
||||||
licenses.module=Module
|
licenses.module=Modul
|
||||||
licenses.version=Version
|
licenses.version=Version
|
||||||
licenses.license=License
|
licenses.license=Lizenz
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -11,6 +11,7 @@ imgPrompt=\u0395\u03C0\u03B9\u03BB\u03BF\u03B3\u03AE \u0395\u03B9\u03BA\u03CC\u0
|
||||||
genericSubmit=\u03A5\u03C0\u03BF\u03B2\u03BF\u03BB\u03AE
|
genericSubmit=\u03A5\u03C0\u03BF\u03B2\u03BF\u03BB\u03AE
|
||||||
processTimeWarning=\u03A0\u03C1\u03BF\u03C3\u03BF\u03C7\u03AE: \u0391\u03C5\u03C4\u03AE \u03B7 \u03B4\u03B9\u03B1\u03B4\u03B9\u03BA\u03B1\u03C3\u03AF\u03B1 \u03BC\u03C0\u03BF\u03C1\u03B5\u03AF \u03BD\u03B1 \u03B4\u03B9\u03B1\u03C1\u03BA\u03AD\u03C3\u03B5\u03B9 \u03AD\u03C9\u03C2 \u03BA\u03B1\u03B9 \u03AD\u03BD\u03B1 \u03BB\u03B5\u03C0\u03C4\u03CC \u03B1\u03BD\u03AC\u03BB\u03BF\u03B3\u03B1 \u03BC\u03B5 \u03C4\u03BF \u03BC\u03AD\u03B3\u03B5\u03B8\u03BF\u03C2 \u03C4\u03BF\u03C5 \u03B1\u03C1\u03C7\u03B5\u03AF\u03BF\u03C5
|
processTimeWarning=\u03A0\u03C1\u03BF\u03C3\u03BF\u03C7\u03AE: \u0391\u03C5\u03C4\u03AE \u03B7 \u03B4\u03B9\u03B1\u03B4\u03B9\u03BA\u03B1\u03C3\u03AF\u03B1 \u03BC\u03C0\u03BF\u03C1\u03B5\u03AF \u03BD\u03B1 \u03B4\u03B9\u03B1\u03C1\u03BA\u03AD\u03C3\u03B5\u03B9 \u03AD\u03C9\u03C2 \u03BA\u03B1\u03B9 \u03AD\u03BD\u03B1 \u03BB\u03B5\u03C0\u03C4\u03CC \u03B1\u03BD\u03AC\u03BB\u03BF\u03B3\u03B1 \u03BC\u03B5 \u03C4\u03BF \u03BC\u03AD\u03B3\u03B5\u03B8\u03BF\u03C2 \u03C4\u03BF\u03C5 \u03B1\u03C1\u03C7\u03B5\u03AF\u03BF\u03C5
|
||||||
pageOrderPrompt=\u03A0\u03C1\u03BF\u03C3\u03B1\u03C1\u03BC\u03BF\u03C3\u03BC\u03AD\u03BD\u03B7 \u03A3\u03B5\u03B9\u03C1\u03AC \u03A3\u03B5\u03BB\u03AF\u03B4\u03B1\u03C2 (\u03A0\u03C1\u03BF\u03C3\u03B8\u03AD\u03C3\u03C4\u03B5 \u03BC\u03AF\u03B1 \u03BB\u03AF\u03C3\u03C4\u03B5 \u03B1\u03C0\u03BF \u03B1\u03C1\u03B9\u03B8\u03BC\u03BF\u03CD\u03C2 \u03C3\u03B5\u03BB\u03B9\u03B4\u03CE\u03BD, \u03C7\u03C9\u03C1\u03B9\u03C3\u03BC\u03AD\u03BD\u03B5\u03C2 \u03BC\u03B5 \u03BA\u03CC\u03BC\u03BC\u03B1 \u03AE \u03C3\u03C5\u03BD\u03B1\u03C1\u03C4\u03AE\u03C3\u03B5\u03B9\u03C2 \u03CC\u03C0\u03C9\u03C2 2n+1) :
|
pageOrderPrompt=\u03A0\u03C1\u03BF\u03C3\u03B1\u03C1\u03BC\u03BF\u03C3\u03BC\u03AD\u03BD\u03B7 \u03A3\u03B5\u03B9\u03C1\u03AC \u03A3\u03B5\u03BB\u03AF\u03B4\u03B1\u03C2 (\u03A0\u03C1\u03BF\u03C3\u03B8\u03AD\u03C3\u03C4\u03B5 \u03BC\u03AF\u03B1 \u03BB\u03AF\u03C3\u03C4\u03B5 \u03B1\u03C0\u03BF \u03B1\u03C1\u03B9\u03B8\u03BC\u03BF\u03CD\u03C2 \u03C3\u03B5\u03BB\u03B9\u03B4\u03CE\u03BD, \u03C7\u03C9\u03C1\u03B9\u03C3\u03BC\u03AD\u03BD\u03B5\u03C2 \u03BC\u03B5 \u03BA\u03CC\u03BC\u03BC\u03B1 \u03AE \u03C3\u03C5\u03BD\u03B1\u03C1\u03C4\u03AE\u03C3\u03B5\u03B9\u03C2 \u03CC\u03C0\u03C9\u03C2 2n+1) :
|
||||||
|
pageSelectionPrompt=Custom Page Selection (Enter a comma-separated list of page numbers 1,5,6 or Functions like 2n+1) :
|
||||||
goToPage=Go
|
goToPage=Go
|
||||||
true=\u0391\u03BB\u03B7\u03B8\u03AD\u03C2
|
true=\u0391\u03BB\u03B7\u03B8\u03AD\u03C2
|
||||||
false=\u039B\u03B1\u03BD\u03B8\u03B1\u03C3\u03BC\u03AD\u03BD\u03BF
|
false=\u039B\u03B1\u03BD\u03B8\u03B1\u03C3\u03BC\u03AD\u03BD\u03BF
|
||||||
|
@ -42,9 +43,10 @@ red=\u039A\u03CC\u03BA\u03BA\u03B9\u03BD\u03BF
|
||||||
green=\u03A0\u03C1\u03AC\u03C3\u03B9\u03BD\u03BF
|
green=\u03A0\u03C1\u03AC\u03C3\u03B9\u03BD\u03BF
|
||||||
blue=\u039C\u03C0\u03BB\u03AD
|
blue=\u039C\u03C0\u03BB\u03AD
|
||||||
custom=\u03A0\u03C1\u03BF\u03C3\u03B1\u03C1\u03BC\u03BF\u03B3\u03AE...
|
custom=\u03A0\u03C1\u03BF\u03C3\u03B1\u03C1\u03BC\u03BF\u03B3\u03AE...
|
||||||
WorkInProgess=Work in progress, May not work or be buggy, Please report any ploblems!
|
WorkInProgess=Work in progress, May not work or be buggy, Please report any problems!
|
||||||
poweredBy=Powered by
|
poweredBy=Powered by
|
||||||
|
yes=Yes
|
||||||
|
no=No
|
||||||
changedCredsMessage=\u03A4\u03B1 \u03B4\u03B9\u03B1\u03C0\u03B9\u03C3\u03C4\u03B5\u03C5\u03C4\u03AE\u03C1\u03B9\u03B1 \u03AD\u03C7\u03BF\u03C5\u03BD \u03B1\u03BB\u03BB\u03AC\u03BE\u03B5\u03B9!
|
changedCredsMessage=\u03A4\u03B1 \u03B4\u03B9\u03B1\u03C0\u03B9\u03C3\u03C4\u03B5\u03C5\u03C4\u03AE\u03C1\u03B9\u03B1 \u03AD\u03C7\u03BF\u03C5\u03BD \u03B1\u03BB\u03BB\u03AC\u03BE\u03B5\u03B9!
|
||||||
notAuthenticatedMessage=\u039F \u03C7\u03C1\u03AE\u03C3\u03C4\u03B7\u03C2 \u03B4\u03B5\u03BD \u03AD\u03C7\u03B5\u03B9 \u03B1\u03C5\u03B8\u03B5\u03BD\u03C4\u03B9\u03BA\u03BF\u03C0\u03BF\u03B9\u03B7\u03B8\u03B5\u03AF.
|
notAuthenticatedMessage=\u039F \u03C7\u03C1\u03AE\u03C3\u03C4\u03B7\u03C2 \u03B4\u03B5\u03BD \u03AD\u03C7\u03B5\u03B9 \u03B1\u03C5\u03B8\u03B5\u03BD\u03C4\u03B9\u03BA\u03BF\u03C0\u03BF\u03B9\u03B7\u03B8\u03B5\u03AF.
|
||||||
userNotFoundMessage=\u039F \u03C7\u03C1\u03AE\u03C3\u03C4\u03B7\u03C2 \u03B4\u03B5\u03BD \u03B2\u03C1\u03AD\u03B8\u03B7\u03BA\u03B5.
|
userNotFoundMessage=\u039F \u03C7\u03C1\u03AE\u03C3\u03C4\u03B7\u03C2 \u03B4\u03B5\u03BD \u03B2\u03C1\u03AD\u03B8\u03B7\u03BA\u03B5.
|
||||||
|
@ -68,6 +70,7 @@ pipelineOptions.header=Pipeline Configuration
|
||||||
pipelineOptions.pipelineNameLabel=Pipeline Name
|
pipelineOptions.pipelineNameLabel=Pipeline Name
|
||||||
pipelineOptions.saveSettings=Save Operation Settings
|
pipelineOptions.saveSettings=Save Operation Settings
|
||||||
pipelineOptions.pipelineNamePrompt=Enter pipeline name here
|
pipelineOptions.pipelineNamePrompt=Enter pipeline name here
|
||||||
|
pipelineOptions.selectOperation=Select Operation
|
||||||
pipelineOptions.addOperationButton=Add operation
|
pipelineOptions.addOperationButton=Add operation
|
||||||
pipelineOptions.pipelineHeader=Pipeline:
|
pipelineOptions.pipelineHeader=Pipeline:
|
||||||
pipelineOptions.saveButton=Download
|
pipelineOptions.saveButton=Download
|
||||||
|
@ -118,7 +121,7 @@ account.accountSettings=\u03A1\u03C5\u03B8\u03BC\u03AF\u03C3\u03B5\u03B9\u03C2 \
|
||||||
account.adminSettings=\u03A1\u03C5\u03B8\u03BC\u03AF\u03C3\u03B5\u03B9\u03C2 \u0394\u03B9\u03B1\u03C7\u03B5\u03B9\u03C1\u03B9\u03C3\u03C4\u03AE - \u03A0\u03C1\u03BF\u03B2\u03BF\u03BB\u03AE \u03BA\u03B1\u03B9 \u03C0\u03C1\u03BF\u03C3\u03B8\u03AE\u03BA\u03B7 \u03C7\u03C1\u03B7\u03C3\u03C4\u03CE\u03BD
|
account.adminSettings=\u03A1\u03C5\u03B8\u03BC\u03AF\u03C3\u03B5\u03B9\u03C2 \u0394\u03B9\u03B1\u03C7\u03B5\u03B9\u03C1\u03B9\u03C3\u03C4\u03AE - \u03A0\u03C1\u03BF\u03B2\u03BF\u03BB\u03AE \u03BA\u03B1\u03B9 \u03C0\u03C1\u03BF\u03C3\u03B8\u03AE\u03BA\u03B7 \u03C7\u03C1\u03B7\u03C3\u03C4\u03CE\u03BD
|
||||||
account.userControlSettings=\u03A1\u03C5\u03B8\u03BC\u03AF\u03C3\u03B5\u03B9\u03C2 \u03A7\u03B5\u03B9\u03C1\u03B9\u03C3\u03BC\u03BF\u03CD \u03A7\u03C1\u03B7\u03C3\u03C4\u03CE\u03BD
|
account.userControlSettings=\u03A1\u03C5\u03B8\u03BC\u03AF\u03C3\u03B5\u03B9\u03C2 \u03A7\u03B5\u03B9\u03C1\u03B9\u03C3\u03BC\u03BF\u03CD \u03A7\u03C1\u03B7\u03C3\u03C4\u03CE\u03BD
|
||||||
account.changeUsername=\u0391\u03BB\u03BB\u03B1\u03B3\u03AE \u039F\u03BD\u03CC\u03BC\u03B1\u03C4\u03BF\u03C2 \u03A7\u03C1\u03AE\u03C3\u03C4\u03B7
|
account.changeUsername=\u0391\u03BB\u03BB\u03B1\u03B3\u03AE \u039F\u03BD\u03CC\u03BC\u03B1\u03C4\u03BF\u03C2 \u03A7\u03C1\u03AE\u03C3\u03C4\u03B7
|
||||||
account.changeUsername=\u0391\u03BB\u03BB\u03B1\u03B3\u03AE \u039F\u03BD\u03CC\u03BC\u03B1\u03C4\u03BF\u03C2 \u03A7\u03C1\u03AE\u03C3\u03C4\u03B7
|
account.newUsername=\u039d\u03ad\u03bf \u038c\u03bd\u03bf\u03bc\u03b1 \u03a7\u03c1\u03ae\u03c3\u03c4\u03b7
|
||||||
account.password=\u0395\u03C0\u03B9\u03B2\u03B5\u03B2\u03B1\u03AF\u03C9\u03C3\u03B7 \u039A\u03C9\u03B4\u03B9\u03BA\u03BF\u03CD \u03A0\u03C1\u03CC\u03C3\u03B2\u03B1\u03C3\u03B7\u03C2
|
account.password=\u0395\u03C0\u03B9\u03B2\u03B5\u03B2\u03B1\u03AF\u03C9\u03C3\u03B7 \u039A\u03C9\u03B4\u03B9\u03BA\u03BF\u03CD \u03A0\u03C1\u03CC\u03C3\u03B2\u03B1\u03C3\u03B7\u03C2
|
||||||
account.oldPassword=\u03A0\u03B1\u03BB\u03B9\u03CC\u03C2 \u039A\u03C9\u03B4\u03B9\u03BA\u03CC\u03C2 \u03A0\u03C1\u03CC\u03C3\u03B2\u03B1\u03C3\u03B7\u03C2
|
account.oldPassword=\u03A0\u03B1\u03BB\u03B9\u03CC\u03C2 \u039A\u03C9\u03B4\u03B9\u03BA\u03CC\u03C2 \u03A0\u03C1\u03CC\u03C3\u03B2\u03B1\u03C3\u03B7\u03C2
|
||||||
account.newPassword=\u039D\u03AD\u03BF\u03C2 \u039A\u03C9\u03B4\u03B9\u03BA\u03CC\u03C2 \u03A0\u03C1\u03CC\u03C3\u03B2\u03B1\u03C3\u03B7\u03C2
|
account.newPassword=\u039D\u03AD\u03BF\u03C2 \u039A\u03C9\u03B4\u03B9\u03BA\u03CC\u03C2 \u03A0\u03C1\u03CC\u03C3\u03B2\u03B1\u03C3\u03B7\u03C2
|
||||||
|
@ -360,11 +363,11 @@ PdfToSinglePage.tags=single page
|
||||||
|
|
||||||
home.showJS.title=\u0395\u03BC\u03C6\u03AC\u03BD\u03B9\u03C3\u03B7 Javascript
|
home.showJS.title=\u0395\u03BC\u03C6\u03AC\u03BD\u03B9\u03C3\u03B7 Javascript
|
||||||
home.showJS.desc=\u0391\u03BD\u03B6\u03AE\u03C4\u03B7\u03C3\u03B7 \u03BA\u03B1\u03B9 \u03B5\u03BC\u03C6\u03AC\u03BD\u03B9\u03C3\u03B7 \u03BA\u03CE\u03B4\u03B9\u03BA\u03B1 Javascript \u03C0\u03BF\u03C5 \u03B5\u03AF\u03BD\u03B1\u03B9 \u03B5\u03BD\u03C3\u03C9\u03BC\u03B1\u03C4\u03C9\u03BC\u03AD\u03BD\u03BF \u03BC\u03AD\u03C3\u03B1 \u03C3\u03B5 \u03AD\u03BD\u03B1 PDF
|
home.showJS.desc=\u0391\u03BD\u03B6\u03AE\u03C4\u03B7\u03C3\u03B7 \u03BA\u03B1\u03B9 \u03B5\u03BC\u03C6\u03AC\u03BD\u03B9\u03C3\u03B7 \u03BA\u03CE\u03B4\u03B9\u03BA\u03B1 Javascript \u03C0\u03BF\u03C5 \u03B5\u03AF\u03BD\u03B1\u03B9 \u03B5\u03BD\u03C3\u03C9\u03BC\u03B1\u03C4\u03C9\u03BC\u03AD\u03BD\u03BF \u03BC\u03AD\u03C3\u03B1 \u03C3\u03B5 \u03AD\u03BD\u03B1 PDF
|
||||||
showJS.tags=Redact,Hide,black out,black,marker,hidden
|
showJS.tags=JS
|
||||||
|
|
||||||
home.autoRedact.title=\u0391\u03C5\u03C4\u03CC\u03BC\u03B1\u03C4\u03BF \u039C\u03B1\u03CD\u03C1\u03B9\u03C3\u03BC\u03B1 \u039A\u03B5\u03B9\u03BC\u03AD\u03BD\u03BF\u03C5
|
home.autoRedact.title=\u0391\u03C5\u03C4\u03CC\u03BC\u03B1\u03C4\u03BF \u039C\u03B1\u03CD\u03C1\u03B9\u03C3\u03BC\u03B1 \u039A\u03B5\u03B9\u03BC\u03AD\u03BD\u03BF\u03C5
|
||||||
home.autoRedact.desc=\u0391\u03C5\u03C4\u03CC\u03BC\u03B1\u03C4\u03B7 \u03B5\u03C0\u03B5\u03BE\u03B5\u03C1\u03B3\u03B1\u03C3\u03AF\u03B1 (\u039C\u03B1\u03CD\u03C1\u03B9\u03C3\u03BC\u03B1) \u03BA\u03B5\u03AF\u03BC\u03B5\u03BD\u03BF\u03C5 \u03C3\u03B5 PDF \u03BC\u03B5 \u03B2\u03AC\u03C3\u03B7 \u03C4\u03BF \u03BA\u03B5\u03AF\u03BC\u03B5\u03BD\u03BF \u03B5\u03B9\u03C3\u03B1\u03B3\u03C9\u03B3\u03AE\u03C2
|
home.autoRedact.desc=\u0391\u03C5\u03C4\u03CC\u03BC\u03B1\u03C4\u03B7 \u03B5\u03C0\u03B5\u03BE\u03B5\u03C1\u03B3\u03B1\u03C3\u03AF\u03B1 (\u039C\u03B1\u03CD\u03C1\u03B9\u03C3\u03BC\u03B1) \u03BA\u03B5\u03AF\u03BC\u03B5\u03BD\u03BF\u03C5 \u03C3\u03B5 PDF \u03BC\u03B5 \u03B2\u03AC\u03C3\u03B7 \u03C4\u03BF \u03BA\u03B5\u03AF\u03BC\u03B5\u03BD\u03BF \u03B5\u03B9\u03C3\u03B1\u03B3\u03C9\u03B3\u03AE\u03C2
|
||||||
showJS.tags=Redact,Hide,black out,black,marker,hidden
|
autoRedact.tags=Redact,Hide,black out,black,marker,hidden
|
||||||
|
|
||||||
home.tableExtraxt.title=PDF to CSV
|
home.tableExtraxt.title=PDF to CSV
|
||||||
home.tableExtraxt.desc=Extracts Tables from a PDF converting it to CSV
|
home.tableExtraxt.desc=Extracts Tables from a PDF converting it to CSV
|
||||||
|
@ -384,6 +387,11 @@ home.split-by-sections.title=Split PDF by Sections
|
||||||
home.split-by-sections.desc=Divide each page of a PDF into smaller horizontal and vertical sections
|
home.split-by-sections.desc=Divide each page of a PDF into smaller horizontal and vertical sections
|
||||||
split-by-sections.tags=Section Split, Divide, Customize
|
split-by-sections.tags=Section Split, Divide, Customize
|
||||||
|
|
||||||
|
home.AddStampRequest.title=Add Stamp to PDF
|
||||||
|
home.AddStampRequest.desc=Add text or add image stamps at set locations
|
||||||
|
AddStampRequest.tags=Stamp, Add image, center image, Watermark, PDF, Embed, Customize
|
||||||
|
|
||||||
|
|
||||||
###########################
|
###########################
|
||||||
# #
|
# #
|
||||||
# WEB PAGES #
|
# WEB PAGES #
|
||||||
|
@ -459,6 +467,37 @@ HTMLToPDF.header=HTML \u03C3\u03B5 PDF
|
||||||
HTMLToPDF.help=\u0394\u03AD\u03C7\u03B5\u03C4\u03B1\u03B9 \u03B1\u03C1\u03C7\u03B5\u03AF\u03B1 \u03C4\u03CD\u03C0\u03BF\u03C5 HTML \u03BA\u03B1\u03B9 \u03C4\u03CD\u03C0\u03BF\u03C5 ZIP \u03C0\u03BF\u03C5 \u03C0\u03B5\u03C1\u03B9\u03AD\u03C7\u03BF\u03C5\u03BD html/css/\u03B5\u03B9\u03BA\u03CC\u03BD\u03B5\u03C2 \u03BA.\u03BB\u03C0. \u03C0\u03BF\u03C5 \u03B1\u03C0\u03B1\u03B9\u03C4\u03BF\u03CD\u03BD\u03C4\u03B1\u03B9
|
HTMLToPDF.help=\u0394\u03AD\u03C7\u03B5\u03C4\u03B1\u03B9 \u03B1\u03C1\u03C7\u03B5\u03AF\u03B1 \u03C4\u03CD\u03C0\u03BF\u03C5 HTML \u03BA\u03B1\u03B9 \u03C4\u03CD\u03C0\u03BF\u03C5 ZIP \u03C0\u03BF\u03C5 \u03C0\u03B5\u03C1\u03B9\u03AD\u03C7\u03BF\u03C5\u03BD html/css/\u03B5\u03B9\u03BA\u03CC\u03BD\u03B5\u03C2 \u03BA.\u03BB\u03C0. \u03C0\u03BF\u03C5 \u03B1\u03C0\u03B1\u03B9\u03C4\u03BF\u03CD\u03BD\u03C4\u03B1\u03B9
|
||||||
HTMLToPDF.submit=\u039C\u03B5\u03C4\u03B1\u03C4\u03C1\u03BF\u03C0\u03AE
|
HTMLToPDF.submit=\u039C\u03B5\u03C4\u03B1\u03C4\u03C1\u03BF\u03C0\u03AE
|
||||||
HTMLToPDF.credit=\u03A7\u03C1\u03B7\u03C3\u03B9\u03BC\u03BF\u03C0\u03BF\u03B9\u03B5\u03AF WeasyPrint
|
HTMLToPDF.credit=\u03A7\u03C1\u03B7\u03C3\u03B9\u03BC\u03BF\u03C0\u03BF\u03B9\u03B5\u03AF WeasyPrint
|
||||||
|
HTMLToPDF.zoom=Zoom level for displaying the website.
|
||||||
|
HTMLToPDF.pageWidth=Width of the page in centimeters. (Blank to default)
|
||||||
|
HTMLToPDF.pageHeight=Height of the page in centimeters. (Blank to default)
|
||||||
|
HTMLToPDF.marginTop=Top margin of the page in millimeters. (Blank to default)
|
||||||
|
HTMLToPDF.marginBottom=Bottom margin of the page in millimeters. (Blank to default)
|
||||||
|
HTMLToPDF.marginLeft=Left margin of the page in millimeters. (Blank to default)
|
||||||
|
HTMLToPDF.marginRight=Right margin of the page in millimeters. (Blank to default)
|
||||||
|
HTMLToPDF.printBackground=Render the background of websites.
|
||||||
|
HTMLToPDF.defaultHeader=Enable Default Header (Name and page number)
|
||||||
|
HTMLToPDF.cssMediaType=Change the CSS media type of the page.
|
||||||
|
HTMLToPDF.none=None
|
||||||
|
HTMLToPDF.print=Print
|
||||||
|
HTMLToPDF.screen=Screen
|
||||||
|
|
||||||
|
|
||||||
|
#AddStampRequest
|
||||||
|
AddStampRequest.header=Stamp PDF
|
||||||
|
AddStampRequest.title=Stamp PDF
|
||||||
|
AddStampRequest.stampType=Stamp Type
|
||||||
|
AddStampRequest.stampText=Stamp Text
|
||||||
|
AddStampRequest.stampImage=Stamp Image
|
||||||
|
AddStampRequest.alphabet=Alphabet
|
||||||
|
AddStampRequest.fontSize=Font/Image Size
|
||||||
|
AddStampRequest.rotation=Rotation
|
||||||
|
AddStampRequest.opacity=Opacity
|
||||||
|
AddStampRequest.position=Position
|
||||||
|
AddStampRequest.overrideX=Override X Coordinate
|
||||||
|
AddStampRequest.overrideY=Override Y Coordinate
|
||||||
|
AddStampRequest.customMargin=Custom Margin
|
||||||
|
AddStampRequest.customColor=Custom Text Color
|
||||||
|
AddStampRequest.submit=Submit
|
||||||
|
|
||||||
|
|
||||||
#sanitizePDF
|
#sanitizePDF
|
||||||
|
@ -829,7 +868,6 @@ changeMetadata.keywords=\u039B\u03AD\u03BE\u03B5\u03B9\u03C2-\u03BA\u03BB\u03B5\
|
||||||
changeMetadata.modDate=\u0397\u03BC\u03B5\u03C1\u03BF\u03BC\u03B7\u03BD\u03AF\u03B1 \u03A4\u03C1\u03BF\u03C0\u03BF\u03C0\u03BF\u03AF\u03B7\u03C3\u03B7\u03C2 (yyyy/MM/dd HH:mm:ss):
|
changeMetadata.modDate=\u0397\u03BC\u03B5\u03C1\u03BF\u03BC\u03B7\u03BD\u03AF\u03B1 \u03A4\u03C1\u03BF\u03C0\u03BF\u03C0\u03BF\u03AF\u03B7\u03C3\u03B7\u03C2 (yyyy/MM/dd HH:mm:ss):
|
||||||
changeMetadata.producer=\u03A0\u03B1\u03C1\u03B1\u03B3\u03C9\u03B3\u03CC\u03C2:
|
changeMetadata.producer=\u03A0\u03B1\u03C1\u03B1\u03B3\u03C9\u03B3\u03CC\u03C2:
|
||||||
changeMetadata.subject=\u0398\u03AD\u03BC\u03B1:
|
changeMetadata.subject=\u0398\u03AD\u03BC\u03B1:
|
||||||
changeMetadata.title=\u03A4\u03AF\u03C4\u03BB\u03BF\u03C2:
|
|
||||||
changeMetadata.trapped=Trapped:
|
changeMetadata.trapped=Trapped:
|
||||||
changeMetadata.selectText.4=\u0386\u03BB\u03BB\u03B1 \u03BC\u03B5\u03C4\u03B1\u03B4\u03B5\u03B4\u03BF\u03BC\u03AD\u03BD\u03B1:
|
changeMetadata.selectText.4=\u0386\u03BB\u03BB\u03B1 \u03BC\u03B5\u03C4\u03B1\u03B4\u03B5\u03B4\u03BF\u03BC\u03AD\u03BD\u03B1:
|
||||||
changeMetadata.selectText.5=\u03A0\u03C1\u03BF\u03C3\u03B8\u03AE\u03BA\u03B7 \u03B5\u03B3\u03B3\u03C1\u03B1\u03C6\u03AE\u03C2 \u03C0\u03C1\u03BF\u03C3\u03B1\u03C1\u03BC\u03BF\u03C3\u03BC\u03AD\u03BD\u03C9\u03BD \u03BC\u03B5\u03C4\u03B1\u03B4\u03B5\u03B4\u03BF\u03BC\u03AD\u03BD\u03C9\u03BD
|
changeMetadata.selectText.5=\u03A0\u03C1\u03BF\u03C3\u03B8\u03AE\u03BA\u03B7 \u03B5\u03B3\u03B3\u03C1\u03B1\u03C6\u03AE\u03C2 \u03C0\u03C1\u03BF\u03C3\u03B1\u03C1\u03BC\u03BF\u03C3\u03BC\u03AD\u03BD\u03C9\u03BD \u03BC\u03B5\u03C4\u03B1\u03B4\u03B5\u03B4\u03BF\u03BC\u03AD\u03BD\u03C9\u03BD
|
||||||
|
|
|
@ -11,6 +11,7 @@ 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=Custom Page Order (Enter a comma-separated list of page numbers or Functions like 2n+1) :
|
pageOrderPrompt=Custom Page Order (Enter a comma-separated list of page numbers or Functions like 2n+1) :
|
||||||
|
pageSelectionPrompt=Custom Page Selection (Enter a comma-separated list of page numbers 1,5,6 or Functions like 2n+1) :
|
||||||
goToPage=Go
|
goToPage=Go
|
||||||
true=True
|
true=True
|
||||||
false=False
|
false=False
|
||||||
|
@ -42,9 +43,10 @@ red=Red
|
||||||
green=Green
|
green=Green
|
||||||
blue=Blue
|
blue=Blue
|
||||||
custom=Custom...
|
custom=Custom...
|
||||||
WorkInProgess=Work in progress, May not work or be buggy, Please report any ploblems!
|
WorkInProgess=Work in progress, May not work or be buggy, Please report any problems!
|
||||||
poweredBy=Powered by
|
poweredBy=Powered by
|
||||||
|
yes=Yes
|
||||||
|
no=No
|
||||||
changedCredsMessage=Credentials changed!
|
changedCredsMessage=Credentials changed!
|
||||||
notAuthenticatedMessage=User not authenticated.
|
notAuthenticatedMessage=User not authenticated.
|
||||||
userNotFoundMessage=User not found.
|
userNotFoundMessage=User not found.
|
||||||
|
@ -118,8 +120,8 @@ account.title=Account Settings
|
||||||
account.accountSettings=Account Settings
|
account.accountSettings=Account Settings
|
||||||
account.adminSettings=Admin Settings - View and Add Users
|
account.adminSettings=Admin Settings - View and Add Users
|
||||||
account.userControlSettings=User Control Settings
|
account.userControlSettings=User Control Settings
|
||||||
account.changeUsername=New Username
|
|
||||||
account.changeUsername=Change Username
|
account.changeUsername=Change Username
|
||||||
|
account.newUsername=New Username
|
||||||
account.password=Confirmation Password
|
account.password=Confirmation Password
|
||||||
account.oldPassword=Old password
|
account.oldPassword=Old password
|
||||||
account.newPassword=New Password
|
account.newPassword=New Password
|
||||||
|
@ -365,7 +367,7 @@ showJS.tags=JS
|
||||||
|
|
||||||
home.autoRedact.title=Auto Redact
|
home.autoRedact.title=Auto Redact
|
||||||
home.autoRedact.desc=Auto Redacts(Blacks out) text in a PDF based on input text
|
home.autoRedact.desc=Auto Redacts(Blacks out) text in a PDF based on input text
|
||||||
showJS.tags=Redact,Hide,black out,black,marker,hidden
|
autoRedact.tags=Redact,Hide,black out,black,marker,hidden
|
||||||
|
|
||||||
home.tableExtraxt.title=PDF to CSV
|
home.tableExtraxt.title=PDF to CSV
|
||||||
home.tableExtraxt.desc=Extracts Tables from a PDF converting it to CSV
|
home.tableExtraxt.desc=Extracts Tables from a PDF converting it to CSV
|
||||||
|
@ -385,6 +387,11 @@ home.split-by-sections.title=Split PDF by Sections
|
||||||
home.split-by-sections.desc=Divide each page of a PDF into smaller horizontal and vertical sections
|
home.split-by-sections.desc=Divide each page of a PDF into smaller horizontal and vertical sections
|
||||||
split-by-sections.tags=Section Split, Divide, Customize
|
split-by-sections.tags=Section Split, Divide, Customize
|
||||||
|
|
||||||
|
home.AddStampRequest.title=Add Stamp to PDF
|
||||||
|
home.AddStampRequest.desc=Add text or add image stamps at set locations
|
||||||
|
AddStampRequest.tags=Stamp, Add image, center image, Watermark, PDF, Embed, Customize
|
||||||
|
|
||||||
|
|
||||||
###########################
|
###########################
|
||||||
# #
|
# #
|
||||||
# WEB PAGES #
|
# WEB PAGES #
|
||||||
|
@ -460,6 +467,37 @@ HTMLToPDF.header=HTML To PDF
|
||||||
HTMLToPDF.help=Accepts HTML files and ZIPs containing html/css/images etc required
|
HTMLToPDF.help=Accepts HTML files and ZIPs containing html/css/images etc required
|
||||||
HTMLToPDF.submit=Convert
|
HTMLToPDF.submit=Convert
|
||||||
HTMLToPDF.credit=Uses WeasyPrint
|
HTMLToPDF.credit=Uses WeasyPrint
|
||||||
|
HTMLToPDF.zoom=Zoom level for displaying the website.
|
||||||
|
HTMLToPDF.pageWidth=Width of the page in centimeters. (Blank to default)
|
||||||
|
HTMLToPDF.pageHeight=Height of the page in centimeters. (Blank to default)
|
||||||
|
HTMLToPDF.marginTop=Top margin of the page in millimeters. (Blank to default)
|
||||||
|
HTMLToPDF.marginBottom=Bottom margin of the page in millimeters. (Blank to default)
|
||||||
|
HTMLToPDF.marginLeft=Left margin of the page in millimeters. (Blank to default)
|
||||||
|
HTMLToPDF.marginRight=Right margin of the page in millimeters. (Blank to default)
|
||||||
|
HTMLToPDF.printBackground=Render the background of websites.
|
||||||
|
HTMLToPDF.defaultHeader=Enable Default Header (Name and page number)
|
||||||
|
HTMLToPDF.cssMediaType=Change the CSS media type of the page.
|
||||||
|
HTMLToPDF.none=None
|
||||||
|
HTMLToPDF.print=Print
|
||||||
|
HTMLToPDF.screen=Screen
|
||||||
|
|
||||||
|
|
||||||
|
#AddStampRequest
|
||||||
|
AddStampRequest.header=Stamp PDF
|
||||||
|
AddStampRequest.title=Stamp PDF
|
||||||
|
AddStampRequest.stampType=Stamp Type
|
||||||
|
AddStampRequest.stampText=Stamp Text
|
||||||
|
AddStampRequest.stampImage=Stamp Image
|
||||||
|
AddStampRequest.alphabet=Alphabet
|
||||||
|
AddStampRequest.fontSize=Font/Image Size
|
||||||
|
AddStampRequest.rotation=Rotation
|
||||||
|
AddStampRequest.opacity=Opacity
|
||||||
|
AddStampRequest.position=Position
|
||||||
|
AddStampRequest.overrideX=Override X Coordinate
|
||||||
|
AddStampRequest.overrideY=Override Y Coordinate
|
||||||
|
AddStampRequest.customMargin=Custom Margin
|
||||||
|
AddStampRequest.customColor=Custom Text Color
|
||||||
|
AddStampRequest.submit=Submit
|
||||||
|
|
||||||
|
|
||||||
#sanitizePDF
|
#sanitizePDF
|
||||||
|
@ -830,7 +868,6 @@ changeMetadata.keywords=Keywords:
|
||||||
changeMetadata.modDate=Modification Date (yyyy/MM/dd HH:mm:ss):
|
changeMetadata.modDate=Modification Date (yyyy/MM/dd HH:mm:ss):
|
||||||
changeMetadata.producer=Producer:
|
changeMetadata.producer=Producer:
|
||||||
changeMetadata.subject=Subject:
|
changeMetadata.subject=Subject:
|
||||||
changeMetadata.title=Title:
|
|
||||||
changeMetadata.trapped=Trapped:
|
changeMetadata.trapped=Trapped:
|
||||||
changeMetadata.selectText.4=Other Metadata:
|
changeMetadata.selectText.4=Other Metadata:
|
||||||
changeMetadata.selectText.5=Add Custom Metadata Entry
|
changeMetadata.selectText.5=Add Custom Metadata Entry
|
||||||
|
|
|
@ -11,6 +11,7 @@ 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=Custom Page Order (Enter a comma-separated list of page numbers or Functions like 2n+1) :
|
pageOrderPrompt=Custom Page Order (Enter a comma-separated list of page numbers or Functions like 2n+1) :
|
||||||
|
pageSelectionPrompt=Custom Page Selection (Enter a comma-separated list of page numbers 1,5,6 or Functions like 2n+1) :
|
||||||
goToPage=Go
|
goToPage=Go
|
||||||
true=True
|
true=True
|
||||||
false=False
|
false=False
|
||||||
|
@ -42,9 +43,10 @@ red=Red
|
||||||
green=Green
|
green=Green
|
||||||
blue=Blue
|
blue=Blue
|
||||||
custom=Custom...
|
custom=Custom...
|
||||||
WorkInProgess=Work in progress, May not work or be buggy, Please report any ploblems!
|
WorkInProgess=Work in progress, May not work or be buggy, Please report any problems!
|
||||||
poweredBy=Powered by
|
poweredBy=Powered by
|
||||||
|
yes=Yes
|
||||||
|
no=No
|
||||||
changedCredsMessage=Credentials changed!
|
changedCredsMessage=Credentials changed!
|
||||||
notAuthenticatedMessage=User not authenticated.
|
notAuthenticatedMessage=User not authenticated.
|
||||||
userNotFoundMessage=User not found.
|
userNotFoundMessage=User not found.
|
||||||
|
@ -68,6 +70,7 @@ pipelineOptions.header=Pipeline Configuration
|
||||||
pipelineOptions.pipelineNameLabel=Pipeline Name
|
pipelineOptions.pipelineNameLabel=Pipeline Name
|
||||||
pipelineOptions.saveSettings=Save Operation Settings
|
pipelineOptions.saveSettings=Save Operation Settings
|
||||||
pipelineOptions.pipelineNamePrompt=Enter pipeline name here
|
pipelineOptions.pipelineNamePrompt=Enter pipeline name here
|
||||||
|
pipelineOptions.selectOperation=Select Operation
|
||||||
pipelineOptions.addOperationButton=Add operation
|
pipelineOptions.addOperationButton=Add operation
|
||||||
pipelineOptions.pipelineHeader=Pipeline:
|
pipelineOptions.pipelineHeader=Pipeline:
|
||||||
pipelineOptions.saveButton=Download
|
pipelineOptions.saveButton=Download
|
||||||
|
@ -118,7 +121,7 @@ account.accountSettings=Account Settings
|
||||||
account.adminSettings=Admin Settings - View and Add Users
|
account.adminSettings=Admin Settings - View and Add Users
|
||||||
account.userControlSettings=User Control Settings
|
account.userControlSettings=User Control Settings
|
||||||
account.changeUsername=Change Username
|
account.changeUsername=Change Username
|
||||||
account.changeUsername=Change Username
|
account.newUsername=New Username
|
||||||
account.password=Confirmation Password
|
account.password=Confirmation Password
|
||||||
account.oldPassword=Old password
|
account.oldPassword=Old password
|
||||||
account.newPassword=New Password
|
account.newPassword=New Password
|
||||||
|
@ -364,7 +367,7 @@ showJS.tags=JS
|
||||||
|
|
||||||
home.autoRedact.title=Auto Redact
|
home.autoRedact.title=Auto Redact
|
||||||
home.autoRedact.desc=Auto Redacts(Blacks out) text in a PDF based on input text
|
home.autoRedact.desc=Auto Redacts(Blacks out) text in a PDF based on input text
|
||||||
showJS.tags=JS
|
autoRedact.tags=Redact,Hide,black out,black,marker,hidden
|
||||||
|
|
||||||
home.tableExtraxt.title=PDF to CSV
|
home.tableExtraxt.title=PDF to CSV
|
||||||
home.tableExtraxt.desc=Extracts Tables from a PDF converting it to CSV
|
home.tableExtraxt.desc=Extracts Tables from a PDF converting it to CSV
|
||||||
|
@ -384,6 +387,11 @@ home.split-by-sections.title=Split PDF by Sections
|
||||||
home.split-by-sections.desc=Divide each page of a PDF into smaller horizontal and vertical sections
|
home.split-by-sections.desc=Divide each page of a PDF into smaller horizontal and vertical sections
|
||||||
split-by-sections.tags=Section Split, Divide, Customize
|
split-by-sections.tags=Section Split, Divide, Customize
|
||||||
|
|
||||||
|
home.AddStampRequest.title=Add Stamp to PDF
|
||||||
|
home.AddStampRequest.desc=Add text or add image stamps at set locations
|
||||||
|
AddStampRequest.tags=Stamp, Add image, center image, Watermark, PDF, Embed, Customize
|
||||||
|
|
||||||
|
|
||||||
###########################
|
###########################
|
||||||
# #
|
# #
|
||||||
# WEB PAGES #
|
# WEB PAGES #
|
||||||
|
@ -459,6 +467,37 @@ HTMLToPDF.header=HTML To PDF
|
||||||
HTMLToPDF.help=Accepts HTML files and ZIPs containing html/css/images etc required
|
HTMLToPDF.help=Accepts HTML files and ZIPs containing html/css/images etc required
|
||||||
HTMLToPDF.submit=Convert
|
HTMLToPDF.submit=Convert
|
||||||
HTMLToPDF.credit=Uses WeasyPrint
|
HTMLToPDF.credit=Uses WeasyPrint
|
||||||
|
HTMLToPDF.zoom=Zoom level for displaying the website.
|
||||||
|
HTMLToPDF.pageWidth=Width of the page in centimeters. (Blank to default)
|
||||||
|
HTMLToPDF.pageHeight=Height of the page in centimeters. (Blank to default)
|
||||||
|
HTMLToPDF.marginTop=Top margin of the page in millimeters. (Blank to default)
|
||||||
|
HTMLToPDF.marginBottom=Bottom margin of the page in millimeters. (Blank to default)
|
||||||
|
HTMLToPDF.marginLeft=Left margin of the page in millimeters. (Blank to default)
|
||||||
|
HTMLToPDF.marginRight=Right margin of the page in millimeters. (Blank to default)
|
||||||
|
HTMLToPDF.printBackground=Render the background of websites.
|
||||||
|
HTMLToPDF.defaultHeader=Enable Default Header (Name and page number)
|
||||||
|
HTMLToPDF.cssMediaType=Change the CSS media type of the page.
|
||||||
|
HTMLToPDF.none=None
|
||||||
|
HTMLToPDF.print=Print
|
||||||
|
HTMLToPDF.screen=Screen
|
||||||
|
|
||||||
|
|
||||||
|
#AddStampRequest
|
||||||
|
AddStampRequest.header=Stamp PDF
|
||||||
|
AddStampRequest.title=Stamp PDF
|
||||||
|
AddStampRequest.stampType=Stamp Type
|
||||||
|
AddStampRequest.stampText=Stamp Text
|
||||||
|
AddStampRequest.stampImage=Stamp Image
|
||||||
|
AddStampRequest.alphabet=Alphabet
|
||||||
|
AddStampRequest.fontSize=Font/Image Size
|
||||||
|
AddStampRequest.rotation=Rotation
|
||||||
|
AddStampRequest.opacity=Opacity
|
||||||
|
AddStampRequest.position=Position
|
||||||
|
AddStampRequest.overrideX=Override X Coordinate
|
||||||
|
AddStampRequest.overrideY=Override Y Coordinate
|
||||||
|
AddStampRequest.customMargin=Custom Margin
|
||||||
|
AddStampRequest.customColor=Custom Text Color
|
||||||
|
AddStampRequest.submit=Submit
|
||||||
|
|
||||||
|
|
||||||
#sanitizePDF
|
#sanitizePDF
|
||||||
|
@ -829,7 +868,6 @@ changeMetadata.keywords=Keywords:
|
||||||
changeMetadata.modDate=Modification Date (yyyy/MM/dd HH:mm:ss):
|
changeMetadata.modDate=Modification Date (yyyy/MM/dd HH:mm:ss):
|
||||||
changeMetadata.producer=Producer:
|
changeMetadata.producer=Producer:
|
||||||
changeMetadata.subject=Subject:
|
changeMetadata.subject=Subject:
|
||||||
changeMetadata.title=Title:
|
|
||||||
changeMetadata.trapped=Trapped:
|
changeMetadata.trapped=Trapped:
|
||||||
changeMetadata.selectText.4=Other Metadata:
|
changeMetadata.selectText.4=Other Metadata:
|
||||||
changeMetadata.selectText.5=Add Custom Metadata Entry
|
changeMetadata.selectText.5=Add Custom Metadata Entry
|
||||||
|
|
|
@ -11,6 +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):
|
||||||
|
pageSelectionPrompt=Custom Page Selection (Enter a comma-separated list of page numbers 1,5,6 or Functions like 2n+1) :
|
||||||
goToPage=Ir a
|
goToPage=Ir a
|
||||||
true=Verdadero
|
true=Verdadero
|
||||||
false=Falso
|
false=Falso
|
||||||
|
@ -42,9 +43,10 @@ red=Rojo
|
||||||
green=Verde
|
green=Verde
|
||||||
blue=Azul
|
blue=Azul
|
||||||
custom=Personalizado...
|
custom=Personalizado...
|
||||||
WorkInProgess=Work in progress, May not work or be buggy, Please report any ploblems!
|
WorkInProgess=Tarea en progreso, puede no funcionar o ralentizarse; ¡por favor, informe de cualquier problema!
|
||||||
poweredBy=Powered by
|
poweredBy=Desarrollado por
|
||||||
|
yes=Sí
|
||||||
|
no=No
|
||||||
changedCredsMessage=Se cambiaron las credenciales!
|
changedCredsMessage=Se cambiaron las credenciales!
|
||||||
notAuthenticatedMessage=Usuario no autentificado.
|
notAuthenticatedMessage=Usuario no autentificado.
|
||||||
userNotFoundMessage=Usuario no encontrado.
|
userNotFoundMessage=Usuario no encontrado.
|
||||||
|
@ -55,23 +57,24 @@ usernameExistsMessage=El nuevo nombre de usuario está en uso.
|
||||||
###############
|
###############
|
||||||
# Pipeline #
|
# Pipeline #
|
||||||
###############
|
###############
|
||||||
pipeline.header=Pipeline Menu (Alpha)
|
pipeline.header=Menu Pipeline (Alfa)
|
||||||
pipeline.uploadButton=Upload Custom
|
pipeline.uploadButton=Cargar personalización
|
||||||
pipeline.configureButton=Configure
|
pipeline.configureButton=Configurar
|
||||||
pipeline.defaultOption=Custom
|
pipeline.defaultOption=Personalizar
|
||||||
pipeline.submitButton=Submit
|
pipeline.submitButton=Enviar
|
||||||
|
|
||||||
######################
|
######################
|
||||||
# Pipeline Options #
|
# Pipeline Options #
|
||||||
######################
|
######################
|
||||||
pipelineOptions.header=Pipeline Configuration
|
pipelineOptions.header=Configuración Pipeline
|
||||||
pipelineOptions.pipelineNameLabel=Pipeline Name
|
pipelineOptions.pipelineNameLabel=Nombre del Pipeline
|
||||||
pipelineOptions.saveSettings=Save Operation Settings
|
pipelineOptions.saveSettings=Guardar configuración de la oiperación
|
||||||
pipelineOptions.pipelineNamePrompt=Enter pipeline name here
|
pipelineOptions.pipelineNamePrompt=Introduzca aquí el nombre del pipeline
|
||||||
pipelineOptions.addOperationButton=Add operation
|
pipelineOptions.selectOperation=Seleccione la operación
|
||||||
|
pipelineOptions.addOperationButton=Añadir operación
|
||||||
pipelineOptions.pipelineHeader=Pipeline:
|
pipelineOptions.pipelineHeader=Pipeline:
|
||||||
pipelineOptions.saveButton=Download
|
pipelineOptions.saveButton=Descargar
|
||||||
pipelineOptions.validateButton=Validate
|
pipelineOptions.validateButton=Validar
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@ -118,7 +121,7 @@ account.accountSettings=Configuración de la cuenta
|
||||||
account.adminSettings=Configuración de Administrador - Ver y Añadir Usuarios
|
account.adminSettings=Configuración de Administrador - Ver y Añadir Usuarios
|
||||||
account.userControlSettings=Configuración de control de usuario
|
account.userControlSettings=Configuración de control de usuario
|
||||||
account.changeUsername=Cambiar nombre de usuario
|
account.changeUsername=Cambiar nombre de usuario
|
||||||
account.changeUsername=Cambiar nombre de usuario
|
account.newUsername=nuevo nombre de usuario
|
||||||
account.password=Confirmar contraseña
|
account.password=Confirmar contraseña
|
||||||
account.oldPassword=Contraseña anterior
|
account.oldPassword=Contraseña anterior
|
||||||
account.newPassword=Nueva Contraseña
|
account.newPassword=Nueva Contraseña
|
||||||
|
@ -364,7 +367,7 @@ showJS.tags=JS
|
||||||
|
|
||||||
home.autoRedact.title=Auto Redactar
|
home.autoRedact.title=Auto Redactar
|
||||||
home.autoRedact.desc=Redactar automáticamente (ocultar) texto en un PDF según el texto introducido
|
home.autoRedact.desc=Redactar automáticamente (ocultar) texto en un PDF según el texto introducido
|
||||||
showJS.tags=JS
|
autoRedact.tags=Redact,Hide,black out,black,marker,hidden
|
||||||
|
|
||||||
home.tableExtraxt.title=PDF a CSV
|
home.tableExtraxt.title=PDF a CSV
|
||||||
home.tableExtraxt.desc=Extraer Tablas de un PDF convirtiéndolas a CSV
|
home.tableExtraxt.desc=Extraer Tablas de un PDF convirtiéndolas a CSV
|
||||||
|
@ -384,6 +387,11 @@ home.split-by-sections.title=Dividir PDF por Secciones
|
||||||
home.split-by-sections.desc=Dividir cada página de un PDF en secciones verticales y horizontales más pequeñas
|
home.split-by-sections.desc=Dividir cada página de un PDF en secciones verticales y horizontales más pequeñas
|
||||||
split-by-sections.tags=Dividir sección, Dividir, Personalizar
|
split-by-sections.tags=Dividir sección, Dividir, Personalizar
|
||||||
|
|
||||||
|
home.AddStampRequest.title=Add Stamp to PDF
|
||||||
|
home.AddStampRequest.desc=Add text or add image stamps at set locations
|
||||||
|
AddStampRequest.tags=Stamp, Add image, center image, Watermark, PDF, Embed, Customize
|
||||||
|
|
||||||
|
|
||||||
###########################
|
###########################
|
||||||
# #
|
# #
|
||||||
# WEB PAGES #
|
# WEB PAGES #
|
||||||
|
@ -459,6 +467,37 @@ HTMLToPDF.header=HTML a PDF
|
||||||
HTMLToPDF.help=Acepta archivos HTML y ZIPs conteniendo los html/css/imágenes, etc, requeridas
|
HTMLToPDF.help=Acepta archivos HTML y ZIPs conteniendo los html/css/imágenes, etc, requeridas
|
||||||
HTMLToPDF.submit=Convertir
|
HTMLToPDF.submit=Convertir
|
||||||
HTMLToPDF.credit=Utiliza WeasyPrint
|
HTMLToPDF.credit=Utiliza WeasyPrint
|
||||||
|
HTMLToPDF.zoom=Nivel de zoom para mostrar la página web.
|
||||||
|
HTMLToPDF.pageWidth=Ancho de la página en centímetros. (Dejar en blanco por defecto)
|
||||||
|
HTMLToPDF.pageHeight=Alto de la página en centímetros. (Dejar en blanco por defecto)
|
||||||
|
HTMLToPDF.marginTop=Margen superior de la página en milímetros. (Dejar en blanco por defecto)
|
||||||
|
HTMLToPDF.marginBottom=Margen inferior de la página en milímetros. (Dejar en blanco por defecto)
|
||||||
|
HTMLToPDF.marginLeft=Margen izquierdo de la página en milímetros. (Dejar en blanco por defecto)
|
||||||
|
HTMLToPDF.marginRight=Margen derecho de la página en milímetros. (Dejar en blanco por defecto)
|
||||||
|
HTMLToPDF.printBackground=Renderizar el fondo de las páginas web.
|
||||||
|
HTMLToPDF.defaultHeader=Habilitar encabezado predeterminado (Nombre y número de página)
|
||||||
|
HTMLToPDF.cssMediaType=Cambiar el tipo de medio CSS de la página.
|
||||||
|
HTMLToPDF.none=Ninguno
|
||||||
|
HTMLToPDF.print=Imprimir
|
||||||
|
HTMLToPDF.screen=Pantalla
|
||||||
|
|
||||||
|
|
||||||
|
#AddStampRequest
|
||||||
|
AddStampRequest.header=Sellar PDF
|
||||||
|
AddStampRequest.title=Sellar PDF
|
||||||
|
AddStampRequest.stampType=Tipo de sello
|
||||||
|
AddStampRequest.stampText=Texto del sello
|
||||||
|
AddStampRequest.stampImage=Imagen de sello
|
||||||
|
AddStampRequest.alphabet=Alfabeto
|
||||||
|
AddStampRequest.fontSize=Tamaño de fuente/imagen
|
||||||
|
AddStampRequest.rotation=Rotación
|
||||||
|
AddStampRequest.opacity=Opacidad
|
||||||
|
AddStampRequest.position=Posición
|
||||||
|
AddStampRequest.overrideX=Forzar coordenada X
|
||||||
|
AddStampRequest.overrideY=Forzar coordenada Y
|
||||||
|
AddStampRequest.customMargin=Personalizar margen
|
||||||
|
AddStampRequest.customColor=Personalizar color de texto
|
||||||
|
AddStampRequest.submit=Enviar
|
||||||
|
|
||||||
|
|
||||||
#sanitizePDF
|
#sanitizePDF
|
||||||
|
@ -547,11 +586,11 @@ scalePages.submit=Entregar
|
||||||
certSign.title=Firma con certificado
|
certSign.title=Firma con certificado
|
||||||
certSign.header=Firmar un PDF con su certificado (en desarrollo)
|
certSign.header=Firmar un PDF con su certificado (en desarrollo)
|
||||||
certSign.selectPDF=Seleccione un archivo PDF para firmar:
|
certSign.selectPDF=Seleccione un archivo PDF para firmar:
|
||||||
certSign.jksNote=Note: If your certificate type is not listed below, please convert it to a Java Keystore (.jks) file using the keytool command line tool. Then, choose the .jks file option below.
|
certSign.jksNote=Nota: si el tipo de certificado no está enla lista de abajo, por favor conviértalo a un archivo almacén de claves de Java Java KeyStore (.jks) utilizando la herramienta línea de comandos. Posteriormente, seleccione en el listado de abajo la opción archivo .jks.
|
||||||
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):
|
||||||
certSign.selectP12=Seleccione su archivo de almacén de claves PKCS#12 (.p12 o .pfx) (Opcional, si se proporciona, debe contener su clave privada y certificado):
|
certSign.selectP12=Seleccione su archivo de almacén de claves PKCS#12 (.p12 o .pfx) (Opcional, si se proporciona, debe contener su clave privada y certificado):
|
||||||
certSign.selectJKS=Select Your Java Keystore File (.jks or .keystore):
|
certSign.selectJKS=Seleccione su archivo de almacén de claves Java KeyStore (.jks or .keystore):
|
||||||
certSign.certType=Tipo de certificado
|
certSign.certType=Tipo de certificado
|
||||||
certSign.password=Introduzca su almacén de claves o contraseña de clave privada (si corresponde):
|
certSign.password=Introduzca su almacén de claves o contraseña de clave privada (si corresponde):
|
||||||
certSign.showSig=Mostrar firma
|
certSign.showSig=Mostrar firma
|
||||||
|
@ -829,7 +868,6 @@ 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.trapped=Capturado:
|
changeMetadata.trapped=Capturado:
|
||||||
changeMetadata.selectText.4=Otros Metadatos:
|
changeMetadata.selectText.4=Otros Metadatos:
|
||||||
changeMetadata.selectText.5=Agregar entrada de metadatos personalizados
|
changeMetadata.selectText.5=Agregar entrada de metadatos personalizados
|
||||||
|
@ -924,11 +962,11 @@ split-by-sections.submit=Dividir PDF
|
||||||
|
|
||||||
|
|
||||||
#licenses
|
#licenses
|
||||||
licenses.nav=Licenses
|
licenses.nav=Licencias
|
||||||
licenses.title=3rd Party Licenses
|
licenses.title=Licencias de terceros
|
||||||
licenses.header=3rd Party Licenses
|
licenses.header=Licencias de terceros
|
||||||
licenses.module=Module
|
licenses.module=Módulo
|
||||||
licenses.version=Version
|
licenses.version=Versión
|
||||||
licenses.license=License
|
licenses.license=Licencia
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -11,6 +11,7 @@ imgPrompt=Hautatu Irudia(k)
|
||||||
genericSubmit=Bidali
|
genericSubmit=Bidali
|
||||||
processTimeWarning=Oharra: prozesu honetarako minutu bat ere beharko da fitxategiaren tamaiaren arabera
|
processTimeWarning=Oharra: prozesu honetarako minutu bat ere beharko da fitxategiaren tamaiaren arabera
|
||||||
pageOrderPrompt=Orrialdeen ordena (sartu komaz bereizitako orrialde-zenbakien zerrenda)
|
pageOrderPrompt=Orrialdeen ordena (sartu komaz bereizitako orrialde-zenbakien zerrenda)
|
||||||
|
pageSelectionPrompt=Custom Page Selection (Enter a comma-separated list of page numbers 1,5,6 or Functions like 2n+1) :
|
||||||
goToPage=Joan
|
goToPage=Joan
|
||||||
true=Egiazkoa
|
true=Egiazkoa
|
||||||
false=Faltsua
|
false=Faltsua
|
||||||
|
@ -42,9 +43,10 @@ red=Gorria
|
||||||
green=Berdea
|
green=Berdea
|
||||||
blue=Urdina
|
blue=Urdina
|
||||||
custom=Pertsonalizatu...
|
custom=Pertsonalizatu...
|
||||||
WorkInProgess=Work in progress, May not work or be buggy, Please report any ploblems!
|
WorkInProgess=Work in progress, May not work or be buggy, Please report any problems!
|
||||||
poweredBy=Powered by
|
poweredBy=Powered by
|
||||||
|
yes=Yes
|
||||||
|
no=No
|
||||||
changedCredsMessage=Credentials changed!
|
changedCredsMessage=Credentials changed!
|
||||||
notAuthenticatedMessage=User not authenticated.
|
notAuthenticatedMessage=User not authenticated.
|
||||||
userNotFoundMessage=User not found.
|
userNotFoundMessage=User not found.
|
||||||
|
@ -68,6 +70,7 @@ pipelineOptions.header=Pipeline Configuration
|
||||||
pipelineOptions.pipelineNameLabel=Pipeline Name
|
pipelineOptions.pipelineNameLabel=Pipeline Name
|
||||||
pipelineOptions.saveSettings=Save Operation Settings
|
pipelineOptions.saveSettings=Save Operation Settings
|
||||||
pipelineOptions.pipelineNamePrompt=Enter pipeline name here
|
pipelineOptions.pipelineNamePrompt=Enter pipeline name here
|
||||||
|
pipelineOptions.selectOperation=Select Operation
|
||||||
pipelineOptions.addOperationButton=Add operation
|
pipelineOptions.addOperationButton=Add operation
|
||||||
pipelineOptions.pipelineHeader=Pipeline:
|
pipelineOptions.pipelineHeader=Pipeline:
|
||||||
pipelineOptions.saveButton=Download
|
pipelineOptions.saveButton=Download
|
||||||
|
@ -118,7 +121,7 @@ account.accountSettings=Kontuaren ezarpenak
|
||||||
account.adminSettings=Admin ezarpenak - Ikusi eta gehitu Erabiltzaileak
|
account.adminSettings=Admin ezarpenak - Ikusi eta gehitu Erabiltzaileak
|
||||||
account.userControlSettings=Erabiltzaile ezarpen kontrolak
|
account.userControlSettings=Erabiltzaile ezarpen kontrolak
|
||||||
account.changeUsername=Aldatu erabiltzaile izena
|
account.changeUsername=Aldatu erabiltzaile izena
|
||||||
account.changeUsername=Aldatu erabiltzaile izena
|
account.newUsername=Erabiltzaile izen berria
|
||||||
account.password=Konfirmatu pasahitza
|
account.password=Konfirmatu pasahitza
|
||||||
account.oldPassword=Pasahitz zaharra
|
account.oldPassword=Pasahitz zaharra
|
||||||
account.newPassword=Pasahitz berria
|
account.newPassword=Pasahitz berria
|
||||||
|
@ -364,7 +367,7 @@ showJS.tags=JS
|
||||||
|
|
||||||
home.autoRedact.title=Auto Idatzi
|
home.autoRedact.title=Auto Idatzi
|
||||||
home.autoRedact.desc=Auto Idatzi testua pdf fitxategian sarrerako testuan oinarritua
|
home.autoRedact.desc=Auto Idatzi testua pdf fitxategian sarrerako testuan oinarritua
|
||||||
showJS.tags=JS
|
autoRedact.tags=Redact,Hide,black out,black,marker,hidden
|
||||||
|
|
||||||
home.tableExtraxt.title=PDF to CSV
|
home.tableExtraxt.title=PDF to CSV
|
||||||
home.tableExtraxt.desc=Extracts Tables from a PDF converting it to CSV
|
home.tableExtraxt.desc=Extracts Tables from a PDF converting it to CSV
|
||||||
|
@ -384,6 +387,11 @@ home.split-by-sections.title=Split PDF by Sections
|
||||||
home.split-by-sections.desc=Divide each page of a PDF into smaller horizontal and vertical sections
|
home.split-by-sections.desc=Divide each page of a PDF into smaller horizontal and vertical sections
|
||||||
split-by-sections.tags=Section Split, Divide, Customize
|
split-by-sections.tags=Section Split, Divide, Customize
|
||||||
|
|
||||||
|
home.AddStampRequest.title=Add Stamp to PDF
|
||||||
|
home.AddStampRequest.desc=Add text or add image stamps at set locations
|
||||||
|
AddStampRequest.tags=Stamp, Add image, center image, Watermark, PDF, Embed, Customize
|
||||||
|
|
||||||
|
|
||||||
###########################
|
###########################
|
||||||
# #
|
# #
|
||||||
# WEB PAGES #
|
# WEB PAGES #
|
||||||
|
@ -459,6 +467,37 @@ HTMLToPDF.header=HTML bat PDF-ra
|
||||||
HTMLToPDF.help=Html/css/images etab dituen HTML eta Zip fitxategiak onartzen ditu
|
HTMLToPDF.help=Html/css/images etab dituen HTML eta Zip fitxategiak onartzen ditu
|
||||||
HTMLToPDF.submit=Bihurtu
|
HTMLToPDF.submit=Bihurtu
|
||||||
HTMLToPDF.credit=WeasyPrint darabil
|
HTMLToPDF.credit=WeasyPrint darabil
|
||||||
|
HTMLToPDF.zoom=Zoom level for displaying the website.
|
||||||
|
HTMLToPDF.pageWidth=Width of the page in centimeters. (Blank to default)
|
||||||
|
HTMLToPDF.pageHeight=Height of the page in centimeters. (Blank to default)
|
||||||
|
HTMLToPDF.marginTop=Top margin of the page in millimeters. (Blank to default)
|
||||||
|
HTMLToPDF.marginBottom=Bottom margin of the page in millimeters. (Blank to default)
|
||||||
|
HTMLToPDF.marginLeft=Left margin of the page in millimeters. (Blank to default)
|
||||||
|
HTMLToPDF.marginRight=Right margin of the page in millimeters. (Blank to default)
|
||||||
|
HTMLToPDF.printBackground=Render the background of websites.
|
||||||
|
HTMLToPDF.defaultHeader=Enable Default Header (Name and page number)
|
||||||
|
HTMLToPDF.cssMediaType=Change the CSS media type of the page.
|
||||||
|
HTMLToPDF.none=None
|
||||||
|
HTMLToPDF.print=Print
|
||||||
|
HTMLToPDF.screen=Screen
|
||||||
|
|
||||||
|
|
||||||
|
#AddStampRequest
|
||||||
|
AddStampRequest.header=Stamp PDF
|
||||||
|
AddStampRequest.title=Stamp PDF
|
||||||
|
AddStampRequest.stampType=Stamp Type
|
||||||
|
AddStampRequest.stampText=Stamp Text
|
||||||
|
AddStampRequest.stampImage=Stamp Image
|
||||||
|
AddStampRequest.alphabet=Alphabet
|
||||||
|
AddStampRequest.fontSize=Font/Image Size
|
||||||
|
AddStampRequest.rotation=Rotation
|
||||||
|
AddStampRequest.opacity=Opacity
|
||||||
|
AddStampRequest.position=Position
|
||||||
|
AddStampRequest.overrideX=Override X Coordinate
|
||||||
|
AddStampRequest.overrideY=Override Y Coordinate
|
||||||
|
AddStampRequest.customMargin=Custom Margin
|
||||||
|
AddStampRequest.customColor=Custom Text Color
|
||||||
|
AddStampRequest.submit=Submit
|
||||||
|
|
||||||
|
|
||||||
#sanitizePDF
|
#sanitizePDF
|
||||||
|
@ -829,7 +868,6 @@ changeMetadata.keywords=Gako-hitzak:
|
||||||
changeMetadata.modDate=Aldatze-data (aaaa/MM/dd HH:mm:ss):
|
changeMetadata.modDate=Aldatze-data (aaaa/MM/dd HH:mm:ss):
|
||||||
changeMetadata.producer=Ekoizlea:
|
changeMetadata.producer=Ekoizlea:
|
||||||
changeMetadata.subject=Gaia:
|
changeMetadata.subject=Gaia:
|
||||||
changeMetadata.title=Izenburua:
|
|
||||||
changeMetadata.trapped=Trapped:
|
changeMetadata.trapped=Trapped:
|
||||||
changeMetadata.selectText.4=Beste metadatu batzuk:
|
changeMetadata.selectText.4=Beste metadatu batzuk:
|
||||||
changeMetadata.selectText.5=Gehitu metadatu pertsonalizatuen sarrera
|
changeMetadata.selectText.5=Gehitu metadatu pertsonalizatuen sarrera
|
||||||
|
|
|
@ -11,6 +11,7 @@ imgPrompt=Choisir une image
|
||||||
genericSubmit=Envoyer
|
genericSubmit=Envoyer
|
||||||
processTimeWarning=Attention, ce processus peut prendre jusqu\u2019à une minute en fonction de la taille du fichier.
|
processTimeWarning=Attention, ce processus peut prendre jusqu\u2019à une minute en fonction de la taille du fichier.
|
||||||
pageOrderPrompt=Ordre des pages (entrez une liste de numéros de page séparés par des virgules ou des fonctions telles que 2n+1)\u00a0:
|
pageOrderPrompt=Ordre des pages (entrez une liste de numéros de page séparés par des virgules ou des fonctions telles que 2n+1)\u00a0:
|
||||||
|
pageSelectionPrompt=Custom Page Selection (Enter a comma-separated list of page numbers 1,5,6 or Functions like 2n+1) :
|
||||||
goToPage=Aller
|
goToPage=Aller
|
||||||
true=Vrai
|
true=Vrai
|
||||||
false=Faux
|
false=Faux
|
||||||
|
@ -42,9 +43,10 @@ red=Rouge
|
||||||
green=Vert
|
green=Vert
|
||||||
blue=Bleu
|
blue=Bleu
|
||||||
custom=Personnalisé\u2026
|
custom=Personnalisé\u2026
|
||||||
WorkInProgess=Work in progress, May not work or be buggy, Please report any ploblems!
|
WorkInProgess=Work in progress, May not work or be buggy, Please report any problems!
|
||||||
poweredBy=Powered by
|
poweredBy=Powered by
|
||||||
|
yes=Yes
|
||||||
|
no=No
|
||||||
changedCredsMessage=Les identifiants ont été mis à jour\u00a0!
|
changedCredsMessage=Les identifiants ont été mis à jour\u00a0!
|
||||||
notAuthenticatedMessage=Utilisateur non authentifié.
|
notAuthenticatedMessage=Utilisateur non authentifié.
|
||||||
userNotFoundMessage=Utilisateur non trouvé.
|
userNotFoundMessage=Utilisateur non trouvé.
|
||||||
|
@ -68,6 +70,7 @@ pipelineOptions.header=Pipeline Configuration
|
||||||
pipelineOptions.pipelineNameLabel=Pipeline Name
|
pipelineOptions.pipelineNameLabel=Pipeline Name
|
||||||
pipelineOptions.saveSettings=Save Operation Settings
|
pipelineOptions.saveSettings=Save Operation Settings
|
||||||
pipelineOptions.pipelineNamePrompt=Enter pipeline name here
|
pipelineOptions.pipelineNamePrompt=Enter pipeline name here
|
||||||
|
pipelineOptions.selectOperation=Select Operation
|
||||||
pipelineOptions.addOperationButton=Add operation
|
pipelineOptions.addOperationButton=Add operation
|
||||||
pipelineOptions.pipelineHeader=Pipeline:
|
pipelineOptions.pipelineHeader=Pipeline:
|
||||||
pipelineOptions.saveButton=Download
|
pipelineOptions.saveButton=Download
|
||||||
|
@ -118,7 +121,7 @@ account.accountSettings=Paramètres du compte
|
||||||
account.adminSettings=Paramètres d\u2019administration \u2013 Voir et ajouter des utilisateurs
|
account.adminSettings=Paramètres d\u2019administration \u2013 Voir et ajouter des utilisateurs
|
||||||
account.userControlSettings=Contrôle des paramètres des utilisateurs
|
account.userControlSettings=Contrôle des paramètres des utilisateurs
|
||||||
account.changeUsername=Modifier le nom d\u2019utilisateur
|
account.changeUsername=Modifier le nom d\u2019utilisateur
|
||||||
account.changeUsername=Modifier le nom d\u2019utilisateur
|
account.newUsername=Nouveau nom d\u2019utilisateur
|
||||||
account.password=Mot de passe de confirmation
|
account.password=Mot de passe de confirmation
|
||||||
account.oldPassword=Ancien mot de passe
|
account.oldPassword=Ancien mot de passe
|
||||||
account.newPassword=Nouveau mot de passe
|
account.newPassword=Nouveau mot de passe
|
||||||
|
@ -360,11 +363,11 @@ PdfToSinglePage.tags=fusionner,merge,une seule page,single page
|
||||||
|
|
||||||
home.showJS.title=Afficher le JavaScript
|
home.showJS.title=Afficher le JavaScript
|
||||||
home.showJS.desc=Recherche et affiche tout JavaScript injecté dans un PDF.
|
home.showJS.desc=Recherche et affiche tout JavaScript injecté dans un PDF.
|
||||||
showJS.tags=caviarder,redact,auto
|
showJS.tags=JS
|
||||||
|
|
||||||
home.autoRedact.title=Caviarder automatiquement
|
home.autoRedact.title=Caviarder automatiquement
|
||||||
home.autoRedact.desc=Caviardez automatiquement les informations sensibles d\u2019un PDF.
|
home.autoRedact.desc=Caviardez automatiquement les informations sensibles d\u2019un PDF.
|
||||||
showJS.tags=caviarder,redact,auto
|
autoRedact.tags=caviarder,redact,auto
|
||||||
|
|
||||||
home.tableExtraxt.title=PDF en CSV
|
home.tableExtraxt.title=PDF en CSV
|
||||||
home.tableExtraxt.desc=Extrait les tableaux d\u2019un PDF et les transforme en CSV
|
home.tableExtraxt.desc=Extrait les tableaux d\u2019un PDF et les transforme en CSV
|
||||||
|
@ -384,6 +387,11 @@ home.split-by-sections.title=Split PDF by Sections
|
||||||
home.split-by-sections.desc=Divide each page of a PDF into smaller horizontal and vertical sections
|
home.split-by-sections.desc=Divide each page of a PDF into smaller horizontal and vertical sections
|
||||||
split-by-sections.tags=Section Split, Divide, Customize
|
split-by-sections.tags=Section Split, Divide, Customize
|
||||||
|
|
||||||
|
home.AddStampRequest.title=Add Stamp to PDF
|
||||||
|
home.AddStampRequest.desc=Add text or add image stamps at set locations
|
||||||
|
AddStampRequest.tags=Stamp, Add image, center image, Watermark, PDF, Embed, Customize
|
||||||
|
|
||||||
|
|
||||||
###########################
|
###########################
|
||||||
# #
|
# #
|
||||||
# WEB PAGES #
|
# WEB PAGES #
|
||||||
|
@ -459,6 +467,37 @@ HTMLToPDF.header=HTML en PDF
|
||||||
HTMLToPDF.help=Accepte les fichiers HTML et les ZIP contenant du HTML, du CSS, des images, etc. (requis).
|
HTMLToPDF.help=Accepte les fichiers HTML et les ZIP contenant du HTML, du CSS, des images, etc. (requis).
|
||||||
HTMLToPDF.submit=Convertir
|
HTMLToPDF.submit=Convertir
|
||||||
HTMLToPDF.credit=Utilise WeasyPrint.
|
HTMLToPDF.credit=Utilise WeasyPrint.
|
||||||
|
HTMLToPDF.zoom=Zoom level for displaying the website.
|
||||||
|
HTMLToPDF.pageWidth=Width of the page in centimeters. (Blank to default)
|
||||||
|
HTMLToPDF.pageHeight=Height of the page in centimeters. (Blank to default)
|
||||||
|
HTMLToPDF.marginTop=Top margin of the page in millimeters. (Blank to default)
|
||||||
|
HTMLToPDF.marginBottom=Bottom margin of the page in millimeters. (Blank to default)
|
||||||
|
HTMLToPDF.marginLeft=Left margin of the page in millimeters. (Blank to default)
|
||||||
|
HTMLToPDF.marginRight=Right margin of the page in millimeters. (Blank to default)
|
||||||
|
HTMLToPDF.printBackground=Render the background of websites.
|
||||||
|
HTMLToPDF.defaultHeader=Enable Default Header (Name and page number)
|
||||||
|
HTMLToPDF.cssMediaType=Change the CSS media type of the page.
|
||||||
|
HTMLToPDF.none=None
|
||||||
|
HTMLToPDF.print=Print
|
||||||
|
HTMLToPDF.screen=Screen
|
||||||
|
|
||||||
|
|
||||||
|
#AddStampRequest
|
||||||
|
AddStampRequest.header=Stamp PDF
|
||||||
|
AddStampRequest.title=Stamp PDF
|
||||||
|
AddStampRequest.stampType=Stamp Type
|
||||||
|
AddStampRequest.stampText=Stamp Text
|
||||||
|
AddStampRequest.stampImage=Stamp Image
|
||||||
|
AddStampRequest.alphabet=Alphabet
|
||||||
|
AddStampRequest.fontSize=Font/Image Size
|
||||||
|
AddStampRequest.rotation=Rotation
|
||||||
|
AddStampRequest.opacity=Opacity
|
||||||
|
AddStampRequest.position=Position
|
||||||
|
AddStampRequest.overrideX=Override X Coordinate
|
||||||
|
AddStampRequest.overrideY=Override Y Coordinate
|
||||||
|
AddStampRequest.customMargin=Custom Margin
|
||||||
|
AddStampRequest.customColor=Custom Text Color
|
||||||
|
AddStampRequest.submit=Submit
|
||||||
|
|
||||||
|
|
||||||
#sanitizePDF
|
#sanitizePDF
|
||||||
|
@ -829,7 +868,6 @@ changeMetadata.keywords=Mots clés
|
||||||
changeMetadata.modDate=Date de modification (yyyy/MM/dd HH:mm:ss)
|
changeMetadata.modDate=Date de modification (yyyy/MM/dd HH:mm:ss)
|
||||||
changeMetadata.producer=Producteur
|
changeMetadata.producer=Producteur
|
||||||
changeMetadata.subject=Sujet
|
changeMetadata.subject=Sujet
|
||||||
changeMetadata.title=Titre
|
|
||||||
changeMetadata.trapped=Défoncé (technique d’impression)
|
changeMetadata.trapped=Défoncé (technique d’impression)
|
||||||
changeMetadata.selectText.4=Autres métadonnées
|
changeMetadata.selectText.4=Autres métadonnées
|
||||||
changeMetadata.selectText.5=Ajouter une entrée de métadonnées personnalisée
|
changeMetadata.selectText.5=Ajouter une entrée de métadonnées personnalisée
|
||||||
|
|
|
@ -11,6 +11,7 @@ imgPrompt=छवियों का चयन करें
|
||||||
genericSubmit=प्रस्तुत करें
|
genericSubmit=प्रस्तुत करें
|
||||||
processTimeWarning=चेतावनी: यह प्रक्रिया फ़ाइल के आकार पर निर्भर करती है और यह से एक मिनट तक लग सकती है
|
processTimeWarning=चेतावनी: यह प्रक्रिया फ़ाइल के आकार पर निर्भर करती है और यह से एक मिनट तक लग सकती है
|
||||||
pageOrderPrompt=कस्टम पेज क्रम (पेज नंबरों या 2n+1 जैसे कार्यों की एक कॉमा से अलग-अलग सूची दर्ज करें):
|
pageOrderPrompt=कस्टम पेज क्रम (पेज नंबरों या 2n+1 जैसे कार्यों की एक कॉमा से अलग-अलग सूची दर्ज करें):
|
||||||
|
pageSelectionPrompt=Custom Page Selection (Enter a comma-separated list of page numbers 1,5,6 or Functions like 2n+1) :
|
||||||
goToPage=जाएँ
|
goToPage=जाएँ
|
||||||
true=सही
|
true=सही
|
||||||
false=गलत
|
false=गलत
|
||||||
|
@ -42,9 +43,10 @@ red=लाल
|
||||||
green=हरा
|
green=हरा
|
||||||
blue=नीला
|
blue=नीला
|
||||||
custom=कस्टम...
|
custom=कस्टम...
|
||||||
WorkInProgess=Work in progress, May not work or be buggy, Please report any ploblems!
|
WorkInProgess=Work in progress, May not work or be buggy, Please report any problems!
|
||||||
poweredBy=Powered by
|
poweredBy=Powered by
|
||||||
|
yes=Yes
|
||||||
|
no=No
|
||||||
changedCredsMessage=क्रेडेंशियल्स बदल दी गईं!
|
changedCredsMessage=क्रेडेंशियल्स बदल दी गईं!
|
||||||
notAuthenticatedMessage=उपयोगकर्ता प्रमाणित नहीं है।
|
notAuthenticatedMessage=उपयोगकर्ता प्रमाणित नहीं है।
|
||||||
userNotFoundMessage=उपयोगकर्ता नहीं मिला।
|
userNotFoundMessage=उपयोगकर्ता नहीं मिला।
|
||||||
|
@ -68,6 +70,7 @@ pipelineOptions.header=Pipeline Configuration
|
||||||
pipelineOptions.pipelineNameLabel=Pipeline Name
|
pipelineOptions.pipelineNameLabel=Pipeline Name
|
||||||
pipelineOptions.saveSettings=Save Operation Settings
|
pipelineOptions.saveSettings=Save Operation Settings
|
||||||
pipelineOptions.pipelineNamePrompt=Enter pipeline name here
|
pipelineOptions.pipelineNamePrompt=Enter pipeline name here
|
||||||
|
pipelineOptions.selectOperation=Select Operation
|
||||||
pipelineOptions.addOperationButton=Add operation
|
pipelineOptions.addOperationButton=Add operation
|
||||||
pipelineOptions.pipelineHeader=Pipeline:
|
pipelineOptions.pipelineHeader=Pipeline:
|
||||||
pipelineOptions.saveButton=Download
|
pipelineOptions.saveButton=Download
|
||||||
|
@ -118,7 +121,7 @@ account.accountSettings=खाता सेटिंग्स
|
||||||
account.adminSettings=व्यवस्थापक सेटिंग्स - उपयोगकर्ताओं को देखें और जोड़ें
|
account.adminSettings=व्यवस्थापक सेटिंग्स - उपयोगकर्ताओं को देखें और जोड़ें
|
||||||
account.userControlSettings=उपयोगकर्ता नियंत्रण सेटिंग्स
|
account.userControlSettings=उपयोगकर्ता नियंत्रण सेटिंग्स
|
||||||
account.changeUsername=उपयोगकर्ता नाम परिवर्तन करें
|
account.changeUsername=उपयोगकर्ता नाम परिवर्तन करें
|
||||||
account.changeUsername=उपयोगकर्ता नाम परिवर्तन करें
|
account.newUsername=नया उपयोगकर्ता नाम
|
||||||
account.password=पासवर्ड पुष्टि
|
account.password=पासवर्ड पुष्टि
|
||||||
account.oldPassword=पुराना पासवर्ड
|
account.oldPassword=पुराना पासवर्ड
|
||||||
account.newPassword=नया पासवर्ड
|
account.newPassword=नया पासवर्ड
|
||||||
|
@ -360,11 +363,11 @@ PdfToSinglePage.tags=एकल पृष्ठ
|
||||||
|
|
||||||
home.showJS.title=जावास्क्रिप्ट दिखाएं
|
home.showJS.title=जावास्क्रिप्ट दिखाएं
|
||||||
home.showJS.desc=पीडीएफ़ में डाला गया कोई भी जावास्क्रिप्ट खोजता है और प्रदर्शित करता है
|
home.showJS.desc=पीडीएफ़ में डाला गया कोई भी जावास्क्रिप्ट खोजता है और प्रदर्शित करता है
|
||||||
showJS.tags=गोपनीयकरण, छिपाना, काला करना, काला, मार्कर, छिपा हुआ
|
showJS.tags=जे एस
|
||||||
|
|
||||||
home.autoRedact.title=स्वतः गोपनीयकरण
|
home.autoRedact.title=स्वतः गोपनीयकरण
|
||||||
home.autoRedact.desc=प्रविष्ट पाठ के आधार पर पीडीएफ़ में पाठ को स्वतः गोपनीयकरित(काला करें)
|
home.autoRedact.desc=प्रविष्ट पाठ के आधार पर पीडीएफ़ में पाठ को स्वतः गोपनीयकरित(काला करें)
|
||||||
showJS.tags=गोपनीयकरण, छिपाना, काला करना, काला, मार्कर, छिपा हुआ
|
autoRedact.tags=गोपनीयकरण, छिपाना, काला करना, काला, मार्कर, छिपा हुआ
|
||||||
|
|
||||||
home.tableExtraxt.title=PDF से CSV में
|
home.tableExtraxt.title=PDF से CSV में
|
||||||
home.tableExtraxt.desc=CSV में बदलते हुए पीडीएफ़ से तालिकाएँ निकालता है
|
home.tableExtraxt.desc=CSV में बदलते हुए पीडीएफ़ से तालिकाएँ निकालता है
|
||||||
|
@ -384,6 +387,11 @@ home.split-by-sections.title=खंडों से पीडीएफ़ वि
|
||||||
home.split-by-sections.desc=पीडीएफ़ के प्रत्येक पृष्ठ को छोटे से छोटे क्षैतिज और ऊर्ध्वाधर खंडों में विभाजित करें
|
home.split-by-sections.desc=पीडीएफ़ के प्रत्येक पृष्ठ को छोटे से छोटे क्षैतिज और ऊर्ध्वाधर खंडों में विभाजित करें
|
||||||
split-by-sections.tags=खंड विभाजन, विभाजित करें, अनुकूलित
|
split-by-sections.tags=खंड विभाजन, विभाजित करें, अनुकूलित
|
||||||
|
|
||||||
|
home.AddStampRequest.title=Add Stamp to PDF
|
||||||
|
home.AddStampRequest.desc=Add text or add image stamps at set locations
|
||||||
|
AddStampRequest.tags=Stamp, Add image, center image, Watermark, PDF, Embed, Customize
|
||||||
|
|
||||||
|
|
||||||
###########################
|
###########################
|
||||||
# #
|
# #
|
||||||
# WEB PAGES #
|
# WEB PAGES #
|
||||||
|
@ -459,6 +467,37 @@ HTMLToPDF.header=HTML से पीडीएफ़
|
||||||
HTMLToPDF.help=HTML फ़ाइलों और html/css/images आदि को आत्मसात करने वाले ZIPs को स्वीकार करता है
|
HTMLToPDF.help=HTML फ़ाइलों और html/css/images आदि को आत्मसात करने वाले ZIPs को स्वीकार करता है
|
||||||
HTMLToPDF.submit=रूपांतरित करें
|
HTMLToPDF.submit=रूपांतरित करें
|
||||||
HTMLToPDF.credit=WeasyPrint का प्रयोग होता है
|
HTMLToPDF.credit=WeasyPrint का प्रयोग होता है
|
||||||
|
HTMLToPDF.zoom=Zoom level for displaying the website.
|
||||||
|
HTMLToPDF.pageWidth=Width of the page in centimeters. (Blank to default)
|
||||||
|
HTMLToPDF.pageHeight=Height of the page in centimeters. (Blank to default)
|
||||||
|
HTMLToPDF.marginTop=Top margin of the page in millimeters. (Blank to default)
|
||||||
|
HTMLToPDF.marginBottom=Bottom margin of the page in millimeters. (Blank to default)
|
||||||
|
HTMLToPDF.marginLeft=Left margin of the page in millimeters. (Blank to default)
|
||||||
|
HTMLToPDF.marginRight=Right margin of the page in millimeters. (Blank to default)
|
||||||
|
HTMLToPDF.printBackground=Render the background of websites.
|
||||||
|
HTMLToPDF.defaultHeader=Enable Default Header (Name and page number)
|
||||||
|
HTMLToPDF.cssMediaType=Change the CSS media type of the page.
|
||||||
|
HTMLToPDF.none=None
|
||||||
|
HTMLToPDF.print=Print
|
||||||
|
HTMLToPDF.screen=Screen
|
||||||
|
|
||||||
|
|
||||||
|
#AddStampRequest
|
||||||
|
AddStampRequest.header=Stamp PDF
|
||||||
|
AddStampRequest.title=Stamp PDF
|
||||||
|
AddStampRequest.stampType=Stamp Type
|
||||||
|
AddStampRequest.stampText=Stamp Text
|
||||||
|
AddStampRequest.stampImage=Stamp Image
|
||||||
|
AddStampRequest.alphabet=Alphabet
|
||||||
|
AddStampRequest.fontSize=Font/Image Size
|
||||||
|
AddStampRequest.rotation=Rotation
|
||||||
|
AddStampRequest.opacity=Opacity
|
||||||
|
AddStampRequest.position=Position
|
||||||
|
AddStampRequest.overrideX=Override X Coordinate
|
||||||
|
AddStampRequest.overrideY=Override Y Coordinate
|
||||||
|
AddStampRequest.customMargin=Custom Margin
|
||||||
|
AddStampRequest.customColor=Custom Text Color
|
||||||
|
AddStampRequest.submit=Submit
|
||||||
|
|
||||||
|
|
||||||
#sanitizePDF
|
#sanitizePDF
|
||||||
|
@ -829,7 +868,6 @@ changeMetadata.keywords=कीवर्ड्स:
|
||||||
changeMetadata.modDate=संशोधन तिथि (yyyy/MM/dd HH:mm:ss):
|
changeMetadata.modDate=संशोधन तिथि (yyyy/MM/dd HH:mm:ss):
|
||||||
changeMetadata.producer=निर्माता:
|
changeMetadata.producer=निर्माता:
|
||||||
changeMetadata.subject=विषय:
|
changeMetadata.subject=विषय:
|
||||||
changeMetadata.title=शीर्षक:
|
|
||||||
changeMetadata.trapped=फंसा हुआ:
|
changeMetadata.trapped=फंसा हुआ:
|
||||||
changeMetadata.selectText.4=अन्य मेटाडेटा:
|
changeMetadata.selectText.4=अन्य मेटाडेटा:
|
||||||
changeMetadata.selectText.5=कस्टम मेटाडेटा एंट्री जोड़ें
|
changeMetadata.selectText.5=कस्टम मेटाडेटा एंट्री जोड़ें
|
||||||
|
|
|
@ -11,6 +11,7 @@ imgPrompt=Válasszon képeket
|
||||||
genericSubmit=Beküldés
|
genericSubmit=Beküldés
|
||||||
processTimeWarning=Figyelmeztetés: Ez a folyamat akár egy percig is eltarthat a fájlmérettől függően
|
processTimeWarning=Figyelmeztetés: Ez a folyamat akár egy percig is eltarthat a fájlmérettől függően
|
||||||
pageOrderPrompt=Egyedi oldalsorrend (Adjon meg vesszővel elválasztott oldalszámokat vagy függvényeket, például 2n+1):
|
pageOrderPrompt=Egyedi oldalsorrend (Adjon meg vesszővel elválasztott oldalszámokat vagy függvényeket, például 2n+1):
|
||||||
|
pageSelectionPrompt=Custom Page Selection (Enter a comma-separated list of page numbers 1,5,6 or Functions like 2n+1) :
|
||||||
goToPage=Ugrás
|
goToPage=Ugrás
|
||||||
true=Igaz
|
true=Igaz
|
||||||
false=Hamis
|
false=Hamis
|
||||||
|
@ -42,9 +43,10 @@ red=Piros
|
||||||
green=Zöld
|
green=Zöld
|
||||||
blue=Kék
|
blue=Kék
|
||||||
custom=Egyedi...
|
custom=Egyedi...
|
||||||
WorkInProgess=Work in progress, May not work or be buggy, Please report any ploblems!
|
WorkInProgess=Work in progress, May not work or be buggy, Please report any problems!
|
||||||
poweredBy=Powered by
|
poweredBy=Powered by
|
||||||
|
yes=Yes
|
||||||
|
no=No
|
||||||
changedCredsMessage=A hitelek megváltoztak!
|
changedCredsMessage=A hitelek megváltoztak!
|
||||||
notAuthenticatedMessage=Felhasználó nincs hitelesítve.
|
notAuthenticatedMessage=Felhasználó nincs hitelesítve.
|
||||||
userNotFoundMessage=A felhasználó nem található.
|
userNotFoundMessage=A felhasználó nem található.
|
||||||
|
@ -68,6 +70,7 @@ pipelineOptions.header=Pipeline Configuration
|
||||||
pipelineOptions.pipelineNameLabel=Pipeline Name
|
pipelineOptions.pipelineNameLabel=Pipeline Name
|
||||||
pipelineOptions.saveSettings=Save Operation Settings
|
pipelineOptions.saveSettings=Save Operation Settings
|
||||||
pipelineOptions.pipelineNamePrompt=Enter pipeline name here
|
pipelineOptions.pipelineNamePrompt=Enter pipeline name here
|
||||||
|
pipelineOptions.selectOperation=Select Operation
|
||||||
pipelineOptions.addOperationButton=Add operation
|
pipelineOptions.addOperationButton=Add operation
|
||||||
pipelineOptions.pipelineHeader=Pipeline:
|
pipelineOptions.pipelineHeader=Pipeline:
|
||||||
pipelineOptions.saveButton=Download
|
pipelineOptions.saveButton=Download
|
||||||
|
@ -117,8 +120,8 @@ account.title=Fiókbeállítások
|
||||||
account.accountSettings=Fiókbeállítások
|
account.accountSettings=Fiókbeállítások
|
||||||
account.adminSettings=Admin Beállítások - Felhasználók megtekintése és hozzáadása
|
account.adminSettings=Admin Beállítások - Felhasználók megtekintése és hozzáadása
|
||||||
account.userControlSettings=Felhasználói vezérlési beállítások
|
account.userControlSettings=Felhasználói vezérlési beállítások
|
||||||
account.changeUsername=Új felhasználónév
|
account.changeUsername=Felhasználónév módosítása
|
||||||
account.changeUsername=Új felhasználónév
|
account.newUsername=Új felhasználónév
|
||||||
account.password=Megerősítő jelszó
|
account.password=Megerősítő jelszó
|
||||||
account.oldPassword=Régi jelszó
|
account.oldPassword=Régi jelszó
|
||||||
account.newPassword=Új jelszó
|
account.newPassword=Új jelszó
|
||||||
|
@ -360,11 +363,11 @@ PdfToSinglePage.tags=egyetlen lap
|
||||||
|
|
||||||
home.showJS.title=JavaScript megjelenítése
|
home.showJS.title=JavaScript megjelenítése
|
||||||
home.showJS.desc=Keres és megjelenít bármilyen JS-t, amit beinjektáltak a PDF-be
|
home.showJS.desc=Keres és megjelenít bármilyen JS-t, amit beinjektáltak a PDF-be
|
||||||
showJS.tags=Elrejt,Elrejtés,kitakarás,fekete,fekete,marker,elrejtett
|
showJS.tags=JS
|
||||||
|
|
||||||
home.autoRedact.title=Automatikus Elrejtés
|
home.autoRedact.title=Automatikus Elrejtés
|
||||||
home.autoRedact.desc=Automatikusan kitakar (elrejt) szöveget egy PDF-ben az input szöveg alapján
|
home.autoRedact.desc=Automatikusan kitakar (elrejt) szöveget egy PDF-ben az input szöveg alapján
|
||||||
showJS.tags=Elrejt,Elrejtés,kitakarás,fekete,fekete,marker,elrejtett
|
autoRedact.tags=Elrejt,Elrejtés,kitakarás,fekete,fekete,marker,elrejtett
|
||||||
|
|
||||||
home.tableExtraxt.title=PDF to CSV
|
home.tableExtraxt.title=PDF to CSV
|
||||||
home.tableExtraxt.desc=Táblázatok kinyerése a PDF-ből CSV formátumra konvertálva
|
home.tableExtraxt.desc=Táblázatok kinyerése a PDF-ből CSV formátumra konvertálva
|
||||||
|
@ -384,6 +387,11 @@ home.split-by-sections.title=PDF Szakaszokra osztása
|
||||||
home.split-by-sections.desc=Minden oldal felosztása kisebb vízszintes és függőleges szakaszokra
|
home.split-by-sections.desc=Minden oldal felosztása kisebb vízszintes és függőleges szakaszokra
|
||||||
split-by-sections.tags=Szakasz elosztás, felosztás, testreszabás
|
split-by-sections.tags=Szakasz elosztás, felosztás, testreszabás
|
||||||
|
|
||||||
|
home.AddStampRequest.title=Add Stamp to PDF
|
||||||
|
home.AddStampRequest.desc=Add text or add image stamps at set locations
|
||||||
|
AddStampRequest.tags=Stamp, Add image, center image, Watermark, PDF, Embed, Customize
|
||||||
|
|
||||||
|
|
||||||
###########################
|
###########################
|
||||||
# #
|
# #
|
||||||
# WEB PAGES #
|
# WEB PAGES #
|
||||||
|
@ -459,6 +467,37 @@ HTMLToPDF.header=HTML >> PDF
|
||||||
HTMLToPDF.help=Elfogad HTML fájlokat és ZIP-fájlokat, amelyek tartalmaznak html/css/képeket stb.
|
HTMLToPDF.help=Elfogad HTML fájlokat és ZIP-fájlokat, amelyek tartalmaznak html/css/képeket stb.
|
||||||
HTMLToPDF.submit=Átalakítás
|
HTMLToPDF.submit=Átalakítás
|
||||||
HTMLToPDF.credit=WeasyPrint alkalmazása
|
HTMLToPDF.credit=WeasyPrint alkalmazása
|
||||||
|
HTMLToPDF.zoom=Zoom level for displaying the website.
|
||||||
|
HTMLToPDF.pageWidth=Width of the page in centimeters. (Blank to default)
|
||||||
|
HTMLToPDF.pageHeight=Height of the page in centimeters. (Blank to default)
|
||||||
|
HTMLToPDF.marginTop=Top margin of the page in millimeters. (Blank to default)
|
||||||
|
HTMLToPDF.marginBottom=Bottom margin of the page in millimeters. (Blank to default)
|
||||||
|
HTMLToPDF.marginLeft=Left margin of the page in millimeters. (Blank to default)
|
||||||
|
HTMLToPDF.marginRight=Right margin of the page in millimeters. (Blank to default)
|
||||||
|
HTMLToPDF.printBackground=Render the background of websites.
|
||||||
|
HTMLToPDF.defaultHeader=Enable Default Header (Name and page number)
|
||||||
|
HTMLToPDF.cssMediaType=Change the CSS media type of the page.
|
||||||
|
HTMLToPDF.none=None
|
||||||
|
HTMLToPDF.print=Print
|
||||||
|
HTMLToPDF.screen=Screen
|
||||||
|
|
||||||
|
|
||||||
|
#AddStampRequest
|
||||||
|
AddStampRequest.header=Stamp PDF
|
||||||
|
AddStampRequest.title=Stamp PDF
|
||||||
|
AddStampRequest.stampType=Stamp Type
|
||||||
|
AddStampRequest.stampText=Stamp Text
|
||||||
|
AddStampRequest.stampImage=Stamp Image
|
||||||
|
AddStampRequest.alphabet=Alphabet
|
||||||
|
AddStampRequest.fontSize=Font/Image Size
|
||||||
|
AddStampRequest.rotation=Rotation
|
||||||
|
AddStampRequest.opacity=Opacity
|
||||||
|
AddStampRequest.position=Position
|
||||||
|
AddStampRequest.overrideX=Override X Coordinate
|
||||||
|
AddStampRequest.overrideY=Override Y Coordinate
|
||||||
|
AddStampRequest.customMargin=Custom Margin
|
||||||
|
AddStampRequest.customColor=Custom Text Color
|
||||||
|
AddStampRequest.submit=Submit
|
||||||
|
|
||||||
|
|
||||||
#sanitizePDF
|
#sanitizePDF
|
||||||
|
@ -829,7 +868,6 @@ changeMetadata.keywords=Kulcsszavak:
|
||||||
changeMetadata.modDate=Módosítás dátuma (éééé/hh/nn ÓÓ:PP:MM):
|
changeMetadata.modDate=Módosítás dátuma (éééé/hh/nn ÓÓ:PP:MM):
|
||||||
changeMetadata.producer=Készítő:
|
changeMetadata.producer=Készítő:
|
||||||
changeMetadata.subject=Tárgy:
|
changeMetadata.subject=Tárgy:
|
||||||
changeMetadata.title=Cím:
|
|
||||||
changeMetadata.trapped=Trapped:
|
changeMetadata.trapped=Trapped:
|
||||||
changeMetadata.selectText.4=Egyéb metaadatok:
|
changeMetadata.selectText.4=Egyéb metaadatok:
|
||||||
changeMetadata.selectText.5=Egyedi metaadatbejegyzés hozzáadása
|
changeMetadata.selectText.5=Egyedi metaadatbejegyzés hozzáadása
|
||||||
|
|
|
@ -11,6 +11,7 @@ imgPrompt=Pilih Gambar
|
||||||
genericSubmit=Kirim
|
genericSubmit=Kirim
|
||||||
processTimeWarning=Peringatan: Proses ini dapat memakan waktu hingga satu menit, tergantung pada ukuran berkas
|
processTimeWarning=Peringatan: Proses ini dapat memakan waktu hingga satu menit, tergantung pada ukuran berkas
|
||||||
pageOrderPrompt=Urutan Halaman Khusus (Masukkan daftar nomor halaman yang dipisahkan dengan koma atau Fungsi seperti 2n + 1) :
|
pageOrderPrompt=Urutan Halaman Khusus (Masukkan daftar nomor halaman yang dipisahkan dengan koma atau Fungsi seperti 2n + 1) :
|
||||||
|
pageSelectionPrompt=Custom Page Selection (Enter a comma-separated list of page numbers 1,5,6 or Functions like 2n+1) :
|
||||||
goToPage=Ke
|
goToPage=Ke
|
||||||
true=Benar
|
true=Benar
|
||||||
false=Salah
|
false=Salah
|
||||||
|
@ -42,9 +43,10 @@ red=Merah
|
||||||
green=Hijau
|
green=Hijau
|
||||||
blue=Biru
|
blue=Biru
|
||||||
custom=Kustom...
|
custom=Kustom...
|
||||||
WorkInProgess=Work in progress, May not work or be buggy, Please report any ploblems!
|
WorkInProgess=Work in progress, May not work or be buggy, Please report any problems!
|
||||||
poweredBy=Powered by
|
poweredBy=Powered by
|
||||||
|
yes=Yes
|
||||||
|
no=No
|
||||||
changedCredsMessage=Kredensial berubah!!
|
changedCredsMessage=Kredensial berubah!!
|
||||||
notAuthenticatedMessage=Pengguna tidak ter-autentikasi.
|
notAuthenticatedMessage=Pengguna tidak ter-autentikasi.
|
||||||
userNotFoundMessage=Pengguna tidak ditemukan.
|
userNotFoundMessage=Pengguna tidak ditemukan.
|
||||||
|
@ -68,6 +70,7 @@ pipelineOptions.header=Pipeline Configuration
|
||||||
pipelineOptions.pipelineNameLabel=Pipeline Name
|
pipelineOptions.pipelineNameLabel=Pipeline Name
|
||||||
pipelineOptions.saveSettings=Save Operation Settings
|
pipelineOptions.saveSettings=Save Operation Settings
|
||||||
pipelineOptions.pipelineNamePrompt=Enter pipeline name here
|
pipelineOptions.pipelineNamePrompt=Enter pipeline name here
|
||||||
|
pipelineOptions.selectOperation=Select Operation
|
||||||
pipelineOptions.addOperationButton=Add operation
|
pipelineOptions.addOperationButton=Add operation
|
||||||
pipelineOptions.pipelineHeader=Pipeline:
|
pipelineOptions.pipelineHeader=Pipeline:
|
||||||
pipelineOptions.saveButton=Download
|
pipelineOptions.saveButton=Download
|
||||||
|
@ -118,7 +121,7 @@ account.accountSettings=Pengaturan Akun
|
||||||
account.adminSettings=Pengaturan Admin - Melihat dan Menambahkan Pengguna
|
account.adminSettings=Pengaturan Admin - Melihat dan Menambahkan Pengguna
|
||||||
account.userControlSettings=Pengaturan Kontrol Pengguna
|
account.userControlSettings=Pengaturan Kontrol Pengguna
|
||||||
account.changeUsername=Ubah Nama Pengguna
|
account.changeUsername=Ubah Nama Pengguna
|
||||||
account.changeUsername=Ubah Nama Pengguna
|
account.newUsername=Nama pengguna baru
|
||||||
account.password=Konfirmasi Kata sandi
|
account.password=Konfirmasi Kata sandi
|
||||||
account.oldPassword=Kata sandi lama
|
account.oldPassword=Kata sandi lama
|
||||||
account.newPassword=Kata Sandi Baru
|
account.newPassword=Kata Sandi Baru
|
||||||
|
@ -360,11 +363,11 @@ PdfToSinglePage.tags=halaman tunggal
|
||||||
|
|
||||||
home.showJS.title=Tampilkan Javascript
|
home.showJS.title=Tampilkan Javascript
|
||||||
home.showJS.desc=Mencari dan menampilkan JS apa pun yang disuntikkan ke dalam PDF
|
home.showJS.desc=Mencari dan menampilkan JS apa pun yang disuntikkan ke dalam PDF
|
||||||
showJS.tags=Hapus, Sembunyikan, padamkan, hitam, hitam, penanda, tersembunyi
|
showJS.tags=JS
|
||||||
|
|
||||||
home.autoRedact.title=Redaksional Otomatis
|
home.autoRedact.title=Redaksional Otomatis
|
||||||
home.autoRedact.desc=Menyunting Otomatis (Menghitamkan) teks dalam PDF berdasarkan teks masukan
|
home.autoRedact.desc=Menyunting Otomatis (Menghitamkan) teks dalam PDF berdasarkan teks masukan
|
||||||
showJS.tags=Hapus, Sembunyikan, padamkan, hitam, hitam, penanda, tersembunyi
|
autoRedact.tags=Hapus, Sembunyikan, padamkan, hitam, hitam, penanda, tersembunyi
|
||||||
|
|
||||||
home.tableExtraxt.title=PDF ke CSV
|
home.tableExtraxt.title=PDF ke CSV
|
||||||
home.tableExtraxt.desc=Mengekstrak Tabel dari PDF yang mengonversinya menjadi CSV
|
home.tableExtraxt.desc=Mengekstrak Tabel dari PDF yang mengonversinya menjadi CSV
|
||||||
|
@ -384,6 +387,11 @@ home.split-by-sections.title=Membagi PDF berdasarkan Bagian
|
||||||
home.split-by-sections.desc=Membagi setiap halaman PDF menjadi beberapa bagian horizontal dan vertikal yang lebih kecil
|
home.split-by-sections.desc=Membagi setiap halaman PDF menjadi beberapa bagian horizontal dan vertikal yang lebih kecil
|
||||||
split-by-sections.tags=Membagi Bagian, Membagi, Menyesuaikan
|
split-by-sections.tags=Membagi Bagian, Membagi, Menyesuaikan
|
||||||
|
|
||||||
|
home.AddStampRequest.title=Add Stamp to PDF
|
||||||
|
home.AddStampRequest.desc=Add text or add image stamps at set locations
|
||||||
|
AddStampRequest.tags=Stamp, Add image, center image, Watermark, PDF, Embed, Customize
|
||||||
|
|
||||||
|
|
||||||
###########################
|
###########################
|
||||||
# #
|
# #
|
||||||
# WEB PAGES #
|
# WEB PAGES #
|
||||||
|
@ -459,6 +467,37 @@ HTMLToPDF.header=HTML Ke PDF
|
||||||
HTMLToPDF.help=Menerima berkas HTML dan ZIP yang berisi html / css / gambar, dll yang diperlukan
|
HTMLToPDF.help=Menerima berkas HTML dan ZIP yang berisi html / css / gambar, dll yang diperlukan
|
||||||
HTMLToPDF.submit=Konversi
|
HTMLToPDF.submit=Konversi
|
||||||
HTMLToPDF.credit=Menggunakan WeasyPrint
|
HTMLToPDF.credit=Menggunakan WeasyPrint
|
||||||
|
HTMLToPDF.zoom=Zoom level for displaying the website.
|
||||||
|
HTMLToPDF.pageWidth=Width of the page in centimeters. (Blank to default)
|
||||||
|
HTMLToPDF.pageHeight=Height of the page in centimeters. (Blank to default)
|
||||||
|
HTMLToPDF.marginTop=Top margin of the page in millimeters. (Blank to default)
|
||||||
|
HTMLToPDF.marginBottom=Bottom margin of the page in millimeters. (Blank to default)
|
||||||
|
HTMLToPDF.marginLeft=Left margin of the page in millimeters. (Blank to default)
|
||||||
|
HTMLToPDF.marginRight=Right margin of the page in millimeters. (Blank to default)
|
||||||
|
HTMLToPDF.printBackground=Render the background of websites.
|
||||||
|
HTMLToPDF.defaultHeader=Enable Default Header (Name and page number)
|
||||||
|
HTMLToPDF.cssMediaType=Change the CSS media type of the page.
|
||||||
|
HTMLToPDF.none=None
|
||||||
|
HTMLToPDF.print=Print
|
||||||
|
HTMLToPDF.screen=Screen
|
||||||
|
|
||||||
|
|
||||||
|
#AddStampRequest
|
||||||
|
AddStampRequest.header=Stamp PDF
|
||||||
|
AddStampRequest.title=Stamp PDF
|
||||||
|
AddStampRequest.stampType=Stamp Type
|
||||||
|
AddStampRequest.stampText=Stamp Text
|
||||||
|
AddStampRequest.stampImage=Stamp Image
|
||||||
|
AddStampRequest.alphabet=Alphabet
|
||||||
|
AddStampRequest.fontSize=Font/Image Size
|
||||||
|
AddStampRequest.rotation=Rotation
|
||||||
|
AddStampRequest.opacity=Opacity
|
||||||
|
AddStampRequest.position=Position
|
||||||
|
AddStampRequest.overrideX=Override X Coordinate
|
||||||
|
AddStampRequest.overrideY=Override Y Coordinate
|
||||||
|
AddStampRequest.customMargin=Custom Margin
|
||||||
|
AddStampRequest.customColor=Custom Text Color
|
||||||
|
AddStampRequest.submit=Submit
|
||||||
|
|
||||||
|
|
||||||
#sanitizePDF
|
#sanitizePDF
|
||||||
|
@ -829,7 +868,6 @@ changeMetadata.keywords=Kata kunci:
|
||||||
changeMetadata.modDate=Tangal Diupdate (yyyy/MM/dd HH:mm:ss):
|
changeMetadata.modDate=Tangal Diupdate (yyyy/MM/dd HH:mm:ss):
|
||||||
changeMetadata.producer=Produser:
|
changeMetadata.producer=Produser:
|
||||||
changeMetadata.subject=Subjek:
|
changeMetadata.subject=Subjek:
|
||||||
changeMetadata.title=Judul:
|
|
||||||
changeMetadata.trapped=Terperangkap:
|
changeMetadata.trapped=Terperangkap:
|
||||||
changeMetadata.selectText.4=Metadata Lain-lain:
|
changeMetadata.selectText.4=Metadata Lain-lain:
|
||||||
changeMetadata.selectText.5=Tambahkan Metadata Khusus
|
changeMetadata.selectText.5=Tambahkan Metadata Khusus
|
||||||
|
|
|
@ -11,6 +11,7 @@ imgPrompt=Scegli immagine/i
|
||||||
genericSubmit=Invia
|
genericSubmit=Invia
|
||||||
processTimeWarning=Nota: Questo processo potrebbe richiedere fino a un minuto in base alla dimensione dei file
|
processTimeWarning=Nota: Questo processo potrebbe richiedere fino a un minuto in base alla dimensione dei file
|
||||||
pageOrderPrompt=Ordine delle pagine (inserisci una lista di numeri separati da virgola):
|
pageOrderPrompt=Ordine delle pagine (inserisci una lista di numeri separati da virgola):
|
||||||
|
pageSelectionPrompt=Custom Page Selection (Enter a comma-separated list of page numbers 1,5,6 or Functions like 2n+1) :
|
||||||
goToPage=Vai
|
goToPage=Vai
|
||||||
true=Vero
|
true=Vero
|
||||||
false=Falso
|
false=Falso
|
||||||
|
@ -44,7 +45,8 @@ blue=Blu
|
||||||
custom=Personalizzato
|
custom=Personalizzato
|
||||||
WorkInProgess=Lavori in corso, potrebbe non funzionare o essere difettoso, segnalare eventuali problemi!
|
WorkInProgess=Lavori in corso, potrebbe non funzionare o essere difettoso, segnalare eventuali problemi!
|
||||||
poweredBy=Alimentato da
|
poweredBy=Alimentato da
|
||||||
|
yes=Si
|
||||||
|
no=No
|
||||||
changedCredsMessage=Credenziali cambiate!
|
changedCredsMessage=Credenziali cambiate!
|
||||||
notAuthenticatedMessage=Utente non autenticato.
|
notAuthenticatedMessage=Utente non autenticato.
|
||||||
userNotFoundMessage=Utente non trovato.
|
userNotFoundMessage=Utente non trovato.
|
||||||
|
@ -68,6 +70,7 @@ pipelineOptions.header=Configurazione Pipeline
|
||||||
pipelineOptions.pipelineNameLabel=Nome della Pipeline
|
pipelineOptions.pipelineNameLabel=Nome della Pipeline
|
||||||
pipelineOptions.saveSettings=Salva Impostazioni
|
pipelineOptions.saveSettings=Salva Impostazioni
|
||||||
pipelineOptions.pipelineNamePrompt=Inserisci qui il nome della pipeline
|
pipelineOptions.pipelineNamePrompt=Inserisci qui il nome della pipeline
|
||||||
|
pipelineOptions.selectOperation=Seleziona operazione
|
||||||
pipelineOptions.addOperationButton=Aggiungi operazione
|
pipelineOptions.addOperationButton=Aggiungi operazione
|
||||||
pipelineOptions.pipelineHeader=Pipeline:
|
pipelineOptions.pipelineHeader=Pipeline:
|
||||||
pipelineOptions.saveButton=Download
|
pipelineOptions.saveButton=Download
|
||||||
|
@ -117,8 +120,8 @@ account.title=Impostazioni Account
|
||||||
account.accountSettings=Impostazioni Account
|
account.accountSettings=Impostazioni Account
|
||||||
account.adminSettings=Impostazioni Admin - Aggiungi e Vedi Utenti
|
account.adminSettings=Impostazioni Admin - Aggiungi e Vedi Utenti
|
||||||
account.userControlSettings=Impostazioni Utente
|
account.userControlSettings=Impostazioni Utente
|
||||||
account.changeUsername=Cambia Username
|
account.changeUsername=Cambia nome utente
|
||||||
account.changeUsername=Cambia Username
|
account.newUsername=Nuovo nome utente
|
||||||
account.password=Conferma Password
|
account.password=Conferma Password
|
||||||
account.oldPassword=Vecchia Password
|
account.oldPassword=Vecchia Password
|
||||||
account.newPassword=Nuova Password
|
account.newPassword=Nuova Password
|
||||||
|
@ -234,7 +237,7 @@ ocr.tags=riconoscimento,testo,immagine,scansione,lettura,identificazione,rilevam
|
||||||
|
|
||||||
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.
|
||||||
extractImages.tags=picture,photo,save,archive,zip,capture,grab
|
extractImages.tags=immagine,photo,save,archive,zip,capture,grab
|
||||||
|
|
||||||
home.pdfToPDFA.title=Converti in PDF/A
|
home.pdfToPDFA.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.
|
||||||
|
@ -311,7 +314,7 @@ add-page-numbers.tags=impaginare,etichettare,organizzare,indicizzare
|
||||||
|
|
||||||
home.auto-rename.title=Rinomina automaticamente il file PDF
|
home.auto-rename.title=Rinomina automaticamente il file PDF
|
||||||
home.auto-rename.desc=Rinomina automaticamente un file PDF in base all'intestazione rilevata
|
home.auto-rename.desc=Rinomina automaticamente un file PDF in base all'intestazione rilevata
|
||||||
auto-rename.tags=arilevamento automatico,basato su intestazione,organizzazione,rietichettatura
|
auto-rename.tags=rilevamento automatico,basato su intestazione,organizzazione,rietichettatura
|
||||||
|
|
||||||
home.adjust-contrast.title=Regola colori/contrasto
|
home.adjust-contrast.title=Regola colori/contrasto
|
||||||
home.adjust-contrast.desc=Regola contrasto, saturazione e luminosità di un PDF
|
home.adjust-contrast.desc=Regola contrasto, saturazione e luminosità di un PDF
|
||||||
|
@ -364,7 +367,7 @@ showJS.tags=JS
|
||||||
|
|
||||||
home.autoRedact.title=Redazione automatica
|
home.autoRedact.title=Redazione automatica
|
||||||
home.autoRedact.desc=Redige automaticamente (oscura) il testo in un PDF in base al testo immesso
|
home.autoRedact.desc=Redige automaticamente (oscura) il testo in un PDF in base al testo immesso
|
||||||
showJS.tags=JS
|
autoRedact.tags=Redact,Hide,black out,black,marker,hidden
|
||||||
|
|
||||||
home.tableExtraxt.title=Da PDF a CSV
|
home.tableExtraxt.title=Da PDF a CSV
|
||||||
home.tableExtraxt.desc=Estrae tabelle da un PDF convertendolo in CSV
|
home.tableExtraxt.desc=Estrae tabelle da un PDF convertendolo in CSV
|
||||||
|
@ -384,6 +387,11 @@ home.split-by-sections.title=Dividi PDF per sezioni
|
||||||
home.split-by-sections.desc=Dividi ciascuna pagina di un PDF in sezioni orizzontali e verticali più piccole
|
home.split-by-sections.desc=Dividi ciascuna pagina di un PDF in sezioni orizzontali e verticali più piccole
|
||||||
split-by-sections.tags=Dividi sezione, dividi, personalizza
|
split-by-sections.tags=Dividi sezione, dividi, personalizza
|
||||||
|
|
||||||
|
home.AddStampRequest.title=Aggiungi timbro al PDF
|
||||||
|
home.AddStampRequest.desc=Aggiungi testo o aggiungi timbri immagine nelle posizioni prestabilite
|
||||||
|
AddStampRequest.tags=Timbro, Aggiungi immagine, Centra immagine, Filigrana, PDF, Incorpora, Personalizza
|
||||||
|
|
||||||
|
|
||||||
###########################
|
###########################
|
||||||
# #
|
# #
|
||||||
# WEB PAGES #
|
# WEB PAGES #
|
||||||
|
@ -459,6 +467,37 @@ HTMLToPDF.header=HTML a PDF
|
||||||
HTMLToPDF.help=Accetta file HTML e ZIP contenenti html/css/immagini ecc. richiesti
|
HTMLToPDF.help=Accetta file HTML e ZIP contenenti html/css/immagini ecc. richiesti
|
||||||
HTMLToPDF.submit=Converti
|
HTMLToPDF.submit=Converti
|
||||||
HTMLToPDF.credit=Utilizza WeasyPrint
|
HTMLToPDF.credit=Utilizza WeasyPrint
|
||||||
|
HTMLToPDF.zoom=Livello di zoom per la visualizzazione del sito web.
|
||||||
|
HTMLToPDF.pageWidth=Larghezza della pagina in centimetri. (Vuoto per impostazione predefinita)
|
||||||
|
HTMLToPDF.pageHeight=Altezza della pagina in centimetri. (Vuoto per impostazione predefinita)
|
||||||
|
HTMLToPDF.marginTop=Margine superiore della pagina in millimetri. (Vuoto per impostazione predefinita)
|
||||||
|
HTMLToPDF.marginBottom=Margine inferiore della pagina in millimetri. (Vuoto per impostazione predefinita)
|
||||||
|
HTMLToPDF.marginLeft=Margine sinistro della pagina in millimetri. (Vuoto per impostazione predefinita)
|
||||||
|
HTMLToPDF.marginRight=Margine destro della pagina in millimetri. (Vuoto per impostazione predefinita)
|
||||||
|
HTMLToPDF.printBackground=Rendering dello sfondo dei siti Web.
|
||||||
|
HTMLToPDF.defaultHeader=Abilita intestazione predefinita (nome e numero di pagina)
|
||||||
|
HTMLToPDF.cssMediaType=Cambia il tipo di supporto CSS della pagina.
|
||||||
|
HTMLToPDF.none=Nessuno
|
||||||
|
HTMLToPDF.print=Stampa
|
||||||
|
HTMLToPDF.screen=Schermo
|
||||||
|
|
||||||
|
|
||||||
|
#AddStampRequest
|
||||||
|
AddStampRequest.header=Timbro PDF
|
||||||
|
AddStampRequest.title=Timbro PDF
|
||||||
|
AddStampRequest.stampType=Tipo di timbro
|
||||||
|
AddStampRequest.stampText=Testo del timbro
|
||||||
|
AddStampRequest.stampImage=Immagine del timbro
|
||||||
|
AddStampRequest.alphabet=Alfabeto
|
||||||
|
AddStampRequest.fontSize=Dimensione carattere/immagine
|
||||||
|
AddStampRequest.rotation=Rotazione
|
||||||
|
AddStampRequest.opacity=Opacità
|
||||||
|
AddStampRequest.position=Posizione
|
||||||
|
AddStampRequest.overrideX=Sostituisci la coordinata X
|
||||||
|
AddStampRequest.overrideY=Sostituisci la coordinata Y
|
||||||
|
AddStampRequest.customMargin=Margine personalizzato
|
||||||
|
AddStampRequest.customColor=Colore testo personalizzato
|
||||||
|
AddStampRequest.submit=Invia
|
||||||
|
|
||||||
|
|
||||||
#sanitizePDF
|
#sanitizePDF
|
||||||
|
@ -829,7 +868,6 @@ changeMetadata.keywords=Parole chiave:
|
||||||
changeMetadata.modDate=Data di modifica (yyyy/MM/dd HH:mm:ss):
|
changeMetadata.modDate=Data di modifica (yyyy/MM/dd HH:mm:ss):
|
||||||
changeMetadata.producer=Produttore:
|
changeMetadata.producer=Produttore:
|
||||||
changeMetadata.subject=Oggetto:
|
changeMetadata.subject=Oggetto:
|
||||||
changeMetadata.title=Titolo:
|
|
||||||
changeMetadata.trapped=Trapped:
|
changeMetadata.trapped=Trapped:
|
||||||
changeMetadata.selectText.4=Altre proprietà:
|
changeMetadata.selectText.4=Altre proprietà:
|
||||||
changeMetadata.selectText.5=Aggiungi proprietà personalizzata:
|
changeMetadata.selectText.5=Aggiungi proprietà personalizzata:
|
||||||
|
|
|
@ -11,6 +11,7 @@ imgPrompt=画像を選択
|
||||||
genericSubmit=送信
|
genericSubmit=送信
|
||||||
processTimeWarning=警告:この処理はファイルサイズによって1分程度かかることがあります
|
processTimeWarning=警告:この処理はファイルサイズによって1分程度かかることがあります
|
||||||
pageOrderPrompt=ページ順序 (ページ番号をカンマ区切り又は2n+1のような関数で入力):
|
pageOrderPrompt=ページ順序 (ページ番号をカンマ区切り又は2n+1のような関数で入力):
|
||||||
|
pageSelectionPrompt=Custom Page Selection (Enter a comma-separated list of page numbers 1,5,6 or Functions like 2n+1) :
|
||||||
goToPage=移動
|
goToPage=移動
|
||||||
true=True
|
true=True
|
||||||
false=False
|
false=False
|
||||||
|
@ -42,9 +43,10 @@ red=赤
|
||||||
green=緑
|
green=緑
|
||||||
blue=青
|
blue=青
|
||||||
custom=カスタム...
|
custom=カスタム...
|
||||||
WorkInProgess=Work in progress, May not work or be buggy, Please report any ploblems!
|
WorkInProgess=Work in progress, May not work or be buggy, Please report any problems!
|
||||||
poweredBy=Powered by
|
poweredBy=Powered by
|
||||||
|
yes=Yes
|
||||||
|
no=No
|
||||||
changedCredsMessage=資格情報が変更されました!
|
changedCredsMessage=資格情報が変更されました!
|
||||||
notAuthenticatedMessage=ユーザーが認証されていません。
|
notAuthenticatedMessage=ユーザーが認証されていません。
|
||||||
userNotFoundMessage=ユーザーが見つかりません。
|
userNotFoundMessage=ユーザーが見つかりません。
|
||||||
|
@ -55,23 +57,24 @@ usernameExistsMessage=新しいユーザー名はすでに存在します。
|
||||||
###############
|
###############
|
||||||
# Pipeline #
|
# Pipeline #
|
||||||
###############
|
###############
|
||||||
pipeline.header=Pipeline Menu (Alpha)
|
pipeline.header=パイプラインメニュー (Alpha)
|
||||||
pipeline.uploadButton=Upload Custom
|
pipeline.uploadButton=Upload Custom
|
||||||
pipeline.configureButton=Configure
|
pipeline.configureButton=設定
|
||||||
pipeline.defaultOption=Custom
|
pipeline.defaultOption=カスタム
|
||||||
pipeline.submitButton=Submit
|
pipeline.submitButton=送信
|
||||||
|
|
||||||
######################
|
######################
|
||||||
# Pipeline Options #
|
# Pipeline Options #
|
||||||
######################
|
######################
|
||||||
pipelineOptions.header=Pipeline Configuration
|
pipelineOptions.header=パイプライン設定
|
||||||
pipelineOptions.pipelineNameLabel=Pipeline Name
|
pipelineOptions.pipelineNameLabel=パイプライン名
|
||||||
pipelineOptions.saveSettings=Save Operation Settings
|
pipelineOptions.saveSettings=動作設定の保存
|
||||||
pipelineOptions.pipelineNamePrompt=Enter pipeline name here
|
pipelineOptions.pipelineNamePrompt=ここにパイプライン名を入力
|
||||||
pipelineOptions.addOperationButton=Add operation
|
pipelineOptions.selectOperation=Select Operation
|
||||||
pipelineOptions.pipelineHeader=Pipeline:
|
pipelineOptions.addOperationButton=動作の追加
|
||||||
pipelineOptions.saveButton=Download
|
pipelineOptions.pipelineHeader=パイプライン:
|
||||||
pipelineOptions.validateButton=Validate
|
pipelineOptions.saveButton=ダウンロード
|
||||||
|
pipelineOptions.validateButton=検証
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@ -118,7 +121,7 @@ account.accountSettings=アカウント設定
|
||||||
account.adminSettings=管理者設定 - ユーザーの表示と追加
|
account.adminSettings=管理者設定 - ユーザーの表示と追加
|
||||||
account.userControlSettings=ユーザー制御設定
|
account.userControlSettings=ユーザー制御設定
|
||||||
account.changeUsername=ユーザー名を変更
|
account.changeUsername=ユーザー名を変更
|
||||||
account.changeUsername=ユーザー名を変更
|
account.newUsername=新しいユーザーネーム
|
||||||
account.password=確認用パスワード
|
account.password=確認用パスワード
|
||||||
account.oldPassword=旧パスワード
|
account.oldPassword=旧パスワード
|
||||||
account.newPassword=新パスワード
|
account.newPassword=新パスワード
|
||||||
|
@ -281,8 +284,8 @@ home.removeBlanks.title=空白ページの削除
|
||||||
home.removeBlanks.desc=ドキュメントから空白ページを検出して削除します。
|
home.removeBlanks.desc=ドキュメントから空白ページを検出して削除します。
|
||||||
removeBlanks.tags=cleanup,streamline,non-content,organize
|
removeBlanks.tags=cleanup,streamline,non-content,organize
|
||||||
|
|
||||||
home.removeAnnotations.title=Remove Annotations
|
home.removeAnnotations.title=注釈の削除
|
||||||
home.removeAnnotations.desc=Removes all comments/annotations from a PDF
|
home.removeAnnotations.desc=PDFからすべてのコメント・注釈を削除します。
|
||||||
removeAnnotations.tags=comments,highlight,notes,markup,remove
|
removeAnnotations.tags=comments,highlight,notes,markup,remove
|
||||||
|
|
||||||
home.compare.title=比較
|
home.compare.title=比較
|
||||||
|
@ -364,26 +367,31 @@ showJS.tags=JS
|
||||||
|
|
||||||
home.autoRedact.title=自動塗りつぶし
|
home.autoRedact.title=自動塗りつぶし
|
||||||
home.autoRedact.desc=入力したテキストに基づいてPDF内のテキストを自動で塗りつぶし(黒塗り)します。
|
home.autoRedact.desc=入力したテキストに基づいてPDF内のテキストを自動で塗りつぶし(黒塗り)します。
|
||||||
showJS.tags=JS
|
autoRedact.tags=Redact,Hide,black out,black,marker,hidden
|
||||||
|
|
||||||
home.tableExtraxt.title=PDF to CSV
|
home.tableExtraxt.title=PDFをCSVに変換
|
||||||
home.tableExtraxt.desc=Extracts Tables from a PDF converting it to CSV
|
home.tableExtraxt.desc=PDFから表を抽出しCSVに変換します。
|
||||||
tableExtraxt.tags=CSV,Table Extraction,extract,convert
|
tableExtraxt.tags=CSV,Table Extraction,extract,convert
|
||||||
|
|
||||||
|
|
||||||
home.autoSizeSplitPDF.title=Auto Split by Size/Count
|
home.autoSizeSplitPDF.title=サイズ・数による自動分割
|
||||||
home.autoSizeSplitPDF.desc=Split a single PDF into multiple documents based on size, page count, or document count
|
home.autoSizeSplitPDF.desc=サイズ・ページ数またはドキュメント数に基づいて、1つのPDFを複数のドキュメントに分割します。
|
||||||
autoSizeSplitPDF.tags=pdf,split,document,organization
|
autoSizeSplitPDF.tags=pdf,split,document,organization
|
||||||
|
|
||||||
|
|
||||||
home.overlay-pdfs.title=Overlay PDFs
|
home.overlay-pdfs.title=PDFのオーバーレイ
|
||||||
home.overlay-pdfs.desc=Overlays PDFs on-top of another PDF
|
home.overlay-pdfs.desc=PDFの上に別のPDFを重ねます。
|
||||||
overlay-pdfs.tags=Overlay
|
overlay-pdfs.tags=Overlay
|
||||||
|
|
||||||
home.split-by-sections.title=Split PDF by Sections
|
home.split-by-sections.title=PDFをセクションで分割
|
||||||
home.split-by-sections.desc=Divide each page of a PDF into smaller horizontal and vertical sections
|
home.split-by-sections.desc=PDFの各ページを縦横に分割します。
|
||||||
split-by-sections.tags=Section Split, Divide, Customize
|
split-by-sections.tags=Section Split, Divide, Customize
|
||||||
|
|
||||||
|
home.AddStampRequest.title=Add Stamp to PDF
|
||||||
|
home.AddStampRequest.desc=Add text or add image stamps at set locations
|
||||||
|
AddStampRequest.tags=Stamp, Add image, center image, Watermark, PDF, Embed, Customize
|
||||||
|
|
||||||
|
|
||||||
###########################
|
###########################
|
||||||
# #
|
# #
|
||||||
# WEB PAGES #
|
# WEB PAGES #
|
||||||
|
@ -459,6 +467,37 @@ HTMLToPDF.header=HTMLをPDFに変換
|
||||||
HTMLToPDF.help=HTMLファイルと必要なhtml/css/画像などを含むZIPを受け入れます
|
HTMLToPDF.help=HTMLファイルと必要なhtml/css/画像などを含むZIPを受け入れます
|
||||||
HTMLToPDF.submit=変換
|
HTMLToPDF.submit=変換
|
||||||
HTMLToPDF.credit=WeasyPrintを使用
|
HTMLToPDF.credit=WeasyPrintを使用
|
||||||
|
HTMLToPDF.zoom=Zoom level for displaying the website.
|
||||||
|
HTMLToPDF.pageWidth=Width of the page in centimeters. (Blank to default)
|
||||||
|
HTMLToPDF.pageHeight=Height of the page in centimeters. (Blank to default)
|
||||||
|
HTMLToPDF.marginTop=Top margin of the page in millimeters. (Blank to default)
|
||||||
|
HTMLToPDF.marginBottom=Bottom margin of the page in millimeters. (Blank to default)
|
||||||
|
HTMLToPDF.marginLeft=Left margin of the page in millimeters. (Blank to default)
|
||||||
|
HTMLToPDF.marginRight=Right margin of the page in millimeters. (Blank to default)
|
||||||
|
HTMLToPDF.printBackground=Render the background of websites.
|
||||||
|
HTMLToPDF.defaultHeader=Enable Default Header (Name and page number)
|
||||||
|
HTMLToPDF.cssMediaType=Change the CSS media type of the page.
|
||||||
|
HTMLToPDF.none=None
|
||||||
|
HTMLToPDF.print=Print
|
||||||
|
HTMLToPDF.screen=Screen
|
||||||
|
|
||||||
|
|
||||||
|
#AddStampRequest
|
||||||
|
AddStampRequest.header=Stamp PDF
|
||||||
|
AddStampRequest.title=Stamp PDF
|
||||||
|
AddStampRequest.stampType=Stamp Type
|
||||||
|
AddStampRequest.stampText=Stamp Text
|
||||||
|
AddStampRequest.stampImage=Stamp Image
|
||||||
|
AddStampRequest.alphabet=Alphabet
|
||||||
|
AddStampRequest.fontSize=Font/Image Size
|
||||||
|
AddStampRequest.rotation=Rotation
|
||||||
|
AddStampRequest.opacity=Opacity
|
||||||
|
AddStampRequest.position=Position
|
||||||
|
AddStampRequest.overrideX=Override X Coordinate
|
||||||
|
AddStampRequest.overrideY=Override Y Coordinate
|
||||||
|
AddStampRequest.customMargin=Custom Margin
|
||||||
|
AddStampRequest.customColor=Custom Text Color
|
||||||
|
AddStampRequest.submit=Submit
|
||||||
|
|
||||||
|
|
||||||
#sanitizePDF
|
#sanitizePDF
|
||||||
|
@ -572,8 +611,8 @@ removeBlanks.submit=空白ページの削除
|
||||||
|
|
||||||
|
|
||||||
#removeAnnotations
|
#removeAnnotations
|
||||||
removeAnnotations.title=Remove Annotations
|
removeAnnotations.title=注釈の削除
|
||||||
removeAnnotations.header=Remove Annotations
|
removeAnnotations.header=注釈の削除
|
||||||
removeAnnotations.submit=Remove
|
removeAnnotations.submit=Remove
|
||||||
|
|
||||||
|
|
||||||
|
@ -829,7 +868,6 @@ changeMetadata.keywords=キーワード:
|
||||||
changeMetadata.modDate=変更日 (yyyy/MM/dd HH:mm:ss):
|
changeMetadata.modDate=変更日 (yyyy/MM/dd HH:mm:ss):
|
||||||
changeMetadata.producer=プロデューサー:
|
changeMetadata.producer=プロデューサー:
|
||||||
changeMetadata.subject=主題:
|
changeMetadata.subject=主題:
|
||||||
changeMetadata.title=タイトル:
|
|
||||||
changeMetadata.trapped=トラッピング:
|
changeMetadata.trapped=トラッピング:
|
||||||
changeMetadata.selectText.4=その他のメタデータ:
|
changeMetadata.selectText.4=その他のメタデータ:
|
||||||
changeMetadata.selectText.5=カスタムメタデータの追加
|
changeMetadata.selectText.5=カスタムメタデータの追加
|
||||||
|
@ -881,54 +919,53 @@ PDFToXML.credit=本サービスはファイル変換にLibreOfficeを使用し
|
||||||
PDFToXML.submit=変換
|
PDFToXML.submit=変換
|
||||||
|
|
||||||
#PDFToCSV
|
#PDFToCSV
|
||||||
PDFToCSV.title=PDF??CSV?
|
PDFToCSV.title=PDFをCSVに変換
|
||||||
PDFToCSV.header=PDF??CSV?
|
PDFToCSV.header=PDFをCSVに変換
|
||||||
PDFToCSV.prompt=Choose page to extract table
|
PDFToCSV.prompt=表を抽出するページを選択
|
||||||
PDFToCSV.submit=????
|
PDFToCSV.submit=変換
|
||||||
|
|
||||||
#split-by-size-or-count
|
#split-by-size-or-count
|
||||||
split-by-size-or-count.header=Split PDF by Size or Count
|
split-by-size-or-count.header=サイズまたは数で分割
|
||||||
split-by-size-or-count.type.label=Select Split Type
|
split-by-size-or-count.type.label=分割タイプの選択
|
||||||
split-by-size-or-count.type.size=By Size
|
split-by-size-or-count.type.size=サイズ
|
||||||
split-by-size-or-count.type.pageCount=By Page Count
|
split-by-size-or-count.type.pageCount=ページ数
|
||||||
split-by-size-or-count.type.docCount=By Document Count
|
split-by-size-or-count.type.docCount=ドキュメント数
|
||||||
split-by-size-or-count.value.label=Enter Value
|
split-by-size-or-count.value.label=値の入力
|
||||||
split-by-size-or-count.value.placeholder=Enter size (e.g., 2MB or 3KB) or count (e.g., 5)
|
split-by-size-or-count.value.placeholder=サイズ (例、2MB または 3KB) または数値 (例、5) を入力
|
||||||
split-by-size-or-count.submit=Submit
|
split-by-size-or-count.submit=分割
|
||||||
|
|
||||||
|
|
||||||
#overlay-pdfs
|
#overlay-pdfs
|
||||||
overlay-pdfs.header=Overlay PDF Files
|
overlay-pdfs.header=PDFのオーバーレイ
|
||||||
overlay-pdfs.baseFile.label=Select Base PDF File
|
overlay-pdfs.baseFile.label=ベースのPDFを選択
|
||||||
overlay-pdfs.overlayFiles.label=Select Overlay PDF Files
|
overlay-pdfs.overlayFiles.label=重ねるPDFを選択
|
||||||
overlay-pdfs.mode.label=Select Overlay Mode
|
overlay-pdfs.mode.label=オーバーレイモードの選択
|
||||||
overlay-pdfs.mode.sequential=Sequential Overlay
|
overlay-pdfs.mode.sequential=シーケンシャル・オーバーレイ
|
||||||
overlay-pdfs.mode.interleaved=Interleaved Overlay
|
overlay-pdfs.mode.interleaved=インターリーブ・オーバーレイ
|
||||||
overlay-pdfs.mode.fixedRepeat=Fixed Repeat Overlay
|
overlay-pdfs.mode.fixedRepeat=固定リピート・オーバーレイ
|
||||||
overlay-pdfs.counts.label=Overlay Counts (for Fixed Repeat Mode)
|
overlay-pdfs.counts.label=オーバーレイ回数 (固定リピートモード用)
|
||||||
overlay-pdfs.counts.placeholder=Enter comma-separated counts (e.g., 2,3,1)
|
overlay-pdfs.counts.placeholder=カンマ区切りでカウントを入力 (例、2,3,1)
|
||||||
overlay-pdfs.position.label=Select Overlay Position
|
overlay-pdfs.position.label=重ね位置の選択
|
||||||
overlay-pdfs.position.foreground=Foreground
|
overlay-pdfs.position.foreground=前面
|
||||||
overlay-pdfs.position.background=Background
|
overlay-pdfs.position.background=背面
|
||||||
overlay-pdfs.submit=Submit
|
overlay-pdfs.submit=重ねる
|
||||||
|
|
||||||
|
|
||||||
#split-by-sections
|
#split-by-sections
|
||||||
split-by-sections.title=Split PDF by Sections
|
split-by-sections.title=セクションごとにPDFを分割する
|
||||||
split-by-sections.header=Split PDF into Sections
|
split-by-sections.header=PDFをセクションに分割
|
||||||
split-by-sections.horizontal.label=Horizontal Divisions
|
split-by-sections.horizontal.label=水平方向
|
||||||
split-by-sections.vertical.label=Vertical Divisions
|
split-by-sections.vertical.label=垂直方向
|
||||||
split-by-sections.horizontal.placeholder=Enter number of horizontal divisions
|
split-by-sections.horizontal.placeholder=水平方向の分割数を選択
|
||||||
split-by-sections.vertical.placeholder=Enter number of vertical divisions
|
split-by-sections.vertical.placeholder=垂直方向の分割数を選択
|
||||||
split-by-sections.submit=Split PDF
|
split-by-sections.submit=分割
|
||||||
|
|
||||||
|
|
||||||
#licenses
|
#licenses
|
||||||
licenses.nav=Licenses
|
licenses.nav=ライセンス
|
||||||
licenses.title=3rd Party Licenses
|
licenses.title=サードパーティライセンス
|
||||||
licenses.header=3rd Party Licenses
|
licenses.header=サードパーティライセンス
|
||||||
licenses.module=Module
|
licenses.module=モジュール
|
||||||
licenses.version=Version
|
licenses.version=バージョン
|
||||||
licenses.license=License
|
licenses.license=ライセンス
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -11,6 +11,7 @@ imgPrompt=이미지 선택
|
||||||
genericSubmit=확인
|
genericSubmit=확인
|
||||||
processTimeWarning=경고: 파일 크기에 따라 1분 정도 소요될 수 있습니다
|
processTimeWarning=경고: 파일 크기에 따라 1분 정도 소요될 수 있습니다
|
||||||
pageOrderPrompt=페이지 순서(쉼표로 구분된 페이지 번호 목록 입력):
|
pageOrderPrompt=페이지 순서(쉼표로 구분된 페이지 번호 목록 입력):
|
||||||
|
pageSelectionPrompt=Custom Page Selection (Enter a comma-separated list of page numbers 1,5,6 or Functions like 2n+1) :
|
||||||
goToPage=이동
|
goToPage=이동
|
||||||
true=참
|
true=참
|
||||||
false=거짓
|
false=거짓
|
||||||
|
@ -42,9 +43,10 @@ red=Red
|
||||||
green=Green
|
green=Green
|
||||||
blue=Blue
|
blue=Blue
|
||||||
custom=Custom...
|
custom=Custom...
|
||||||
WorkInProgess=Work in progress, May not work or be buggy, Please report any ploblems!
|
WorkInProgess=Work in progress, May not work or be buggy, Please report any problems!
|
||||||
poweredBy=Powered by
|
poweredBy=Powered by
|
||||||
|
yes=Yes
|
||||||
|
no=No
|
||||||
changedCredsMessage=계정 정보 변경 성공!
|
changedCredsMessage=계정 정보 변경 성공!
|
||||||
notAuthenticatedMessage=User not authenticated.
|
notAuthenticatedMessage=User not authenticated.
|
||||||
userNotFoundMessage=사용자를 찾을 수 없습니다.
|
userNotFoundMessage=사용자를 찾을 수 없습니다.
|
||||||
|
@ -68,6 +70,7 @@ pipelineOptions.header=Pipeline Configuration
|
||||||
pipelineOptions.pipelineNameLabel=Pipeline Name
|
pipelineOptions.pipelineNameLabel=Pipeline Name
|
||||||
pipelineOptions.saveSettings=Save Operation Settings
|
pipelineOptions.saveSettings=Save Operation Settings
|
||||||
pipelineOptions.pipelineNamePrompt=Enter pipeline name here
|
pipelineOptions.pipelineNamePrompt=Enter pipeline name here
|
||||||
|
pipelineOptions.selectOperation=Select Operation
|
||||||
pipelineOptions.addOperationButton=Add operation
|
pipelineOptions.addOperationButton=Add operation
|
||||||
pipelineOptions.pipelineHeader=Pipeline:
|
pipelineOptions.pipelineHeader=Pipeline:
|
||||||
pipelineOptions.saveButton=Download
|
pipelineOptions.saveButton=Download
|
||||||
|
@ -118,7 +121,7 @@ account.accountSettings=계정 설정
|
||||||
account.adminSettings=관리자 설정 - 사용자 추가 및 확인
|
account.adminSettings=관리자 설정 - 사용자 추가 및 확인
|
||||||
account.userControlSettings=User Control Settings
|
account.userControlSettings=User Control Settings
|
||||||
account.changeUsername=사용자명 변경
|
account.changeUsername=사용자명 변경
|
||||||
account.changeUsername=사용자명 변경
|
account.newUsername=새 사용자 이름
|
||||||
account.password=Confirmation Password
|
account.password=Confirmation Password
|
||||||
account.oldPassword=이전 비밀번호
|
account.oldPassword=이전 비밀번호
|
||||||
account.newPassword=새 비밀번호
|
account.newPassword=새 비밀번호
|
||||||
|
@ -364,7 +367,7 @@ showJS.tags=JS
|
||||||
|
|
||||||
home.autoRedact.title=자동 검열
|
home.autoRedact.title=자동 검열
|
||||||
home.autoRedact.desc=PDF 문서에서 입력된 텍스트들을 자동으로 검열(모자이크)합니다.
|
home.autoRedact.desc=PDF 문서에서 입력된 텍스트들을 자동으로 검열(모자이크)합니다.
|
||||||
showJS.tags=JS
|
autoRedact.tags=Redact,Hide,black out,black,marker,hidden
|
||||||
|
|
||||||
home.tableExtraxt.title=PDF to CSV
|
home.tableExtraxt.title=PDF to CSV
|
||||||
home.tableExtraxt.desc=Extracts Tables from a PDF converting it to CSV
|
home.tableExtraxt.desc=Extracts Tables from a PDF converting it to CSV
|
||||||
|
@ -384,6 +387,11 @@ home.split-by-sections.title=Split PDF by Sections
|
||||||
home.split-by-sections.desc=Divide each page of a PDF into smaller horizontal and vertical sections
|
home.split-by-sections.desc=Divide each page of a PDF into smaller horizontal and vertical sections
|
||||||
split-by-sections.tags=Section Split, Divide, Customize
|
split-by-sections.tags=Section Split, Divide, Customize
|
||||||
|
|
||||||
|
home.AddStampRequest.title=Add Stamp to PDF
|
||||||
|
home.AddStampRequest.desc=Add text or add image stamps at set locations
|
||||||
|
AddStampRequest.tags=Stamp, Add image, center image, Watermark, PDF, Embed, Customize
|
||||||
|
|
||||||
|
|
||||||
###########################
|
###########################
|
||||||
# #
|
# #
|
||||||
# WEB PAGES #
|
# WEB PAGES #
|
||||||
|
@ -459,6 +467,37 @@ HTMLToPDF.header=HTML 파일을 PDF 문서로 변환
|
||||||
HTMLToPDF.help=HTML 파일, 또는 html/css/이미지 등을 포함한 ZIP 파일을 받습니다.
|
HTMLToPDF.help=HTML 파일, 또는 html/css/이미지 등을 포함한 ZIP 파일을 받습니다.
|
||||||
HTMLToPDF.submit=변환
|
HTMLToPDF.submit=변환
|
||||||
HTMLToPDF.credit=이 기능은 WeasyPrint를 사용합니다.
|
HTMLToPDF.credit=이 기능은 WeasyPrint를 사용합니다.
|
||||||
|
HTMLToPDF.zoom=Zoom level for displaying the website.
|
||||||
|
HTMLToPDF.pageWidth=Width of the page in centimeters. (Blank to default)
|
||||||
|
HTMLToPDF.pageHeight=Height of the page in centimeters. (Blank to default)
|
||||||
|
HTMLToPDF.marginTop=Top margin of the page in millimeters. (Blank to default)
|
||||||
|
HTMLToPDF.marginBottom=Bottom margin of the page in millimeters. (Blank to default)
|
||||||
|
HTMLToPDF.marginLeft=Left margin of the page in millimeters. (Blank to default)
|
||||||
|
HTMLToPDF.marginRight=Right margin of the page in millimeters. (Blank to default)
|
||||||
|
HTMLToPDF.printBackground=Render the background of websites.
|
||||||
|
HTMLToPDF.defaultHeader=Enable Default Header (Name and page number)
|
||||||
|
HTMLToPDF.cssMediaType=Change the CSS media type of the page.
|
||||||
|
HTMLToPDF.none=None
|
||||||
|
HTMLToPDF.print=Print
|
||||||
|
HTMLToPDF.screen=Screen
|
||||||
|
|
||||||
|
|
||||||
|
#AddStampRequest
|
||||||
|
AddStampRequest.header=Stamp PDF
|
||||||
|
AddStampRequest.title=Stamp PDF
|
||||||
|
AddStampRequest.stampType=Stamp Type
|
||||||
|
AddStampRequest.stampText=Stamp Text
|
||||||
|
AddStampRequest.stampImage=Stamp Image
|
||||||
|
AddStampRequest.alphabet=Alphabet
|
||||||
|
AddStampRequest.fontSize=Font/Image Size
|
||||||
|
AddStampRequest.rotation=Rotation
|
||||||
|
AddStampRequest.opacity=Opacity
|
||||||
|
AddStampRequest.position=Position
|
||||||
|
AddStampRequest.overrideX=Override X Coordinate
|
||||||
|
AddStampRequest.overrideY=Override Y Coordinate
|
||||||
|
AddStampRequest.customMargin=Custom Margin
|
||||||
|
AddStampRequest.customColor=Custom Text Color
|
||||||
|
AddStampRequest.submit=Submit
|
||||||
|
|
||||||
|
|
||||||
#sanitizePDF
|
#sanitizePDF
|
||||||
|
@ -829,7 +868,6 @@ changeMetadata.keywords=키워드:
|
||||||
changeMetadata.modDate=수정일 (yyyy/MM/dd HH:mm:ss):
|
changeMetadata.modDate=수정일 (yyyy/MM/dd HH:mm:ss):
|
||||||
changeMetadata.producer=생성자:
|
changeMetadata.producer=생성자:
|
||||||
changeMetadata.subject=주제:
|
changeMetadata.subject=주제:
|
||||||
changeMetadata.title=제목:
|
|
||||||
changeMetadata.trapped=잠긴 상태:
|
changeMetadata.trapped=잠긴 상태:
|
||||||
changeMetadata.selectText.4=기타 메타데이터:
|
changeMetadata.selectText.4=기타 메타데이터:
|
||||||
changeMetadata.selectText.5=사용자 정의 메타데이터 항목 추가
|
changeMetadata.selectText.5=사용자 정의 메타데이터 항목 추가
|
||||||
|
|
|
@ -4,13 +4,14 @@
|
||||||
# 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=Selecteer PDF(s)
|
pdfPrompt=Selecteer PDF('s)
|
||||||
multiPdfPrompt=Selecteer PDFs (2+)
|
multiPdfPrompt=Selecteer PDF's (2+)
|
||||||
multiPdfDropPrompt=Selecteer (of sleep & zet neer) alle PDFs die je nodig hebt
|
multiPdfDropPrompt=Selecteer (of sleep & zet neer) alle PDF's die je nodig hebt
|
||||||
imgPrompt=Selecteer afbeelding(en)
|
imgPrompt=Selecteer afbeelding(en)
|
||||||
genericSubmit=Indienen
|
genericSubmit=Indienen
|
||||||
processTimeWarning=Waarschuwing: Dit proces kan tot een minuut duren afhankelijk van de bestandsgrootte
|
processTimeWarning=Waarschuwing: Dit proces kan tot een minuut duren afhankelijk van de bestandsgrootte
|
||||||
pageOrderPrompt=Aangepaste pagina volgorde (Voer een komma-gescheiden lijst van paginanummers of functies in, zoals 2n+1) :
|
pageOrderPrompt=Aangepaste pagina volgorde (Voer een komma-gescheiden lijst van paginanummers of functies in, zoals 2n+1) :
|
||||||
|
pageSelectionPrompt=Custom Page Selection (Enter a comma-separated list of page numbers 1,5,6 or Functions like 2n+1) :
|
||||||
goToPage=Ga
|
goToPage=Ga
|
||||||
true=Waar
|
true=Waar
|
||||||
false=Onwaar
|
false=Onwaar
|
||||||
|
@ -29,49 +30,51 @@ pageNum=Paginanummer
|
||||||
sizes.small=Klein
|
sizes.small=Klein
|
||||||
sizes.medium=Medium
|
sizes.medium=Medium
|
||||||
sizes.large=Groot
|
sizes.large=Groot
|
||||||
sizes.x-large=Extra Groot
|
sizes.x-large=Extra groot
|
||||||
error.pdfPassword=Het PDF document is beveiligd met een wachtwoord en het wachtwoord is niet ingevoerd of was onjuist
|
error.pdfPassword=Het PDF document is beveiligd met een wachtwoord en het wachtwoord is niet ingevoerd of is onjuist
|
||||||
delete=Verwijderen
|
delete=Verwijderen
|
||||||
username=Gebruikersnaam
|
username=Gebruikersnaam
|
||||||
password=Wachtwoord
|
password=Wachtwoord
|
||||||
welcome=Welkom
|
welcome=Welkom
|
||||||
property=Property
|
property=Eigenschap
|
||||||
black=Black
|
black=Zwart
|
||||||
white=White
|
white=Wit
|
||||||
red=Red
|
red=Rood
|
||||||
green=Green
|
green=Groen
|
||||||
blue=Blue
|
blue=Blauw
|
||||||
custom=Custom...
|
custom=Aangepast...
|
||||||
WorkInProgess=Work in progress, May not work or be buggy, Please report any ploblems!
|
WorkInProgess=Werk in uitvoering. Werkt mogelijk niet of bevat fouten. Meld eventuele problemen!
|
||||||
poweredBy=Powered by
|
poweredBy=Mogelijk gemaakt door
|
||||||
|
yes=Ja
|
||||||
changedCredsMessage=Credentials changed!
|
no=Nee
|
||||||
notAuthenticatedMessage=User not authenticated.
|
changedCredsMessage=Inloggegevens gewijzigd!
|
||||||
userNotFoundMessage=User not found.
|
notAuthenticatedMessage=Gebruiker niet ingelogd.
|
||||||
incorrectPasswordMessage=Current password is incorrect.
|
userNotFoundMessage=Gebruiker niet gevonden.
|
||||||
usernameExistsMessage=New Username already exists.
|
incorrectPasswordMessage=Huidige wachtwoord is onjuist.
|
||||||
|
usernameExistsMessage=Nieuwe gebruikersnaam bestaat al.
|
||||||
|
|
||||||
|
|
||||||
###############
|
###############
|
||||||
# Pipeline #
|
# Pipeline #
|
||||||
###############
|
###############
|
||||||
pipeline.header=Pipeline Menu (Alpha)
|
pipeline.header=Pijplijn menu (Alpha)
|
||||||
pipeline.uploadButton=Upload Custom
|
pipeline.uploadButton=Aangepast uploaden
|
||||||
pipeline.configureButton=Configure
|
pipeline.configureButton=Configureren
|
||||||
pipeline.defaultOption=Custom
|
pipeline.defaultOption=Aangepast
|
||||||
pipeline.submitButton=Submit
|
pipeline.submitButton=Opslaan
|
||||||
|
|
||||||
######################
|
######################
|
||||||
# Pipeline Options #
|
# Pipeline Options #
|
||||||
######################
|
######################
|
||||||
pipelineOptions.header=Pipeline Configuration
|
pipelineOptions.header=Pijplijn configuratie
|
||||||
pipelineOptions.pipelineNameLabel=Pipeline Name
|
pipelineOptions.pipelineNameLabel=Pijplijn naam
|
||||||
pipelineOptions.saveSettings=Save Operation Settings
|
pipelineOptions.saveSettings=Instellingen voor bewerking opslaan
|
||||||
pipelineOptions.pipelineNamePrompt=Enter pipeline name here
|
pipelineOptions.pipelineNamePrompt=Voer hier de naam van de pijplijn in
|
||||||
pipelineOptions.addOperationButton=Add operation
|
pipelineOptions.selectOperation=Selecteer bewerking
|
||||||
pipelineOptions.pipelineHeader=Pipeline:
|
pipelineOptions.addOperationButton=Bewerking toevoegen
|
||||||
pipelineOptions.saveButton=Download
|
pipelineOptions.pipelineHeader=Pijplijn:
|
||||||
pipelineOptions.validateButton=Validate
|
pipelineOptions.saveButton=Downloaden
|
||||||
|
pipelineOptions.validateButton=Valideren
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@ -83,7 +86,7 @@ navbar.convert=Converteren
|
||||||
navbar.security=Beveiliging
|
navbar.security=Beveiliging
|
||||||
navbar.other=Overige
|
navbar.other=Overige
|
||||||
navbar.darkmode=Donkere modus
|
navbar.darkmode=Donkere modus
|
||||||
navbar.pageOps=Pagina operaties
|
navbar.pageOps=Pagina bewerkingen
|
||||||
navbar.settings=Instellingen
|
navbar.settings=Instellingen
|
||||||
|
|
||||||
#############
|
#############
|
||||||
|
@ -96,20 +99,20 @@ settings.downloadOption.title=Kies download optie (Voor enkelvoudige bestanddown
|
||||||
settings.downloadOption.1=Open in hetzelfde venster
|
settings.downloadOption.1=Open in hetzelfde venster
|
||||||
settings.downloadOption.2=Open in nieuw venster
|
settings.downloadOption.2=Open in nieuw venster
|
||||||
settings.downloadOption.3=Download bestand
|
settings.downloadOption.3=Download bestand
|
||||||
settings.zipThreshold=Zip bestanden wanneer het aantal gedownloade bestanden overschrijdt
|
settings.zipThreshold=Bestanden zippen wanneer het aantal gedownloade bestanden meer is dan
|
||||||
settings.signOut=Uitloggen
|
settings.signOut=Uitloggen
|
||||||
settings.accountSettings=Account instellingen
|
settings.accountSettings=Account instellingen
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
changeCreds.title=Change Credentials
|
changeCreds.title=Inloggegevens wijzigen
|
||||||
changeCreds.header=Update Your Account Details
|
changeCreds.header=Werk je accountgegevens bij
|
||||||
changeCreds.changeUserAndPassword=You are using default login credentials. Please enter a new password (and username if wanted)
|
changeCreds.changeUserAndPassword=Je gebruikt de standaard inloggegevens. Voer een nieuw wachtwoord in (en eventueel een gebruikersnaam)
|
||||||
changeCreds.newUsername=New Username
|
changeCreds.newUsername=Nieuwe gebruikersnaam
|
||||||
changeCreds.oldPassword=Current Password
|
changeCreds.oldPassword=Huidige wachtwoord
|
||||||
changeCreds.newPassword=New Password
|
changeCreds.newPassword=Nieuw wachtwoord
|
||||||
changeCreds.confirmNewPassword=Confirm New Password
|
changeCreds.confirmNewPassword=Bevestig nieuw wachtwoord
|
||||||
changeCreds.submit=Submit Changes
|
changeCreds.submit=Wijzigingen opslaan
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@ -118,7 +121,7 @@ account.accountSettings=Account instellingen
|
||||||
account.adminSettings=Beheerdersinstellingen - Gebruikers bekijken en toevoegen
|
account.adminSettings=Beheerdersinstellingen - Gebruikers bekijken en toevoegen
|
||||||
account.userControlSettings=Gebruikerscontrole instellingen
|
account.userControlSettings=Gebruikerscontrole instellingen
|
||||||
account.changeUsername=Wijzig gebruikersnaam
|
account.changeUsername=Wijzig gebruikersnaam
|
||||||
account.changeUsername=Wijzig gebruikersnaam
|
account.newUsername=Nieuwe gebruikersnaam
|
||||||
account.password=Bevestigingswachtwoord
|
account.password=Bevestigingswachtwoord
|
||||||
account.oldPassword=Oud wachtwoord
|
account.oldPassword=Oud wachtwoord
|
||||||
account.newPassword=Nieuw wachtwoord
|
account.newPassword=Nieuw wachtwoord
|
||||||
|
@ -129,13 +132,13 @@ account.yourApiKey=Jouw API sleutel
|
||||||
account.syncTitle=Synchroniseer browserinstellingen met account
|
account.syncTitle=Synchroniseer browserinstellingen met account
|
||||||
account.settingsCompare=Instellingen vergelijking:
|
account.settingsCompare=Instellingen vergelijking:
|
||||||
account.property=Eigenschap
|
account.property=Eigenschap
|
||||||
account.webBrowserSettings=Web Browser instelling
|
account.webBrowserSettings=Webbrowser instelling
|
||||||
account.syncToBrowser=Synchroniseer account -> browser
|
account.syncToBrowser=Synchroniseer account -> browser
|
||||||
account.syncToAccount=Synchroniseer account <- browser
|
account.syncToAccount=Synchroniseer account <- browser
|
||||||
|
|
||||||
|
|
||||||
adminUserSettings.title=Gebruikerscontrole instellingen
|
adminUserSettings.title=Gebruikersbeheer
|
||||||
adminUserSettings.header=Beheer Gebruikerscontrole instellingen
|
adminUserSettings.header=Beheer gebruikers
|
||||||
adminUserSettings.admin=Beheerder
|
adminUserSettings.admin=Beheerder
|
||||||
adminUserSettings.user=Gebruiker
|
adminUserSettings.user=Gebruiker
|
||||||
adminUserSettings.addUser=Voeg nieuwe gebruiker toe
|
adminUserSettings.addUser=Voeg nieuwe gebruiker toe
|
||||||
|
@ -144,35 +147,35 @@ adminUserSettings.role=Rol
|
||||||
adminUserSettings.actions=Acties
|
adminUserSettings.actions=Acties
|
||||||
adminUserSettings.apiUser=Beperkte API gebruiker
|
adminUserSettings.apiUser=Beperkte API gebruiker
|
||||||
adminUserSettings.webOnlyUser=Alleen web gebruiker
|
adminUserSettings.webOnlyUser=Alleen web gebruiker
|
||||||
adminUserSettings.demoUser=Demo User (No custom settings)
|
adminUserSettings.demoUser=Demogebruiker (geen aangepaste instellingen)
|
||||||
adminUserSettings.forceChange=Force user to change username/password on login
|
adminUserSettings.forceChange=Forceer gebruiker om gebruikersnaam/wachtwoord te wijzigen bij inloggen
|
||||||
adminUserSettings.submit=Sla gebruiker op
|
adminUserSettings.submit=Gebruiker opslaan
|
||||||
|
|
||||||
#############
|
#############
|
||||||
# HOME-PAGE #
|
# HOME-PAGE #
|
||||||
#############
|
#############
|
||||||
home.desc=Jouw lokaal gehoste one-stop-shop voor al je PDF-behoeften.
|
home.desc=Jouw lokaal gehoste one-stop-shop voor al je PDF-behoeften.
|
||||||
home.searchBar=Search for features...
|
home.searchBar=Zoeken naar functies...
|
||||||
|
|
||||||
|
|
||||||
home.viewPdf.title=View PDF
|
home.viewPdf.title=PDF bekijken
|
||||||
home.viewPdf.desc=View, annotate, add text or images
|
home.viewPdf.desc=Bekijk, annoteer, voeg tekst of afbeeldingen toe
|
||||||
viewPdf.tags=view,read,annotate,text,image
|
viewPdf.tags=bekijken,lezen,annoteren,tekst,afbeelding
|
||||||
|
|
||||||
home.multiTool.title=PDF Multitool
|
home.multiTool.title=PDF multitool
|
||||||
home.multiTool.desc=Samenvoegen, draaien, herschikken en pagina''s verwijderen
|
home.multiTool.desc=Pagina's samenvoegen, draaien, herschikken en verwijderen
|
||||||
multiTool.tags=Multitool,Multi bewerking,UI,klik sleep,voorkant,clientzijde,interactief,beweegbaar,verplaats
|
multiTool.tags=Multitool,Multi bewerking,UI,klik sleep,voorkant,clientzijde,interactief,beweegbaar,verplaats
|
||||||
|
|
||||||
home.merge.title=Samenvoegen
|
home.merge.title=Samenvoegen
|
||||||
home.merge.desc=Voeg eenvoudig meerdere PDF''s samen tot één.
|
home.merge.desc=Voeg eenvoudig meerdere PDF's samen tot één.
|
||||||
merge.tags=samenvoegen,Pagina operaties,Serverkant
|
merge.tags=samenvoegen,Pagina bewerkingen,Serverkant
|
||||||
|
|
||||||
home.split.title=Splitsen
|
home.split.title=Splitsen
|
||||||
home.split.desc=Splits PDF''s in meerdere documenten
|
home.split.desc=Splits PDF's in meerdere documenten
|
||||||
split.tags=Pagina operaties,verdelen,meerdere pagina''s,knippen,serverzijde
|
split.tags=Pagina bewerkingen,verdelen,meerdere pagina's,knippen,serverzijde
|
||||||
|
|
||||||
home.rotate.title=Roteren
|
home.rotate.title=Roteren
|
||||||
home.rotate.desc=Roteer eenvoudig je PDF''s.
|
home.rotate.desc=Roteer eenvoudig je PDF's.
|
||||||
rotate.tags=serverzijde
|
rotate.tags=serverzijde
|
||||||
|
|
||||||
|
|
||||||
|
@ -185,7 +188,7 @@ home.pdfToImage.desc=Converteer een PDF naar een afbeelding. (PNG, JPEG, GIF)
|
||||||
pdfToImage.tags=conversie,img,jpg,foto
|
pdfToImage.tags=conversie,img,jpg,foto
|
||||||
|
|
||||||
home.pdfOrganiser.title=Organiseren
|
home.pdfOrganiser.title=Organiseren
|
||||||
home.pdfOrganiser.desc=Verwijder/Herschik pagina''s in een volgorde naar keus
|
home.pdfOrganiser.desc=Verwijder/herschik pagina's in een volgorde naar keus
|
||||||
pdfOrganiser.tags=duplex,even oneven,sorteren,verplaatsen
|
pdfOrganiser.tags=duplex,even oneven,sorteren,verplaatsen
|
||||||
|
|
||||||
|
|
||||||
|
@ -203,8 +206,8 @@ permissions.tags=lezen,schrijven,bewerken,printen
|
||||||
|
|
||||||
|
|
||||||
home.removePages.title=Verwijderen
|
home.removePages.title=Verwijderen
|
||||||
home.removePages.desc=Verwijder ongewenste pagina''s uit je PDF-document.
|
home.removePages.desc=Verwijder ongewenste pagina's uit je PDF-document.
|
||||||
removePages.tags=Pagina''s verwijderen
|
removePages.tags=Pagina's verwijderen
|
||||||
|
|
||||||
home.addPassword.title=Wachtwoord toevoegen
|
home.addPassword.title=Wachtwoord toevoegen
|
||||||
home.addPassword.desc=Versleutel je PDF-document met een wachtwoord.
|
home.addPassword.desc=Versleutel je PDF-document met een wachtwoord.
|
||||||
|
@ -215,12 +218,12 @@ home.removePassword.desc=Verwijder wachtwoordbeveiliging van je PDF-document.
|
||||||
removePassword.tags=veilig,Decrypteren,beveiliging,wachtwoord verwijderen
|
removePassword.tags=veilig,Decrypteren,beveiliging,wachtwoord verwijderen
|
||||||
|
|
||||||
home.compressPdfs.title=Comprimeren
|
home.compressPdfs.title=Comprimeren
|
||||||
home.compressPdfs.desc=Comprimeer PDFs om hun bestandsgrootte te verkleinen.
|
home.compressPdfs.desc=Comprimeer PDF's om hun bestandsgrootte te verkleinen.
|
||||||
compressPdfs.tags=comprimeren,klein
|
compressPdfs.tags=comprimeren,klein
|
||||||
|
|
||||||
|
|
||||||
home.changeMetadata.title=Metadata wijzigen
|
home.changeMetadata.title=Metadata wijzigen
|
||||||
home.changeMetadata.desc=Wijzig/Verwijder/Voeg metadata toe van een PDF-document
|
home.changeMetadata.desc=Wijzig/verwijder/voeg metadata toe van een PDF-document
|
||||||
changeMetadata.tags=Titel,auteur,datum,creatie,tijd,uitgever,producent,statistieken
|
changeMetadata.tags=Titel,auteur,datum,creatie,tijd,uitgever,producent,statistieken
|
||||||
|
|
||||||
home.fileToPDF.title=Bestand naar PDF converteren
|
home.fileToPDF.title=Bestand naar PDF converteren
|
||||||
|
@ -261,8 +264,8 @@ home.PDFToXML.title=PDF naar XML
|
||||||
home.PDFToXML.desc=Converteer PDF naar XML formaat
|
home.PDFToXML.desc=Converteer PDF naar XML formaat
|
||||||
PDFToXML.tags=data-extractie,gestructureerd,code
|
PDFToXML.tags=data-extractie,gestructureerd,code
|
||||||
|
|
||||||
home.ScannerImageSplit.title=Detecteer/Split gescande foto''s
|
home.ScannerImageSplit.title=Detecteer/Split gescande foto's
|
||||||
home.ScannerImageSplit.desc=Splits meerdere foto''s van binnen een foto/PDF
|
home.ScannerImageSplit.desc=Splits meerdere foto's van binnen een foto/PDF
|
||||||
ScannerImageSplit.tags=scheiden,auto-detecteren,scans,meer-foto,organiseren
|
ScannerImageSplit.tags=scheiden,auto-detecteren,scans,meer-foto,organiseren
|
||||||
|
|
||||||
home.sign.title=Ondertekenen
|
home.sign.title=Ondertekenen
|
||||||
|
@ -277,16 +280,16 @@ home.repair.title=Repareren
|
||||||
home.repair.desc=Probeert een corrupt/beschadigd PDF te herstellen
|
home.repair.desc=Probeert een corrupt/beschadigd PDF te herstellen
|
||||||
repair.tags=repareren,herstellen,correctie,terughalen
|
repair.tags=repareren,herstellen,correctie,terughalen
|
||||||
|
|
||||||
home.removeBlanks.title=Verwijder lege pagina''s
|
home.removeBlanks.title=Verwijder lege pagina's
|
||||||
home.removeBlanks.desc=Detecteert en verwijdert lege pagina''s uit een document
|
home.removeBlanks.desc=Detecteert en verwijdert lege pagina's uit een document
|
||||||
removeBlanks.tags=opruimen,stroomlijnen,geen-inhoud,organiseren
|
removeBlanks.tags=opruimen,stroomlijnen,geen-inhoud,organiseren
|
||||||
|
|
||||||
home.removeAnnotations.title=Remove Annotations
|
home.removeAnnotations.title=Annotaties verwijderen
|
||||||
home.removeAnnotations.desc=Removes all comments/annotations from a PDF
|
home.removeAnnotations.desc=Verwijdert alle opmerkingen/annotaties uit een PDF
|
||||||
removeAnnotations.tags=comments,highlight,notes,markup,remove
|
removeAnnotations.tags=opmerkingen,highlight,notities,opmaak,verwijderen
|
||||||
|
|
||||||
home.compare.title=Vergelijken
|
home.compare.title=Vergelijken
|
||||||
home.compare.desc=Vergelijkt en toont de verschillen tussen 2 PDF-documenten
|
home.compare.desc=Vergelijkt en toont de verschillen tussen twee PDF-documenten
|
||||||
compare.tags=onderscheiden,contrasteren,veranderingen,analyse
|
compare.tags=onderscheiden,contrasteren,veranderingen,analyse
|
||||||
|
|
||||||
home.certSign.title=Ondertekenen met certificaat
|
home.certSign.title=Ondertekenen met certificaat
|
||||||
|
@ -294,7 +297,7 @@ home.certSign.desc=Ondertekent een PDF met een certificaat/sleutel (PEM/P12)
|
||||||
certSign.tags=authenticeren,PEM,P12,officieel,versleutelen
|
certSign.tags=authenticeren,PEM,P12,officieel,versleutelen
|
||||||
|
|
||||||
home.pageLayout.title=Multi-pagina indeling
|
home.pageLayout.title=Multi-pagina indeling
|
||||||
home.pageLayout.desc=Voeg meerdere pagina''s van een PDF-document samen op één pagina
|
home.pageLayout.desc=Voeg meerdere pagina's van een PDF-document samen op één pagina
|
||||||
pageLayout.tags=samenvoegen,composiet,enkel-zicht,organiseren
|
pageLayout.tags=samenvoegen,composiet,enkel-zicht,organiseren
|
||||||
|
|
||||||
home.scalePages.title=Aanpassen paginaformaat/schaal
|
home.scalePages.title=Aanpassen paginaformaat/schaal
|
||||||
|
@ -302,7 +305,7 @@ home.scalePages.desc=Wijzig de grootte/schaal van een pagina en/of de inhoud erv
|
||||||
scalePages.tags=resize,aanpassen,dimensie,aanpassen
|
scalePages.tags=resize,aanpassen,dimensie,aanpassen
|
||||||
|
|
||||||
home.pipeline.title=Pijplijn (Geavanceerd)
|
home.pipeline.title=Pijplijn (Geavanceerd)
|
||||||
home.pipeline.desc=Voer meerdere acties uit op PDF''s door pipelinescripts te definiëren
|
home.pipeline.desc=Voer meerdere acties uit op PDF's door pipelinescripts te definiëren
|
||||||
pipeline.tags=automatiseren,volgorde,gescrript,batch-verwerking
|
pipeline.tags=automatiseren,volgorde,gescrript,batch-verwerking
|
||||||
|
|
||||||
home.add-page-numbers.title=Paginanummers toevoegen
|
home.add-page-numbers.title=Paginanummers toevoegen
|
||||||
|
@ -313,15 +316,15 @@ home.auto-rename.title=Automatisch hernoemen PDF-bestand
|
||||||
home.auto-rename.desc=Hernoemt automatisch een PDF-bestand op basis van de gedetecteerde header
|
home.auto-rename.desc=Hernoemt automatisch een PDF-bestand op basis van de gedetecteerde header
|
||||||
auto-rename.tags=auto-detecteren,op-header-gebaseerd,organiseren,herlabelen
|
auto-rename.tags=auto-detecteren,op-header-gebaseerd,organiseren,herlabelen
|
||||||
|
|
||||||
home.adjust-contrast.title=Kleuren/Contrast aanpassen
|
home.adjust-contrast.title=Kleuren/contrast aanpassen
|
||||||
home.adjust-contrast.desc=Pas Contrast, Verzadiging en Helderheid van een PDF aan
|
home.adjust-contrast.desc=Pas contrast, verzadiging en helderheid van een PDF aan
|
||||||
adjust-contrast.tags=kleur-correctie,afstemmen,aanpassen,verbeteren
|
adjust-contrast.tags=kleur-correctie,afstemmen,aanpassen,verbeteren
|
||||||
|
|
||||||
home.crop.title=PDF bijsnijden
|
home.crop.title=PDF bijsnijden
|
||||||
home.crop.desc=Snijd een PDF bij om de grootte te verkleinen (behoudt tekst!)
|
home.crop.desc=Snijd een PDF bij om de grootte te verkleinen (behoudt tekst!)
|
||||||
crop.tags=trimmen,verkleinen,bewerken,vorm
|
crop.tags=trimmen,verkleinen,bewerken,vorm
|
||||||
|
|
||||||
home.autoSplitPDF.title=Automatisch splitsen pagina''s
|
home.autoSplitPDF.title=Automatisch splitsen pagina's
|
||||||
home.autoSplitPDF.desc=Automatisch splitsen van gescande PDF met fysieke gescande paginasplitter QR-code
|
home.autoSplitPDF.desc=Automatisch splitsen van gescande PDF met fysieke gescande paginasplitter QR-code
|
||||||
autoSplitPDF.tags=QR-gebaseerd,scheiden,scan-segment,organiseren
|
autoSplitPDF.tags=QR-gebaseerd,scheiden,scan-segment,organiseren
|
||||||
|
|
||||||
|
@ -329,7 +332,7 @@ home.sanitizePdf.title=Opschonen
|
||||||
home.sanitizePdf.desc=Verwijder scripts en andere elementen uit PDF-bestanden
|
home.sanitizePdf.desc=Verwijder scripts en andere elementen uit PDF-bestanden
|
||||||
sanitizePdf.tags=schoonmaken,veilig,veilig,bedreigingen verwijderen
|
sanitizePdf.tags=schoonmaken,veilig,veilig,bedreigingen verwijderen
|
||||||
|
|
||||||
home.URLToPDF.title=URL/Website naar PDF
|
home.URLToPDF.title=URL/website naar PDF
|
||||||
home.URLToPDF.desc=Zet http(s)URL om naar PDF
|
home.URLToPDF.desc=Zet http(s)URL om naar PDF
|
||||||
URLToPDF.tags=web-capture,pagina opslaan,web-naar-doc,archief
|
URLToPDF.tags=web-capture,pagina opslaan,web-naar-doc,archief
|
||||||
|
|
||||||
|
@ -344,17 +347,17 @@ MarkdownToPDF.tags=markup,web-inhoud,transformatie,omzetten
|
||||||
|
|
||||||
|
|
||||||
home.getPdfInfo.title=Haal ALLE informatie op over PDF
|
home.getPdfInfo.title=Haal ALLE informatie op over PDF
|
||||||
home.getPdfInfo.desc=Haalt alle mogelijke informatie op van PDF''s
|
home.getPdfInfo.desc=Haalt alle mogelijke informatie op van PDF's
|
||||||
getPdfInfo.tags=informatie,data,statistieken
|
getPdfInfo.tags=informatie,data,statistieken
|
||||||
|
|
||||||
|
|
||||||
home.extractPage.title=Pagina(''s) extraheren
|
home.extractPage.title=Pagina('s) extraheren
|
||||||
home.extractPage.desc=Extraheert geselecteerde pagina''s uit PDF
|
home.extractPage.desc=Extraheert geselecteerde pagina's uit PDF
|
||||||
extractPage.tags=extraheren
|
extractPage.tags=extraheren
|
||||||
|
|
||||||
|
|
||||||
home.PdfToSinglePage.title=PDF naar één grote pagina
|
home.PdfToSinglePage.title=PDF naar één grote pagina
|
||||||
home.PdfToSinglePage.desc=Voegt alle PDF-pagina''s samen tot één grote pagina
|
home.PdfToSinglePage.desc=Voegt alle PDF-pagina's samen tot één grote pagina
|
||||||
PdfToSinglePage.tags=één pagina
|
PdfToSinglePage.tags=één pagina
|
||||||
|
|
||||||
|
|
||||||
|
@ -362,27 +365,32 @@ home.showJS.title=Toon Javascript
|
||||||
home.showJS.desc=Zoekt en toont ieder script dat in een PDF is geïnjecteerd
|
home.showJS.desc=Zoekt en toont ieder script dat in een PDF is geïnjecteerd
|
||||||
showJS.tags=JS
|
showJS.tags=JS
|
||||||
|
|
||||||
home.autoRedact.title=Auto Redact
|
home.autoRedact.title=Automatisch censureren
|
||||||
home.autoRedact.desc=Auto Redacts(Blacks out) text in a PDF based on input text
|
home.autoRedact.desc=Automatisch censureren (onherkenbaar maken) van tekst in een PDF op basis van ingevoerde tekst
|
||||||
showJS.tags=JS
|
autoRedact.tags=Redact,Hide,black out,black,marker,hidden
|
||||||
|
|
||||||
home.tableExtraxt.title=PDF to CSV
|
home.tableExtraxt.title=PDF naar CSV
|
||||||
home.tableExtraxt.desc=Extracts Tables from a PDF converting it to CSV
|
home.tableExtraxt.desc=Haalt tabellen uit een PDF en converteert ze naar CSV
|
||||||
tableExtraxt.tags=CSV,Table Extraction,extract,convert
|
tableExtraxt.tags=CSV,tabel extractie,extractie,converteren
|
||||||
|
|
||||||
|
|
||||||
home.autoSizeSplitPDF.title=Auto Split by Size/Count
|
home.autoSizeSplitPDF.title=Automatisch splitsen op grootte/aantal
|
||||||
home.autoSizeSplitPDF.desc=Split a single PDF into multiple documents based on size, page count, or document count
|
home.autoSizeSplitPDF.desc=Splits een enkele PDF in meerdere documenten op basis van grootte, aantal pagina's of aantal documenten
|
||||||
autoSizeSplitPDF.tags=pdf,split,document,organization
|
autoSizeSplitPDF.tags=pdf,splitsen,document,organiseren
|
||||||
|
|
||||||
|
|
||||||
home.overlay-pdfs.title=Overlay PDFs
|
home.overlay-pdfs.title=PDF's overlappen
|
||||||
home.overlay-pdfs.desc=Overlays PDFs on-top of another PDF
|
home.overlay-pdfs.desc=Plaatst PDF's over een andere PDF heen
|
||||||
overlay-pdfs.tags=Overlay
|
overlay-pdfs.tags=Overlappen
|
||||||
|
|
||||||
|
home.split-by-sections.title=PDF in secties splitsen
|
||||||
|
home.split-by-sections.desc=Verdeel elke pagina van een PDF in kleinere horizontale en verticale secties
|
||||||
|
split-by-sections.tags=Sectie splitsen, Verdelen, Aanpassen
|
||||||
|
|
||||||
|
home.AddStampRequest.title=Stempel toevoegen aan PDF
|
||||||
|
home.AddStampRequest.desc=Voeg tekst of afbeeldingsstempels toe op vaste locaties
|
||||||
|
AddStampRequest.tags=Stempel, Afbeelding toevoegen, afbeelding centreren, watermerk, PDF, Insluiten, Aanpassen
|
||||||
|
|
||||||
home.split-by-sections.title=Split PDF by Sections
|
|
||||||
home.split-by-sections.desc=Divide each page of a PDF into smaller horizontal and vertical sections
|
|
||||||
split-by-sections.tags=Section Split, Divide, Customize
|
|
||||||
|
|
||||||
###########################
|
###########################
|
||||||
# #
|
# #
|
||||||
|
@ -390,25 +398,25 @@ split-by-sections.tags=Section Split, Divide, Customize
|
||||||
# #
|
# #
|
||||||
###########################
|
###########################
|
||||||
#login
|
#login
|
||||||
login.title=Sign in
|
login.title=Inloggen
|
||||||
login.signin=Sign in
|
login.signin=Inloggen
|
||||||
login.rememberme=Remember me
|
login.rememberme=Onthoud mij
|
||||||
login.invalid=Invalid username or password.
|
login.invalid=Ongeldige gebruikersnaam of wachtwoord.
|
||||||
login.locked=Your account has been locked.
|
login.locked=Je account is geblokkeerd.
|
||||||
login.signinTitle=Please sign in
|
login.signinTitle=Gelieve in te loggen
|
||||||
|
|
||||||
|
|
||||||
#auto-redact
|
#auto-redact
|
||||||
autoRedact.title=Auto Redact
|
autoRedact.title=Automatisch censureren
|
||||||
autoRedact.header=Auto Redact
|
autoRedact.header=Automatisch censureren
|
||||||
autoRedact.colorLabel=Colour
|
autoRedact.colorLabel=Kleur
|
||||||
autoRedact.textsToRedactLabel=Text to Redact (line-separated)
|
autoRedact.textsToRedactLabel=Tekst om te censureren (gescheiden door regels)
|
||||||
autoRedact.textsToRedactPlaceholder=e.g. \nConfidential \nTop-Secret
|
autoRedact.textsToRedactPlaceholder=bijv.\Vertrouwelijk \nTopgeheim
|
||||||
autoRedact.useRegexLabel=Use Regex
|
autoRedact.useRegexLabel=Gebruik regex
|
||||||
autoRedact.wholeWordSearchLabel=Whole Word Search
|
autoRedact.wholeWordSearchLabel=Zoeken op hele woorden
|
||||||
autoRedact.customPaddingLabel=Custom Extra Padding
|
autoRedact.customPaddingLabel=Aangepaste extra ruimtevulling
|
||||||
autoRedact.convertPDFToImageLabel=Convert PDF to PDF-Image (Used to remove text behind the box)
|
autoRedact.convertPDFToImageLabel=Converteer PDF naar PDF-afbeelding (wordt gebruikt om tekst achter het vak te verwijderen)
|
||||||
autoRedact.submitButton=Submit
|
autoRedact.submitButton=Indienen
|
||||||
|
|
||||||
|
|
||||||
#showJS
|
#showJS
|
||||||
|
@ -425,8 +433,8 @@ pdfToSinglePage.submit=Converteren naar enkele pagina
|
||||||
|
|
||||||
|
|
||||||
#pageExtracter
|
#pageExtracter
|
||||||
pageExtracter.title=Pagina''s extraheren
|
pageExtracter.title=Pagina's extraheren
|
||||||
pageExtracter.header=Pagina''s extraheren
|
pageExtracter.header=Pagina's extraheren
|
||||||
pageExtracter.submit=Extraheren
|
pageExtracter.submit=Extraheren
|
||||||
|
|
||||||
|
|
||||||
|
@ -456,9 +464,40 @@ URLToPDF.credit=Gebruikt WeasyPrint
|
||||||
#html-to-pdf
|
#html-to-pdf
|
||||||
HTMLToPDF.title=HTML naar PDF
|
HTMLToPDF.title=HTML naar PDF
|
||||||
HTMLToPDF.header=HTML naar PDF
|
HTMLToPDF.header=HTML naar PDF
|
||||||
HTMLToPDF.help=Accepteert HTML-bestanden en ZIP''s die html/css/afbeeldingen etc. bevatten
|
HTMLToPDF.help=Accepteert HTML-bestanden en ZIP's die html/css/afbeeldingen etc. bevatten
|
||||||
HTMLToPDF.submit=Converteren
|
HTMLToPDF.submit=Converteren
|
||||||
HTMLToPDF.credit=Gebruikt WeasyPrint
|
HTMLToPDF.credit=Gebruikt WeasyPrint
|
||||||
|
HTMLToPDF.zoom=Zoomniveau voor weergave van de website.
|
||||||
|
HTMLToPDF.pageWidth=Breedte van de pagina in centimeters. (leeg voor standaard)
|
||||||
|
HTMLToPDF.pageHeight=Hoogte van de pagina in centimeters. (leeg voor standaard)
|
||||||
|
HTMLToPDF.marginTop=Marge bovenaan de pagina in millimeters. (leeg voor standaard)
|
||||||
|
HTMLToPDF.marginBottom=Marge onderaan de pagina in millimeters. (leeg voor standaard)
|
||||||
|
HTMLToPDF.marginLeft=Marge links van de pagina in millimeters. (leeg voor standaard)
|
||||||
|
HTMLToPDF.marginRight=Marge rechts van de pagina in millimeters. (leeg voor standaard)
|
||||||
|
HTMLToPDF.printBackground=De achtergrond van websites weergeven.
|
||||||
|
HTMLToPDF.defaultHeader=Standaard koptekst weergeven (naam en paginanummer)
|
||||||
|
HTMLToPDF.cssMediaType=Wijzig het CSS-mediatype van de pagina.
|
||||||
|
HTMLToPDF.none=Geen
|
||||||
|
HTMLToPDF.print=Print
|
||||||
|
HTMLToPDF.screen=Screen
|
||||||
|
|
||||||
|
|
||||||
|
#AddStampRequest
|
||||||
|
AddStampRequest.header=Stempel PDF
|
||||||
|
AddStampRequest.title=Stempel PDF
|
||||||
|
AddStampRequest.stampType=Soort stempel
|
||||||
|
AddStampRequest.stampText=Stempel tekst
|
||||||
|
AddStampRequest.stampImage=Stempel afbeelding
|
||||||
|
AddStampRequest.alphabet=Alfabet
|
||||||
|
AddStampRequest.fontSize=Tekst/afbeelding grootte
|
||||||
|
AddStampRequest.rotation=Rotatie
|
||||||
|
AddStampRequest.opacity=Transparantie
|
||||||
|
AddStampRequest.position=Positie
|
||||||
|
AddStampRequest.overrideX=X coördinaat overschrijven
|
||||||
|
AddStampRequest.overrideY=Y coördinaat overschrijven
|
||||||
|
AddStampRequest.customMargin=Aangepaste marge
|
||||||
|
AddStampRequest.customColor=Aangepaste tekstkleur
|
||||||
|
AddStampRequest.submit=Indienen
|
||||||
|
|
||||||
|
|
||||||
#sanitizePDF
|
#sanitizePDF
|
||||||
|
@ -479,11 +518,11 @@ addPageNumbers.selectText.1=Selecteer PDF-bestand:
|
||||||
addPageNumbers.selectText.2=Margegrootte
|
addPageNumbers.selectText.2=Margegrootte
|
||||||
addPageNumbers.selectText.3=Positie
|
addPageNumbers.selectText.3=Positie
|
||||||
addPageNumbers.selectText.4=Startnummer
|
addPageNumbers.selectText.4=Startnummer
|
||||||
addPageNumbers.selectText.5=Pagina''s om te nummeren
|
addPageNumbers.selectText.5=Pagina's om te nummeren
|
||||||
addPageNumbers.selectText.6=Aangepaste tekst
|
addPageNumbers.selectText.6=Aangepaste tekst
|
||||||
addPageNumbers.customTextDesc=Custom Text
|
addPageNumbers.customTextDesc=Aangepaste tekst
|
||||||
addPageNumbers.numberPagesDesc=Which pages to number, default 'all', also accepts 1-5 or 2,5,9 etc
|
addPageNumbers.numberPagesDesc=Welke pagina's genummerd moeten worden, standaard 'all', accepteert ook 1-5 of 2,5,9 etc
|
||||||
addPageNumbers.customNumberDesc=Defaults to {n}, also accepts 'Page {n} of {total}', 'Text-{n}', '{filename}-{n}
|
addPageNumbers.customNumberDesc=Standaard {n}, accepteert ook 'Pagina {n} van {total}', 'Tekst-{n}', '{filename}-{n}
|
||||||
addPageNumbers.submit=Paginanummers toevoegen
|
addPageNumbers.submit=Paginanummers toevoegen
|
||||||
|
|
||||||
|
|
||||||
|
@ -515,7 +554,7 @@ autoSplitPDF.description=Print, Voeg in, Scan, upload, en laat ons je documenten
|
||||||
autoSplitPDF.selectText.1=Print enkele scheidingsbladen van hieronder (Zwart-wit is prima).
|
autoSplitPDF.selectText.1=Print enkele scheidingsbladen van hieronder (Zwart-wit is prima).
|
||||||
autoSplitPDF.selectText.2=Scan al je documenten tegelijk door het scheidingsblad ertussen te plaatsen.
|
autoSplitPDF.selectText.2=Scan al je documenten tegelijk door het scheidingsblad ertussen te plaatsen.
|
||||||
autoSplitPDF.selectText.3=Upload het enkele grote gescande PDF-bestand en laat Stirling PDF de rest afhandelen.
|
autoSplitPDF.selectText.3=Upload het enkele grote gescande PDF-bestand en laat Stirling PDF de rest afhandelen.
|
||||||
autoSplitPDF.selectText.4=Scheidingspagina''s worden automatisch gedetecteerd en verwijderd, wat een net einddocument garandeert.
|
autoSplitPDF.selectText.4=Scheidingspagina's worden automatisch gedetecteerd en verwijderd, wat een net einddocument garandeert.
|
||||||
autoSplitPDF.formPrompt=Dien PDF in met Stirling-PDF Pagina-scheiders:
|
autoSplitPDF.formPrompt=Dien PDF in met Stirling-PDF Pagina-scheiders:
|
||||||
autoSplitPDF.duplexMode=Duplex Modus (voor- en achterkant scannen)
|
autoSplitPDF.duplexMode=Duplex Modus (voor- en achterkant scannen)
|
||||||
autoSplitPDF.dividerDownload1=Download 'Auto Splitter Divider (minimal).pdf'
|
autoSplitPDF.dividerDownload1=Download 'Auto Splitter Divider (minimal).pdf'
|
||||||
|
@ -530,8 +569,8 @@ pipeline.title=Pijplijn
|
||||||
#pageLayout
|
#pageLayout
|
||||||
pageLayout.title=Meerdere pagina indeling
|
pageLayout.title=Meerdere pagina indeling
|
||||||
pageLayout.header=Meerdere pagina indeling
|
pageLayout.header=Meerdere pagina indeling
|
||||||
pageLayout.pagesPerSheet=Pagina''s per vel:
|
pageLayout.pagesPerSheet=Pagina's per vel:
|
||||||
pageLayout.addBorder=Add Borders
|
pageLayout.addBorder=Randen toevoegen
|
||||||
pageLayout.submit=Indienen
|
pageLayout.submit=Indienen
|
||||||
|
|
||||||
|
|
||||||
|
@ -547,11 +586,11 @@ scalePages.submit=Indienen
|
||||||
certSign.title=Certificaat ondertekening
|
certSign.title=Certificaat ondertekening
|
||||||
certSign.header=Onderteken een PDF met je certificaat (in ontwikkeling)
|
certSign.header=Onderteken een PDF met je certificaat (in ontwikkeling)
|
||||||
certSign.selectPDF=Selecteer een PDF-bestand voor ondertekening:
|
certSign.selectPDF=Selecteer een PDF-bestand voor ondertekening:
|
||||||
certSign.jksNote=Note: If your certificate type is not listed below, please convert it to a Java Keystore (.jks) file using the keytool command line tool. Then, choose the .jks file option below.
|
certSign.jksNote=Let op: als het certificaattype hieronder niet staat, converteer het dan naar een Java Keystore (.jks) bestand met de keytool command line tool. Kies vervolgens de .jks bestandsoptie.
|
||||||
certSign.selectKey=Selecteer je privésleutelbestand (PKCS#8 formaat, kan .pem of .der zijn):
|
certSign.selectKey=Selecteer je privésleutelbestand (PKCS#8 formaat, kan .pem of .der zijn):
|
||||||
certSign.selectCert=Selecteer je certificaatbestand (X.509 formaat, kan .pem of .der zijn):
|
certSign.selectCert=Selecteer je certificaatbestand (X.509 formaat, kan .pem of .der zijn):
|
||||||
certSign.selectP12=Selecteer je PKCS#12 Sleutelopslagbestand (.p12 of .pfx) (Optioneel, indien verstrekt, moet het je privésleutel en certificaat bevatten):
|
certSign.selectP12=Selecteer je PKCS#12 Sleutelopslagbestand (.p12 of .pfx) (Optioneel, indien verstrekt, moet het je privésleutel en certificaat bevatten):
|
||||||
certSign.selectJKS=Select Your Java Keystore File (.jks or .keystore):
|
certSign.selectJKS=Selecteer je Java Keystore bestand (.jks of .keystore):
|
||||||
certSign.certType=Certificaattype
|
certSign.certType=Certificaattype
|
||||||
certSign.password=Voer je sleutelopslag of privésleutel wachtwoord in (indien van toepassing):
|
certSign.password=Voer je sleutelopslag of privésleutel wachtwoord in (indien van toepassing):
|
||||||
certSign.showSig=Toon handtekening
|
certSign.showSig=Toon handtekening
|
||||||
|
@ -562,24 +601,24 @@ certSign.submit=PDF ondertekenen
|
||||||
|
|
||||||
|
|
||||||
#removeBlanks
|
#removeBlanks
|
||||||
removeBlanks.title=Verwijder blanco''s
|
removeBlanks.title=Verwijder blanco's
|
||||||
removeBlanks.header=Verwijder lege pagina''s
|
removeBlanks.header=Verwijder lege pagina's
|
||||||
removeBlanks.threshold=Pixel witheid drempel:
|
removeBlanks.threshold=Pixel witheid drempel:
|
||||||
removeBlanks.thresholdDesc=Drempel voor het bepalen hoe wit een witte pixel moet zijn om als ''Wit'' te worden geclassificeerd. 0 = Zwart, 255 zuiver wit.
|
removeBlanks.thresholdDesc=Drempel voor het bepalen hoe wit een witte pixel moet zijn om als 'Wit' te worden geclassificeerd. 0 = Zwart, 255 zuiver wit.
|
||||||
removeBlanks.whitePercent=Wit percentage (%):
|
removeBlanks.whitePercent=Wit percentage (%):
|
||||||
removeBlanks.whitePercentDesc=Percentage van de pagina dat ''witte'' pixels moet zijn om verwijderd te worden
|
removeBlanks.whitePercentDesc=Percentage van de pagina dat 'witte' pixels moet zijn om verwijderd te worden
|
||||||
removeBlanks.submit=Blanco''s verwijderen
|
removeBlanks.submit=Blanco's verwijderen
|
||||||
|
|
||||||
|
|
||||||
#removeAnnotations
|
#removeAnnotations
|
||||||
removeAnnotations.title=Remove Annotations
|
removeAnnotations.title=Verwijder annotaties
|
||||||
removeAnnotations.header=Remove Annotations
|
removeAnnotations.header=Verwijder annotaties
|
||||||
removeAnnotations.submit=Remove
|
removeAnnotations.submit=Verwijderen
|
||||||
|
|
||||||
|
|
||||||
#compare
|
#compare
|
||||||
compare.title=Vergelijken
|
compare.title=Vergelijken
|
||||||
compare.header=PDF''s vergelijken
|
compare.header=PDF's vergelijken
|
||||||
compare.document.1=Document 1
|
compare.document.1=Document 1
|
||||||
compare.document.2=Document 2
|
compare.document.2=Document 2
|
||||||
compare.submit=Vergelijken
|
compare.submit=Vergelijken
|
||||||
|
@ -587,7 +626,7 @@ compare.submit=Vergelijken
|
||||||
|
|
||||||
#sign
|
#sign
|
||||||
sign.title=Ondertekenen
|
sign.title=Ondertekenen
|
||||||
sign.header=PDF''s ondertekenen
|
sign.header=PDF's ondertekenen
|
||||||
sign.upload=Upload afbeelding
|
sign.upload=Upload afbeelding
|
||||||
sign.draw=Handtekening tekenen
|
sign.draw=Handtekening tekenen
|
||||||
sign.text=Tekstinvoer
|
sign.text=Tekstinvoer
|
||||||
|
@ -597,13 +636,13 @@ sign.add=Toevoegen
|
||||||
|
|
||||||
#repair
|
#repair
|
||||||
repair.title=Repareren
|
repair.title=Repareren
|
||||||
repair.header=PDF''s repareren
|
repair.header=PDF's repareren
|
||||||
repair.submit=Repareren
|
repair.submit=Repareren
|
||||||
|
|
||||||
|
|
||||||
#flatten
|
#flatten
|
||||||
flatten.title=Afvlakken
|
flatten.title=Afvlakken
|
||||||
flatten.header=PDF''s afvlakken
|
flatten.header=PDF's afvlakken
|
||||||
flatten.submit=Afvlakken
|
flatten.submit=Afvlakken
|
||||||
|
|
||||||
|
|
||||||
|
@ -624,12 +663,12 @@ ScannerImageSplit.selectText.10=Stelt de grootte van de toegevoegde en verwijder
|
||||||
ocr.title=OCR / Scan opruimen
|
ocr.title=OCR / Scan opruimen
|
||||||
ocr.header=Scans opruimen / OCR (Optical Character Recognition)
|
ocr.header=Scans opruimen / OCR (Optical Character Recognition)
|
||||||
ocr.selectText.1=Selecteer talen die binnen de PDF gedetecteerd moeten worden (De vermelde zijn de momenteel gedetecteerde):
|
ocr.selectText.1=Selecteer talen die binnen de PDF gedetecteerd moeten worden (De vermelde zijn de momenteel gedetecteerde):
|
||||||
ocr.selectText.2=Produceer tekstbestand met OCR-tekst naast de OCR''d PDF
|
ocr.selectText.2=Produceer tekstbestand met OCR-tekst naast de OCR'd PDF
|
||||||
ocr.selectText.3=Corrigeer pagina''s die onder een scheve hoek zijn gescand door ze terug te draaien
|
ocr.selectText.3=Corrigeer pagina's die onder een scheve hoek zijn gescand door ze terug te draaien
|
||||||
ocr.selectText.4=Maak de pagina schoon, zodat het minder waarschijnlijk is dat OCR tekst in achtergrondruis vindt. (Geen uitvoerverandering)
|
ocr.selectText.4=Maak de pagina schoon, zodat het minder waarschijnlijk is dat OCR tekst in achtergrondruis vindt. (Geen uitvoerverandering)
|
||||||
ocr.selectText.5=Maak de pagina schoon zodat OCR waarschijnlijk geen tekst in achtergrondruis vindt, behoudt opruiming in uitvoer.
|
ocr.selectText.5=Maak de pagina schoon zodat OCR waarschijnlijk geen tekst in achtergrondruis vindt, behoudt opruiming in uitvoer.
|
||||||
ocr.selectText.6=Negeert pagina''s met interactieve tekst, OCR''s alleen pagina''s die afbeeldingen zijn
|
ocr.selectText.6=Negeert pagina's met interactieve tekst, OCR's alleen pagina's die afbeeldingen zijn
|
||||||
ocr.selectText.7=Forceer OCR, zal elke pagina OCR''en en alle originele tekstelementen verwijderen
|
ocr.selectText.7=Forceer OCR, zal elke pagina OCR'en en alle originele tekstelementen verwijderen
|
||||||
ocr.selectText.8=Normaal (Zal een fout geven als de PDF tekst bevat)
|
ocr.selectText.8=Normaal (Zal een fout geven als de PDF tekst bevat)
|
||||||
ocr.selectText.9=Aanvullende instellingen
|
ocr.selectText.9=Aanvullende instellingen
|
||||||
ocr.selectText.10=OCR-modus
|
ocr.selectText.10=OCR-modus
|
||||||
|
@ -677,7 +716,7 @@ addImage.submit=Afbeelding toevoegen
|
||||||
|
|
||||||
#merge
|
#merge
|
||||||
merge.title=Samenvoegen
|
merge.title=Samenvoegen
|
||||||
merge.header=Meerdere PDF''s samenvoegen (2+)
|
merge.header=Meerdere PDF's samenvoegen (2+)
|
||||||
merge.sortByName=Sorteer op naam
|
merge.sortByName=Sorteer op naam
|
||||||
merge.sortByDate=Sorteer op datum
|
merge.sortByDate=Sorteer op datum
|
||||||
merge.submit=Samenvoegen
|
merge.submit=Samenvoegen
|
||||||
|
@ -686,7 +725,7 @@ merge.submit=Samenvoegen
|
||||||
#pdfOrganiser
|
#pdfOrganiser
|
||||||
pdfOrganiser.title=Pagina organisator
|
pdfOrganiser.title=Pagina organisator
|
||||||
pdfOrganiser.header=PDF pagina organisator
|
pdfOrganiser.header=PDF pagina organisator
|
||||||
pdfOrganiser.submit=Pagina''s herschikken
|
pdfOrganiser.submit=Pagina's herschikken
|
||||||
|
|
||||||
|
|
||||||
#multiTool
|
#multiTool
|
||||||
|
@ -694,14 +733,14 @@ multiTool.title=PDF Multitool
|
||||||
multiTool.header=PDF Multitool
|
multiTool.header=PDF Multitool
|
||||||
|
|
||||||
#view pdf
|
#view pdf
|
||||||
viewPdf.title=View PDF
|
viewPdf.title=PDF bekijken
|
||||||
viewPdf.header=View PDF
|
viewPdf.header=PDF bekijken
|
||||||
|
|
||||||
#pageRemover
|
#pageRemover
|
||||||
pageRemover.title=Pagina verwijderaar
|
pageRemover.title=Pagina verwijderaar
|
||||||
pageRemover.header=PDF pagina verwijderaar
|
pageRemover.header=PDF pagina verwijderaar
|
||||||
pageRemover.pagesToDelete=Te verwijderen pagina''s (Voer een door komma''s gescheiden lijst met paginanummers in):
|
pageRemover.pagesToDelete=Te verwijderen pagina's (Voer een door komma's gescheiden lijst met paginanummers in):
|
||||||
pageRemover.submit=Pagina''s verwijderen
|
pageRemover.submit=Pagina's verwijderen
|
||||||
|
|
||||||
|
|
||||||
#rotate
|
#rotate
|
||||||
|
@ -715,14 +754,14 @@ rotate.submit=Roteren
|
||||||
split.title=PDF splitsen
|
split.title=PDF splitsen
|
||||||
split.header=PDF splitsen
|
split.header=PDF splitsen
|
||||||
split.desc.1=De nummers die je kiest zijn de paginanummers waarop je een splitsing wilt uitvoeren
|
split.desc.1=De nummers die je kiest zijn de paginanummers waarop je een splitsing wilt uitvoeren
|
||||||
split.desc.2=Als zodanig selecteren van 1,3,7-8 zou een 10 pagina''s tellend document splitsen in 6 aparte PDF''s met:
|
split.desc.2=Als zodanig selecteren van 1,3,7-8 zou een 10 pagina's tellend document splitsen in 6 aparte PDF's met:
|
||||||
split.desc.3=Document #1: Pagina 1
|
split.desc.3=Document #1: Pagina 1
|
||||||
split.desc.4=Document #2: Pagina 2 en 3
|
split.desc.4=Document #2: Pagina 2 en 3
|
||||||
split.desc.5=Document #3: Pagina 4, 5 en 6
|
split.desc.5=Document #3: Pagina 4, 5 en 6
|
||||||
split.desc.6=Document #4: Pagina 7
|
split.desc.6=Document #4: Pagina 7
|
||||||
split.desc.7=Document #5: Pagina 8
|
split.desc.7=Document #5: Pagina 8
|
||||||
split.desc.8=Document #6: Pagina 9 en 10
|
split.desc.8=Document #6: Pagina 9 en 10
|
||||||
split.splitPages=Voer pagina''s in om op te splitsen:
|
split.splitPages=Voer pagina's in om op te splitsen:
|
||||||
split.submit=Splitsen
|
split.submit=Splitsen
|
||||||
|
|
||||||
|
|
||||||
|
@ -730,14 +769,14 @@ split.submit=Splitsen
|
||||||
imageToPDF.title=Afbeelding naar PDF
|
imageToPDF.title=Afbeelding naar PDF
|
||||||
imageToPDF.header=Afbeelding naar PDF
|
imageToPDF.header=Afbeelding naar PDF
|
||||||
imageToPDF.submit=Omzetten
|
imageToPDF.submit=Omzetten
|
||||||
imageToPDF.selectLabel=Image Fit Options
|
imageToPDF.selectLabel=Opties voor afbeelding passend maken
|
||||||
imageToPDF.fillPage=Fill Page
|
imageToPDF.fillPage=Pagina vullen
|
||||||
imageToPDF.fitDocumentToImage=Fit Page to Image
|
imageToPDF.fitDocumentToImage=Pagina passend maken voor afbeelding
|
||||||
imageToPDF.maintainAspectRatio=Maintain Aspect Ratios
|
imageToPDF.maintainAspectRatio=Beeldverhoudingen behouden
|
||||||
imageToPDF.selectText.2=PDF automatisch draaien
|
imageToPDF.selectText.2=PDF automatisch draaien
|
||||||
imageToPDF.selectText.3=Meervoudige bestandslogica (Alleen ingeschakeld bij werken met meerdere afbeeldingen)
|
imageToPDF.selectText.3=Meervoudige bestandslogica (Alleen ingeschakeld bij werken met meerdere afbeeldingen)
|
||||||
imageToPDF.selectText.4=Voeg samen in één PDF
|
imageToPDF.selectText.4=Voeg samen in één PDF
|
||||||
imageToPDF.selectText.5=Zet om naar afzonderlijke PDF''s
|
imageToPDF.selectText.5=Zet om naar afzonderlijke PDF's
|
||||||
|
|
||||||
|
|
||||||
#pdfToImage
|
#pdfToImage
|
||||||
|
@ -745,7 +784,7 @@ pdfToImage.title=PDF naar afbeelding
|
||||||
pdfToImage.header=PDF naar afbeelding
|
pdfToImage.header=PDF naar afbeelding
|
||||||
pdfToImage.selectText=Afbeeldingsformaat
|
pdfToImage.selectText=Afbeeldingsformaat
|
||||||
pdfToImage.singleOrMultiple=Resultaattype van pagina naar afbeelding
|
pdfToImage.singleOrMultiple=Resultaattype van pagina naar afbeelding
|
||||||
pdfToImage.single=Eén grote afbeelding die alle pagina''s combineert
|
pdfToImage.single=Eén grote afbeelding die alle pagina's combineert
|
||||||
pdfToImage.multi=Meerdere afbeeldingen, één afbeelding per pagina
|
pdfToImage.multi=Meerdere afbeeldingen, één afbeelding per pagina
|
||||||
pdfToImage.colorType=Kleurtype
|
pdfToImage.colorType=Kleurtype
|
||||||
pdfToImage.color=Kleur
|
pdfToImage.color=Kleur
|
||||||
|
@ -829,7 +868,6 @@ changeMetadata.keywords=Trefwoorden:
|
||||||
changeMetadata.modDate=Wijzigingsdatum (yyyy/MM/dd HH:mm:ss):
|
changeMetadata.modDate=Wijzigingsdatum (yyyy/MM/dd HH:mm:ss):
|
||||||
changeMetadata.producer=Producent:
|
changeMetadata.producer=Producent:
|
||||||
changeMetadata.subject=Onderwerp:
|
changeMetadata.subject=Onderwerp:
|
||||||
changeMetadata.title=Titel:
|
|
||||||
changeMetadata.trapped=Vastgezet:
|
changeMetadata.trapped=Vastgezet:
|
||||||
changeMetadata.selectText.4=Overige metadata:
|
changeMetadata.selectText.4=Overige metadata:
|
||||||
changeMetadata.selectText.5=Voeg aangepaste metadata-invoer toe
|
changeMetadata.selectText.5=Voeg aangepaste metadata-invoer toe
|
||||||
|
@ -883,52 +921,52 @@ PDFToXML.submit=Converteren
|
||||||
#PDFToCSV
|
#PDFToCSV
|
||||||
PDFToCSV.title=PDF naar CSV
|
PDFToCSV.title=PDF naar CSV
|
||||||
PDFToCSV.header=PDF naar CSV
|
PDFToCSV.header=PDF naar CSV
|
||||||
PDFToCSV.prompt=Choose page to extract table
|
PDFToCSV.prompt=Kies pagina om tabel te extraheren
|
||||||
PDFToCSV.submit=Extract
|
PDFToCSV.submit=Extraheren
|
||||||
|
|
||||||
#split-by-size-or-count
|
#split-by-size-or-count
|
||||||
split-by-size-or-count.header=Split PDF by Size or Count
|
split-by-size-or-count.header=PDF splitsen op grootte of aantal
|
||||||
split-by-size-or-count.type.label=Select Split Type
|
split-by-size-or-count.type.label=Selecteer splits type
|
||||||
split-by-size-or-count.type.size=By Size
|
split-by-size-or-count.type.size=Op grootte
|
||||||
split-by-size-or-count.type.pageCount=By Page Count
|
split-by-size-or-count.type.pageCount=Op pagina aantal
|
||||||
split-by-size-or-count.type.docCount=By Document Count
|
split-by-size-or-count.type.docCount=Op document aantal
|
||||||
split-by-size-or-count.value.label=Enter Value
|
split-by-size-or-count.value.label=Voer waarde in
|
||||||
split-by-size-or-count.value.placeholder=Enter size (e.g., 2MB or 3KB) or count (e.g., 5)
|
split-by-size-or-count.value.placeholder=Voer grootte (bijv., 2MB of 3KB) of aantal (bijv., 5)
|
||||||
split-by-size-or-count.submit=Submit
|
split-by-size-or-count.submit=Indienen
|
||||||
|
|
||||||
|
|
||||||
#overlay-pdfs
|
#overlay-pdfs
|
||||||
overlay-pdfs.header=Overlay PDF Files
|
overlay-pdfs.header=PDF bestanden overlappen
|
||||||
overlay-pdfs.baseFile.label=Select Base PDF File
|
overlay-pdfs.baseFile.label=Selecteer basis PDF-bestand
|
||||||
overlay-pdfs.overlayFiles.label=Select Overlay PDF Files
|
overlay-pdfs.overlayFiles.label=Selecteer overlappende PDF-bestanden
|
||||||
overlay-pdfs.mode.label=Select Overlay Mode
|
overlay-pdfs.mode.label=Selecteer overlappingsmodus
|
||||||
overlay-pdfs.mode.sequential=Sequential Overlay
|
overlay-pdfs.mode.sequential=Sequentieel overlappen
|
||||||
overlay-pdfs.mode.interleaved=Interleaved Overlay
|
overlay-pdfs.mode.interleaved=Geïnterlinieerd overlappen
|
||||||
overlay-pdfs.mode.fixedRepeat=Fixed Repeat Overlay
|
overlay-pdfs.mode.fixedRepeat=Overlappen met vaste herhaling
|
||||||
overlay-pdfs.counts.label=Overlay Counts (for Fixed Repeat Mode)
|
overlay-pdfs.counts.label=Aantal keren overlappen (voor vaste herhalings modus)
|
||||||
overlay-pdfs.counts.placeholder=Enter comma-separated counts (e.g., 2,3,1)
|
overlay-pdfs.counts.placeholder=Voer door komma's gescheiden aantallen in (bijv., 2,3,1)
|
||||||
overlay-pdfs.position.label=Select Overlay Position
|
overlay-pdfs.position.label=Selecteer overlappingspositie
|
||||||
overlay-pdfs.position.foreground=Foreground
|
overlay-pdfs.position.foreground=Voorgrond
|
||||||
overlay-pdfs.position.background=Background
|
overlay-pdfs.position.background=Achtergrond
|
||||||
overlay-pdfs.submit=Submit
|
overlay-pdfs.submit=Indienen
|
||||||
|
|
||||||
|
|
||||||
#split-by-sections
|
#split-by-sections
|
||||||
split-by-sections.title=Split PDF by Sections
|
split-by-sections.title=PDF in secties splitsen
|
||||||
split-by-sections.header=Split PDF into Sections
|
split-by-sections.header=PDF in secties splitsen
|
||||||
split-by-sections.horizontal.label=Horizontal Divisions
|
split-by-sections.horizontal.label=Horizontale secties
|
||||||
split-by-sections.vertical.label=Vertical Divisions
|
split-by-sections.vertical.label=Verticale secties
|
||||||
split-by-sections.horizontal.placeholder=Enter number of horizontal divisions
|
split-by-sections.horizontal.placeholder=Voer het aantal horizontale secties in
|
||||||
split-by-sections.vertical.placeholder=Enter number of vertical divisions
|
split-by-sections.vertical.placeholder=Voer het aantal verticale secties in
|
||||||
split-by-sections.submit=Split PDF
|
split-by-sections.submit=PDF splitsen
|
||||||
|
|
||||||
|
|
||||||
#licenses
|
#licenses
|
||||||
licenses.nav=Licenses
|
licenses.nav=Licenties
|
||||||
licenses.title=3rd Party Licenses
|
licenses.title=Licenties van derden
|
||||||
licenses.header=3rd Party Licenses
|
licenses.header=Licenties van derden
|
||||||
licenses.module=Module
|
licenses.module=Module
|
||||||
licenses.version=Version
|
licenses.version=Versie
|
||||||
licenses.license=License
|
licenses.license=Licentie
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -11,6 +11,7 @@ imgPrompt=Wybierz obraz(y)
|
||||||
genericSubmit=Wyślij
|
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) :
|
||||||
|
pageSelectionPrompt=Custom Page Selection (Enter a comma-separated list of page numbers 1,5,6 or Functions like 2n+1) :
|
||||||
goToPage=Idź
|
goToPage=Idź
|
||||||
true=Tak
|
true=Tak
|
||||||
false=Nie
|
false=Nie
|
||||||
|
@ -42,9 +43,10 @@ red=Red
|
||||||
green=Green
|
green=Green
|
||||||
blue=Blue
|
blue=Blue
|
||||||
custom=Custom...
|
custom=Custom...
|
||||||
WorkInProgess=Work in progress, May not work or be buggy, Please report any ploblems!
|
WorkInProgess=Work in progress, May not work or be buggy, Please report any problems!
|
||||||
poweredBy=Powered by
|
poweredBy=Powered by
|
||||||
|
yes=Yes
|
||||||
|
no=No
|
||||||
changedCredsMessage=Credentials changed!
|
changedCredsMessage=Credentials changed!
|
||||||
notAuthenticatedMessage=User not authenticated.
|
notAuthenticatedMessage=User not authenticated.
|
||||||
userNotFoundMessage=User not found.
|
userNotFoundMessage=User not found.
|
||||||
|
@ -68,6 +70,7 @@ pipelineOptions.header=Pipeline Configuration
|
||||||
pipelineOptions.pipelineNameLabel=Pipeline Name
|
pipelineOptions.pipelineNameLabel=Pipeline Name
|
||||||
pipelineOptions.saveSettings=Save Operation Settings
|
pipelineOptions.saveSettings=Save Operation Settings
|
||||||
pipelineOptions.pipelineNamePrompt=Enter pipeline name here
|
pipelineOptions.pipelineNamePrompt=Enter pipeline name here
|
||||||
|
pipelineOptions.selectOperation=Select Operation
|
||||||
pipelineOptions.addOperationButton=Add operation
|
pipelineOptions.addOperationButton=Add operation
|
||||||
pipelineOptions.pipelineHeader=Pipeline:
|
pipelineOptions.pipelineHeader=Pipeline:
|
||||||
pipelineOptions.saveButton=Download
|
pipelineOptions.saveButton=Download
|
||||||
|
@ -118,7 +121,7 @@ account.accountSettings=Account Settings
|
||||||
account.adminSettings=Admin Settings - View and Add Users
|
account.adminSettings=Admin Settings - View and Add Users
|
||||||
account.userControlSettings=User Control Settings
|
account.userControlSettings=User Control Settings
|
||||||
account.changeUsername=Change Username
|
account.changeUsername=Change Username
|
||||||
account.changeUsername=Change Username
|
account.newUsername=New Username
|
||||||
account.password=Confirmation Password
|
account.password=Confirmation Password
|
||||||
account.oldPassword=Old password
|
account.oldPassword=Old password
|
||||||
account.newPassword=New Password
|
account.newPassword=New Password
|
||||||
|
@ -364,7 +367,7 @@ showJS.tags=JS
|
||||||
|
|
||||||
home.autoRedact.title=Auto Redact
|
home.autoRedact.title=Auto Redact
|
||||||
home.autoRedact.desc=Auto Redacts(Blacks out) text in a PDF based on input text
|
home.autoRedact.desc=Auto Redacts(Blacks out) text in a PDF based on input text
|
||||||
showJS.tags=JS
|
autoRedact.tags=Redact,Hide,black out,black,marker,hidden
|
||||||
|
|
||||||
home.tableExtraxt.title=PDF to CSV
|
home.tableExtraxt.title=PDF to CSV
|
||||||
home.tableExtraxt.desc=Extracts Tables from a PDF converting it to CSV
|
home.tableExtraxt.desc=Extracts Tables from a PDF converting it to CSV
|
||||||
|
@ -384,6 +387,11 @@ home.split-by-sections.title=Split PDF by Sections
|
||||||
home.split-by-sections.desc=Divide each page of a PDF into smaller horizontal and vertical sections
|
home.split-by-sections.desc=Divide each page of a PDF into smaller horizontal and vertical sections
|
||||||
split-by-sections.tags=Section Split, Divide, Customize
|
split-by-sections.tags=Section Split, Divide, Customize
|
||||||
|
|
||||||
|
home.AddStampRequest.title=Add Stamp to PDF
|
||||||
|
home.AddStampRequest.desc=Add text or add image stamps at set locations
|
||||||
|
AddStampRequest.tags=Stamp, Add image, center image, Watermark, PDF, Embed, Customize
|
||||||
|
|
||||||
|
|
||||||
###########################
|
###########################
|
||||||
# #
|
# #
|
||||||
# WEB PAGES #
|
# WEB PAGES #
|
||||||
|
@ -459,6 +467,37 @@ HTMLToPDF.header=HTML To PDF
|
||||||
HTMLToPDF.help=Accepts HTML files and ZIPs containing html/css/images etc required
|
HTMLToPDF.help=Accepts HTML files and ZIPs containing html/css/images etc required
|
||||||
HTMLToPDF.submit=Convert
|
HTMLToPDF.submit=Convert
|
||||||
HTMLToPDF.credit=Uses WeasyPrint
|
HTMLToPDF.credit=Uses WeasyPrint
|
||||||
|
HTMLToPDF.zoom=Zoom level for displaying the website.
|
||||||
|
HTMLToPDF.pageWidth=Width of the page in centimeters. (Blank to default)
|
||||||
|
HTMLToPDF.pageHeight=Height of the page in centimeters. (Blank to default)
|
||||||
|
HTMLToPDF.marginTop=Top margin of the page in millimeters. (Blank to default)
|
||||||
|
HTMLToPDF.marginBottom=Bottom margin of the page in millimeters. (Blank to default)
|
||||||
|
HTMLToPDF.marginLeft=Left margin of the page in millimeters. (Blank to default)
|
||||||
|
HTMLToPDF.marginRight=Right margin of the page in millimeters. (Blank to default)
|
||||||
|
HTMLToPDF.printBackground=Render the background of websites.
|
||||||
|
HTMLToPDF.defaultHeader=Enable Default Header (Name and page number)
|
||||||
|
HTMLToPDF.cssMediaType=Change the CSS media type of the page.
|
||||||
|
HTMLToPDF.none=None
|
||||||
|
HTMLToPDF.print=Print
|
||||||
|
HTMLToPDF.screen=Screen
|
||||||
|
|
||||||
|
|
||||||
|
#AddStampRequest
|
||||||
|
AddStampRequest.header=Stamp PDF
|
||||||
|
AddStampRequest.title=Stamp PDF
|
||||||
|
AddStampRequest.stampType=Stamp Type
|
||||||
|
AddStampRequest.stampText=Stamp Text
|
||||||
|
AddStampRequest.stampImage=Stamp Image
|
||||||
|
AddStampRequest.alphabet=Alphabet
|
||||||
|
AddStampRequest.fontSize=Font/Image Size
|
||||||
|
AddStampRequest.rotation=Rotation
|
||||||
|
AddStampRequest.opacity=Opacity
|
||||||
|
AddStampRequest.position=Position
|
||||||
|
AddStampRequest.overrideX=Override X Coordinate
|
||||||
|
AddStampRequest.overrideY=Override Y Coordinate
|
||||||
|
AddStampRequest.customMargin=Custom Margin
|
||||||
|
AddStampRequest.customColor=Custom Text Color
|
||||||
|
AddStampRequest.submit=Submit
|
||||||
|
|
||||||
|
|
||||||
#sanitizePDF
|
#sanitizePDF
|
||||||
|
@ -829,7 +868,6 @@ changeMetadata.keywords=Słowa kluczowe:
|
||||||
changeMetadata.modDate=Data modyfikacji (yyyy/MM/dd 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.trapped=Zablokowany:
|
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
|
||||||
|
|
|
@ -11,6 +11,7 @@ imgPrompt=Selecione a(s) imagem(ns)
|
||||||
genericSubmit=Enviar
|
genericSubmit=Enviar
|
||||||
processTimeWarning=Aviso: esse processo pode levar até um minuto, dependendo do tamanho do arquivo
|
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):
|
pageOrderPrompt=Ordem das páginas (digite uma lista separada por vírgulas de números de página):
|
||||||
|
pageSelectionPrompt=Custom Page Selection (Enter a comma-separated list of page numbers 1,5,6 or Functions like 2n+1) :
|
||||||
goToPage=Ir
|
goToPage=Ir
|
||||||
true=Verdadeiro
|
true=Verdadeiro
|
||||||
false=Falso
|
false=Falso
|
||||||
|
@ -42,9 +43,10 @@ red=Red
|
||||||
green=Green
|
green=Green
|
||||||
blue=Blue
|
blue=Blue
|
||||||
custom=Custom...
|
custom=Custom...
|
||||||
WorkInProgess=Work in progress, May not work or be buggy, Please report any ploblems!
|
WorkInProgess=Work in progress, May not work or be buggy, Please report any problems!
|
||||||
poweredBy=Powered by
|
poweredBy=Powered by
|
||||||
|
yes=Yes
|
||||||
|
no=No
|
||||||
changedCredsMessage=Credentials changed!
|
changedCredsMessage=Credentials changed!
|
||||||
notAuthenticatedMessage=User not authenticated.
|
notAuthenticatedMessage=User not authenticated.
|
||||||
userNotFoundMessage=User not found.
|
userNotFoundMessage=User not found.
|
||||||
|
@ -68,6 +70,7 @@ pipelineOptions.header=Pipeline Configuration
|
||||||
pipelineOptions.pipelineNameLabel=Pipeline Name
|
pipelineOptions.pipelineNameLabel=Pipeline Name
|
||||||
pipelineOptions.saveSettings=Save Operation Settings
|
pipelineOptions.saveSettings=Save Operation Settings
|
||||||
pipelineOptions.pipelineNamePrompt=Enter pipeline name here
|
pipelineOptions.pipelineNamePrompt=Enter pipeline name here
|
||||||
|
pipelineOptions.selectOperation=Select Operation
|
||||||
pipelineOptions.addOperationButton=Add operation
|
pipelineOptions.addOperationButton=Add operation
|
||||||
pipelineOptions.pipelineHeader=Pipeline:
|
pipelineOptions.pipelineHeader=Pipeline:
|
||||||
pipelineOptions.saveButton=Download
|
pipelineOptions.saveButton=Download
|
||||||
|
@ -118,7 +121,7 @@ account.accountSettings=Account Settings
|
||||||
account.adminSettings=Admin Settings - View and Add Users
|
account.adminSettings=Admin Settings - View and Add Users
|
||||||
account.userControlSettings=User Control Settings
|
account.userControlSettings=User Control Settings
|
||||||
account.changeUsername=Change Username
|
account.changeUsername=Change Username
|
||||||
account.changeUsername=Change Username
|
account.newUsername=New Username
|
||||||
account.password=Confirmation Password
|
account.password=Confirmation Password
|
||||||
account.oldPassword=Old password
|
account.oldPassword=Old password
|
||||||
account.newPassword=New Password
|
account.newPassword=New Password
|
||||||
|
@ -364,7 +367,7 @@ showJS.tags=JavaScript
|
||||||
|
|
||||||
home.autoRedact.title=Auto Redact
|
home.autoRedact.title=Auto Redact
|
||||||
home.autoRedact.desc=Auto Redacts(Blacks out) text in a PDF based on input text
|
home.autoRedact.desc=Auto Redacts(Blacks out) text in a PDF based on input text
|
||||||
showJS.tags=JavaScript
|
autoRedact.tags=Redact,Hide,black out,black,marker,hidden
|
||||||
|
|
||||||
home.tableExtraxt.title=PDF to CSV
|
home.tableExtraxt.title=PDF to CSV
|
||||||
home.tableExtraxt.desc=Extracts Tables from a PDF converting it to CSV
|
home.tableExtraxt.desc=Extracts Tables from a PDF converting it to CSV
|
||||||
|
@ -384,6 +387,11 @@ home.split-by-sections.title=Split PDF by Sections
|
||||||
home.split-by-sections.desc=Divide each page of a PDF into smaller horizontal and vertical sections
|
home.split-by-sections.desc=Divide each page of a PDF into smaller horizontal and vertical sections
|
||||||
split-by-sections.tags=Section Split, Divide, Customize
|
split-by-sections.tags=Section Split, Divide, Customize
|
||||||
|
|
||||||
|
home.AddStampRequest.title=Add Stamp to PDF
|
||||||
|
home.AddStampRequest.desc=Add text or add image stamps at set locations
|
||||||
|
AddStampRequest.tags=Stamp, Add image, center image, Watermark, PDF, Embed, Customize
|
||||||
|
|
||||||
|
|
||||||
###########################
|
###########################
|
||||||
# #
|
# #
|
||||||
# WEB PAGES #
|
# WEB PAGES #
|
||||||
|
@ -459,6 +467,37 @@ HTMLToPDF.header=HTML para PDF
|
||||||
HTMLToPDF.help=Aceita arquivos HTML e ZIPs contendo html/css/imagens etc necessários
|
HTMLToPDF.help=Aceita arquivos HTML e ZIPs contendo html/css/imagens etc necessários
|
||||||
HTMLToPDF.submit=Converter
|
HTMLToPDF.submit=Converter
|
||||||
HTMLToPDF.credit=Usa o WeasyPrint
|
HTMLToPDF.credit=Usa o WeasyPrint
|
||||||
|
HTMLToPDF.zoom=Zoom level for displaying the website.
|
||||||
|
HTMLToPDF.pageWidth=Width of the page in centimeters. (Blank to default)
|
||||||
|
HTMLToPDF.pageHeight=Height of the page in centimeters. (Blank to default)
|
||||||
|
HTMLToPDF.marginTop=Top margin of the page in millimeters. (Blank to default)
|
||||||
|
HTMLToPDF.marginBottom=Bottom margin of the page in millimeters. (Blank to default)
|
||||||
|
HTMLToPDF.marginLeft=Left margin of the page in millimeters. (Blank to default)
|
||||||
|
HTMLToPDF.marginRight=Right margin of the page in millimeters. (Blank to default)
|
||||||
|
HTMLToPDF.printBackground=Render the background of websites.
|
||||||
|
HTMLToPDF.defaultHeader=Enable Default Header (Name and page number)
|
||||||
|
HTMLToPDF.cssMediaType=Change the CSS media type of the page.
|
||||||
|
HTMLToPDF.none=None
|
||||||
|
HTMLToPDF.print=Print
|
||||||
|
HTMLToPDF.screen=Screen
|
||||||
|
|
||||||
|
|
||||||
|
#AddStampRequest
|
||||||
|
AddStampRequest.header=Stamp PDF
|
||||||
|
AddStampRequest.title=Stamp PDF
|
||||||
|
AddStampRequest.stampType=Stamp Type
|
||||||
|
AddStampRequest.stampText=Stamp Text
|
||||||
|
AddStampRequest.stampImage=Stamp Image
|
||||||
|
AddStampRequest.alphabet=Alphabet
|
||||||
|
AddStampRequest.fontSize=Font/Image Size
|
||||||
|
AddStampRequest.rotation=Rotation
|
||||||
|
AddStampRequest.opacity=Opacity
|
||||||
|
AddStampRequest.position=Position
|
||||||
|
AddStampRequest.overrideX=Override X Coordinate
|
||||||
|
AddStampRequest.overrideY=Override Y Coordinate
|
||||||
|
AddStampRequest.customMargin=Custom Margin
|
||||||
|
AddStampRequest.customColor=Custom Text Color
|
||||||
|
AddStampRequest.submit=Submit
|
||||||
|
|
||||||
|
|
||||||
#sanitizePDF
|
#sanitizePDF
|
||||||
|
@ -829,7 +868,6 @@ changeMetadata.keywords=Palavras-chave:
|
||||||
changeMetadata.modDate=Data de Modificação (aaaa/MM/dd HH:mm:ss):
|
changeMetadata.modDate=Data de Modificação (aaaa/MM/dd HH:mm:ss):
|
||||||
changeMetadata.producer=Produtor:
|
changeMetadata.producer=Produtor:
|
||||||
changeMetadata.subject=Assunto:
|
changeMetadata.subject=Assunto:
|
||||||
changeMetadata.title=Título:
|
|
||||||
changeMetadata.trapped=Trapped:
|
changeMetadata.trapped=Trapped:
|
||||||
changeMetadata.selectText.4=Outros Metadados
|
changeMetadata.selectText.4=Outros Metadados
|
||||||
changeMetadata.selectText.5=Adicionar Entrada de Metadados Personalizados
|
changeMetadata.selectText.5=Adicionar Entrada de Metadados Personalizados
|
||||||
|
|
Some files were not shown because too many files have changed in this diff Show more
Loading…
Reference in a new issue