IRONSOFTWAREHOME
VIDEOS

Cómo convertir imágenes a un PDF en C#

Curtis Chau
Curtis Chau
Updated: 18 de mayo de 2026

¿Por qué migrar de CraftMyPDFa IronPDF?

Las API de PDF basadas en la nube, como CraftMyPDF, introducen problemas fundamentales que las hacen inadecuadas para muchos entornos de producción.

El problema de las API de PDF basadas en la nube

  1. Sus datos salen de su sistema: cada plantilla HTML y carga de datos JSON se transmiten a los servidores de CraftMyPDF. En el caso de facturas, contratos, historiales médicos o cualquier dato empresarial sensible, esto genera riesgos de cumplimiento de la HIPAA, GDPR y SOC2.

  2. Latencia de la red: la propia documentación de CraftMyPDFindica entre 1,5 y 30 segundos por PDF.IronPDF genera localmente en milisegundos.

  3. Los costos por PDF se acumulan: 10 000 PDF al mes con tarifas de suscripción generan costos recurrentes significativos en comparación con una licencia perpetua de uso único.

  4. Salida optimizada para impresión: Las API en la nube suelen optimizar la impresión, reduciendo los fondos y simplificando los colores para ahorrar tinta. El resultado nunca se ve igual que el HTML en pantalla.

  5. Bloqueo de plantilla: CraftMyPDFrequiere su editor propietario de arrastrar y soltar. No se puede utilizar libremente HTML/CSS estándar.

Comparación de arquitecturas

AspectoCraftMyPDFIronPDF
Ubicación de los datosNube (sus datos salen de su sistema)On-premise (los datos nunca salen)
Latencia1.5-30 segundos por PDFMilisegundos
PreciosSuscripción por PDFLicencia perpetua única
Sistema de plantillasPropietario sólo arrastrar y soltarCualquier HTML/CSS/JavaScript
Calidad de la traducciónImpresión optimizadaRepresentación perfecta de la pantalla
Trabaja sin conexiónNo (requiere Internet)
CumplimientoLos datos dejan organizaciónAdecuado para SOC2/HIPAA

Comparación de características

CaracterísticaCraftMyPDFIronPDF
HTML a PDFA través de plantillas API✅Nativo
URL a PDFA través de API✅Nativo
Plantillas personalizadasSólo editor propietariocualquier HTML
Compatibilidad con CSS3Limitado✅Completo
Traducción de JavaScriptLimitado✅Completo
Combinar/Dividir PDFA través de API✅Nativo
Marcas de aguaA través de API✅Nativo
Trabajos fuera de línea
Autoalojado

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 de IronPDF(prueba gratuita disponible en ironpdf.com)

Auditar el uso de CraftMyPDF

Ejecute estos comandos en su directorio de soluciones para identificar todas las referencias a CraftMyPDF:

# Find all CraftMyPDFusages in your codebase
grep -r "CraftMyPdf\|craftmypdf\|api.craftmypdf.com" --include="*.cs" .
grep -r "X-API-KEY" --include="*.cs" .

# Find API key references
grep -r "your-api-key\|template-id\|template_id" --include="*.cs" .

# Find NuGet package references
grep -r "CraftMyPdf\|RestSharp" --include="*.csproj" .
SHELL

Cambios importantes que hay que anticipar

CambiarCraftMyPDFIronPDFImpacto
ArquitecturaAPI REST de la nubeBiblioteca .NET localEliminar llamadas HTTP
PlantillasEditor propietarioHTML estándarConvertir plantillas a HTML
Clave APIRequerido para cada convocatoriaLicencia al inicioEliminar el manejo de claves API
Patrón asíncronoRequerido (HTTP)OpcionalQuitar await si se prefiere
Manejo de erroresCódigos de estado HTTPExcepcionesCambiar los patrones try/catch
Unión de datosPlantillas JSONInterpolación de cadenasSimplificar la vinculación de datos

Proceso de migración paso a paso

Paso 1: Actualizar paquetes NuGet

Elimine la biblioteca cliente HTTP e instale IronPDF:

# Remove RestSharp HTTP client
dotnet remove package RestSharp

# Install IronPDF
dotnet add package IronPdf
SHELL

Paso 2: Actualizar referencias de espacios de nombres

Sustituya los espacios de nombres de clientes HTTP por IronPDF:

// Remove these
using RestSharp;
using System.IO;

// Add this
using IronPdf;

Paso 3: Configurar la licencia (una vez al inicio)

Sustituya los encabezados de clave de API por solicitud por una configuración de licencia única:

// Add at application startup (Program.cs or Global.asax)
// This replaces all X-API-KEY headers
IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY";

Referencia completa de migración de API

Mapeo de puntos finales de API

