3.3 KiB
3.3 KiB
Reset des Positions de Signature (Test Pourcentages)
Context
Passage du système de coordonnées en millimètres vers un système en pourcentages. Cela permet d'avoir un rendu indépendant de la résolution/taille du PDF.
Changements Effectués
1. Types Modifiés
EstimatedPosition: x, y, width, height maintenant en POURCENTAGES (%)ExtractedPosition: x, y, width, height maintenant en POURCENTAGES (%)
2. Fonctions Modifiées
extractPrecisePositionsFromPdf()
// AVANT : Stockage en mm
const xMm = textPosition.x * PT_TO_MM;
const yMm = pageHeightMm - (textPosition.y * PT_TO_MM);
// APRÈS : Conversion en pourcentages
const xMm = textPosition.x * PT_TO_MM;
const yMm = pageHeightMm - (textPosition.y * PT_TO_MM);
const xPercent = (xMm / pageWidthMm) * 100;
const yPercent = (yMm / pageHeightMm) * 100;
const widthPercent = (widthMm / pageWidthMm) * 100;
const heightPercent = (heightMm / pageHeightMm) * 100;
estimatePositionsFromPlaceholders()
// AVANT : Positions en mm absolus
const x = isEmployee ? A4_WIDTH_MM - MARGIN_X_MM - width : MARGIN_X_MM;
const y = A4_HEIGHT_MM - MARGIN_BOTTOM_MM - height;
// APRÈS : Positions en pourcentages
const widthPercent = ((ph.width || 150) / 210) * 100;
const heightPercent = ((ph.height || 60) / 297) * 100;
const xPercent = isEmployee ? 100 - MARGIN_X_PERCENT - widthPercent : MARGIN_X_PERCENT;
const yPercent = 100 - MARGIN_BOTTOM_PERCENT - heightPercent;
3. Composant PDFImageViewer
// AVANT : Conversion mm → %
const leftPercent = (pos.x / pageWidthMm) * 100;
const topPercent = (pos.y / pageHeightMm) * 100;
// APRÈS : Utilisation directe des pourcentages
style={{
left: `${pos.x}%`,
top: `${pos.y}%`,
width: `${pos.width}%`,
height: `${pos.height}%`,
}}
Avantages
✅ Indépendant de la résolution : Peu importe la taille du rendu (petit écran, grand écran, zoom), les positions relatives restent correctes
✅ Simplifie le code : Plus besoin de connaître les dimensions réelles en mm du PDF
✅ Cohérence : Le placeholder est à X% du haut → le cadre s'affiche à X% du haut
✅ Responsive : Fonctionne sur mobile, tablette, desktop sans recalcul
Pour Tester
- Supprimer les anciennes positions en base (elles sont en mm) :
DELETE FROM sign_positions WHERE request_id = '2e187e3d-770b-46a1-b7c8-de7a01726059';
-
Recharger la page de signature :
/signer/2e187e3d-770b-46a1-b7c8-de7a01726059/xxx -
L'API va :
- Détecter qu'il n'y a pas de positions en DB
- Lancer l'extraction précise depuis le PDF
- Calculer les positions en POURCENTAGES
- Les stocker en DB
- Les renvoyer au front
-
Le front va :
- Recevoir les positions en pourcentages
- Les appliquer directement sans conversion
- Afficher les cadres proportionnellement à la taille du conteneur
Vérification Console
Vous devriez voir :
[PLACEHOLDER] Trouvé sur page 3: Signature Employeur (Employeur)
Position: x=9.5%, y=70.0%, w=35.7%, h=10.1%
[PLACEHOLDER] Trouvé sur page 3: Signature Salarié (Salarié)
Position: x=54.8%, y=70.0%, w=35.7%, h=10.1%
Au lieu de :
originalMm: {x: 20, y: 260, w: 150, h: 60}
percentCalculated: {left: '9.52', top: '87.54', width: '71.43', height: '20.20'}