Migre do Aspose PDF para o IronPDF
"Assinatura" significa três coisas diferentes no IronPDF, e elas não são intercambiáveis: uma assinatura digital à prova de adulteração suportada por um certificado, um carimbo visual de uma imagem manuscrita e um campo interativo para um usuário assinar posteriormente. Suas propriedades de segurança diferem, então os casos de uso se dividem ao longo dessa linha. O núcleo criptográfico é a classe PdfSignature com um X509Certificate2 carregado de um arquivo .pfx ou .p12, aplicado com pdf.Sign(...). Isso vincula a identidade ao conteúdo, para que qualquer edição posterior quebre a assinatura.
Contratos e Acordos Evidentes a Alterações
O que a maioria das equipes busca primeiro. Uma assinatura de certificado prova que o documento é autêntico e inalterado, e permite que você incorpore um rastro de auditoria (motivo, localização, contato, data) e um carimbo de tempo confiável:
using IronPdf;
using IronPdf.Signing;
using System;
var pdf = PdfDocument.FromFile("contract.pdf");
var signature = new PdfSignature("certificate.pfx", "password")
{
SigningReason = "Contractual Agreement",
SigningLocation = "Chicago, USA",
SignatureDate = DateTime.Now,
TimeStampUrl = new Uri("http://timestamp.digicert.com"),
TimestampHashAlgorithm = TimestampHashAlgorithms.SHA256
};
pdf.Sign(signature);
pdf.SaveAs("contract-signed.pdf");
using IronPdf;
using IronPdf.Signing;
using System;
var pdf = PdfDocument.FromFile("contract.pdf");
var signature = new PdfSignature("certificate.pfx", "password")
{
SigningReason = "Contractual Agreement",
SigningLocation = "Chicago, USA",
SignatureDate = DateTime.Now,
TimeStampUrl = new Uri("http://timestamp.digicert.com"),
TimestampHashAlgorithm = TimestampHashAlgorithms.SHA256
};
pdf.Sign(signature);
pdf.SaveAs("contract-signed.pdf");
Imports IronPdf
Imports IronPdf.Signing
Imports System
Dim pdf = PdfDocument.FromFile("contract.pdf")
Dim signature = New PdfSignature("certificate.pfx", "password") With {
.SigningReason = "Contractual Agreement",
.SigningLocation = "Chicago, USA",
.SignatureDate = DateTime.Now,
.TimeStampUrl = New Uri("http://timestamp.digicert.com"),
.TimestampHashAlgorithm = TimestampHashAlgorithms.SHA256
}
pdf.Sign(signature)
pdf.SaveAs("contract-signed.pdf")
Um carimbo de tempo de uma autoridade confiável fornece prova criptográfica de quando um documento foi assinado, independentemente do relógio local — o que é importante para arquivamentos e submissões regulamentadas.
Bloqueando documentos após a assinatura
A configuração SignaturePermissions controla o que é permitido posteriormente: NoChangesAllowed bloqueia o documento, FormFillingAllowed permite apenas a entrada de campo e AnnotationsAndFormFillingAllowed também permite anotações. Qualquer ação não permitida invalida a assinatura, o que atende a certificados emitidos, políticas aprovadas e declarações finalizadas.
Fluxos de Trabalho de Aprovação Multiparte
Porque PDFs suportam salvamento incremental, uma assinatura se aplica a uma revisão específica. Cada aprovador assina seu próprio, e o histórico registra quem assinou o quê, quando e o que mudou. Isso cobre co-assinatura e aprovação sequencial.
Verificação e Portões de Auditoria
Um pipeline pode recusar qualquer documento que falhar em verificar, então reverter ou remover assinaturas:
var pdf = PdfDocument.FromFile("signed-report.pdf");
bool valid = pdf.VerifySignatures();
if (!valid)
{
pdf.RemoveSignatures();
pdf.SaveAs("report-unsigned.pdf");
}
var pdf = PdfDocument.FromFile("signed-report.pdf");
bool valid = pdf.VerifySignatures();
if (!valid)
{
pdf.RemoveSignatures();
pdf.SaveAs("report-unsigned.pdf");
}
Dim pdf = PdfDocument.FromFile("signed-report.pdf")
Dim valid As Boolean = pdf.VerifySignatures()
If Not valid Then
pdf.RemoveSignatures()
pdf.SaveAs("report-unsigned.pdf")
End If
Aprovação Visível sem Criptografia
Quando você só precisa da aparência de uma assinatura, não de não repudiação legal, carimbe uma imagem manuscrita escaneada com o recurso de carimbo ou marca d'água. Ótimo para aprovações internas, desde que você deixe claro o que é.
Carimbo ou Certificado, e Dois Pegadinhas
Nunca deixe uma imagem carimbada substituir uma assinatura de certificado. Um carimbo são pixels em uma página: copiável, não verificável, sem garantia de que o documento é inalterado. Uma assinatura de certificado é à prova de adulterações e vincula identidade ao conteúdo criptograficamente. Use o carimbo para aparência, o certificado para prova.
Duas coisas que pegam as pessoas desprevenidas. Carregue o certificado com X509KeyStorageFlags.Exportable, ou a chave privada não poderá ser usada e a assinatura falhará. E se um visualizador mostrar um aviso em vez de um tique verde, o certificado não está na loja de confiança desse visualizador; a assinatura ainda é válida, mas a confiança deve ser estabelecida separadamente.
Perguntas frequentes
Quais são os três tipos de assinatura de PDF no IronPDF?
O IronPDF suporta: (1) assinaturas digitais criptográficas respaldadas por um certificado X.509 que vinculam identidade ao conteúdo e se invalidam em caso de adulteração; (2) carimbos de imagem visual que colocam uma imagem de assinatura manuscrita na página sem prova criptográfica; e (3) campos de assinatura interativos onde o usuário assina posteriormente dentro de um visualizador de PDF.
Como adiciono uma assinatura digital que evidencia adulterações em um PDF em C#?
Carregue um certificado X.509 de um arquivo .pfx ou .p12 em um objeto PdfSignature, defina o motivo da assinatura, localização, data e opcionalmente uma URL de carimbo de hora confiável, depois chame pdf.Sign(signature) e salve.
Qual é a diferença entre uma assinatura digital de PDF e um carimbo visual?
Uma assinatura digital vincula criptograficamente uma identidade de certificado ao conteúdo do documento — qualquer edição posterior a quebra. Um carimbo visual é apenas uma imagem na página: copiável, não verificável, e não garante que o documento não foi alterado. Use carimbos para aparência; certificados para prova legal.
Por que o IronPDF falha ao assinar com 'chave privada não acessível'?
Carregue o certificado X.509 com a flag X509KeyStorageFlags.Exportable. Sem ela, a chave privada não pode ser acessada para assinatura.
Como verifico e removo assinaturas de um PDF no IronPDF?
Chame pdf.VerifySignatures() para verificar se todas as assinaturas são válidas. Se o resultado for falso, chame pdf.RemoveSignatures() para removê-las antes de reprocessar ou re-assinar.

