Assinar documentos PDF

Aspose.PDF for Python via .NET fornece o PdfFileSignature fachada para aplicar assinaturas digitais a documentos PDF existentes. Usando um arquivo de certificado, você pode assinar um documento programaticamente, colocar a assinatura em uma página, atribuir metadados da assinatura e personalizar como a assinatura é exibida.

Este artigo demonstra vários fluxos de trabalho comuns de assinatura:

  1. Criar e vincular um PdfFileSignature objeto para o PDF de entrada.
  2. Configure o certificado de assinatura.
  3. Aplique uma assinatura digital na página de destino.
  4. Opcionalmente, atribua um nome de assinatura e aparência visível.
  5. Salve o PDF assinado.

Prepare reusable signing helpers

Antes de aplicar uma assinatura digital a um PDF, é útil configurar um pequeno conjunto de funções auxiliares reutilizáveis. Essas funções inicializam o manipulador de assinatura, definem a área de assinatura visível, configuram o certificado e criam objetos de assinatura PKCS#7 reutilizáveis, de modo que os exemplos de assinatura abaixo permaneçam autocontidos e mais fáceis de seguir.

import aspose.pdf as ap
import aspose.pdf.facades as pdf_facades
import aspose.pydrawing as apd


DEFAULT_CERTIFICATE_PASSWORD = "Aspose2021"
DEFAULT_SIGNATURE_NAME = "Signature1"


def create_pdf_file_signature(infile):
    pdf_signature = pdf_facades.PdfFileSignature()
    pdf_signature.bind_pdf(infile)
    return pdf_signature


def create_signature_rectangle():
    return apd.Rectangle(10, 10, 200, 60)


def configure_signature_certificate(
    pdf_signature, certificate_path, certificate_password=DEFAULT_CERTIFICATE_PASSWORD
):
    pdf_signature.set_certificate(certificate_path, certificate_password)


def create_pkcs7_signature(
    certificate_path, certificate_password=DEFAULT_CERTIFICATE_PASSWORD
):
    signature = ap.forms.PKCS7(certificate_path, certificate_password)
    signature.reason = "Document approval"
    signature.contact_info = "qa@example.com"
    signature.location = "New York, USA"
    signature.authority = "Aspose.PDF Example"
    return signature


def create_custom_signature_appearance():
    appearance = ap.forms.SignatureCustomAppearance()
    appearance.font_family_name = "Arial"
    appearance.font_size = 10
    appearance.show_contact_info = True
    appearance.show_location = True
    appearance.show_reason = True
    return appearance

Assine um PDF com parâmetros básicos de certificado

Esta abordagem configura o certificado diretamente no PdfFileSignature objeto. É útil quando você deseja um fluxo de assinatura direto com metadados de assinatura padrão e sem gerenciamento separado de objetos de assinatura.

import aspose.pdf.facades as pdf_facades
import sys
from os import path


def sign_pdf_with_basic_parameters(infile, outfile, certificate_path):
    pdf_signature = create_pdf_file_signature(infile)
    try:
        configure_signature_certificate(pdf_signature, certificate_path)
        pdf_signature.sign(
            1,
            "Document approval",
            "qa@example.com",
            "New York, USA",
            False,
            create_signature_rectangle(),
        )
        pdf_signature.save(outfile)
    finally:
        pdf_signature.close()

Assinar um PDF com um objeto PKCS7

Use um PKCS7 objeto quando você precisa preparar a assinatura primeiro e então passá‑la para a chamada de assinatura. Esse padrão lhe dá mais controle sobre as configurações da assinatura e é uma boa base para fluxos de trabalho mais avançados.

import aspose.pdf.facades as pdf_facades
import sys
from os import path


def sign_pdf_with_certificate_object(infile, outfile, certificate_path):
    pdf_signature = create_pdf_file_signature(infile)
    try:
        signature = create_pkcs7_signature(certificate_path)
        pdf_signature.sign(1, False, create_signature_rectangle(), signature)
        pdf_signature.save(outfile)
    finally:
        pdf_signature.close()

Assine um PDF com uma assinatura nomeada

Se o fluxo de trabalho do seu documento depende de um nome de campo de assinatura predefinido, passe esse nome para sign(). Isso torna mais fácil referenciar a assinatura mais tarde para validação, processamento ou integração com um fluxo de trabalho de aprovação.

import aspose.pdf.facades as pdf_facades
import sys
from os import path


def sign_pdf_with_named_signature(infile, outfile, certificate_path):
    pdf_signature = create_pdf_file_signature(infile)
    try:
        signature = create_pkcs7_signature(certificate_path)
        signature.reason = "Approved by signing workflow"
        pdf_signature.sign(
            1,
            DEFAULT_SIGNATURE_NAME,
            "Approved by signing workflow",
            "qa@example.com",
            "New York, USA",
            True,
            create_signature_rectangle(),
            signature,
        )
        pdf_signature.save(outfile)
    finally:
        pdf_signature.close()

Aplicar uma assinatura visível

Você pode tornar a assinatura visível na página PDF atribuindo uma aparência personalizada ao PKCS7 objeto. Isso é útil quando o documento de saída deve mostrar detalhes de aprovação, como o motivo, a localização e as informações de contato para os usuários finais.

import aspose.pdf.facades as pdf_facades
import sys
from os import path


def apply_visible_signature(infile, outfile, certificate_path):
    pdf_signature = create_pdf_file_signature(infile)
    try:
        signature = create_pkcs7_signature(certificate_path)
        signature.reason = "Visible approval signature"
        signature.custom_appearance = create_custom_signature_appearance()
        pdf_signature.sign(
            1,
            "Visible approval signature",
            "qa@example.com",
            "New York, USA",
            True,
            create_signature_rectangle(),
            signature,
        )
        pdf_signature.save(outfile)
    finally:
        pdf_signature.close()