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

Fluid (Şablonlama) Yapısından IronPDF'e Geçiş

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:

Aspekt Fluid + PDF Kütüphanesi IronPDF
Bağımlılıklar 2+ paket (Fluid + PDF kütüphanesi) Tek paket
Şablonlama Liquid sözdizimi ({{ }}) C# dize değişim arayüzü veya Razor
PDF Oluşturma Dış kütüphane gereklidir Yerleşik Krom motor
CSS Desteği PDF kütüphanesine bağlıdır Tam CSS3 (Flexbox/Grid ile)
JavaScript PDF kütüphanesine bağlıdır Tam JavaScript desteği
İş Parçacığı Güvenliği TemplateContext iş parçacığı güvenli değil ChromePdfRenderer iş parçacığı güvenli
Öğrenme Eğrisi Liquid + PDF kütüphanesi API'si HTML/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
# 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
# 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
// Before (Fluid + external PDF library)
using Fluid;
using Fluid.Values;
using SomeExternalPdfLibrary;

// After (IronPDF)
using IronPdf;
using IronPdf.Rendering;  // For RenderingOptions
Imports Fluid
Imports Fluid.Values
Imports SomeExternalPdfLibrary

Imports IronPdf
Imports IronPdf.Rendering ' For RenderingOptions
$vbLabelText   $csharpLabel

Adım 3: Lisansa İzin Verin

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

IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY";
IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY";
IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY"
$vbLabelText   $csharpLabel

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);
    }
}
// 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);
    }
}
Imports Fluid
Imports System.IO
Imports System.Threading.Tasks

Module Program
    Async Function Main() As Task
        Dim parser As New FluidParser()
        Dim template = parser.Parse("<html><body><h1>Hello {{name}}!</h1></body></html>")
        Dim context As New TemplateContext()
        context.SetValue("name", "World")
        Dim html = Await template.RenderAsync(context)

        ' Fluid only generates HTML - you'd need another library to convert to PDF
        File.WriteAllText("output.html", html)
    End Function
End Module
$vbLabelText   $csharpLabel

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");
    }
}
// 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");
    }
}
Imports IronPdf
Imports System

Class Program
    Shared Sub Main()
        Dim renderer = New ChromePdfRenderer()
        Dim html = "<html><body><h1>Hello World!</h1></body></html>"
        Dim pdf = renderer.RenderHtmlAsPdf(html)
        pdf.SaveAs("output.pdf")
    End Sub
End Class
$vbLabelText   $csharpLabel

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);
    }
}
// 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);
    }
}
Imports Fluid
Imports System
Imports System.IO
Imports System.Threading.Tasks

Module Program
    Async Function Main() As Task
        Dim parser As New FluidParser()
        Dim template = parser.Parse("
            <html><body>
                <h1>Invoice #{{invoiceNumber}}</h1>
                <p>Date: {{date}}</p>
                <p>Customer: {{customer}}</p>
                <p>Total: ${{total}}</p>
            </body></html>")

        Dim context As New TemplateContext()
        context.SetValue("invoiceNumber", "12345")
        context.SetValue("date", DateTime.Now.ToShortDateString())
        context.SetValue("customer", "John Doe")
        context.SetValue("total", 599.99)

        Dim html = Await template.RenderAsync(context)
        ' Fluid outputs HTML - requires additional PDF library
        File.WriteAllText("invoice.html", html)
    End Function
End Module
$vbLabelText   $csharpLabel

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");
    }
}
// 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");
    }
}
Imports IronPdf
Imports System

Module Program
    Sub Main()
        Dim renderer As New ChromePdfRenderer()
        Dim invoiceNumber As String = "12345"
        Dim [date] As String = DateTime.Now.ToShortDateString()
        Dim customer As String = "John Doe"
        Dim total As Double = 599.99

        Dim html As String = $"
            <html><body>
                <h1>Invoice #{invoiceNumber}</h1>
                <p>Date: {[date]}</p>
                <p>Customer: {customer}</p>
                <p>Total: ${total}</p>
            </body></html>"

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

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);
    }
}
// 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);
    }
}
Imports Fluid
Imports System.Collections.Generic
Imports System.IO
Imports System.Threading.Tasks

