Como adicionar uma assinatura digital a um PDF em C# usando iTextSharp | IronPDF
A migração do PDF daSyncfusionFramework para o IronPDF transforma seu fluxo de trabalho de geração de PDFs, passando de uma API gráfica baseada em coordenadas, integrada a um pacote extenso, para uma biblioteca independente, com foco em HTML/CSS e renderização moderna do Chromium. Este guia fornece um caminho de migração completo, passo a passo, que elimina o licenciamento exclusivo de pacotes, os requisitos complexos de implantação e o posicionamento baseado em coordenadas.
Por que migrar do PDF daSyncfusionpara o IronPDF?
Entendendo a estrutura PDF da Syncfusion
O PDF daSyncfusionFramework é uma biblioteca abrangente que fornece uma ampla gama de funcionalidades para criar, editar e proteger documentos PDF usando C#. Ele faz parte do Essential Studio da Syncfusion, que inclui mais de mil componentes para diversas plataformas.
A biblioteca PDF não pode ser comprada como um único componente. ASyncfusionagora oferece um tier "Document SDK" que inclui as bibliotecas PDF, Word, Excel e PowerPoint sem os componentes de UI, juntamente com a suíte completa Essential Studio. Equipes que precisam apenas de funcionalidade PDF devem adquirir o Document SDK no mínimo, o que pode ser complicado quando as outras bibliotecas de documentos não são utilizadas.
O problema do licenciamento por pacote
O modelo de licenciamento daSyncfusioncria desafios significativos para equipes que precisam apenas da funcionalidade de PDF:
- Sem Compra Por Biblioteca: O PDF está incluído no Document SDK (PDF + Word + Excel + PowerPoint) ou no Essential Studio completo — não pode ser licenciado separadamente
- Restrições da Licença Comunitária: O tier gratuito exige receita anual <$1M, ≤5 desenvolvedores, E ≤10 funcionários no total, além de um limite vitalício de $3M em capital externo
- Licenciamento para Implantações Complexas: Licenças diferentes para implantações web, desktop e servidor.
- Renovação Anual Necessária: Modelo de assinatura com custos anuais (mínimo de 1 ano de termo)
- Preços por desenvolvedor: os custos aumentam linearmente com o tamanho da equipe.
- Inchaço do Pacote: O Document SDK traz dependências de Word/Excel/PowerPoint mesmo se você só precisar de PDF; O Essential Studio completo adiciona 1000+ componentes de UI extras
Comparação entre PDF daSyncfusione IronPDF
| Aspecto | PDF daSyncfusion | IronPDF |
|---|---|---|
| Modelo de compra | Pacote Document SDK ou Essential Studio completo (sem SKU por biblioteca) | Independente |
| Licenciamento | Níveis complexos | Simples por desenvolvedor |
| Limite da Comunidade | <$1M revenue, ≤5 devs, ≤10 employees, ≤$3M outside capital | Teste grátis, depois licença |
| Implantação | Vários tipos de licença | Uma única licença cobre tudo. |
| Estilo API | Gráficos baseados em coordenadas + conversor HTML | HTML/CSS em primeiro lugar |
| Motor HTML | Blink (NuGets separados para Windows/Linux/Mac) | Chromium incluído |
| Suporte a CSS | Moderno (Blink) — próximo à paridade com o Chromium | CSS3 completo/flexbox/grid |
| Dependências | Vários pacotes | NuGet único |
| Requisito de Pacote | Sim (Document SDK or Essential Studio) | Não |
| Foco no PDF | Largo; parte de um pacote maior | Estreito; com foco em PDF |
O IronPDF oferece uma abordagem mais focada, disponibilizando seus recursos de PDF como um produto independente. Essa diferença impacta significativamente tanto as considerações de custo quanto a facilidade de integração.
Para equipes adotando o .NET moderno, a licença independente do IronPDF e a abordagem HTML/CSS-primeiro fornecem flexibilidade sem dependências de pacote.
Antes de começar
Pré-requisitos
- Ambiente .NET : .NET Framework 4.6.2+ ou .NET Core 3.1+ / .NET 5/6/7/8/9+
- Acesso ao NuGet : Capacidade de instalar pacotes NuGet.
- Licença do IronPDF: Obtenha sua chave de licença em IronPDF
Alterações no pacote NuGet
# RemoveSyncfusionpackages
dotnet remove package Syncfusion.Pdf.Net.Core
dotnet remove package Syncfusion.HtmlToPdfConverter.Net.Windows
dotnet remove package Syncfusion.Licensing
# Install IronPDF
dotnet add package IronPdf
Configuração de licença
Syncfusion:
// Must register before anySyncfusioncalls
Syncfusion.Licensing.SyncfusionLicenseProvider.RegisterLicense("YOUR-SYNCFUSION-KEY");' Must register before any Syncfusion calls
Syncfusion.Licensing.SyncfusionLicenseProvider.RegisterLicense("YOUR-SYNCFUSION-KEY")IronPDF:
// One-time at startup
IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY";' One-time at startup
IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY"Referência completa da API
Alterações de namespace
// Before:SyncfusionPDF
using Syncfusion.Pdf;
using Syncfusion.Pdf.Graphics;
using Syncfusion.Pdf.Parsing;
using Syncfusion.HtmlConverter;
using Syncfusion.Drawing;
// After: IronPDF
using IronPdf;
using IronPdf.Rendering;Imports IronPdf
Imports IronPdf.RenderingMapeamentos da API principal
| Syncfusion | IronPDF |
|---|---|
PdfDocument | ChromePdfRenderer |
PdfLoadedDocument | PdfDocument.FromFile() |
HtmlToPdfConverter | ChromePdfRenderer |
graphics.DrawString() | Elementos de texto HTML |
graphics.DrawImage() | <img> tag |
PdfGrid | HTML <table> |
PdfStandardFont | CSS font-family |
PdfBrushes.Black | CSS color: black |
document.Security | pdf.SecuritySettings |
PdfTextExtractor | pdf.ExtractAllText() |
ImportPageRange() | PdfDocument.Merge() |
document.Save(stream) | pdf.SaveAs(path) |
document.Close(true) | Não é necessário |
Exemplos de migração de código
Exemplo 1: Conversão de HTML/URL para PDF
Antes (PDF da Syncfusion):
// NuGet: Install-Package Syncfusion.Pdf.Net.Core
using Syncfusion.HtmlConverter;
using Syncfusion.Pdf;
using System.IO;
class Program
{
static void Main()
{
// Initialize HTML to PDF converter
HtmlToPdfConverter htmlConverter = new HtmlToPdfConverter();
// Convert URL to PDF
PdfDocument document = htmlConverter.Convert("https://www.example.com");
// Save the document
FileStream fileStream = new FileStream("Output.pdf", FileMode.Create);
document.Save(fileStream);
document.Close(true);
fileStream.Close();
}
}' NuGet: Install-Package Syncfusion.Pdf.Net.Core
Imports Syncfusion.HtmlConverter
Imports Syncfusion.Pdf
Imports System.IO
Module Program
Sub Main()
' Initialize HTML to PDF converter
Dim htmlConverter As New HtmlToPdfConverter()
' Convert URL to PDF
Dim document As PdfDocument = htmlConverter.Convert("https://www.example.com")
' Save the document
Dim fileStream As New FileStream("Output.pdf", FileMode.Create)
document.Save(fileStream)
document.Close(True)
fileStream.Close()
End Sub
End ModuleApós (IronPDF):
// NuGet: Install-Package IronPdf
using IronPdf;
class Program
{
static void Main()
{
// Create a PDF from a URL
var renderer = new ChromePdfRenderer();
var pdf = renderer.RenderUrlAsPdf("https://www.example.com");
// Save the PDF
pdf.SaveAs("Output.pdf");
}
}' NuGet: Install-Package IronPdf
Imports IronPdf
Module Program
Sub Main()
' Create a PDF from a URL
Dim renderer As New ChromePdfRenderer()
Dim pdf = renderer.RenderUrlAsPdf("https://www.example.com")
' Save the PDF
pdf.SaveAs("Output.pdf")
End Sub
End ModuleEste exemplo demonstra as diferenças fundamentais da API. PDF daSyncfusionrequer uma instância HtmlToPdfConverter, chamando Convert() que retorna um PdfDocument, criando então manualmente um FileStream, salvando e fechando tanto o documento quanto o fluxo.
IronPDF usa um ChromePdfRenderer com RenderUrlAsPdf() em apenas três linhas de código. Sem gerenciamento FileStream, sem chamadas Close()—IronPDF lida automaticamente com a limpeza. Consulte a documentação de conversão de HTML para PDF para obter exemplos completos.
Exemplo 2: Criando um PDF a partir de um texto
Antes (PDF da Syncfusion):
// NuGet: Install-Package Syncfusion.Pdf.Net.Core
using Syncfusion.Pdf;
using Syncfusion.Pdf.Graphics;
using Syncfusion.Drawing;
using System.IO;
class Program
{
static void Main()
{
// Create a new PDF document
PdfDocument document = new PdfDocument();
// Add a page
PdfPage page = document.Pages.Add();
// Create a font
PdfFont font = new PdfStandardFont(PdfFontFamily.Helvetica, 12);
// Draw text
page.Graphics.DrawString("Hello, World!", font, PdfBrushes.Black, new PointF(10, 10));
// Save the document
FileStream fileStream = new FileStream("Output.pdf", FileMode.Create);
document.Save(fileStream);
document.Close(true);
fileStream.Close();
}
}' NuGet: Install-Package Syncfusion.Pdf.Net.Core
Imports Syncfusion.Pdf
Imports Syncfusion.Pdf.Graphics
Imports Syncfusion.Drawing
Imports System.IO
Module Program
Sub Main()
' Create a new PDF document
Dim document As New PdfDocument()
' Add a page
Dim page As PdfPage = document.Pages.Add()
' Create a font
Dim font As PdfFont = New PdfStandardFont(PdfFontFamily.Helvetica, 12)
' Draw text
page.Graphics.DrawString("Hello, World!", font, PdfBrushes.Black, New PointF(10, 10))
' Save the document
Dim fileStream As New FileStream("Output.pdf", FileMode.Create)
document.Save(fileStream)
document.Close(True)
fileStream.Close()
End Sub
End ModuleApós (IronPDF):
// NuGet: Install-Package IronPdf
using IronPdf;
using IronPdf.Rendering;
class Program
{
static void Main()
{
// Create a PDF from HTML string
var renderer = new ChromePdfRenderer();
var pdf = renderer.RenderHtmlAsPdf("<h1>Hello, World!</h1>");
// Save the document
pdf.SaveAs("Output.pdf");
}
}' NuGet: Install-Package IronPdf
Imports IronPdf
Imports IronPdf.Rendering
Module Program
Sub Main()
' Create a PDF from HTML string
Dim renderer As New ChromePdfRenderer()
Dim pdf = renderer.RenderHtmlAsPdf("<h1>Hello, World!</h1>")
' Save the document
pdf.SaveAs("Output.pdf")
End Sub
End ModuleO PDF daSyncfusionutiliza um modelo gráfico baseado em coordenadas. Você cria um PdfDocument, adiciona um PdfPage, cria um PdfFont com PdfFontFamily.Helvetica, então chama page.Graphics.DrawString() com coordenadas explícitas (new PointF(10, 10)), fonte e pincel (PdfBrushes.Black). Finalmente, você gerencia a criação e descarte de FileStream.
O IronPDF utiliza uma abordagem que prioriza HTML/CSS. Instead of coordinates, you write <h1>Hello, World!</h1> and let CSS handle positioning, fonts, and colors. Essa abordagem é mais simples, mais fácil de manter e aproveita as habilidades que os desenvolvedores já possuem. Saiba mais em nossos tutoriais .
Exemplo 3: Mesclar documentos PDF
Antes (PDF da Syncfusion):
// NuGet: Install-Package Syncfusion.Pdf.Net.Core
using Syncfusion.Pdf;
using Syncfusion.Pdf.Parsing;
using System.IO;
class Program
{
static void Main()
{
// Load the first PDF document
FileStream stream1 = new FileStream("Document1.pdf", FileMode.Open, FileAccess.Read);
PdfLoadedDocument loadedDocument1 = new PdfLoadedDocument(stream1);
// Load the second PDF document
FileStream stream2 = new FileStream("Document2.pdf", FileMode.Open, FileAccess.Read);
PdfLoadedDocument loadedDocument2 = new PdfLoadedDocument(stream2);
// Merge the documents
PdfDocument finalDocument = new PdfDocument();
finalDocument.ImportPageRange(loadedDocument1, 0, loadedDocument1.Pages.Count - 1);
finalDocument.ImportPageRange(loadedDocument2, 0, loadedDocument2.Pages.Count - 1);
// Save the merged document
FileStream outputStream = new FileStream("Merged.pdf", FileMode.Create);
finalDocument.Save(outputStream);
// Close all documents
finalDocument.Close(true);
loadedDocument1.Close(true);
loadedDocument2.Close(true);
stream1.Close();
stream2.Close();
outputStream.Close();
}
}' NuGet: Install-Package Syncfusion.Pdf.Net.Core
Imports Syncfusion.Pdf
Imports Syncfusion.Pdf.Parsing
Imports System.IO
Module Program
Sub Main()
' Load the first PDF document
Dim stream1 As FileStream = New FileStream("Document1.pdf", FileMode.Open, FileAccess.Read)
Dim loadedDocument1 As PdfLoadedDocument = New PdfLoadedDocument(stream1)
' Load the second PDF document
Dim stream2 As FileStream = New FileStream("Document2.pdf", FileMode.Open, FileAccess.Read)
Dim loadedDocument2 As PdfLoadedDocument = New PdfLoadedDocument(stream2)
' Merge the documents
Dim finalDocument As PdfDocument = New PdfDocument()
finalDocument.ImportPageRange(loadedDocument1, 0, loadedDocument1.Pages.Count - 1)
finalDocument.ImportPageRange(loadedDocument2, 0, loadedDocument2.Pages.Count - 1)
' Save the merged document
Dim outputStream As FileStream = New FileStream("Merged.pdf", FileMode.Create)
finalDocument.Save(outputStream)
' Close all documents
finalDocument.Close(True)
loadedDocument1.Close(True)
loadedDocument2.Close(True)
stream1.Close()
stream2.Close()
outputStream.Close()
End Sub
End ModuleApós (IronPDF):
// NuGet: Install-Package IronPdf
using IronPdf;
using System.Collections.Generic;
class Program
{
static void Main()
{
// Load PDF documents
var pdf1 = PdfDocument.FromFile("Document1.pdf");
var pdf2 = PdfDocument.FromFile("Document2.pdf");
// Merge PDFs
var merged = PdfDocument.Merge(new List<PdfDocument> { pdf1, pdf2 });
// Save the merged document
merged.SaveAs("Merged.pdf");
}
}' NuGet: Install-Package IronPdf
Imports IronPdf
Imports System.Collections.Generic
Class Program
Shared Sub Main()
' Load PDF documents
Dim pdf1 = PdfDocument.FromFile("Document1.pdf")
Dim pdf2 = PdfDocument.FromFile("Document2.pdf")
' Merge PDFs
Dim merged = PdfDocument.Merge(New List(Of PdfDocument) From {pdf1, pdf2})
' Save the merged document
merged.SaveAs("Merged.pdf")
End Sub
End ClassO contraste na fusão de PDFs é impressionante. PDF daSyncfusionrequer a criação de objetos FileStream para cada documento de entrada, carregando-os como PdfLoadedDocument, criando um novo PdfDocument, chamando ImportPageRange() com índices de início e fim para cada fonte, criando um FileStream de saída, e então fechando seis objetos separados (finalDocument, loadedDocument1, loadedDocument2, stream1, stream2, outputStream).
IronPDF usa PdfDocument.FromFile() para carregar cada PDF e um método estático PdfDocument.Merge() que aceita uma lista de documentos. Sem gerenciamento de fluxos, sem cálculos manuais de intervalo de páginas, sem situações de quase-acidente.
Principais diferenças na filosofia da API
Baseado em coordenadas versus HTML/CSS como primeiro passo
O PDF daSyncfusionutiliza um modelo gráfico baseado em coordenadas, herdado das bibliotecas PDF tradicionais:
// Syncfusion:Manualpositioning
page.Graphics.DrawString("Text", font, PdfBrushes.Black, new PointF(100, 200));
page.Graphics.DrawRectangle(brush, new RectangleF(50, 50, 200, 100));
O IronPDF utiliza HTML/CSS para o layout:
// IronPDF: CSS-based positioning
var html = @"
<div style='margin: 50px; padding: 20px; border: 1px solid black;'>
<p style='color: black;'>Text</p>
</div>";
var pdf = renderer.RenderHtmlAsPdf(html);' IronPDF: CSS-based positioning
Dim html As String = "
<div style='margin: 50px; padding: 20px; border: 1px solid black;'>
<p style='color: black;'>Text</p>
</div>"
Dim pdf = renderer.RenderHtmlAsPdf(html)A abordagem HTML/CSS é mais intuitiva para desenvolvedores web, mais fácil de manter e produz resultados consistentes em diferentes tamanhos de página.
Gerenciamento de fluxo versus limpeza automática
O PDF daSyncfusionexige o descarte explícito de fluxos e documentos:
// Syncfusion:Manualcleanup
FileStream fileStream = new FileStream("Output.pdf", FileMode.Create);
document.Save(fileStream);
document.Close(true);
fileStream.Close();
O IronPDF realiza a limpeza automaticamente:
// IronPDF: Automático cleanup
pdf.SaveAs("Output.pdf");netComparação de recursos
| Recurso | PDF daSyncfusion | IronPDF |
|---|---|---|
| Compra avulsa | Não (Document SDK or Essential Studio) | Sim |
| Licenciamento | Comercial com restrições comunitárias | Comercial simplificado |
| Motor HTML | Blink (NuGets específicos da plataforma) | Chromium incluído |
| Suporte a CSS3 | Moderno via Blink | Completo (flexbox, grade) |
| Estilo API | Gráficos baseados em coordenadas + conversor HTML | HTML/CSS em primeiro lugar |
| Gestão de Fluxos | Manual | Automático |
| Dependências | Vários pacotes | NuGet único |
| Complexidade de Implantação | Potencialmente complexo | Direto |
Lista de verificação para migração
Pré-migração
- Inventariar todas as utilizações de PDF daSyncfusionna base de código.
- Documentar os custos de licenciamento e os requisitos de implementação.
- Identifique usos de
PdfGrid,PdfGraphicseHtmlToPdfConverter - Obtenha a chave de licença do IronPDF em IronPDF
Atualizações de código
- Remova pacotesSyncfusion(
Syncfusion.Pdf.Net.Core,Syncfusion.HtmlToPdfConverter.Net.Windows,Syncfusion.Licensing) - Instale o pacote NuGet
IronPdf - Atualize as importações de namespace (
using Syncfusion.Pdf;→using IronPdf;) - Substitua
Syncfusion.Licensing.SyncfusionLicenseProvider.RegisterLicense()porIronPdf.License.LicenseKey = "..." - Substitua
HtmlToPdfConverter.Convert()porChromePdfRenderer.RenderUrlAsPdf()ouRenderHtmlAsPdf() - Substitua
PdfDocument+Pages.Add()+Graphics.DrawString()porChromePdfRenderer.RenderHtmlAsPdf() - Substitua
PdfLoadedDocumentporPdfDocument.FromFile() - Substitua
ImportPageRange()porPdfDocument.Merge() - Substitua
document.Save(stream)porpdf.SaveAs(path) - Remova todas as chamadas
document.Close(true)estream.Close() - Substitua
PdfGridpor elementos HTML<table> - Substitua
PdfStandardFontporfont-familyde CSS - Substitua
PdfBrushespor propriedades CSScolor
Testando
- Comparação visual da saída em PDF
- Verificar melhorias na renderização de CSS (flexbox e grid agora funcionam)
- Teste de extração de texto
- Teste de fusão e divisão
- Comparação de desempenho

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 bem estruturados e visualmente atraentes.