Przejdź do treści stopki
PRZEWODNIKI MIGRACJI

Jak przeprowadzić migrację z Scryber.Core do IronPDF w języku C#

Przejście z Scryber.Core naIronPDFzmienia proces tworzenia plików PDF z niestandardowego silnika analizującego XML/HTML na nowoczesny renderer oparty naChromiumz pełną obsługą CSS3 i JavaScript. Niniejszy przewodnik zawiera kompletną, szczegółową ścieżkę migracji, która eliminuje obawy związane z licencją LGPL, zastrzeżoną składnią szablonów oraz ograniczonymi możliwościami renderowania.

Dlaczego warto przejść z Scryber.Core na IronPDF

Zrozumienie Scryber.Core

Scryber.Core to biblioteka open source, która przekształca szablony HTML w pliki PDF przy użyciu języka C#. Ta funkcja sprawia, że jest to atrakcyjne narzędzie dla programistów zaznajomionych z tworzeniem stron internetowych i HTML. W przeciwieństwie do innych rozwiązań do tworzenia plików PDF, które wymagają konkretnych umiejętności kodowania dokumentów, Scryber.Core wykorzystuje wszechstronność HTML i możliwości stylizacji CSS, aby zapewnić bardziej intuicyjne podejście do generowania plików PDF.

Chociaż Scryber.Core jest realną opcją dla wielu programistów, głównie ze względu na zgodność ideologiczną z zasadami open source i oferowaną elastyczność, nie jest pozbawiony ograniczeń.

Główne powody migracji

  1. Kwestie związane z licencją LGPL: Licencja LGPL wymaga, aby wszelkie modyfikacje samej biblioteki były udostępniane na zasadach open source, co może stanowić ograniczenie dla niektórych zastosowań komercyjnych.
  2. Niestandardowa składnia szablonów: zastrzeżona składnia wiązania wymaga nauki
  3. Ograniczona obsługa CSS: Nie jest to pełny renderer oparty na przeglądarce
  4. Mniejsza społeczność: mniej dokumentacji i przykładów społecznościowych
  5. Brak wykonywania kodu JavaScript: wyłącznie renderowanie statyczne
  6. Złożona konfiguracja: podejście oparte na intensywnym wykorzystaniu XML
  7. Ograniczone wsparcie komercyjne: Scryber.Core jest wspierany głównie przez społeczność

Porównanie Scryber.Core i IronPDF

Aspekt Scryber.Core IronPDF
Licencja LGPL (restrykcyjna) Komercjalne
Silnik renderujący Niestandardowe Chromium
Obsługa CSS Ograniczone Pełny CSS3
JavaScript Nie Pełna wersja ES2024
Powiązanie szablonów Własny format XML Standard (Razor itp.)
Krzywa uczenia się Niestandardowa składnia StandardowyHTML/CSS
Obsługa asynchroniczna Ograniczone Pełna
Dokumentacja Podstawowe Obszerne
Wsparcie społeczności Mniejsze Duży
Wsparcie komercyjne Ograniczone W cenie profesjonalne wsparcie

IronPDF oferuje wsparcie techniczne na poziomie Enterprise, obszerną dokumentację oraz większą społeczność w porównaniu z Scryber.Core. Biblioteka zapewnia bardziej elastyczne opcje licencjonowania bez ograniczeń LGPL, co czyni ją idealną do zastosowań komercyjnych.

Dla zespołów planujących wdrożenie .NET 10 i C# 14 w latach 2025 i 2026 nowoczesny silnikChromiumfirmyIronPDFzapewnia pełną zgodność z aktualnymi standardami internetowymi.


Zanim zaczniesz

Wymagania wstępne

  1. Środowisko .NET: .NET Framework 4.6.2+ lub .NET Core 3.1+ / .NET 5/6/7/8/9+
  2. Dostęp do NuGet: Możliwość instalowania pakietów NuGet
  3. Licencja IronPDF: Uzyskaj klucz licencyjny na stronie ironpdf.com

Zmiany w pakiecie 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

Konfiguracja licencji

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

Kompletna dokumentacija API

Zmiany w przestrzeni nazw

