diff --git a/.github/FUNDING.yml b/.github/FUNDING.yml index 2e9be9a1..30a5ce23 100644 --- a/.github/FUNDING.yml +++ b/.github/FUNDING.yml @@ -1,6 +1,6 @@ # These are supported funding model platforms -github: # Replace with up to 4 GitHub Sponsors-enabled usernames e.g., [user1, user2] +github: Frooodle # Replace with up to 4 GitHub Sponsors-enabled usernames e.g., [user1, user2] patreon: # Replace with a single Patreon username open_collective: # Replace with a single Open Collective username ko_fi: # Replace with a single Ko-fi username diff --git a/README.md b/README.md index 719cc8ae..e66c3595 100644 --- a/README.md +++ b/README.md @@ -6,6 +6,7 @@ [![Docker Image Version (tag latest semver)](https://img.shields.io/docker/v/frooodle/s-pdf/latest)](https://github.com/Frooodle/Stirling-PDF/) [![GitHub Repo stars](https://img.shields.io/github/stars/frooodle/stirling-pdf?style=social)](https://github.com/Frooodle/stirling-pdf) [![Paypal Donate](https://img.shields.io/badge/Paypal%20Donate-yellow?style=flat&logo=paypal)](https://www.paypal.com/paypalme/froodleplex) +[![Github Sponser](https://img.shields.io/badge/Github%20Sponsor-yellow?style=flat&logo=github)](https://github.com/sponsors/Frooodle) This is a powerful locally hosted web based PDF manipulation tool using docker that allows you to perform various operations on PDF files, such as splitting merging, converting, reorganizing, adding images, rotating, compressing, and more. This locally hosted web application started as a 100% ChatGPT-made application and has evolved to include a wide range of features to handle all your PDF needs. @@ -42,6 +43,8 @@ Feel free to request any features of bug fixes either in github issues or our [D - [OcrMyPdf](https://github.com/ocrmypdf/OCRmyPDF) - HTML, CSS, JavaScript - Docker +- PDF.js +- PDF-LIB.js ## How to use @@ -95,4 +98,4 @@ Stirling PDF allows easy customization of the visible application name. Simply use environment variables APP_HOME_NAME, APP_HOME_DESCRIPTION and APP_NAVBAR_NAME with Docker or Java. If running Java directly, you can also pass these as properties using -D arguments. -Using the same method you can also change the default language by providing APP_LOCALE with values like de-DE fr-FR or ar-AR to select your default language (Will always default to English on invalid locale) \ No newline at end of file +Using the same method you can also change the default language by providing APP_LOCALE with values like de-DE fr-FR or ar-AR to select your default language (Will always default to English on invalid locale) diff --git a/src/main/resources/messages_es_ES.properties b/src/main/resources/messages_es_ES.properties index 396b794b..e054d3f1 100644 --- a/src/main/resources/messages_es_ES.properties +++ b/src/main/resources/messages_es_ES.properties @@ -88,8 +88,8 @@ home.pdfToPDFA.desc=Convierte PDF to PDF/A para almacenamiento a largo plazo home.PDFToWord.title=PDF a Word home.PDFToWord.desc=Convertir formatos PDF a Word (DOC, DOCX y ODT) -home.PDFToPresentation.title=PDF a presentación -home.PDFToPresentation.desc=Convertir PDF a formatos de presentación (PPT, PPTX y ODP) +home.PDFToPresentation.title=PDF a presentación +home.PDFToPresentation.desc=Convertir PDF a formatos de presentación (PPT, PPTX y ODP) home.PDFToText.title=PDF a texto/RTF home.PDFToText.desc=Convertir PDF a texto o formato RTF @@ -117,16 +117,16 @@ settings.zipThreshold=Ficheros Zip cuando excede el número de ficheros descarga #OCR ocr.title=OCR / Escaneo de limpieza ocr.header=Escaneos de limpieza / OCR (Reconocimiento óptico de caracteres) -ocr.SeleccionaText.1=Selecciona los idiomas que se detectarán en el PDF (Los enumerados son los detectados actualmente): -ocr.SeleccionaText.2=Produzca un archivo de texto que contenga texto OCR junto con el PDF editado con OCR -ocr.SeleccionaText.3=Corrija las páginas que se escanearon en un ángulo torcido girándolas nuevamente a su lugar -ocr.SeleccionaText.4=Limpie la página para que sea menos probable que el OCR encuentre texto en el ruido de fondo. (Sin cambio de salida) -ocr.SeleccionaText.5=Limpie la página para que sea menos probable que el OCR encuentre texto en el ruido de fondo, mantiene la limpieza en la salida. -ocr.SeleccionaText.6=Ignora las páginas que tienen texto interactivo, solo las páginas OCR que son imágenes -ocr.SeleccionaText.7=Fuerza OCR, OCR eliminará en cada página todo el texto original -ocr.SeleccionaText.8=Normal (Se producirá un error si el PDF contiene texto) -ocr.SeleccionaText.9=Ajustes Adicionales -ocr.SeleccionaText.10=Modo OCR +ocr.selectText.1=Selecciona los idiomas que se detectarán en el PDF (Los enumerados son los detectados actualmente): +ocr.selectText.2=Produzca un archivo de texto que contenga texto OCR junto con el PDF editado con OCR +ocr.selectText.3=Corrija las páginas que se escanearon en un ángulo torcido girándolas nuevamente a su lugar +ocr.selectText.4=Limpie la página para que sea menos probable que el OCR encuentre texto en el ruido de fondo. (Sin cambio de salida) +ocr.selectText.5=Limpie la página para que sea menos probable que el OCR encuentre texto en el ruido de fondo, mantiene la limpieza en la salida. +ocr.selectText.6=Ignora las páginas que tienen texto interactivo, solo las páginas OCR que son imágenes +ocr.selectText.7=Fuerza OCR, OCR eliminará en cada página todo el texto original +ocr.selectText.8=Normal (Se producirá un error si el PDF contiene texto) +ocr.selectText.9=Ajustes Adicionales +ocr.selectText.10=Modo OCR ocr.help=Lea esta documentación sobre cómo usar esto para otros idiomas y/o no usarlo en docker ocr.credit=Este servicio utiliza OCRmyPDF y Tesseract para OCR. ocr.submit=Procesa PDF con OCR @@ -135,7 +135,7 @@ ocr.submit=Procesa PDF con OCR extractImages.title=Extraer imágenes extractImages.header=Extraer imágenes -extractImages.SeleccionaText=Selecciona el formato de imagen para convertir las imágenes extraídas +extractImages.selectText=Selecciona el formato de imagen para convertir las imágenes extraídas extractImages.submit=Extraer @@ -151,13 +151,13 @@ fileToPDF.submit=Convertir a PDF compress.title=Comprimir compress.header=Comprimir PDF compress.credit=Este servicio usa OCRmyPDF para la Compresión/Optimizatión del PDF. -compress.SeleccionaText.1=Nivel de Optimización: -compress.SeleccionaText.2=0 (Sin optimización) -compress.SeleccionaText.3=1 (Por defecto, optimización sin pérdidas) -compress.SeleccionaText.4=2 (Optimización con pérdida) -compress.SeleccionaText.5=3 (Optimización con pérdida, más agresiva) -compress.SeleccionaText.6=Habilita la vista web rápida (linealizar PDF) -compress.SeleccionaText.7=Habilita la codificación JBIG2 con pérdida +compress.selectText.1=Nivel de Optimización: +compress.selectText.2=0 (Sin optimización) +compress.selectText.3=1 (Por defecto, optimización sin pérdidas) +compress.selectText.4=2 (Optimización con pérdida) +compress.selectText.5=3 (Optimización con pérdida, más agresiva) +compress.selectText.6=Habilita la vista web rápida (linealizar PDF) +compress.selectText.7=Habilita la codificación JBIG2 con pérdida compress.submit=Comprimir @@ -169,9 +169,9 @@ addImage.submit=Añade imagen #merge -merge.title=Mezcla -merge.header=Mezcla múltiples PDFs (2+) -merge.submit=Mezcla +merge.title=Une +merge.header=Une múltiples PDFs (2+) +merge.submit=Une #pdfOrganiser pdfOrganiser.title=Organizador de páginas @@ -199,13 +199,13 @@ split.title=Dividir PDF split.header=Dividir PDF split.desc.1=Los números que selecciona son el número de página en el que desea hacer una división split.desc.2=Como tal, seleccionar 1,3,7-8 dividiría un documento de 10 páginas en 6 archivos PDF separados con: -split.desc.3=Documento #1: Page 1 -split.desc.4=Documento #2: Page 2 and 3 -split.desc.5=Documento #3: Page 4, 5 and 6 -split.desc.6=Documento #4: Page 7 -split.desc.7=Documento #5: Page 8 -split.desc.8=Documento #6: Page 9 and 10 -split.splitPages=Introduzca las páginas para dividir en: +split.desc.3=Documento #1: Página 1 +split.desc.4=Documento #2: Páginas 2 y 3 +split.desc.5=Documento #3: Páginas 4, 5 y 6 +split.desc.6=Documento #4: Página 7 +split.desc.7=Documento #5: Página 8 +split.desc.8=Documento #6: Páginas 9 y 10 +split.splitPages=Introduzca las páginas para dividir: split.submit=Dividir @@ -213,16 +213,16 @@ split.submit=Dividir imageToPDF.title=Imagen a PDF imageToPDF.header=Imagen a PDF imageToPDF.submit=Convertir -imageToPDF.SeleccionaText.1=Estirar para ajustar -imageToPDF.SeleccionaText.2=Auto rotación PDF -imageToPDF.SeleccionaText.3=Lógica de archivos múltiples (Únicamente activado si funciona con multiples imágenes) -imageToPDF.SeleccionaText.4=Une en un único PDF -imageToPDF.SeleccionaText.5=Convertir a PDFs separados +imageToPDF.selectText.1=Estirar para ajustar +imageToPDF.selectText.2=Auto rotación PDF +imageToPDF.selectText.3=Lógica de archivos múltiples (Únicamente activado si funciona con multiples imágenes) +imageToPDF.selectText.4=Une en un único PDF +imageToPDF.selectText.5=Convertir a PDFs separados #pdfToImage pdfToImage.title=PDF a Imagen pdfToImage.header=PDF a Imagen -pdfToImage.SeleccionaText=Formato de Imagen +pdfToImage.selectText=Formato de Imagen pdfToImage.singleOrMultiple=Tipo resultante de imagen pdfToImage.single=Imagen Grande Única pdfToImage.multi=Múltiples Imágenes @@ -235,68 +235,68 @@ pdfToImage.submit=Convertir #addPassword addPassword.title=Añade Contraseña addPassword.header=Añade contraseña (Encripta) -addPassword.SeleccionaText.1=Selecciona PDF para encriptar -addPassword.SeleccionaText.2=Contraseña -addPassword.SeleccionaText.3=Longitud de la clave de cifrado -addPassword.SeleccionaText.4=Valores altos son más fuertes, pero valores bajos tienen mejor compatibilidad. -addPassword.SeleccionaText.5=Permisos para establecer -addPassword.SeleccionaText.6=Impedir el ensamblaje del documento -addPassword.SeleccionaText.7=Impedir la extracción de contenido -addPassword.SeleccionaText.8=Impedir la extracción para la accesibilidad -addPassword.SeleccionaText.9=Impedir rellenar formulario -addPassword.SeleccionaText.10=Impedir modificación -addPassword.SeleccionaText.11=Impedir modificación de anotaciones -addPassword.SeleccionaText.12=Impedir imprimir -addPassword.SeleccionaText.13=Impedir imprimir diferentes formatos +addPassword.selectText.1=Selecciona PDF para encriptar +addPassword.selectText.2=Contraseña +addPassword.selectText.3=Longitud de la clave de cifrado +addPassword.selectText.4=Valores altos son más fuertes, pero valores bajos tienen mejor compatibilidad. +addPassword.selectText.5=Permisos para establecer +addPassword.selectText.6=Impedir el ensamblaje del documento +addPassword.selectText.7=Impedir la extracción de contenido +addPassword.selectText.8=Impedir la extracción para la accesibilidad +addPassword.selectText.9=Impedir rellenar formulario +addPassword.selectText.10=Impedir modificación +addPassword.selectText.11=Impedir modificación de anotaciones +addPassword.selectText.12=Impedir imprimir +addPassword.selectText.13=Impedir imprimir diferentes formatos addPassword.submit=Encripta #watermark watermark.title=Añade marca de agua watermark.header=Añade marca de agua -watermark.SeleccionaText.1=Selecciona PDF para añadir marca de agua: -watermark.SeleccionaText.2=Texto de la marca de agua: -watermark.SeleccionaText.3=Tamaño de la Fuente: -watermark.SeleccionaText.4=Rotación (0-360): -watermark.SeleccionaText.5=Ancho (Espacio entre cada marca de agua horizontalmente): -watermark.SeleccionaText.6=Alto (Espacio entre cada marca de agua verticalmente): -watermark.SeleccionaText.7=Opacidad (0% - 100%): +watermark.selectText.1=Selecciona PDF para añadir marca de agua: +watermark.selectText.2=Texto de la marca de agua: +watermark.selectText.3=Tamaño de la Fuente: +watermark.selectText.4=Rotación (0-360): +watermark.selectText.5=Ancho (Espacio entre cada marca de agua horizontalmente): +watermark.selectText.6=Alto (Espacio entre cada marca de agua verticalmente): +watermark.selectText.7=Opacidad (0% - 100%): watermark.submit=Añade marca de agua #remove-watermark remove-watermark.title=Elimina marca de agua remove-watermark.header=Elimina marca de agua -remove-watermark.SeleccionaText.1=Selecciona PDF para eliminar la marca de agua: -remove-watermark.SeleccionaText.2=Texto de la marca de agua: +remove-watermark.selectText.1=Selecciona PDF para eliminar la marca de agua: +remove-watermark.selectText.2=Texto de la marca de agua: remove-watermark.submit=Elimina marca de agua #Change permissions permissions.title=Cambiar Permisos permissions.header=Cambiar Permisos permissions.warning=Advertencia para que estos permisos no se puedan cambiar, se recomienda configurarlos con una contraseña a través de la página de cambio de contraseña -permissions.SeleccionaText.1=Selecciona PDF para cambiar los permisos -permissions.SeleccionaText.2=Permisos a establecer -permissions.SeleccionaText.3=Impedir el ensamblaje del documento -permissions.SeleccionaText.4=Impedir la extracción de contenido -permissions.SeleccionaText.5=Impedir la extracción para la accesibilidad -permissions.SeleccionaText.6=Impedir rellenar formulario -permissions.SeleccionaText.7=Impedir modificación -permissions.SeleccionaText.8=Impedir modificación de anotaciones -permissions.SeleccionaText.9=Impedir imprimir -permissions.SeleccionaText.10=Impedir imprimir diferentes formatos +permissions.selectText.1=Selecciona PDF para cambiar los permisos +permissions.selectText.2=Permisos a establecer +permissions.selectText.3=Impedir el ensamblaje del documento +permissions.selectText.4=Impedir la extracción de contenido +permissions.selectText.5=Impedir la extracción para la accesibilidad +permissions.selectText.6=Impedir rellenar formulario +permissions.selectText.7=Impedir modificación +permissions.selectText.8=Impedir modificación de anotaciones +permissions.selectText.9=Impedir imprimir +permissions.selectText.10=Impedir imprimir diferentes formatos permissions.submit=Cambiar #remove password removePassword.title=Elimina contraseña removePassword.header=Elimina contraseña (Desencripta) -removePassword.SeleccionaText.1=Selecciona PDF para Desencriptar -removePassword.SeleccionaText.2=Contraseña +removePassword.selectText.1=Selecciona PDF para Desencriptar +removePassword.selectText.2=Contraseña removePassword.submit=Elimina changeMetadata.title=Cambia Metadatos changeMetadata.header=Cambia Metadatos -changeMetadata.SeleccionaText.1=Edite las variables que desea cambiar -changeMetadata.SeleccionaText.2=Elimina todos los metadatos -changeMetadata.SeleccionaText.3=Mostrar metadatos personalizados: +changeMetadata.selectText.1=Edite las variables que desea cambiar +changeMetadata.selectText.2=Elimina todos los metadatos +changeMetadata.selectText.3=Mostrar metadatos personalizados: changeMetadata.author=Autor: changeMetadata.creationDate=Fecha de Creación (yyyy/MM/dd HH:mm:ss): changeMetadata.creator=Creador: @@ -306,13 +306,13 @@ changeMetadata.producer=Productor: changeMetadata.subject=Asunto: changeMetadata.title=Título: changeMetadata.trapped=Trapped: -changeMetadata.SeleccionaText.4=Otros Metadatos: -changeMetadata.SeleccionaText.5=Agregar entrada de metadatos personalizados +changeMetadata.selectText.4=Otros Metadatos: +changeMetadata.selectText.5=Agregar entrada de metadatos personalizados changeMetadata.submit=Cambia xlsToPdf.title=Excel a PDF xlsToPdf.header=Excel a PDF -xlsToPdf.SeleccionaText.1=Selecciona hoja de cálculo de Excel XLS o XLSX para convertir +xlsToPdf.selectText.1=Selecciona hoja de cálculo de Excel XLS o XLSX para convertir xlsToPdf.convert=convertir @@ -328,29 +328,29 @@ pdfToPDFA.submit=Convertir PDFToWord.title=PDF a Word PDFToWord.header=PDF a Word PDFToWord.selectText.1=Formato de archivo de salida -PDFToWord.credit=Este servicio utiliza LibreOffice para la conversión de archivos. +PDFToWord.credit=Este servicio utiliza LibreOffice para la conversión de archivos. PDFToWord.submit=Convertir -PDFToPresentation.title=PDF a presentación -PDFToPresentation.header=PDF a presentación +PDFToPresentation.title=PDF a presentación +PDFToPresentation.header=PDF a presentación PDFToPresentation.selectText.1=Formato de archivo de salida -PDFToPresentation.credit=Este servicio utiliza LibreOffice para la conversión de archivos. +PDFToPresentation.credit=Este servicio utiliza LibreOffice para la conversión de archivos. PDFToPresentation.submit=Convertir PDFToText.title=PDF a texto/RTF PDFToText.header=PDF a texto/RTF PDFToText.selectText.1=Formato de archivo de salida -PDFToText.credit=Este servicio utiliza LibreOffice para la conversión de archivos. +PDFToText.credit=Este servicio utiliza LibreOffice para la conversión de archivos. PDFToText.submit=Convertir PDFToHTML.title=PDF a HTML PDFToHTML.header=PDF a HTML -PDFToHTML.credit=Este servicio utiliza LibreOffice para la conversión de archivos. +PDFToHTML.credit=Este servicio utiliza LibreOffice para la conversión de archivos. PDFToHTML.submit=Convertir PDFToXML.title=PDF a XML PDFToXML.header=PDF a XML -PDFToXML.credit=Este servicio utiliza LibreOffice para la conversión de archivos. +PDFToXML.credit=Este servicio utiliza LibreOffice para la conversión de archivos. PDFToXML.submit=Convertir diff --git a/src/main/resources/static/css/general.css b/src/main/resources/static/css/general.css index 47465094..f6e4809e 100644 --- a/src/main/resources/static/css/general.css +++ b/src/main/resources/static/css/general.css @@ -21,3 +21,17 @@ html[lang-direction=rtl] * { direction: rtl; text-align: right; } + +.align-top { + position: absolute; + top: 0; +} +.align-center-right { + position: absolute; + right: 0; + top: 50%; +} +.align-bottom { + position: absolute; + bottom: 0; +} diff --git a/src/main/resources/static/pdf-lib.min.js b/src/main/resources/static/js/pdf-lib.min.js similarity index 100% rename from src/main/resources/static/pdf-lib.min.js rename to src/main/resources/static/js/pdf-lib.min.js diff --git a/src/main/resources/templates/fragments/common.html b/src/main/resources/templates/fragments/common.html index 53ae9662..52a35367 100644 --- a/src/main/resources/templates/fragments/common.html +++ b/src/main/resources/templates/fragments/common.html @@ -23,7 +23,7 @@ - + diff --git a/src/main/resources/templates/page-manager.html b/src/main/resources/templates/page-manager.html new file mode 100644 index 00000000..5a249ceb --- /dev/null +++ b/src/main/resources/templates/page-manager.html @@ -0,0 +1,450 @@ + + + + + + + +
+
+
+

+
+
+
+

+ +
+ + + + + + + + + +
+ +
+ +
+
+
+
+
+
+ + + + + + + \ No newline at end of file