Ir para o conteúdo do rodapé
COMPARAçãO DE PRODUTOS

Assinar documentos PDF digitalmente com PDFsharp vs IronPDF (Exemplo de código)

Uma assinatura digital é uma técnica matemática que verifica a autenticidade e a integridade de um documento eletrônico. Serve como assinatura eletrônica para assinar documentos digitalmente em diversas jurisdições, garantindo alta segurança e validade legal.

As assinaturas digitais são criadas usando uma chave privada, que é conhecida apenas pelo signatário. Essa chave privada estabelece uma assinatura digital única vinculada ao documento quando este é assinado. A assinatura inclui o nome do signatário, endereço de e-mail e outras informações pessoais. Para confirmar a autenticidade de um documento assinado digitalmente, o destinatário precisa ter acesso à chave pública do signatário. A legitimidade da assinatura é verificada através da sua descriptografia com a chave pública.

Neste tutorial, comparamos como adicionar assinaturas digitais a documentos PDF usando o PDFSharp e o IronPDF . As assinaturas digitais são essenciais para verificar a autenticidade de documentos, e os arquivos PDF são um formato popular para essas operações.

O PDFsharp é uma biblioteca de código aberto bastante conhecida para criação e manipulação de PDFs, enquanto o IronPDF é uma biblioteca .NET robusta para PDFs que oferece recursos semelhantes com funcionalidades avançadas adicionais.

Este guia aborda a assinatura de um documento PDF com uma chave privada e a verificação da assinatura, juntamente com exemplos de código-fonte para ambas as bibliotecas.

Por que as assinaturas digitais são importantes?

As assinaturas digitais garantem a integridade dos documentos e oferecem segurança robusta. São comumente utilizados em contratos, acordos e outros documentos legais.

Principais benefícios:

  • Mais seguro e inviolável do que as assinaturas tradicionais.
  • Verificado eletronicamente, reduzindo o esforço de verificação manual.
  • Habilitar a assinatura remota de documentos em nível global.
  • Oferecem maior segurança do que as assinaturas tradicionais.

Visão geral do PDFsharp

PDFSharp é uma biblioteca C# de código aberto, projetada principalmente para criar e manipular documentos PDF. É amplamente utilizado para tarefas básicas em PDF, como gerar arquivos PDF simples, editar documentos existentes e renderizar gráficos. No entanto, seu suporte nativo para recursos avançados, como assinaturas digitais, é limitado, e os desenvolvedores geralmente precisam recorrer a bibliotecas de terceiros, como o BouncyCastle, para integrar essas funcionalidades. O PDFsharp é de código aberto, sob a licença MIT, o que o torna uma boa opção para projetos onde custo e flexibilidade são prioridades.

Principais características

  • Código aberto e gratuito sob a Licença MIT.
  • Criação e manipulação básica de PDFs.
  • Pode ser estendido com bibliotecas externas como o BouncyCastle para assinaturas digitais.
  • Não oferece suporte nativo para recursos avançados de PDF, como conversão de HTML para PDF e manipulação de formulários complexos.

Visão geral do IronPDF

Assinatura digital de documentos PDF com PDFsharp vs IronPDF (Exemplo de código): Figura 1 - image.png

IronPDF é uma biblioteca .NET robusta para PDF que fornece uma API simples e poderosa para gerar, editar e manipular PDFs. Uma de suas características mais marcantes é a facilidade com que os desenvolvedores podem implementar assinaturas digitais, que são essenciais para verificar a autenticidade de documentos. Além de assinaturas digitais, o IronPDF oferece funcionalidades avançadas como conversão de HTML para PDF , marcas d'água e manipulação de formulários. É especialmente valioso para desenvolvedores que trabalham em projetos comerciais onde a implementação rápida e recursos robustos são prioridade.

Principais características

  • Licença comercial com suporte pago e período de teste gratuito disponível.
  • API fácil de usar com recursos modernos para assinatura digital e manipulação de documentos.
  • Inclui suporte integrado para conversão de formato HTML para PDF, manipulação de formulários e anotações em PDF (como anotações de anexos).
  • Integração perfeita com funcionalidades avançadas como carimbo de data/hora, imagens de assinatura visual e criptografia .

Adicionando uma assinatura digital programaticamente com o PDFsharp