// 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;
Imports Scryber.Components
Imports Scryber.Components.Pdf
Imports Scryber.PDF
Imports Scryber.Styles
Imports Scryber.Core
Imports Scryber.Core.Html
Imports Scryber.Drawing

Imports IronPdf
Imports IronPdf.Rendering
$vbLabelText   $csharpLabel

Mapowania podstawowych interfejsów API

Scryber.Core IronPDF
Document.ParseDocument(html) renderer.RenderHtmlAsPdf(html)
Document.ParseTemplate(path) renderer.RenderHtmlFileAsPdf(path)
doc.SaveAsPDF(path) pdf.SaveAs(path)
doc.SaveAsPDF(stream) pdf.Stream lub pdf.BinaryData
doc.Info.Title pdf.MetaData.Title
doc.Info.Author pdf.MetaData.Author
PDFPage pdf.Pages[i]
PDFLayoutDocument RenderingOptions
PDFStyle CSS w HTML
doc.RenderOptions.PaperSize RenderingOptions.PaperSize
Powiązanie danych ({{value}}) Interpolacja Razor/String

Przykłady migracji kodu

Przykład 1: Podstawowa konwersja HTML do PDF

Przed (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");
        }
    }
}
Imports Scryber.Core
Imports Scryber.Core.Html
Imports System.IO

Class Program
    Shared Sub Main()
        Dim html As String = "<html><body><h1>Hello World</h1><p>This is a PDF document.</p></body></html>"

        Using doc = Document.ParseDocument(html, ParseSourceType.DynamicContent)
            doc.SaveAsPDF("output.pdf")
        End Using
    End Sub
End Class
$vbLabelText   $csharpLabel

Po (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");
    }
}
Imports IronPdf

Class Program
    Shared Sub Main()
        Dim renderer = New ChromePdfRenderer()
        Dim html As String = "<html><body><h1>Hello World</h1><p>This is a PDF document.</p></body></html>"

        Dim pdf = renderer.RenderHtmlAsPdf(html)
        pdf.SaveAs("output.pdf")
    End Sub
End Class
$vbLabelText   $csharpLabel

Ten przykład ilustruje podstawową różnicę architektoniczną. Scryber.Core używa Document.ParseDocument() z parametrem ParseSourceType.DynamicContent do analizowania treści HTML, co wymaga bloku using do prawidłowego usunięcia. Dokument jest następnie zapisywany z oznaczeniem SaveAsPDF().

IronPDF wykorzystuje instancję ChromePdfRenderer z RenderHtmlAsPdf() do bezpośredniego renderowania HTML. Plik PDF został zapisany pod nazwą SaveAs(). Nie jest wymagane ręczne usuwanie —IronPDFautomatycznie zajmuje się czyszczeniem. Kompleksowe przykłady można znaleźć w dokumentacji dotyczącej konwersji HTML do PDF.

Przykład 2: Konwersja adresów URL do formatu PDF

Przed (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");
        }
    }
}
Imports Scryber.Core
Imports Scryber.Core.Html
Imports System.Net.Http
Imports System.Threading.Tasks

Module Program
    Async Function Main() As Task
        Using client As New HttpClient()
            Dim html As String = Await client.GetStringAsync("https://www.example.com")

            Using doc = Document.ParseDocument(html, ParseSourceType.DynamicContent)
                doc.SaveAsPDF("webpage.pdf")
            End Using
        End Using
    End Function
End Module
$vbLabelText   $csharpLabel

Po (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");
    }
}
Imports IronPdf

Class Program
    Shared Sub Main()
        Dim renderer As New ChromePdfRenderer()
        Dim pdf = renderer.RenderUrlAsPdf("https://www.example.com")
        pdf.SaveAs("webpage.pdf")
    End Sub
End Class
$vbLabelText   $csharpLabel

Scryber.Core nie może bezpośrednio konwertować adresów URL do formatu PDF. Należy ręcznie pobrać zawartość HTML za pomocą HttpClient.GetStringAsync(), a następnie przeanalizować pobrany kod HTML za pomocą Document.ParseDocument(). Takie podejście pomija wykonanie kodu JavaScript, treści dynamiczne oraz prawidłowe renderowanie CSS, ponieważ niestandardowy parser nie wykonuje skryptów.

