Développement #24364
Génération de document de PDF à partir de PDF remplissables (PDF Form)
0%
Description
Pour une utilisation rapide de CERFA remplissables, quand ça marche.
Files
Related issues
History
Updated by Benjamin Dauvergne almost 7 years ago
- File 0001-workflows-add-pdf-filing-in-export-to-model-action-2.patch 0001-workflows-add-pdf-filing-in-export-to-model-action-2.patch added
- Patch proposed changed from No to Yes
Manque les tests mais c'est juste parce qu'on en a parlé à Toulouse aujourd'hui, et que je n'avais rien à dire, relecture ne presse pas.
L'idée c'est de prendre un CERFA comme celui-là: https://www.impots.gouv.fr/portail/formulaire/2494-sd/declaration-de-la-retenue-la-source
On l'upload comme un ODT, le formulaire de l'action se modifie pour afficher pour chaque champ du PDF un champ expression calculé (la présentation n'est pas super ergonomique, pourrait être plus sympa sur plusieurs colonnes).
De plus un lien "PDF Form example" renvoie le même PDF avec chaque champ pré-rempli avec son nom de variable (souvent ce n'est pas évident de savoir quelle variable correspond à quoi).
J'en ai un peu chié pour faire tourner w.c.s. en standalone avec Django, je m'y prends certainement mal:
diff --git a/wcs/settings.py b/wcs/settings.py index 0382d385..54eaaf65 100644 --- a/wcs/settings.py +++ b/wcs/settings.py @@ -60,7 +60,7 @@ MEDIA_URL = '/media/' # Don't put anything in this directory yourself; store your static files # in apps' "static/" subdirectories and in STATICFILES_DIRS. # Example: "/var/www/example.com/static/" -STATIC_ROOT = os.path.join(PROJECT_PATH, 'static') +STATIC_ROOT = os.path.join(PROJECT_PATH, 'app', 'collectstatic') # URL prefix for static files. # Example: "http://example.com/static/", "http://static.example.com/" @@ -68,6 +68,7 @@ STATIC_URL = '/static/' # Additional locations of static files STATICFILES_DIRS = ( + '/home/bdauvergne/wd/eo/wcs/static/', ) # List of finder classes that know how to find static files in @@ -75,7 +76,7 @@ STATICFILES_DIRS = ( STATICFILES_FINDERS = ( 'django.contrib.staticfiles.finders.FileSystemFinder', 'django.contrib.staticfiles.finders.AppDirectoriesFinder', -# 'django.contrib.staticfiles.finders.DefaultStorageFinder', + 'django.contrib.staticfiles.finders.DefaultStorageFinder', ) # Make this unique, and don't share it with anybody. @@ -138,6 +139,7 @@ INSTALLED_APPS = ( 'wcs.ctl', 'wcs.qommon', 'django.contrib.staticfiles', + 'xstatic.pkg.jquery', ) CACHES = { --------------- [main] app_dir = /home/bdauvergne/wd/eo/wcs/app data_dir = /home/bdauvergne/wd/eo/wcs/data # Automatically create virtual host auto_create_appdir = true use_long_traces = true #error_log = /var/lib/wcs/error.log # Redirect on unknown virtual host #missing_appdir_redirect = http://www.mysite.com --------------- # wcs/local_settings.py DEBUG = True WCS_LEGACY_CONFIG_FILE = '/home/bdauvergne/wd/eo/wcs/wcs.cfg'
Le problème principal a été d'obtenir que django avec runserver serve jquery (je pense que l'ajout de xstatic.pkg.jquery a suffit à corriger le souci, le reste de mes modifications c'est de l'exploration) pour que l'admin soit utilisable (surtout le menu Publik à gauche).
Updated by Benjamin Dauvergne almost 7 years ago
- File example-prerempli.pdf example-prerempli.pdf added
- File screenshot-localhost 8000-2018-06-07-18-20-30.png screenshot-localhost 8000-2018-06-07-18-20-30.png added
L'exemple du PDF avec les noms des champs.
Un screenshot du formulaire d'admin.
Updated by Benjamin Dauvergne over 6 years ago
Quelques expériences sur une voie différente (et plus intéressante d'après moi), utiliser directement pdfrw et fpdf pour manipuler les PDFs finement : http://git.entrouvert.org/misc-bdauvergne.git/tree/pdf-experiments
Permet de générer un pdf comme celui que j'attache d'aide à la configuration du pré-remplissage (c'est le plus difficile dans l'histoire, arriver à indiquer aux fonctionnels où vont aller les données et sous quelle forme).
Updated by Benjamin Dauvergne about 6 years ago
- Project changed from w.c.s. to Passerelle
Je déplace sur passerelle, à mon avis c'est inutile de charger w.c.s. sur ces aspects.
Updated by Benjamin Dauvergne about 6 years ago
- un connecteur PDFFilling
- un objet fils "FillablePDF"
- on choisit un PDF remplissable
- on repère l'emplacement des champs via le code donné plus haut (coordonnées PDF)
- on affiche le PDF via pdf.js
- on utilise les coordonnées PDF pour placer des boutons sur le PDF le canvas pdf.js (voir API convertToPdfPoint dans pdf.js et la notion de viewport)
- on définit pour chaque champ l'expression de pré-remplissage par rapport aux données poussé (éviter d'exposer la complexité du PDF aux appelants)
- POINT D'ATTENTION : les tableaux demandent une attention particulière car généralement définis comme un paquet de champs sans liens entre eux qu'il faudrait pouvoir pré-remplir en bloc selon une logique (genre comme un tableur A1:D10). Il devrait être possible de sélectionner une zone de champs et de la définir comme étant un tableau (et reconstruire lignes/colonnes via les coordonnées relatifs des champs entre eux)
Updated by Thomas Noël over 2 years ago
- Related to Développement #73544: connecteur pdf : avoir un endpoint "fill-form", remplissage de fichier PDF avec les données d'un formulaire added