LOPDGDD y VeriFactu: IronPDF vs CraftMyPDF para C# PDF España
IronPDF ofrece conversión de HTML a PDF basada en código con soporte completo de CSS/JavaScript y licencias perpetuas desde $749, mientras que CraftMyPDF proporciona diseño de plantillas basado en la nube con integración JSON pero requiere suscripciones continuas y dependencias de API.
CraftMyPDF ofrece un diseñador de plantillas de arrastrar y soltar basado en la nube con integración de datos JSON, mientras que IronPDF proporciona conversión de HTML a PDF basada en código con soporte completo de CSS/JavaScript para desarrolladores .NET que buscan control total sobre la generación de documentos.
PDF , o formato de documento portátil, es un formato de archivo desarrollado por Adobe para el intercambio de documentos. Conserva el formato, las fuentes y las imágenes en todos los dispositivos, lo que garantiza una apariencia uniforme. Los archivos PDF admiten funciones de seguridad , interactividad y compresión , lo que los hace ideales para compartir documentos de manera confiable.
Las bibliotecas PDF de C# permiten a los desarrolladores crear , modificar y extraer contenido de archivos PDF mediante programación. Estas herramientas admiten el manejo de formularios , las firmas digitales y la implementación multiplataforma . Al integrar bibliotecas PDF, los desarrolladores pueden agregar capacidades de generación de documentos directamente a sus aplicaciones y simplificar los flujos de trabajo para crear , editar y administrar archivos PDF .
Este artículo compara dos enfoques diferentes de generación de PDF: la biblioteca C# IronPDF y la API Craftmypdf . La comparación examina las características, proporciona ejemplos de código y analiza las opciones de licencia .
Para equipos de desarrollo en España: CraftMyPDF es una plataforma SaaS basada en la nube. Cuando se procesan facturas, contratos u otros documentos que contienen datos personales de clientes españoles (NIF, CIF, domicilio fiscal, importes EUR), la transmisión a servidores externos activa obligaciones bajo la LOPDGDD (Ley Orgánica 3/2018) y el Art. 28 del RGPD: el responsable del tratamiento debe firmar un contrato de encargado con CraftMyPDF y verificar que los datos no salgan del Espacio Económico Europeo sin garantías adecuadas. La AEPD puede imponer sanciones de hasta 20 millones de euros o el 4 % del volumen de negocio mundial por incumplimientos del RGPD. IronPDF, instalado localmente dentro de la infraestructura propia, procesa los documentos en local: los datos de facturación nunca abandonan los servidores del ISV, eliminando la cadena de encargados con terceros.
Además, los sistemas de facturación sujetos a VeriFactu (RDL 8/2023) o a TicketBAI (Bizkaia, Gipuzkoa, Araba) deben generar PDFs con la leyenda VERI*FACTU y el QR AEAT de verificación de integridad de forma offline. La dependencia de una API cloud como CraftMyPDF es arquitectónicamente incompatible con el requisito de disponibilidad permanente y trazabilidad de integridad que impone el marco VeriFactu. IronPDF resuelve este escenario con procesamiento 100% local, firma PAdES con certificados FNMT-RCM y soporte para formato Facturae 3.2.x para envíos a FACe.
¿Qué es la solución base de API de CraftMyPDF?

CraftMyPDF es una API basada en la nube para crear archivos PDF a través de plantillas. Proporciona un editor de arrastrar y soltar basado en web para diseñar plantillas reutilizables sin codificación. La plataforma genera archivos PDF fusionando estas plantillas con datos JSON, lo que admite la generación de contenido dinámico para documentos como facturas , informes y certificados.
¿Cuáles son las características clave de CraftMyPDF?
-
Editor de arrastrar y soltar: Diseñador de plantillas visual que no requiere conocimientos de codificación.
-
Reutilización de plantillas: Diseñe una vez y úsela repetidamente con diferentes conjuntos de datos.
-
Integración de datos JSON: fusiona datos dinámicos con plantillas a través de JSON.
-
Formato y expresiones avanzados: formatee fechas, números y monedas de forma dinámica.
-
Integraciones de API: la API REST admite Zapier, Make.com y aplicaciones personalizadas.
-
Componentes rellenables: crea formularios interactivos con campos de texto y casillas de verificación.
- Seguridad y cumplimiento: acceso seguro a PDF con puntos finales de API regionales y cumplimiento del RGPD.
¿Qué es IronPDF?
IronPDF PDF Library para .NET Developers es una biblioteca PDF completa para aplicaciones .NET . Escrito en C#, genera archivos PDF con píxeles perfectos a partir de HTML , CSS , JavaScript e imágenes . IronPDF simplifica los flujos de trabajo de PDF al proporcionar amplias capacidades de creación, edición y gestión dentro de entornos .NET .
¿Cuáles son las características principales de IronPDF?
-
Conversión de HTML a PDF: convierta HTML, CSS y JavaScript a PDF con una precisión de píxeles perfecta .
-
URL a PDF: genera archivos PDF desde cualquier URL , conservando el contenido y el estilo adaptable .
-
Imagen a PDF: Convierte JPG, PNG, GIF, BMP y SVG en documentos PDF con soporte TIFF de múltiples fotogramas .
-
Relleno de formularios y extracción de datos: cree y rellene formularios PDF mediante programación con validación personalizada .
-
Firmas digitales y seguridad: agregue firmas digitales , contraseñas y permisos con soporte HSM .
-
Edición de PDF: agregar, copiar o eliminar páginas . Fusionar y dividir archivos PDF con capacidades de rotación de páginas .
-
Anotaciones y archivos adjuntos: agregue notas adhesivas e incorpore archivos adjuntos con metadatos personalizados .
-
Encabezados, pies de página y marcas de agua: aplique encabezados, pies de página y marcas de agua personalizados con plantillas HTML .
-
Compatibilidad entre plataformas: funciona en Windows , macOS , Linux , Docker , Azure y AWS .
-
Optimización del rendimiento: compatibilidad con subprocesos múltiples y asincrónicos para generación de gran volumen con procesamiento paralelo .
-
Documentación completa: guías extensas , tutoriales y soporte técnico 24/5 .
- Sin dependencias externas: implementación de una sola DLL sin requisitos de software adicionales utilizando un motor de renderizado nativo .
¿Cómo creo una aplicación C# en Visual Studio?
Para crear una aplicación de consola C# es necesario tener Visual Studio instalado en la computadora. Siga estos pasos para configurar el proyecto:
¿Cómo abro Visual Studio?
Inicie Visual Studio desde el menú Inicio o el icono del escritorio.
¿Cómo creo un nuevo proyecto?
- Haga clic en "Crear un nuevo proyecto" en la página de inicio.
- Busque "Aplicación de consola" o selecciónela de la lista de plantillas.
¿Cómo elijo la plantilla del proyecto?
Seleccione "Aplicación de consola (.NET Core)" o "Aplicación de consola (.NET Framework)" según los requisitos. Para obtener compatibilidad con .NET MAUI , elija las plantillas MAUI adecuadas.
¿Cómo configuro mi proyecto?
- Nombre del proyecto: Ingrese el nombre del proyecto
- Ubicación: Elija el directorio de guardado
- Nombre de la solución: Generalmente coincide con el nombre del proyecto.
- Haga clic en "Crear" para continuar.
¿Cómo se instala IronPDF?
IronPDF ofrece tres métodos de instalación: Administrador de paquetes NuGet , Consola del administrador de paquetes y descarga directa. La biblioteca admite implementaciones de Windows , macOS , Linux y la nube.
¿Cómo uso el Administrador de paquetes NuGet ?
En Visual Studio, haga clic con el botón derecho en "Referencias" o "Dependencias" en el Explorador de soluciones. Seleccione "Administrar paquetes NuGet ", busque "IronPDF" y haga clic en "Instalar".

