Como migrar do PDFView4NET para o IronPDF em C#
Migrar dePDFView4NETpara IronPDF move seu fluxo de trabalho de PDF de um componente de visualização WinForms/WPF para uma biblioteca de geração e manipulação PDF sem cabeça. Este guia fornece um caminho de migração passo a passo que possibilita processamento do lado do servidor, suporte a aplicativos web e gerenciamento mais amplo do ciclo de vida de PDF além do escopo de visualização/renderização/impressão do PDFView4NET.
Por que migrar doPDFView4NETpara o IronPDF?
Entendendo o PDFView4NET
PDFView4NET (O2 Solutions, o2sol.com) é um kit de ferramentas de visualização / renderização / impressão para aplicaçõesWinFormse WPF. Ele é fornecido como dois pacotes NuGet — O2S.Components.PDFView4NET.Win e O2S.Components.PDFView4NET.WPF — e inclui seu próprio mecanismo de renderização de PDF. O2 Solutions vende uma biblioteca separada, PDF4NET, para criação/manipulação programática; este guia cobre apenas PDFView4NET.
Equipes que precisam de geração de PDF, renderização de HTML para PDF ou fluxos de trabalho do lado do servidor frequentemente combinamPDFView4NETcom outra biblioteca, ou migram diretamente para um kit de ferramentas como o IronPDF, que cobre criação e manipulação, bem como cenários de implantação sem cabeça.
O Âmbito de Visualização / Renderização / Impressão
PDFView4NET é construído em torno de exibir, renderizar e imprimir PDFs, além de anotações e preenchimento de formulários. Razões comuns para migrar:
-
Foco em Visualização / Renderização / Impressão:PDFView4NETcarrega PDFs existentes para exibição, impressão ou renderização de imagem. Não gera PDFs a partir de HTML ou URLs.
-
Dependência de Framework de UI: Distribuído em ediçõesWinFormse WPF; ambos têm como alvo o Windows desktop, o que limita o uso em trabalhadores de console ou hosts do lado do servidor.
-
Sem HTML para PDF: Não há
HtmlToPdfConverterou API de renderização de HTML emO2S.Components.PDFView4NET. -
Manipulação Limitada: A manipulação está centrada em anotações e campos de formulários em vez de criação de conteúdo completo.
-
Sem Caminho para Linux /Docker/Servidor: O kit de ferramentas é apenas para Windows via WinForms/WPF e não é projetado para hosts ASP.NET em Linux ou cargas de trabalho em contêiner.
- Ativo, mas Limitado: O2 Solutions ainda lança versões; o produto é mantido, mas seu escopo é intencionalmente limitado.
Comparação entrePDFView4NETe IronPDF
| Recurso | PDFView4NET | IronPDF |
|---|---|---|
| Foco principal | Visualização de PDF | Solução completa para PDF (Criar, Visualizar, Editar) |
| Frameworks de interface do usuário necessários | WinForms, WPF | None |
| Criação de PDF | Não | Sim |
| Manipulação de PDF | Limitado (Anotações) | Sim |
| Lado do servidor | Não suportado | Suporte completo |
| Aplicações Web | Não | Sim |
| Aplicativos de console | Limitado | Suporte completo |
| Azure/Docker | Não | Sim |
| HTML para PDF | Não | Sim |
| Contexto multiplataforma | Não | Sim |
| Facilidade de integração | Médio | Alto |
IronPDF cobre criação, manipulação e renderização de PDFs além dos fluxos de trabalho adjacentes à visualização, abordando casos de uso que vão além do escopo de visualização/renderização/impressão do PDFView4NET.
IronPDF também é independente de contexto — ele funciona em aplicações web, serviços e aplicações de console no Windows, Linux, macOS,Dockere Azure, o que pode ser importante para projetos que precisam de suporte multiplataforma ou hospedagem do lado do servidor.
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
<PackageReference Include="O2S.Components.PDFView4NET.Win" Version="*" Remove />
<PackageReference Include="IronPdf" Version="*" />
<PackageReference Include="O2S.Components.PDFView4NET.Win" Version="*" Remove />
<PackageReference Include="IronPdf" Version="*" />
Ou via linha de comando:
dotnet remove package O2S.Components.PDFView4NET.Win
# (use O2S.Components.PDFView4NET.WPF for theWPFedition)
dotnet add package IronPdf
dotnet remove package O2S.Components.PDFView4NET.Win
# (use O2S.Components.PDFView4NET.WPF for theWPFedition)
dotnet add package IronPdf
Configuração de licença
// Add at application startup
IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY";
// Add at application startup
IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY";
' Add at application startup
IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY"
Referência completa da API
Alterações de namespace
// Before: PDFView4NET
using O2S.Components.PDFView4NET;
// After: IronPDF
using IronPdf;
// Before: PDFView4NET
using O2S.Components.PDFView4NET;
// After: IronPDF
using IronPdf;
Imports IronPdf
Mapeamentos da API principal
| PDFView4NET | IronPDF |
|---|---|
new PDFDocument(); doc.Load(path) |
PdfDocument.FromFile(path) |
new PDFDocument(); doc.Load(stream) |
PdfDocument.FromStream(stream) |
document.Pages[index] |
pdf.Pages[index] |
document.PageCount |
pdf.PageCount |
document.Print(...) |
pdf.Print() |
document.Close() |
pdf.Dispose() |
| N/A no PDFView4NET | ChromePdfRenderer (HTML para PDF) |
| N/A no PDFView4NET | PdfDocument.Merge() |
| N/A no PDFView4NET | pdf.ApplyWatermark() |
document.SecurityManager |
pdf.SecuritySettings |
Exemplos de migração de código
Exemplo 1: Conversão de URL para PDF
Antes (PDFView4NET):
// NuGet: Install-Package O2S.Components.PDFView4NET.Win
using O2S.Components.PDFView4NET;
using System;
class Program
{
static void Main()
{
//PDFView4NETcannot fetch a URL and emit a PDF; it can only consume one.
PDFDocument document = new PDFDocument();
document.Load("input.pdf");
Console.WriteLine($"Loaded {document.PageCount} page(s) for view/print.");
document.Close();
}
}
// NuGet: Install-Package O2S.Components.PDFView4NET.Win
using O2S.Components.PDFView4NET;
using System;
class Program
{
static void Main()
{
//PDFView4NETcannot fetch a URL and emit a PDF; it can only consume one.
PDFDocument document = new PDFDocument();
document.Load("input.pdf");
Console.WriteLine($"Loaded {document.PageCount} page(s) for view/print.");
document.Close();
}
}
Imports O2S.Components.PDFView4NET
Imports System
Class Program
Shared Sub Main()
' PDFView4NET cannot fetch a URL and emit a PDF; it can only consume one.
Dim document As New PDFDocument()
document.Load("input.pdf")
Console.WriteLine($"Loaded {document.PageCount} page(s) for view/print.")
document.Close()
End Sub
End Class
Após (IronPDF):
// NuGet: Install-Package IronPdf
using IronPdf;
using System;
class Program
{
static void Main()
{
var renderer = new ChromePdfRenderer();
var pdf = renderer.RenderUrlAsPdf("https://example.com");
pdf.SaveAs("output.pdf");
}
}
// NuGet: Install-Package IronPdf
using IronPdf;
using System;
class Program
{
static void Main()
{
var renderer = new ChromePdfRenderer();
var pdf = renderer.RenderUrlAsPdf("https://example.com");
pdf.SaveAs("output.pdf");
}
}
Imports IronPdf
Imports System
Class Program
Shared Sub Main()
Dim renderer = New ChromePdfRenderer()
Dim pdf = renderer.RenderUrlAsPdf("https://example.com")
pdf.SaveAs("output.pdf")
End Sub
End Class
PDFView4NET não tem superfície de renderização de HTML/URL — não há HtmlToPdfConverter em O2S.Components.PDFView4NET, então uma URL deve ser renderizada para PDF por outra ferramenta primeiro e depois carregada para visualização/impressão.IronPDF lida com toda a conversão com uma única chamada ChromePdfRenderer.RenderUrlAsPdf() que retorna um PdfDocument que você salva com SaveAs(). Consulte a documentação de conversão de HTML para PDF para obter exemplos completos.
Exemplo 2: Conversão de string HTML para PDF
Antes (PDFView4NET):
// NuGet: Install-Package O2S.Components.PDFView4NET.Win
using O2S.Components.PDFView4NET;
using System;
class Program
{
static void Main()
{
// The HTML string cannot be rendered by PDFView4NET. Assume an upstream
// tool produced "document.pdf";PDFView4NETcan then display or print it.
PDFDocument document = new PDFDocument();
document.Load("document.pdf");
Console.WriteLine($"Document ready for viewing — {document.PageCount} page(s).");
document.Close();
}
}
// NuGet: Install-Package O2S.Components.PDFView4NET.Win
using O2S.Components.PDFView4NET;
using System;
class Program
{
static void Main()
{
// The HTML string cannot be rendered by PDFView4NET. Assume an upstream
// tool produced "document.pdf";PDFView4NETcan then display or print it.
PDFDocument document = new PDFDocument();
document.Load("document.pdf");
Console.WriteLine($"Document ready for viewing — {document.PageCount} page(s).");
document.Close();
}
}
Imports O2S.Components.PDFView4NET
Imports System
Class Program
Shared Sub Main()
' The HTML string cannot be rendered by PDFView4NET. Assume an upstream
' tool produced "document.pdf"; PDFView4NET can then display or print it.
Dim document As New PDFDocument()
document.Load("document.pdf")
Console.WriteLine($"Document ready for viewing — {document.PageCount} page(s).")
document.Close()
End Sub
End Class
Após (IronPDF):
// NuGet: Install-Package IronPdf
using IronPdf;
using System;
class Program
{
static void Main()
{
string htmlContent = "<html><body><h1>Hello World</h1><p>This is a PDF document.</p></body></html>";
var renderer = new ChromePdfRenderer();
var pdf = renderer.RenderHtmlAsPdf(htmlContent);
pdf.SaveAs("document.pdf");
}
}
// NuGet: Install-Package IronPdf
using IronPdf;
using System;
class Program
{
static void Main()
{
string htmlContent = "<html><body><h1>Hello World</h1><p>This is a PDF document.</p></body></html>";
var renderer = new ChromePdfRenderer();
var pdf = renderer.RenderHtmlAsPdf(htmlContent);
pdf.SaveAs("document.pdf");
}
}
Imports IronPdf
Imports System
Class Program
Shared Sub Main()
Dim htmlContent As String = "<html><body><h1>Hello World</h1><p>This is a PDF document.</p></body></html>"
Dim renderer = New ChromePdfRenderer()
Dim pdf = renderer.RenderHtmlAsPdf(htmlContent)
pdf.SaveAs("document.pdf")
End Sub
End Class
Não há propriedade HtmlContent ou API de renderização de HTML em O2S.Components.PDFView4NET, então a string HTML precisa ser produzida como PDF em outro lugar e depois carregada no visualizador.IronPDF aceita a string HTML diretamente via RenderHtmlAsPdf() e retorna um PdfDocument. Saiba mais em nossos tutoriais .
Exemplo 3: Extração de texto de um PDF
Antes (PDFView4NET):
// NuGet: Install-Package O2S.Components.PDFView4NET.Win
using O2S.Components.PDFView4NET;
using System;
using System.IO;
class Program
{
static void Main()
{
using (FileStream fs = File.OpenRead("document.pdf"))
{
PDFDocument document = new PDFDocument();
document.Load(fs);
string text = "";
for (int i = 0; i < document.PageCount; i++)
{
text += document.Pages[i].ExtractText();
}
Console.WriteLine(text);
document.Close();
}
}
}
// NuGet: Install-Package O2S.Components.PDFView4NET.Win
using O2S.Components.PDFView4NET;
using System;
using System.IO;
class Program
{
static void Main()
{
using (FileStream fs = File.OpenRead("document.pdf"))
{
PDFDocument document = new PDFDocument();
document.Load(fs);
string text = "";
for (int i = 0; i < document.PageCount; i++)
{
text += document.Pages[i].ExtractText();
}
Console.WriteLine(text);
document.Close();
}
}
}
Imports O2S.Components.PDFView4NET
Imports System
Imports System.IO
Class Program
Shared Sub Main()
Using fs As FileStream = File.OpenRead("document.pdf")
Dim document As New PDFDocument()
document.Load(fs)
Dim text As String = ""
For i As Integer = 0 To document.PageCount - 1
text &= document.Pages(i).ExtractText()
Next
Console.WriteLine(text)
document.Close()
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("document.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("document.pdf");
string text = pdf.ExtractAllText();
Console.WriteLine(text);
}
}
Imports IronPdf
Imports System
Class Program
Shared Sub Main()
Dim pdf = PdfDocument.FromFile("document.pdf")
Dim text As String = pdf.ExtractAllText()
Console.WriteLine(text)
End Sub
End Class
Este exemplo destaca uma diferença significativa na API.PDFView4NETrequer criar um FileStream, instanciar PDFDocument e chamar Load(fs), depois iterar document.PageCount e concatenar Pages[i].ExtractText() por página.
IronPDF simplifica isso de maneira dramática: PdfDocument.FromFile() carrega o PDF diretamente de um caminho, e ExtractAllText() extrai texto de todas as páginas em uma única chamada de método. Sem gerenciamento manual de fluxos, sem loops, sem concatenação de strings — apenas duas linhas de código.
Notas críticas sobre migração
Superfície de Renderização HTML
PDFView4NET não tem API de HTML para PDF.IronPDF introduz ChromePdfRenderer para entrada HTML/URL:
// IronPDF
var renderer = new ChromePdfRenderer();
var pdf = renderer.RenderHtmlAsPdf(htmlContent);
// or: renderer.RenderUrlAsPdf(url);
pdf.SaveAs("output.pdf");
// IronPDF
var renderer = new ChromePdfRenderer();
var pdf = renderer.RenderHtmlAsPdf(htmlContent);
// or: renderer.RenderUrlAsPdf(url);
pdf.SaveAs("output.pdf");
Imports IronPdf
Dim renderer As New ChromePdfRenderer()
Dim pdf = renderer.RenderHtmlAsPdf(htmlContent)
' or: renderer.RenderUrlAsPdf(url)
pdf.SaveAs("output.pdf")
Alteração de carregamento de documento
// PDFView4NET: instantiate then Load(path) or Load(stream)
PDFDocument document = new PDFDocument();
document.Load("document.pdf");
// IronPDF: Direct file path
var pdf = PdfDocument.FromFile("document.pdf");
// PDFView4NET: instantiate then Load(path) or Load(stream)
PDFDocument document = new PDFDocument();
document.Load("document.pdf");
// IronPDF: Direct file path
var pdf = PdfDocument.FromFile("document.pdf");
' PDFView4NET: instantiate then Load(path) or Load(stream)
Dim document As New PDFDocument()
document.Load("document.pdf")
' IronPDF: Direct file path
Dim pdf = PdfDocument.FromFile("document.pdf")
Alteração de acesso à página
// PDFView4NET: document.PageCount and document.Pages[i]
for (int i = 0; i < document.PageCount; i++)
{
document.Pages[i].ExtractText();
}
// IronPDF: pdf.PageCount and Pages[i] or ExtractAllText()
string text = pdf.ExtractAllText();
// Or per-page: pdf.ExtractTextFromPage(0);
// PDFView4NET: document.PageCount and document.Pages[i]
for (int i = 0; i < document.PageCount; i++)
{
document.Pages[i].ExtractText();
}
// IronPDF: pdf.PageCount and Pages[i] or ExtractAllText()
string text = pdf.ExtractAllText();
// Or per-page: pdf.ExtractTextFromPage(0);
Imports PDFView4NET
Imports IronPDF
' PDFView4NET: document.PageCount and document.Pages(i)
For i As Integer = 0 To document.PageCount - 1
document.Pages(i).ExtractText()
Next
' IronPDF: pdf.PageCount and Pages(i) or ExtractAllText()
Dim text As String = pdf.ExtractAllText()
' Or per-page: pdf.ExtractTextFromPage(0)
Salvar alteração de método
//PDFView4NEThas no save-from-HTML path; saving applies after edits on a loaded document.
// IronPDF: SaveAs()
pdf.SaveAs("output.pdf");
//PDFView4NEThas no save-from-HTML path; saving applies after edits on a loaded document.
// IronPDF: SaveAs()
pdf.SaveAs("output.pdf");
'PDFView4NEThas no save-from-HTML path; saving applies after edits on a loaded document.
' IronPDF: SaveAs()
pdf.SaveAs("output.pdf")
Novas funcionalidades após a migração
Após migrar para o IronPDF, você obtém recursos que oPDFView4NETnão pode fornecer:
Fusão de PDFs
var pdf1 = PdfDocument.FromFile("chapter1.pdf");
var pdf2 = PdfDocument.FromFile("chapter2.pdf");
var merged = PdfDocument.Merge(pdf1, pdf2);
merged.SaveAs("complete_book.pdf");
var pdf1 = PdfDocument.FromFile("chapter1.pdf");
var pdf2 = PdfDocument.FromFile("chapter2.pdf");
var merged = PdfDocument.Merge(pdf1, pdf2);
merged.SaveAs("complete_book.pdf");
Dim pdf1 = PdfDocument.FromFile("chapter1.pdf")
Dim pdf2 = PdfDocument.FromFile("chapter2.pdf")
Dim merged = PdfDocument.Merge(pdf1, pdf2)
merged.SaveAs("complete_book.pdf")
Marcas d'água com HTML
var pdf = PdfDocument.FromFile("document.pdf");
pdf.ApplyWatermark(@"
<div style='
font-size: 72pt;
color: rgba(255, 0, 0, 0.2);
transform: rotate(-45deg);
'>
CONFIDENTIAL
</div>");
pdf.SaveAs("watermarked.pdf");
var pdf = PdfDocument.FromFile("document.pdf");
pdf.ApplyWatermark(@"
<div style='
font-size: 72pt;
color: rgba(255, 0, 0, 0.2);
transform: rotate(-45deg);
'>
CONFIDENTIAL
</div>");
pdf.SaveAs("watermarked.pdf");
Dim pdf = PdfDocument.FromFile("document.pdf")
pdf.ApplyWatermark("
<div style='
font-size: 72pt;
color: rgba(255, 0, 0, 0.2);
transform: rotate(-45deg);
'>
CONFIDENTIAL
</div>")
pdf.SaveAs("watermarked.pdf")
Proteção por senha
var pdf = PdfDocument.FromFile("document.pdf");
pdf.SecuritySettings.OwnerPassword = "owner123";
pdf.SecuritySettings.UserPassword = "user456";
pdf.SecuritySettings.AllowUserCopyPasteContent = false;
pdf.SaveAs("protected.pdf");
var pdf = PdfDocument.FromFile("document.pdf");
pdf.SecuritySettings.OwnerPassword = "owner123";
pdf.SecuritySettings.UserPassword = "user456";
pdf.SecuritySettings.AllowUserCopyPasteContent = false;
pdf.SaveAs("protected.pdf");
Dim pdf = PdfDocument.FromFile("document.pdf")
pdf.SecuritySettings.OwnerPassword = "owner123"
pdf.SecuritySettings.UserPassword = "user456"
pdf.SecuritySettings.AllowUserCopyPasteContent = False
pdf.SaveAs("protected.pdf")
Preenchimento de formulários
var pdf = PdfDocument.FromFile("form.pdf");
pdf.Form.FindFormField("FirstName").Value = "John";
pdf.Form.FindFormField("LastName").Value = "Doe";
pdf.SaveAs("filled_form.pdf");
var pdf = PdfDocument.FromFile("form.pdf");
pdf.Form.FindFormField("FirstName").Value = "John";
pdf.Form.FindFormField("LastName").Value = "Doe";
pdf.SaveAs("filled_form.pdf");
Dim pdf = PdfDocument.FromFile("form.pdf")
pdf.Form.FindFormField("FirstName").Value = "John"
pdf.Form.FindFormField("LastName").Value = "Doe"
pdf.SaveAs("filled_form.pdf")
Processamento do lado do servidor
OPDFView4NETnão pode ser executado em ambientes de servidor. O IronPDF se destaca nesse aspecto:
// ASP.NET Core
[HttpGet]
public IActionResult GeneratePdf()
{
var renderer = new ChromePdfRenderer();
var pdf = renderer.RenderHtmlAsPdf(GetReportHtml());
return File(pdf.BinaryData, "application/pdf", "report.pdf");
}
// ASP.NET Core
[HttpGet]
public IActionResult GeneratePdf()
{
var renderer = new ChromePdfRenderer();
var pdf = renderer.RenderHtmlAsPdf(GetReportHtml());
return File(pdf.BinaryData, "application/pdf", "report.pdf");
}
<HttpGet>
Public Function GeneratePdf() As IActionResult
Dim renderer As New ChromePdfRenderer()
Dim pdf = renderer.RenderHtmlAsPdf(GetReportHtml())
Return File(pdf.BinaryData, "application/pdf", "report.pdf")
End Function
Resumo da comparação de recursos
| Recurso | PDFView4NET | IronPDF |
|---|---|---|
| Ver PDFs | Sim (interface do usuário) | Não (use o visualizador) |
| Carregar PDFs | Sim | Sim |
| Salvar PDFs | Limitado | Sim |
| HTML para PDF | Não | Sim |
| URL para PDF | Não | Sim |
| Mesclar PDFs | Não | Sim |
| Dividir PDFs | Limitado | Sim |
| Marcas d'água | Não | Sim |
| Cabeçalhos/Rodapés | Não | Sim |
| Proteção por senha | Não | Sim |
| Assinaturas digitais | Não | Sim |
| Extração de texto | Limitado | Sim |
| Preencha os formulários. | Limitado | Sim |
| WinForms | Sim | Sim |
| WPF | Sim | Sim |
| Console | Limitado | Sim |
| ASP.NET | Não | Sim |
| Azure | Não | Sim |
| Docker | Não | Sim |
Lista de verificação para migração
Pré-migração
- Identificar os requisitos de visualização (determinar se os recursos do IronPDF podem substituir a visualização de PDFs baseada em interface gráfica)
- Fluxos de trabalho de impressão de documentos
- Listar as necessidades de manipulação de PDF
- Substituição do visualizador de plantas, se necessário (o IronPDF foca na geração/manipulação de plantas)
- Obtenha a chave de licença do IronPDF em IronPDF
Alterações no pacote
- Remova
O2S.Components.PDFView4NET.Win(ou.WPF) pacote NuGet - Instale
IronPdfpacote NuGet:dotnet add package IronPdf
Alterações no código
- Atualize as importações de namespace (
using O2S.Components.PDFView4NET;→using IronPdf;) - Introduza
ChromePdfRendererpara qualquer entrada HTML ou URL (sem equivalente no PDFView4NET) - Substitua
new PDFDocument(); document.Load(path)withPdfDocument.FromFile(path) - Substitua
new PDFDocument(); document.Load(stream)withPdfDocument.FromStream(stream) - Substitua manualmente
for (int i = 0; i < document.PageCount; i++)(orpdf.ExtractTextFromPage(i)) - Substitua
document.Close()porpdf.Dispose()(ou um blocousing) - Adicionar inicialização de licença na inicialização do aplicativo
Pós-migração
- Testar o carregamento e o salvamento de PDFs
- Verificar a funcionalidade de extração de texto
- Teste de conversão de HTML para PDF
- Verificar se a implantação do servidor funciona (nova funcionalidade)
- Testar a compatibilidade entre plataformas, se necessário (nova funcionalidade)
- Remover o código PDF específico da interface do usuário se for exclusivo do servidor.