PDFsharp é uma biblioteca de código aberto projetada para criação e manipulação de PDFs em C#. No entanto, embora ofereça suporte para adicionar uma assinatura, você precisará integrar uma ferramenta de terceiros, como o BouncyCastle, para garantir a assinatura digital segura e precisa de documentos PDF.

Passos para adicionar uma assinatura digital com o PDFsharp

  1. Instale o PDFsharp e o BouncyCastle via NuGet .
  2. Crie um certificado digital usando X509Certificate2 .
  3. Assine o PDF com BouncyCastle .

Código de exemplo

using System;
using System.IO;
using System.Security.Cryptography.X509Certificates;
using PdfSharp.Drawing;
using PdfSharp.Pdf;
using BouncyCastleSigner; // Hypothetical namespace for illustration
// Ensure that you have the appropriate namespaces added

class Program
{
    static void Main(string[] args)
    {
        // Create a font for the appearance of the signature
        var font = new XFont("Verdana", 10.0, XFontStyle.Regular);

        // Create a new PDF document
        var document = new PdfDocument();
        var pdfPage = document.AddPage();

        // Prepare graphics for drawing on the PDF page
        var xGraphics = XGraphics.FromPdfPage(pdfPage);
        var layoutRectangle = new XRect(0.0, 0.0, pdfPage.Width.Point, pdfPage.Height.Point);

        // Add some text to the page
        xGraphics.DrawString("Signed sample document", font, XBrushes.Black, layoutRectangle, XStringFormats.TopCenter);

        // Define digital signature appearance options
        var options = new DigitalSignatureOptions
        {
            ContactInfo = "John Doe",
            Location = "Seattle",
            Reason = "License Agreement",
            Rectangle = new XRect(36.0, 700.0, 400.0, 50.0),
            AppearanceHandler = new SignatureAppearanceHandler()
        };

        // Sign the document using BouncyCastle signer
        var pdfSignatureHandler = DigitalSignatureHandler.ForDocument(document,
            new PdfSharp.Snippets.Pdf.BouncyCastleSigner(GetCertificate(), PdfMessageDigestType.SHA256), options);

        // Save the signed document
        document.Save("PdfSharpSignature.pdf");
    }

    static (X509Certificate2, X509Certificate2Collection) GetCertificate()
    {
        // Locate the certificate file and read its data
        var certFolder = "C:\\Users\\kyess\\AppData\\Roaming\\Adobe\\Acrobat\\DC\\Security";
        var pfxFile = Path.Combine(certFolder, "IronSoftware.pfx");
        var rawData = File.ReadAllBytes(pfxFile);

        // Load the certificate using its password (example password)
        var certificatePassword = "Passw0rd";
        var certificate = new X509Certificate2(rawData, certificatePassword,
            X509KeyStorageFlags.MachineKeySet | X509KeyStorageFlags.PersistKeySet | X509KeyStorageFlags.Exportable);

        // Create and return the certificate collection
        var collection = new X509Certificate2Collection();
        collection.Import(rawData, certificatePassword,
            X509KeyStorageFlags.MachineKeySet | X509KeyStorageFlags.PersistKeySet | X509KeyStorageFlags.Exportable);
        return (certificate, collection);
    }
}
using System;
using System.IO;
using System.Security.Cryptography.X509Certificates;
using PdfSharp.Drawing;
using PdfSharp.Pdf;
using BouncyCastleSigner; // Hypothetical namespace for illustration
// Ensure that you have the appropriate namespaces added

class Program
{
    static void Main(string[] args)
    {
        // Create a font for the appearance of the signature
        var font = new XFont("Verdana", 10.0, XFontStyle.Regular);

        // Create a new PDF document
        var document = new PdfDocument();
        var pdfPage = document.AddPage();

        // Prepare graphics for drawing on the PDF page
        var xGraphics = XGraphics.FromPdfPage(pdfPage);
        var layoutRectangle = new XRect(0.0, 0.0, pdfPage.Width.Point, pdfPage.Height.Point);

        // Add some text to the page
        xGraphics.DrawString("Signed sample document", font, XBrushes.Black, layoutRectangle, XStringFormats.TopCenter);

        // Define digital signature appearance options
        var options = new DigitalSignatureOptions
        {
            ContactInfo = "John Doe",
            Location = "Seattle",
            Reason = "License Agreement",
            Rectangle = new XRect(36.0, 700.0, 400.0, 50.0),
            AppearanceHandler = new SignatureAppearanceHandler()
        };

        // Sign the document using BouncyCastle signer
        var pdfSignatureHandler = DigitalSignatureHandler.ForDocument(document,
            new PdfSharp.Snippets.Pdf.BouncyCastleSigner(GetCertificate(), PdfMessageDigestType.SHA256), options);

        // Save the signed document
        document.Save("PdfSharpSignature.pdf");
    }

