Altbilgi içeriğine atla
GEçIş KıLAVUZLARı

C#'ta Scryber.Core'den IronPDF'ye Nasıl Geçilir

Scryber.Core'dan IronPDF'ye geçmek, PDF oluşturma iş akışınızı özel bir XHTML+CSS düzen motorundan tam CSS3 veJavaScriptdesteği olan birChromiumtabanlı render motoruna geçirir. Bu kılavuz, LGPL v3lisanslama hususları, Scryber'in XHTML-katılıkta şablon modeli ve iki motor arasındaki render farklılıklarını kapsayan adım-adım bir geçiş yolu sağlar.

Scryber.Core'dan IronPDF'ye Neden Geçiş Yapmalı

Scryber.Core'yi Anlamak

Scryber.Core (Richard Hewitson tarafından bakım yapılan, mevcut sürüm 9.3.1) kendi düzen motorunu kullanarak XHTML+CSS şablonlarını ayrıştıran, açık kaynağı bir kütüphanedir — bir tarayıcı değil. CSS stilini, Handlebars stilindeki {{ }} veri bağlamasını doc.Params üzerinden ve SVG'yi destekler, bu sayede tarayıcı bağımlılığı olmadan HTML odaklı PDF'ler isteyen gelişticiler için çekici hale gelir.

Scryber.Core, HTML-şablon tabanlı PDF oluşturma için uygun bir seçenek olmasına rağmen, birkaç kısıtlama ekipleri göç etmeye itiyor.

Göç Etmenin Temel Nedenleri

  1. LGPL v3 Lisans Endişeleri: Scryber'i kendiniz değiştirirseniz kaynak açıklama zorunlulukları uygulanır; kapalı kaynak uygulamalarda statik bağlantı izinlidir, ancak bu koşullar modifikasyonları nasıl dağıtacağınızı kısıtlar.
  2. XHTML-katılık Giriş: Şablonlar geçerli XML olmalıdır — çoğu gerçek dünya HTML'si, Scryber'ın bunu ayrıştırmadan önce temizlenmeye ihtiyaç duyar.
  3. Tarayıcı Dışı İşleyici: Özel bir XHTML/CSS düzen motoru — modern CSS (Grid, tam Flexbox, konteyner sorguları) ve herhangi birJavaScriptçalıştırılmaz.
  4. Daha Küçük Topluluk: Ana akım kütüphanelerden daha az çalışılmış örnek.
  5. JavaScript Çalıştırılmıyor: Yalnızca statik render — grafikler, SPA'lar ve dinamik widget'lar önceden işlenmelidir.
  6. Yerel URL'den PDF'e Özelliği Yok: HTML'i kendiniz almanız gerekiyor (örneğin, HttpClient ile) ve içeriye yedirmeniz gerekiyor.
  7. Topluluk Desteği: Ticari destek seçenekleri sınırlıdır.

Scryber.Core ve IronPDF Karşılaştırması

Aspekt Scryber.Core IronPDF
Lisans LGPL v3 Ticari
Oluşturma Motoru Özel XHTML/CSS düzen motoru Chromium
CSS Desteği Alt küme (Grid yok, kısmi Flexbox) Tam CSS3
JavaScript Yürütülmez Tam (Chromium V8)
Şablon Bağlama Handlebars stilinde {{ }} + <template> Standard (Razor, RazorLight, etc.)
Giriş Katılığı İyi yapılandırılmış XHTML gerektirir Gerçek dünya HTML'sini kabul eder
Asenkron Destek PDFAsync MVC yardımcısı; sync core Tam asenkron API
Dokümantasyon Belgeleri oku sitesi + örnekler Kapsamlı
Topluluk Desteği Daha küçük Daha büyük
Ticari Destek Topluluk destekli Ticari destek mevcut

IronPDF, Scryber.Core'a kıyasla ticari destek, dokümantasyon ve daha geniş bir kullanıcı tabanı sunar. Kütüphane, LGPL yükümlülükleri olmaksızın ticari kullanım için lisanslanmıştır.


