# Spécifications Service Web2Print ## Vue d'ensemble Service de conversion HTML/CSS vers PDF déployé sur VPS à l'URL `web2print.studio-variable.com` ## Décisions techniques ### Stack - **Backend** : PHP (maîtrise, cohérence avec environnement) - **Générateur PDF** : Paged.js CLI (via exec CLI) - **Serveur web** : Apache (déjà en place sur VPS) - **Méthode d'appel** : API REST - **Déploiement** : Installation directe sur VPS (pas de Docker) ### Architecture PHP gère : - Réception requêtes HTTP - Authentification par clé API - Validation des inputs - Appel Paged.js CLI via shell_exec/exec - Retour du PDF en binaire ### Avantages Paged.js - Rendu identique entre front-end et back-end (même moteur) - Support natif CSS Paged Media (marges, en-têtes/pieds, numérotation) - Basé sur Chromium (meilleur support CSS moderne) - Cohérence avec intégration front-end Paged.js prévue ### Client - Plugin Kirby CMS - Envoie requêtes HTTP avec clé API - Reçoit PDF en binaire - Stocke le PDF dans un champ Kirby ### Sécurité - Authentification : clé API dans header HTTP (X-API-Key) - Clés stockées dans config PHP (ou .env) - Pas d'interface admin nécessaire - Clé configurée manuellement dans le plugin Kirby ## Caractéristiques ### Usage - Volume : faible, occasionnel (quelques PDFs/jour) - Taille documents : variable, jusqu'à des livres complets - Ressources externes : autorisées (images, CSS, fonts via URL) ### API **Endpoint** : `POST /generate` **Headers** : ``` X-API-Key: Content-Type: application/json ``` **Body** : ```json { "html": "...", "css": "...", // optionnel "options": { // À définir } } ``` **Response** : PDF en binaire (application/pdf) ## Points à clarifier ### Infrastructure - [x] Déploiement : Installation directe sur VPS (Paged.js CLI via npm) - [x] Structure du service : structure organisée (Controllers, Services, Middleware) - [x] Config Apache : VirtualHost pointant vers le dossier du service - [x] Stockage temporaire : /var/www/web2print/tmp/ ### Fonctionnalités - [ ] Options PDF exposées (format, marges, orientation, etc.) - [ ] Timeout génération (60s suffisant pour livres ?) - [ ] Limite taille HTML en entrée - [ ] Ressources externes : tout autoriser ou liste blanche de domaines ? - [ ] Timeout fetch ressources externes ### Gestion d'erreurs - [ ] Format réponses d'erreur (JSON + HTTP status ?) - [ ] Stockage logs (où ? rotation ?) - [ ] Monitoring/alertes ### Sécurité avancée - [ ] Rate limiting par clé API - [ ] Validation/sanitization HTML - [ ] Isolation processus Paged.js CLI ## Notes - Ce fichier sert de documentation temporaire pendant la phase de spécification - Le service sera dans un projet séparé de ce repo - Le plugin Kirby sera ajouté à ce projet plus tard