2.8 KiB
2.8 KiB
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: <clé-secrète>
Content-Type: application/json
Body :
{
"html": "<html>...</html>",
"css": "...", // optionnel
"options": {
// À définir
}
}
Response : PDF en binaire (application/pdf)
Points à clarifier
Infrastructure
- Déploiement : Installation directe sur VPS (Paged.js CLI via npm)
- Structure du service : structure organisée (Controllers, Services, Middleware)
- Config Apache : VirtualHost pointant vers le dossier du service
- 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