Firmar documentos PDF desde una tarjeta inteligente en Java
Contents
[
Hide
]
El repositorio actual de Java no incluye un ejemplo dedicado de firma con tarjeta inteligente respaldado por código fuente bajo facades/pdffilesignature, pero el siguiente flujo de trabajo muestra el patrón típico de API para firmar un PDF con un certificado seleccionado de un almacén de certificados local.
Firmar un documento PDF desde una tarjeta inteligente
- Abra el PDF de origen
Document. - Cree una fachada
PdfFileSignaturey enlace el documento PDF de origen. - Recupere el certificado local y cree lo necesario
ExternalSignature. - Configure la apariencia visual de la firma y el objetivo
Rectangle. - Aplique la firma al documento PDF a través de
PdfFileSignature. - Guarde el documento PDF actualizado.
- Vincule el documento cargado a la fachada
PdfFileSignatureconbindPdf(...). - Recupere el certificado local que representa la credencial de tarjeta inteligente llamando
getLocalCertificate(). - Compruebe si se encontró un certificado. Si no, guarda el archivo de salida sin cambios y deténgase el flujo de trabajo.
- Cree un
ExternalSignaturea partir del certificado seleccionado. - Establezca la imagen de apariencia de la firma visual con
setSignatureAppearance(...). - Llame
sign(...)con la página de destino, razón, contacto, ubicación, bandera de visibilidad, firmaRectangle, y objeto de firma externo. - Guarde el PDF firmado en la ruta de salida.
public static void signWithSmartCard(Path inputFile, Path outputFile, Path pngFile) {
try (Document document = new Document(inputFile.toString());
PdfFileSignature pdfSignature = new PdfFileSignature()) {
pdfSignature.bindPdf(document);
X509Certificate2 selectedCertificate = getLocalCertificate();
if (selectedCertificate == null) {
System.out.println("Local certificate was not found.");
document.save(outputFile.toString());
return;
}
ExternalSignature externalSignature = new ExternalSignature(selectedCertificate, null);
pdfSignature.setSignatureAppearance(pngFile.toString());
pdfSignature.sign(1, "Reason", "Contact", "Location", true,
new java.awt.Rectangle(100, 100, 200, 200), externalSignature);
pdfSignature.save(outputFile.toString());
}
}