Assinar documentos PDF de um Cartão Inteligente em Python
Aspose.PDF oferece recursos robustos para integrar componentes de assinatura visual e criptográfica, garantindo tanto a autenticidade quanto a apresentação profissional em documentos PDF assinados digitalmente.
Use este fluxo de trabalho quando seu processo de assinatura depender de certificados armazenados em dispositivos com suporte de hardware, como smart cards, tokens USB ou repositórios de certificados gerenciados.
Assinar com Smart Card usando Campo de Assinatura
Este exemplo demonstra como assinar digitalmente um documento PDF usando um certificado externo com Aspose.PDF for Python e aplicar uma imagem personalizada de aparência da assinatura:
- Abrindo o documento PDF.
- Criando um objeto PdfFileSignature e vinculando‑o ao documento.
- Recuperando um certificado digital local usando um método personalizado
get_local_certificate(). - Configurando um ExternalSignature com base no certificado selecionado.
- Aplicando uma imagem de aparência de assinatura personalizada (por exemplo, um logotipo da empresa ou assinatura manuscrita).
- Assinando digitalmente a primeira página do documento com metadados especificados (razão, contato, localização).
- Salvando o documento assinado em um novo arquivo de saída.
Este método é ideal para casos em que as assinaturas precisam ser aplicadas programaticamente usando certificados externos — como tokens de hardware, armazenamentos de certificados ou provedores confiáveis — e apresentadas com um layout visual personalizado.
A seguir estão os trechos de código para assinar um documento PDF a partir de um smart card:
import sys
from os import path
import aspose.pdf as ap
import aspose.pydrawing as drawing
def sign_with_smart_card(infile: str, outfile: str, pngfile: str) -> None:
"""Sign a PDF document using a smart-card certificate."""
with ap.Document(infile) as document:
with ap.facades.PdfFileSignature() as pdf_signature:
pdf_signature.bind_pdf(document)
external_signature = ap.forms.ExternalSignature(get_local_certificate())
pdf_signature.signature_appearance = pngfile
pdf_signature.sign(
1,
"Reason",
"Contact",
"Location",
True,
drawing.Rectangle(100, 100, 200, 200),
external_signature,
)
pdf_signature.save(outfile)
Verificar Assinaturas Digitais
Este trecho de código demonstra como verificar assinaturas digitais em um documento PDF usando Aspose.PDF for Python:
- Abrindo o arquivo PDF.
- Criando um ‘PdfFileSignature object’ e vinculando‑o ao documento.
- Recuperando a lista de todos os nomes de campos de assinatura usando ‘get_signature_names()’.
- Iterando por cada assinatura e verificando sua validade com ‘verify_signature()’.
- Lançando uma exceção se alguma assinatura falhar na verificação.
import sys
from os import path
import aspose.pdf as ap
import aspose.pydrawing as drawing
def verify_external_signature(infile: str) -> None:
"""Verify an external signature in a PDF document."""
with ap.Document(infile) as document:
with ap.facades.PdfFileSignature(document) as pdf_signature:
for signature_name in pdf_signature.get_signature_names(True):
if not pdf_signature.verify_signature(signature_name):
raise Exception("Not verified")
Assinar com Certificado Externo
Este trecho de código demonstra como adicionar e assinar um campo de assinatura digital em um documento PDF usando Aspose.PDF for Python com um certificado externo:
- Abrindo o arquivo PDF como um fluxo binário.
- Criando um SignatureField e posicionando‑o na primeira página do documento em uma posição especificada.
- Recuperando um certificado digital local usando um método personalizado
get_local_certificate(). - Configurando um ExternalSignature com metadados como autoridade, motivo e informações de contato.
- Atribuindo um nome de campo exclusivo ao campo de assinatura (partial_name = “sig1”).
- Adicionando o campo de assinatura aos campos de formulário do PDF.
- Assinando o campo com o certificado externo.
- Salvando o documento assinado em um arquivo de saída.
import sys
from os import path
import aspose.pdf as ap
import aspose.pydrawing as drawing
def get_signature_info_using_signature_field(infile: str, outfile: str) -> None:
"""Create a signature field and sign it with an external certificate."""
with open(infile, "rb+") as file_stream:
document = ap.Document(file_stream)
signature_field = ap.forms.SignatureField(
document.pages[1],
ap.Rectangle(100, 400, 10, 10, True),
)
selected_certificate = get_local_certificate()
external_signature = ap.forms.ExternalSignature(selected_certificate)
external_signature.authority = "Me"
external_signature.reason = "Reason"
external_signature.contact_info = "Contact"
signature_field.partial_name = "sig1"
document.form.add(signature_field, 1)
signature_field.sign(external_signature)
document.save(outfile)