Passer au contenu du pied de page
GUIDES DE MIGRATION

Comment migrer de Scryber.Core vers IronPDF en C#

La migration de Scryber.Core versIronPDFtransforme votre flux de production de PDF d'un moteur d'analyse XML/HTML personnalisé à un moteur de rendu moderne alimenté par Chromeavec une prise en charge complète de CSS3 et de JavaScript. Ce guide fournit un chemin de migration complet, étape par étape, qui élimine les problèmes de licence LGPL, la syntaxe propriétaire des modèles et les capacités de rendu limitées.

Pourquoi migrer de Scryber.Core vers IronPDF

Comprendre Scryber.Core

Scryber.Core est une bibliothèque open-source qui transforme les modèles HTML en PDF à l'aide de C#. Cette capacité en fait un outil intéressant pour les développeurs familiers du développement web et du langage HTML. Contrairement à d'autres solutions PDF qui requièrent des compétences spécifiques en matière de codage de documents, Scryber.Core tire parti de la polyvalence du HTML et des capacités de stylisme CSS pour offrir une approche plus intuitive de la génération de PDF.

Bien que Scryber.Core soit une option viable pour de nombreux développeurs, principalement en raison de son alignement idéologique sur les principes du logiciel libre et de la flexibilité qu'il offre, il n'est pas sans limites.

Principales raisons de migrer

  1. Problèmes liés à la licence LGPL : La licence LGPL exige que toute modification apportée à la bibliothèque elle-même soit publiée en open source, ce qui peut s'avérer limitant pour certaines applications commerciales.
  2. Syntaxe des modèles personnalisés : La syntaxe de liaison propriétaire nécessite un apprentissage.
  3. Prise en charge CSS limitée : moteur de rendu non complet basé sur le navigateur
  4. Communauté plus restreinte : moins de documentation et d'exemples communautaires
  5. Aucune exécution JavaScript : rendu statique uniquement
  6. Configuration complexe : approche de configuration basée sur le XML
  7. Soutien commercial limité : Scryber.Core est principalement soutenu par la communauté.

Comparaison Scryber.Core vs IronPDF

Aspect Scryber.Core IronPDF
Licence LGPL (restrictive) Commercial
Moteur de rendu Sur mesure Chrome
Support CSS Limité CSS3 complet
JavaScript Non ES2024 complet
Reliure de modèle XML propriétaire Standard (Razor, etc.)
Courbe d'apprentissage Syntaxe personnalisée HTML/CSSstandard
Prise en charge de l'asynchronisme Limité Complet
Documentation Basique Une traduction
Soutien à la communauté Plus petit Grandes
Soutien commercial Limité L'assistance professionnelle comprend

IronPDF offre un support commercial de niveau entreprise, une documentation complète et une communauté plus importante par rapport à Scryber.Core. La bibliothèque offre des options de licence plus souples sans les restrictions de la LGPL, ce qui la rend idéale pour les applications commerciales.

Pour les équipes qui prévoient l'adoption de .NET 10 et C# 14 jusqu'en 2025 et 2026, le moteur moderne Chromed'IronPDF assure une compatibilité totale avec les normes web contemporaines.


Avant de commencer

Prérequis

  1. Environnement .NET : .NET Framework 4.6.2+ ou .NET Core 3.1+ / .NET 5/6/7/8/9+
  2. Accès à NuGet : possibilité d'installer des packages NuGet
  3. Licence IronPDF : Obtenez votre clé de licence sur ironpdf.com

Modifications du paquet 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 IronPdf
SHELL

Configuration de la licence

// Add at application startup
IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY";
// Add at application startup
IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY";
$vbLabelText   $csharpLabel

Référence API complète

Modifications de l'espace de nommage

// 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;
$vbLabelText   $csharpLabel

Mappages de l'API de base

Scryber.Core IronPDF Notes
Document.ParseDocument(html) renderer.RenderHtmlAsPdf(html) Rendu HTML
Document.ParseTemplate(path) renderer.RenderHtmlFileAsPdf(path) Rendu des fichiers
doc.SaveAsPDF(path) pdf.SaveAs(path) Enregistrer dans un fichier
doc.SaveAsPDF(stream) pdf.Stream ou pdf.BinaryData Obtenir un flux/octets
doc.Info.Title pdf.MetaData.Title Métadonnées
doc.Info.Author pdf.MetaData.Author Métadonnées
PDFPage pdf.Pages[i] Accès à la page
PDFLayoutDocument Options de rendu Contrôle de la mise en page
PDFStyle CSS en HTML Stylisme
doc.RenderOptions.PaperSize RenderingOptions.PaperSize Taille du papier
Liaison de données ({{valeur}}) Interpolation Razor/Chaîne Création de modèles

Exemples de migration de code

Exemple 1 : Conversion de base de HTML en PDF

Avant (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");
        }
    }
}
$vbLabelText   $csharpLabel

Aprè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");
    }
}
$vbLabelText   $csharpLabel

Cet exemple illustre la différence architecturale fondamentale. Scryber.Core utilise Document.ParseDocument() avec un paramètre ParseSourceType.DynamicContent pour analyser le contenu HTML, ce qui nécessite un bloc using pour une élimination correcte. Le document est ensuite enregistré avec SaveAsPDF().

IronPDF utilise une instance de ChromePdfRenderer avec RenderHtmlAsPdf() pour effectuer un rendu HTML direct. Le PDF est enregistré avec SaveAs(). Aucune élimination manuelle n'est requise -IronPDFgère le nettoyage automatiquement. Consultez la documentation HTML vers PDF pour des exemples complets.

Exemple 2 : Conversion d'une URL en PDF

Avant (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");
        }
    }
}
$vbLabelText   $csharpLabel

