Caso de uso: firmar un documento por coordenadas¶
Requisito previo: el dni que va a firmar debe tener un certificado principal cargado (ver Alta de usuario y certificado), y el dni enviado debe coincidir con el dni del claim del token.
Este modo se usa cuando se conoce de antemano la posición exacta (x, y, página) donde debe ir el bloque de firma, y permite controlar la apariencia del texto que lo acompaña (número de documento, ciudad, tamaños de fuente, etc.).
Request¶
curl -X POST http://localhost:8080/api/doc/sign-by-coord \
-H "Authorization: Bearer eyJhbGciOiJIUzI1NiJ9..." \
-F "file=@contrato.pdf;type=application/pdf" \
-F "dni=12345678" \
-F "coordX=120.5" \
-F "coordY=680.0" \
-F "page=1" \
-F "reason=Aprobación de contrato" \
-F "documentTextNumber=EXP-2026-001" \
-F "documentTextNumberAlignment=LEFT" \
-F "city=Lima" \
-F "visibleSign=true" \
-F "hasImageSignature=true" \
-F "useTsa=false" \
-o respuesta.json
Response (200 OK)¶
{
"fileBase64Encode": "JVBERi0xLjcNCiXi48/TDQoxIDAgb2Jq...",
"status": "SUCCESS",
"message": "Document signed successfully"
}
Ajustando la apariencia del texto¶
Los siguientes parámetros opcionales controlan cómo se ve el bloque de texto junto a la firma (todos con valores por defecto si se omiten):
curl -X POST http://localhost:8080/api/doc/sign-by-coord \
-H "Authorization: Bearer eyJhbGciOiJIUzI1NiJ9..." \
-F "file=@contrato.pdf;type=application/pdf" \
-F "dni=12345678" \
-F "coordX=120.5" \
-F "coordY=680.0" \
-F "page=1" \
-F "reason=Aprobación de contrato" \
-F "documentTextNumber=EXP-2026-001" \
-F "documentTextNumberAlignment=LEFT" \
-F "city=Lima" \
-F "visibleSign=true" \
-F "documentTextNumberSize=12" \
-F "signatureTextSpacing=25" \
-F "documentTextNumberMultipliedLeading=1.2" \
-F "cityAndDateTextSize=9" \
-F "documentNumberTextFirst=false"
Si se omite city, no se pinta ni ciudad ni fecha en el bloque de firma.
Errores frecuentes¶
| Situación | Respuesta |
|---|---|
El dni del formulario no coincide con el dni del token | 401 UNAUTHORIZED — "The registered user cannot sign with that dni" |
El file no tiene Content-Type: application/pdf | 400 BAD_REQUEST — "The file must be a PDF" |
| Falta algún campo obligatorio | 400 BAD_REQUEST — "All fields are required (file, coordX, coordY, page, reason, documentTextNumber, documentTextNumberAlignment, visibleSign, city)" |
El dni no tiene certificado principal cargado | 500 INTERNAL_SERVER_ERROR |
Variante: firmando con sello de tiempo (TSA)¶
Agregar useTsa=true y, opcionalmente, tsaAlias=<alias> (si se omite, se usa la TSA marcada isDefault). Ver Configurar y usar una TSA.