Saltar al pie de página
GUíAS DE MIGRACIóN

Cómo migrar de PDFBolt a IronPDF en C#

La migración de PDFBoltaIronPDFtraslada su flujo de trabajo PDF .NET de un servicio SaaS sólo en la nube con procesamiento externo de documentos a una biblioteca autoalojada con total privacidad de datos y generación local ilimitada. Esta guía proporciona una ruta de migración completa, paso a paso, que elimina las dependencias de la red, los límites de uso y la transmisión externa de datos, a la vez que se obtiene acceso a las funciones de manipulación de PDF que PDFBoltno puede proporcionar.

Por qué migrar de PDFBolta IronPDF

El problema de la nube

PDFBolt es una plataforma SaaS en la nube que procesa sus documentos en servidores externos. Aunque resulta práctica para prototipos rápidos, esta arquitectura plantea retos importantes para las aplicaciones de producción:

  1. Procesamiento solo en la nube: cada documento pasa por servidores externos; no hay una opción de alojamiento propio disponible, lo que podría disuadir a las empresas que necesitan más control sobre sus datos y procesos.

  2. Riesgos para la privacidad de los datos: Los documentos sensibles (contratos, registros médicos, datos financieros) deben transmitirse externamente. Las empresas que trabajan con información sensible tendrán preocupaciones legítimas.

  3. Límites de uso: el nivel gratuito está limitado a 100 documentos por mes, lo que podría no ser suficiente para empresas más grandes. Los precios de pago por documento se acumulan rápidamente para las cargas de trabajo de producción.

  4. Dependencia de la red: las interrupciones de Internet o el tiempo de inactividad de PDFBoltsignifican que la generación de PDF se detiene por completo.

  5. Latencia: el viaje de ida y vuelta de la red agrega segundos a cada conversión en comparación con el procesamiento local.

  6. Problemas de cumplimiento: las auditorías GDPR, HIPAA y SOC2 se complican por el procesamiento externo de documentos.

  7. Seguridad de la clave API: las claves API filtradas pueden dar lugar a un uso no autorizado facturado a su cuenta.

  8. Bloqueo del proveedor: su aplicación falla si PDFBoltcambia los términos o se cierra.

Comparación entre PDFBolte IronPDF

ConsultePDFBoltIronPDF
Ubicación de los datosServidores externosSólo sus servidores
Límites de uso100 gratis, luego por documentoIlimitado
Se requiere InternetSí, siempreNo
LatenciaRed de ida y vueltaMilisegundos
CumplimientoComplejo (procesamiento externo)Simple (procesamiento local)
Modelo de costesPor documentoUna sola vez o anual
Funcionamiento sin conexiónImposibleTotalmente compatible
Riesgos clave de la APIFiltrado = facturadoClave de licencia, sin riesgo de facturación

Para los equipos que planean la adopción de .NET 10 y C# 14 hasta 2025 y 2026,IronPDFproporciona una base autoalojada que garantiza la total privacidad de los datos y elimina la dependencia de servicios externos en la nube.


Antes de empezar

Prerrequisitos

  1. Entorno .NET: .NET Framework 4.6.2+ o .NET Core 3.1+ / .NET 5/6/7/8/9+
  2. Acceso a NuGet: Capacidad para instalar paquetes NuGet
  3. Licencia de IronPDF: Obtenga su clave de licencia en ironpdf.com

Cambios en el paquete NuGet

# Remove PDFBolt
dotnet remove package PDFBolt

# Install IronPDF
dotnet add package IronPdf
# Remove PDFBolt
dotnet remove package PDFBolt

# Install IronPDF
dotnet add package IronPdf
SHELL

Configuración de licencias

// Add at application startup (Program.cs or Startup.cs)
IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY";
// Add at application startup (Program.cs or Startup.cs)
IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY";
$vbLabelText   $csharpLabel

Identificar el uso de PDFBolt

