Como migrar do BitMiracle Docotic PDF para o IronPDF em C#
O BitMiracle Docotic PDF é uma biblioteca .NET para PDF muito conceituada, conhecida por sua arquitetura de código 100% gerenciada e amplas capacidades de manipulação programática de PDFs. No entanto, sua estrutura modular de complementos — que exige pacotes separados para conversão de HTML para PDF, recursos de layout e outras funcionalidades — aumenta a complexidade do gerenciamento de projetos e do licenciamento. Este guia completo fornece um caminho de migração passo a passo do BitMiracle Docotic PDF para o IronPDF— uma biblioteca PDF .NET unificada com renderização HTML baseada no Chromium e todos os recursos incluídos em um único pacote NuGet .
Por que migrar do BitMiracle Docotic PDF para o IronPDF?
Embora o BitMiracle Docotic PDF ofereça recursos robustos de manipulação de PDFs, diversos fatores levam as equipes de desenvolvimento a buscar alternativas com uma arquitetura mais simplificada.
Comparação da arquitetura de pacotes
O BitMiracle Docotic PDF utiliza uma abordagem modular com complementos que requer vários pacotes para funcionalidade completa:
| Aspecto | BitMiracle Docotic PDF | IronPDF |
|---|---|---|
| HTML para PDF | Requer um complemento separado (HtmlToPdf) | Recurso principal integrado |
| Estrutura do pacote | Núcleo + vários complementos | Pacote NuGet único |
| Modelo de licenciamento | Licenciamento por complemento | Todas as funcionalidades incluídas |
| Complexidade da API | Espaços de nomes separados por complemento. | API Unificada |
| Motor HTML | Chromium (via complemento) | Chromium (embutido) |
| Tamanho da comunidade | Menor | Maior, com mais recursos |
| Documentação | Referência técnica | Tutoriais abrangentes |
Paridade de recursos
Ambas as bibliotecas oferecem suporte completo à funcionalidade PDF:
| Recurso | BitMiracle Docotic PDF | IronPDF |
|---|---|---|
| Criar PDF do zero | ✅ | ✅ |
| HTML para PDF | ✅ (Complemento necessário) | ✅ (integrado) |
| URL para PDF | ✅ (Complemento necessário) | ✅ (integrado) |
| Manipulação de PDF | ✅ | ✅ |
| Extração de texto | ✅ | ✅ |
| Mesclar/Dividir | ✅ | ✅ |
| Assinaturas digitais | ✅ | ✅ |
| Criptografia | ✅ | ✅ |
| Preenchimento de formulário | ✅ | ✅ |
| Conformidade com PDF/A | ✅ | ✅ |
Principais diferenças de abordagem
O BitMiracle Docotic PDF usa desenho baseado em tela com posicionamento por coordenadas (canvas.DrawString(x, y, text)), enquanto o IronPDF utiliza HTML/CSS para layout e posicionamento. Isso representa uma mudança de paradigma que simplifica a criação de conteúdo para desenvolvedores familiarizados com tecnologias web.
Preparação pré-migratória
Pré-requisitos
Certifique-se de que seu ambiente atenda a estes requisitos:
- .NET Framework 4.6.2 ou superior ou .NET Core 3.1 / .NET 5-9
- Visual Studio 2019 ou superior ou VS Code com extensão C#
- Acesso ao Gerenciador de Pacotes NuGet
- Chave de licença do IronPDF (teste gratuito disponível em IronPDF )
Auditoria de uso de PDF do BitMiracle Docotic
Execute estes comandos no diretório da sua solução para identificar todas as referências a Docotic.Pdf:
# Find all Docotic.Pdf usages in your codebase
grep -r "using BitMiracle.Docotic" --include="*.cs" .
grep -r "PdfDocument\|PdfPage\|PdfCanvas" --include="*.cs" .
# Find NuGet package references
grep -r "Docotic.Pdf" --include="*.csproj" .
# Find all Docotic.Pdf usages in your codebase
grep -r "using BitMiracle.Docotic" --include="*.cs" .
grep -r "PdfDocument\|PdfPage\|PdfCanvas" --include="*.cs" .
# Find NuGet package references
grep -r "Docotic.Pdf" --include="*.csproj" .
Mudanças significativas a serem previstas
| Mudar | BitMiracle Docotic PDF | IronPDF | Impacto |
|---|---|---|---|
| Renderização HTML | Requer o complemento HtmlToPdf. | Embutido | Remover pacote adicional |
| Indexação de páginas | Baseado em 0 (Pages[0]) |
Baseado em 0 (Pages[0]) |
Não é necessário troco. |
| Sistema de coordenadas | Origem inferior esquerda | Fluxo HTML/CSS | Use CSS para posicionamento. |
| Desenho em tela | PdfCanvas.DrawText() |
Marcação HTML | Mudança de paradigma |
| Extração de texto | page.GetText() |
pdf.ExtractAllText() |
Alteração do nome do método |
| Carregamento de documentos | new PdfDocument(path) |
PdfDocument.FromFile(path) |
Construtor → método estático |
| Economizando | document.Save(path) |
pdf.SaveAs(path) |
Alteração do nome do método |
| Disposição | IDisposable padrão |
Não é necessário | Gestão de recursos simplificada |
Processo de migração passo a passo
Passo 1: Atualizar pacotes NuGet
Remova os pacotes BitMiracle Docotic PDF e instale o IronPDF:
# Remove Docotic.Pdf packages
dotnet remove package BitMiracle.Docotic.Pdf
dotnet remove package BitMiracle.Docotic.Pdf.HtmlToPdf
dotnet remove package BitMiracle.Docotic.Pdf.Layout
# Install IronPDF
dotnet add package IronPdf
# Remove Docotic.Pdf packages
dotnet remove package BitMiracle.Docotic.Pdf
dotnet remove package BitMiracle.Docotic.Pdf.HtmlToPdf
dotnet remove package BitMiracle.Docotic.Pdf.Layout
# Install IronPDF
dotnet add package IronPdf
Etapa 2: Atualizar referências de namespace
Substitua os namespaces do BitMiracle Docotic PDF pelo IronPDF:
// Remove these
using BitMiracle.Docotic.Pdf;
using BitMiracle.Docotic.Pdf.Layout;
using BitMiracle.Docotic.Pdf.HtmlToPdf;
// Add this
using IronPdf;
// Remove these
using BitMiracle.Docotic.Pdf;
using BitMiracle.Docotic.Pdf.Layout;
using BitMiracle.Docotic.Pdf.HtmlToPdf;
// Add this
using IronPdf;
Imports IronPdf
Etapa 3: Configurar a licença
// Add at application startup (Program.cs or Global.asax)
IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY";
// Add at application startup (Program.cs or Global.asax)
IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY";
' Add at application startup (Program.vb or Global.asax)
IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY"
Referência completa para migração de API
Operações de Documentos
| Tarefa | BitMiracle Docotic PDF | IronPDF |
|---|---|---|
| Criar documento vazio | new PdfDocument() |
new PdfDocument() |
| Carregar do arquivo | new PdfDocument(path) |
PdfDocument.FromFile(path) |
| Carregar do fluxo | PdfDocument.Load(stream) |
PdfDocument.FromStream(stream) |
| Carregar a partir de bytes | PdfDocument.Load(bytes) |
PdfDocument.FromBinaryData(bytes) |
| Salvar em arquivo | document.Save(path) |
pdf.SaveAs(path) |
| Obter contagem de páginas | document.PageCount |
pdf.PageCount |
| Fechar/Descartar | document.Dispose() |
Não é necessário |
Conversão de HTML para PDF
| Tarefa | BitMiracle Docotic PDF (Complemento HtmlToPdf) | IronPDF |
|---|---|---|
| String HTML para PDF | HtmlConverter.Create(html).ToPdf() |
renderer.RenderHtmlAsPdf(html) |
| Arquivo HTML para PDF | HtmlConverter.Create(new Uri(filePath)).ToPdf() |
renderer.RenderHtmlFileAsPdf(path) |
| URL para PDF | HtmlConverter.Create(new Uri(url)).ToPdf() |
renderer.RenderUrlAsPdf(url) |
| Definir tamanho da página | options.PageSize = PageSize.A4 |
renderer.RenderingOptions.PaperSize = PdfPaperSize.A4 |
| Definir margens | options.PageMargins = new Margins(20) |
renderer.RenderingOptions.MarginTop = 20 |
Operações de Fusão e Divisão
| Tarefa | BitMiracle Docotic PDF | IronPDF |
|---|---|---|
| Mesclar documentos | doc1.Append(doc2) |
PdfDocument.Merge(pdf1, pdf2) |
| Dividir documento | document.CopyPage(index) para novo documento |
pdf.CopyPages(start, end) |
Exemplos de migração de código
Conversão de HTML para PDF
A operação mais comum demonstra a significativa simplificação que o IronPDF proporciona.
Implementação do BitMiracle Docotic PDF:
// NuGet: Install-Package Docotic.Pdf
using BitMiracle.Docotic.Pdf;
using System;
class Program
{
static void Main()
{
using (var pdf = new PdfDocument())
{
string html = "<html><body><h1>Hello World</h1><p>This is HTML para PDF conversion.</p></body></html>";
pdf.CreatePage(html);
pdf.Save("output.pdf");
}
Console.WriteLine("PDF created successfully");
}
}
// NuGet: Install-Package Docotic.Pdf
using BitMiracle.Docotic.Pdf;
using System;
class Program
{
static void Main()
{
using (var pdf = new PdfDocument())
{
string html = "<html><body><h1>Hello World</h1><p>This is HTML para PDF conversion.</p></body></html>";
pdf.CreatePage(html);
pdf.Save("output.pdf");
}
Console.WriteLine("PDF created successfully");
}
}
Imports BitMiracle.Docotic.Pdf
Imports System
Class Program
Shared Sub Main()
Using pdf As New PdfDocument()
Dim html As String = "<html><body><h1>Hello World</h1><p>This is HTML para PDF conversion.</p></body></html>"
pdf.CreatePage(html)
pdf.Save("output.pdf")
End Using
Console.WriteLine("PDF created successfully")
End Sub
End Class
Implementação do IronPDF :
// NuGet: Install-Package IronPdf
using IronPdf;
using System;
class Program
{
static void Main()
{
var renderer = new ChromePdfRenderer();
string html = "<html><body><h1>Hello World</h1><p>This is HTML para PDF conversion.</p></body></html>";
var pdf = renderer.RenderHtmlAsPdf(html);
pdf.SaveAs("output.pdf");
Console.WriteLine("PDF created successfully");
}
}
// NuGet: Install-Package IronPdf
using IronPdf;
using System;
class Program
{
static void Main()
{
var renderer = new ChromePdfRenderer();
string html = "<html><body><h1>Hello World</h1><p>This is HTML para PDF conversion.</p></body></html>";
var pdf = renderer.RenderHtmlAsPdf(html);
pdf.SaveAs("output.pdf");
Console.WriteLine("PDF created successfully");
}
}
Imports IronPdf
Imports System
Class Program
Shared Sub Main()
Dim renderer = New ChromePdfRenderer()
Dim html As String = "<html><body><h1>Hello World</h1><p>This is HTML para PDF conversion.</p></body></html>"
Dim pdf = renderer.RenderHtmlAsPdf(html)
pdf.SaveAs("output.pdf")
Console.WriteLine("PDF created successfully")
End Sub
End Class
IronPDF elimina a necessidade da declaração using e fornece uma classe ChromePdfRenderer dedicada que indica claramente sua capacidade de renderização baseada no Chromium. Para mais opções de conversão de HTML, consulte a documentação de HTML para PDF .
Unir vários PDFs
Implementação do BitMiracle Docotic PDF:
// NuGet: Install-Package Docotic.Pdf
using BitMiracle.Docotic.Pdf;
using System;
class Program
{
static void Main()
{
using (var pdf1 = new PdfDocument("document1.pdf"))
using (var pdf2 = new PdfDocument("document2.pdf"))
{
pdf1.Append(pdf2);
pdf1.Save("merged.pdf");
}
Console.WriteLine("PDFs merged successfully");
}
}
// NuGet: Install-Package Docotic.Pdf
using BitMiracle.Docotic.Pdf;
using System;
class Program
{
static void Main()
{
using (var pdf1 = new PdfDocument("document1.pdf"))
using (var pdf2 = new PdfDocument("document2.pdf"))
{
pdf1.Append(pdf2);
pdf1.Save("merged.pdf");
}
Console.WriteLine("PDFs merged successfully");
}
}
Imports BitMiracle.Docotic.Pdf
Imports System
Class Program
Shared Sub Main()
Using pdf1 As New PdfDocument("document1.pdf"), pdf2 As New PdfDocument("document2.pdf")
pdf1.Append(pdf2)
pdf1.Save("merged.pdf")
End Using
Console.WriteLine("PDFs merged successfully")
End Sub
End Class
Implementação do IronPDF :
// NuGet: Install-Package IronPdf
using IronPdf;
using System;
using System.Collections.Generic;
class Program
{
static void Main()
{
var pdf1 = PdfDocument.FromFile("document1.pdf");
var pdf2 = PdfDocument.FromFile("document2.pdf");
var merged = PdfDocument.Merge(new List<PdfDocument> { pdf1, pdf2 });
merged.SaveAs("merged.pdf");
Console.WriteLine("PDFs merged successfully");
}
}
// NuGet: Install-Package IronPdf
using IronPdf;
using System;
using System.Collections.Generic;
class Program
{
static void Main()
{
var pdf1 = PdfDocument.FromFile("document1.pdf");
var pdf2 = PdfDocument.FromFile("document2.pdf");
var merged = PdfDocument.Merge(new List<PdfDocument> { pdf1, pdf2 });
merged.SaveAs("merged.pdf");
Console.WriteLine("PDFs merged successfully");
}
}
Imports IronPdf
Imports System
Imports System.Collections.Generic
Module Program
Sub Main()
Dim pdf1 As PdfDocument = PdfDocument.FromFile("document1.pdf")
Dim pdf2 As PdfDocument = PdfDocument.FromFile("document2.pdf")
Dim merged As PdfDocument = PdfDocument.Merge(New List(Of PdfDocument) From {pdf1, pdf2})
merged.SaveAs("merged.pdf")
Console.WriteLine("PDFs merged successfully")
End Sub
End Module
O método estático Merge do IronPDF aceita vários documentos diretamente, fornecendo uma API mais limpa do que o padrão iterativo Append. Para mais opções, consulte a documentação sobre mesclagem de PDFs .
Extração de texto
Implementação do BitMiracle Docotic PDF:
// NuGet: Install-Package Docotic.Pdf
using BitMiracle.Docotic.Pdf;
using System;
class Program
{
static void Main()
{
using (var pdf = new PdfDocument("document.pdf"))
{
string allText = "";
foreach (var page in pdf.Pages)
{
allText += page.GetText();
}
Console.WriteLine("Extracted text:");
Console.WriteLine(allText);
}
}
}
// NuGet: Install-Package Docotic.Pdf
using BitMiracle.Docotic.Pdf;
using System;
class Program
{
static void Main()
{
using (var pdf = new PdfDocument("document.pdf"))
{
string allText = "";
foreach (var page in pdf.Pages)
{
allText += page.GetText();
}
Console.WriteLine("Extracted text:");
Console.WriteLine(allText);
}
}
}
Imports BitMiracle.Docotic.Pdf
Imports System
Module Program
Sub Main()
Using pdf As New PdfDocument("document.pdf")
Dim allText As String = ""
For Each page In pdf.Pages
allText &= page.GetText()
Next
Console.WriteLine("Extracted text:")
Console.WriteLine(allText)
End Using
End Sub
End Module
Implementação do IronPDF :
// NuGet: Install-Package IronPdf
using IronPdf;
using System;
class Program
{
static void Main()
{
var pdf = PdfDocument.FromFile("document.pdf");
string allText = pdf.ExtractAllText();
Console.WriteLine("Extracted text:");
Console.WriteLine(allText);
}
}
// NuGet: Install-Package IronPdf
using IronPdf;
using System;
class Program
{
static void Main()
{
var pdf = PdfDocument.FromFile("document.pdf");
string allText = pdf.ExtractAllText();
Console.WriteLine("Extracted text:");
Console.WriteLine(allText);
}
}
Imports IronPdf
Imports System
Class Program
Shared Sub Main()
Dim pdf = PdfDocument.FromFile("document.pdf")
Dim allText As String = pdf.ExtractAllText()
Console.WriteLine("Extracted text:")
Console.WriteLine(allText)
End Sub
End Class
O IronPDF reduz a extração de texto de um loop de várias linhas a uma única chamada de método. Para mais opções de extração, consulte a documentação de extração de texto .
Proteção por senha e criptografia
Implementação do IronPDF :
using IronPdf;
var renderer = new ChromePdfRenderer();
var pdf = renderer.RenderHtmlAsPdf("<h1>Confidential Document</h1>");
// Set security
pdf.SecuritySettings.UserPassword = "userPassword";
pdf.SecuritySettings.OwnerPassword = "ownerPassword";
pdf.SecuritySettings.AllowUserPrinting = PdfPrintSecurity.FullPrintRights;
pdf.SecuritySettings.AllowUserCopyPasteContent = false;
pdf.SaveAs("protected.pdf");
using IronPdf;
var renderer = new ChromePdfRenderer();
var pdf = renderer.RenderHtmlAsPdf("<h1>Confidential Document</h1>");
// Set security
pdf.SecuritySettings.UserPassword = "userPassword";
pdf.SecuritySettings.OwnerPassword = "ownerPassword";
pdf.SecuritySettings.AllowUserPrinting = PdfPrintSecurity.FullPrintRights;
pdf.SecuritySettings.AllowUserCopyPasteContent = false;
pdf.SaveAs("protected.pdf");
Imports IronPdf
Dim renderer As New ChromePdfRenderer()
Dim pdf = renderer.RenderHtmlAsPdf("<h1>Confidential Document</h1>")
' Set security
pdf.SecuritySettings.UserPassword = "userPassword"
pdf.SecuritySettings.OwnerPassword = "ownerPassword"
pdf.SecuritySettings.AllowUserPrinting = PdfPrintSecurity.FullPrintRights
pdf.SecuritySettings.AllowUserCopyPasteContent = False
pdf.SaveAs("protected.pdf")
Para obter opções de segurança abrangentes, consulte a documentação de criptografia .
Cabeçalhos e rodapés
Implementação do IronPDF :
using IronPdf;
var renderer = new ChromePdfRenderer();
renderer.RenderingOptions.HtmlHeader = new HtmlHeaderFooter
{
HtmlFragment = @"
<div style='text-align:center; font-size:12px;'>
Company Header - Confidential
</div>",
DrawDividerLine = true,
MaxHeight = 30
};
renderer.RenderingOptions.HtmlFooter = new HtmlHeaderFooter
{
HtmlFragment = @"
<div style='text-align:center; font-size:10px;'>
Page {page} of {total-pages}
</div>",
DrawDividerLine = true,
MaxHeight = 25
};
var pdf = renderer.RenderHtmlAsPdf("<h1>Document Content</h1>");
pdf.SaveAs("with_headers.pdf");
using IronPdf;
var renderer = new ChromePdfRenderer();
renderer.RenderingOptions.HtmlHeader = new HtmlHeaderFooter
{
HtmlFragment = @"
<div style='text-align:center; font-size:12px;'>
Company Header - Confidential
</div>",
DrawDividerLine = true,
MaxHeight = 30
};
renderer.RenderingOptions.HtmlFooter = new HtmlHeaderFooter
{
HtmlFragment = @"
<div style='text-align:center; font-size:10px;'>
Page {page} of {total-pages}
</div>",
DrawDividerLine = true,
MaxHeight = 25
};
var pdf = renderer.RenderHtmlAsPdf("<h1>Document Content</h1>");
pdf.SaveAs("with_headers.pdf");
Imports IronPdf
Dim renderer As New ChromePdfRenderer()
renderer.RenderingOptions.HtmlHeader = New HtmlHeaderFooter With {
.HtmlFragment = "
<div style='text-align:center; font-size:12px;'>
Company Header - Confidential
</div>",
.DrawDividerLine = True,
.MaxHeight = 30
}
renderer.RenderingOptions.HtmlFooter = New HtmlHeaderFooter With {
.HtmlFragment = "
<div style='text-align:center; font-size:10px;'>
Page {page} of {total-pages}
</div>",
.DrawDividerLine = True,
.MaxHeight = 25
}
Dim pdf = renderer.RenderHtmlAsPdf("<h1>Document Content</h1>")
pdf.SaveAs("with_headers.pdf")
O IronPDF suporta marcadores de posição como {page} e {total-pages} para numeração dinâmica de páginas. Para mais opções, consulte a documentação sobre cabeçalhos e rodapés .
Notas críticas sobre migração
Mudança de paradigma do Canvas para o HTML
A abordagem de desenho baseada em tela do BitMiracle Docotic PDF precisa ser convertida para HTML com posicionamento CSS:
Padrão PDF do BitMiracle Docotic:
var canvas = pdfPage.Canvas;
canvas.DrawString(50, 50, "Hello, World!");
var canvas = pdfPage.Canvas;
canvas.DrawString(50, 50, "Hello, World!");
Dim canvas = pdfPage.Canvas
canvas.DrawString(50, 50, "Hello, World!")
Padrão IronPDF :
var html = "<div style='position:absolute; left:50px; top:50px;'>Hello, World!</div>";
var pdf = renderer.RenderHtmlAsPdf(html);
var html = "<div style='position:absolute; left:50px; top:50px;'>Hello, World!</div>";
var pdf = renderer.RenderHtmlAsPdf(html);
Dim html As String = "<div style='position:absolute; left:50px; top:50px;'>Hello, World!</div>"
Dim pdf = renderer.RenderHtmlAsPdf(html)
Indexação na mesma página
Ambas as bibliotecas usam indexação baseada em 0 (Pages[0] é a primeira página)—nenhuma alteração é necessária para o código de acesso à página.
Descarte não necessário
O IronPDF não requer instruções using para gerenciamento de memória, simplificando a estrutura do código:
// BitMiracle Docotic PDF - disposal required
using (var pdf = new PdfDocument("input.pdf"))
{
// operations
}
// IronPDF - disposal optional
var pdf = PdfDocument.FromFile("input.pdf");
// operations - no using statement needed
// BitMiracle Docotic PDF - disposal required
using (var pdf = new PdfDocument("input.pdf"))
{
// operations
}
// IronPDF - disposal optional
var pdf = PdfDocument.FromFile("input.pdf");
// operations - no using statement needed
Suporte assíncrono
O complemento HtmlToPdf do BitMiracle Docotic PDF exige padrões assíncronos em todos os lugares. O IronPDF suporta métodos síncronos e assíncronos:
// Synchronous
var pdf = renderer.RenderHtmlAsPdf(html);
// Asynchronous
var pdf = await renderer.RenderHtmlAsPdfAsync(html);
// Synchronous
var pdf = renderer.RenderHtmlAsPdf(html);
// Asynchronous
var pdf = await renderer.RenderHtmlAsPdfAsync(html);
' Synchronous
Dim pdf = renderer.RenderHtmlAsPdf(html)
' Asynchronous
Dim pdf = Await renderer.RenderHtmlAsPdfAsync(html)
Integração com ASP.NET Core
Padrão IronPDF :
[ApiController]
[Route("[controller]")]
public class PdfController : ControllerBase
{
[HttpGet("generate")]
public IActionResult GeneratePdf()
{
var renderer = new ChromePdfRenderer();
var pdf = renderer.RenderHtmlAsPdf("<h1>Report</h1>");
return File(pdf.BinaryData, "application/pdf", "report.pdf");
}
[HttpGet("generate-async")]
public async Task<IActionResult> GeneratePdfAsync()
{
var renderer = new ChromePdfRenderer();
var pdf = await renderer.RenderHtmlAsPdfAsync("<h1>Report</h1>");
return File(pdf.Stream, "application/pdf", "report.pdf");
}
}
[ApiController]
[Route("[controller]")]
public class PdfController : ControllerBase
{
[HttpGet("generate")]
public IActionResult GeneratePdf()
{
var renderer = new ChromePdfRenderer();
var pdf = renderer.RenderHtmlAsPdf("<h1>Report</h1>");
return File(pdf.BinaryData, "application/pdf", "report.pdf");
}
[HttpGet("generate-async")]
public async Task<IActionResult> GeneratePdfAsync()
{
var renderer = new ChromePdfRenderer();
var pdf = await renderer.RenderHtmlAsPdfAsync("<h1>Report</h1>");
return File(pdf.Stream, "application/pdf", "report.pdf");
}
}
Imports Microsoft.AspNetCore.Mvc
<ApiController>
<Route("[controller]")>
Public Class PdfController
Inherits ControllerBase
<HttpGet("generate")>
Public Function GeneratePdf() As IActionResult
Dim renderer = New ChromePdfRenderer()
Dim pdf = renderer.RenderHtmlAsPdf("<h1>Report</h1>")
Return File(pdf.BinaryData, "application/pdf", "report.pdf")
End Function
<HttpGet("generate-async")>
Public Async Function GeneratePdfAsync() As Task(Of IActionResult)
Dim renderer = New ChromePdfRenderer()
Dim pdf = Await renderer.RenderHtmlAsPdfAsync("<h1>Report</h1>")
Return File(pdf.Stream, "application/pdf", "report.pdf")
End Function
End Class
Lista de verificação pós-migração
Após concluir a migração do código, verifique o seguinte:
- Execute todos os testes unitários para verificar se a geração de PDF funciona corretamente.
- Compare a qualidade da saída em PDF (o mecanismo Chromium do IronPDF pode renderizar de forma ligeiramente diferente — geralmente melhor)
- Verificar a precisão da extração de texto
- Testar a funcionalidade de preenchimento de formulários
- Validar assinaturas digitais, se aplicável.
- Teste de desempenho de operações em lote
- Testar em todos os ambientes-alvo
- Atualizar pipelines de CI/CD
- Remover arquivos de licença Docotic.Pdf
Preparando sua infraestrutura de PDF para o futuro
Com o .NET 10 no horizonte e o C# 14 introduzindo novos recursos de linguagem, escolher uma biblioteca PDF com uma arquitetura unificada simplifica o gerenciamento de dependências e garante a disponibilidade consistente de recursos. A abordagem de pacote único do IronPDF significa que você não precisará acompanhar a compatibilidade de várias versões de complementos à medida que os projetos se estendem até 2025 e 2026.
Recursos adicionais
- Documentação do IronPDF
- Tutoriais de HTML para PDF
- Referência da API
- Pacote NuGet
- Opções de licenciamento
A migração do BitMiracle Docotic PDF para o IronPDF elimina a complexidade de gerenciar vários pacotes complementares, ao mesmo tempo que oferece os mesmos recursos de renderização HTML baseados no Chromium. A transição do desenho baseado em canvas para o posicionamento em HTML/CSS aproveita as habilidades de desenvolvimento web que a maioria dos desenvolvedores .NET já possui, resultando em um código de geração de PDF mais fácil de manter.

