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:
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.
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.
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.
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.
Latencia: el viaje de ida y vuelta de la red agrega segundos a cada conversión en comparación con el procesamiento local.
Problemas de cumplimiento: las auditorías GDPR, HIPAA y SOC2 se complican por el procesamiento externo de documentos.
Seguridad de la clave API: las claves API filtradas pueden dar lugar a un uso no autorizado facturado a su cuenta.
- Bloqueo del proveedor: su aplicación falla si PDFBoltcambia los términos o se cierra.
Comparación entre PDFBolte IronPDF
| Consulte | PDFBolt | IronPDF |
|---|---|---|
| Ubicación de los datos | Servidores externos | Sólo sus servidores |
| Límites de uso | 100 gratis, luego por documento | Ilimitado |
| Se requiere Internet | Sí, siempre | No |
| Latencia | Red de ida y vuelta | Milisegundos |
| Cumplimiento | Complejo (procesamiento externo) | Simple (procesamiento local) |
| Modelo de costes | Por documento | Una sola vez o anual |
| Funcionamiento sin conexión | Imposible | Totalmente compatible |
| Riesgos clave de la API | Filtrado = facturado | Clave 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
- Entorno .NET: .NET Framework 4.6.2+ o .NET Core 3.1+ / .NET 5/6/7/8/9+
- Acceso a NuGet: Capacidad para instalar paquetes NuGet
- 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 IronPdfConfiguració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";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" .Referencia completa de la API
Asignaciones de clases principales
| PDFBolt | IronPDF | Notas |
|---|---|---|
nuevo HtmlToPdfConverter() | <código>new ChromePdfRenderer()</código | Renderizador principal |
| <código>TamañoDePágina</código | <código>TamañoDelPapel</código | Enum para tamaños de papel |
| (devuelve byte[])_ | Documento PDF | Documento objeto enriquecido |
Métodos de conversión
| PDFBolt | IronPDF | Notas |
|---|---|---|
converter.ConvertHtmlString(html) | renderer.RenderHtmlAsPdf(html) | Devuelve PdfDocument |
| <código>converter.ConvertUrl(url)</código | <código>renderer.RenderUrlAsPdf(url)</código | Devuelve PdfDocument |
Métodos de salida
| PDFBolt | IronPDF | Notas |
|---|---|---|
| <código>File.WriteAllBytes(path, pdf)</código | <código>pdf.SaveAs(ruta)</código | Método de guardado directo |
| (el pdf es byte[])(pdf is byte[]) | <código>pdf.BinaryData</código | Obtener matriz de bytes |
| (flujo manual)_ | <código>pdf.Stream</código | Propiedad |
Configuración de páginas
| PDFBolt | IronPDF | Notas |
|---|---|---|
converter.PageSize = PageSize.A4 | renderer.RenderingOptions.PaperSize = PdfPaperSize.A4 | Enumeración del tamaño del papel |
converter.MarginTop = 20 | renderer.RenderingOptions.MarginTop = 20 | En milímetros |
converter.MarginBottom = 20 | renderer.RenderingOptions.MarginBottom = 20 | En milímetros |
converter.MarginLeft = 15 | renderer.RenderingOptions.MarginLeft = 15 | En milímetros |
converter.MarginRight = 15 | <código>renderer.RenderingOptions.MarginRight = 15</código | En milímetros |
Mapas de marcador de posición de encabezado/pie
| PDFBolt | IronPDF | Notas |
|---|---|---|
| <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);
}
}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");
}
}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);
}
}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");
}
}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);
}
}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");
}
}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.A4→PdfPaperSize.A4(nombre de enum diferente)MarginTop = 20→RenderingOptions.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;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();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;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();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 entirelyNuevas 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");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();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);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);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;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>");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
HtmlToPdfConverterconChromePdfRenderer - Reemplace
ConvertHtmlString()conRenderHtmlAsPdf() - Reemplace
ConvertUrl()conRenderUrlAsPdf() - Reemplace
File.WriteAllBytes()conpdf.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)