Başlamadan Önce

Ön Koşullar

  1. .NET Ortamı: .NET Framework 4.6.2+ veya .NET Core 3.1+ / .NET 5/6/7/8/9+
  2. NuGet Erişimi: NuGet paketlerini yükleyebilme
  3. IronPDF Lisansı: Lisans anahtarınızı ironpdf.com adresinden edinin

NuGet Paket Değişiklikleri

# 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

Lisans Yapılandırması

// 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

Tam API Referansı

Ad Alanı Değişiklikleri

// Before: Scryber.Core
using Scryber.Components;   // Document, Page, etc.
using Scryber.Drawing;      // Units, colours
using Scryber.PDF;          // RenderOptions / OutputCompressionType
using Scryber.Styles;       // Style elements (older XML template usage)

// After: IronPDF
using IronPdf;
using IronPdf.Rendering;
// Before: Scryber.Core
using Scryber.Components;   // Document, Page, etc.
using Scryber.Drawing;      // Units, colours
using Scryber.PDF;          // RenderOptions / OutputCompressionType
using Scryber.Styles;       // Style elements (older XML template usage)

// After: IronPDF
using IronPdf;
using IronPdf.Rendering;
Imports Scryber.Components   ' Document, Page, etc.
Imports Scryber.Drawing      ' Units, colours
Imports Scryber.PDF          ' RenderOptions / OutputCompressionType
Imports Scryber.Styles       ' Style elements (older XML template usage)

' After: IronPDF
Imports IronPdf
Imports IronPdf.Rendering
$vbLabelText   $csharpLabel

Temel API Eşlemeleri

Scryber.Core IronPDF
Document.ParseDocument(reader, "", ParseSourceType.DynamicContent) renderer.RenderHtmlAsPdf(html)
Document.ParseDocument(path) renderer.RenderHtmlFileAsPdf(path)
doc.SaveAsPDF(path) pdf.SaveAs(path)
doc.SaveAsPDF(stream) pdf.BinaryData (byte[])
doc.Info.Title pdf.MetaData.Title
doc.Info.Author pdf.MetaData.Author
@page şablon içinde CSS renderer.RenderingOptions.PaperSize / kenar boşlukları
doc.RenderOptions renderer.RenderingOptions
Handlebars {{value}} + doc.Params Razor / dize değişmezleri

Kod Göç Örnekleri

Örnek 1: Temel HTML'den PDF'ye Dönüştürme

Önce (Scryber.Core):

// NuGet: Install-Package Scryber.Core
using Scryber.Components;
using System.IO;

class Program
{
    static void Main()
    {
        // Scryber requires well-formed XHTML wrapped in an html root with the xhtml namespace
        string html = @"<html xmlns='http://www.w3.org/1999/xhtml'>
            <body><h1>Hello World</h1><p>This is a PDF document.</p></body>
        </html>";

        using (var reader = new StringReader(html))
        using (var doc = Document.ParseDocument(reader, string.Empty, ParseSourceType.DynamicContent))
        using (var stream = new FileStream("output.pdf", FileMode.Create))
        {
            doc.SaveAsPDF(stream);
        }
    }
}
// NuGet: Install-Package Scryber.Core
using Scryber.Components;
using System.IO;

class Program
{
    static void Main()
    {
        // Scryber requires well-formed XHTML wrapped in an html root with the xhtml namespace
        string html = @"<html xmlns='http://www.w3.org/1999/xhtml'>
            <body><h1>Hello World</h1><p>This is a PDF document.</p></body>
        </html>";

        using (var reader = new StringReader(html))
        using (var doc = Document.ParseDocument(reader, string.Empty, ParseSourceType.DynamicContent))
        using (var stream = new FileStream("output.pdf", FileMode.Create))
        {
            doc.SaveAsPDF(stream);
        }
    }
}
Imports Scryber.Components
Imports System.IO