# Find all PDFBoltreferences
grep -r "PDFBolt\|HtmlToPdfConverter\|ConvertHtmlString\|ConvertUrl" --include="*.cs" .

# Find API key references
grep -r "PDFBOLT\|ApiKey" --include="*.cs" --include="*.json" --include="*.config" .
# Find all PDFBoltreferences
grep -r "PDFBolt\|HtmlToPdfConverter\|ConvertHtmlString\|ConvertUrl" --include="*.cs" .

# Find API key references
grep -r "PDFBOLT\|ApiKey" --include="*.cs" --include="*.json" --include="*.config" .
SHELL

Referencia completa de la API

Asignaciones de clases principales

PDFBoltIronPDFNotas
nuevo HtmlToPdfConverter()<código>new ChromePdfRenderer()</códigoRenderizador principal
<código>TamañoDePágina</código<código>TamañoDelPapel</códigoEnum para tamaños de papel
(devuelve byte[])_Documento PDFDocumento objeto enriquecido

Métodos de conversión

PDFBoltIronPDFNotas
converter.ConvertHtmlString(html)renderer.RenderHtmlAsPdf(html)Devuelve PdfDocument
<código>converter.ConvertUrl(url)</código<código>renderer.RenderUrlAsPdf(url)</códigoDevuelve PdfDocument

Métodos de salida

PDFBoltIronPDFNotas
<código>File.WriteAllBytes(path, pdf)</código<código>pdf.SaveAs(ruta)</códigoMétodo de guardado directo
(el pdf es byte[])(pdf is byte[])<código>pdf.BinaryData</códigoObtener matriz de bytes
(flujo manual)_<código>pdf.Stream</códigoPropiedad

Configuración de páginas

PDFBoltIronPDFNotas
converter.PageSize = PageSize.A4renderer.RenderingOptions.PaperSize = PdfPaperSize.A4Enumeración del tamaño del papel
converter.MarginTop = 20renderer.RenderingOptions.MarginTop = 20En milímetros
converter.MarginBottom = 20renderer.RenderingOptions.MarginBottom = 20En milímetros
converter.MarginLeft = 15renderer.RenderingOptions.MarginLeft = 15En milímetros
converter.MarginRight = 15<código>renderer.RenderingOptions.MarginRight = 15</códigoEn milímetros

Mapas de marcador de posición de encabezado/pie

PDFBoltIronPDFNotas
<código>{númeroDePágina}</código{page}Página actual
{totalPáginas}{total de páginas}Total de páginas
{fecha}{fecha}En
{title}{html-title}Título del documento

Ejemplos de migración de código

Ejemplo 1: HTML básico a PDF

Antes (PDFBolt):

// NuGet: Install-Package PDFBolt
using PDFBolt;
using System.IO;

class Program
{
    static void Main()
    {
        var converter = new HtmlToPdfConverter();
        var html = "<html><body><h1>Hello World</h1></body></html>";
        var pdf = converter.ConvertHtmlString(html);
        File.WriteAllBytes("output.pdf", pdf);
    }
}
// NuGet: Install-Package PDFBolt
using PDFBolt;
using System.IO;

class Program
{
    static void Main()
    {
        var converter = new HtmlToPdfConverter();
        var html = "<html><body><h1>Hello World</h1></body></html>";
        var pdf = converter.ConvertHtmlString(html);
        File.WriteAllBytes("output.pdf", pdf);
    }
}
$vbLabelText   $csharpLabel

Después (IronPDF):

// NuGet: Install-Package IronPdf
using IronPdf;
using System.IO;

class Program
{
    static void Main()
    {
        var renderer = new ChromePdfRenderer();
        var html = "<html><body><h1>Hello World</h1></body></html>";
        var pdf = renderer.RenderHtmlAsPdf(html);
        pdf.SaveAs("output.pdf");
    }
}
// NuGet: Install-Package IronPdf
using IronPdf;
using System.IO;

