Assinar documentos PDF a partir de um Smart Card em Java
Contents
[
Hide
]
O repositório atual de Java não inclui um exemplo dedicado de assinatura com cartão inteligente baseado em fonte sob facades/pdffilesignature, mas o fluxo de trabalho a seguir mostra o padrão típico de API para assinar um PDF com um certificado selecionado de um armazenamento de certificados local.
Assinar um documento PDF a partir de um cartão inteligente
- Abra o PDF de origem em um objeto Document.
- Crie um PdfFileSignature fachada e vincule o documento PDF de origem.
- Recupere o certificado local e crie o necessário ExternalSignature.
- Configure a aparência da assinatura visual e o destino Rectangle.
- Aplique a assinatura ao documento PDF através de PdfFileSignature.
- Salve o documento PDF atualizado.
- Vincule o documento carregado à fachada PdfFileSignature com
bindPdf(...). - Recupere o certificado local que representa a credencial do cartão inteligente chamando
getLocalCertificate(). - Verifique se um certificado foi encontrado. Caso contrário, salve o arquivo de saída inalterado e interrompa o fluxo de trabalho.
- Crie um ExternalSignature a partir do certificado selecionado.
- Defina a imagem de aparência da assinatura visual com
setSignatureAppearance(...). - Chame
sign(...)com a página de destino, motivo, contato, localização, sinalizador de visibilidade, assinatura Rectangle, e objeto de assinatura externa. - Salve o PDF assinado no caminho de saída.
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());
}
}