Class Program
    Shared Sub Main()
        ' Scryber requires well-formed XHTML wrapped in an html root with the xhtml namespace
        Dim html As String = "<html xmlns='http://www.w3.org/1999/xhtml'>" &
                             "<body><h1>Hello World</h1><p>This is a PDF document.</p></body>" &
                             "</html>"

        Using reader As New StringReader(html),
              doc As Document = Document.ParseDocument(reader, String.Empty, ParseSourceType.DynamicContent),
              stream As New FileStream("output.pdf", FileMode.Create)
            doc.SaveAsPDF(stream)
        End Using
    End Sub
End Class
$vbLabelText   $csharpLabel

Sonrası (IronPDF):

// NuGet: Install-Package IronPdf
using IronPdf;

class Program
{
    static void Main()
    {
        IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY";

        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()
    {
        IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY";

        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()
        IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY"

        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

Scryber.Core, XHTML dizesini bir StringReader içine alır, Document.ParseDocument ile beraber ParseSourceType.DynamicContent gönderir ve bir FileStream üzerinden PDF'i SaveAsPDF ile yazar. XHTML ad alanı bildirimi gereklidir — Scryber iyi yapılandırılmamış XML olan HTML'yi reddeder.

IronPDF, HTML'i doğrudan işlemek için ChromePdfRenderer örneği ile RenderHtmlAsPdf() kullanır ve SaveAs() ile kaydeder. Gerçek dünya HTML5 olduğu gibi kabul edilir. HTML'den PDF'e belgeler için daha fazla örneğe bakın.

Örnek 2: URL'den PDF'ye Dönüştürme

Önce (Scryber.Core):

// NuGet: Install-Package Scryber.Core
// Scryber has no native URL-to-PDF method — fetch the HTML yourself, then parse.
using Scryber.Components;
using System.IO;
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");

        // Most live HTML is not valid XHTML; expect to clean it
        // (e.g., HtmlAgilityPack) before Scryber will parse it.
        using (var reader = new StringReader(html))
        using (var doc = Document.ParseDocument(reader, string.Empty, ParseSourceType.DynamicContent))
        using (var stream = new FileStream("webpage.pdf", FileMode.Create))
        {
            doc.SaveAsPDF(stream);
        }
    }
}
// NuGet: Install-Package Scryber.Core
// Scryber has no native URL-to-PDF method — fetch the HTML yourself, then parse.
using Scryber.Components;
using System.IO;
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");

        // Most live HTML is not valid XHTML; expect to clean it
        // (e.g., HtmlAgilityPack) before Scryber will parse it.
        using (var reader = new StringReader(html))
        using (var doc = Document.ParseDocument(reader, string.Empty, ParseSourceType.DynamicContent))
        using (var stream = new FileStream("webpage.pdf", FileMode.Create))
        {
            doc.SaveAsPDF(stream);
        }
    }
}
Imports Scryber.Components
Imports System.IO
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")

            ' Most live HTML is not valid XHTML; expect to clean it
            ' (e.g., HtmlAgilityPack) before Scryber will parse it.
            Using reader As New StringReader(html)
                Using doc As Document = Document.ParseDocument(reader, String.Empty, ParseSourceType.DynamicContent)
                    Using stream As New FileStream("webpage.pdf", FileMode.Create)
                        doc.SaveAsPDF(stream)
                    End Using
                End Using
            End Using
        End Using
    End Function
End Module
$vbLabelText   $csharpLabel

Sonrası (IronPDF):

// NuGet: Install-Package IronPdf
using IronPdf;