class Program
{
    static void Main()
    {
        var renderer = new ChromePdfRenderer();
        var html = "<html><body><h1>Hello World</h1></body></html>";
        var pdf = renderer.RenderHtmlAsPdf(html);
        pdf.SaveAs("output.pdf");
    }
}
$vbLabelText   $csharpLabel

La diferencia fundamental en este caso es el tipo de retorno y el patrón de guardado. PDFBolt's HtmlToPdfConverter.ConvertHtmlString() devuelve un byte[] que debe escribir manualmente en el disco mediante File.WriteAllBytes(). Esto requiere importar System.IO y manejar la operación de archivo uno mismo.

IronPDF's ChromePdfRenderer.RenderHtmlAsPdf() devuelve un objeto Documento PDFcon un método SaveAs() incorporado. Este enfoque orientado a objetos ofrece ventajas adicionales: se puede manipular el PDF (añadir marcas de agua, fusionar documentos, añadir seguridad) antes de guardarlo. Si necesita los bytes sin procesar por compatibilidad con el código existente, utilice pdf.BinaryData. Consulte la documentación HTML a PDF para obtener más opciones de conversión.

Ejemplo 2: Conversión de URL a PDF

Antes (PDFBolt):

// NuGet: Install-Package PDFBolt
using PDFBolt;
using System.IO;

class Program
{
    static void Main()
    {
        var converter = new HtmlToPdfConverter();
        var pdf = converter.ConvertUrl("https://www.example.com");
        File.WriteAllBytes("webpage.pdf", pdf);
    }
}
// NuGet: Install-Package PDFBolt
using PDFBolt;
using System.IO;

class Program
{
    static void Main()
    {
        var converter = new HtmlToPdfConverter();
        var pdf = converter.ConvertUrl("https://www.example.com");
        File.WriteAllBytes("webpage.pdf", pdf);
    }
}
$vbLabelText   $csharpLabel

Después (IronPDF):

// NuGet: Install-Package IronPdf
using IronPdf;

class Program
{
    static void Main()
    {
        var renderer = new ChromePdfRenderer();
        var pdf = renderer.RenderUrlAsPdf("https://www.example.com");
        pdf.SaveAs("webpage.pdf");
    }
}
// NuGet: Install-Package IronPdf
using IronPdf;

class Program
{
    static void Main()
    {
        var renderer = new ChromePdfRenderer();
        var pdf = renderer.RenderUrlAsPdf("https://www.example.com");
        pdf.SaveAs("webpage.pdf");
    }
}
$vbLabelText   $csharpLabel

El patrón PDFBoltpara la conversión de URL sigue el mismo enfoque que la conversión HTML: ConvertUrl() devuelve byte[], lo que requiere File.WriteAllBytes() para guardar. Tenga en cuenta que PDFBoltsigue requiriendo un viaje de ida y vuelta a sus servidores, aunque ya se esté obteniendo desde una URL.

El método RenderUrlAsPdf() deIronPDFdevuelve un Documento PDFcon el método incorporado SaveAs(). La ventaja clave aquí es queIronPDFrealiza la obtención de URL y la renderización de PDF localmente, sin que los datos salgan de su infraestructura. Observe que la versiónIronPDFni siquiera necesita utilizar System.IO; para este sencillo caso. Más información sobre Conversión de URL a PDF.

Ejemplo 3: Archivo HTML con configuración de página personalizada

Antes (PDFBolt):

// NuGet: Install-Package PDFBolt
using PDFBolt;
using System.IO;

class Program
{
    static void Main()
    {
        var converter = new HtmlToPdfConverter();
        converter.PageSize = PageSize.A4;
        converter.MarginTop = 20;
        converter.MarginBottom = 20;
        var html = File.ReadAllText("input.html");
        var pdf = converter.ConvertHtmlString(html);
        File.WriteAllBytes("output.pdf", pdf);
    }
}
// NuGet: Install-Package PDFBolt
using PDFBolt;
using System.IO;

