Como migrar do PdfPig para o IronPDF em C#
A migração do PdfPig para o IronPDF expande suas capacidades de PDF, transformando-o de uma biblioteca somente leitura em uma solução completa que lida com criação, manipulação, extração de texto e recursos de segurança. Este guia fornece um caminho de migração completo, passo a passo, que preserva seus fluxos de trabalho de extração existentes, ao mesmo tempo que adiciona recursos de geração de PDF, conversão de HTML, manipulação de documentos e segurança que o PdfPig não oferece.
Por que migrar do PdfPig para o IronPDF?
Entendendo o PdfPig
PdfPig é uma biblioteca de código aberto para leitura e extração de PDFs, projetada especificamente para C#. Como parte do renomado projeto Apache PDFBox, esta biblioteca permite que os desenvolvedores acessem o conteúdo de PDFs com notável precisão. Embora o PdfPig se destaque em suas capacidades de extração, seu escopo é bastante limitado em comparação com bibliotecas mais abrangentes disponíveis no mercado.
O PdfPig fornece aos desenvolvedores ferramentas confiáveis para extrair texto, imagens, dados de formulários e metadados de arquivos PDF. Isso a torna uma escolha adequada para aplicações focadas principalmente em análise de documentos e mineração de dados. No entanto, as capacidades do PdfPig são fundamentalmente limitadas à análise de documentos existentes.
A limitação de somente leitura
O PdfPig se concentra exclusivamente na leitura de PDFs. Quando sua aplicação precisa ir além da extração de dados, o PdfPig não pode ajudar:
-
Sem geração de PDF: Não é possível criar PDFs a partir de HTML, URLs ou programaticamente.
-
Sem conversão de HTML para PDF: PdfPig é uma biblioteca de leitura/análise de PDF, não uma biblioteca de geração de PDF. Você precisaria usar uma biblioteca diferente para a conversão de HTML para PDF.
-
Sem manipulação de documentos: Não é possível mesclar, dividir ou modificar PDFs.
-
Sem recursos de segurança: Não é possível adicionar senhas, criptografia ou assinaturas digitais.
-
Sem marcas d'água/carimbos: Não é possível adicionar sobreposições visuais a documentos existentes.
- Sem preenchimento de formulários: Não é possível preencher formulários PDF programaticamente.
Comparação entre PdfPig e IronPDF
| Recurso | PdfPig | IronPDF |
|---|---|---|
| Licença | Código aberto (Apache 2.0) | Comercial |
| Leitura/Extração de PDF | Excelente | Excelente |
| Geração de PDF | Limitado | Abrangente |
| HTML para PDF | Não suportado | Apoiado |
| Extração de texto | Excelente | Excelente |
| Manipulação de PDF | Não suportado | Mesclar, dividir, rotacionar |
| Marcas d'água | Não suportado | Apoiado |
| Segurança/Criptografia | Não suportado | Apoiado |
| Suporte e documentação | Apoio comunitário | Suporte dedicado |
| Indexação de páginas | 1-baseado | Baseado em 0 |
O IronPDF oferece um conjunto completo de recursos para criar, ler, editar e assinar PDFs. Essa versatilidade permite que os desenvolvedores gerenciem arquivos PDF do início ao fim. Para equipes que planejam a adoção do .NET 10 e do C# 14 até 2025 e 2026, o IronPDF oferece uma solução completa para o ciclo de vida do PDF que vai além dos recursos de leitura do PdfPig.
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
# Remove PdfPig
dotnet remove package PdfPig
# Install IronPDF
dotnet add package IronPdf
# Remove PdfPig
dotnet remove package PdfPig
# Install IronPDF
dotnet add package IronPdf
Configuração de licença
// Add at application startup (Program.cs or Startup.cs)
IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY";
// Add at application startup (Program.cs or Startup.cs)
IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY";
' Add at application startup (Program.vb or Startup.vb)
IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY"
Identificar o uso do PdfPig
# Find PdfPig usage
grep -r "UglyToad\.PdfPig\|PdfDocument\.Open\|GetPages\(\)" --include="*.cs" .
# Find page index references (may need 1→0 conversion)
grep -r "GetPage(\|NumberOfPages" --include="*.cs" .
# Find PdfPig usage
grep -r "UglyToad\.PdfPig\|PdfDocument\.Open\|GetPages\(\)" --include="*.cs" .
# Find page index references (may need 1→0 conversion)
grep -r "GetPage(\|NumberOfPages" --include="*.cs" .
Referência completa da API
Alterações de namespace
// Before: PdfPig
using UglyToad.PdfPig;
using UglyToad.PdfPig.Content;
using UglyToad.PdfPig.DocumentLayoutAnalysis.WordExtractor;
// After: IronPDF
using IronPdf;
using IronPdf.Rendering;
// Before: PdfPig
using UglyToad.PdfPig;
using UglyToad.PdfPig.Content;
using UglyToad.PdfPig.DocumentLayoutAnalysis.WordExtractor;
// After: IronPDF
using IronPdf;
using IronPdf.Rendering;
' Before: PdfPig
Imports UglyToad.PdfPig
Imports UglyToad.PdfPig.Content
Imports UglyToad.PdfPig.DocumentLayoutAnalysis.WordExtractor
' After: IronPDF
Imports IronPdf
Imports IronPdf.Rendering
Mapeamentos de carregamento de documentos
| PdfPig | IronPDF |
|---|---|
PdfDocument.Open(path) |
PdfDocument.FromFile(path) |
PdfDocument.Open(bytes) |
PdfDocument.FromBinaryData(bytes) |
PdfDocument.Open(stream) |
PdfDocument.FromStream(stream) |
using (var doc = ...) |
var pdf = ... |
Mapeamento de acesso e propriedades de páginas
| PdfPig | IronPDF |
|---|---|
document.NumberOfPages |
pdf.PageCount |
document.GetPages() |
pdf.Pages |
document.GetPage(1) |
pdf.Pages[0] |
Mapeamentos de Extração de Texto
| PdfPig | IronPDF |
|---|---|
page.Text |
pdf.Pages[i].Text |
page.GetWords() |
pdf.ExtractTextFromPage(i) |
| (manual loop) | pdf.ExtractAllText() |
Mapeamentos de acesso a metadados
| PdfPig | IronPDF |
|---|---|
document.Information.Title |
pdf.MetaData.Title |
document.Information.Author |
pdf.MetaData.Author |
document.Information.Subject |
pdf.MetaData.Subject |
document.Information.Creator |
pdf.MetaData.Creator |
document.Information.Producer |
pdf.MetaData.Producer |
Novos recursos não disponíveis no PdfPig
| Recurso IronPDF | Descrição |
|---|---|
renderer.RenderHtmlAsPdf(html) |
Conversão de HTML para PDF |
renderer.RenderUrlAsPdf(url) |
Conversão de URL para PDF |
PdfDocument.Merge(pdfs) |
Mesclar vários PDFs |
pdf.ApplyWatermark(html) |
Adicionar marcas d'água |
pdf.SecuritySettings.UserPassword |
Proteção por senha |
pdf.Sign(certificate) |
Assinaturas digitais |
Exemplos de migração de código
Exemplo 1: Extração de texto de um PDF
Antes (PdfPig):
// NuGet: Install-Package PdfPig
using UglyToad.PdfPig;
using System;
using System.Text;
class Program
{
static void Main()
{
using (var document = PdfDocument.Open("input.pdf"))
{
var text = new StringBuilder();
foreach (var page in document.GetPages())
{
text.AppendLine(page.Text);
}
Console.WriteLine(text.ToString());
}
}
}
// NuGet: Install-Package PdfPig
using UglyToad.PdfPig;
using System;
using System.Text;
class Program
{
static void Main()
{
using (var document = PdfDocument.Open("input.pdf"))
{
var text = new StringBuilder();
foreach (var page in document.GetPages())
{
text.AppendLine(page.Text);
}
Console.WriteLine(text.ToString());
}
}
}
Imports UglyToad.PdfPig
Imports System
Imports System.Text
Class Program
Shared Sub Main()
Using document = PdfDocument.Open("input.pdf")
Dim text = New StringBuilder()
For Each page In document.GetPages()
text.AppendLine(page.Text)
Next
Console.WriteLine(text.ToString())
End Using
End Sub
End Class
Após (IronPDF):
// NuGet: Install-Package IronPdf
using IronPdf;
using System;
class Program
{
static void Main()
{
var pdf = PdfDocument.FromFile("input.pdf");
string text = pdf.ExtractAllText();
Console.WriteLine(text);
}
}
// NuGet: Install-Package IronPdf
using IronPdf;
using System;
class Program
{
static void Main()
{
var pdf = PdfDocument.FromFile("input.pdf");
string text = pdf.ExtractAllText();
Console.WriteLine(text);
}
}
Imports IronPdf
Imports System
Class Program
Shared Sub Main()
Dim pdf = PdfDocument.FromFile("input.pdf")
Dim text As String = pdf.ExtractAllText()
Console.WriteLine(text)
End Sub
End Class
Tanto o PdfPig quanto o IronPDF oferecem excelentes recursos de extração de texto. A principal diferença está no padrão do código. O PdfPig requer uma declaração using com PdfDocument.Open(), iteração manual pelas páginas com GetPages() e um StringBuilder para acumular o texto de cada propriedade page.Text.
O IronPDF simplifica isso para uma única chamada: PdfDocument.FromFile() carrega o documento e ExtractAllText() retorna todo o conteúdo de texto de uma só vez. Nenhuma instrução using necessária, nenhuma iteração manual, nenhum StringBuilder. Consulte a documentação de extração de texto para obter opções adicionais.
Exemplo 2: Conversão de HTML para PDF
Antes (PdfPig):
O PdfPig não suporta a conversão de HTML para PDF. PdfPig é uma biblioteca para leitura e análise de PDFs, não uma biblioteca para geração de PDFs. Você precisaria usar uma biblioteca diferente para a conversão de HTML para PDF.
Após (IronPDF):
// NuGet: Install-Package IronPdf
using IronPdf;
class Program
{
static void Main()
{
var renderer = new ChromePdfRenderer();
var pdf = renderer.RenderHtmlAsPdf("<h1>Hello World</h1><p>This is a PDF from HTML</p>");
pdf.SaveAs("output.pdf");
}
}
// NuGet: Install-Package IronPdf
using IronPdf;
class Program
{
static void Main()
{
var renderer = new ChromePdfRenderer();
var pdf = renderer.RenderHtmlAsPdf("<h1>Hello World</h1><p>This is a PDF from HTML</p>");
pdf.SaveAs("output.pdf");
}
}
Imports IronPdf
Class Program
Shared Sub Main()
Dim renderer = New ChromePdfRenderer()
Dim pdf = renderer.RenderHtmlAsPdf("<h1>Hello World</h1><p>This is a PDF from HTML</p>")
pdf.SaveAs("output.pdf")
End Sub
End Class
Este exemplo destaca a lacuna de funcionalidade mais significativa. O PdfPig afirma explicitamente que "não suporta conversão de HTML para PDF" e que "é uma biblioteca de leitura/análise de PDF, não uma biblioteca de geração de PDF". Se você precisar criar PDFs a partir de HTML com o PdfPig, precisará usar uma biblioteca completamente diferente.
O IronPDF oferece conversão nativa de HTML para PDF através de ChromePdfRenderer. O método RenderHtmlAsPdf() aceita strings HTML e as converte em documentos PDF usando um mecanismo Chromium internamente para renderização precisa de HTML, CSS e JavaScript. O resultado PdfDocument pode ser salvo com SaveAs() ou manipulado posteriormente antes de ser salvo. Consulte a documentação de conversão de HTML para PDF para obter exemplos completos.
Exemplo 3: Leitura de metadados de PDF
Antes (PdfPig):
// NuGet: Install-Package PdfPig
using UglyToad.PdfPig;
using System;
class Program
{
static void Main()
{
using (var document = PdfDocument.Open("input.pdf"))
{
var info = document.Information;
Console.WriteLine($"Title: {info.Title}");
Console.WriteLine($"Author: {info.Author}");
Console.WriteLine($"Subject: {info.Subject}");
Console.WriteLine($"Creator: {info.Creator}");
Console.WriteLine($"Producer: {info.Producer}");
Console.WriteLine($"Number of Pages: {document.NumberOfPages}");
}
}
}
// NuGet: Install-Package PdfPig
using UglyToad.PdfPig;
using System;
class Program
{
static void Main()
{
using (var document = PdfDocument.Open("input.pdf"))
{
var info = document.Information;
Console.WriteLine($"Title: {info.Title}");
Console.WriteLine($"Author: {info.Author}");
Console.WriteLine($"Subject: {info.Subject}");
Console.WriteLine($"Creator: {info.Creator}");
Console.WriteLine($"Producer: {info.Producer}");
Console.WriteLine($"Number of Pages: {document.NumberOfPages}");
}
}
}
Imports UglyToad.PdfPig
Imports System
Class Program
Shared Sub Main()
Using document = PdfDocument.Open("input.pdf")
Dim info = document.Information
Console.WriteLine($"Title: {info.Title}")
Console.WriteLine($"Author: {info.Author}")
Console.WriteLine($"Subject: {info.Subject}")
Console.WriteLine($"Creator: {info.Creator}")
Console.WriteLine($"Producer: {info.Producer}")
Console.WriteLine($"Number of Pages: {document.NumberOfPages}")
End Using
End Sub
End Class
Após (IronPDF):
// NuGet: Install-Package IronPdf
using IronPdf;
using System;
class Program
{
static void Main()
{
var pdf = PdfDocument.FromFile("input.pdf");
var info = pdf.MetaData;
Console.WriteLine($"Title: {info.Title}");
Console.WriteLine($"Author: {info.Author}");
Console.WriteLine($"Subject: {info.Subject}");
Console.WriteLine($"Creator: {info.Creator}");
Console.WriteLine($"Producer: {info.Producer}");
Console.WriteLine($"Number of Pages: {pdf.PageCount}");
}
}
// NuGet: Install-Package IronPdf
using IronPdf;
using System;
class Program
{
static void Main()
{
var pdf = PdfDocument.FromFile("input.pdf");
var info = pdf.MetaData;
Console.WriteLine($"Title: {info.Title}");
Console.WriteLine($"Author: {info.Author}");
Console.WriteLine($"Subject: {info.Subject}");
Console.WriteLine($"Creator: {info.Creator}");
Console.WriteLine($"Producer: {info.Producer}");
Console.WriteLine($"Number of Pages: {pdf.PageCount}");
}
}
Imports IronPdf
Imports System
Class Program
Shared Sub Main()
Dim pdf = PdfDocument.FromFile("input.pdf")
Dim info = pdf.MetaData
Console.WriteLine($"Title: {info.Title}")
Console.WriteLine($"Author: {info.Author}")
Console.WriteLine($"Subject: {info.Subject}")
Console.WriteLine($"Creator: {info.Creator}")
Console.WriteLine($"Producer: {info.Producer}")
Console.WriteLine($"Number of Pages: {pdf.PageCount}")
End Sub
End Class
Ambas as bibliotecas fornecem acesso a metadados com padrões quase idênticos. O PdfPig acessa metadados através de document.Information e a contagem de páginas através de document.NumberOfPages. O IronPDF usa pdf.MetaData para metadados e pdf.PageCount para contagem de páginas.
A migração é simples: substitua PdfDocument.Open() por PdfDocument.FromFile(), document.Information por pdf.MetaData e document.NumberOfPages por pdf.PageCount. Remova o wrapper da declaração using, pois o IronPDF não o exige.
Notas críticas sobre migração
Alteração na indexação da página
O PdfPig usa indexação baseada em 1; O IronPDF usa base zero:
// PdfPig: 1-baseado indexing
var firstPage = document.GetPage(1); // First page
// IronPDF: Baseado em 0 indexing
var firstPage = pdf.Pages[0]; // First page
// Migration helper
int pdfPigIndex = 1;
int ironPdfIndex = pdfPigIndex - 1;
// PdfPig: 1-baseado indexing
var firstPage = document.GetPage(1); // First page
// IronPDF: Baseado em 0 indexing
var firstPage = pdf.Pages[0]; // First page
// Migration helper
int pdfPigIndex = 1;
int ironPdfIndex = pdfPigIndex - 1;
' PdfPig: 1-based indexing
Dim firstPage = document.GetPage(1) ' First page
' IronPDF: 0-based indexing
Dim firstPage = pdf.Pages(0) ' First page
' Migration helper
Dim pdfPigIndex As Integer = 1
Dim ironPdfIndex As Integer = pdfPigIndex - 1
O uso da instrução using não é necessário.
// PdfPig: Requires using for disposal
using (var document = PdfDocument.Open("input.pdf"))
{
// ...
}
// IronPDF: No using required (but can use for cleanup)
var pdf = PdfDocument.FromFile("input.pdf");
// ...
// pdf.Dispose(); // Optional
// PdfPig: Requires using for disposal
using (var document = PdfDocument.Open("input.pdf"))
{
// ...
}
// IronPDF: No using required (but can use for cleanup)
var pdf = PdfDocument.FromFile("input.pdf");
// ...
// pdf.Dispose(); // Optional
Imports PdfPig
Imports IronPDF
Using document = PdfDocument.Open("input.pdf")
' ...
End Using
Dim pdf = PdfDocument.FromFile("input.pdf")
' ...
' pdf.Dispose() ' Optional
Alteração de carregamento de documento
// PdfPig: PdfDocument.Open()
using (var document = PdfDocument.Open("input.pdf"))
// IronPDF: PdfDocument.FromFile()
var pdf = PdfDocument.FromFile("input.pdf");
// PdfPig: PdfDocument.Open()
using (var document = PdfDocument.Open("input.pdf"))
// IronPDF: PdfDocument.FromFile()
var pdf = PdfDocument.FromFile("input.pdf");
Imports PdfPig
Imports IronPDF
Using document = PdfDocument.Open("input.pdf")
End Using
Dim pdf = PdfDocument.FromFile("input.pdf")
Alteração do nome da propriedade de metadados
// PdfPig: document.Information
var info = document.Information;
// IronPDF: pdf.MetaData
var info = pdf.MetaData;
// PdfPig: document.Information
var info = document.Information;
// IronPDF: pdf.MetaData
var info = pdf.MetaData;
' PdfPig: document.Information
Dim info = document.Information
' IronPDF: pdf.MetaData
Dim info = pdf.MetaData
Alteração da propriedade Contagem de Páginas
// PdfPig: document.NumberOfPages
Console.WriteLine($"Pages: {document.NumberOfPages}");
// IronPDF: pdf.PageCount
Console.WriteLine($"Pages: {pdf.PageCount}");
// PdfPig: document.NumberOfPages
Console.WriteLine($"Pages: {document.NumberOfPages}");
// IronPDF: pdf.PageCount
Console.WriteLine($"Pages: {pdf.PageCount}");
' PdfPig: document.NumberOfPages
Console.WriteLine($"Pages: {document.NumberOfPages}")
' IronPDF: pdf.PageCount
Console.WriteLine($"Pages: {pdf.PageCount}")
Novas funcionalidades após a migração
Após migrar para o IronPDF, você obtém recursos que o PdfPig não pode fornecer:
Fusão de PDFs
var pdf1 = PdfDocument.FromFile("document1.pdf");
var pdf2 = PdfDocument.FromFile("document2.pdf");
var merged = PdfDocument.Merge(pdf1, pdf2);
merged.SaveAs("merged.pdf");
var pdf1 = PdfDocument.FromFile("document1.pdf");
var pdf2 = PdfDocument.FromFile("document2.pdf");
var merged = PdfDocument.Merge(pdf1, pdf2);
merged.SaveAs("merged.pdf");
Dim pdf1 = PdfDocument.FromFile("document1.pdf")
Dim pdf2 = PdfDocument.FromFile("document2.pdf")
Dim merged = PdfDocument.Merge(pdf1, pdf2)
merged.SaveAs("merged.pdf")
Marcas d'água
pdf.ApplyWatermark("<h2 style='color:red;'>CONFIDENTIAL</h2>");
pdf.ApplyWatermark("<h2 style='color:red;'>CONFIDENTIAL</h2>");
pdf.ApplyWatermark("<h2 style='color:red;'>CONFIDENTIAL</h2>")
Proteção por senha
pdf.SecuritySettings.UserPassword = "userpassword";
pdf.SecuritySettings.OwnerPassword = "ownerpassword";
pdf.SecuritySettings.UserPassword = "userpassword";
pdf.SecuritySettings.OwnerPassword = "ownerpassword";
pdf.SecuritySettings.UserPassword = "userpassword"
pdf.SecuritySettings.OwnerPassword = "ownerpassword"
Assinaturas digitais
var signature = new PdfSignature("certificate.pfx", "password")
{
SigningContact = "support@company.com",
SigningReason = "Document Approval"
};
pdf.Sign(signature);
var signature = new PdfSignature("certificate.pfx", "password")
{
SigningContact = "support@company.com",
SigningReason = "Document Approval"
};
pdf.Sign(signature);
Dim signature As New PdfSignature("certificate.pfx", "password") With {
.SigningContact = "support@company.com",
.SigningReason = "Document Approval"
}
pdf.Sign(signature)
Resumo da comparação de recursos
| Recurso | PdfPig | IronPDF |
|---|---|---|
| Extração de texto | ✓ | ✓ |
| Acesso a metadados | ✓ | ✓ |
| Extração de Imagens | ✓ | ✓ |
| Criação de PDF | Limitado | ✓ |
| HTML para PDF | ✗ | ✓ |
| URL para PDF | ✗ | ✓ |
| Mesclar PDFs | ✗ | ✓ |
| Dividir PDFs | ✗ | ✓ |
| Marcas d'água | ✗ | ✓ |
| Preenchimento de formulários | ✗ | ✓ |
| Proteção por senha | ✗ | ✓ |
| Assinaturas digitais | ✗ | ✓ |
| Dados de posição da palavra | ✓ | ✗ |
Lista de verificação para migração
Pré-migração
- Inventariar todo o uso do PdfPig na base de código.
- Identifique se você precisa de dados de posição em nível de palavra (considere uma abordagem híbrida)
- Observe todas as referências de índice de página (é necessário converter de base 1 para base 0)
- Planeje o armazenamento da chave de licença do IronPDF (variáveis de ambiente recomendadas)
- Teste primeiro com a licença de avaliação do IronPDF
Alterações no pacote
- Remover o pacote NuGet
PdfPig:dotnet remove package PdfPig - Instale o pacote NuGet
IronPdf:dotnet add package IronPdf
Alterações no código
- Atualizar importações de namespace (
using UglyToad.PdfPig;→using IronPdf;) - Substitua
PdfDocument.Open()porPdfDocument.FromFile() - Substitua
document.Informationporpdf.MetaData - Substitua
document.NumberOfPagesporpdf.PageCount - Converter índices de página de base 1 para base 0
- Remover declarações
using(opcional, o IronPDF não as exige) - Adicione a chave de licença do IronPDF na inicialização do aplicativo.
Pós-migração
- O resultado da extração de texto de teste corresponde às expectativas.
- Testar todos os cenários de geração de PDF
- Adicionar novas funcionalidades (fusão, marcas d'água, segurança) conforme necessário.
- Instale as dependências do Linux se estiver implantando em um sistema Linux.