Class Program
    Shared Async Function Main() As Task
        Dim parser As New FluidParser()
        Dim template = parser.Parse("
            <html><body>
                <h1>{{title}}</h1>
                <ul>
                {% for item in items %}
                    <li>{{item}}</li>
                {% endfor %}
                </ul>
            </body></html>")

        Dim context As New TemplateContext()
        context.SetValue("title", "My List")
        context.SetValue("items", New String() {"Item 1", "Item 2", "Item 3"})

        Dim html = Await template.RenderAsync(context)
        ' Fluid generates HTML only - separate PDF conversion needed
        File.WriteAllText("template-output.html", html)
    End Function
End Class
$vbLabelText   $csharpLabel

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");
    }
}
// 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");
    }
}
Imports IronPdf
Imports System
Imports System.Collections.Generic

Module Program
    Sub Main()
        Dim renderer As New ChromePdfRenderer()
        Dim title As String = "My List"
        Dim items As String() = {"Item 1", "Item 2", "Item 3"}

        Dim html As String = $"
            <html><body>
                <h1>{title}</h1>
                <ul>"

        For Each item As String In items
            html += $"<li>{item}</li>"
        Next

        html += "</ul></body></html>"

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

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
FluidParser Yok
FluidTemplate Yok
TemplateContext C# nesneleri/dizgeleri
TemplateOptions RenderingOptions
FluidValue Yerel C# türleri
Harici PDF sınıfı ChromePdfRenderer

Metot Haritalama

Fluid Yöntemi IronPDF 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özdizimi C# 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}"; }
// Liquid: {{name | upcase}}
// C#: $"{name.ToUpper()}"

// Liquid: {% for item in items %}{{item}}{% endfor %}
// C#: foreach (var item in items) { html += $"{item}"; }
' Liquid: {{name | upcase}}
' C#: $"{name.ToUpper()}"
Dim result As String = name.ToUpper()

' Liquid: {% for item in items %}{{item}}{% endfor %}
' C#: foreach (var item in items) { html += $"{item}"; }
For Each item In items
    html &= item.ToString()
Next
$vbLabelText   $csharpLabel

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>";
// Before (Fluid)
var context = new TemplateContext();
context.SetValue("customer", customerName);

// After (IronPDF)
var customer = customerName;
var html = $"<p>Customer: {customer}</p>";
' Before (Fluid)
Dim context As New TemplateContext()
context.SetValue("customer", customerName)

' After (IronPDF)
Dim customer = customerName
Dim html = $"<p>Customer: {customer}</p>"
$vbLabelText   $csharpLabel

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;
}
// Thread-safe usage
private static readonly ChromePdfRenderer _renderer = new ChromePdfRenderer();

public byte[] GeneratePdf(string html)
{
    var pdf = _renderer.RenderHtmlAsPdf(html);
    return pdf.BinaryData;
}
' Thread-safe usage
Private Shared ReadOnly _renderer As New ChromePdfRenderer()

Public Function GeneratePdf(html As String) As Byte()
    Dim pdf = _renderer.RenderHtmlAsPdf(html)
    Return pdf.BinaryData
End Function
$vbLabelText   $csharpLabel

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}");
}
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}");
}
Try
    Dim pdf = renderer.RenderHtmlAsPdf(html)
    pdf.SaveAs("output.pdf")
Catch ex As Exception
    ' Single point of failure—easier debugging
    Console.WriteLine($"PDF generation failed: {ex.Message}")
End Try
$vbLabelText   $csharpLabel

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 "{{"
# 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ınFluid, 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ı...

Daha Fazla Oku

Iron Destek Ekibi

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