Cómo migrar de BitMiracle Docotic PDF a IronPDF en C#
BitMiracle Docotic PDF es una reputada biblioteca PDF .NET conocida por su arquitectura de código 100% gestionado y sus amplias capacidades de manipulación programática de PDF. Sin embargo, su estructura modular de complementos, que requiere paquetes independientes para la conversión de HTML a PDF, las funciones de diseño y otras funcionalidades, añade complejidad a la gestión de proyectos y la concesión de licencias. Esta completa guía proporciona una ruta de migración paso a paso de BitMiracle Docotic PDFa IronPDF, una biblioteca PDF .NET unificada con renderizado HTML basado en Chromium integrado y todas las funciones incluidas en un único paquete NuGet.
¿Por qué migrar de BitMiracle Docotic PDFa IronPDF?
Aunque BitMiracle Docotic PDFofrece sólidas funciones de manipulación de PDF, varios factores llevan a los equipos de desarrollo a buscar alternativas con una arquitectura más racionalizada.
Comparación de arquitecturas de paquetes
BitMiracle Docotic PDF utiliza un enfoque de complemento modular que requiere varios paquetes para una funcionalidad completa:
| Aspecto | BitMiracle Docotic PDF | IronPDF |
|---|---|---|
| HTML a PDF | Requiere un complemento independiente (HtmlToPdf) | Función principal incorporada |
| Estructura del paquete | Core + múltiples complementos | Paquete NuGet único |
| Modelo de licencia | Licencia por adición | Todas las funciones incluidas |
| Complejidad de la API | Espacios de nombres separados por complemento | API unificada |
| Motor HTML | Chromium (mediante complemento) | Chromium (integrado) |
| Tamaño de la comunidad | Más pequeño | Más recursos |
| Documentación | Referencias técnicas | Extensos tutoriales |
Paridad de características
Ambas bibliotecas son compatibles con una amplia funcionalidad PDF:
| Característica | BitMiracle Docotic PDF | IronPDF |
|---|---|---|
| Crear PDF desde cero | ✅ | ✅ |
| HTML a PDF | ✅(complemento necesario) | ✅(integrado) |
| URL a PDF | ✅(complemento necesario) | ✅(integrado) |
| Manipulación de PDF | ✅ | ✅ |
| Extracción de texto | ✅ | ✅ |
| Fusionar/Dividir | ✅ | ✅ |
| Firmas digitales | ✅ | ✅ |
| Cifrado | ✅ | ✅ |
| Relleno de formularios | ✅ | ✅ |
| Conformidad con PDF/A | ✅ | ✅ |
Diferencias clave en el enfoque
BitMiracle Docotic PDF utiliza dibujo basado en lienzo con posicionamiento de coordenadas (canvas.DrawString(x, y, text)), mientras queIronPDFaprovecha HTML/CSS para el diseño y el posicionamiento. Esto representa un cambio de paradigma que simplifica la creación de contenidos para desarrolladores familiarizados con las tecnologías web.
Preparación de la migración
Prerrequisitos
Asegúrese de que su entorno cumple estos requisitos:
- .NET Framework 4.6.2+ o .NET Core 3.1 / .NET 5-9
- Visual Studio 2019+ o VS Code con extensión de C#
- Acceso al gestor de paquetes NuGet
- Clave de licencia deIronPDF(prueba gratuita disponible en ironpdf.com)
Auditar el uso de BitMiracle Docotic PDF
Ejecute estos comandos en su directorio de soluciones para identificar todas las referencias 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" .
Cambios importantes que hay que anticipar
| Cambiar | BitMiracle Docotic PDF | IronPDF | Impacto |
|---|---|---|---|
| Representación HTML | Requiere el complemento HtmlToPdf | Incorporado en | Eliminar paquete adicional |
| Indización de páginas | Basado en 0 (Pages[0]) |
Basado en 0 (Pages[0]) |
No se necesitan cambios |
| Sistema de coordenadas | Origen inferior izquierdo | Flujo HTML/CSS | Utilizar CSS para el posicionamiento |
| Dibujo en lienzo | PdfCanvas.DrawText() |
Marcado HTML | Cambio de paradigma |
| Extracción de texto | page.GetText() |
pdf.ExtractAllText() |
Cambio de nombre del método |
| Carga de documentos | new PdfDocument(path) |
PdfDocument.FromFile(path) |
Constructor → método estático |
| Ahorro | document.Save(path) |
pdf.SaveAs(path) |
Cambio de nombre del método |
| Disposición | IDisposable patrón |
No es necesario | Gestión de recursos más sencilla |
Proceso de migración paso a paso
Paso 1: Actualizar paquetes NuGet
Elimine los paquetes BitMiracle Docotic PDFe instale 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
Paso 2: Actualizar referencias de espacios de nombres
Sustituya los espacios de nombres PDF de BitMiracle Docotic por 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
Paso 3: Configurar la licencia
// 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"
Referencia completa de migración de API
Operaciones de documentos
| Tarea | BitMiracle Docotic PDF | IronPDF |
|---|---|---|
| Crear documento vacío | new PdfDocument() |
new PdfDocument() |
| Cargar desde archivo | new PdfDocument(path) |
PdfDocument.FromFile(path) |
| Cargar desde stream | PdfDocument.Load(stream) |
PdfDocument.FromStream(stream) |
| Cargar desde bytes | PdfDocument.Load(bytes) |
PdfDocument.FromBinaryData(bytes) |
| Guardar en archivo | document.Save(path) |
pdf.SaveAs(path) |
| Obtener recuento de páginas | document.PageCount |
pdf.PageCount |
| Cerrar/Disponer | document.Dispose() |
No es necesario |
Conversión de HTML a PDF
| Tarea | BitMiracle Docotic PDF(complemento HtmlToPdf) | IronPDF |
|---|---|---|
| Cadena HTML a PDF | HtmlConverter.Create(html).ToPdf() |
renderer.RenderHtmlAsPdf(html) |
| Archivo HTML a PDF | HtmlConverter.Create(new Uri(filePath)).ToPdf() |
renderer.RenderHtmlFileAsPdf(path) |
| URL a PDF | HtmlConverter.Create(new Uri(url)).ToPdf() |
renderer.RenderUrlAsPdf(url) |
| Establecer tamaño de página | options.PageSize = PageSize.A4 |
renderer.RenderingOptions.PaperSize = PdfPaperSize.A4 |
| Establecer márgenes | options.PageMargins = new Margins(20) |
renderer.RenderingOptions.MarginTop = 20 |
Operaciones de fusión y división
| Tarea | BitMiracle Docotic PDF | IronPDF |
|---|---|---|
| Fusionar documentos | doc1.Append(doc2) |
PdfDocument.Merge(pdf1, pdf2) |
| Documento dividido | document.CopyPage(index) al nuevo documento |
pdf.CopyPages(start, end) |
Ejemplos de migración de código
Conversión de HTML a PDF
La operación más común demuestra la importante simplificación que proporciona IronPDF.
Implementación de 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 a PDFconversion.</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 a PDFconversion.</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 a PDFconversion.</p></body></html>"
pdf.CreatePage(html)
pdf.Save("output.pdf")
End Using
Console.WriteLine("PDF created successfully")
End Sub
End Class
Implementación de 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 a PDFconversion.</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 a PDFconversion.</p></body></html>";
var pdf = renderer.RenderHtmlAsPdf(html);
pdf.SaveAs("output.pdf");
Console.WriteLine("PDF created successfully");
}
}
Imports IronPdf
Imports System
Module Program
Sub Main()
Dim renderer As New ChromePdfRenderer()
Dim html As String = "<html><body><h1>Hello World</h1><p>This is HTML a PDFconversion.</p></body></html>"
Dim pdf = renderer.RenderHtmlAsPdf(html)
pdf.SaveAs("output.pdf")
Console.WriteLine("PDF created successfully")
End Sub
End Module
IronPDF elimina el requisito de declaración using y proporciona una clase ChromePdfRenderer dedicada que indica claramente su capacidad de representación basada en Chromium. Para más opciones de conversión de HTML, consulte la documentación HTML a PDF.
Fusión de varios PDF
Implementación de 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
Implementación de 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
El método estático Merge deIronPDFacepta múltiples documentos directamente, lo que proporciona una API más limpia que el patrón iterativo Append. Para obtener más opciones, consulte la documentación de fusión de PDF .
Extracción de texto
Implementación de 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
Implementación de 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
IronPDF reduce la extracción de texto de un bucle de varias líneas a una única llamada a un método. Para obtener más opciones de extracción, consulte la documentación de extracción de texto .
Protección y cifrado de contraseñas
Implementación de 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 conocer opciones de seguridad integrales, consulte la documentación de cifrado .
Cabeceras y pies de página
Implementación de 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 admite tokens de marcador de posición como {page} y {total-pages} para la numeración de páginas dinámica. Para más opciones, consulte la documentación sobre encabezados y pies de página.
Notas de migración críticas
Cambio de paradigma de Canvas a HTML
El enfoque de dibujo basado en lienzo de BitMiracle Docotic PDFdebe convertirse a HTML con posicionamiento CSS:
Patrón PDF de 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!")
Patrón 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)
Indización de la misma página
Ambas bibliotecas utilizan indexación basada en 0 (Pages[0] es la primera página); no se necesitan cambios en el código de acceso a la página.
Disposición no requerida
IronPDF no requiere declaraciones using para la gestión de memoria, lo que simplifica la estructura del 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
Using pdf As New PdfDocument("input.pdf")
' operations
End Using
Dim pdf = PdfDocument.FromFile("input.pdf")
' operations - no using statement needed
Soporte Async
El complemento HtmlToPdf de BitMiracle Docotic PDFrequiere patrones asíncronos en todas partes.IronPDFadmite métodos síncronos y así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)
Integración con .NET Core
Patrón 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 comprobación posterior a la migración
Después de completar la migración del código, verifique lo siguiente:
- Ejecute todas las pruebas unitarias para verificar que la generación de PDF funcione correctamente
- Comparar la calidad de salida del PDF (el motor Chromium deIronPDFpuede renderizar de forma ligeramente diferente, generalmente mejor)
- Verificar la precisión de la extracción de texto
- Pruebe la funcionalidad de llenado de formularios
- Validar firmas digitales si corresponde
- Operaciones por lotes de pruebas de rendimiento
- Prueba en todos los entornos de destino
- Actualizar los pipelines de CI/CD
- Eliminar archivos de licencia Docotic.Pdf
Proteja su infraestructura PDF
Con .NET 10 en el horizonte y C# 14 introduciendo nuevas características del lenguaje, elegir una biblioteca PDF con una arquitectura unificada simplifica la gestión de dependencias y garantiza la disponibilidad constante de las características. El enfoque de paquete único deIronPDFsignifica que no necesitará realizar un seguimiento de la compatibilidad de múltiples versiones de complementos a medida que los proyectos se extiendan hasta 2025 y 2026.
Recursos adicionales
La migración de BitMiracle Docotic PDFaIronPDFelimina la complejidad de gestionar varios paquetes complementarios al tiempo que proporciona las mismas capacidades de renderizado HTML basadas en Chromium. La transición del dibujo basado en lienzos al posicionamiento HTML/CSS aprovecha las habilidades de desarrollo web que la mayoría de los desarrolladores de .NET ya poseen, lo que da como resultado un código de generación de PDF más fácil de mantener.

