Como migrar do PdfPig para o IronPDF em C#
Migrar dePdfPigpara IronPDF expande suas capacidades de PDF de uma biblioteca focada em leitura (com uma superfície de escrita estreita para autorias baseadas em coordenadas e fusão básica) para uma solução abrangente de PDF 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 e passo a passo que preserva seus fluxos de trabalho de extração existentes enquanto adiciona conversão HTML, manipulação de documentos de alto nível, marca d'água e autoria de segurança que oPdfPignão fornece.
Por que migrar doPdfPigpara o IronPDF?
Entendendo o PdfPig
PdfPig (pacote NuGet PdfPig, namespace UglyToad.PdfPig) é uma biblioteca open-source de leitura e extração de PDFs .NET, originalmente inspirado — e parcialmente portado de — o projeto Apache PDFBox em Java. Ele permite que os desenvolvedores acessem o conteúdo estrutural dos PDFs com alta precisão. Embora oPdfPigse destaque na extração, seu escopo é mais estreito do que bibliotecas comerciais de ciclo de vida completo. O projeto permanece pré-1.0 (lançamento estável atual é 0.1.14), e seu README observa que "enquanto a versão estiver abaixo de 1.0.0, versões menores mudarão a API pública sem aviso."
PdfPig fornece ferramentas confiáveis para extrair texto (com posições de letra e palavra), imagens, dados de formulário somente leitura, anotações e metadados. Ele também expõe uma superfície de escritor limitada — PdfDocumentBuilder para autoria de novos documentos de baixo nível e PdfMerger (em UglyToad.PdfPig.Writer) para concatenar PDFs existentes. Isso o torna uma escolha adequada para aplicações focadas principalmente em análise de documentos, mineração de dados e concatenação básica.
A Limitação Focada na Leitura
PdfPig é focado na leitura; sua superfície de escrita é intencionalmente estreita. Quando sua aplicação precisa crescer além da extração e fusão básica, oPdfPignão pode ajudar:
-
Geração de PDF Limitada: Novos documentos requerem posicionamento manual de coordenadas
PdfPointviaPdfDocumentBuilder— sem layout de alto nível. -
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.
-
Manipulação de Documentos Limitada:
PdfMergercobre concatenação, mas não há API de divisão/rotação/edição de alto nível. -
Nenhuma Autoria de Segurança: Pode ler PDFs criptografados (com senha) mas não pode adicionar senhas, criptografia ou assinaturas digitais.
-
Sem Marcas d'água/Carimbos: Nenhuma API de alto nível para sobreposições visuais em documentos existentes.
- Sem Preenchimento de Formulários: Os formulários são somente leitura — os valores não podem ser alterados ou adicionados.
Comparação entrePdfPige IronPDF
| Recurso | PdfPig | IronPDF |
|---|---|---|
| Licença | Código aberto (Apache 2.0) | Comercial |
| Pacote NuGet | PdfPig (v0.1.14, pré-1.0) |
IronPdf |
| Leitura/Extração de PDF | Excelente | Excelente |
| Geração de PDF | Limitado (baseado em coordenadas via PdfDocumentBuilder) |
Abrangente |
| HTML para PDF | Não suportado | Apoiado |
| Extração de texto | Excelente (com caixas de delimitação de palavras) | Excelente (somente texto) |
| Mesclagem de PDF | Suportado (PdfMerger) |
Suportado (PdfDocument.Merge) |
| Dividir / Rotacionar / Editar | Não suportado (alto nível) | Apoiado |
| Marcas d'água | Não suportado | Apoiado |
| Autoria de 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 no moderno .NET, fornecendo uma solução completa de ciclo de vida de PDF que se estende além das capacidades 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
# FindPdfPigusage
grep -r "UglyToad\.PdfPig\|PdfDocument\.Open\|GetPages\(\)" --include="*.cs" .
# Find page index references (may need 1→0 conversion)
grep -r "GetPage(\|NumberOfPages" --include="*.cs" .
# FindPdfPigusage
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 |
pdf.ApplyWatermark(html) |
Adicionar marcas d'água |
pdf.SecuritySettings.UserPassword |
Proteção por senha |
pdf.Sign(certificate) |
Assinaturas digitais |
Nota: Fusão de PDFs está disponível em ambas as bibliotecas (PdfMerger em PdfPig, PdfDocument.Merge em IronPDF).
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 oPdfPigquanto o IronPDF oferecem excelentes recursos de extração de texto. A principal diferença está no padrão do código.PdfPigrequer uma declaração using com PdfDocument.Open(), iteração manual através das páginas com GetPages(), e um StringBuilder para acumular texto de cada propriedade @@--CODE-3561@@.
IronPDF simplifica isso para uma única chamada: PdfDocument.FromFile() carrega o documento, e ExtractAllText() retorna todo o conteúdo de texto de uma vez. Nenhuma declaração using é necessária, sem iteração manual, sem 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):
OPdfPignã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. OPdfPigafirma 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.
IronPDF fornece 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 internamente um mecanismo Chromium para renderização precisa de HTML, CSS e JavaScript. O PdfDocument resultante pode ser salvo com SaveAs() ou manipulado adicionalmente antes de salvar. 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.PdfPigacessa metadados através de document.Information e contagem de páginas por document.NumberOfPages.IronPDF usa pdf.MetaData para metadados e pdf.PageCount para contagem de páginas.
A migração é direta: substitua PdfDocument.Open() por PdfDocument.FromFile(), document.Information por pdf.MetaData, e document.NumberOfPages por pdf.PageCount. Remova o encapsulamento de declaração using já que IronPDF não o requer.
Notas críticas sobre migração
Alteração na indexação da página
OPdfPigusa 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 oPdfPignã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 (baseado em coordenadas) | ✓ |
| HTML para PDF | ✗ | ✓ |
| URL para PDF | ✗ | ✓ |
| Mesclar PDFs | ✓(PdfMerger) |
✓ |
| 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 doPdfPigna 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
- Remova o pacote NuGet
PdfPig:dotnet remove package PdfPig - Instale o pacote NuGet
IronPdf:dotnet add package IronPdf
Alterações no código
- Atualize as 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
- Remova as declarações
using(opcional,IronPDF não as requer) - 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.