¿Cómo uso la consola del Administrador de paquetes NuGet ?
Abra Herramientas > Administrador de paquetes NuGet > Consola del administrador de paquetes y ejecute:
Install-Package IronPdf
¿Cómo puedo descargar desde el sitio web de NuGet ?
Visite el sitio web de NuGet , descargue el archivo del paquete y agréguelo como fuente de paquete en Visual Studio. Para implementaciones de Docker , utilice configuraciones de contenedor específicas.
Para obtener instrucciones detalladas, consulte la descripción general de la instalación y la configuración avanzada de NuGet .
¿Cómo uso CraftMyPDF?
Para integrar CraftMyPDF, crea una cuenta, selecciona un plan y obtén credenciales de API.
¿Cómo creo una cuenta y selecciono el plan gratuito?
- Regístrate: Regístrate en el sitio web de CraftMyPDF
- Seleccione el plan gratuito: elija el nivel gratuito para desarrollo y pruebas
- Obtener la clave API: acceda a la clave API desde el panel de la cuenta

¿Qué bibliotecas necesito instalar?
Instalar paquetes System.Net.Http, RestSharp, y Newtonsoft.Json:
using System;
using System.Net.Http;
using System.Text;
using System.Threading.Tasks;
using RestSharp;
using System;
using System.Net.Http;
using System.Text;
using System.Threading.Tasks;
using RestSharp;
Imports System
Imports System.Net.Http
Imports System.Text
Imports System.Threading.Tasks
Imports RestSharp
Inicializar el cliente API:
var client = new RestClient("___PROTECTED_URL_51___");
var request = new RestRequest(Method.Post);
string apiKey = "API Key"; // Replace with your actual API key
string templateId = "Template ID"; // Replace with your actual template ID
request.AddHeader("X-API-KEY", apiKey);
request.AddHeader("Content-Type", "application/json");
var client = new RestClient("___PROTECTED_URL_51___");
var request = new RestRequest(Method.Post);
string apiKey = "API Key"; // Replace with your actual API key
string templateId = "Template ID"; // Replace with your actual template ID
request.AddHeader("X-API-KEY", apiKey);
request.AddHeader("Content-Type", "application/json");
Dim client As New RestClient("___PROTECTED_URL_51___")
Dim request As New RestRequest(Method.Post)
Dim apiKey As String = "API Key" ' Replace with your actual API key
Dim templateId As String = "Template ID" ' Replace with your actual template ID
request.AddHeader("X-API-KEY", apiKey)
request.AddHeader("Content-Type", "application/json")
¿Cómo creo archivos PDF?
Ambas bibliotecas ofrecen diferentes enfoques para la generación de PDF. IronPDF utiliza renderizado HTML basado en código, mientras que CraftMyPDF utiliza plantillas visuales con enlace de datos. IronPDF también admite conversiones de Markdown a PDF y de XML a PDF .
¿Cómo creo archivos PDF con IronPDF?
¿Cómo convierto HTML a PDF?
Convierte cadenas HTML directamente a PDF con soporte completo de CSS y representación de JavaScript :
using IronPdf;
public class PDFCreator
{
public void CreatePdfFromHtml()
{
var renderer = new ChromePdfRenderer();
// Define your HTML string
string htmlContent = "<h1>Hello, IronPDF!</h1><p>This is a sample PDF document created from an HTML string.</p>";
// Render the HTML as a PDF document
var pdfDocument = renderer.RenderHtmlAsPdf(htmlContent);
// Save the PDF document
pdfDocument.SaveAs("html_output.pdf");
}
}
using IronPdf;
public class PDFCreator
{
public void CreatePdfFromHtml()
{
var renderer = new ChromePdfRenderer();
// Define your HTML string
string htmlContent = "<h1>Hello, IronPDF!</h1><p>This is a sample PDF document created from an HTML string.</p>";
// Render the HTML as a PDF document
var pdfDocument = renderer.RenderHtmlAsPdf(htmlContent);
// Save the PDF document
pdfDocument.SaveAs("html_output.pdf");
}
}
Imports IronPdf
Public Class PDFCreator
Public Sub CreatePdfFromHtml()
Dim renderer = New ChromePdfRenderer()
' Define your HTML string
Dim htmlContent As String = "<h1>Hello, IronPDF!</h1><p>This is a sample PDF document created from an HTML string.</p>"
' Render the HTML as a PDF document
Dim pdfDocument = renderer.RenderHtmlAsPdf(htmlContent)
' Save the PDF document
pdfDocument.SaveAs("html_output.pdf")
End Sub
End Class

Para obtener más ejemplos, visita la página de ejemplos de HTML a PDF . Los desarrolladores también pueden establecer márgenes personalizados , agregar saltos de página y configurar el tamaño del papel .
¿Cómo convierto una URL a PDF?
Convierte páginas web a archivos PDF conservando todo el estilo, incluido el contenido WebGL y el CSS adaptable :
using IronPdf;
public class PDFCreator
{
public void CreatePdfFromUrl(string url)
{
// Initialize the ChromePdfRenderer
var renderer = new ChromePdfRenderer();
// Render the URL as a PDF document
var pdfDocument = renderer.RenderUrlAsPdf(url);
// Save the PDF document
pdfDocument.SaveAs("url_output.pdf");
}
}
using IronPdf;
public class PDFCreator
{
public void CreatePdfFromUrl(string url)
{
// Initialize the ChromePdfRenderer
var renderer = new ChromePdfRenderer();
// Render the URL as a PDF document
var pdfDocument = renderer.RenderUrlAsPdf(url);
// Save the PDF document
pdfDocument.SaveAs("url_output.pdf");
}
}
Imports IronPdf
Public Class PDFCreator
Public Sub CreatePdfFromUrl(url As String)
' Initialize the ChromePdfRenderer
Dim renderer = New ChromePdfRenderer()
' Render the URL as a PDF document
Dim pdfDocument = renderer.RenderUrlAsPdf(url)
' Save the PDF document
pdfDocument.SaveAs("url_output.pdf")
End Sub
End Class

Obtenga más información sobre la conversión de URL a PDF . Para páginas autenticadas, consulte Inicios de sesión en sitios web TLS y encabezados de solicitud HTTP .
¿Cómo convierto un archivo HTML a PDF?
Convierte archivos HTML locales a PDF con soporte para tipos de medios CSS y URL base :
using IronPdf;
public class PDFCreator
{
public void CreatePdfFromHtmlFile(string filePath)
{
// Initialize the ChromePdfRenderer
var renderer = new ChromePdfRenderer();
// Render the HTML file as a PDF document
var pdfDocument = renderer.RenderHtmlFileAsPdf(filePath);
// Save the PDF document
pdfDocument.SaveAs("html_file_output.pdf");
}
}
using IronPdf;
public class PDFCreator
{
public void CreatePdfFromHtmlFile(string filePath)
{
// Initialize the ChromePdfRenderer
var renderer = new ChromePdfRenderer();
// Render the HTML file as a PDF document
var pdfDocument = renderer.RenderHtmlFileAsPdf(filePath);
// Save the PDF document
pdfDocument.SaveAs("html_file_output.pdf");
}
}
Imports IronPdf
Public Class PDFCreator
Public Sub CreatePdfFromHtmlFile(filePath As String)
' Initialize the ChromePdfRenderer
Dim renderer As New ChromePdfRenderer()
' Render the HTML file as a PDF document
Dim pdfDocument = renderer.RenderHtmlFileAsPdf(filePath)
' Save the PDF document
pdfDocument.SaveAs("html_file_output.pdf")
End Sub
End Class
Consulte la guía de conversión de archivos HTML a PDF para obtener más detalles. Para archivos ZIP HTML , IronPDF maneja la extracción automáticamente.
¿Cómo creo PDFs con la API de CraftMyPDF?
CraftMyPDF requiere crear plantillas primero, luego generar PDFs combinando datos.
¿Cómo creo una plantilla?
- Iniciar sesión en el Panel de control: Accede a la cuenta
CraftMyPDF - Crear nueva plantilla: utilice el editor de arrastrar y soltar para diseñar
- Guardar plantilla: obtener el ID de plantilla para las llamadas API

