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
- 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.
- Niestandardowa składnia szablonów: zastrzeżona składnia wiązania wymaga nauki
- Ograniczona obsługa CSS: Nie jest to pełny renderer oparty na przeglądarce
- Mniejsza społeczność: mniej dokumentacji i przykładów społecznościowych
- Brak wykonywania kodu JavaScript: wyłącznie renderowanie statyczne
- Złożona konfiguracja: podejście oparte na intensywnym wykorzystaniu XML
- 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
- Środowisko .NET: .NET Framework 4.6.2+ lub .NET Core 3.1+ / .NET 5/6/7/8/9+
- Dostęp do NuGet: Możliwość instalowania pakietów NuGet
- 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
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"
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
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
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
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
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
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
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
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>
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)
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>
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")
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")
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")
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)przezrenderer.RenderHtmlAsPdf(html) - Zastąp
doc.SaveAsPDF()przezpdf.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.PaperSize→renderer.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