Metoda RenderUrlAsPdf() firmyIronPDFobsługuje cały proces w ramach jednego wywołania, w tym pełne wykonanie koduJavaScripti renderowanie CSS za pomocą silnika Chromium. Dowiedz się więcej z naszych samouczków.

Przykład 3: Niestandardowe ustawienia strony i marginesy

Przed (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");
        }
    }
}
Imports Scryber.Core
Imports Scryber.Core.Html
Imports Scryber.Drawing
Imports System.IO

Class Program
    Shared Sub Main()
        Dim html As String = "<html><body><h1>Custom PDF</h1><p>With custom margins and settings.</p></body></html>"

        Using doc = Document.ParseDocument(html, ParseSourceType.DynamicContent)
            doc.RenderOptions.Compression = OutputCompressionType.FlateDecode
            doc.RenderOptions.PaperSize = PaperSize.A4
            doc.SaveAsPDF("custom.pdf")
        End Using
    End Sub
End Class
$vbLabelText   $csharpLabel

Po (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");
    }
}
Imports IronPdf
Imports IronPdf.Rendering

Class Program
    Shared Sub Main()
        Dim renderer As New ChromePdfRenderer()
        renderer.RenderingOptions.PaperSize = PdfPaperSize.A4
        renderer.RenderingOptions.MarginTop = 40
        renderer.RenderingOptions.MarginBottom = 40

        Dim html As String = "<html><body><h1>Custom PDF</h1><p>With custom margins and settings.</p></body></html>"
        Dim pdf = renderer.RenderHtmlAsPdf(html)
        pdf.SaveAs("custom.pdf")
    End Sub
End Class
$vbLabelText   $csharpLabel

Scryber.Core używa doc.RenderOptions do konfiguracji ustawień wyjściowych, takich jak Compression (ustawione na OutputCompressionType.FlateDecode) oraz PaperSize (ustawione na PaperSize.A4) po przeanalizowaniu dokumentu.

IronPDF używa RenderingOptions w rendererze przed renderowaniem. Właściwości obejmują PaperSize (ustawione na PdfPaperSize.A4), MarginTop oraz MarginBottom ustawione w milimetrach. Kluczową różnicą jest to, żeIronPDFzapewnia bezpośrednią kontrolę marginesów za pomocą właściwości numerycznych, podczas gdy Scryber.Core wykorzystuje stylizację opartą na XML.


Szablony wzorców migracji

Migracja własnych powiązań do standardowych szablonów

Scryber.Core wykorzystuje autorską składnię wiązania opartą na XML, którą należy przekonwertować na standardowe szablony:

Scryber.Core Binding:

<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 z interpolacją ciągów znaków w języku 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);
Dim items = model.Items.Select(Function(i) $"<li>{i.Name}: {i.Price:C}</li>")

Dim html = $"
<p>{model.Name}</p>
<p>Total: {model.Total:C}</p>
<ul>
    {String.Join("", items)}
</ul>"

Dim renderer = New ChromePdfRenderer()
Dim pdf = renderer.RenderHtmlAsPdf(html)
$vbLabelText   $csharpLabel

Główna zaleta:IronPDFwykorzystuje standardowe C# i HTML, dzięki czemu można używać dowolnego silnika szablonów (Razor, Handlebars itp.) zamiast uczyć się zastrzeżonej składni.


Migracja nagłówków i stopek