class Program
{
    static void Main()
    {
        IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY";

        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()
    {
        IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY";

        var renderer = new ChromePdfRenderer();
        var pdf = renderer.RenderUrlAsPdf("https://www.example.com");
        pdf.SaveAs("webpage.pdf");
    }
}
Imports IronPdf

Class Program
    Shared Sub Main()
        IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY"

        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'un yerel URL'den PDF'ye girişi yoktur. HTML'i kendiniz HttpClient.GetStringAsync() ile alırsınız ve Document.ParseDocument() içine yedirirsiniz. Scryber iyi yapılandırılmış XHTML gerektirdiğinden, çoğu canlı sayfanın ayrıştırılmadan önce temizlenmesi gerekir (örneğin HtmlAgilityPack aracılığıyla).JavaScriptçalıştırılmaz, bu nedenle dinamik olarak oluşturulan içerik eksik olacaktır.

IronPDF'nin RenderUrlAsPdf() bileşeni,Chromiummotoru üzerinden tek bir çağrı ile alımı,JavaScriptyürütülmesini ve CSS işlenmesini sağlar. Daha fazla bilgi için eğitimlerimize göz atın.

Örnek 3: Özel Sayfa Ayarları ve Kenarlar

Önce (Scryber.Core):

// NuGet: Install-Package Scryber.Core
// Page size and margins are normally declared in the XHTML/CSS template;
// the runtime RenderOptions object exposes output-side settings such as compression.
using Scryber.Components;
using Scryber.PDF;
using System.IO;

class Program
{
    static void Main()
    {
        // Page size and margins go in CSS @page; this is the Scryber idiom.
        string html = @"<html xmlns='http://www.w3.org/1999/xhtml'>
            <head>
                <style>
                    @page { size: A4 portrait; margin: 40pt; }
                </style>
            </head>
            <body><h1>Custom PDF</h1><p>With custom margins and settings.</p></body>
        </html>";

        using (var reader = new StringReader(html))
        using (var doc = Document.ParseDocument(reader, string.Empty, ParseSourceType.DynamicContent))
        using (var stream = new FileStream("custom.pdf", FileMode.Create))
        {
            // Output-side options (compression / conformance) are on RenderOptions.
            doc.RenderOptions.Compression = OutputCompressionType.FlateDecode;
            doc.SaveAsPDF(stream);
        }
    }
}
// NuGet: Install-Package Scryber.Core
// Page size and margins are normally declared in the XHTML/CSS template;
// the runtime RenderOptions object exposes output-side settings such as compression.
using Scryber.Components;
using Scryber.PDF;
using System.IO;

class Program
{
    static void Main()
    {
        // Page size and margins go in CSS @page; this is the Scryber idiom.
        string html = @"<html xmlns='http://www.w3.org/1999/xhtml'>
            <head>
                <style>
                    @page { size: A4 portrait; margin: 40pt; }
                </style>
            </head>
            <body><h1>Custom PDF</h1><p>With custom margins and settings.</p></body>
        </html>";

        using (var reader = new StringReader(html))
        using (var doc = Document.ParseDocument(reader, string.Empty, ParseSourceType.DynamicContent))
        using (var stream = new FileStream("custom.pdf", FileMode.Create))
        {
            // Output-side options (compression / conformance) are on RenderOptions.
            doc.RenderOptions.Compression = OutputCompressionType.FlateDecode;
            doc.SaveAsPDF(stream);
        }
    }
}
Imports Scryber.Components
Imports Scryber.PDF
Imports System.IO

Module Program

    Sub Main()
        ' Page size and margins go in CSS @page; this is the Scryber idiom.
        Dim html As String = "<html xmlns='http://www.w3.org/1999/xhtml'>" &
                             "<head>" &
                             "<style>" &
                             "@page { size: A4 portrait; margin: 40pt; }" &
                             "</style>" &
                             "</head>" &
                             "<body><h1>Custom PDF</h1><p>With custom margins and settings.</p></body>" &
                             "</html>"

        Using reader As New StringReader(html),
              doc As Document = Document.ParseDocument(reader, String.Empty, ParseSourceType.DynamicContent),
              stream As New FileStream("custom.pdf", FileMode.Create)

