From 8a427e82bbd3fe81197686320d747c08d794c9a6 Mon Sep 17 00:00:00 2001 From: tale-fau Date: Thu, 21 Sep 2023 16:33:27 +0200 Subject: [PATCH] update read me + adding several compression intensity levels --- README.en.md | 329 ----------------------------------- README.fr.md | 336 ++++++++++++++++++++++++++++++++++++ README.md | 183 ++++++++++---------- app.php | 11 +- public/js/compress.js | 13 ++ templates/compress.html.php | 63 ++----- 6 files changed, 460 insertions(+), 475 deletions(-) delete mode 100644 README.en.md create mode 100644 README.fr.md diff --git a/README.en.md b/README.en.md deleted file mode 100644 index 3245b74..0000000 --- a/README.en.md +++ /dev/null @@ -1,329 +0,0 @@ -[Français](README.md) | **[English](README.en.md)** - -# PDF Signature - -Free web software for signing PDFs. - -## Instances -List of instances where you can use this software: -- [pdf.24eme.fr](https://pdf.24eme.fr) -- [pdf.libreon.fr](https://pdf.libreon.fr) -- [pdf.hostux.net](https://pdf.hostux.net) -- [pdf.nebulae.co](https://pdf.nebulae.co) - -_Feel free to add yours through an issue or a pull request._ - -## License -Open-source software under the AGPL V3 license. - -## Installation -### Debian/Ubuntu -Dependencies: -- php >= 5.6 -- rsvg-convert -- pdftk -- imagemagick -- potrace - -Installing dependencies: -``` -sudo aptitude install php librsvg2-bin pdftk imagemagick potrace -``` - -Getting the source code: - -``` -git clone https://github.com/24eme/signaturepdf.git -``` - -To run it: - -``` -php -S localhost:8000 -t public -``` - -#### PHP Configuration - -``` -upload_max_filesize = 24M # Maximum size of the PDF file to sign -post_max_size = 24M # Maximum size of the PDF file to sign -max_file_uploads = 201 # Maximum number of pages in the PDF, here 200 pages + the original PDF -``` - -#### Apache Configuration - -``` -DocumentRoot /path/to/signaturepdf/public - - Require all granted - FallbackResource /index.php - php_value max_file_uploads 201 - php_value upload_max_filesize 24M - php_value post_max_size 24M - -``` - -### Deploy with Docker - -#### Building the image - -```bash -docker build -t signaturepdf . -``` - -#### Running a container - -```bash -docker run -d --name=signaturepdf -p 8080:80 signaturepdf -``` - -[localhost:8080](http://localhost:8080) - -#### Configuration - -The following variables can be used to configure the deployment: - -| Variable | description | exemple | defaut | -| ---------------------- |-----------------------------------------------------------------------| -------------------------------- | --------- | -| `SERVERNAME` | Deployment URL | `pdf.24eme.fr` | localhost | -| `UPLOAD_MAX_FILESIZE` | Maximum size of the PDF file to sign | 48M | 24M | -| `POST_MAX_SIZE` | Maximum size of the PDF file to sign | 48M | 24M | -| `MAX_FILE_UPLOADS` | Maximum number of pages in the PDF, here 200 pages + the original PDF | 401 | 201 | -| `PDF_STORAGE_PATH` | Path where uploaded PDF files can be stored | /data | /data | -| `DISABLE_ORGANIZATION` | Disable the Organize route | true | false | -| `PDF_DEMO_LINK` | Show, hide, or change the demo PDF link | false, `link` or `relative path` | true | - -```bash -docker run -d --name=signaturepdf -p 8080:80 -e SERVERNAME=pdf.example.org -e UPLOAD_MAX_FILESIZE=48M -e POST_MAX_SIZE=48M -e MAX_FILE_UPLOADS=401 -e PDF_STORAGE_PATH=/data signaturepdf -``` - -### Alpine - -Here is a script to install the solution on Linux Alpine (tested with version 3.15). -Remember to edit the "domain" variable at the beginning of the script to match the URL it will be called with. - -The main components are: - -- php 8 + php-fpm -- Nginx -- pdftk ("manual" installation requiring openjdk8) -- imagick -- potrace -- librsvg - -What the script does: - -- Installs dependencies -- Configures php and php-fpm -- Configures Nginx -- Configures the config.ini -- Clones the repo - -``` -#!/bin/sh - -domain='sign.example.com' - -apk update -apk add bash nginx git php8 php8-fpm php8-session php8-gd php8-fileinfo openjdk8 imagemagick potrace librsvg - -cd /tmp -wget https://gitlab.com/pdftk-java/pdftk/-/jobs/924565145/artifacts/raw/build/libs/pdftk-all.jar -mv pdftk-all.jar pdftk.jar - -cat <>pdftk -#!/usr/bin/env bash -/usr/bin/java -jar "\$0.jar" "\$@" -EOF - -chmod 775 pdftk* -mv pdftk* /usr/bin - -sed -i 's/user = nobody/user = nginx/g' /etc/php8/php-fpm.d/www.conf -sed -i 's/;listen.owner = nginx/listen.owner = nginx/g' /etc/php8/php-fpm.d/www.conf - -sed -i 's/post_max_size = 8M/post_max_size = 50M/g' /etc/php8/php.ini -sed -i 's/upload_max_filesize = 2M/upload_max_filesize = 50M/g' /etc/php8/php.ini -sed -i 's/max_file_uploads = 20 /max_file_uploads = 300/g' /etc/php8/php.ini - -service php-fpm8 restart - -cd /var/www -git clone https://github.com/24eme/signaturepdf.git - -cat <>/etc/nginx/http.d/signaturepdf.conf -server { - - listen 80 default_server; - listen [::]:80 default_server; - - server_name ${domain}; - - client_max_body_size 0; - - root /var/www/signaturepdf/public/; - - index index.php index.html; - - location / { - # URLs to attempt, including pretty ones. - try_files \$uri \$uri/ /index.php?\$query_string; - } - - location ~ [^/]\.php(/|$) { - root /var/www/signaturepdf/public/; - - fastcgi_split_path_info ^(.+\.php)(/.+)$; - fastcgi_index index.php; - include fastcgi_params; - - fastcgi_buffer_size 128k; - fastcgi_buffers 128 128k; - fastcgi_param PATH_INFO \$fastcgi_path_info; - fastcgi_param SCRIPT_FILENAME \$document_root\$fastcgi_script_name; - fastcgi_pass 127.0.0.1:9000; - - } - -} -EOF - -rm /etc/nginx/http.d/default.conf -rm -R /var/www/localhost - -service nginx restart - -rc-update add nginx -rc-update add php-fpm8 - -mkdir /var/www/signaturepdf/tmp -chown nginx /var/www/signaturepdf/tmp - -cat <>/var/www/signaturepdf/config/config.ini -PDF_STORAGE_PATH=/var/www/signaturepdf/tmp -EOF -``` - -## Configuration - -### Enabling and Configuring Multi-Signature Mode - -This mode allows multiple people to sign a PDF, but it requires that the PDFs be stored on the server. - -It is not mandatory to enable this mode for the application to work; it is an option. - -Create the `config/config.ini` file - -``` -cp config/config.ini{.example,} -``` - -In the `config/config.ini` file, configure the `PDF_STORAGE_PATH` variable with the path where uploaded PDF files can be stored: - -``` -PDF_STORAGE_PATH=/path/to/folder -``` - -Create this folder: - -``` -mkdir /path/to/folder -``` - -The web server should have write permissions on this folder. - -For example, for Apache: - -``` -chown www-data /path/to/folder/to/store/pdf -``` - -### Disabling the Organize Mode - -To disable the Organize mode, add `DISABLE_ORGANIZATION=true` to the -`config/config.ini` file. - -### Hiding or Modifying the Demo PDF Link - -To hide the demo PDF link, add `PDF_DEMO_LINK=false` to the -`config/config.ini` file. - -### Default Fields for Metadata Editing - -In the `config/config.ini` file, you can add as many fields as you want with the HTML input type (text, date, number, email, etc.) that will be preloaded for each PDF. - -``` -METADATA_DEFAULT_FIELDS[field1].type = "text" -METADATA_DEFAULT_FIELDS[field2].type = "text" -METADATA_DEFAULT_FIELDS[field3].type = "date" -METADATA_DEFAULT_FIELDS[field4].type = "number" -``` - -## Update - -The latest stable version is on the `master` branch. To update, simply fetch the latest changes: - -``` -git pull -r -``` - -## Tests - -To run functional tests: - -``` -make test -``` - -The tests are performed using `puppeteer` and `jest`. - -To run the tests and view the browser (in debug mode): - -``` -DEBUG=1 make test -``` - -## Libraries Used - -- **Fat-Free** PHP micro framework: https://github.com/bcosca/fatfree (GPLv3) -- **Bootstrap** HTML, CSS, and JavaScript framework: https://getbootstrap.com/ (MIT) -- **PDF.js** JavaScript library for rendering PDFs in an HTML canvas: https://github.com/mozilla/pdf.js (Apache-2.0) -- **Fabric.js** JavaScript library for manipulating an HTML canvas: https://github.com/fabricjs/fabric.js (MIT) -- **PDFtk** PDF manipulation tools (GPL) -- **librsvg** SVG manipulation tools: https://gitlab.gnome.org/GNOME/librsvg (LGPL-2+) -- **potrace** Bitmap to vector image conversion tools: http://potrace.sourceforge.net/ (GPLv2) -- **OpenType.js** Tools for converting text and its font into paths: https://github.com/opentypejs/opentype.js (MIT) -- **ImageMagick** Image manipulation toolset: https://imagemagick.org/ (Apache-2.0) -- **Caveat** Handwriting-style font: https://github.com/googlefonts/caveat (OFL-1.1) -- **PDF-LIB** JavaScript library for PDF manipulation used for writing metadata: https://pdf-lib.js.org/ (MIT) - -For testing: - -- **Jest** JavaScript Testing Framework: https://jestjs.io/ (MIT) -- **Puppeteer** Node.js library for controlling a web browser: https://github.com/puppeteer/puppeteer (Apache-2.0) - -## Contributions - -### Translation - -To update the translation, simply execute `make` that will update the `.pot` file, -which will merge the `.po` files which then will allow to create updated `.mo` files. - -Translations might be added on Weblate : https://hosted.weblate.org/projects/signature-pdf/application/ - - -### Contributors - -These people are the authors of the code of this software : - -Vincent LAURENT (24ème), Jean-Baptiste Le Metayer (24ème), Xavier Garnier (Logilab), Simon Chabot (Logilab), Tangui Morlier (24ème), Gabriel POMA (24ème), Tanguy Le Faucheur (24ème), Étienne Deparis, battosai30 - -### Fundings - -- 1 365 € excl. taxes from the company Logilab for the development of the shared signature feature -- 1 950 € excl. taxes from the company Logilab for the development of the metadata editing feature -- 100 € excl. taxes donations from the company Spirkop -- 100 € excl. taxes donations from the company PDG IT -- 1 040 € excl. taxes from the foundation NLNet pour software internationalization - -The development of the software was primarily done during the working hours of 24ème employees. diff --git a/README.fr.md b/README.fr.md new file mode 100644 index 0000000..0cab1e4 --- /dev/null +++ b/README.fr.md @@ -0,0 +1,336 @@ +**[Français](README.md)** | [English](README.en.md) + +# Signature de PDF + +Logiciel web libre permettant de signer un PDF. + +## Instances + +Liste des instances permettant d'utiliser ce logiciel : + +- [pdf.24eme.fr](https://pdf.24eme.fr) +- [pdf.libreon.fr](https://pdf.libreon.fr) +- [pdf.hostux.net](https://pdf.hostux.net) +- [pdf.nebulae.co](https://pdf.nebulae.co) + +_N'hésitez pas à rajouter la votre via une issue ou une pull request_ + +## License + +Logiciel libre sous license AGPL V3 + +## Installation + +### Debian/Ubuntu + +Dépendances : + +- php >= 5.6 +- rsvg-convert +- pdftk +- imagemagick +- potrace + +Installation des dépendances : + +``` +sudo aptitude install php librsvg2-bin pdftk imagemagick potrace +``` + +Récupération des sources : + +``` +git clone https://github.com/24eme/signaturepdf.git +``` + +Pour le lancer : + +``` +php -S localhost:8000 -t public +``` + +#### Configuration de PHP + +``` +upload_max_filesize = 24M # Taille maximum du fichier PDF à signer +post_max_size = 24M # Taille maximum du fichier PDF à signer +max_file_uploads = 201 # Nombre de pages maximum du PDF, ici 200 pages + le PDF d'origine +``` + +#### Configuration d'apache + +``` +DocumentRoot /path/to/signaturepdf/public + + + Require all granted + FallbackResource /index.php + php_value max_file_uploads 201 + php_value upload_max_filesize 24M + php_value post_max_size 24M + +``` + +### Déployer avec docker + +#### Construction de l'image + +```bash +docker build -t signaturepdf . +``` + +#### Lancement d'un conteneur + +```bash +docker run -d --name=signaturepdf -p 8080:80 signaturepdf +``` + +[localhost:8080](http://localhost:8080) + +#### Configuration + +Les variables suivantes permettent de configurer le déployement : + +| Variable | description | exemple | defaut | +| ---------------------- | ------------------------------------------------------------------ | -------------------------------- | --------- | +| `SERVERNAME` | url de déploiement | `pdf.24eme.fr` | localhost | +| `UPLOAD_MAX_FILESIZE` | Taille maximum du fichier PDF à signer | 48M | 24M | +| `POST_MAX_SIZE` | Taille maximum du fichier PDF à signer | 48M | 24M | +| `MAX_FILE_UPLOADS` | Nombre de pages maximum du PDF, ici 200 pages + le PDF d'origine | 401 | 201 | +| `PDF_STORAGE_PATH` | chemin vers lequel les fichiers pdf uploadés pourront être stockés | /data | /data | +| `DISABLE_ORGANIZATION` | Desactiver la route Organiser | true | false | +| `PDF_DEMO_LINK` | Afficher, retirer ou changer le lien de PDF de démo | false, `link` or `relative path` | true | + +```bash +docker run -d --name=signaturepdf -p 8080:80 -e SERVERNAME=pdf.example.org -e UPLOAD_MAX_FILESIZE=48M -e POST_MAX_SIZE=48M -e MAX_FILE_UPLOADS=401 -e PDF_STORAGE_PATH=/data signaturepdf +``` + +### Alpine + +Voici un script permettant d'installer la solution sous Linux Alpine (testé en version 3.15). +Pensez à éditer la variable "domain" en début de script pour correspondre à l'URL avec laquelle elle sera appelée. + +Les composants principaux sont : + +- php 8 + php-fpm +- Nginx +- pdftk (installation "manuelle" nécessitant openjdk8) +- imagick +- potrace +- librsvg + +Ce que fait le script : + +- Installation des dépendances +- Configuration de php et php-fpm +- Configuration d'Nginx +- Configuration du config.ini +- Git clone du repo + +``` +#!/bin/sh + +domain='sign.example.com' + +apk update +apk add bash nginx git php8 php8-fpm php8-session php8-gd php8-fileinfo openjdk8 imagemagick potrace librsvg + +cd /tmp +wget https://gitlab.com/pdftk-java/pdftk/-/jobs/924565145/artifacts/raw/build/libs/pdftk-all.jar +mv pdftk-all.jar pdftk.jar + +cat <>pdftk +#!/usr/bin/env bash +/usr/bin/java -jar "\$0.jar" "\$@" +EOF + +chmod 775 pdftk* +mv pdftk* /usr/bin + +sed -i 's/user = nobody/user = nginx/g' /etc/php8/php-fpm.d/www.conf +sed -i 's/;listen.owner = nginx/listen.owner = nginx/g' /etc/php8/php-fpm.d/www.conf + +sed -i 's/post_max_size = 8M/post_max_size = 50M/g' /etc/php8/php.ini +sed -i 's/upload_max_filesize = 2M/upload_max_filesize = 50M/g' /etc/php8/php.ini +sed -i 's/max_file_uploads = 20 /max_file_uploads = 300/g' /etc/php8/php.ini + +service php-fpm8 restart + +cd /var/www +git clone https://github.com/24eme/signaturepdf.git + +cat <>/etc/nginx/http.d/signaturepdf.conf +server { + + listen 80 default_server; + listen [::]:80 default_server; + + server_name ${domain}; + + client_max_body_size 0; + + root /var/www/signaturepdf/public/; + + index index.php index.html; + + location / { + # URLs to attempt, including pretty ones. + try_files \$uri \$uri/ /index.php?\$query_string; + } + + location ~ [^/]\.php(/|$) { + root /var/www/signaturepdf/public/; + + fastcgi_split_path_info ^(.+\.php)(/.+)$; + fastcgi_index index.php; + include fastcgi_params; + + fastcgi_buffer_size 128k; + fastcgi_buffers 128 128k; + fastcgi_param PATH_INFO \$fastcgi_path_info; + fastcgi_param SCRIPT_FILENAME \$document_root\$fastcgi_script_name; + fastcgi_pass 127.0.0.1:9000; + + } + +} +EOF + +rm /etc/nginx/http.d/default.conf +rm -R /var/www/localhost + +service nginx restart + +rc-update add nginx +rc-update add php-fpm8 + +mkdir /var/www/signaturepdf/tmp +chown nginx /var/www/signaturepdf/tmp + +cat <>/var/www/signaturepdf/config/config.ini +PDF_STORAGE_PATH=/var/www/signaturepdf/tmp +EOF +``` + +## Configuration + +### Activation et configuration du mode partage de signature à plusieurs + +Ce mode permet de proposer la signature d'un pdf à plusieurs personnes mais il nécessite que les PDF soient stockés sur le serveur, il convient donc de définir un dossier qui contiendra ces PDF. + +Il n'est pas obligatoire d'activer ce mode pour que l'application fonctionne c'est une option. + +Créer le fichier `config/config.ini` + +``` +cp config/config.ini{.example,} +``` + +Dans ce fichier `config/config.ini`, il suffit ce configurer la variable `PDF_STORAGE_PATH` avec le chemin vers lequel les fichiers pdf uploadés pourront être stockés : + +``` +PDF_STORAGE_PATH=/path/to/folder +``` + +Créer ce dossier : + +``` +mkdir /path/to/folder +``` + +Le serveur web devra avoir les droits en écriture sur ce dossier. + +Par exemple pour apache : + +``` +chown www-data /path/to/folder/to/store/pdf +``` + +### Desactivation du mode Organiser + +Pour desactiver le mode Organiser, ajouter `DISABLE_ORGANIZATION=true` dans le fichier +`config/config.ini`. + +### Cacher ou modifier le lien de PDF de démo + +Pour cacher le lien de pdf de démo, ajouter `PDF_DEMO_LINK=false` dans le fichier +`config/config.ini`. + +### Champs chargés par défaut pour l'édition de métadonnéés + +Dans le fichier de configuration `config/config.ini` il est possible de rajouter autant de champs que l'on souhaite avec le type HTML de l'input (text, date, number email, etc ...) qui seront préchargées pour chaque PDF. + +``` +METADATA_DEFAULT_FIELDS[field1].type = "text" +METADATA_DEFAULT_FIELDS[field2].type = "text" +METADATA_DEFAULT_FIELDS[field3].type = "date" +METADATA_DEFAULT_FIELDS[field4].type = "number" +``` + +## Mise à jour + +La dernière version stable est sur la branche `master`, pour la mise à jour il suffit de récupérer les dernières modifications : + +``` +git pull -r +``` + +## Tests + +Pour exécuter les tests fonctionnels : + +``` +make test +``` + +Les tests sont réalisés avec `puppeteer` et `jest`. + +Pour lancer les tests et voir le navigateur (en mode debug) : + +``` +DEBUG=1 make test +``` + +## Librairies utilisées + +- **Fat-Free** micro framework PHP : https://github.com/bcosca/fatfree (GPLv3) +- **Bootstrap** framework html, css et javascript : https://getbootstrap.com/ (MIT) +- **PDF.js** librairie de lecture de PDF dans un canvas HTML : https://github.com/mozilla/pdf.js (Apache-2.0) +- **Fabric.js** librairie pour manipuler un canvas HTML : https://github.com/fabricjs/fabric.js (MIT) +- **PDFtk** outils de manipulation de PDF (GPL) +- **librsvg** outils de manipulation de SVG : https://gitlab.gnome.org/GNOME/librsvg (LGPL-2+) +- **potrace** outils de transformation d'image bitamp en image vectorisé : http://potrace.sourceforge.net/ (GPLv2) +- **OpenType.js** outils de transformation d'un texte et sa police en chemin : https://github.com/opentypejs/opentype.js (MIT) +- **ImageMagick** ensemble d'outils de manipulation d'images : https://imagemagick.org/ (Apache-2.0) +- **Caveat** police de caractères style écriture à la main : https://github.com/googlefonts/caveat (OFL-1.1) +- **PDF-LIB** librairie js permettant de manipuler un PDF qui est utilisé pour écrire dans les métadonnées : https://pdf-lib.js.org/ (MIT) + +Pour les tests : + +- **Jest** Framework de Test Javascript : https://jestjs.io/ (MIT) +- **Puppeteer** librairie Node.js pour contrôler un navigateur : https://github.com/puppeteer/puppeteer (Apache-2.0) + +## Contributions + +### Traductions + +Pour mettre à jour la traduction, exécutez simplement `make` qui mettra a jour le fichier `.pot`, +qui fera un merge avec les fichiers `.po` qui permetteront de recréer les fichiers `.mo` mis a jour. + +Des traductions peuvent etre ajoutées sur Weblate : https://hosted.weblate.org/projects/signature-pdf/application/ + +### Contributeurs + +Ces personnes sont auteurices du code de ce logiciel : + +Vincent LAURENT (24ème), Jean-Baptiste Le Metayer (24ème), Xavier Garnier (Logilab), Simon Chabot (Logilab), Tangui Morlier (24ème), Gabriel POMA (24ème), Tanguy Le Faucheur (24ème), Étienne Deparis, battosai30 + +### Financements + +- 1 365 € HT de la société Logilab pour le développement du mode signature partagé à plusieurs +- 1 950 € HT de la société Logilab pour le développement de l'édition des métadonnées +- 100 € HT de don de la société Spirkop +- 100 € HT de don de la société PDG IT +- 1 040 € HT de la fondation NLNet pour l'internationalisation du logiciel + +Les modules signature et organiser ont été réalisés sur le temps de travail de salariés du 24ème. diff --git a/README.md b/README.md index 0cab1e4..cb3de7a 100644 --- a/README.md +++ b/README.md @@ -1,67 +1,57 @@ -**[Français](README.md)** | [English](README.en.md) +# PDF Signature -# Signature de PDF - -Logiciel web libre permettant de signer un PDF. +Free web software for signing PDFs. ## Instances - -Liste des instances permettant d'utiliser ce logiciel : - +List of instances where you can use this software: - [pdf.24eme.fr](https://pdf.24eme.fr) - [pdf.libreon.fr](https://pdf.libreon.fr) - [pdf.hostux.net](https://pdf.hostux.net) - [pdf.nebulae.co](https://pdf.nebulae.co) -_N'hésitez pas à rajouter la votre via une issue ou une pull request_ +_Feel free to add yours through an issue or a pull request._ ## License - -Logiciel libre sous license AGPL V3 +Open-source software under the AGPL V3 license. ## Installation - ### Debian/Ubuntu - -Dépendances : - +Dependencies: - php >= 5.6 - rsvg-convert - pdftk - imagemagick - potrace -Installation des dépendances : - +Installing dependencies: ``` sudo aptitude install php librsvg2-bin pdftk imagemagick potrace ``` -Récupération des sources : +Getting the source code: ``` git clone https://github.com/24eme/signaturepdf.git ``` -Pour le lancer : +To run it: ``` php -S localhost:8000 -t public ``` -#### Configuration de PHP +#### PHP Configuration ``` -upload_max_filesize = 24M # Taille maximum du fichier PDF à signer -post_max_size = 24M # Taille maximum du fichier PDF à signer -max_file_uploads = 201 # Nombre de pages maximum du PDF, ici 200 pages + le PDF d'origine +upload_max_filesize = 24M # Maximum size of the PDF file to sign +post_max_size = 24M # Maximum size of the PDF file to sign +max_file_uploads = 201 # Maximum number of pages in the PDF, here 200 pages + the original PDF ``` -#### Configuration d'apache +#### Apache Configuration ``` DocumentRoot /path/to/signaturepdf/public - Require all granted FallbackResource /index.php @@ -71,15 +61,15 @@ DocumentRoot /path/to/signaturepdf/public ``` -### Déployer avec docker +### Deploy with Docker -#### Construction de l'image +#### Building the image ```bash docker build -t signaturepdf . ``` -#### Lancement d'un conteneur +#### Running a container ```bash docker run -d --name=signaturepdf -p 8080:80 signaturepdf @@ -89,17 +79,17 @@ docker run -d --name=signaturepdf -p 8080:80 signaturepdf #### Configuration -Les variables suivantes permettent de configurer le déployement : +The following variables can be used to configure the deployment: -| Variable | description | exemple | defaut | -| ---------------------- | ------------------------------------------------------------------ | -------------------------------- | --------- | -| `SERVERNAME` | url de déploiement | `pdf.24eme.fr` | localhost | -| `UPLOAD_MAX_FILESIZE` | Taille maximum du fichier PDF à signer | 48M | 24M | -| `POST_MAX_SIZE` | Taille maximum du fichier PDF à signer | 48M | 24M | -| `MAX_FILE_UPLOADS` | Nombre de pages maximum du PDF, ici 200 pages + le PDF d'origine | 401 | 201 | -| `PDF_STORAGE_PATH` | chemin vers lequel les fichiers pdf uploadés pourront être stockés | /data | /data | -| `DISABLE_ORGANIZATION` | Desactiver la route Organiser | true | false | -| `PDF_DEMO_LINK` | Afficher, retirer ou changer le lien de PDF de démo | false, `link` or `relative path` | true | +| Variable | description | exemple | defaut | +| ---------------------- |-----------------------------------------------------------------------| -------------------------------- | --------- | +| `SERVERNAME` | Deployment URL | `pdf.24eme.fr` | localhost | +| `UPLOAD_MAX_FILESIZE` | Maximum size of the PDF file to sign | 48M | 24M | +| `POST_MAX_SIZE` | Maximum size of the PDF file to sign | 48M | 24M | +| `MAX_FILE_UPLOADS` | Maximum number of pages in the PDF, here 200 pages + the original PDF | 401 | 201 | +| `PDF_STORAGE_PATH` | Path where uploaded PDF files can be stored | /data | /data | +| `DISABLE_ORGANIZATION` | Disable the Organize route | true | false | +| `PDF_DEMO_LINK` | Show, hide, or change the demo PDF link | false, `link` or `relative path` | true | ```bash docker run -d --name=signaturepdf -p 8080:80 -e SERVERNAME=pdf.example.org -e UPLOAD_MAX_FILESIZE=48M -e POST_MAX_SIZE=48M -e MAX_FILE_UPLOADS=401 -e PDF_STORAGE_PATH=/data signaturepdf @@ -107,25 +97,25 @@ docker run -d --name=signaturepdf -p 8080:80 -e SERVERNAME=pdf.example.org -e UP ### Alpine -Voici un script permettant d'installer la solution sous Linux Alpine (testé en version 3.15). -Pensez à éditer la variable "domain" en début de script pour correspondre à l'URL avec laquelle elle sera appelée. +Here is a script to install the solution on Linux Alpine (tested with version 3.15). +Remember to edit the "domain" variable at the beginning of the script to match the URL it will be called with. -Les composants principaux sont : +The main components are: - php 8 + php-fpm - Nginx -- pdftk (installation "manuelle" nécessitant openjdk8) +- pdftk ("manual" installation requiring openjdk8) - imagick - potrace - librsvg -Ce que fait le script : +What the script does: -- Installation des dépendances -- Configuration de php et php-fpm -- Configuration d'Nginx -- Configuration du config.ini -- Git clone du repo +- Installs dependencies +- Configures php and php-fpm +- Configures Nginx +- Configures the config.ini +- Clones the repo ``` #!/bin/sh @@ -214,51 +204,51 @@ EOF ## Configuration -### Activation et configuration du mode partage de signature à plusieurs +### Enabling and Configuring Multi-Signature Mode -Ce mode permet de proposer la signature d'un pdf à plusieurs personnes mais il nécessite que les PDF soient stockés sur le serveur, il convient donc de définir un dossier qui contiendra ces PDF. +This mode allows multiple people to sign a PDF, but it requires that the PDFs be stored on the server. -Il n'est pas obligatoire d'activer ce mode pour que l'application fonctionne c'est une option. +It is not mandatory to enable this mode for the application to work; it is an option. -Créer le fichier `config/config.ini` +Create the `config/config.ini` file ``` cp config/config.ini{.example,} ``` -Dans ce fichier `config/config.ini`, il suffit ce configurer la variable `PDF_STORAGE_PATH` avec le chemin vers lequel les fichiers pdf uploadés pourront être stockés : +In the `config/config.ini` file, configure the `PDF_STORAGE_PATH` variable with the path where uploaded PDF files can be stored: ``` PDF_STORAGE_PATH=/path/to/folder ``` -Créer ce dossier : +Create this folder: ``` mkdir /path/to/folder ``` -Le serveur web devra avoir les droits en écriture sur ce dossier. +The web server should have write permissions on this folder. -Par exemple pour apache : +For example, for Apache: ``` chown www-data /path/to/folder/to/store/pdf ``` -### Desactivation du mode Organiser +### Disabling the Organize Mode -Pour desactiver le mode Organiser, ajouter `DISABLE_ORGANIZATION=true` dans le fichier -`config/config.ini`. +To disable the Organize mode, add `DISABLE_ORGANIZATION=true` to the +`config/config.ini` file. -### Cacher ou modifier le lien de PDF de démo +### Hiding or Modifying the Demo PDF Link -Pour cacher le lien de pdf de démo, ajouter `PDF_DEMO_LINK=false` dans le fichier -`config/config.ini`. +To hide the demo PDF link, add `PDF_DEMO_LINK=false` to the +`config/config.ini` file. -### Champs chargés par défaut pour l'édition de métadonnéés +### Default Fields for Metadata Editing -Dans le fichier de configuration `config/config.ini` il est possible de rajouter autant de champs que l'on souhaite avec le type HTML de l'input (text, date, number email, etc ...) qui seront préchargées pour chaque PDF. +In the `config/config.ini` file, you can add as many fields as you want with the HTML input type (text, date, number, email, etc.) that will be preloaded for each PDF. ``` METADATA_DEFAULT_FIELDS[field1].type = "text" @@ -267,9 +257,9 @@ METADATA_DEFAULT_FIELDS[field3].type = "date" METADATA_DEFAULT_FIELDS[field4].type = "number" ``` -## Mise à jour +## Update -La dernière version stable est sur la branche `master`, pour la mise à jour il suffit de récupérer les dernières modifications : +The latest stable version is on the `master` branch. To update, simply fetch the latest changes: ``` git pull -r @@ -277,60 +267,61 @@ git pull -r ## Tests -Pour exécuter les tests fonctionnels : +To run functional tests: ``` make test ``` -Les tests sont réalisés avec `puppeteer` et `jest`. +The tests are performed using `puppeteer` and `jest`. -Pour lancer les tests et voir le navigateur (en mode debug) : +To run the tests and view the browser (in debug mode): ``` DEBUG=1 make test ``` -## Librairies utilisées +## Libraries Used -- **Fat-Free** micro framework PHP : https://github.com/bcosca/fatfree (GPLv3) -- **Bootstrap** framework html, css et javascript : https://getbootstrap.com/ (MIT) -- **PDF.js** librairie de lecture de PDF dans un canvas HTML : https://github.com/mozilla/pdf.js (Apache-2.0) -- **Fabric.js** librairie pour manipuler un canvas HTML : https://github.com/fabricjs/fabric.js (MIT) -- **PDFtk** outils de manipulation de PDF (GPL) -- **librsvg** outils de manipulation de SVG : https://gitlab.gnome.org/GNOME/librsvg (LGPL-2+) -- **potrace** outils de transformation d'image bitamp en image vectorisé : http://potrace.sourceforge.net/ (GPLv2) -- **OpenType.js** outils de transformation d'un texte et sa police en chemin : https://github.com/opentypejs/opentype.js (MIT) -- **ImageMagick** ensemble d'outils de manipulation d'images : https://imagemagick.org/ (Apache-2.0) -- **Caveat** police de caractères style écriture à la main : https://github.com/googlefonts/caveat (OFL-1.1) -- **PDF-LIB** librairie js permettant de manipuler un PDF qui est utilisé pour écrire dans les métadonnées : https://pdf-lib.js.org/ (MIT) +- **Fat-Free** PHP micro framework: https://github.com/bcosca/fatfree (GPLv3) +- **Bootstrap** HTML, CSS, and JavaScript framework: https://getbootstrap.com/ (MIT) +- **PDF.js** JavaScript library for rendering PDFs in an HTML canvas: https://github.com/mozilla/pdf.js (Apache-2.0) +- **Fabric.js** JavaScript library for manipulating an HTML canvas: https://github.com/fabricjs/fabric.js (MIT) +- **PDFtk** PDF manipulation tools (GPL) +- **librsvg** SVG manipulation tools: https://gitlab.gnome.org/GNOME/librsvg (LGPL-2+) +- **potrace** Bitmap to vector image conversion tools: http://potrace.sourceforge.net/ (GPLv2) +- **OpenType.js** Tools for converting text and its font into paths: https://github.com/opentypejs/opentype.js (MIT) +- **ImageMagick** Image manipulation toolset: https://imagemagick.org/ (Apache-2.0) +- **Caveat** Handwriting-style font: https://github.com/googlefonts/caveat (OFL-1.1) +- **PDF-LIB** JavaScript library for PDF manipulation used for writing metadata: https://pdf-lib.js.org/ (MIT) -Pour les tests : +For testing: -- **Jest** Framework de Test Javascript : https://jestjs.io/ (MIT) -- **Puppeteer** librairie Node.js pour contrôler un navigateur : https://github.com/puppeteer/puppeteer (Apache-2.0) +- **Jest** JavaScript Testing Framework: https://jestjs.io/ (MIT) +- **Puppeteer** Node.js library for controlling a web browser: https://github.com/puppeteer/puppeteer (Apache-2.0) ## Contributions -### Traductions +### Translation -Pour mettre à jour la traduction, exécutez simplement `make` qui mettra a jour le fichier `.pot`, -qui fera un merge avec les fichiers `.po` qui permetteront de recréer les fichiers `.mo` mis a jour. +To update the translation, simply execute `make` that will update the `.pot` file, +which will merge the `.po` files which then will allow to create updated `.mo` files. -Des traductions peuvent etre ajoutées sur Weblate : https://hosted.weblate.org/projects/signature-pdf/application/ +Translations might be added on Weblate : https://hosted.weblate.org/projects/signature-pdf/application/ -### Contributeurs -Ces personnes sont auteurices du code de ce logiciel : +### Contributors + +These people are the authors of the code of this software : Vincent LAURENT (24ème), Jean-Baptiste Le Metayer (24ème), Xavier Garnier (Logilab), Simon Chabot (Logilab), Tangui Morlier (24ème), Gabriel POMA (24ème), Tanguy Le Faucheur (24ème), Étienne Deparis, battosai30 -### Financements +### Fundings -- 1 365 € HT de la société Logilab pour le développement du mode signature partagé à plusieurs -- 1 950 € HT de la société Logilab pour le développement de l'édition des métadonnées -- 100 € HT de don de la société Spirkop -- 100 € HT de don de la société PDG IT -- 1 040 € HT de la fondation NLNet pour l'internationalisation du logiciel +- 1 365 € excl. taxes from the company Logilab for the development of the shared signature feature +- 1 950 € excl. taxes from the company Logilab for the development of the metadata editing feature +- 100 € excl. taxes donations from the company Spirkop +- 100 € excl. taxes donations from the company PDG IT +- 1 040 € excl. taxes from the foundation NLNet pour software internationalization -Les modules signature et organiser ont été réalisés sur le temps de travail de salariés du 24ème. +The development of the software was primarily done during the working hours of 24ème employees. diff --git a/app.php b/app.php index 1e11a62..04051aa 100644 --- a/app.php +++ b/app.php @@ -406,11 +406,20 @@ $f3->route ('POST /compress', } }); + $compressionType = $f3->get('POST.compressionType'); + if ($compressionType === 'medium') { + $compressionType = '/ebook'; + } elseif ($compressionType === 'low') { + $compressionType = '/printer'; + } elseif ($compressionType === 'high') { + $compressionType = '/screen'; + } + $arrayPath = array_keys($files); $filePath = reset($arrayPath); $outputFileName = str_replace(".pdf", "_compressed.pdf", $filePath); - $returnCode = shell_exec(sprintf("gs -sDEVICE=pdfwrite -dPDFSETTINGS=/screen -dQUIET -o %s %s", $outputFileName, $filePath)); + $returnCode = shell_exec(sprintf("gs -sDEVICE=pdfwrite -dPDFSETTINGS=%s -dQUIET -o %s %s", $compressionType, $outputFileName, $filePath)); if ($returnCode !== false) { header('Content-Type: application/pdf'); diff --git a/public/js/compress.js b/public/js/compress.js index e69de29..3877959 100644 --- a/public/js/compress.js +++ b/public/js/compress.js @@ -0,0 +1,13 @@ +function handleFileChange() { + const fileInput = document.getElementById('input_pdf_upload'); + const compressBtn = document.getElementById('compressBtn'); + const dropdownCompressBtn = document.getElementById('dropdownMenuReference'); + + if (fileInput.files.length > 0) { + compressBtn.disabled = false; + dropdownCompressBtn.disabled = false; + } else { + compressBtn.disabled = true; + dropdownCompressBtn.disabled = true; + } +} \ No newline at end of file diff --git a/templates/compress.html.php b/templates/compress.html.php index 9de948c..a98da62 100644 --- a/templates/compress.html.php +++ b/templates/compress.html.php @@ -51,9 +51,19 @@
- " class="form-control form-control-lg" type="file" accept=".pdf,application/pdf" /> + " class="form-control form-control-lg" type="file" accept=".pdf,application/pdf" onchange="handleFileChange()" />

 

- +
+ + + +
@@ -62,51 +72,6 @@ : [] - @@ -115,6 +80,6 @@ - + +