Scryber.Core (nagłówek/stopka oparte na 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 (nagłówki/stopki 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");
Imports IronPdf

Dim renderer As New ChromePdfRenderer()

' HTML header with full CSS support
renderer.RenderingOptions.HtmlHeader = New HtmlHeaderFooter With {
    .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 With {
    .HtmlFragment = "
        <div style='width: 100%; text-align: center; font-size: 10pt;'>
            Page {page} of {total-pages}
        </div>",
    .MaxHeight = 25
}

Dim pdf = renderer.RenderHtmlAsPdf("<h1>Content Here</h1>")
pdf.SaveAs("report.pdf")
$vbLabelText   $csharpLabel

Scryber.Core wymaga definicji nagłówków i stopek opartych na XML z zastrzeżonymi symbolami zastępczymi, takimi jak {{pagenum}} i {{pagetotal}}.IronPDFwykorzystuje pełny kodHTML/CSSdla nagłówków i stopek z symbolami zastępczymi {page} i {total-pages}.


Nowe możliwości po migracji

Po migracji doIronPDFzyskujesz możliwości, których Scryber.Core nie jest w stanie zapewnić:

Łączenie plików 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");
Dim pdf1 = PdfDocument.FromFile("chapter1.pdf")
Dim pdf2 = PdfDocument.FromFile("chapter2.pdf")
Dim pdf3 = PdfDocument.FromFile("chapter3.pdf")

Dim merged = PdfDocument.Merge(pdf1, pdf2, pdf3)
merged.SaveAs("complete_book.pdf")
$vbLabelText   $csharpLabel

Bezpieczeństwo i metadane

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");
Dim renderer = New ChromePdfRenderer()
Dim 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

Podsumowanie porównania funkcji

Funkcja Scryber.Core IronPDF
HTML do PDF Podstawowe PełnyChromium
URL do pliku PDF Ręczne pobieranie Wsparcie native
CSS Grid Ograniczone Obsługiwane
Flexbox Ograniczone Obsługiwane
JavaScript Nie Pełna wersja ES2024
Powiązanie danych Własny format XML Użyj Razor/Handlebars
Nagłówki/stopki Oparty na XML HTML/CSS
Łączenie plików PDF Ograniczone Wbudowane
Podział plików PDF Nie Tak
Znaki wodne Podstawowe Pełny kod HTML
Podpisy cyfrowe Nie Tak
PDF/A Nie Tak
Ochrona hasłem Podstawowe Pełna
Obsługa asynchroniczna Ograniczone Pełna
Wieloplatformowe Tak Tak

Lista kontrolna migracji

Przed migracją

  • Przeprowadź audyt wszystkich szablonów Scryber pod kątem wzorców XML/powiązań
  • Wzory powiązania danych dokumentu użyte ({{model.Property}})
  • Zidentyfikuj niestandardowe style wymagające konwersji CSS
  • Uzyskaj klucz licencyjnyIronPDFze strony ironpdf.com

Aktualizacje kodu

  • Usuń pakiet NuGet Scryber.Core
  • Zainstaluj pakiet NuGet IronPdf
  • Zaktualizuj importy przestrzeni nazw (using Scryber.Core;using IronPdf;)
  • Zastąp Document.ParseDocument(html, ParseSourceType.DynamicContent) przez renderer.RenderHtmlAsPdf(html)
  • Zastąp doc.SaveAsPDF() przez pdf.SaveAs()
  • Konwersja szablonów XML do HTML
  • Zastąp własnościowe wiązanie standardowymi szablonami (Razor/interpolacja ciągów znaków)
  • Zaktualizuj ustawienia strony: doc.RenderOptions.PaperSizerenderer.RenderingOptions.PaperSize
  • Konwersja nagłówków/stopek do formatu HTML przy użyciu symboli zastępczych {page} i {total-pages}
  • Dodaj inicjalizację licencji podczas uruchamiania aplikacji

Testowanie

  • Przetestuj wszystkie szablony dokumentów
  • Sprawdź zgodność stylów (wykorzystaj pełną obsługę CSS)
  • Testowanie powiązania danych z nowymi szablonami
  • Sprawdź podziały stron
  • Przetestuj nagłówki/stopki z symbolami zastępczymi numerów stron
  • Porównanie wydajności

Curtis Chau
Autor tekstów technicznych

Curtis Chau posiada tytuł licencjata z informatyki (Uniwersytet Carleton) i specjalizuje się w front-endowym rozwoju, z ekspertką w Node.js, TypeScript, JavaScript i React. Pasjonuje się tworzeniem intuicyjnych i estetycznie przyjemnych interfejsów użytkownika, Curtis cieszy się pracą z nowoczesnymi frameworkami i tworzeniem dobrze zorganizowanych, atrakcyjnych wizualnie podrę...

Czytaj więcej

Zespol wsparcia Iron

Jestesmy online 24 godziny, 5 dni w tygodniu.
Czat
Email
Zadzwon do mnie