Como migrar do BitMiracle Docotic PDF para o IronPDF em C#
OBitMiracle 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 doBitMiracle Docotic PDFpara 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 doBitMiracle Docotic PDFpara o IronPDF?
Embora oBitMiracle Docotic PDFofereç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
OBitMiracle Docotic PDFutiliza 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
BitMiracle Docotic PDF usa desenho baseado em canvas 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 | Padrão IDisposable |
Não é necessário | Gestão de recursos simplificada |
Processo de migração passo a passo
Passo 1: Atualizar pacotes NuGet
Remova os pacotesBitMiracle Docotic PDFe 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 doBitMiracle Docotic PDFpelo IronPDF:
// Remove these
using BitMiracle.Docotic.Pdf;
using BitMiracle.Docotic.Pdf.Layout;
// HtmlConverter from the BitMiracle.Docotic.Pdf.HtmlToPdf NuGet package
// also lives in the BitMiracle.Docotic.Pdf namespace (no extra using needed).
// Add this
using IronPdf;
// Remove these
using BitMiracle.Docotic.Pdf;
using BitMiracle.Docotic.Pdf.Layout;
// HtmlConverter from the BitMiracle.Docotic.Pdf.HtmlToPdf NuGet package
// also lives in the BitMiracle.Docotic.Pdf namespace (no extra using needed).
// 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 | await converter.CreatePdfFromStringAsync(html) |
renderer.RenderHtmlAsPdf(html) |
| Arquivo HTML para PDF | await converter.CreatePdfAsync(filePath) |
renderer.RenderHtmlFileAsPdf(path) |
| URL para PDF | await converter.CreatePdfAsync(new Uri(url)) |
renderer.RenderUrlAsPdf(url) |
| Definir tamanho da página | options.Page.SetSize(PdfPaperSize.A4) |
renderer.RenderingOptions.PaperSize = PdfPaperSize.A4 |
| Definir margens | options.Page.MarginTop = 20 (etc.) |
renderer.RenderingOptions.MarginTop = 20 |
Operações de Fusão e Divisão
| Tarefa | BitMiracle Docotic PDF | IronPDF |
|---|---|---|
| Mesclar documentos | doc1.Append("file.pdf") (path/Stream/bytes) |
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 BitMiracle.Docotic.Pdf
// NuGet: Install-Package BitMiracle.Docotic.Pdf.HtmlToPdf (separate add-on required)
using BitMiracle.Docotic.Pdf;
using System;
using System.Threading.Tasks;
class Program
{
static async Tarefa Main()
{
// HtmlConverter is async-only and downloads Chromium on first use
using var converter = await HtmlConverter.CreateAsync();
string html = "<html><body><h1>Hello World</h1><p>This is HTML para PDF conversion.</p></body></html>";
using var pdf = await converter.CreatePdfFromStringAsync(html);
pdf.Save("output.pdf");
Console.WriteLine("PDF created successfully");
}
}
// NuGet: Install-Package BitMiracle.Docotic.Pdf
// NuGet: Install-Package BitMiracle.Docotic.Pdf.HtmlToPdf (separate add-on required)
using BitMiracle.Docotic.Pdf;
using System;
using System.Threading.Tasks;
class Program
{
static async Tarefa Main()
{
// HtmlConverter is async-only and downloads Chromium on first use
using var converter = await HtmlConverter.CreateAsync();
string html = "<html><body><h1>Hello World</h1><p>This is HTML para PDF conversion.</p></body></html>";
using var pdf = await converter.CreatePdfFromStringAsync(html);
pdf.Save("output.pdf");
Console.WriteLine("PDF created successfully");
}
}
Imports BitMiracle.Docotic.Pdf
Imports System
Imports System.Threading.Tasks
Module Program
Async Function Main() As Task
' HtmlConverter is async-only and downloads Chromium on first use
Using converter = Await HtmlConverter.CreateAsync()
Dim html As String = "<html><body><h1>Hello World</h1><p>This is HTML para PDF conversion.</p></body></html>"
Using pdf = Await converter.CreatePdfFromStringAsync(html)
pdf.Save("output.pdf")
End Using
Console.WriteLine("PDF created successfully")
End Using
End Function
End Module
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 dedicada ChromePdfRenderer que indica claramente sua capacidade de renderização baseada em 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 BitMiracle.Docotic.Pdf
using BitMiracle.Docotic.Pdf;
using System;
class Program
{
static void Main()
{
using (var pdf1 = new PdfDocument("document1.pdf"))
{
// PdfDocument.Append accepts a file path, Stream, or byte[] —
// not another PdfDocument instance.
pdf1.Append("document2.pdf");
pdf1.Save("merged.pdf");
}
Console.WriteLine("PDFs merged successfully");
}
}
// NuGet: Install-Package BitMiracle.Docotic.Pdf
using BitMiracle.Docotic.Pdf;
using System;
class Program
{
static void Main()
{
using (var pdf1 = new PdfDocument("document1.pdf"))
{
// PdfDocument.Append accepts a file path, Stream, or byte[] —
// not another PdfDocument instance.
pdf1.Append("document2.pdf");
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")
' PdfDocument.Append accepts a file path, Stream, or byte[] —
' not another PdfDocument instance.
pdf1.Append("document2.pdf")
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 múltiplos documentos diretamente, proporcionando 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 BitMiracle.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 BitMiracle.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
Class Program
Shared 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 Class
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")
IronPDF suporta tokens de placeholders como {page} e {total-pages} para numeração de páginas dinâmica. 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 doBitMiracle Docotic PDFprecisa 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)—sem necessidade de mudanças no código de acesso à página.
Descarte não necessário
IronPDF não requer declaraçõ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
Imports BitMiracle.Docotic.Pdf
' BitMiracle Docotic PDF - disposal required
Using pdf As New PdfDocument("input.pdf")
' operations
End Using
' IronPDF - disposal optional
Dim pdf = PdfDocument.FromFile("input.pdf")
' operations - no using statement needed
Suporte assíncrono
O complemento HtmlToPdf doBitMiracle Docotic PDFexige 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.BinaryData, "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.BinaryData, "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.BinaryData, "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
Recursos adicionais
- Documentação do IronPDF
- Tutoriais de HTML para PDF
- Referência da API
- Pacote NuGet
- Opções de licenciamento
A migração doBitMiracle Docotic PDFpara 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.

