Ir para o conteúdo do rodapé
GUIAS DE MIGRAçãO

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" .
SHELL

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
SHELL

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
$vbLabelText   $csharpLabel

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"
$vbLabelText   $csharpLabel

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
$vbLabelText   $csharpLabel

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
$vbLabelText   $csharpLabel

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
$vbLabelText   $csharpLabel

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
$vbLabelText   $csharpLabel

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
$vbLabelText   $csharpLabel

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
$vbLabelText   $csharpLabel

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")
$vbLabelText   $csharpLabel

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")
$vbLabelText   $csharpLabel

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!")
$vbLabelText   $csharpLabel

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)
$vbLabelText   $csharpLabel

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
$vbLabelText   $csharpLabel

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)
$vbLabelText   $csharpLabel

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
$vbLabelText   $csharpLabel

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


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.

Curtis Chau
Redator Técnico

Curtis Chau é bacharel em Ciência da Computação (Universidade Carleton) e se especializa em desenvolvimento front-end, com experiência em Node.js, TypeScript, JavaScript e React. Apaixonado por criar interfaces de usuário intuitivas e esteticamente agradáveis, Curtis gosta de trabalhar com frameworks modernos e criar manuais ...

Leia mais

Equipe de suporte de ferro

Estamos online 24 horas por dia, 5 dias por semana.
Bater papo
E-mail
Liga para mim