    static (X509Certificate2, X509Certificate2Collection) GetCertificate()
    {
        // Locate the certificate file and read its data
        var certFolder = "C:\\Users\\kyess\\AppData\\Roaming\\Adobe\\Acrobat\\DC\\Security";
        var pfxFile = Path.Combine(certFolder, "IronSoftware.pfx");
        var rawData = File.ReadAllBytes(pfxFile);

        // Load the certificate using its password (example password)
        var certificatePassword = "Passw0rd";
        var certificate = new X509Certificate2(rawData, certificatePassword,
            X509KeyStorageFlags.MachineKeySet | X509KeyStorageFlags.PersistKeySet | X509KeyStorageFlags.Exportable);

        // Create and return the certificate collection
        var collection = new X509Certificate2Collection();
        collection.Import(rawData, certificatePassword,
            X509KeyStorageFlags.MachineKeySet | X509KeyStorageFlags.PersistKeySet | X509KeyStorageFlags.Exportable);
        return (certificate, collection);
    }
}
Imports System
Imports System.IO
Imports System.Security.Cryptography.X509Certificates
Imports PdfSharp.Drawing
Imports PdfSharp.Pdf
Imports BouncyCastleSigner ' Hypothetical namespace for illustration
' Ensure that you have the appropriate namespaces added

Friend Class Program
	Shared Sub Main(ByVal args() As String)
		' Create a font for the appearance of the signature
		Dim font = New XFont("Verdana", 10.0, XFontStyle.Regular)

		' Create a new PDF document
		Dim document = New PdfDocument()
		Dim pdfPage = document.AddPage()

		' Prepare graphics for drawing on the PDF page
		Dim xGraphics = XGraphics.FromPdfPage(pdfPage)
		Dim layoutRectangle = New XRect(0.0, 0.0, pdfPage.Width.Point, pdfPage.Height.Point)

		' Add some text to the page
		xGraphics.DrawString("Signed sample document", font, XBrushes.Black, layoutRectangle, XStringFormats.TopCenter)

		' Define digital signature appearance options
		Dim options = New DigitalSignatureOptions With {
			.ContactInfo = "John Doe",
			.Location = "Seattle",
			.Reason = "License Agreement",
			.Rectangle = New XRect(36.0, 700.0, 400.0, 50.0),
			.AppearanceHandler = New SignatureAppearanceHandler()
		}

		' Sign the document using BouncyCastle signer
		Dim pdfSignatureHandler = DigitalSignatureHandler.ForDocument(document, New PdfSharp.Snippets.Pdf.BouncyCastleSigner(GetCertificate(), PdfMessageDigestType.SHA256), options)

		' Save the signed document
		document.Save("PdfSharpSignature.pdf")
	End Sub

	Private Shared Function GetCertificate() As (X509Certificate2, X509Certificate2Collection)
		' Locate the certificate file and read its data
		Dim certFolder = "C:\Users\kyess\AppData\Roaming\Adobe\Acrobat\DC\Security"
		Dim pfxFile = Path.Combine(certFolder, "IronSoftware.pfx")
		Dim rawData = File.ReadAllBytes(pfxFile)

		' Load the certificate using its password (example password)
		Dim certificatePassword = "Passw0rd"
		Dim certificate = New X509Certificate2(rawData, certificatePassword, X509KeyStorageFlags.MachineKeySet Or X509KeyStorageFlags.PersistKeySet Or X509KeyStorageFlags.Exportable)

		' Create and return the certificate collection
		Dim collection = New X509Certificate2Collection()
		collection.Import(rawData, certificatePassword, X509KeyStorageFlags.MachineKeySet Or X509KeyStorageFlags.PersistKeySet Or X509KeyStorageFlags.Exportable)
		Return (certificate, collection)
	End Function
End Class
$vbLabelText   $csharpLabel

Saída

Assinatura digital de documentos PDF com PDFsharp vs IronPDF (Exemplo de código): Figura 2

Como você pode ver aqui, embora tenha sido possível criar um campo de assinatura digital e aplicar o certificado ao nosso novo documento, o processo é extenso, manual e não muito eficiente de implementar quando comparado a bibliotecas como o IronPDF.

