web2print-service/docs/web2print-specs.md
isUnknown 09afbff2fd
All checks were successful
Deploy / deploy (push) Successful in 8s
Add URL-based PDF generation support
2026-03-05 08:08:38 +01:00

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