Aprè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");
    }
}
$vbLabelText   $csharpLabel

Scryber.Core ne peut pas convertir directement les URL en PDF. Vous devez récupérer manuellement le contenu HTML à l'aide de HttpClient.GetStringAsync(), puis analyser le HTML téléchargé à l'aide de Document.ParseDocument(). Cette approche ne tient pas compte de l'exécution de JavaScript, du contenu dynamique et de la résolution CSS appropriée, car l'analyseur personnalisé n'exécute pas les scripts.

La méthode RenderUrlAsPdf() d'IronPDF gère l'ensemble du processus en un seul appel, y compris l'exécution complète de JavaScriptet le rendu CSS avec son moteur Chromium. Pour en savoir plus, consultez nos tutoriels.

Exemple 3 : Paramètres et marges de page personnalisés

Avant (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");
        }
    }
}
$vbLabelText   $csharpLabel

Aprè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");
    }
}
$vbLabelText   $csharpLabel

Scryber.Core utilise doc.RenderOptions pour configurer les paramètres de sortie tels que Compression (défini sur OutputCompressionType.FlateDecode) et PaperSize (défini sur PaperSize.A4) après l'analyse du document.

IronPDF utilise Options de rendusur le moteur de rendu avant le rendu. Les propriétés comprennent PaperSize (défini sur PdfPaperSize.A4), MarginTop, et MarginBottom définies en millimètres. La principale différence réside dans le fait qu'IronPDF permet un contrôle direct des marges grâce à des propriétés numériques, tandis que Scryber.Core utilise un style basé sur XML.


Modèles de migration de modèles

Migration de la reliure propriétaire vers des modèles standard

Scryber.Core utilise une syntaxe de liaison propriétaire basée sur XML qui doit être convertie en modèle standard :

Liaison 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>
XML

IronPDF avec l'interpolation de chaînes 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);
$vbLabelText   $csharpLabel

Principal avantage :IronPDFutilise le C# et le HTML standard, ce qui permet d'utiliser n'importe quel moteur de templating (Razor, Handlebars, etc.) plutôt que d'apprendre une syntaxe propriétaire.


Migration des en-têtes et pieds de page

Scryber.Core (en-tête/pied de page basé sur 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>
XML

IronPDF (en-têtes/pieds de page 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");
$vbLabelText   $csharpLabel

Scryber.Core nécessite une définition de l'en-tête et du pied de page basée sur XML avec des caractères de remplacement propriétaires tels que {{pagenum}} et {{pagetotal}}.IronPDFutilise le langage HTML/CSScomplet pour les en-têtes et les pieds de page avec les caractères génériques {page} et {total-pages}.


Nouvelles capacités après la migration

Après avoir migré vers IronPDF, vous bénéficiez de fonctionnalités que Scryber.Core ne peut pas vous offrir :

Fusion de fichiers 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");
$vbLabelText   $csharpLabel

Sécurité et métadonnées

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");
$vbLabelText   $csharpLabel

Résumé de la comparaison des fonctionnalités

Fonction Scryber.Core IronPDF
HTML vers PDF Basique Chromecomplet
URL vers PDF Recherche manuelle Support natif
Grille CSS Limité Prise en charge complète
Flexbox Limité Prise en charge complète
JavaScript Non ES2024 complet
Liaison de données XML propriétaire Utiliser Razor/Handlebars
En-têtes/Pieds de page Basé sur XML HTML/CSS
Fusionner des PDF Limité Intégré
Diviser les PDF Non Oui
Filigranes Basique HTML complet
Signatures numériques Non Oui
PDF/A Non Oui
Protection par mot de passe Basique Complet
Prise en charge de l'asynchronisme Limité Complet
Multiplateforme Oui Oui

Liste de contrôle de la migration

Pré-migration

  • Vérifier tous les modèles Scryber à la recherche de modèles XML/de liaison
  • Modèles de liaison de données de document utilisés ( {{model.Property}} )
  • Identifier les styles personnalisés nécessitant une conversion CSS
  • Obtenez votre clé de licenceIronPDFsur ironpdf.com

Mises à jour du code

  • Supprimer le package NuGet Scryber.Core
  • Installez le package NuGet IronPdf
  • Mise à jour des importations d'espace de noms ( using Scryber.Core;using IronPdf; )
  • Remplacez Document.ParseDocument(html, ParseSourceType.DynamicContent) par renderer.RenderHtmlAsPdf(html)
  • Remplacez doc.SaveAsPDF() par pdf.SaveAs()
  • Convertir les modèles XML en HTML
  • Remplacer la liaison propriétaire par un système de modèles standard (interpolation Razor/chaîne de caractères)
  • Mettre à jour les paramètres de la page : doc.RenderOptions.PaperSizerenderer.RenderingOptions.PaperSize
  • Convertir les en-têtes/pieds de page au format HTML avec les espaces réservés {page} et {total-pages}
  • Ajouter l'initialisation de la licence au démarrage de l'application

Essai

  • Tester tous les modèles de documents
  • Vérifier la correspondance des styles (tirer pleinement parti de la prise en charge CSS)
  • Tester la liaison de données avec le nouveau modèle
  • Vérifier les sauts de page
  • Tester les en-têtes/pieds de page avec des espaces réservés pour les numéros de page
  • Comparaison des performances

Curtis Chau
Rédacteur technique

Curtis Chau détient un baccalauréat en informatique (Université de Carleton) et se spécialise dans le développement front-end avec expertise en Node.js, TypeScript, JavaScript et React. Passionné par la création d'interfaces utilisateur intuitives et esthétiquement plaisantes, Curtis aime travailler avec des frameworks modernes ...

Lire la suite