Nutrient.io'dan IronPDF'e C# ile Nasıl Geçilir
Nutrient.io'dan (eski adıyla PSPDFKit) IronPDF'ye geçiş, asenkron birinci kalıp ile kompleks doküman zeka platformundan doğrudan senkron API'lere sahip odaklanmış bir PDF kütüphanesine geçiş yaparak sizin .NET PDF iş akışınızı basitleştirir. Bu rehber, tüm önemli PDF yeteneklerini korurken platformu azaltan kapsamlı, adım adım bir geçiş yolu sunar.
Nutrient.io'dan IronPDF'ye Neden Geçiş
Platform Karmaşıklığı Problemi
Nutrient.io (eski adıyla PSPDFKit), bir PDF SDK'dan kapsamlı bir "doküman zeka platformu" haline evrilmiştir. Bu dönüşüm yetenekleri genişletirken, sade PDF operasyonlarına ihtiyaç duyan ekipler için önemli zorlukları beraberinde getirir:
-
Platform Aşırı Mühendisliği: Bir zamanlar bir PDF SDK olan şey, artık AI özellikleri ve belge iş akışı yeteneklerine sahip tam bir doküman zeka platformu olup, basit PDF görevleri için gereksiz olabilir.
-
Kurumsal Fiyatlandırma: Nutrient.io, satış ile iletişim gerektiren belirsiz fiyatlandırma ile büyük organizasyonlara yönelik konumlandırılmıştır. Bu durum, küçük ila orta boyutlu ekipler için engeller oluştururken, bütçe planlamasını zorlaştırıyor.
-
Rebrand Karmaşası: PSPDFKit → Nutrient geçişi, iki isme de referansların olduğu bir dokümantasyon sorunları oluşturmuştur. Paket isimleri hala PSPDFKit kullanabilir ve geçiş yolları süresince belirsiz kalabilir.
-
Asenkron-Öncelikli Karmaşıklık: Nutrient.io'daki her şey asenkron/await desenlerini gerektirir. Basit işlemler bile başlatma için
PdfProcessor.CreateAsync()ve temel görevler için asenkron yöntemler gerektirir, bu da senkron iş akışları için ek yük getirir. - Ağır Bağımlılıklar: Tam platform daha fazla kaynak, daha büyük bir paket alanı, daha fazla başlatma süresi ve ek yapılandırma gerektirir.
Nutrient.io vsIronPDFKarşılaştırması
| Bağlam | Nutrient.io (PSPDFKit) | IronPDF |
|---|---|---|
| Odak | Belge zekası platformu | PDF kütüphanesi |
| Fiyatlandırma | Kurumsal (satış ile iletişim) | Şeffaf, yayınlanmış |
| Mimari | Kompleks platform | Basit kütüphane |
| API Stili | Asenkron-öncelikli | Asenkron seçeneklerle birlikte eşzamanlı |
| Bağımlılıklar | Ağır | Hafif |
| Yapılandırma | Karmaşık yapılandırma nesneleri | Basit doğrudan özellikler |
| Öğrenme Eğrisi | Sarp (platform) | Kibar (kütüphane) |
| Hedef Kullanıcılar | Enterprise | Tüm ekip boyutları |
2025 ve 2026 boyunca .NET 10 ve C# 14 benimsemesini planlayan ekipler için, IronPDF, tam bir doküman zeka platformunun fiili maliyeti olmadan temiz bir şekilde entegre olan daha basit bir temel sağlar.
Başlamadan Önce
Önkoşullar
- .NET Ortamı: .NET Framework 4.6.2+ veya .NET Core 3.1+ / .NET 5/6/7/8/9+
- NuGet Erişimi: NuGet paketlerini yükleme yeteneği
- IronPDF Lisansı: Lisans anahtarınızı ironpdf.com adresinden edinin
NuGet Paket Değişiklikleri
# Remove Nutrient/PSPDFKit packages
dotnet remove package PSPDFKit.NET
dotnet remove package PSPDFKit.PDF
dotnet remove package Nutrient
dotnet remove package Nutrient.PDF
# Install IronPDF
dotnet add package IronPdf
# Remove Nutrient/PSPDFKit packages
dotnet remove package PSPDFKit.NET
dotnet remove package PSPDFKit.PDF
dotnet remove package Nutrient
dotnet remove package Nutrient.PDF
# Install IronPDF
dotnet add package IronPdf
Lisans Yapılandırması
// Add at application startup (Program.cs or Startup.cs)
IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY";
// Add at application startup (Program.cs or Startup.cs)
IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY";
' Add at application startup (Program.vb or Startup.vb)
IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY"
Nutrient.io Kullanımını Belirleyin
# Find all Nutrient/PSPDFKit references
grep -r "PSPDFKit\|Nutrient\|PdfProcessor\|PdfConfiguration" --include="*.cs" .
# Find all Nutrient/PSPDFKit references
grep -r "PSPDFKit\|Nutrient\|PdfProcessor\|PdfConfiguration" --include="*.cs" .
API Referansının Tamamı
Başlatma Haritaları
| Nutrient.io (PSPDFKit) | IronPDF |
|---|---|
await PdfProcessor.CreateAsync() |
new ChromePdfRenderer() |
processor.Dispose() |
(otomatik veya manuel) |
new PdfConfiguration { ... }|renderer.RenderingOptions` |
Belge Yükleme Haritaları
| Nutrient.io (PSPDFKit) | IronPDF |
|---|---|
await processor.OpenAsync(path) |
PdfDocument.FromFile(path) |
Document.LoadFromStream(stream) |
PdfDocument.FromStream(stream) |
Document.LoadFromBytes(bytes) |
new PdfDocument(bytes) |
PDF Oluşturma Haritaları
| Nutrient.io (PSPDFKit) | IronPDF |
|---|---|
await processor.GeneratePdfFromHtmlStringAsync(html) |
renderer.RenderHtmlAsPdf(html) |
await processor.GeneratePdfFromUrlAsync(url) |
renderer.RenderUrlAsPdf(url) |
await processor.GeneratePdfFromFileAsync(path) |
renderer.RenderHtmlFileAsPdf(path) |
Belge Operasyonları Haritaları
| Nutrient.io (PSPDFKit) | IronPDF |
|---|---|
await processor.MergeAsync(docs) |
PdfDocument.Merge(pdfs) |
document.PageCount |
pdf.PageCount |
await document.SaveAsync(path) |
pdf.SaveAs(path) |
document.ToBytes() |
pdf.BinaryData |
Açıklamalar ve Filigran Haritaları
| Nutrient.io (PSPDFKit) | IronPDF |
|---|---|
await document.AddAnnotationAsync(index, annotation) |
pdf.ApplyWatermark(html) |
new TextAnnotation("text") |
Filigranda HTML |
annotation.Opacity = 0.5 |
CSS opacity: 0.5 |
annotation.FontSize = 48 |
CSS font-size: 48px |
Kod Geçiş Örnekleri
Örnek 1: HTML'den PDF'e Dönüştürme
Önce (Nutrient.io):
// NuGet: Install-Package PSPDFKit.Dotnet
using PSPDFKit.Pdf;
using System.Threading.Tasks;
class Program
{
static async Task Main()
{
var htmlContent = "<html><body><h1>Hello World</h1></body></html>";
using var processor = await PdfProcessor.CreateAsync();
var document = await processor.GeneratePdfFromHtmlStringAsync(htmlContent);
await document.SaveAsync("output.pdf");
}
}
// NuGet: Install-Package PSPDFKit.Dotnet
using PSPDFKit.Pdf;
using System.Threading.Tasks;
class Program
{
static async Task Main()
{
var htmlContent = "<html><body><h1>Hello World</h1></body></html>";
using var processor = await PdfProcessor.CreateAsync();
var document = await processor.GeneratePdfFromHtmlStringAsync(htmlContent);
await document.SaveAsync("output.pdf");
}
}
Imports PSPDFKit.Pdf
Imports System.Threading.Tasks
Module Program
Async Function Main() As Task
Dim htmlContent As String = "<html><body><h1>Hello World</h1></body></html>"
Using processor = Await PdfProcessor.CreateAsync()
Dim document = Await processor.GeneratePdfFromHtmlStringAsync(htmlContent)
Await document.SaveAsync("output.pdf")
End Using
End Function
End Module
Sonra (IronPDF):
// NuGet: Install-Package IronPdf
using IronPdf;
class Program
{
static void Main()
{
var htmlContent = "<html><body><h1>Hello World</h1></body></html>";
var renderer = new ChromePdfRenderer();
var pdf = renderer.RenderHtmlAsPdf(htmlContent);
pdf.SaveAs("output.pdf");
}
}
// NuGet: Install-Package IronPdf
using IronPdf;
class Program
{
static void Main()
{
var htmlContent = "<html><body><h1>Hello World</h1></body></html>";
var renderer = new ChromePdfRenderer();
var pdf = renderer.RenderHtmlAsPdf(htmlContent);
pdf.SaveAs("output.pdf");
}
}
Imports IronPdf
Class Program
Shared Sub Main()
Dim htmlContent As String = "<html><body><h1>Hello World</h1></body></html>"
Dim renderer As New ChromePdfRenderer()
Dim pdf = renderer.RenderHtmlAsPdf(htmlContent)
pdf.SaveAs("output.pdf")
End Sub
End Class
Nutrient.io yaklaşımı birkaç asenkron adım gerektirir: await PdfProcessor.CreateAsync() ile bir PdfProcessor oluşturmak, ardından await processor.GeneratePdfFromHtmlStringAsync() çağrısı yapmak ve son olarak await document.SaveAsync() yapmak. Tüm yöntem async Task olarak işaretlenmelidir ve işlemci uygun şekilde bertaraf edilmesi için bir using bildirimi gerektirir.
IronPDF bunu dramatik bir şekilde basitleştirir. Bir ChromePdfRenderer oluşturun, RenderHtmlAsPdf() çağırın ve SaveAs() ile kaydedin. Basit işlemler için asenkron/await gerekmez, işlemci yaşam döngüsü yönetmek gerekmez ve using bloklarına ihtiyaç yoktur. Bu desen, PDF iş akışları için asenkron desene ihtiyaç duymayan geliştiriciler için daha sezgiseldir. Daha fazla işleme seçeneği için HTML'den PDF'ye dokümantasyonuna bakın.
Örnek 2: Birden Fazla PDF'yi Birleştirme
Önce (Nutrient.io):
// NuGet: Install-Package PSPDFKit.Dotnet
using PSPDFKit.Pdf;
using System.Threading.Tasks;
using System.Collections.Generic;
class Program
{
static async Task Main()
{
using var processor = await PdfProcessor.CreateAsync();
var document1 = await processor.OpenAsync("document1.pdf");
var document2 = await processor.OpenAsync("document2.pdf");
var mergedDocument = await processor.MergeAsync(new List<PdfDocument> { document1, document2 });
await mergedDocument.SaveAsync("merged.pdf");
}
}
// NuGet: Install-Package PSPDFKit.Dotnet
using PSPDFKit.Pdf;
using System.Threading.Tasks;
using System.Collections.Generic;
class Program
{
static async Task Main()
{
using var processor = await PdfProcessor.CreateAsync();
var document1 = await processor.OpenAsync("document1.pdf");
var document2 = await processor.OpenAsync("document2.pdf");
var mergedDocument = await processor.MergeAsync(new List<PdfDocument> { document1, document2 });
await mergedDocument.SaveAsync("merged.pdf");
}
}
Imports PSPDFKit.Pdf
Imports System.Threading.Tasks
Imports System.Collections.Generic
Class Program
Shared Async Function Main() As Task
Using processor = Await PdfProcessor.CreateAsync()
Dim document1 = Await processor.OpenAsync("document1.pdf")
Dim document2 = Await processor.OpenAsync("document2.pdf")
Dim mergedDocument = Await processor.MergeAsync(New List(Of PdfDocument) From {document1, document2})
Await mergedDocument.SaveAsync("merged.pdf")
End Using
End Function
End Class
Sonra (IronPDF):
// NuGet: Install-Package IronPdf
using IronPdf;
using System.Collections.Generic;
class Program
{
static void Main()
{
var pdf1 = PdfDocument.FromFile("document1.pdf");
var pdf2 = PdfDocument.FromFile("document2.pdf");
var merged = PdfDocument.Merge(pdf1, pdf2);
merged.SaveAs("merged.pdf");
}
}
// NuGet: Install-Package IronPdf
using IronPdf;
using System.Collections.Generic;
class Program
{
static void Main()
{
var pdf1 = PdfDocument.FromFile("document1.pdf");
var pdf2 = PdfDocument.FromFile("document2.pdf");
var merged = PdfDocument.Merge(pdf1, pdf2);
merged.SaveAs("merged.pdf");
}
}
Imports IronPdf
Imports System.Collections.Generic
Class Program
Shared Sub Main()
Dim pdf1 = PdfDocument.FromFile("document1.pdf")
Dim pdf2 = PdfDocument.FromFile("document2.pdf")
Dim merged = PdfDocument.Merge(pdf1, pdf2)
merged.SaveAs("merged.pdf")
End Sub
End Class
Nutrient.io birleştirme işlemi, await PdfProcessor.CreateAsync() ile bir işlemci oluşturmayı, her belgeyi ayrı await processor.OpenAsync() çağrıları ile açmayı, bir List<PdfDocument> oluşturmayı, bu liste ile await processor.MergeAsync() çağrısı yapmayı ve son olarak await mergedDocument.SaveAsync() gerektirir. Bu, temel bir birleştirme için beş asenkron işlemdir.
IronPDF, bunu dört senkron satıra indirir: her PDF'i PdfDocument.FromFile() ile yükleyin, statik PdfDocument.Merge() yöntemi ile birleştirin ve kaydedin. İşlemci yaşam döngüsü yok, liste oluşturma gerekmez (belgeleri doğrudan geçirebilirsiniz) ve hiçbir asenkron yük yok. PDF'leri birleştirme ve bölme hakkında daha fazla bilgi edinin.
Örnek 3: Filigran Ekleme
Önce (Nutrient.io):
// NuGet: Install-Package PSPDFKit.Dotnet
using PSPDFKit.Pdf;
using PSPDFKit.Pdf.Annotation;
using System.Threading.Tasks;
class Program
{
static async Task Main()
{
using var processor = await PdfProcessor.CreateAsync();
var document = await processor.OpenAsync("document.pdf");
for (int i = 0; i < document.PageCount; i++)
{
var watermark = new TextAnnotation("CONFIDENTIAL")
{
Opacity = 0.5,
FontSize = 48
};
await document.AddAnnotationAsync(i, watermark);
}
await document.SaveAsync("watermarked.pdf");
}
}
// NuGet: Install-Package PSPDFKit.Dotnet
using PSPDFKit.Pdf;
using PSPDFKit.Pdf.Annotation;
using System.Threading.Tasks;
class Program
{
static async Task Main()
{
using var processor = await PdfProcessor.CreateAsync();
var document = await processor.OpenAsync("document.pdf");
for (int i = 0; i < document.PageCount; i++)
{
var watermark = new TextAnnotation("CONFIDENTIAL")
{
Opacity = 0.5,
FontSize = 48
};
await document.AddAnnotationAsync(i, watermark);
}
await document.SaveAsync("watermarked.pdf");
}
}
Imports PSPDFKit.Pdf
Imports PSPDFKit.Pdf.Annotation
Imports System.Threading.Tasks
Class Program
Shared Async Function Main() As Task
Using processor = Await PdfProcessor.CreateAsync()
Dim document = Await processor.OpenAsync("document.pdf")
For i As Integer = 0 To document.PageCount - 1
Dim watermark = New TextAnnotation("CONFIDENTIAL") With {
.Opacity = 0.5,
.FontSize = 48
}
Await document.AddAnnotationAsync(i, watermark)
Next
Await document.SaveAsync("watermarked.pdf")
End Using
End Function
End Class
Sonra (IronPDF):
// NuGet: Install-Package IronPdf
using IronPdf;
using IronPdf.Editing;
class Program
{
static void Main()
{
var pdf = PdfDocument.FromFile("document.pdf");
pdf.ApplyWatermark("<h1 style='color:gray;opacity:0.5;'>CONFIDENTIAL</h1>",
50,
VerticalAlignment.Middle,
HorizontalAlignment.Center);
pdf.SaveAs("watermarked.pdf");
}
}
// NuGet: Install-Package IronPdf
using IronPdf;
using IronPdf.Editing;
class Program
{
static void Main()
{
var pdf = PdfDocument.FromFile("document.pdf");
pdf.ApplyWatermark("<h1 style='color:gray;opacity:0.5;'>CONFIDENTIAL</h1>",
50,
VerticalAlignment.Middle,
HorizontalAlignment.Center);
pdf.SaveAs("watermarked.pdf");
}
}
Imports IronPdf
Imports IronPdf.Editing
Class Program
Shared Sub Main()
Dim pdf = PdfDocument.FromFile("document.pdf")
pdf.ApplyWatermark("<h1 style='color:gray;opacity:0.5;'>CONFIDENTIAL</h1>",
50,
VerticalAlignment.Middle,
HorizontalAlignment.Center)
pdf.SaveAs("watermarked.pdf")
End Sub
End Class
Bu örnek, yapısal bir temel farkı vurgular. Nutrient.io, ek açıklamaya dayalı bir yaklaşım kullanır: Opacity ve FontSize gibi özelliklerle bir TextAnnotation nesnesi oluşturur, ardından her bir sayfa için await document.AddAnnotationAsync(i, watermark) çağrısı yaparak her sayfada döngü yaparsınız. Bu, ek açıklama sistemini anlamayı ve döngüyü kendiniz yönetmeyi gerektirir.
IronPDF bir HTML tabanlı yaklaşım kullanır: ApplyWatermark() yöntemi CSS stiline sahip bir HTML dizesi kabul eder. Filigran, tek bir çağrıda tüm sayfalara otomatik olarak uygulanır. Görünümü, ek açıklamalara özgü nesne özellikleri yerine, tanıdık CSS özellikleri (color, opacity, font-size) aracılığıyla kontrol edirsiniz. Bu yaklaşım daha fazla stil esnekliği sağlar—herhangi bir HTML/CSS, geçişler, resimler ve karmaşık düzenler dahil kullanılabilir. Gelişmiş örnekler için filigran dokümantasyonuna bakın.
Kritik Geçiş Notları
Asenkron'dan Senkron'a Dönüşüm
En önemli değişiklik, gereksiz asenkron/await desenlerinin kaldırılmasıdır:
// Nutrient.io: Async-first
using var processor = await PdfProcessor.CreateAsync();
var document = await processor.GeneratePdfFromHtmlStringAsync(html);
await document.SaveAsync("output.pdf");
// IronPDF: Sync by default (async available when needed)
var renderer = new ChromePdfRenderer();
var pdf = renderer.RenderHtmlAsPdf(html);
pdf.SaveAs("output.pdf");
// Nutrient.io: Async-first
using var processor = await PdfProcessor.CreateAsync();
var document = await processor.GeneratePdfFromHtmlStringAsync(html);
await document.SaveAsync("output.pdf");
// IronPDF: Sync by default (async available when needed)
var renderer = new ChromePdfRenderer();
var pdf = renderer.RenderHtmlAsPdf(html);
pdf.SaveAs("output.pdf");
Imports System
Imports System.Threading.Tasks
' Nutrient.io: Async-first
Using processor = Await PdfProcessor.CreateAsync()
Dim document = Await processor.GeneratePdfFromHtmlStringAsync(html)
Await document.SaveAsync("output.pdf")
End Using
' IronPDF: Sync by default (async available when needed)
Dim renderer = New ChromePdfRenderer()
Dim pdf = renderer.RenderHtmlAsPdf(html)
pdf.SaveAs("output.pdf")
Asenkron işlemlere ihtiyaçınız varsa, IronPDF, RenderHtmlAsPdfAsync() gibi asenkron varyantlar sunar.
İşlemci Yaşam Döngüsünü Ortadan Kaldırma
Nutrient.io işlemci oluşturulmasını ve elden çıkarılmasını gerektirir:
// Nutrient.io: Processor lifecycle management
using var processor = await PdfProcessor.CreateAsync();
// ... use processor ...
// Processor disposed at end of using block
// IronPDF: No processor lifecycle
var renderer = new ChromePdfRenderer();
// Reuse renderer, no complex lifecycle management
// Nutrient.io: Processor lifecycle management
using var processor = await PdfProcessor.CreateAsync();
// ... use processor ...
// Processor disposed at end of using block
// IronPDF: No processor lifecycle
var renderer = new ChromePdfRenderer();
// Reuse renderer, no complex lifecycle management
Imports IronPdf
' Nutrient.io: Processor lifecycle management
Using processor = Await PdfProcessor.CreateAsync()
' ... use processor ...
' Processor disposed at end of using block
End Using
' IronPDF: No processor lifecycle
Dim renderer As New ChromePdfRenderer()
' Reuse renderer, no complex lifecycle management
Yapılandırma Deseni Değişikliği
Nutrient.io yapılandırma nesnelerini kullanır;IronPDFözellikler kullanır:
// Nutrient.io: Config object
var config = new PdfConfiguration
{
PageSize = PageSize.A4,
Margins = new Margins(20, 20, 20, 20)
};
var doc = await processor.GeneratePdfFromHtmlStringAsync(html, config);
// IronPDF: Properties on RenderingOptions
var renderer = new ChromePdfRenderer();
renderer.RenderingOptions.PaperSize = PdfPaperSize.A4;
renderer.RenderingOptions.MarginTop = 20;
renderer.RenderingOptions.MarginBottom = 20;
renderer.RenderingOptions.MarginLeft = 20;
renderer.RenderingOptions.MarginRight = 20;
var pdf = renderer.RenderHtmlAsPdf(html);
// Nutrient.io: Config object
var config = new PdfConfiguration
{
PageSize = PageSize.A4,
Margins = new Margins(20, 20, 20, 20)
};
var doc = await processor.GeneratePdfFromHtmlStringAsync(html, config);
// IronPDF: Properties on RenderingOptions
var renderer = new ChromePdfRenderer();
renderer.RenderingOptions.PaperSize = PdfPaperSize.A4;
renderer.RenderingOptions.MarginTop = 20;
renderer.RenderingOptions.MarginBottom = 20;
renderer.RenderingOptions.MarginLeft = 20;
renderer.RenderingOptions.MarginRight = 20;
var pdf = renderer.RenderHtmlAsPdf(html);
Imports System.Threading.Tasks
' Nutrient.io: Config object
Dim config As New PdfConfiguration With {
.PageSize = PageSize.A4,
.Margins = New Margins(20, 20, 20, 20)
}
Dim doc = Await processor.GeneratePdfFromHtmlStringAsync(html, config)
' IronPDF: Properties on RenderingOptions
Dim renderer As New ChromePdfRenderer()
renderer.RenderingOptions.PaperSize = PdfPaperSize.A4
renderer.RenderingOptions.MarginTop = 20
renderer.RenderingOptions.MarginBottom = 20
renderer.RenderingOptions.MarginLeft = 20
renderer.RenderingOptions.MarginRight = 20
Dim pdf = renderer.RenderHtmlAsPdf(html)
Ek Not'ndan HTML Filigranlarına
Ek açıklama nesnelerini HTML dizeleriyle değiştirin:
// Nutrient.io: Annotation object with properties
new TextAnnotation("CONFIDENTIAL") { Opacity = 0.5f, FontSize = 48 }
// IronPDF: HTML with CSS
"<h1 style='opacity:0.5; font-size:48px;'>CONFIDENTIAL</h1>"
// Nutrient.io: Annotation object with properties
new TextAnnotation("CONFIDENTIAL") { Opacity = 0.5f, FontSize = 48 }
// IronPDF: HTML with CSS
"<h1 style='opacity:0.5; font-size:48px;'>CONFIDENTIAL</h1>"
' Nutrient.io: Annotation object with properties
New TextAnnotation("CONFIDENTIAL") With {.Opacity = 0.5F, .FontSize = 48}
' IronPDF: HTML with CSS
"<h1 style='opacity:0.5; font-size:48px;'>CONFIDENTIAL</h1>"
Sayfa Numarası İşleme
Nutrient.io manuel sayfa sayımını gerektirir;IronPDFyerleşik yer tutuculara sahiptir:
// Nutrient.io: Manual loop and page counting
for (int i = 0; i < doc.PageCount; i++)
{
var footer = new TextAnnotation($"Page {i + 1} of {doc.PageCount}");
await doc.AddAnnotationAsync(i, footer);
}
// IronPDF: Built-in placeholders
renderer.RenderingOptions.HtmlFooter = new HtmlHeaderFooter
{
HtmlFragment = "Page {page} of {total-pages}"
};
// Nutrient.io: Manual loop and page counting
for (int i = 0; i < doc.PageCount; i++)
{
var footer = new TextAnnotation($"Page {i + 1} of {doc.PageCount}");
await doc.AddAnnotationAsync(i, footer);
}
// IronPDF: Built-in placeholders
renderer.RenderingOptions.HtmlFooter = new HtmlHeaderFooter
{
HtmlFragment = "Page {page} of {total-pages}"
};
' Nutrient.io: Manual loop and page counting
For i As Integer = 0 To doc.PageCount - 1
Dim footer = New TextAnnotation($"Page {i + 1} of {doc.PageCount}")
Await doc.AddAnnotationAsync(i, footer)
Next
' IronPDF: Built-in placeholders
renderer.RenderingOptions.HtmlFooter = New HtmlHeaderFooter With {
.HtmlFragment = "Page {page} of {total-pages}"
}
Ariza Giderme
Sorun 1: PdfProcessor Bulunamadı
Sorun: IronPDF'te PdfProcessor sınıfı yok.
Çözüm: ChromePdfRenderer kullanın:
// Nutrient.io
using var processor = await PdfProcessor.CreateAsync();
// IronPDF
var renderer = new ChromePdfRenderer();
// Nutrient.io
using var processor = await PdfProcessor.CreateAsync();
// IronPDF
var renderer = new ChromePdfRenderer();
' Nutrient.io
Using processor = Await PdfProcessor.CreateAsync()
' IronPDF
Dim renderer = New ChromePdfRenderer()
Sorun 2: GeneratePdfFromHtmlStringAsync Bulunamadı
Sorun: Asenkron HTML metodu mevcut değil.
Çözüm: RenderHtmlAsPdf() kullanın:
// Nutrient.io
var document = await processor.GeneratePdfFromHtmlStringAsync(html);
// IronPDF
var pdf = renderer.RenderHtmlAsPdf(html);
// Nutrient.io
var document = await processor.GeneratePdfFromHtmlStringAsync(html);
// IronPDF
var pdf = renderer.RenderHtmlAsPdf(html);
' Nutrient.io
Dim document = Await processor.GeneratePdfFromHtmlStringAsync(html)
' IronPDF
Dim pdf = renderer.RenderHtmlAsPdf(html)
Sorun 3: TextAnnotation Bulunamadı
Sorun: Ek açıklama sınıfları IronPDF'de mevcut değil.
Çözüm: HTML tabanlı filigranları kullanın:
// Nutrient.io
var watermark = new TextAnnotation("DRAFT") { Opacity = 0.5 };
await document.AddAnnotationAsync(0, watermark);
// IronPDF
pdf.ApplyWatermark("<div style='opacity:0.5;'>DRAFT</div>");
// Nutrient.io
var watermark = new TextAnnotation("DRAFT") { Opacity = 0.5 };
await document.AddAnnotationAsync(0, watermark);
// IronPDF
pdf.ApplyWatermark("<div style='opacity:0.5;'>DRAFT</div>");
Imports System.Threading.Tasks
' Nutrient.io
Dim watermark As New TextAnnotation("DRAFT") With {.Opacity = 0.5}
Await document.AddAnnotationAsync(0, watermark)
' IronPDF
pdf.ApplyWatermark("<div style='opacity:0.5;'>DRAFT</div>")
Sorun 4: MergeAsync Bulunamadı
Sorun: Asenkron birleştirme metodu mevcut değil.
Çözüm: Statik PdfDocument.Merge() kullanın:
// Nutrient.io
var mergedDocument = await processor.MergeAsync(documentList);
// IronPDF
var merged = PdfDocument.Merge(pdf1, pdf2);
// Nutrient.io
var mergedDocument = await processor.MergeAsync(documentList);
// IronPDF
var merged = PdfDocument.Merge(pdf1, pdf2);
Imports System.Threading.Tasks
' Nutrient.io
Dim mergedDocument = Await processor.MergeAsync(documentList)
' IronPDF
Dim merged = PdfDocument.Merge(pdf1, pdf2)
Goc Kontrol Listesi
Geçiş Öncesi
- Kod tabanında tüm PSPDFKit/Nutrient kullanımlarının envanterini çıkarın
- Ayarlanması gerekebilecek asenkron desenleri belgeleyin
- Tüm yapılandırma nesnelerini ve özelliklerini listeleyin
- Ek açıklama tabanlı özellikleri (filigranlar, başlıklar) belirleyin
- Form işleme gereksinimlerini gözden geçirin -IronPDFlisans anahtarını edinin
Paket Değişiklikleri
PSPDFKit.NETNuGet paketini kaldırınNutrientNuGet paketini kaldırınIronPdfNuGet paketini kurun:dotnet add package IronPdf- Ad alanı eklerini güncelleyin
Kod Değişiklikleri
- Başlangıçta lisans anahtarı yapılandırması ekleyin
PdfProcessor.CreateAsync()yerinenew ChromePdfRenderer()kullanınprocessor.GeneratePdfFromHtmlStringAsync()yerinerenderer.RenderHtmlAsPdf()kullanınprocessor.MergeAsync()yerinePdfDocument.Merge()kullanınTextAnnotationfiligranlarını HTML filigranlarına dönüştürün- Yapılandırma nesnelerini
RenderingOptionsözellikleri ile değiştirin - Başlık/altbilgiyi, yer tutucular ile
HtmlHeaderFooterkullanacak şekilde güncelleyin - Gereksiz asenkron/await desenlerini kaldırın
Geçişten Sonra
- Artık gerekli olmayan asenkron/await desenlerini kaldırın
- PDF ciktilarini karsilastiran regresyon testleri yapin
- Sayfa numaralarıyla üst bilgiler/alt bilgileri doğrulayın
- Filigran oluşturmayı test edin
- CI/CD hattını güncelleyin