            ' Output-side options (compression / conformance) are on RenderOptions.
            doc.RenderOptions.Compression = OutputCompressionType.FlateDecode
            doc.SaveAsPDF(stream)
        End Using
    End Sub

End Module
$vbLabelText   $csharpLabel

Sonrası (IronPDF):

// NuGet: Install-Package IronPdf
using IronPdf;
using IronPdf.Rendering;

class Program
{
    static void Main()
    {
        IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY";

        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()
    {
        IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY";

        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()
        IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY"

        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 içinde, sayfa boyutu ve kenar boşlukları @page CSS üzerinden şablonda tanımlanırken, doc.RenderOptions sıkıştırma gibi çıkış tarafı ayarlarını (OutputCompressionType.FlateDecode) ortaya çıkarır.

IronPDF sayfa geometrisini işleyici üzerinde RenderingOptions taşıyor: PaperSize (olarak ayarlanmış PdfPaperSize.A4), MarginTop ve MarginBottom milimetre cinsinden. Sayfa geometrisi şablonun içinde değil, API yüzeyinde bulunur.


Şablon Göç Modelleri

Scryber Bağlamadan Standart Şablonlara Geçiş

Scryber.Core, Handlebars stilinde {{ }} bağlamaları (doc.Params ile çözülmüş) ve tekrarlayan bölümler için bir <template data-bind='...'> yapısı ile XHTML kullanır. Geçiş yapmak için bunları standart .NET şablonlamada tekrar ifade edin:

Scryber Binding (XHTML + Handlebars):

<p>{{model.Name}}</p>
<p>Total: {{model.Total}}</p>
<template data-bind='{{model.Items}}'>
    <p>{{.Name}}: {{.Price}}</p>
</template>
<p>{{model.Name}}</p>
<p>Total: {{model.Total}}</p>
<template data-bind='{{model.Items}}'>
    <p>{{.Name}}: {{.Price}}</p>
</template>
XML

IronPDF ile C# Dize İnterpolasyonu:

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

IronPDF sade HTML kabul ettiğinden, Scryber'ın {{ }} + <template> yapılarının aksine herhangi bir .NET şablon motorunu — Razor, RazorLight, Handlebars.Net — kullanabilirsiniz.


Üstbilgiler ve Altbilgiler Göçü

Scryber.Core (XHTML + @page kenar kutuları):

<html xmlns='http://www.w3.org/1999/xhtml'>
    <head>
        <style>
            @page {
                @top-center { content: 'Company Report'; }
                @bottom-center { content: 'Page ' counter(page) ' of ' counter(pages); }
            }
        </style>
    </head>
    <body>
        <h1>Content Here</h1>
    </body>
</html>
<html xmlns='http://www.w3.org/1999/xhtml'>
    <head>
        <style>
            @page {
                @top-center { content: 'Company Report'; }
                @bottom-center { content: 'Page ' counter(page) ' of ' counter(pages); }
            }
        </style>
    </head>
    <body>
        <h1>Content Here</h1>
    </body>
</html>
HTML

IronPDF (HTML üstbilgiler/altbilgiler):

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, CSS'de @page kenar kutuları üzerinden başlıklar ve alt bilgi tanımlar ve sayfa numaraları için counter(page) ve counter(pages) kullanır. IronPDF, başlıklar ve alt bilgileri için tam HTML/CSS ile HtmlHeaderFooter ve yer tutucular {page} ve {total-pages} kullanır.


Geçiş Sonrası Yeni Özellikler

IronPDF'ye geçtikten sonra, Scryber.Core'un sunamayacağı yetenekler kazanırsınız:

PDF Birleştirme

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

Güvenlik ve Meta Veri

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

Özellik Karşılaştırması Özeti

Özellik Scryber.Core IronPDF
HTML'den PDF'ye Özel düzen motoruyla XHTML+CSS Tam Chromium
URL'yi PDF'ye çevir Sadece manuel veri çekme Yerel RenderUrlAsPdf
CSS Izgarası Desteklenmiyor Tam destek
Flexbox Kısmi Tam destek
JavaScript Yürütülmez Tam (V8)
Veri Bağlama {{ }} Handlebars + doc.Params Razor / RazorLight / değişmezler
Başlıklar/Altbilgiler @page kenar kutuları / şablon bölümleri HtmlHeaderFooter ile {page} {total-pages}
PDF'leri birleştir Desteklenmiyor Yerleşik PdfDocument.Merge
PDF Ayırma Desteklenmiyor Evet
Filigranlar Şablonda yerleşik HTML üzerinden Yerel ApplyStamp / ApplyWatermark
Dijital İmzalar Desteklenmiyor Evet
PDF/A Desteklenmiyor Evet (PDF/A-1b, PDF/A-3)
Şifre Koruması Desteklenmiyor Tam (kullanıcı/sahip + izinler)
Asenkron Destek PDFAsync MVC yardımcısı; sync core Tam async yüzey
Platformlar Arası Evet(.NET Std 2.0/2.1, .NET 8/9/10) Evet

Geçiş Kontrol Listesi

Öncesi-Geçiş

  • Tüm Scryber şablonlarını XHTML/bağlama düzenleri için denetleyin
  • Kullanılan doküman veri bağlama desenleri ({{model.Property}})
  • CSS dönüşümü gerektiren özel stilleri belirleyin
  • ironpdf.com adresinden IronPDF lisans anahtarını edinin

Kod Güncellemeleri

  • Scryber.Core NuGet paketini kaldır
  • IronPdf NuGet paketini yükle
  • Namespace içe aktarımlarını güncelle (using Scryber.Components; / Scryber.Drawing; / Scryber.PDF;using IronPdf;)
  • Document.ParseDocument(reader, "", ParseSourceType.DynamicContent)'i renderer.RenderHtmlAsPdf(html) ile değiştir
  • doc.SaveAsPDF(stream)'i pdf.SaveAs(path) veya pdf.BinaryData ile değiştir
  • XHTML şablonlarını düz HTML5'e dönüştürün (ad alanı gerekliliği yoktur)
  • {{ }} Handlebars bağlamasını standart şablonla (Razor / dize interpolasyonu) değiştir
  • @page CSS'i renderer.RenderingOptions (PaperSize, MarginTop, vb.)'ye taşı
  • @page kenar kutusu başlıklarını/alt bilgilerini HtmlHeaderFooter'a, {page} ve {total-pages} yer tutucularla birlikte dönüştür
  • Uygulama başlangıcında lisans başlatma ekle

Test Etme

  • Tüm belge şablonlarını test edin
  • Stil eşlemeleri doğrulayın (tam CSS desteğinden yararlanın)
  • Yeni şablonlama ile veri bağlamayı test edin
  • Sayfa kesilmelerini doğrulayın
  • Yer tutucuları içeren üstbilgileri/altbilgileri test edin
  • Performans karşılaştırması

Lütfen dikkate alınScryber, kendi sahibi tarafından tescilli bir markadır. Bu site, PerceiveIT Limited ile bağlantılı, onaylanmış veya sponsor edilmiş değildir. Tüm ürün adları, logolar ve markalar kendi sahiplerine aittir. Karşılaştırmalar, yalnızca bilgilendirme amaçlıdır ve yazı sırasında halka açık bilgilerle alakalı olarak yansıtılmaktadır.

Curtis Chau
Teknik Yazar

Curtis Chau, Bilgisayar Bilimleri alanında Lisans Derecesine (Carleton Üniversitesi) sahip ve Node.js, TypeScript, JavaScript ve React konularında uzmanlaşmış ön uç geliştirmeyle ilgileniyor. Sezgisel ve estetik açıdan hoş kullanıcı arayüzleri oluşturma tutkunu, Curtis modern çerçevelerle çalışmayı ve iyi yapı...

Daha Fazla Oku

Iron Destek Ekibi

Haftada 5 gün, 24 saat çevrimiçiyiz.
Sohbet
E-posta
Beni Ara