IRONSOFTWAREHOME
VIDEOLAR

Razor Başsız olarak C# Kullanarak CSHTML'i PDF'e Dönüştürmek

Curtis Chau
Curtis Chau
Updated: 18 Mayıs 2026

Fluid, bir .NET kütüphanesidir (NuGet üzerinden Fluid.Core olarak sağlanan, Sebastien Ros tarafından yazılan, MIT lisanslı) ve Liquid şablonlama dilini uygular, geliştiricilere dinamik şablonları render etmenin ve içeriği sunum mantığından ayırmanın esnek bir yolunu sunar. Fluid, dinamik metin çıktıları oluşturmakta etkilidir, ancak doğrudan PDF oluşturmayı desteklemez — geliştiriciler, HTML çıktısını PDF belgelerine dönüştürmek için ek bir PDF kütüphanesi entegre etmelidir. Bu iki kütüphanelik yaklaşım, birçok geliştirme ekibinin ortadan kaldırmayı hedeflediği bir karmaşıklık getirir.

Bu kılavuz, profesyonel .NET geliştiricilerin bu geçişi değerlendirmesi için, adım adım talimatlar, kod karşılaştırmaları ve pratik örnekler ile Fluid (şablonlama) ile harici PDF kütüphanelerinden IronPDF'ye tam bir geçiş yolu sunar.

Fluid (Şablonlama) Yerine Neden IronPDF'yi Seçmelisiniz?

Fluid, sağlam bir Liquid tabanlı şablon motorudur, ancak PDF oluşturma için kullanılması önemli karmaşıklıklar ekler:

İki Kütüphane Bağımlılığı: Fluid yalnızca HTML üretir—PDF oluşturmak için ayrı bir PDF kütüphanesine (wkhtmltopdf, PuppeteerSharp vb.) ihtiyacınız vardır, bu da bağımlılıklarınızı ve bakım yükünüzü iki katına çıkarır.

Entegrasyon Karmaşıklığı: İki kütüphaneyi koordine etmek, iki set yapılandırma, hata işleme ve güncellemeleri yönetmek anlamına gelir. Bir şeyler bozulduğunda, hata ayıklama daha zor hale gelir.

Liquid Söz Dizimi Öğrenme Eğrisi: Geliştiriciler, C# zaten yerleşik güçlü string işleme yeteneklerine sahipken Liquid şablonlama sözdizimini ({{ }}, {% %}) öğrenmelidir.

Sınırlı PDF Kontrolü: PDF çıktı kaliteniz, Fluid ile eşleştirdiğiniz herhangi bir PDF kütüphanesine bağlıdır, özel bir render motoruna değil.

Hata Ayıklama Zorlukları: Hatalar hem şablonlama hem de PDF oluşturma aşamasında meydana gelebilir, bu da tek bir entegre çözümle karşılaştırıldığında sorun gidermeyi zorlaştırır.

İş Parçacığı Güvenliği Endişeleri: TemplateContext iş parçacığı güvenli değil ve eşzamanlı uygulamalarda dikkatli yönetim gerektirir.

##IronPDF vs Fluid (Şablonlama): Özellik Karşılaştırması

Mimari farklılıkları anlamak, teknik karar vericilerin geçiş yatırımını değerlendirmesine yardımcı olur:

AspektFluid + PDF KütüphanesiIronPDF
Bağımlılıklar2+ paket (Fluid + PDF kütüphanesi)Tek paket
ŞablonlamaLiquid sözdizimi ({{ }})C# dize değişim arayüzü veya Razor
PDF OluşturmaDış kütüphane gereklidirYerleşik Krom motor
CSS DesteğiPDF kütüphanesine bağlıdırTam CSS3 (Flexbox/Grid ile)
JavaScriptPDF kütüphanesine bağlıdırTam JavaScript desteği
İş Parçacığı GüvenliğiTemplateContext iş parçacığı güvenli değilChromePdfRenderer iş parçacığı güvenli
Öğrenme EğrisiLiquid + PDF kütüphanesi API'siHTML/CSS (web standartları)
Hata Yönetimiİki hata kaynağıTek hata kaynağı

Hızlı Başlangıç: Fluid'den IronPDF'ye Geçiş

Geçiş bu öncü adımlarla hemen başlayabilir.

Adım 1: NuGet Paketlerini Değiştirin

Fluid'i ve herhangi bir harici PDF kütüphanesini kaldırın:

# Remove Fluid and external PDF library
dotnet remove package Fluid.Core
dotnet remove package WkHtmlToPdf-DotNet  # or whatever PDF library you used
dotnet remove package PuppeteerSharp       # if used
SHELL

IronPDF'i yükleyin:

# Install IronPDF(all-in-one solution)
dotnet add package IronPdf
SHELL

Adım 2: Ad Alanlarını Güncelleyin

Fluid ad alanlarınıIronPDF ile değiştirin:

// Before (Fluid + external PDF library)
using Fluid;
using Fluid.Values;
using SomeExternalPdfLibrary;

// After (IronPDF)
using IronPdf;
using IronPdf.Rendering;  // For RenderingOptions

Adım 3: Lisansa İzin Verin

Uygulama başlangıcında lisans başlatmayı ekleyin:

IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY";

Kod Göç Örnekleri

Temel HTML'den PDF'ye

En temel işlem, bu yaklaşımlar arasındaki temel farkı ortaya koyar.

Fluid Yaklaşımı:

// NuGet: Install-Package Fluid.Core
using Fluid;
using System.IO;
using System.Threading.Tasks;

class Program
{
    static async Task Main()
    {
        var parser = new FluidParser();
        var template = parser.Parse("<html><body><h1>Hello {{name}}!</h1></body></html>");
        var context = new TemplateContext();
        context.SetValue("name", "World");
        var html = await template.RenderAsync(context);
        
        // Fluid only generates HTML - you'd need another library to convert to PDF
        File.WriteAllText("output.html", html);
    }
}

IronPDF Yaklaşımı:

// NuGet: Install-Package IronPdf
using IronPdf;
using System;

class Program
{
    static void Main()
    {
        var renderer = new ChromePdfRenderer();
        var html = "<html><body><h1>Hello World!</h1></body></html>";
        var pdf = renderer.RenderHtmlAsPdf(html);
        pdf.SaveAs("output.pdf");
    }
}

Fluid, bir FluidParser oluşturmayı, şablon stringini ayrıştırmayı, bir TemplateContext oluşturmayı, her değişken için SetValue() çağırmayı, HTML elde etmek için eşzamanlı render etmeyi ve ardından bir dosyaya yazmayı gerektirir ki bu hala bir PDF değildir. Kodda bulunan yorumda, "Fluid yalnızca HTML üretir - PDF'ye dönüştürmek için başka bir kütüphane gerekiyor." ifadesi açıkça belirtilmiştir.

IronPDF, bu karmaşıklığı ortadan kaldırır: bir renderer oluşturun, RenderHtmlAsPdf() çağırın ve doğrudan PDF olarak kaydedin. Ara HTML dosyaları yok, ek kütüphaneler yok.

İleri düzey HTML-to-PDF senaryoları için HTML'den PDF'ye dönüşüm rehberine bakın.

Dinamik Verilerle Fatura Şablonu

Birden fazla değişken içeren belge şablonları, şablonlama deseni farklılıklarını açıkça gösterir.

Fluid Yaklaşımı:

// NuGet: Install-Package Fluid.Core
using Fluid;
using System;
using System.IO;
using System.Threading.Tasks;

