1
0
Fork 0
mirror of https://github.com/24eme/signaturepdf synced 2024-05-04 15:03:14 +02:00
Go to file
2023-09-28 13:25:40 +02:00
.github/workflows ci: dockerize and push with gh-actions 2022-01-28 17:23:51 +01:00
config Configuration pour les configurations de reverse proxies qui ne gèrent pas la réécriture de l'entête de Location 2023-09-04 16:47:10 +02:00
locale fix language mistake 2023-09-27 12:47:17 +02:00
public Fix css better solution 2023-09-27 17:21:17 +02:00
templates Fix css better solution 2023-09-27 17:21:17 +02:00
tests add arabic test pdf document 2023-09-26 17:42:54 +02:00
vendor/fatfree Fatfree core lib only 2022-03-26 23:40:57 +01:00
.editorconfig Plus besoin de nocache 2023-09-25 16:33:26 +02:00
.gitignore add .idea/ to .gitignore 2023-09-27 11:58:14 +02:00
app.php add default language in docker 2023-09-28 13:25:40 +02:00
Dockerfile add default language in docker 2023-09-28 13:25:40 +02:00
entrypoint.sh add default language in docker 2023-09-28 13:25:40 +02:00
LICENSE License AGPLV3 2021-05-04 00:58:47 +02:00
Makefile not add pot file automatically 2023-09-25 16:33:44 +02:00
README.fr.md update read me + adding several compression intensity levels 2023-09-21 16:33:27 +02:00
README.md add default language in docker 2023-09-28 13:25:40 +02:00

PDF Signature

Free web software for signing PDFs.

Instances

List of instances where you can use this software:

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
<Directory /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
</Directory>

Deploy with Docker

Building the image

docker build -t signaturepdf .

Running a container

docker run -d --name=signaturepdf -p 8080:80 signaturepdf

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
DEFAULT_LANGUAGE Default language for the application en_US.UTF-8 fr_FR.UTF-8
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
  • ghostscript

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 <<EOF >>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 <<EOF >>/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 <<EOF >>/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.

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

For testing:

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.