IRONSOFTWAREHOME
VIDEOLAR

C# Kullanarak PDF'lere Özel Kağıt Boyutları Nasıl Ayarlanır | IronPDF

Curtis Chau
Curtis Chau
Updated: 19 Temmuz 2026

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ı

AspektScryber.CoreIronPDF
LisansLGPL v3Ticari
Oluşturma MotoruÖzel XHTML/CSS düzen motoruChromium
CSS DesteğiAlt küme (Grid yok, kısmi Flexbox)Tam CSS3
JavaScriptYürütülmezTam (Chromium V8)
Şablon BağlamaHandlebars stilinde {{ }} + <template>Standard (Razor, RazorLight, etc.)
Giriş Katılığıİyi yapılandırılmış XHTML gerektirirGerçek dünya HTML'sini kabul eder
Asenkron DestekPDFAsync MVC yardımcısı; sync coreTam asenkron API
DokümantasyonBelgeleri oku sitesi + örneklerKapsamlı
Topluluk DesteğiDaha küçükDaha büyük
Ticari DestekTopluluk destekliTicari 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
SHELL

Lisans Yapılandırması

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

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;

Temel API Eşlemeleri

Scryber.CoreIronPDF
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.Titlepdf.MetaData.Title
doc.Info.Authorpdf.MetaData.Author
@page şablon içinde CSSrenderer.RenderingOptions.PaperSize / kenar boşlukları
doc.RenderOptionsrenderer.RenderingOptions
Handlebars {{value}} + doc.ParamsRazor / 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);
        }
    }
}

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");
    }
}

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);
        }
    }
}

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");
    }
}

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);
        }
    }
}

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");
    }
}

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>
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);

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

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");

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");

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");

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

ÖzellikScryber.CoreIronPDF
HTML'den PDF'yeÖzel düzen motoruyla XHTML+CSSTam Chromium
URL'yi PDF'ye çevirSadece manuel veri çekmeYerel RenderUrlAsPdf
CSS IzgarasıDesteklenmiyorTam destek
FlexboxKısmiTam destek
JavaScriptYürütülmezTam (V8)
Veri Bağlama{{ }} Handlebars + doc.ParamsRazor / RazorLight / değişmezler
Başlıklar/Altbilgiler@page kenar kutuları / şablon bölümleriHtmlHeaderFooter ile {page} {total-pages}
PDF'leri birleştirDesteklenmiyorYerleşik PdfDocument.Merge
PDF AyırmaDesteklenmiyorEvet
FiligranlarŞablonda yerleşik HTML üzerindenYerel ApplyStamp / ApplyWatermark
Dijital İmzalarDesteklenmiyorEvet
PDF/ADesteklenmiyorEvet (PDF/A-1b, PDF/A-3)
Şifre KorumasıDesteklenmiyorTam (kullanıcı/sahip + izinler)
Asenkron DestekPDFAsync MVC yardımcısı; sync coreTam 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ın: Scryber, 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ılandırılmış, görsel olarak çekici kılavuzlar oluşturmayı seviyor.

...
Daha Fazla Oku

İlgili Makaleler

Key in blue circle

Ücretsiz 30 günlük Deneme Anahtarınızı anında edinin.

Your trial license will be sent to your email address

Herhangi bir sınırlama yoktur. %100 erişim. Kredi kartı gerekmez.

bullet_checkedKredi kartı veya hesap oluşturma gerektirmezHerhangi bir sınırlama yoktur. %100 erişim. Kredi kartı gerekmez.
  • Logo Aetna
  • Logo NASA
  • Logo GE
  • Logo Porsche
  • Logo USDA
  • Logo Qatar
Join Millions of Engineers who’ve tried IronPDF
Ücretsiz Canlı Demo rezervasyonu yapın
Booking Badge

Dünya Çapında Milyonlarca Mühendisin Güvendiği

Iron Software müşteri logoları
Bağımsız Danışmanlık Alın
Aşağıdaki formu doldurun veya sales@ironsoftware.com adresine e-posta gönderin
Bilgileriniz daima gizli kalacaktır.
Dünya Çapında Milyonlarca Mühendisin Güvendiği
Iron Software müşteri logoları
Ücretsiz 30 Günlük Deneme Anahtarınızı anında alın.
Kredi kartı veya hesap oluşturma gerektirmez