class Program
{
    static async Task Main()
    {
        var parser = new FluidParser();
        var template = parser.Parse(@"
            <html><body>
                <h1>Invoice #{{invoiceNumber}}</h1>
                <p>Date: {{date}}</p>
                <p>Customer: {{customer}}</p>
                <p>Total: ${{total}}</p>
            </body></html>");
        
        var context = new TemplateContext();
        context.SetValue("invoiceNumber", "12345");
        context.SetValue("date", DateTime.Now.ToShortDateString());
        context.SetValue("customer", "John Doe");
        context.SetValue("total", 599.99);
        
        var html = await template.RenderAsync(context);
        // Fluid outputs HTML - requires additional PDF library
        File.WriteAllText("invoice.html", html);
    }
}

IronPDF Yaklaşımı:

// NuGet: Install-Package IronPdf
using IronPdf;
using System;

class Program
{
    static void Main()
    {
        var renderer = new ChromePdfRenderer();
        var invoiceNumber = "12345";
        var date = DateTime.Now.ToShortDateString();
        var customer = "John Doe";
        var total = 599.99;
        
        var html = $@"
            <html><body>
                <h1>Invoice #{invoiceNumber}</h1>
                <p>Date: {date}</p>
                <p>Customer: {customer}</p>
                <p>Total: ${total}</p>
            </body></html>";
        
        var pdf = renderer.RenderHtmlAsPdf(html);
        pdf.SaveAs("invoice.pdf");
    }
}

Fluid, Liquid'ın {{variable}} sözdizimini kullanır ve her değişken için context.SetValue() kullanır. Açıklama açıkça belirtir "Fluid HTML çıkışlar - ek PDF kütüphanesi gereklidir." IronPDF, geliştiricilerin zaten bildiği standart C# string interpolesini ($"{variable}") kullanır ve doğrudan PDF olarak çıktı verir.

Daha fazla belge oluşturma deseni için IronPDF rehberlerine göz atın.

Döngülerle Dinamik Veri

Koleksiyonlar ve döngülerle şablonlar, kontrol akışı farklılıklarını gösterir.

Fluid Yaklaşımı:

// NuGet: Install-Package Fluid.Core
using Fluid;
using System.Collections.Generic;
using System.IO;
using System.Threading.Tasks;

class Program
{
    static async Task Main()
    {
        var parser = new FluidParser();
        var template = parser.Parse(@"
            <html><body>
                <h1>{{title}}</h1>
                <ul>
                {% for item in items %}
                    <li>{{item}}</li>
                {% endfor %}
                </ul>
            </body></html>");
        
        var context = new TemplateContext();
        context.SetValue("title", "My List");
        context.SetValue("items", new[] { "Item 1", "Item 2", "Item 3" });
        
        var html = await template.RenderAsync(context);
        // Fluid generates HTML only - separate PDF conversion needed
        File.WriteAllText("template-output.html", html);
    }
}

IronPDF Yaklaşımı:

// NuGet: Install-Package IronPdf
using IronPdf;
using System;
using System.Collections.Generic;

class Program
{
    static void Main()
    {
        var renderer = new ChromePdfRenderer();
        var title = "My List";
        var items = new[] { "Item 1", "Item 2", "Item 3" };
        
        var html = $@"
            <html><body>
                <h1>{title}</h1>
                <ul>";
        
        foreach (var item in items)
        {
            html += $"<li>{item}</li>";
        }
        
        html += "</ul></body></html>";
        
        var pdf = renderer.RenderHtmlAsPdf(html);
        pdf.SaveAs("template-output.pdf");
    }
}

Fluid, Liquid'ın {% for item in items %}...{% endfor %} sözdizimini kullanır—geliştiricilerin öğrenmesi gereken bir şablonlama dili. Açıklama belirtir "Fluid sadece HTML üretir - ayrı PDF dönüştürme gereklidir." IronPDF, öğrenilecek yeni bir sözdizimi olmadan standart C# foreach döngülerini kullanır ve doğrudan PDF olarak çıktı verir.

Fluid API'sini IronPDF'e Eşleştirme Referansı

Bu eşleştirme, doğrudan API eşdeğerlerini göstererek geçişi hızlandırır:

Temel Sınıf Eşlemeleri

Fluid SınıfıIronPDF Eşdeğeri
FluidParserYok
FluidTemplateYok
TemplateContextC# nesneleri/dizgeleri
TemplateOptionsRenderingOptions
FluidValueYerel C# türleri
Harici PDF sınıfıChromePdfRenderer

Metot Haritalama

Fluid YöntemiIronPDF Eşdeğeri
new FluidParser()new ChromePdfRenderer()
parser.Parse(source)Yok
template.RenderAsync(context)renderer.RenderHtmlAsPdf(html)
context.SetValue("key", value)var key = value;

Liquid Söz Diziminden C#'a Eşleme

Liquid SözdizimiC# Eşdeğeri
{{variable}}$"{variable}"
{% for item in items %}foreach (var item in items)
{% if condition %}if (condition)
{{x |upcase}}x.ToUpper()
{{x |date: '%Y-%m-%d'}}x.ToString("yyyy-MM-dd")
{{x |number_with_precision: 2}}x.ToString("F2")

Yaygın Göç Sorunları ve Çözümleri

Sorun 1: Liquid Sözdizimi Dönüşümü

Fluid: {{variable}} ve {% control %} sözdizimini kullanır.

Çözüm: C# dize interpolasyonu ve kontrol akışı ile değiştirin:

// Liquid: {{name | upcase}}
// C#: $"{name.ToUpper()}"

// Liquid: {% for item in items %}{{item}}{% endfor %}
// C#: foreach (var item in items) { html += $"{item}"; }
C#

Sorun 2: TemplateContext Değişkenleri

Fluid: Veri aktarmak için context.SetValue("key", value) kullanır.

Çözüm: Standart C# değişkenlerini kullanın:

// Before (Fluid)
var context = new TemplateContext();
context.SetValue("customer", customerName);

// After (IronPDF)
var customer = customerName;
var html = $"<p>Customer: {customer}</p>";

Sorun 3: Thread Güvenliği

Fluid: TemplateContext iş parçacığı güvenli değildir ve eşzamanlı uygulamalarda dikkatli yönetim gerektirir.

Çözüm: ChromePdfRenderer iş parçacığı güvenlidir ve iş parçacıkları arasında paylaşılabilir:

// Thread-safe usage
private static readonly ChromePdfRenderer _renderer = new ChromePdfRenderer();

public byte[] GeneratePdf(string html)
{
    var pdf = _renderer.RenderHtmlAsPdf(html);
    return pdf.BinaryData;
}

Sorun 4: İki Aşamalı Hata Yönetimi

Hareketli: Hatalar şablon oluşturma aşamasında veya PDF oluşturma aşamasında meydana gelebilir.

Çözüm: IronPDF'in tek bir hata kaynağı vardır:

try
{
    var pdf = renderer.RenderHtmlAsPdf(html);
    pdf.SaveAs("output.pdf");
}
catch (Exception ex)
{
    // Single point of failure—easier debugging
    Console.WriteLine($"PDF generation failed: {ex.Message}");
}

Hareketli Geçiş Kontrol Listesi

Geçiş Öncesi Görevler

Kod tabanınızı hareketli kullanımını belirlemek için denetleyin:

# Find all Fluid references
grep -r "FluidParser\|FluidTemplate\|TemplateContext\|using Fluid" --include="*.cs" --include="*.csproj" .

# Find Liquid template files
find . -name "*.liquid" -o -name "*.html" | xargs grep -l "{{"
SHELL

Tüm şablonları belgeleyin: dosya konumları, kullanılan değişkenler, döngüler ve koşullar ve harici PDF kütüphane yapılandırması.

Kod Güncelleme Görevleri

