Cómo migrar de PDFmyURL a IronPDF en C#
Migración de PDFmyURLa IronPDF: Una guía completa para desarrolladores de C
PDFmyURL es un servicio API basado en la nube diseñado para convertir URL y contenido HTML en documentos PDF. El servicio procesa todas las conversiones en servidores externos, proporcionando una ruta de integración directa que requiere una infraestructura local mínima. Sin embargo, esta arquitectura dependiente de la nube crea problemas importantes para las aplicaciones de producción que manejan datos confidenciales, requieren capacidad offline o necesitan evitar costes de suscripción continuos.
Esta guía proporciona una ruta de migración completa de PDFmyURLa IronPDF, con instrucciones paso a paso, comparaciones de código y ejemplos prácticos para desarrolladores .NET profesionales que estén evaluando esta transición.
Por qué migrar de PDFmyURL
El modelo de procesamiento en la nube de PDFmyURLpresenta varios retos que los equipos de desarrollo deben tener en cuenta:
Privacidad y seguridad de los datos: Todos los documentos que conviertes viajan hacia y a través de los servidores de PDFmyURL; los contratos confidenciales, los informes financieros y los datos personales se procesan externamente.
Costes de suscripción continuos: a partir de 39 $/mes, los costes anuales superan los 468 $/año sin propiedad. Este modelo de suscripción supone un gasto continuo independientemente de los patrones de uso.
Dependencia de Internet: Toda conversión requiere conectividad a la red. Las aplicaciones no pueden procesar archivos PDF fuera de línea o durante interrupciones de la red.
Límites de tarifa y estrangulamiento: Las llamadas a la API se pueden estrangular durante los picos de uso, lo que puede afectar al rendimiento de la aplicación.
Disponibilidad del servicio: Su aplicación depende de que un servicio de terceros esté en línea y funcione.
Vendor Lock-in: Los cambios en la API pueden romper su integración sin previo aviso, lo que requiere actualizaciones reactivas del código.
IronPDFfrente a PDFmyURL: Comparación de características
Comprender las diferencias arquitectónicas ayuda a los responsables técnicos a evaluar la inversión en migración:
| Aspecto | PDFmyURL | IronPDF |
|---|---|---|
| Lugar de procesamiento | Servidores externos | Local (su servidor) |
| Tipo | Envoltorio de API | biblioteca .NET |
| Autenticación | Clave API por solicitud | Clave de licencia única |
| Red Requerida | Cada conversión | Sólo configuración inicial |
| Modelo de precios | Suscripción mensual ($39+) | Licencia perpetua disponible |
| Límites de tarifa | Sí (depende del plan) | Ninguno |
| Privacidad de datos | Datos enviados externamente | Los datos permanecen locales |
| Soporte HTML/CSS/JS | Conformidad con W3C | Motor Chromium completo |
| Patrón Async | Requerido (sólo async) | Opciones de sincronización y asincronización |
| Manipulación de PDF | Limitado | Suite completa (combinar, dividir, editar) |
| Caso práctico | Aplicaciones de bajo volumen | Grandes volúmenes y empresas |
Inicio rápido: Migración de PDFmyURLa IronPDF
La migración puede comenzar inmediatamente con estos pasos básicos.
Paso 1: Sustituir paquetes NuGet
Eliminar paquetes PDFmyURL:
# Remove PDFmyURLpackages
dotnet remove package PdfMyUrl
dotnet remove package Pdfcrowd# Remove PDFmyURLpackages
dotnet remove package PdfMyUrl
dotnet remove package PdfcrowdInstalar IronPDF:
# Install IronPDF
dotnet add package IronPdf# Install IronPDF
dotnet add package IronPdfPaso 2: Actualizar los espacios de nombres
Sustituya los espacios de nombres PDFmyURLpor IronPdf:
// Before: PDFmyURL
using PdfMyUrl;
using Pdfcrowd;
// After: IronPDF
using IronPdf;
using IronPdf.Rendering;// Before: PDFmyURL
using PdfMyUrl;
using Pdfcrowd;
// After: IronPDF
using IronPdf;
using IronPdf.Rendering;IRON VB CONVERTER ERROR developers@ironsoftware.comPaso 3: Inicializar licencia
Añadir inicialización de licencia al inicio de la aplicación:
IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY";IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY";IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY"Ejemplos de migración de código
Convertir URL en PDF
La operación de URL a PDF demuestra las diferencias fundamentales de la API entre PDFmyURLe IronPDF.
Enfoque PDFmyURL:
// Install PDFmyURLSDK
using System;
using Pdfcrowd;
class Example
{
static void Main()
{
try
{
var client = new HtmlToPdfClient("username", "apikey");
client.convertUrlToFile("https://example.com", "output.pdf");
}
catch(Error why)
{
Console.WriteLine("Error: " + why);
}
}
}// Install PDFmyURLSDK
using System;
using Pdfcrowd;
class Example
{
static void Main()
{
try
{
var client = new HtmlToPdfClient("username", "apikey");
client.convertUrlToFile("https://example.com", "output.pdf");
}
catch(Error why)
{
Console.WriteLine("Error: " + why);
}
}
}IRON VB CONVERTER ERROR developers@ironsoftware.comEnfoque IronPDF:
// NuGet: Install-Package IronPdf
using IronPdf;
using System;
class Example
{
static void Main()
{
var renderer = new ChromePdfRenderer();
var pdf = renderer.RenderUrlAsPdf("https://example.com");
pdf.SaveAs("output.pdf");
}
}// NuGet: Install-Package IronPdf
using IronPdf;
using System;
class Example
{
static void Main()
{
var renderer = new ChromePdfRenderer();
var pdf = renderer.RenderUrlAsPdf("https://example.com");
pdf.SaveAs("output.pdf");
}
}IRON VB CONVERTER ERROR developers@ironsoftware.comPDFmyURL requiere la creación de un <código>HtmlToPdfClient</códigocon nombre de usuario y credenciales de clave API para cada solicitud de conversión, y luego llamar a convertUrlToFile() con la URL y la ruta de salida. Toda la operación debe estar envuelta en try-catch para el tipo personalizado Error de PDFmyURL.
IronPDF simplifica esto a tres líneas: crear un ChromePdfRenderer, llamar a RenderUrlAsPdf(), y utilizar el método incorporado SaveAs(). No se necesitan credenciales por solicitud: la licencia se establece una vez al iniciar la aplicación.
Para escenarios avanzados de URL a PDF, consulte la documentación URL a PDF.
Convertir cadenas HTML a PDF
La conversión de cadenas HTML muestra claramente las diferencias de patrones.
Enfoque PDFmyURL:
// Install PDFmyURLSDK
using System;
using Pdfcrowd;
class Example
{
static void Main()
{
try
{
var client = new HtmlToPdfClient("username", "apikey");
string html = "<html><body><h1>Hello World</h1></body></html>";
client.convertStringToFile(html, "output.pdf");
}
catch(Error why)
{
Console.WriteLine("Error: " + why);
}
}
}// Install PDFmyURLSDK
using System;
using Pdfcrowd;
class Example
{
static void Main()
{
try
{
var client = new HtmlToPdfClient("username", "apikey");
string html = "<html><body><h1>Hello World</h1></body></html>";
client.convertStringToFile(html, "output.pdf");
}
catch(Error why)
{
Console.WriteLine("Error: " + why);
}
}
}IRON VB CONVERTER ERROR developers@ironsoftware.comEnfoque IronPDF:
// NuGet: Install-Package IronPdf
using IronPdf;
using System;
class Example
{
static void Main()
{
var renderer = new ChromePdfRenderer();
string 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;
class Example
{
static void Main()
{
var renderer = new ChromePdfRenderer();
string html = "<html><body><h1>Hello World</h1></body></html>";
var pdf = renderer.RenderHtmlAsPdf(html);
pdf.SaveAs("output.pdf");
}
}IRON VB CONVERTER ERROR developers@ironsoftware.comPDFmyURL utiliza convertStringToFile() que envía el contenido HTML a servidores externos para su procesamiento. El RenderHtmlAsPdf() deIronPDFprocesa todo localmente utilizando el motor de renderizado Chromium.
Explore la Guía de conversión de HTML a PDF para conocer otras opciones.
Conversión de archivos HTML con ajustes de página
La configuración del tamaño, la orientación y los márgenes del papel requiere enfoques diferentes en cada biblioteca.
Enfoque PDFmyURL:
// Install PDFmyURLSDK
using System;
using Pdfcrowd;
class Example
{
static void Main()
{
try
{
var client = new HtmlToPdfClient("username", "apikey");
client.setPageSize("A4");
client.setOrientation("landscape");
client.setMarginTop("10mm");
client.convertFileToFile("input.html", "output.pdf");
}
catch(Error why)
{
Console.WriteLine("Error: " + why);
}
}
}// Install PDFmyURLSDK
using System;
using Pdfcrowd;
class Example
{
static void Main()
{
try
{
var client = new HtmlToPdfClient("username", "apikey");
client.setPageSize("A4");
client.setOrientation("landscape");
client.setMarginTop("10mm");
client.convertFileToFile("input.html", "output.pdf");
}
catch(Error why)
{
Console.WriteLine("Error: " + why);
}
}
}IRON VB CONVERTER ERROR developers@ironsoftware.comEnfoque IronPDF:
// NuGet: Install-Package IronPdf
using IronPdf;
using IronPdf.Rendering;
using System;
class Example
{
static void Main()
{
var renderer = new ChromePdfRenderer();
renderer.RenderingOptions.PaperSize = PdfPaperSize.A4;
renderer.RenderingOptions.PaperOrientation = PdfPaperOrientation.Landscape;
renderer.RenderingOptions.MarginTop = 10;
var pdf = renderer.RenderHtmlFileAsPdf("input.html");
pdf.SaveAs("output.pdf");
}
}// NuGet: Install-Package IronPdf
using IronPdf;
using IronPdf.Rendering;
using System;
class Example
{
static void Main()
{
var renderer = new ChromePdfRenderer();
renderer.RenderingOptions.PaperSize = PdfPaperSize.A4;
renderer.RenderingOptions.PaperOrientation = PdfPaperOrientation.Landscape;
renderer.RenderingOptions.MarginTop = 10;
var pdf = renderer.RenderHtmlFileAsPdf("input.html");
pdf.SaveAs("output.pdf");
}
}IRON VB CONVERTER ERROR developers@ironsoftware.comPDFmyURL utiliza métodos setter con parámetros de cadena como <código>setPageSize("A4")</códigoy setMarginTop("10mm").IronPDFproporciona propiedades fuertemente tipadas a través de RenderingOptions con enums como PdfPaperSize.A4 y valores enteros para márgenes en milímetros.
Referencia de la API PDFmyURLa IronPDF
Este mapeo acelera la migración al mostrar los equivalentes directos de las API:
Clases básicas
| PDFmyURL | IronPDF | Notas |
|---|---|---|
| <código>HtmlToPdfClient</código | <código>ChromePdfRenderer</código | Clase principal de conversión |
| <código>PdfMyUrlClient</código | <código>ChromePdfRenderer</código | Clase de cliente alternativo |
| Objeto de respuesta API | Documento PDF | Resultado Objeto PDF |
Métodos
| PDFmyURL | IronPDF | Notas |
|---|---|---|
client.convertUrlToFile(url, file) | <código>renderer.RenderUrlAsPdf(url).SaveAs(file)</código | URL a PDF |
| <código>client.convertStringToFile(html, file)</código | <código>renderer.RenderHtmlAsPdf(html).SaveAs(file)</código | Cadena HTML a PDF |
client.convertFileToFile(input, output) | <código>renderer.RenderHtmlFileAsPdf(input).SaveAs(output)</código | Archivo a archivo |
response.GetBytes() | <código>pdf.BinaryData</código | Obtener bytes en bruto |
response.GetStream() | <código>pdf.Stream</código | Obtener como flujo |
Opciones de configuración
| PDFmyURL(métodos setXxx) | IronPDF(RenderingOptions) | Notas |
|---|---|---|
| <código>setPageSize("A4")</código | .PaperSize = PdfPaperSize.A4 | Tamaño del papel |
| <código>setPageSize("Letra")</código | .PaperSize = PdfPaperSize.Letter | Carta para EE.UU |
| <código>setOrientation("landscape")</código | .PaperOrientation = PdfPaperOrientation.Landscape | Orientación |
| <código>setOrientation("portrait")</código | .PaperOrientation = PdfPaperOrientation.Portrait | Retrato |
| <código>setMarginTop("10mm")</código | .MarginTop = 10 | Margen superior (mm) |
| <código>setMarginBottom("10mm")</código | .MargenInferior = 10 | Margen inferior (mm) |
| <código>setMarginLeft("10mm")</código | .MargenIzquierdo = 10 | Margen izquierdo (mm) |
| <código>setMarginRight("10mm")</código | .MarginRight = 10 | Margen derecho (mm) |
| <código>setHeaderHtml(html)</código | .HtmlHeader = new HtmlHeaderFooter { HtmlFragment = html } | Encabezado |
setFooterHtml(html) | .HtmlFooter = new HtmlHeaderFooter { HtmlFragment = html } | Pie de página |
| <código>setJavascriptDelay(500)</código | .RenderDelay = 500 | Tiempo de espera JS (ms) |
| <código>setDisableJavascript(true)</código | .EnableJavaScript = false | Desactivar JS |
| <código>setUsePrintMedia(true)</código | .CssMediaType = PdfCssMediaType.Print | Imprimir CSS |
Comparación de autenticación
| PDFmyURL | IronPDF |
|---|---|
new HtmlToPdfClient("nombredeusuario", "apikey") | <código>IronPdf.License.LicenseKey = "LICENSE-KEY"</código> |
| Clave API por solicitud | Una sola vez al inicio |
| Requerido para cada convocatoria | Fijar una vez globalmente |
Problemas comunes de migración y soluciones
Cuestión 1: Clave API frente a clave de licencia
PDFmyURL: Requiere credenciales para cada solicitud de conversión.
Solución: Configure la licencia deIronPDFuna vez al iniciar la aplicación:
// PDFmyURL: API key per request
var client = new HtmlToPdfClient("username", "apikey");
// IronPDF: One-time license at startup
IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY";
// Set once, typically in Program.cs or Startup.cs// PDFmyURL: API key per request
var client = new HtmlToPdfClient("username", "apikey");
// IronPDF: One-time license at startup
IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY";
// Set once, typically in Program.cs or Startup.csIRON VB CONVERTER ERROR developers@ironsoftware.comTema 2: Sintaxis de marcador de posición en encabezados/pies de página
PDFmyURL: Utiliza marcadores de posición {page_number} y {total_pages}.
Solución: Actualización al formato de marcador de posición de IronPDF:
// PDFmyURL: "Page {page_number} of {total_pages}"
// IronPDF: "Page {page} of {total-pages}"// PDFmyURL: "Page {page_number} of {total_pages}"
// IronPDF: "Page {page} of {total-pages}"IRON VB CONVERTER ERROR developers@ironsoftware.comNúmero 3: Patrones asíncronos
PDFmyURL: Requiere patrones async/await.
Solución:IronPDFes síncrono por defecto; envolver para async si es necesario:
// PDFmyURL: Native async
var response = await client.ConvertUrlAsync(url);
// IronPDF: Sync by default, wrap for async
var pdf = await Task.Run(() => renderer.RenderUrlAsPdf(url));// PDFmyURL: Native async
var response = await client.ConvertUrlAsync(url);
// IronPDF: Sync by default, wrap for async
var pdf = await Task.Run(() => renderer.RenderUrlAsPdf(url));IRON VB CONVERTER ERROR developers@ironsoftware.comNúmero 4: Tratamiento de errores
PDFmyURL: Utiliza el tipo de excepción personalizado Pdfcrowd.Error.
Solución: Actualizar los bloques de captura para las excepciones de IronPDF:
// PDFmyURL: Pdfcrowd.Error
catch (Pdfcrowd.Error e) { ... }
// IronPDF: Standard exceptions
catch (IronPdf.Exceptions.IronPdfRenderingException e) { ... }// PDFmyURL: Pdfcrowd.Error
catch (Pdfcrowd.Error e) { ... }
// IronPDF: Standard exceptions
catch (IronPdf.Exceptions.IronPdfRenderingException e) { ... }IRON VB CONVERTER ERROR developers@ironsoftware.comNúmero 5: Patrón de configuración
PDFmyURL: Utiliza métodos setter con valores de cadena.
Solución: Utilizar propiedades RenderingOptions fuertemente tipadas:
// PDFmyURL: Setter methods
client.setPageSize("A4");
client.setOrientation("landscape");
// IronPDF: Properties with enums
renderer.RenderingOptions.PaperSize = PdfPaperSize.A4;
renderer.RenderingOptions.PaperOrientation = PdfPaperOrientation.Landscape;// PDFmyURL: Setter methods
client.setPageSize("A4");
client.setOrientation("landscape");
// IronPDF: Properties with enums
renderer.RenderingOptions.PaperSize = PdfPaperSize.A4;
renderer.RenderingOptions.PaperOrientation = PdfPaperOrientation.Landscape;IRON VB CONVERTER ERROR developers@ironsoftware.comLista de comprobación para la migración a PDFmyURL
Tareas previas a la migración
Audite su código base para identificar todos los usos de PDFmyURL:
# Find PDFmyURLusage
grep -r "PdfMyUrl\|Pdfcrowd\|HtmlToPdfClient" --include="*.cs" .
# Find API key references
grep -r "apikey\|api-key\|api_key" --include="*.cs" --include="*.json" --include="*.config" .
# Find placeholder patterns to migrate
grep -r "{page_number}\|{total_pages}" --include="*.cs" .# Find PDFmyURLusage
grep -r "PdfMyUrl\|Pdfcrowd\|HtmlToPdfClient" --include="*.cs" .
# Find API key references
grep -r "apikey\|api-key\|api_key" --include="*.cs" --include="*.json" --include="*.config" .
# Find placeholder patterns to migrate
grep -r "{page_number}\|{total_pages}" --include="*.cs" .Documentar las opciones de configuración utilizadas actualmente. Planifique el almacenamiento de claves de licencia mediante variables de entorno.
Tareas de actualización de código
- Eliminar los paquetes NuGet PDFmyURL/Pdfcrowd
- Instalación del paquete IronPdf NuGet
- Actualizar todas las importaciones de espacios de nombres
- Sustituir la autenticación de la clave API por la clave de licencia de IronPDF
- Convertir métodos setter en propiedades RenderingOptions
- Actualizar la sintaxis de los marcadores de posición en encabezados/pies de página (
{número_de_página}→{página},{total_páginas}→{total-páginas}) - Actualización del código de gestión de errores para los tipos de excepción de IronPDF
- Añadir la inicialización de la licenciaIronPDFal inicio
Pruebas posteriores a la migración
Tras la migración, verifique estos aspectos:
- Comprobar que la calidad del PDF se ajusta a las expectativas
- Verificar que los patrones async funcionan correctamente
- Comparar la fidelidad del renderizado con el resultado anterior
- Pruebe que todas las variaciones de la plantilla se muestran correctamente
- Validación de la configuración de página (tamaño, orientación, márgenes)
- Instalar las dependencias de Linux si se despliega en servidores Linux
Beneficios clave de migrar a IronPDF
El cambio de PDFmyURLaIronPDFofrece varias ventajas fundamentales:
Privacidad total: Los documentos nunca salen de su servidor. Todo el procesamiento se realiza localmente, lo que elimina los problemas de seguridad de los datos sensibles.
Coste único: La opción de licencia perpetua elimina las cuotas de suscripción recurrentes. Se acabaron los pagos mensuales, independientemente del volumen de uso.
Capacidad offline: Funciona sin internet tras la configuración inicial. Los cortes de red no afectan a la generación de PDF.
Sin límites de velocidad: Procese documentos ilimitados sin preocupaciones de estrangulamiento.
Menor latencia: La ausencia de sobrecarga de red se traduce en conversiones más rápidas, especialmente para aplicaciones de gran volumen.
Control total: Usted controla el entorno de procesamiento, no un servicio de terceros.
Motor Chromium moderno: Soporte completo de CSS3 y JavaScript con el mismo motor de renderizado que el navegador Chrome.
Desarrollo Activo: A medida que aumenta la adopción de .NET 10 y C# 14 hasta 2026, las actualizaciones periódicas deIronPDFgarantizan la compatibilidad con las versiones actuales y futuras de .NET.
Conclusión
PDFmyURL ofrece una solución sencilla basada en la nube para necesidades de generación de PDF de bajo volumen. Sin embargo, el modelo de procesamiento externo crea problemas de privacidad, costes continuos y riesgos de dependencia que muchas aplicaciones de producción no pueden aceptar.
IronPDF proporciona un procesamiento local que mantiene los datos confidenciales en sus servidores, elimina las cuotas de suscripción con licencias perpetuas y ofrece un moderno motor de renderizado basado en Chromium. La migración es sencilla: sustituya los paquetes NuGet, actualice los métodos setter a propiedades de tipado fuerte y ajuste la sintaxis de los marcadores de posición.
Comience su migración hoy mismo con una prueba gratuita de IronPDF y experimente las ventajas del procesamiento local de PDF.
Para una guía de implementación completa, explore la documentación de IronPDF y tutoriales.






