Cómo migrar de Scryber.Core a IronPDF en C#
Migrar de Scryber.Core a IronPDF: Guía completa de migración de C
La migración de Scryber.Core aIronPDFtransforma el flujo de trabajo de generación de PDF de un motor de análisis XML/HTML personalizado a un moderno renderizador basado en Cromocon compatibilidad total con CSS3 y JavaScript. Esta guía proporciona una ruta de migración completa, paso a paso, que elimina los problemas de licencia LGPL, la sintaxis de plantilla propietaria y las capacidades de renderizado limitadas.
Por qué migrar de Scryber.Core a IronPDF
Entendiendo Scryber.Core
Scryber.Core es una biblioteca de código abierto que transforma plantillas HTML en PDF utilizando C#. Esta capacidad lo convierte en una herramienta atractiva para desarrolladores familiarizados con el desarrollo web y HTML. A diferencia de otras soluciones PDF que requieren conocimientos específicos de codificación de documentos, Scryber.Core aprovecha la versatilidad de HTML y las capacidades de estilo CSS para ofrecer un enfoque de generación de PDF más intuitivo.
Aunque Scryber.Core es una opción viable para muchos desarrolladores, principalmente debido a su alineación ideológica con los principios del código abierto y la flexibilidad que ofrece, no está exento de limitaciones.
Razones clave para migrar
- Preocupaciones sobre la licencia LGPL: La licencia LGPL exige que cualquier modificación de la propia biblioteca sea de código abierto, lo que puede ser limitante para algunas aplicaciones comerciales
- Sintaxis de plantilla personalizada: La sintaxis de vinculación propietaria requiere una curva de aprendizaje
- Soporte CSS limitado: No es un renderizador completo basado en navegador
- Comunidad más pequeña: Menos documentación y ejemplos de la comunidad
- Sin ejecución de JavaScript: Sólo renderización estática
- Configuración compleja: enfoque de configuración basado en XML
- Soporte comercial limitado: Scryber.Core está soportado principalmente por la comunidad
Comparación entre Scryber.Core e IronPDF
| Aspecto | Scryber.Core | IronPDF |
|---|---|---|
| Licencia | LGPL (restrictiva) | Comercial |
| Motor de renderizado | A medida | Cromo |
| Soporte CSS | Limitado | CSS3 completo |
| JavaScript | No | ES2024 completo |
| Vinculación de plantillas | XML propietario | Estándar (Razor, etc.) |
| Curva de aprendizaje | Sintaxis personalizada | HTML/CSSestándar |
| Soporte de Async | Limitado | Completo |
| Documentación | Básico | Amplia |
| Apoyo a la comunidad | Más pequeño | Sitio web de gran tamaño |
| Soporte comercial | Limitado | Asistencia profesional incluida |
IronPDF ofrece soporte comercial de nivel empresarial, amplia documentación y una comunidad más grande en comparación con Scryber.Core. La biblioteca ofrece opciones de licencia más flexibles sin restricciones LGPL, lo que la hace ideal para aplicaciones comerciales.
Para los equipos que planean la adopción de .NET 10 y C# 14 hasta 2025 y 2026, el moderno motor CromodeIronPDFproporciona compatibilidad total con los estándares web contemporáneos.
Antes de empezar
Prerrequisitos
- <Entorno .NET: .NET Framework 4.6.2+ o .NET Core 3.1+ / .NET 5/6/7/8/9+
- Acceso a NuGet: Capacidad para instalar paquetes NuGet
- Licencia IronPDF: Obtenga su clave de licencia en ironpdf.com
Cambios en el paquete NuGet
# Remove Scryber.Core
dotnet remove package Scryber.Core
# Install IronPDF
dotnet add package IronPdf# Remove Scryber.Core
dotnet remove package Scryber.Core
# Install IronPDF
dotnet add package IronPdfConfiguración de licencias
// Add at application startup
IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY";// Add at application startup
IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY";IRON VB CONVERTER ERROR developers@ironsoftware.comReferencia completa de la API
Cambios en el espacio de nombres
// Before: Scryber.Core
using Scryber.Components;
using Scryber.Components.Pdf;
using Scryber.PDF;
using Scryber.Styles;
using Scryber.Core;
using Scryber.Core.Html;
using Scryber.Drawing;
// After: IronPDF
using IronPdf;
using IronPdf.Rendering;// Before: Scryber.Core
using Scryber.Components;
using Scryber.Components.Pdf;
using Scryber.PDF;
using Scryber.Styles;
using Scryber.Core;
using Scryber.Core.Html;
using Scryber.Drawing;
// After: IronPDF
using IronPdf;
using IronPdf.Rendering;IRON VB CONVERTER ERROR developers@ironsoftware.comCore API Mappings
| Scryber.Core | IronPDF | Notas |
|---|---|---|
| <código>Document.ParseDocument(html)</código | renderer.RenderHtmlAsPdf(html) | Traducción HTML |
Document.ParseTemplate(ruta) | <código>renderer.RenderHtmlFileAsPdf(ruta)</código | Representación de archivos |
doc.SaveAsPDF(ruta) | <código>pdf.SaveAs(ruta)</código | Guardar en archivo |
| <código>doc.SaveAsPDF(stream)</código | pdf.Stream o pdf.BinaryData | Obtener flujo/bytes |
doc.Info.Title | <código>pdf.MetaData.Title</código | Metadatos |
doc.Info.Autor | <código>pdf.MetaData.Author</código | Metadatos |
Página PDF | pdf.Pages[i] | Acceso a la página |
| <código>PDFLayoutDocument</código | <código>RenderingOptions</código | Control de maquetación |
| <código>PDFStyle</código | CSS en HTML | Estilización |
| <código>doc.RenderOptions.PaperSize</código | <código>RenderingOptions.PaperSize</código | Tamaño del papel |
Enlace de datos ({{value}}) | Interpolación Razor/String | Plantillas |
Ejemplos de migración de código
Ejemplo 1: Conversión básica de HTML a PDF
Antes (Scryber.Core):
// NuGet: Install-Package Scryber.Core
using Scryber.Core;
using Scryber.Core.Html;
using System.IO;
class Program
{
static void Main()
{
string html = "<html><body><h1>Hello World</h1><p>This is a PDF document.</p></body></html>";
using (var doc = Document.ParseDocument(html, ParseSourceType.DynamicContent))
{
doc.SaveAsPDF("output.pdf");
}
}
}// NuGet: Install-Package Scryber.Core
using Scryber.Core;
using Scryber.Core.Html;
using System.IO;
class Program
{
static void Main()
{
string html = "<html><body><h1>Hello World</h1><p>This is a PDF document.</p></body></html>";
using (var doc = Document.ParseDocument(html, ParseSourceType.DynamicContent))
{
doc.SaveAsPDF("output.pdf");
}
}
}IRON VB CONVERTER ERROR developers@ironsoftware.comDespués (IronPDF):
// NuGet: Install-Package IronPdf
using IronPdf;
class Program
{
static void Main()
{
var renderer = new ChromePdfRenderer();
string html = "<html><body><h1>Hello World</h1><p>This is a PDF document.</p></body></html>";
var pdf = renderer.RenderHtmlAsPdf(html);
pdf.SaveAs("output.pdf");
}
}// NuGet: Install-Package IronPdf
using IronPdf;
class Program
{
static void Main()
{
var renderer = new ChromePdfRenderer();
string html = "<html><body><h1>Hello World</h1><p>This is a PDF document.</p></body></html>";
var pdf = renderer.RenderHtmlAsPdf(html);
pdf.SaveAs("output.pdf");
}
}IRON VB CONVERTER ERROR developers@ironsoftware.comEste ejemplo demuestra la diferencia arquitectónica fundamental. Scryber.Core utiliza Document.ParseDocument() con un parámetro ParseSourceType.DynamicContent para analizar el contenido HTML, lo que requiere un bloque using para su correcta eliminación. A continuación, el documento se guarda con SaveAsPDF().
IronPDF utiliza una instancia de ChromePdfRenderer con RenderHtmlAsPdf() para renderizar HTML directamente. El PDF se guarda con SaveAs(). No es necesaria la eliminación manual:IronPDFse encarga de la limpieza automáticamente. Consulte la documentación HTML a PDF para ver ejemplos completos.
Ejemplo 2: Conversión de URL a PDF
Antes (Scryber.Core):
// NuGet: Install-Package Scryber.Core
using Scryber.Core;
using Scryber.Core.Html;
using System.Net.Http;
using System.Threading.Tasks;
class Program
{
static async Task Main()
{
using var client = new HttpClient();
string html = await client.GetStringAsync("https://www.example.com");
using (var doc = Document.ParseDocument(html, ParseSourceType.DynamicContent))
{
doc.SaveAsPDF("webpage.pdf");
}
}
}// NuGet: Install-Package Scryber.Core
using Scryber.Core;
using Scryber.Core.Html;
using System.Net.Http;
using System.Threading.Tasks;
class Program
{
static async Task Main()
{
using var client = new HttpClient();
string html = await client.GetStringAsync("https://www.example.com");
using (var doc = Document.ParseDocument(html, ParseSourceType.DynamicContent))
{
doc.SaveAsPDF("webpage.pdf");
}
}
}IRON VB CONVERTER ERROR developers@ironsoftware.comDespués (IronPDF):
// NuGet: Install-Package IronPdf
using IronPdf;
class Program
{
static void Main()
{
var renderer = new ChromePdfRenderer();
var pdf = renderer.RenderUrlAsPdf("https://www.example.com");
pdf.SaveAs("webpage.pdf");
}
}// NuGet: Install-Package IronPdf
using IronPdf;
class Program
{
static void Main()
{
var renderer = new ChromePdfRenderer();
var pdf = renderer.RenderUrlAsPdf("https://www.example.com");
pdf.SaveAs("webpage.pdf");
}
}IRON VB CONVERTER ERROR developers@ironsoftware.comScryber.Core no puede convertir directamente URL a PDF. Debe obtener manualmente el contenido HTML mediante HttpClient.GetStringAsync() y, a continuación, analizar el HTML descargado con Document.ParseDocument(). Este enfoque no tiene en cuenta la ejecución de JavaScript, el contenido dinámico y la resolución adecuada de CSS porque el analizador personalizado no ejecuta secuencias de comandos.
El método RenderUrlAsPdf() deIronPDFgestiona todo el proceso en una sola llamada, incluida la ejecución completa de JavaScripty la renderización de CSS con su motor Chromium. Obtenga más información en nuestros tutoriales.
Ejemplo 3: Configuración de página personalizada y márgenes
Antes (Scryber.Core):
// NuGet: Install-Package Scryber.Core
using Scryber.Core;
using Scryber.Core.Html;
using Scryber.Drawing;
using System.IO;
class Program
{
static void Main()
{
string html = "<html><body><h1>Custom PDF</h1><p>With custom margins and settings.</p></body></html>";
using (var doc = Document.ParseDocument(html, ParseSourceType.DynamicContent))
{
doc.RenderOptions.Compression = OutputCompressionType.FlateDecode;
doc.RenderOptions.PaperSize = PaperSize.A4;
doc.SaveAsPDF("custom.pdf");
}
}
}// NuGet: Install-Package Scryber.Core
using Scryber.Core;
using Scryber.Core.Html;
using Scryber.Drawing;
using System.IO;
class Program
{
static void Main()
{
string html = "<html><body><h1>Custom PDF</h1><p>With custom margins and settings.</p></body></html>";
using (var doc = Document.ParseDocument(html, ParseSourceType.DynamicContent))
{
doc.RenderOptions.Compression = OutputCompressionType.FlateDecode;
doc.RenderOptions.PaperSize = PaperSize.A4;
doc.SaveAsPDF("custom.pdf");
}
}
}IRON VB CONVERTER ERROR developers@ironsoftware.comDespués (IronPDF):
// NuGet: Install-Package IronPdf
using IronPdf;
using IronPdf.Rendering;
class Program
{
static void Main()
{
var renderer = new ChromePdfRenderer();
renderer.RenderingOptions.PaperSize = PdfPaperSize.A4;
renderer.RenderingOptions.MarginTop = 40;
renderer.RenderingOptions.MarginBottom = 40;
string html = "<html><body><h1>Custom PDF</h1><p>With custom margins and settings.</p></body></html>";
var pdf = renderer.RenderHtmlAsPdf(html);
pdf.SaveAs("custom.pdf");
}
}// NuGet: Install-Package IronPdf
using IronPdf;
using IronPdf.Rendering;
class Program
{
static void Main()
{
var renderer = new ChromePdfRenderer();
renderer.RenderingOptions.PaperSize = PdfPaperSize.A4;
renderer.RenderingOptions.MarginTop = 40;
renderer.RenderingOptions.MarginBottom = 40;
string html = "<html><body><h1>Custom PDF</h1><p>With custom margins and settings.</p></body></html>";
var pdf = renderer.RenderHtmlAsPdf(html);
pdf.SaveAs("custom.pdf");
}
}IRON VB CONVERTER ERROR developers@ironsoftware.comScryber.Core utiliza doc.RenderOptions para configurar los ajustes de salida como Compression (establecido en OutputCompressionType.FlateDecode) y PaperSize (establecido en PaperSize.A4) después de analizar el documento.
IronPDF utiliza <código>RenderingOptions</códigoen el renderizador antes de renderizar. Las propiedades incluyen PaperSize (ajustado a PdfPaperSize.A4), MarginTop y MarginBottom ajustados en milímetros. La diferencia clave es queIronPDFproporciona un control directo de los márgenes mediante propiedades numéricas, mientras que Scryber.Core utiliza estilos basados en XML.
Patrones de migración de plantillas
Migración de enlaces propietarios a plantillas estándar
Scryber.Core utiliza una sintaxis propia de vinculación basada en XML que debe convertirse a plantillas estándar:
Enlace de Scryber.Core:
<pdf:Para text='{{model.Name}}' />
<pdf:Para text='Total: {{model.Total:C}}' />
<pdf:ForEach on='{{model.Items}}'>
<pdf:Para text='{{.Name}}: {{.Price}}' />
</pdf:ForEach><pdf:Para text='{{model.Name}}' />
<pdf:Para text='Total: {{model.Total:C}}' />
<pdf:ForEach on='{{model.Items}}'>
<pdf:Para text='{{.Name}}: {{.Price}}' />
</pdf:ForEach>IronPDF con interpolación de cadenas en C#:
var items = model.Items.Select(i => $"<li>{i.Name}: {i.Price:C}</li>");
var html = $@"
<p>{model.Name}</p>
<p>Total: {model.Total:C}</p>
<ul>
{string.Join("", items)}
</ul>";
var renderer = new ChromePdfRenderer();
var pdf = renderer.RenderHtmlAsPdf(html);var items = model.Items.Select(i => $"<li>{i.Name}: {i.Price:C}</li>");
var html = $@"
<p>{model.Name}</p>
<p>Total: {model.Total:C}</p>
<ul>
{string.Join("", items)}
</ul>";
var renderer = new ChromePdfRenderer();
var pdf = renderer.RenderHtmlAsPdf(html);IRON VB CONVERTER ERROR developers@ironsoftware.comLa ventaja clave:IronPDFutiliza C# y HTML estándar, por lo que se puede utilizar cualquier motor de plantillas (Razor, Handlebars, etc.) en lugar de aprender sintaxis propietaria.
Migración de encabezados y pies de página
Scryber.Core (encabezado/pie basado en XML):
<?xml version='1.0' encoding='utf-8' ?>
<pdf:Document xmlns:pdf='http://www.scryber.co.uk/schemas/core/release/v1/Scryber.Components.xsd'>
<Pages>
<pdf:Section>
<Header>
<pdf:Para text='Company Report' />
</Header>
<Footer>
<pdf:Para text='Page {{pagenum}} of {{pagetotal}}' />
</Footer>
<Content>
<pdf:H1 text='Content Here' />
</Content>
</pdf:Section>
</Pages>
</pdf:Document><?xml version='1.0' encoding='utf-8' ?>
<pdf:Document xmlns:pdf='http://www.scryber.co.uk/schemas/core/release/v1/Scryber.Components.xsd'>
<Pages>
<pdf:Section>
<Header>
<pdf:Para text='Company Report' />
</Header>
<Footer>
<pdf:Para text='Page {{pagenum}} of {{pagetotal}}' />
</Footer>
<Content>
<pdf:H1 text='Content Here' />
</Content>
</pdf:Section>
</Pages>
</pdf:Document>IronPDF (encabezados/pies de página HTML):
using IronPdf;
var renderer = new ChromePdfRenderer();
// HTML header with full CSS support
renderer.RenderingOptions.HtmlHeader = new HtmlHeaderFooter
{
HtmlFragment = @"
<div style='width: 100%; text-align: center; font-size: 12pt; border-bottom: 1px solid #ccc;'>
Company Report
</div>",
MaxHeight = 30
};
// HTML footer with page numbers
renderer.RenderingOptions.HtmlFooter = new HtmlHeaderFooter
{
HtmlFragment = @"
<div style='width: 100%; text-align: center; font-size: 10pt;'>
Page {page} of {total-pages}
</div>",
MaxHeight = 25
};
var pdf = renderer.RenderHtmlAsPdf("<h1>Content Here</h1>");
pdf.SaveAs("report.pdf");using IronPdf;
var renderer = new ChromePdfRenderer();
// HTML header with full CSS support
renderer.RenderingOptions.HtmlHeader = new HtmlHeaderFooter
{
HtmlFragment = @"
<div style='width: 100%; text-align: center; font-size: 12pt; border-bottom: 1px solid #ccc;'>
Company Report
</div>",
MaxHeight = 30
};
// HTML footer with page numbers
renderer.RenderingOptions.HtmlFooter = new HtmlHeaderFooter
{
HtmlFragment = @"
<div style='width: 100%; text-align: center; font-size: 10pt;'>
Page {page} of {total-pages}
</div>",
MaxHeight = 25
};
var pdf = renderer.RenderHtmlAsPdf("<h1>Content Here</h1>");
pdf.SaveAs("report.pdf");IRON VB CONVERTER ERROR developers@ironsoftware.comScryber.Core requiere una definición de encabezado/pie de página basada en XML con marcadores de posición propios como {{pagenum}} y {{pagetotal}}.IronPDFutiliza HTML/CSScompleto para encabezados y pies de página con {page} y {total-pages} marcadores de posición.
Nuevas capacidades tras la migración
Tras migrar a IronPDF, obtendrá funciones que Scryber.Core no puede ofrecer:
Fusión de PDF
var pdf1 = PdfDocument.FromFile("chapter1.pdf");
var pdf2 = PdfDocument.FromFile("chapter2.pdf");
var pdf3 = PdfDocument.FromFile("chapter3.pdf");
var merged = PdfDocument.Merge(pdf1, pdf2, pdf3);
merged.SaveAs("complete_book.pdf");var pdf1 = PdfDocument.FromFile("chapter1.pdf");
var pdf2 = PdfDocument.FromFile("chapter2.pdf");
var pdf3 = PdfDocument.FromFile("chapter3.pdf");
var merged = PdfDocument.Merge(pdf1, pdf2, pdf3);
merged.SaveAs("complete_book.pdf");IRON VB CONVERTER ERROR developers@ironsoftware.comSeguridad y metadatos
var renderer = new ChromePdfRenderer();
var pdf = renderer.RenderHtmlAsPdf("<h1>Confidential</h1>");
// Metadata
pdf.MetaData.Title = "My Document";
pdf.MetaData.Author = "John Doe";
pdf.MetaData.Subject = "Annual Report";
pdf.MetaData.Keywords = "report, annual, confidential";
// Security
pdf.SecuritySettings.OwnerPassword = "owner123";
pdf.SecuritySettings.UserPassword = "user456";
pdf.SecuritySettings.AllowUserCopyPasteContent = false;
pdf.SecuritySettings.AllowUserPrinting = PdfPrintSecurity.FullPrintRights;
pdf.SaveAs("protected.pdf");var renderer = new ChromePdfRenderer();
var pdf = renderer.RenderHtmlAsPdf("<h1>Confidential</h1>");
// Metadata
pdf.MetaData.Title = "My Document";
pdf.MetaData.Author = "John Doe";
pdf.MetaData.Subject = "Annual Report";
pdf.MetaData.Keywords = "report, annual, confidential";
// Security
pdf.SecuritySettings.OwnerPassword = "owner123";
pdf.SecuritySettings.UserPassword = "user456";
pdf.SecuritySettings.AllowUserCopyPasteContent = false;
pdf.SecuritySettings.AllowUserPrinting = PdfPrintSecurity.FullPrintRights;
pdf.SaveAs("protected.pdf");IRON VB CONVERTER ERROR developers@ironsoftware.comResumen comparativo de características
| Característica | Scryber.Core | IronPDF |
|---|---|---|
| HTML a PDF | Básico | Cromocompleto |
| URL a PDF | Búsqueda manual | Soporte nativo |
| Rejilla CSS | Limitado | Soporte completo |
| Flexbox | Limitado | Soporte completo |
| JavaScript | No | ES2024 completo |
| Vinculación de datos | XML propietario | Utilizar Razor/Handlebars |
| Encabezados/pies de página | Basado en XML | HTML/CSS |
| Fusionar PDF | Limitado | Incorporado en |
| Dividir PDF | No | Sí |
| Marcas de agua | Básico | HTML completo |
| Firmas digitales | No | Sí |
| PDF/A | No | Sí |
| Protección por contraseña | Básico | Completo |
| Soporte de Async | Limitado | Completo |
| Multiplataforma | Sí | Sí |
Lista de comprobación de la migración
Pre-Migración
- [Auditoría de todas las plantillas Scryber en busca de patrones XML/binding
- [ ] Patrones de vinculación de datos de documentos utilizados (
{{model.Property}}) - [ ] Identificar estilos personalizados que necesitan conversión CSS
- [ ] Obtenga la clave de licencia deIronPDFen ironpdf.com
Actualizaciones de código
- [ ] Eliminar el paquete NuGet
Scryber.Core - [ ] Instalar
IronPdfpaquete NuGet - [ ] Actualizar las importaciones de espacios de nombres (
using Scryber.Core;→using IronPDF;) - [Reemplace
Document.ParseDocument(html, ParseSourceType.DynamicContent)porrenderer.RenderHtmlAsPdf(html) - [Reemplace
doc.SaveAsPDF()porpdf.SaveAs() - [ ] Convertir plantillas XML a HTML
- [ ] Sustituir la vinculación propietaria por plantillas estándar (Razor/interpolación de cadenas)
- [ ] Actualizar la configuración de la página:
doc.RenderingOptions.PaperSize→renderer.RenderingOptions.PaperSize - [ ] Convertir encabezados/pies de página a formato HTML con marcadores de posición
{page}y{total-pages} - [ ] Añadir inicialización de licencia al inicio de la aplicación
Pruebas
- [ ] Probar todas las plantillas de documentos
- [ ] Verificar que el estilo coincida (aprovechar la compatibilidad total con CSS)
- [ ] Prueba de vinculación de datos con nuevas plantillas
- [ ] Comprobar los saltos de página
- [ ] Prueba de encabezados/pies de página con marcadores de posición de número de página
- [Comparación de rendimiento
Conclusión
A la hora de elegir entre Scryber.Core e IronPDF, en última instancia todo se reduce a los requisitos del proyecto, el presupuesto y el nivel de asistencia deseado. Para proyectos en los que las licencias de código abierto se ajustan al modelo de negocio y se prefieren las plantillas HTML, Scryber.Core proporciona una base sólida. Para las empresas que buscan una plataforma con soporte comercial y con el respaldo de una amplia comunidad,IronPDFes la opción preferible.
Los cambios clave en esta migración son:
- Motor de renderizado: Analizador sintáctico personalizado → Basado en Chromium
- Soporte CSS: Limitada → CSS3 completa
- JavaScript: No compatible → ES2024 completo
- Licencias: LGPL (restrictiva) → Comercial (flexible)
- Procesamiento HTML:
Document.ParseDocument(html, ParseSourceType.DynamicContent)→renderer.RenderHtmlAsPdf(html) - Renderizado de URL: Manual
HttpClientfetch → NativeRenderUrlAsPdf() - Configuración de página:
doc.RenderingOptions.PaperSize = PaperSize.A4→renderer.RenderingOptions.PaperSize = PdfPaperSize.A4 - Margenes: estilos XML →
renderer.RenderingOptions.MarginTop = 40(mm numéricos) - Método Save:
doc.SaveAsPDF()→pdf.SaveAs() - Data Binding: Sintaxis
{{value}}propietaria → C#/Razor estándar - Cabeceras/Pies de página: XML con
{{pagenum}}→ HTML con{page} - Nuevas funciones: Fusión y división de PDF, marcas de agua, firmas digitales, PDF/A, seguridad total
Explore la documentación completa de IronPDF, tutoriales y referencia de API para acelerar su migración a Scryber.Core.






