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
IronPDF'i yükleyin:
# Install IronPDF(all-in-one solution)
dotnet add package IronPdf
# Install IronPDF(all-in-one solution)
dotnet add package IronPdf
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
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"
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
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
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
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
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
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
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
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>"
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
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
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 "{{"
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
- Fluid.Core NuGet paketini kaldırın
- Harici PDF kütüphanesini kaldırın 3.IronPDF NuGet paketini yükleyin
- Namespace importlarını
Fluid'denIronPdf'e güncelleyin {{variable}}'i$"{variable}"'e dönüştürün{% for item in collection %}'i C#foreach'e dönüştürün{% if condition %}'i C#ififadelerine dönüştürün- Liquid filtrelerini C# yöntemlerine dönüştürün (örneğin,
|upcase→.ToUpper()) FluidParser'yiChromePdfRendererile değiştirinTemplateContext.SetValue()'yi doğrudan C# değişkenleriyle değiştirin- 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.