CraftMyPDFIronPDF
POST /v1/createrenderer.RenderHtmlAsPdf(html)
X-API-KEY encabezadoLicense.LicenseKey = "..."
template_idCadena HTML estándar
{%name%} marcadores de posición$"{name}" Interpolación de C#
POST /v1/mergePdfDocument.Merge(pdfs)
POST /v1/add-watermarkpdf.ApplyWatermark(html)
Llamadas de retorno de webhooksNo es necesario
Limitación de tarifasNo procede

Mapeo de configuración

Opción CraftMyPDFEquivalente de IronPDF
template_idCadena HTML
data JSONInterpolación en C#
page_size: "A4"PaperSize = PdfPaperSize.A4
orientation: "landscape"PaperOrientation = Landscape
margin_top: 20MarginTop = 20
headerHtmlHeader
footerHtmlFooter

Ejemplos de migración de código

Conversión de HTML a PDF

La operación más común demuestra el cambio de arquitectura fundamental de la API en la nube a la renderización local.

Implementación de CraftMyPDF:

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

class Program
{
    static void Main()
    {
        var client = new RestClient("https://api.craftmypdf.com/v1/create");
        var request = new RestRequest(Method.POST);
        request.AddHeader("X-API-KEY", "your-api-key");
        request.AddJsonBody(new
        {
            template_id = "your-template-id",
            data = new
            {
                html = "<h1>Hello World</h1><p>This is a PDF from HTML</p>"
            }
        });
        
        var response = client.Execute(request);
        File.WriteAllBytes("output.pdf", response.RawBytes);
    }
}

Implementación de IronPDF:

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

class Program
{
    static void Main()
    {
        var renderer = new ChromePdfRenderer();
        var pdf = renderer.RenderHtmlAsPdf("<h1>Hello World</h1><p>This is a PDF from HTML</p>");
        pdf.SaveAs("output.pdf");
    }
}

IronPDF elimina la configuración de RestClient, las cabeceras de clave API, los ID de plantilla y la gestión de respuestas HTTP, reduciendo una operación en la nube de 15 líneas a 4 líneas de código local. Para más opciones, consulte la documentación HTML a PDF.

Conversión de URL a PDF

Implementación de CraftMyPDF:

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

class Program
{
    static void Main()
    {
        var client = new RestClient("https://api.craftmypdf.com/v1/create");
        var request = new RestRequest(Method.POST);
        request.AddHeader("X-API-KEY", "your-api-key");
        request.AddJsonBody(new
        {
            template_id = "your-template-id",
            data = new
            {
                url = "https://example.com"
            },
            export_type = "pdf"
        });
        
        var response = client.Execute(request);
        File.WriteAllBytes("webpage.pdf", response.RawBytes);
    }
}

Implementación de IronPDF:

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

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

El método RenderUrlAsPdf de IronPDFcaptura la página web completa, incluido el contenido renderizado en JavaScript. Para obtener más opciones, consulte URL a la documentación en PDF.

Cabeceras y pies de página

Implementación de CraftMyPDF:

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

class Program
{
    static void Main()
    {
        var client = new RestClient("https://api.craftmypdf.com/v1/create");
        var request = new RestRequest(Method.POST);
        request.AddHeader("X-API-KEY", "your-api-key");
        request.AddJsonBody(new
        {
            template_id = "your-template-id",
            data = new
            {
                html = "<h1>Document Content</h1>",
                header = "<div>Page Header</div>",
                footer = "<div>Page {page} of {total_pages}</div>"
            }
        });
        
        var response = client.Execute(request);
        File.WriteAllBytes("document.pdf", response.RawBytes);
    }
}

Implementación de IronPDF:

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