  1. Fluid.Core NuGet paketini kaldırın
  2. Harici PDF kütüphanesini kaldırın 3.IronPDF NuGet paketini yükleyin
  3. Namespace importlarını Fluid'den IronPdf'e güncelleyin
  4. {{variable}}'i $"{variable}"'e dönüştürün
  5. {% for item in collection %}'i C# foreach'e dönüştürün
  6. {% if condition %}'i C# if ifadelerine dönüştürün
  7. Liquid filtrelerini C# yöntemlerine dönüştürün (örneğin, |upcase.ToUpper())
  8. FluidParser'yi ChromePdfRenderer ile değiştirin
  9. TemplateContext.SetValue()'yi doğrudan C# değişkenleriyle değiştirin
  10. Harici PDF kütüphane çağrılarını kaldırın 12.IronPDF lisans başlatmasını başlatma sırasında ekleyin

Geçiş Sonrası Testler

Geçiş sonrasında bu yönleri doğrulayın:

  • PDF çıktısının beklentilere uyan şekilde olduğunu doğrulayın
  • Tüm şablon varyasyonlarının doğru göründüğünden emin olun
  • Görsellerin ve tasarımın düzgün gösterildiğini kontrol edin
  • Sayfa kırılmaları düzgün meydana geldiğini doğrulayın
  • Çeşitli veri boyutlarıyla test yapın
  • Fluid + harici kütüphaneye karşı performans testi yapın
  • Eşzamanlı senaryolarda thread güvenliğini test edin

Temizlik Görevleri

  • .liquid şablon dosyalarını silin (artık gerekli değilse)
  • Fluid ile ilgili yardımcı kodu kaldırın
  • Belgeleri güncelleyin
  • Kullanılmayan bağımlılıkları temizleyin

IronPDF'e Geçmenin Temel Faydaları

Fluid (şablon oluşturma) ve harici PDF kütüphanelerinden IronPDF'e geçiş, birkaç kritik avantaj sağlar:

Tek Paket Çözümü: İki kütüphane bağımlılığını ortadan kaldırın. IronPDF, HTML/CSS aracılığıyla hem şablon oluşturmayı hem de PDF üretimini tek bir pakette yönetir.

Yeni Sözdizimi Öğrenme Yok: Sıvı şablon sözdizimini öğrenmek yerine standart C# dizgi değişkenleri ve kontrol akışını kullanın.

İş Parçacığı Güvenli Render: ChromePdfRenderer iş parçacığı güvenli, TemplateContext değil, eşzamanlı PDF oluşturmayı basitleştirir.

Chromium İşleme Motoru: Chromium tabanlı işleme, modern CSS (Flexbox ve Grid dahil) ve JavaScript yürütmeyi destekler.

Tek Hata Kaynağı: yalnızca bir kütüphaneyi sorun gidermekle hata ayıklama kolaylaşır, şablon ve PDF oluşturma aşamaları arasında koordinasyon yerine.

Geniş .NET Kapsamı: IronPDF, .NET Framework 4.6.2+, .NET Core 2.0+, .NET Standard 2.0 ve .NET 5'ten .NET 10'a kadar destekler.

Lütfen dikkate alın: Fluid, PuppeteerSharp ve wkhtmltopdf, ilgili sahiplerinin tescilli ticari markalarıdır. Bu site, bu projeler veya onların geliştiricileri ile ilişkili, onaylanmış veya desteklenmiş 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