Adicionando uma assinatura digital com o IronPDF

O IronPDF oferece aos desenvolvedores um método conciso para assinar digitalmente documentos PDF.

using IronPdf;
using System.Security.Cryptography.X509Certificates;

public class Program
{
    static void Main(string[] args)
    {
        // Load the certificate with its password
        var sig = new PdfSignature("IronSoftware.pfx", "your-password");

        // Configure additional signature details
        sig.TimestampHashAlgorithm = TimestampHashAlgorithms.SHA256;
        sig.TimestampUrl = "http://timestamp.digicert.com";
        sig.SignatureImage = new PdfSignatureImage("IronPdf.png", 0, new Rectangle(150, 100, 200, 200));

        // Sign and save the PDF document
        sig.SignPdfFile("output.pdf");
    }
}
using IronPdf;
using System.Security.Cryptography.X509Certificates;

public class Program
{
    static void Main(string[] args)
    {
        // Load the certificate with its password
        var sig = new PdfSignature("IronSoftware.pfx", "your-password");

        // Configure additional signature details
        sig.TimestampHashAlgorithm = TimestampHashAlgorithms.SHA256;
        sig.TimestampUrl = "http://timestamp.digicert.com";
        sig.SignatureImage = new PdfSignatureImage("IronPdf.png", 0, new Rectangle(150, 100, 200, 200));

        // Sign and save the PDF document
        sig.SignPdfFile("output.pdf");
    }
}
Imports IronPdf
Imports System.Security.Cryptography.X509Certificates

Public Class Program
	Shared Sub Main(ByVal args() As String)
		' Load the certificate with its password
		Dim sig = New PdfSignature("IronSoftware.pfx", "your-password")

		' Configure additional signature details
		sig.TimestampHashAlgorithm = TimestampHashAlgorithms.SHA256
		sig.TimestampUrl = "http://timestamp.digicert.com"
		sig.SignatureImage = New PdfSignatureImage("IronPdf.png", 0, New Rectangle(150, 100, 200, 200))

		' Sign and save the PDF document
		sig.SignPdfFile("output.pdf")
	End Sub
End Class
$vbLabelText   $csharpLabel

Saída

Assinatura digital de documentos PDF com PDFsharp vs IronPDF (Exemplo de código): Figura 3

Este código demonstra como assinar um documento PDF usando a classe PdfSignature do IronPDF. O programa primeiro cria um objeto PdfSignature, especificando a localização de um arquivo de certificado .pfx e sua senha. Em seguida, define propriedades adicionais da assinatura, como o algoritmo de hash (SHA256), o URL de registro de data e hora e uma imagem personalizada para a assinatura (IronPDF.png).

Por fim, o método SignPdfFile é chamado para aplicar a assinatura digital ao documento PDF e salvá-lo como output.pdf. Este processo garante a integridade e a autenticidade do PDF, incorporando a assinatura digital juntamente com um registro de data e hora e uma imagem.

PDFSharp:

  • Código aberto sob licença MIT.
  • Requer bibliotecas externas (por exemplo, BouncyCastle) para funcionalidades avançadas como assinatura digital.

IronPDF:

  • Licença comercial com preços baseados no número de desenvolvedores e instâncias de implantação.
  • Teste grátis disponível
  • Gratuito para uso em desenvolvimento

Conclusão: IronPDF vs PDFsharp para assinaturas digitais em C

Ao comparar IronPDF e PDFsharp para adicionar assinaturas digitais a PDFs em C#, ambas as bibliotecas oferecem vantagens distintas dependendo das necessidades do seu projeto.

  • O IronPDF é ideal para desenvolvedores, sejam eles freelancers independentes ou funcionários de empresas, que buscam uma API simples e fácil de usar para aplicar assinaturas digitais a PDFs, e vem com recursos modernos. Sua integração perfeita com aplicativos de assinatura digital, conversão de HTML para PDF e outras funcionalidades de PDF o torna uma ótima opção para projetos comerciais que priorizam a facilidade de uso e a rápida implementação. Com suporte pago e uma estrutura de licenciamento comercial clara, o IronPDF é ideal para empresas que necessitam de uma solução simples e confiável.

  • O PDFsharp se destaca na criação e manipulação básica de PDFs, mas não possui os recursos avançados e o suporte direto para assinaturas digitais que o IronPDF oferece. Embora o PDFsharp seja de código aberto e gratuito, sua API é menos intuitiva para trabalhar com assinaturas digitais em comparação com o IronPDF, e os desenvolvedores podem precisar usar soluções adicionais ou bibliotecas de terceiros para lidar com esses recursos.