class Program
{
    static void Main()
    {
        var converter = new HtmlToPdfConverter();
        converter.PageSize = PageSize.A4;
        converter.MarginTop = 20;
        converter.MarginBottom = 20;
        var html = File.ReadAllText("input.html");
        var pdf = converter.ConvertHtmlString(html);
        File.WriteAllBytes("output.pdf", pdf);
    }
}
$vbLabelText   $csharpLabel

Después (IronPDF):

// NuGet: Install-Package IronPdf
using IronPdf;
using IronPdf.Rendering;
using System.IO;

class Program
{
    static void Main()
    {
        var renderer = new ChromePdfRenderer();
        renderer.RenderingOptions.PaperSize = PdfPaperSize.A4;
        renderer.RenderingOptions.MarginTop = 20;
        renderer.RenderingOptions.MarginBottom = 20;
        var html = File.ReadAllText("input.html");
        var pdf = renderer.RenderHtmlAsPdf(html);
        pdf.SaveAs("output.pdf");
    }
}
// NuGet: Install-Package IronPdf
using IronPdf;
using IronPdf.Rendering;
using System.IO;

class Program
{
    static void Main()
    {
        var renderer = new ChromePdfRenderer();
        renderer.RenderingOptions.PaperSize = PdfPaperSize.A4;
        renderer.RenderingOptions.MarginTop = 20;
        renderer.RenderingOptions.MarginBottom = 20;
        var html = File.ReadAllText("input.html");
        var pdf = renderer.RenderHtmlAsPdf(html);
        pdf.SaveAs("output.pdf");
    }
}
$vbLabelText   $csharpLabel

Este ejemplo muestra las diferencias de configuración de las páginas. PDFBoltestablece propiedades directamente en el objeto conversor (converter.PageSize, converter.MarginTop).IronPDFutiliza un objeto RenderingOptions en el renderizador (renderer.RenderingOptions.PaperSize, renderer.RenderingOptions.MarginTop).

Las correspondencias clave:

  • PageSize.A4PdfPaperSize.A4 (nombre de enum diferente)
  • MarginTop = 20RenderingOptions.MarginTop = 20 (mediante RenderingOptions)

Ambos utilizan milímetros para los valores de margen, por lo que los valores de margen existentes deberían transferirse directamente. El espacio de nombres IronPdf.Rendering es necesario para acceder al enum PdfPaperSize. Para conocer otras opciones de configuración de páginas, consulte la documentación sobre opciones de renderización.


Notas de migración críticas

Cambio de tipo de retorno

PDFBolt devuelve byte[] directamente;IronPDFdevuelve PdfDocument:

// PDFBoltpattern:
byte[] pdf = converter.ConvertHtmlString(html);
File.WriteAllBytes("output.pdf", pdf);

//IronPDFpattern:
var pdf = renderer.RenderHtmlAsPdf(html);
pdf.SaveAs("output.pdf");

// Or if you need bytes:
byte[] pdfBytes = renderer.RenderHtmlAsPdf(html).BinaryData;
// PDFBoltpattern:
byte[] pdf = converter.ConvertHtmlString(html);
File.WriteAllBytes("output.pdf", pdf);

//IronPDFpattern:
var pdf = renderer.RenderHtmlAsPdf(html);
pdf.SaveAs("output.pdf");

// Or if you need bytes:
byte[] pdfBytes = renderer.RenderHtmlAsPdf(html).BinaryData;
$vbLabelText   $csharpLabel

Cambio de denominación de clases

El nombre de la clase principal cambia de convertidor a renderizador:

// PDFBolt
var converter = new HtmlToPdfConverter();

// IronPDF
var renderer = new ChromePdfRenderer();
// PDFBolt
var converter = new HtmlToPdfConverter();

// IronPDF
var renderer = new ChromePdfRenderer();
$vbLabelText   $csharpLabel

Cambio de patrón de configuración

PDFBolt utiliza propiedades directas;IronPDFutiliza RenderingOptions:

// PDFBolt: Direct properties
converter.PageSize = PageSize.A4;
converter.MarginTop = 20;

// IronPDF: Via RenderingOptions
renderer.RenderingOptions.PaperSize = PdfPaperSize.A4;
renderer.RenderingOptions.MarginTop = 20;
// PDFBolt: Direct properties
converter.PageSize = PageSize.A4;
converter.MarginTop = 20;

// IronPDF: Via RenderingOptions
renderer.RenderingOptions.PaperSize = PdfPaperSize.A4;
renderer.RenderingOptions.MarginTop = 20;
$vbLabelText   $csharpLabel

Eliminación de claves de API

PDFBolt requiere la gestión de claves API por solicitud;IronPDFutiliza una clave de licencia de un solo uso:

// PDFBolt: API key per client (security risk if leaked)
var apiKey = config["PDFBolt:ApiKey"];
var client = new Client(apiKey);

// IronPDF: License key once at startup
IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY";
var renderer = new ChromePdfRenderer();
// PDFBolt: API key per client (security risk if leaked)
var apiKey = config["PDFBolt:ApiKey"];
var client = new Client(apiKey);

// IronPDF: License key once at startup
IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY";
var renderer = new ChromePdfRenderer();
$vbLabelText   $csharpLabel

Quitar la gestión de errores de red

El procesamiento local significa que no hay que gestionar errores de red:

// PDFBolt: Network error handling required
catch (HttpRequestException ex)
catch (TaskCanceledException)
catch (TimeoutException)

// IronPDF: Remove network-specific catches entirely
// PDFBolt: Network error handling required
catch (HttpRequestException ex)
catch (TaskCanceledException)
catch (TimeoutException)

// IronPDF: Remove network-specific catches entirely
$vbLabelText   $csharpLabel

Nuevas funciones disponibles

Tras migrar a IronPDF, obtendrá funciones que PDFBoltno puede ofrecerle:

// PDF Merging (not available in PDFBolt)
var merged = PdfDocument.Merge(pdf1, pdf2);

// Watermarks (not available in PDFBolt)
pdf.ApplyWatermark("<h1 style='opacity:0.3;'>DRAFT</h1>");

// Password Protection (not available in PDFBolt)
pdf.SecuritySettings.UserPassword = "secret";

// Text Extraction (not available in PDFBolt)
string text = pdf.ExtractAllText();

// PDF to Images (not available in PDFBolt)
pdf.RasterizeToImageFiles("page_*.png");
// PDF Merging (not available in PDFBolt)
var merged = PdfDocument.Merge(pdf1, pdf2);

// Watermarks (not available in PDFBolt)
pdf.ApplyWatermark("<h1 style='opacity:0.3;'>DRAFT</h1>");

// Password Protection (not available in PDFBolt)
pdf.SecuritySettings.UserPassword = "secret";

// Text Extraction (not available in PDFBolt)
string text = pdf.ExtractAllText();

// PDF to Images (not available in PDFBolt)
pdf.RasterizeToImageFiles("page_*.png");
$vbLabelText   $csharpLabel

Solución de problemas

Asunto 1: HtmlToPdfConverter no encontrado

Problema: la clase HtmlToPdfConverter no existe en IronPDF.

Solución: utilice ChromePdfRenderer :

// PDFBolt
var converter = new HtmlToPdfConverter();

// IronPDF
var renderer = new ChromePdfRenderer();
// PDFBolt
var converter = new HtmlToPdfConverter();

// IronPDF
var renderer = new ChromePdfRenderer();
$vbLabelText   $csharpLabel

Edición 2: ConvertHtmlString no encontrado

Problema: el método ConvertHtmlString() no existe.

Solución: utilice RenderHtmlAsPdf() :

// PDFBolt
var pdf = converter.ConvertHtmlString(html);