¿Cómo envío una solicitud para generar un PDF?
Genere archivos PDF enviando datos JSON a la plantilla:
using System;
using System.Net;
using System.Threading.Tasks;
using RestSharp;
class Program
{
static async Task Main(string[] args)
{
var client = new RestClient("___PROTECTED_URL_52___");
var request = new RestRequest(Method.Post);
string apiKey = "API-Key"; // Replace with your actual API key
string templateId = "Template-ID"; // Replace with your actual template ID
request.AddHeader("X-API-KEY", apiKey);
request.AddHeader("Content-Type", "application/json");
var body = new
{
data = new
{
invoice_number = "INV48321",
date = "2024-05-27",
due_date = "2024-06-27",
currency = "EUR",
discount = 10,
tax = 5,
company_name = "Tech Innovations Ltd",
email = "contact@techinnovations.com",
client = "Future Solutions GmbH",
client_address = "1234 Innovation Drive",
client_address2 = "Berlin",
client_address3 = "10115",
items = new[]
{
new { description = "Cloud Hosting Services", quantity = 12, unit_price = 75, total = 900 },
new { description = "Custom Web Application", quantity = 3, unit_price = 150, total = 450 },
new { description = "Technical Support", quantity = 15, unit_price = 30, total = 450 },
new { description = "Digital Marketing Campaign", quantity = 2, unit_price = 500, total = 1000 },
new { description = "SEO Optimization", quantity = 5, unit_price = 120, total = 600 }
},
gross_total = 3400
},
load_data_from = (string)null,
template_id = templateId,
version = 8,
export_type = "json",
expiration = 60,
output_file = "output.pdf",
is_cmyk = false,
image_resample_res = 600,
direct_download = 0,
cloud_storage = 1
};
request.AddJsonBody(body);
RestResponse response = await client.ExecuteAsync(request);
Console.WriteLine(response.Content);
if (response.IsSuccessful)
{
var content = response.Content;
dynamic result = Newtonsoft.Json.JsonConvert.DeserializeObject(content);
string fileUrl = result.file;
string localPath = "f:\\downloaded_output.pdf";
using (WebClient webClient = new WebClient())
{
webClient.DownloadFile(fileUrl, localPath);
}
Console.WriteLine($"PDF downloaded successfully to {localPath}");
}
else
{
Console.WriteLine($"Error: {response.Content}");
}
}
}
using System;
using System.Net;
using System.Threading.Tasks;
using RestSharp;
class Program
{
static async Task Main(string[] args)
{
var client = new RestClient("___PROTECTED_URL_52___");
var request = new RestRequest(Method.Post);
string apiKey = "API-Key"; // Replace with your actual API key
string templateId = "Template-ID"; // Replace with your actual template ID
request.AddHeader("X-API-KEY", apiKey);
request.AddHeader("Content-Type", "application/json");
var body = new
{
data = new
{
invoice_number = "INV48321",
date = "2024-05-27",
due_date = "2024-06-27",
currency = "EUR",
discount = 10,
tax = 5,
company_name = "Tech Innovations Ltd",
email = "contact@techinnovations.com",
client = "Future Solutions GmbH",
client_address = "1234 Innovation Drive",
client_address2 = "Berlin",
client_address3 = "10115",
items = new[]
{
new { description = "Cloud Hosting Services", quantity = 12, unit_price = 75, total = 900 },
new { description = "Custom Web Application", quantity = 3, unit_price = 150, total = 450 },
new { description = "Technical Support", quantity = 15, unit_price = 30, total = 450 },
new { description = "Digital Marketing Campaign", quantity = 2, unit_price = 500, total = 1000 },
new { description = "SEO Optimization", quantity = 5, unit_price = 120, total = 600 }
},
gross_total = 3400
},
load_data_from = (string)null,
template_id = templateId,
version = 8,
export_type = "json",
expiration = 60,
output_file = "output.pdf",
is_cmyk = false,
image_resample_res = 600,
direct_download = 0,
cloud_storage = 1
};
request.AddJsonBody(body);
RestResponse response = await client.ExecuteAsync(request);
Console.WriteLine(response.Content);
if (response.IsSuccessful)
{
var content = response.Content;
dynamic result = Newtonsoft.Json.JsonConvert.DeserializeObject(content);
string fileUrl = result.file;
string localPath = "f:\\downloaded_output.pdf";
using (WebClient webClient = new WebClient())
{
webClient.DownloadFile(fileUrl, localPath);
}
Console.WriteLine($"PDF downloaded successfully to {localPath}");
}
else
{
Console.WriteLine($"Error: {response.Content}");
}
}
}
Imports System
Imports System.Net
Imports System.Threading.Tasks
Imports RestSharp
Module Program
Async Function Main(args As String()) As Task
Dim client As New RestClient("___PROTECTED_URL_52___")
Dim request As New RestRequest(Method.Post)
Dim apiKey As String = "API-Key" ' Replace with your actual API key
Dim templateId As String = "Template-ID" ' Replace with your actual template ID
request.AddHeader("X-API-KEY", apiKey)
request.AddHeader("Content-Type", "application/json")
Dim body = New With {
.data = New With {
.invoice_number = "INV48321",
.date = "2024-05-27",
.due_date = "2024-06-27",
.currency = "EUR",
.discount = 10,
.tax = 5,
.company_name = "Tech Innovations Ltd",
.email = "contact@techinnovations.com",
.client = "Future Solutions GmbH",
.client_address = "1234 Innovation Drive",
.client_address2 = "Berlin",
.client_address3 = "10115",
.items = New Object() {
New With {.description = "Cloud Hosting Services", .quantity = 12, .unit_price = 75, .total = 900},
New With {.description = "Custom Web Application", .quantity = 3, .unit_price = 150, .total = 450},
New With {.description = "Technical Support", .quantity = 15, .unit_price = 30, .total = 450},
New With {.description = "Digital Marketing Campaign", .quantity = 2, .unit_price = 500, .total = 1000},
New With {.description = "SEO Optimization", .quantity = 5, .unit_price = 120, .total = 600}
},
.gross_total = 3400
},
.load_data_from = CType(Nothing, String),
.template_id = templateId,
.version = 8,
.export_type = "json",
.expiration = 60,
.output_file = "output.pdf",
.is_cmyk = False,
.image_resample_res = 600,
.direct_download = 0,
.cloud_storage = 1
}
request.AddJsonBody(body)
Dim response As RestResponse = Await client.ExecuteAsync(request)
Console.WriteLine(response.Content)
If response.IsSuccessful Then
Dim content = response.Content
Dim result = Newtonsoft.Json.JsonConvert.DeserializeObject(Of Object)(content)
Dim fileUrl As String = result.file
Dim localPath As String = "f:\downloaded_output.pdf"
Using webClient As New WebClient()
webClient.DownloadFile(fileUrl, localPath)
End Using
Console.WriteLine($"PDF downloaded successfully to {localPath}")
Else
Console.WriteLine($"Error: {response.Content}")
End If
End Function
End Module

Salida PDF generada:

¿Cómo puedo generar facturas profesionales con Bootstrap?
IronPDF renderiza marcos modernos sin dependencias externas. Este ejemplo de Bootstrap 5 demuestra la generación de facturas profesionales con diseño responsivo y CSS de impresión :
using IronPdf;
var renderer = new ChromePdfRenderer();
string professionalInvoice = @"
<!DOCTYPE html>
<html>
<head>
<meta charset='utf-8'>
<link href='___PROTECTED_URL_53___ rel='stylesheet'>
<style>
.invoice-header { background: linear-gradient(135deg, #667eea 0%, #764ba2 100%); color: white; }
.invoice-table th { background: #f8f9fa; }
@media print { .invoice-box { page-break-inside: avoid; } }
</style>
</head>
<body>
<div class='container my-4'>
<div class='card shadow-lg invoice-box'>
<div class='invoice-header p-4'>
<div class='row align-items-center'>
<div class='col-md-8'>
<h1 class='mb-0'>INVOICE</h1>
<p class='mb-0 opacity-75'>Invoice #INV-2024-0427</p>
</div>
<div class='col-md-4 text-md-end'>
<h3 class='mb-0'>$3,400.00</h3>
<small class='opacity-75'>Due: June 27, 2024</small>
</div>
</div>
</div>
<div class='card-body p-4'>
<div class='row mb-4'>
<div class='col-md-6'>
<h6 class='text-primary text-uppercase mb-2'>From</h6>
<strong>Tech Innovations Ltd</strong><br>
contact@techinnovations.com
</div>
<div class='col-md-6 text-md-end'>
<h6 class='text-primary text-uppercase mb-2'>Bill To</h6>
<strong>Future Solutions GmbH</strong><br>
1234 Innovation Drive<br>
Berlin, 10115
</div>
</div>
<table class='table invoice-table'>
<thead>
<tr>
<th>Description</th>
<th class='text-center'>Qty</th>
<th class='text-end'>Unit Price</th>
<th class='text-end'>Total</th>
</tr>
</thead>
<tbody>
<tr>
<td>Cloud Hosting Services</td>
<td class='text-center'>12</td>
<td class='text-end'>€75.00</td>
<td class='text-end'>€900.00</td>
</tr>
<tr>
<td>Custom Web Application</td>
<td class='text-center'>3</td>
<td class='text-end'>€150.00</td>
<td class='text-end'>€450.00</td>
</tr>
<tr>
<td>Technical Support</td>
<td class='text-center'>15</td>
<td class='text-end'>€30.00</td>
<td class='text-end'>€450.00</td>
</tr>
<tr>
<td>Digital Marketing Campaign</td>
<td class='text-center'>2</td>
<td class='text-end'>€500.00</td>
<td class='text-end'>€1,000.00</td>
</tr>
<tr>
<td>SEO Optimization</td>
<td class='text-center'>5</td>
<td class='text-end'>€120.00</td>
<td class='text-end'>€600.00</td>
</tr>
</tbody>
</table>
<div class='row justify-content-end'>
<div class='col-md-4'>
<table class='table table-sm'>
<tr>
<td>Subtotal:</td>
<td class='text-end'><strong>€3,400.00</strong></td>
</tr>
<tr>
<td>Discount (10%):</td>
<td class='text-end text-success'>-€340.00</td>
</tr>
<tr>
<td>Tax (5%):</td>
<td class='text-end'>€153.00</td>
</tr>
<tr class='table-primary'>
<td><strong>Total Due:</strong></td>
<td class='text-end'><strong>€3,213.00</strong></td>
</tr>
</table>
</div>
</div>
<div class='alert alert-info mt-4'>
<strong>Payment Terms:</strong> Payment due within 30 days. Late payments may incur additional charges.
</div>
<div class='row mt-4 pt-3 border-top'>
<div class='col-md-6'>
<small class='text-muted'>Generated with IronPDF - No external APIs required</small>
</div>
<div class='col-md-6 text-md-end'>
<span class='badge bg-success'>PAID</span>
</div>
</div>
</div>
</div>
</div>
</body>
</html>";
var pdf = renderer.RenderHtmlAsPdf(professionalInvoice);
pdf.SaveAs("professional-invoice.pdf");
using IronPdf;
var renderer = new ChromePdfRenderer();
string professionalInvoice = @"
<!DOCTYPE html>
<html>
<head>
<meta charset='utf-8'>
<link href='___PROTECTED_URL_53___ rel='stylesheet'>
<style>
.invoice-header { background: linear-gradient(135deg, #667eea 0%, #764ba2 100%); color: white; }
.invoice-table th { background: #f8f9fa; }
@media print { .invoice-box { page-break-inside: avoid; } }
</style>
</head>
<body>
<div class='container my-4'>
<div class='card shadow-lg invoice-box'>
<div class='invoice-header p-4'>
<div class='row align-items-center'>
<div class='col-md-8'>
<h1 class='mb-0'>INVOICE</h1>
<p class='mb-0 opacity-75'>Invoice #INV-2024-0427</p>
</div>
<div class='col-md-4 text-md-end'>
<h3 class='mb-0'>$3,400.00</h3>
<small class='opacity-75'>Due: June 27, 2024</small>
</div>
</div>
</div>
<div class='card-body p-4'>
<div class='row mb-4'>
<div class='col-md-6'>
<h6 class='text-primary text-uppercase mb-2'>From</h6>
<strong>Tech Innovations Ltd</strong><br>
contact@techinnovations.com
</div>
<div class='col-md-6 text-md-end'>
<h6 class='text-primary text-uppercase mb-2'>Bill To</h6>
<strong>Future Solutions GmbH</strong><br>
1234 Innovation Drive<br>
Berlin, 10115
</div>
</div>
<table class='table invoice-table'>
<thead>
<tr>
<th>Description</th>
<th class='text-center'>Qty</th>
<th class='text-end'>Unit Price</th>
<th class='text-end'>Total</th>
</tr>
</thead>
<tbody>
<tr>
<td>Cloud Hosting Services</td>
<td class='text-center'>12</td>
<td class='text-end'>€75.00</td>
<td class='text-end'>€900.00</td>
</tr>
<tr>
<td>Custom Web Application</td>
<td class='text-center'>3</td>
<td class='text-end'>€150.00</td>
<td class='text-end'>€450.00</td>
</tr>
<tr>
<td>Technical Support</td>
<td class='text-center'>15</td>
<td class='text-end'>€30.00</td>
<td class='text-end'>€450.00</td>
</tr>
<tr>
<td>Digital Marketing Campaign</td>
<td class='text-center'>2</td>
<td class='text-end'>€500.00</td>
<td class='text-end'>€1,000.00</td>
</tr>
<tr>
<td>SEO Optimization</td>
<td class='text-center'>5</td>
<td class='text-end'>€120.00</td>
<td class='text-end'>€600.00</td>
</tr>
</tbody>
</table>
<div class='row justify-content-end'>
<div class='col-md-4'>
<table class='table table-sm'>
<tr>
<td>Subtotal:</td>
<td class='text-end'><strong>€3,400.00</strong></td>
</tr>
<tr>
<td>Discount (10%):</td>
<td class='text-end text-success'>-€340.00</td>
</tr>
<tr>
<td>Tax (5%):</td>
<td class='text-end'>€153.00</td>
</tr>
<tr class='table-primary'>
<td><strong>Total Due:</strong></td>
<td class='text-end'><strong>€3,213.00</strong></td>
</tr>
</table>
</div>
</div>
<div class='alert alert-info mt-4'>
<strong>Payment Terms:</strong> Payment due within 30 days. Late payments may incur additional charges.
</div>
<div class='row mt-4 pt-3 border-top'>
<div class='col-md-6'>
<small class='text-muted'>Generated with IronPDF - No external APIs required</small>
</div>
<div class='col-md-6 text-md-end'>
<span class='badge bg-success'>PAID</span>
</div>
</div>
</div>
</div>
</div>
</body>
</html>";
var pdf = renderer.RenderHtmlAsPdf(professionalInvoice);
pdf.SaveAs("professional-invoice.pdf");
Imports IronPdf
Dim renderer As New ChromePdfRenderer()
Dim professionalInvoice As String = "
<!DOCTYPE html>
<html>
<head>
<meta charset='utf-8'>
<link href='___PROTECTED_URL_53___ rel='stylesheet'>
<style>
.invoice-header { background: linear-gradient(135deg, #667eea 0%, #764ba2 100%); color: white; }
.invoice-table th { background: #f8f9fa; }
@media print { .invoice-box { page-break-inside: avoid; } }
</style>
</head>
<body>
<div class='container my-4'>
<div class='card shadow-lg invoice-box'>
<div class='invoice-header p-4'>
<div class='row align-items-center'>
<div class='col-md-8'>
<h1 class='mb-0'>INVOICE</h1>
<p class='mb-0 opacity-75'>Invoice #INV-2024-0427</p>
</div>
<div class='col-md-4 text-md-end'>
<h3 class='mb-0'>$3,400.00</h3>
<small class='opacity-75'>Due: June 27, 2024</small>
</div>
</div>
</div>
<div class='card-body p-4'>
<div class='row mb-4'>
<div class='col-md-6'>
<h6 class='text-primary text-uppercase mb-2'>From</h6>
<strong>Tech Innovations Ltd</strong><br>
contact@techinnovations.com
</div>
<div class='col-md-6 text-md-end'>
<h6 class='text-primary text-uppercase mb-2'>Bill To</h6>
<strong>Future Solutions GmbH</strong><br>
1234 Innovation Drive<br>
Berlin, 10115
</div>
</div>
<table class='table invoice-table'>
<thead>
<tr>
<th>Description</th>
<th class='text-center'>Qty</th>
<th class='text-end'>Unit Price</th>
<th class='text-end'>Total</th>
</tr>
</thead>
<tbody>
<tr>
<td>Cloud Hosting Services</td>
<td class='text-center'>12</td>
<td class='text-end'>€75.00</td>
<td class='text-end'>€900.00</td>
</tr>
<tr>
<td>Custom Web Application</td>
<td class='text-center'>3</td>
<td class='text-end'>€150.00</td>
<td class='text-end'>€450.00</td>
</tr>
<tr>
<td>Technical Support</td>
<td class='text-center'>15</td>
<td class='text-end'>€30.00</td>
<td class='text-end'>€450.00</td>
</tr>
<tr>
<td>Digital Marketing Campaign</td>
<td class='text-center'>2</td>
<td class='text-end'>€500.00</td>
<td class='text-end'>€1,000.00</td>
</tr>
<tr>
<td>SEO Optimization</td>
<td class='text-center'>5</td>
<td class='text-end'>€120.00</td>
<td class='text-end'>€600.00</td>
</tr>
</tbody>
</table>
<div class='row justify-content-end'>
<div class='col-md-4'>
<table class='table table-sm'>
<tr>
<td>Subtotal:</td>
<td class='text-end'><strong>€3,400.00</strong></td>
</tr>
<tr>
<td>Discount (10%):</td>
<td class='text-end text-success'>-€340.00</td>
</tr>
<tr>
<td>Tax (5%):</td>
<td class='text-end'>€153.00</td>
</tr>
<tr class='table-primary'>
<td><strong>Total Due:</strong></td>
<td class='text-end'><strong>€3,213.00</strong></td>
</tr>
</table>
</div>
</div>
<div class='alert alert-info mt-4'>
<strong>Payment Terms:</strong> Payment due within 30 days. Late payments may incur additional charges.
</div>
<div class='row mt-4 pt-3 border-top'>
<div class='col-md-6'>
<small class='text-muted'>Generated with IronPDF - No external APIs required</small>
</div>
<div class='col-md-6 text-md-end'>
<span class='badge bg-success'>PAID</span>
</div>
</div>
</div>
</div>
</div>
</body>
</html>"
Dim pdf = renderer.RenderHtmlAsPdf(professionalInvoice)
pdf.SaveAs("professional-invoice.pdf")
Salida: un PDF de factura profesional con encabezados de degradado Bootstrap 5, tablas interactivas y resúmenes de cálculos. IronPDF renderiza con perfecta precisión todos los gradientes CSS, estilos de tablas y clases de utilidad: no se requieren llamadas a APIs externas, no se requieren plantillas, no se requiere conexión a Internet. A diferencia del enfoque en la nube de CraftMyPDF, IronPDF genera facturas instantáneamente en su servidor con control total.
¿Qué hace el código?
- Configurar
RestClient: Inicializa cliente con el punto final de API deCraftMyPDF - Agregar encabezados: incluya la clave API y el tipo de contenido para la autenticación
- Preparar el cuerpo de la solicitud: crear un objeto JSON con datos de plantilla y opciones
- Enviar solicitud: ejecutar llamada API para generar PDF
- Gestionar respuesta: Descargar el PDF generado o mostrar el mensaje de error
¿Cuáles son las diferencias clave para los fundadores técnicos?
¿Cómo se comparan los enfoques basados en plantillas y los enfoques basados en código?
Basado en plantillas (CraftMyPDF):
- Los miembros del equipo no técnicos pueden crear y modificar plantillas.
- Las plantillas se gestionan de forma centralizada en el panel de control de la nube.
- Los cambios en las plantillas no requieren la implementación de código
- Limitado por restricciones de diseño de plantillas
- Ideal para documentos estandarizados con diseños predecibles
Código primero (IronPDF):
- Control total sobre el diseño del documento mediante HTML y CSS
- La compatibilidad con JavaScript permite realizar gráficos y cálculos dinámicos .
- Las plantillas son parte de la base del código con control de versiones.
- Flexibilidad de diseño ilimitada con cualquier tecnología web
- Ideal para documentos complejos y dinámicos que requieren lógica programática
Para las plantillas Razor , IronPDF proporciona soporte nativo en MVC Core , MVC Framework y Razor Pages .
¿Cuáles son las implicaciones en términos de costos a diferentes escalas?
Estructura de costos de CraftMyPDF:
- Nivel gratuito: 50 llamadas API/mes con límite de 3 plantillas
- Los planes pagos comienzan con tarifas mensuales más altas
- Los costos por PDF escalan linealmente con el volumen
- Cuotas de suscripción mensuales/anuales continuas
- Costos adicionales por funciones premium
Estructura de costos de IronPDF :
- Prueba gratuita para evaluación completa
- Licencia perpetua única desde $999
- Sin costos por PDF ni límites de uso
- Incluye un año de actualizaciones y soporte.
- Opciones de redistribución OEM para productos SaaS
Para aplicaciones que procesan más de 1000 archivos PDF por mes, la licencia perpetua de IronPDF ofrece costos predecibles sin tarifas continuas. La calculadora de licencias ayuda a estimar los costos totales de propiedad. Considere actualizaciones y extensiones para equipos en crecimiento.
¿En qué se diferencian los flujos de trabajo de desarrollo?
Flujo de trabajo de CraftMyPDF:
- El diseñador crea una plantilla en la interfaz web.
- El desarrollador asigna campos JSON a la plantilla
- La integración de API requiere configuración de autenticación
- Las pruebas requieren llamadas API y uso de crédito.
- Las actualizaciones de plantillas ocurren fuera de la implementación del código.
Flujo de trabajo de IronPDF :
- El desarrollador escribe la plantilla HTML/CSS en el código
- Pruebas locales sin límites de API
- Las plantillas se implementan con el código de la aplicación
- El control de versiones rastrea todos los cambios
- Integración de CI/CD para pruebas automatizadas
El enfoque autónomo de IronPDF permite ciclos de iteración más rápidos y desarrollo fuera de línea, cruciales para un desarrollo rápido. La biblioteca admite opciones de registro y representación personalizadas para la depuración.
¿Qué pasa con la privacidad y el cumplimiento de los datos?
Gestión de datos de CraftMyPDF:
- Documentos procesados en servidores en la nube
- Se requiere transmisión de datos a través de Internet.
- Puntos finales regionales para el cumplimiento
- Políticas de almacenamiento de archivos temporales
- Acuerdos de procesamiento de datos con terceros
Manejo de datos de IronPDF :
- El procesamiento local mantiene los datos locales
- Sin llamadas API externas ni requisitos de Internet
- Control total sobre la seguridad de los documentos
- Implementaciones compatibles con HIPAA y GDPR
- Opciones de cifrado para datos confidenciales
Para las aplicaciones que manejan datos confidenciales de clientes, el procesamiento local de IronPDF elimina las preocupaciones de privacidad de terceros. Las firmas digitales y la protección con contraseña proporcionan capas de seguridad adicionales. La biblioteca también admite los estándares PDF/A y PDF/UA para garantizar su cumplimiento.
Consideraciones específicas para España (LOPDGDD / RGPD):
Cuando una aplicación genera facturas o documentos que contienen datos personales de ciudadanos españoles y los envía a la API de CraftMyPDF, se aplican las siguientes obligaciones:
- Contrato de encargado (Art. 28 RGPD): El desarrollador/ISV actúa como responsable del tratamiento;
CraftMyPDFactúa como encargado. Debe existir un contrato que regule las instrucciones de tratamiento, los plazos de conservación y los procedimientos de notificación de brechas. - Transferencias internacionales de datos: Si los servidores de
CraftMyPDFestán fuera del EEE, se requieren garantías adecuadas (Cláusulas Contractuales Tipo de la Comisión Europea) o una decisión de adecuación vigente. El incumplimiento puede activar la supervisión de la AEPD (Agencia Española de Protección de Datos). - Evaluación de Impacto (EIPD): El tratamiento a gran escala de datos de facturación mediante procesadores externos puede requerir una Evaluación de Impacto relativa a la Protección de Datos conforme al Art. 35 RGPD.
- LOPDGDD Art. 28: La ley orgánica española refuerza los requisitos del RGPD sobre los contratos de encargado, añadiendo obligaciones específicas de auditoría y notificación aplicables en el territorio español.
IronPDF, ejecutado localmente en la infraestructura del ISV, elimina todos estos vectores: los datos de facturación nunca salen del entorno controlado, lo que simplifica la cadena de responsabilidad ante la AEPD y reduce el alcance de cualquier auditoría de cumplimiento.
¿Qué tan rápido puedo agregar nuevos tipos de documentos?
Cronograma de CraftMyPDF:
- Diseño de plantilla: 1-4 horas dependiendo de la complejidad
- Mapeo y pruebas de campo: 1-2 horas
- Depende de la disponibilidad del diseñador.
- Los flujos de trabajo de aprobación de plantillas pueden generar retrasos
- Limitado por las capacidades del editor
Cronología de IronPDF :
- Creación de plantilla HTML: 30 minutos a 2 horas
- Utilice marcos web existentes como Bootstrap
- Reutilizar hojas de estilo CSS en todos los documentos
- Pruebe localmente con retroalimentación inmediata
- Implementar nuevos tipos de documentos con lanzamientos regulares
El enfoque de código primero de IronPDF generalmente reduce el tiempo de comercialización de nuevos tipos de documentos, especialmente cuando se utilizan recursos y marcos web existentes. La biblioteca admite conversiones de RTF a PDF , DOCX a PDF y Markdown a PDF para mayor flexibilidad.
Guía de cumplimiento regulatorio para ISVs españoles: CraftMyPDF vs IronPDF
Para los equipos de desarrollo en España que construyen software de facturación, ERP o plataformas de gestión documental, la decisión entre CraftMyPDF e IronPDF implica un análisis regulatorio específico que no aparece en las comparativas genéricas:
Matriz de cumplimiento para el mercado español
| Requisito regulatorio | CraftMyPDF SaaS | IronPDF local |
|---|---|---|
| VeriFactu (RDL 8/2023) | No compatible — arquitectura cloud | Compatible — procesamiento local, VERI*FACTU |
| TicketBAI (Bizkaia, Gipuzkoa, Araba) | No compatible | Compatible — inserta QR foral en PDF |
| Facturae 3.2.x + PDF/A-3 (FACe) | No soportado | Compatible — PDF/A nativo |
| Firma PAdES/eIDAS (FNMT-RCM) | No disponible | Compatible — PdfSignature con FNMT |
| LOPDGDD (datos NIF/CIF en facturas) | Requiere contrato Art. 28 RGPD con CraftMyPDF | Sin transmisión — cumplimiento automático |
| AEPD — auditorías de protección de datos | Tercero procesador externo auditable | Perímetro interno — sin terceros |
| SII (Suministro Inmediato de Información) | No compatible | Compatible — genera PDFs localmente |
Análisis de impacto económico: coste total de cumplimiento
Para un ISV español que distribuye software de facturación a 50 clientes PYME:
Con CraftMyPDF:
- Coste API mensual por volumen de facturas: escalable con el crecimiento
- Tiempo legal para contrato de encargado Art. 28 RGPD: 2-4 semanas con asesor
- Riesgo de sanción AEPD si se omite el contrato: hasta 20M€ o 4% facturación
- Inviabilidad técnica para clientes sujetos a VeriFactu: pérdida de mercado
- Total coste de cumplimiento estimado: elevado e incierto
Con IronPDF:
- Licencia perpetua: coste fijo único sin escalado por volumen
- Sin contratos de encargado adicionales — datos nunca salen del ISV
- Soporte técnico para implementación VeriFactu/Facturae incluido
- Total coste de cumplimiento estimado: predecible y contenido
Este análisis es especialmente relevante considerando que la Ley Crea y Crece extenderá la facturación electrónica obligatoria B2B para 2027-2028, multiplicando el volumen de PDFs de facturas electrónicas gestionados por los ISVs españoles.
¿Cuáles son las opciones de licencia?

IronPDF ofrece licencias perpetuas con tarifas únicas. La licencia Lite ($999) soporta desarrolladores individuales en un proyecto. La licencia Professional ($1,499) cubre múltiples proyectos y desarrolladores. La licencia Enterprise ($2,999) atiende a equipos más grandes con necesidades extensas de despliegue. Cada licencia incluye un año de soporte y actualizaciones. Una licencia de redistribución OEM permite la distribución comercial. Hay una prueba gratuita disponible para evaluación. Ver opciones de licencia completas .
CraftMyPDF utiliza precios basados en suscripción. El nivel gratuito se adapta al desarrollo y las pruebas con llamadas API limitadas. Los planes pagos aumentan los límites de uso y agregan funciones, adaptándose a las necesidades del negocio. Las suscripciones se gestionan a través del panel de control de CraftMyPDF.
¿Qué documentación y soporte están disponibles?
¿Qué ofrece IronPDF en materia de documentación y soporte?
IronPDF proporciona documentación completa que incluye guías detalladas, ejemplos y una sección de inicio rápido . Los recursos cubren desde el uso básico hasta configuraciones avanzadas. Los canales de soporte incluyen una base de conocimientos, soporte por correo electrónico y solicitudes de soporte de ingeniería. El equipo de soporte opera 24 horas al día, 5 días a la semana para brindar asistencia inmediata. Las guías de solución de problemas abordan problemas comunes.
La documentación incluye referencias de API , tutoriales y ejemplos de código para todas las funciones. Los registros de cambios rastrean las actualizaciones y los hitos resaltan los lanzamientos principales. Para obtener asistencia con la migración, consulte las guías que comparan Aspose , iText , Syncfusion y otros competidores .
¿Qué ofrece CraftMyPdf para documentación y soporte?
CraftMyPDF ofrece documentación de API detallando puntos finales, parámetros y ejemplos. Las guías cubren la creación de plantillas, solicitudes de API y manejo de respuestas. El soporte está disponible a través del correo electrónico y los foros de la comunidad para preguntas y aportes.
Generación de facturas VeriFactu y Facturae con IronPDF en España
Para ISVs españoles que desarrollan software de facturación bajo VeriFactu (RDL 8/2023), el flujo de generación de PDF debe ocurrir íntegramente en local. El siguiente ejemplo muestra cómo generar una factura con todos los elementos obligatorios del marco VeriFactu usando IronPDF:
Factura VeriFactu con QR AEAT y firma FNMT-RCM
using IronPdf;
using IronPdf.Signing;
var renderer = new ChromePdfRenderer();
string htmlFactura = @"
<html>
<body>
<h2>FACTURA SIMPLIFICADA</h2>
<p><strong>VERI*FACTU</strong> — Registro verificable AEAT (RDL 8/2023)</p>
<table>
<tr><td>NIF Emisor:</td><td>B12345678</td></tr>
<tr><td>Número:</td><td>FS-2026-0143</td></tr>
<tr><td>Fecha:</td><td>28/05/2026</td></tr>
<tr><td>Base imponible (21% IVA):</td><td>2.345,67 €</td></tr>
<tr><td>Cuota IVA:</td><td>492,59 €</td></tr>
<tr><td>Total:</td><td>2.838,26 €</td></tr>
</table>
<img src='https://sede.agenciatributaria.gob.es/qr?nif=B12345678&num=FS-2026-0143&hash=SHA256XYZ'
width='80' height='80' alt='QR verificación AEAT'/>
<p style='font-size:8px;'>Verificar en sede.agenciatributaria.gob.es</p>
</body>
</html>";
var pdfFactura = renderer.RenderHtmlAsPdf(htmlFactura);
// Firma con certificado FNMT-RCM (PAdES conforme a eIDAS)
var firma = new IronPdf.Signing.PdfSignature(@"certificado_fnmt.pfx", "pin_fnmt")
{
SigningLocation = "Barcelona, España",
SigningReason = "Factura VeriFactu — RDL 8/2023"
};
pdfFactura.Sign(firma);
pdfFactura.SaveAs("FS-2026-0143_firmada.pdf");
using IronPdf;
using IronPdf.Signing;
var renderer = new ChromePdfRenderer();
string htmlFactura = @"
<html>
<body>
<h2>FACTURA SIMPLIFICADA</h2>
<p><strong>VERI*FACTU</strong> — Registro verificable AEAT (RDL 8/2023)</p>
<table>
<tr><td>NIF Emisor:</td><td>B12345678</td></tr>
<tr><td>Número:</td><td>FS-2026-0143</td></tr>
<tr><td>Fecha:</td><td>28/05/2026</td></tr>
<tr><td>Base imponible (21% IVA):</td><td>2.345,67 €</td></tr>
<tr><td>Cuota IVA:</td><td>492,59 €</td></tr>
<tr><td>Total:</td><td>2.838,26 €</td></tr>
</table>
<img src='https://sede.agenciatributaria.gob.es/qr?nif=B12345678&num=FS-2026-0143&hash=SHA256XYZ'
width='80' height='80' alt='QR verificación AEAT'/>
<p style='font-size:8px;'>Verificar en sede.agenciatributaria.gob.es</p>
</body>
</html>";
var pdfFactura = renderer.RenderHtmlAsPdf(htmlFactura);
// Firma con certificado FNMT-RCM (PAdES conforme a eIDAS)
var firma = new IronPdf.Signing.PdfSignature(@"certificado_fnmt.pfx", "pin_fnmt")
{
SigningLocation = "Barcelona, España",
SigningReason = "Factura VeriFactu — RDL 8/2023"
};
pdfFactura.Sign(firma);
pdfFactura.SaveAs("FS-2026-0143_firmada.pdf");
Imports IronPdf
Imports IronPdf.Signing
Dim renderer As New ChromePdfRenderer()
Dim htmlFactura As String = "
<html>
<body>
<h2>FACTURA SIMPLIFICADA</h2>
<p><strong>VERI*FACTU</strong> — Registro verificable AEAT (RDL 8/2023)</p>
<table>
<tr><td>NIF Emisor:</td><td>B12345678</td></tr>
<tr><td>Número:</td><td>FS-2026-0143</td></tr>
<tr><td>Fecha:</td><td>28/05/2026</td></tr>
<tr><td>Base imponible (21% IVA):</td><td>2.345,67 €</td></tr>
<tr><td>Cuota IVA:</td><td>492,59 €</td></tr>
<tr><td>Total:</td><td>2.838,26 €</td></tr>
</table>
<img src='https://sede.agenciatributaria.gob.es/qr?nif=B12345678&num=FS-2026-0143&hash=SHA256XYZ'
width='80' height='80' alt='QR verificación AEAT'/>
<p style='font-size:8px;'>Verificar en sede.agenciatributaria.gob.es</p>
</body>
</html>"
Dim pdfFactura = renderer.RenderHtmlAsPdf(htmlFactura)
' Firma con certificado FNMT-RCM (PAdES conforme a eIDAS)
Dim firma As New IronPdf.Signing.PdfSignature("certificado_fnmt.pfx", "pin_fnmt") With {
.SigningLocation = "Barcelona, España",
.SigningReason = "Factura VeriFactu — RDL 8/2023"
}
pdfFactura.Sign(firma)
pdfFactura.SaveAs("FS-2026-0143_firmada.pdf")
Este patrón funciona también para facturas TicketBAI (Bizkaia, Gipuzkoa, Araba): el QR se genera a partir del fichero .tbai firmado y se inserta en el PDF resultante. Para facturas Facturae 3.2.x destinadas a FACe (Administración General del Estado), el PDF adjunto se firma con el mismo certificado FNMT-RCM antes de su envío por el SII o por el portal FACe.
A diferencia de CraftMyPDF, que requiere enviar los datos de facturación (NIF, importes en EUR como 1.234,56 €, datos del destinatario) a servidores externos, IronPDF mantiene todos estos datos dentro del perímetro de la infraestructura del ISV, cumpliendo automáticamente con el principio de minimización de datos de la LOPDGDD y las obligaciones de encargado del tratamiento bajo el Art. 28 RGPD ante la AEPD.
Generación de documentos para el Modelo 347 y SII
Cuando una empresa supera el umbral de 3.005,06 € anuales en operaciones con un tercero, debe declararlas en el Modelo 347 ante la AEAT. IronPDF facilita la generación de los documentos justificativos en PDF, manteniendo coherencia con el formato Facturae y los registros del SII (Suministro Inmediato de Información):
// Generar listado Modelo 347 en PDF con IronPDF
var rendererModelo = new ChromePdfRenderer();
string htmlModelo347 = @"
<html>
<body>
<h2>RESUMEN OPERACIONES CON TERCEROS</h2>
<p>Declaración Informativa — Modelo 347 — AEAT</p>
<p>Ejercicio: 2025 | NIF Declarante: B87654321</p>
<table border='1'>
<tr><th>NIF/CIF Tercero</th><th>Nombre</th><th>Importe Anual</th></tr>
<tr><td>A12345678</td><td>Proveedor SA</td><td>45.678,90 €</td></tr>
<tr><td>B98765432</td><td>Cliente SL</td><td>12.345,00 €</td></tr>
</table>
<p><em>Generado con IronPDF — procesamiento local, cumplimiento LOPDGDD</em></p>
</body>
</html>";
var pdfModelo347 = rendererModelo.RenderHtmlAsPdf(htmlModelo347);
// Cifrado para protección de datos personales de contribuyentes (LOPDGDD Art. 32)
pdfModelo347.Password = "clave_acceso_restringido";
pdfModelo347.SaveAs("modelo347_2025_b87654321.pdf");
// Generar listado Modelo 347 en PDF con IronPDF
var rendererModelo = new ChromePdfRenderer();
string htmlModelo347 = @"
<html>
<body>
<h2>RESUMEN OPERACIONES CON TERCEROS</h2>
<p>Declaración Informativa — Modelo 347 — AEAT</p>
<p>Ejercicio: 2025 | NIF Declarante: B87654321</p>
<table border='1'>
<tr><th>NIF/CIF Tercero</th><th>Nombre</th><th>Importe Anual</th></tr>
<tr><td>A12345678</td><td>Proveedor SA</td><td>45.678,90 €</td></tr>
<tr><td>B98765432</td><td>Cliente SL</td><td>12.345,00 €</td></tr>
</table>
<p><em>Generado con IronPDF — procesamiento local, cumplimiento LOPDGDD</em></p>
</body>
</html>";
var pdfModelo347 = rendererModelo.RenderHtmlAsPdf(htmlModelo347);
// Cifrado para protección de datos personales de contribuyentes (LOPDGDD Art. 32)
pdfModelo347.Password = "clave_acceso_restringido";
pdfModelo347.SaveAs("modelo347_2025_b87654321.pdf");
Imports IronPdf
' Generar listado Modelo 347 en PDF con IronPDF
Dim rendererModelo As New ChromePdfRenderer()
Dim htmlModelo347 As String = "
<html>
<body>
<h2>RESUMEN OPERACIONES CON TERCEROS</h2>
<p>Declaración Informativa — Modelo 347 — AEAT</p>
<p>Ejercicio: 2025 | NIF Declarante: B87654321</p>
<table border='1'>
<tr><th>NIF/CIF Tercero</th><th>Nombre</th><th>Importe Anual</th></tr>
<tr><td>A12345678</td><td>Proveedor SA</td><td>45.678,90 €</td></tr>
<tr><td>B98765432</td><td>Cliente SL</td><td>12.345,00 €</td></tr>
</table>
<p><em>Generado con IronPDF — procesamiento local, cumplimiento LOPDGDD</em></p>
</body>
</html>"
Dim pdfModelo347 = rendererModelo.RenderHtmlAsPdf(htmlModelo347)
' Cifrado para protección de datos personales de contribuyentes (LOPDGDD Art. 32)
pdfModelo347.Password = "clave_acceso_restringido"
pdfModelo347.SaveAs("modelo347_2025_b87654321.pdf")
¿Qué solución PDF debo elegir?
Tanto IronPDF como CraftMyPDF ofrecen capaces soluciones de generación de PDF con enfoques distintos. CraftMyPDF sobresale con su diseñador de plantillas visuales y procesamiento basado en la nube, mientras que IronPDF proporciona control programático completo a través de renderizado HTML.
Para proyectos en España: si su aplicación genera facturas electrónicas (Facturae XML), opera bajo el sistema VeriFactu o emite documentos con datos personales de ciudadanos españoles, el modelo SaaS de CraftMyPDF introduce vectores de cumplimiento LOPDGDD que deben gestionarse activamente. IronPDF, desplegado como componente local dentro de la infraestructura del ISV, ofrece procesamiento en local sin transferencias de datos a terceros, facilitando la conformidad con la AEPD y la correcta cadena de responsabilidad bajo la LOPDGDD y el RGPD.
IronPDF se destaca por su amplio conjunto de funciones para requisitos de documentos complejos. Convierte HTML , URL y archivos a PDF y admite funciones avanzadas como firmas digitales , manejo de formularios y edición de documentos . La implementación autónoma sin dependencias externas garantiza un funcionamiento confiable en todas las plataformas .
Los modelos de licencia difieren significativamente. Las licencias perpetuas de IronPDF comienzan en $999 con una prueba gratuita para evaluación. El paquete Iron Suite ofrece nueve productos por el precio de dos, lo que proporciona un valor excepcional para necesidades completas de gestión de documentos.
Para los desarrolladores que requieren control total sobre la generación de PDF con soporte HTML/CSS enriquecido, manipulación avanzada de documentos y costos predecibles, IronPDF ofrece una solución confiable. Su extensa documentación , soporte receptivo y opciones de implementación flexibles lo hacen adecuado para aplicaciones que van desde la generación simple de documentos hasta flujos de trabajo empresariales complejos.
CraftMyPDF es una marca registrada de su propietario respectivo. Este sitio no está afiliado, respaldado ni patrocinado por CraftMyPDF. Todos los nombres de producto, logotipos y marcas son propiedad de sus respectivos dueños. Las comparaciones son solo para fines informativos y reflejan información públicamente disponible en el momento de la redacción.Preguntas Frecuentes
¿Por qué CraftMyPDF SaaS activa obligaciones LOPDGDD para ISVs que generan facturas en España?
Cuando una aplicación envía datos de facturación a la API de CraftMyPDF, el ISV asume el rol de responsable del tratamiento y CraftMyPDF actúa como encargado bajo el Art. 28 RGPD (reforzado por la LOPDGDD española). Se requiere un contrato de encargado que regule instrucciones de tratamiento, plazos de conservación y procedimientos de notificación de brechas. Si los servidores de CraftMyPDF están fuera del EEE, se requieren Cláusulas Contractuales Tipo. La AEPD puede imponer sanciones de hasta 20 millones de euros o el 4 % del volumen de negocio mundial.
¿Tiene IronPDF ventajas para aplicaciones españolas con VeriFactu (RDL 8/2023) o TicketBAI?
Sí. IronPDF opera como componente local dentro de la infraestructura del ISV, por lo que los datos de las facturas (NIF, CIF, importes EUR, contenido VERI*FACTU) nunca salen del entorno controlado. Esto elimina la cadena de encargados con terceros y simplifica la conformidad con la AEPD bajo la LOPDGDD. Además, IronPDF soporta firma PAdES con certificados FNMT-RCM para cumplimiento eIDAS, esencial para facturas Facturae enviadas a FACe.
¿Cómo genero una factura con la leyenda VERI*FACTU y el QR AEAT usando IronPDF?
Con IronPDF, se renderiza una plantilla HTML que incluye la leyenda VERI*FACTU, el bloque QR AEAT (URL de verificación + hash SHA-256 del registro de alta) y los datos de la factura con formato español (1.234,56 €). Usando ChromePdfRenderer.RenderHtmlAsPdf() se genera el PDF localmente, sin llamadas a APIs externas, y se firma con IronPdf.Signing.PdfSignature usando el certificado FNMT-RCM de la empresa.
¿IronPDF es compatible con la generación de facturas Facturae 3.2.x para FACe?
IronPDF genera el PDF adjunto a los ficheros Facturae 3.2.x que se envían a FACe (portal de facturación electrónica de la Administración General del Estado). El PDF se firma con certificados FNMT-RCM Clase 3 de representación mediante la clase PdfSignature, generando una firma PAdES conforme a eIDAS. Todo el proceso ocurre localmente sin transmitir datos a terceros.
¿Cómo protejo documentos PDF con datos de contribuyentes bajo la LOPDGDD?
IronPDF permite cifrar PDFs con contraseña de usuario y propietario, y configurar permisos granulares (impresión, edición, copia) mediante SecuritySettings. Para documentos con NIF, CIF, domicilio fiscal o datos económicos protegidos bajo el artículo 32 del RGPD y la LOPDGDD, se recomienda cifrar el PDF con pdf.Password y pdf.OwnerPassword antes del archivado, garantizando la confidencialidad en reposo.
¿Cuáles son las ventajas de usar una biblioteca PDF de C# sobre una solución basada en API para facturación española?
Una biblioteca local como IronPDF ofrece: procesamiento sin transmisión de datos personales (NIF, CIF) a terceros (cumplimiento LOPDGDD sin contratos de encargado adicionales), operación offline compatible con VeriFactu y TicketBAI, firma PAdES con FNMT-RCM, generación de PDFs con importes en formato español (1.234,56 €) y coste predecible mediante licencia perpetua sin tarifas por volumen de facturas.
¿Cómo maneja IronPDF las conversiones de HTML a PDF para facturas en C#?
IronPDF convierte HTML a PDF usando ChromePdfRenderer.RenderHtmlAsPdf(), con soporte completo de HTML5, CSS3 y JavaScript. Para facturas españolas, permite formatear importes en EUR (1.234,56 €), insertar QR AEAT y la leyenda VERI*FACTU, y aplicar estilos corporativos con Bootstrap 5, todo de forma local sin dependencias externas.
¿Cómo instalo IronPDF en una aplicación C#?
IronPDF se puede instalar a través del Administrador de paquetes NuGet en Visual Studio, usando la Consola del Administrador de paquetes NuGet o descargando el paquete directamente del sitio web de NuGet. No requiere dependencias externas adicionales ni conexión a internet en producción.