class Program
{
    static void Main()
    {
        var renderer = new ChromePdfRenderer();
        renderer.RenderingOptions.TextHeader = new TextHeaderFooter()
        {
            CenterText = "Page Header"
        };
        renderer.RenderingOptions.TextFooter = new TextHeaderFooter()
        {
            CenterText = "Page {page} of {total-pages}"
        };
        
        var pdf = renderer.RenderHtmlAsPdf("<h1>Document Content</h1>");
        pdf.SaveAs("document.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.

Conversión de variables de plantilla

CraftMyPDF utiliza marcadores de posición de plantilla propios que deben convertirse a interpolación de cadenas de C#:

Patrón de CraftMyPDF:

// CraftMyPDFtemplate variables
request.AddJsonBody(new
{
    template_id = "invoice-template",
    data = new
    {
        customer = "John Doe",
        amount = "$1,000",
        items = invoiceItems
    }
});

Patrón IronPDF:

// C# string interpolation
var html = $@"
<html>
<body>
    <h1>Invoice</h1>
    <p>Customer: {customerName}</p>
    <p>Amount: {amount}</p>
    {GenerateItemsTable(invoiceItems)}
</body>
</html>";

var pdf = renderer.RenderHtmlAsPdf(html);

Notas de migración críticas

Eliminar todo el código HTTP

El cambio más significativo es la eliminación de las dependencias de la red.IronPDFse ejecuta localmente, sin RestClient, sin llamadas a la API, sin gestión de respuestas:

// CraftMyPDF- HTTP required
var client = new RestClient("https://api.craftmypdf.com/v1/create");
var request = new RestRequest(Method.POST);
request.AddHeader("X-API-KEY", "your-api-key");
var response = await client.ExecuteAsync(request);

//IronPDF- no HTTP
var pdf = renderer.RenderHtmlAsPdf(html);

Quitar el código de limitación de velocidad

CraftMyPDF impone límites de velocidad de API que requieren una lógica de reintento.IronPDFno tiene límites:

// CraftMyPDF- needed to avoid 429 errors
await Task.Delay(100);
if (response.StatusCode == TooManyRequests) { /* retry */ }

//IronPDF- no limits, just generate
var pdf = renderer.RenderHtmlAsPdf(html);
// Remove all rate limit code!

Quitar Webhook Handlers

CraftMyPDF utiliza webhooks asíncronos para la finalización de PDF.IronPDFes síncrono: el PDF está listo inmediatamente:

// CraftMyPDF- webhook callback required
// POST with webhook_url, wait for callback

//IronPDF- PDF ready immediately
var pdf = renderer.RenderHtmlAsPdf(html);
pdf.SaveAs("output.pdf");
// No callback needed!

Sync por defecto

Eliminar los patrones async/await si sólo eran necesarios para las llamadas HTTP:

// CraftMyPDF- async required
var response = await client.ExecuteAsync(request);

//IronPDF- sync by default (async available if needed)
var pdf = renderer.RenderHtmlAsPdf(html);

Lista de comprobación posterior a la migración

Después de completar la migración del código, verifique lo siguiente:

  • Ejecutar todas las pruebas de generación de PDF
  • Comparar la calidad de salida (el motor Chromium de IronPDF ofrece una representación perfecta de píxeles)
  • Medir la mejora del rendimiento (milisegundos frente a segundos)
  • Verificar que todas las plantillas se hayan convertido correctamente
  • Procesamiento de lotes de prueba sin límites de velocidad
  • Prueba en todos los entornos de destino
  • Actualizar los pipelines de CI/CD
  • Cancelar la suscripción a CraftMyPDF
  • Eliminar la clave API de secretos/configuración

Proteja su infraestructura PDF

Con .NET 10 en el horizonte y C# 14 introduciendo nuevas características del lenguaje, la elección de una biblioteca PDF local elimina los riesgos de depreciación de la API en la nube y los problemas de compatibilidad de versiones. El modelo de licencia perpetua de IronPDF significa que su inversión en migración rinde dividendos indefinidamente a medida que los proyectos se extienden hasta 2025 y 2026, sin costes de suscripción recurrentes ni datos que salgan de su infraestructura.

Recursos adicionales


La migración de CraftMyPDFa IronPDF elimina las dependencias de la nube, la latencia de la red, los costes por PDF y el bloqueo de plantillas, a la vez que ofrece un renderizado Chromium perfecto que se ejecuta sin conexión. La transición de las llamadas a la API REST a la invocación de métodos locales simplifica su código base y mantiene los datos confidenciales de los documentos dentro de su infraestructura.

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 estructurados y visualmente atractivos.

...
Leer más

Artículos Relacionados

Key in blue circle

Obtenga su clave de prueba gratuita de 30 días al instante.

Your trial license will be sent to your email address

Sin limitaciones. 100 % desbloqueado. Sin tarjeta de crédito.

bullet_checkedNo se requiere tarjeta de crédito ni creación de cuentaSin limitaciones. 100 % desbloqueado. Sin tarjeta de crédito.
  • Logo Aetna
  • Logo NASA
  • Logo GE
  • Logo Porsche
  • Logo USDA
  • Logo Qatar
Join Millions of Engineers who’ve tried IronPDF
Reserve su Demostración en Vivo gratuita
Booking Badge

Confiado por millones de ingenieros en todo el mundo

Logos de clientes de Iron Software
Obtén tu Consulta Sin Compromiso
Completa el formulario a continuación o envía un correo a sales@ironsoftware.com
Tus detalles siempre serán mantenidos confidenciales.
Confiado por millones de ingenieros en todo el mundo
Logos de clientes de Iron Software
Obtenga su Clave de Prueba de 30 días gratis al instante.
No se requiere tarjeta de crédito ni creación de cuenta