// IronPDF
var pdf = renderer.RenderHtmlAsPdf(html);
// PDFBolt
var pdf = converter.ConvertHtmlString(html);

// IronPDF
var pdf = renderer.RenderHtmlAsPdf(html);
$vbLabelText   $csharpLabel

Número 3: ConvertUrl Not Found

Problema: el método ConvertUrl() no existe.

Solución: utilice RenderUrlAsPdf() :

// PDFBolt
var pdf = converter.ConvertUrl(url);

// IronPDF
var pdf = renderer.RenderUrlAsPdf(url);
// PDFBolt
var pdf = converter.ConvertUrl(url);

// IronPDF
var pdf = renderer.RenderUrlAsPdf(url);
$vbLabelText   $csharpLabel

Edición 4: Enum PageSize no encontrado

Problema: la enumeración <código>TamañoDePágina</códigono existe.

Solución: utilice <código>TamañoDelPapel</códigode IronPdf.Rendering :

// PDFBolt
converter.PageSize = PageSize.A4;

// IronPDF
using IronPdf.Rendering;
renderer.RenderingOptions.PaperSize = PdfPaperSize.A4;
// PDFBolt
converter.PageSize = PageSize.A4;

// IronPDF
using IronPdf.Rendering;
renderer.RenderingOptions.PaperSize = PdfPaperSize.A4;
$vbLabelText   $csharpLabel

Edición 5: La primera generación de PDF es lenta

Problema: la renderización inicial tarda más de lo esperado.

Solución: El motor Chromium se inicializa en el primer uso. Precalentamiento si es necesario:

// Warm up during application startup
var renderer = new ChromePdfRenderer();
renderer.RenderHtmlAsPdf("<html><body></body></html>");
// Warm up during application startup
var renderer = new ChromePdfRenderer();
renderer.RenderHtmlAsPdf("<html><body></body></html>");
$vbLabelText   $csharpLabel

Lista de comprobación de la migración

Pre-Migración

  • Inventariar todos los usos de PDFBolten el código base
  • Documentar la configuración de la página actual (tamaño de página, márgenes)
  • Identificar el código de gestión de claves API para eliminar
  • Enumere cualquier límite de velocidad o manejo de errores de red para eliminar
  • Obtener la clave de licencia de IronPDF

Cambios en el paquete

  • Eliminar el paquete NuGet PDFBolt
  • Instalar el paquete NuGet IronPdf : dotnet add package IronPdf
  • Agregar using IronPdf; espacio de nombres
  • Agregar using IronPdf.Rendering; para enumeraciones de tamaño de papel

Cambios de código

  • Agregar configuración de clave de licencia al inicio
  • Reemplace HtmlToPdfConverter con ChromePdfRenderer
  • Reemplace ConvertHtmlString() con RenderHtmlAsPdf()
  • Reemplace ConvertUrl() con RenderUrlAsPdf()
  • Reemplace File.WriteAllBytes() con pdf.SaveAs()
  • Actualizar <código>TamañoDePágina</códigoa RenderingOptions.PaperSize
  • Actualizar las propiedades de margen a RenderingOptions.MarginTop , etc.
  • Eliminar el código de gestión de claves API
  • Eliminar el código de manejo del límite de velocidad
  • Eliminar el manejo de errores de red

Posmigración

  • Eliminar la clave API de los archivos de configuración
  • Eliminar la clave API de los administradores secretos
  • Ejecutar todas las pruebas comparando la salida PDF
  • Verificar que los tamaños de página y los márgenes se representen correctamente
  • Considere agregar nuevas capacidades (marcas de agua, seguridad, fusión)

Curtis Chau
Escritor Técnico

Curtis Chau tiene una licenciatura en Ciencias de la Computación (Carleton University) y se especializa en el desarrollo front-end con experiencia en Node.js, TypeScript, JavaScript y React. Apasionado por crear interfaces de usuario intuitivas y estéticamente agradables, disfruta trabajando con frameworks modernos y creando manuales bien ...

Leer más