Em resumo, o IronPDF é a melhor opção para desenvolvedores que buscam uma solução simples e rápida para assinaturas digitais e tarefas relacionadas a PDFs, especialmente em ambientes comerciais. O PDFsharp é mais adequado para tarefas básicas com PDFs, mas não oferece a mesma facilidade de uso e conjunto de recursos para assinaturas digitais, sendo mais indicado para projetos mais simples ou aqueles com necessidades adicionais de personalização.

ObservePDFsharp e BouncyCastle são marcas registradas de seus respectivos proprietários. Este site não é afiliado, endossado ou patrocinado pela PDFsharp ou BouncyCastle. Todos os nomes de produtos, logotipos e marcas são propriedade de seus respectivos proprietários. As comparações são apenas para fins informativos e refletem informações disponíveis publicamente no momento da redação.

Perguntas frequentes

Como as assinaturas digitais garantem a autenticidade e a integridade dos documentos PDF?

As assinaturas digitais utilizam técnicas criptográficas para verificar se um documento PDF foi alterado após ser assinado. Elas confirmam a identidade do signatário e garantem que o conteúdo do documento permaneça inalterado, proporcionando segurança e validade legal.

Quais desafios os desenvolvedores podem enfrentar ao usar o PDFsharp para adicionar assinaturas digitais?

Ao usar o PDFsharp para adicionar assinaturas digitais, os desenvolvedores geralmente precisam integrar bibliotecas de terceiros, como o BouncyCastle. Esse requisito pode complicar o processo de implementação, pois os desenvolvedores precisam gerenciar dependências adicionais para criar certificados digitais e assinar PDFs.

Por que um desenvolvedor escolheria uma biblioteca PDF comercial em vez de uma de código aberto para assinatura digital?

Uma biblioteca comercial de PDFs oferece recursos avançados, suporte integrado para assinaturas digitais e uma API amigável. Esses atributos a tornam mais adequada para desenvolvedores que buscam uma solução rápida e confiável com suporte dedicado, especialmente em projetos comerciais onde tempo e eficiência são cruciais.

Como converter HTML para PDF em uma aplicação .NET?

É possível converter HTML em PDF em uma aplicação .NET utilizando uma biblioteca como o IronPDF, que fornece métodos como RenderHtmlAsPdf para transformar diretamente strings ou arquivos HTML em documentos PDF, oferecendo suporte a diversas opções de estilo e script.

Quais são os benefícios de usar o IronPDF para lidar com PDFs em projetos comerciais?

O IronPDF oferece um conjunto abrangente de recursos para manipulação de PDFs, incluindo assinaturas digitais, conversão de HTML para PDF e processamento de formulários. Seu suporte robusto e API intuitiva o tornam ideal para projetos comerciais que priorizam funcionalidades avançadas e implantação rápida.

É possível adicionar um carimbo de data/hora a uma assinatura digital em PDF usando uma biblioteca .NET?

Sim, com uma biblioteca como o IronPDF, você pode adicionar um carimbo de data/hora a uma assinatura digital em PDF, especificando a URL do servidor de carimbo de data/hora na configuração da assinatura. Esse recurso aumenta a confiabilidade e a conformidade legal do documento assinado.

O que deve ser considerado ao escolher uma biblioteca de PDF para implementação de assinatura digital?

Ao escolher uma biblioteca de PDF para assinaturas digitais, considere fatores como facilidade de uso, suporte a recursos avançados, capacidade de integração com ferramentas de terceiros e disponibilidade de suporte ao cliente dedicado, que geralmente é mais abrangente em bibliotecas comerciais como o IronPDF.

Curtis Chau
Redator Técnico

Curtis Chau é bacharel em Ciência da Computação (Universidade Carleton) e se especializa em desenvolvimento front-end, com experiência em Node.js, TypeScript, JavaScript e React. Apaixonado por criar interfaces de usuário intuitivas e esteticamente agradáveis, Curtis gosta de trabalhar com frameworks modernos e criar manuais ...

Leia mais

Equipe de suporte de ferro

Estamos online 24 horas por dia, 5 dias por semana.
Bater papo
E-mail
Liga para mim