Cómo migrar de PDFmyURL a IronPDF en 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 datos: cada documento que usted convierte viaja hacia y a través de los servidores de PDFmyURL; contratos confidenciales, informes financieros y datos personales se procesan externamente.
Costos de suscripción continua: Desde $39 al mes, los costos anuales superan los $468 al año sin titularidad. Este modelo de suscripción implica un gasto continuo, independientemente de los patrones de uso.
Dependencia de Internet: cada conversión requiere conectividad de red. Las aplicaciones no pueden procesar archivos PDF fuera de línea o durante interrupciones de la red.
Límites de velocidad y limitación: las llamadas API pueden limitarse durante el uso máximo, lo que podría afectar el rendimiento de la aplicación.
Disponibilidad del servicio: su aplicación depende de que un servicio de terceros esté en línea y funcional.
Bloqueo del proveedor: los cambios de API pueden interrumpir su integración sin previo aviso, lo que requiere actualizaciones de código reactivas.
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;Paso 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";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);
}
}
}Enfoque 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");
}
}PDFmyURL 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);
}
}
}Enfoque 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");
}
}PDFmyURL 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);
}
}
}Enfoque 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");
}
}PDFmyURL 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.csTema 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}"Nú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));Nú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) { ... }Nú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;Lista 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 completa: los documentos nunca salen de su servidor. Todo el procesamiento se realiza localmente, lo que elimina los problemas de seguridad de los datos sensibles.
Costo único: la opción de licencia perpetua elimina las tarifas de suscripción recurrentes. Se acabaron los pagos mensuales, independientemente del volumen de uso.
Funciona sin conexión: Funciona sin internet tras la configuración inicial. Las interrupciones de la red no afectan la generación de PDF.
Sin límites de velocidad: procese documentos ilimitados sin preocupaciones por limitaciones.
Menor latencia: ninguna sobrecarga de red significa 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: compatibilidad total con CSS3 y JavaScript con el mismo motor de renderizado que impulsa 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.






