PeachPDF'den IronPDF'e C# ile Nasıl Geçilir
PeachPDF'ten IronPDF'ye geçiş yapmak, kapsamlı özellikler, aktif geliştirme ve profesyonel destekle kurumsal düzeyde PDF oluşturma erişimi sağlar. Bu kılavuz, PeachPDF'in 1.0 öncesi senkronize HTML'den PDF'ye iş akışından, bütünüyle gelişmiş PDF çözümüne Chromium işleme, güvenlik ayarları ve belge manipülasyon API'leri ile geçmenizi sağlayacak adım adım geçiş yolunu şekillendirmektedir.
Neden PeachPDF'ten IronPDF'ye Geçmeli
PeachPDF'yi Anlamak
PeachPDF, HTML'yi PDF'ye dönüştürmesi gereken geliştiriciler için tasarlanmış .NET ekosistemine nispeten yeni bir girişimdir. PeachPDF, kütüphane olarak, harici süreçlere dayanmadan yerel bir .NET uygulaması vaat eder ve bu da .NET'in desteklendiği platformlarda sorunsuz bir şekilde entegre edilebileceğini garanti eder. Bu özellik PeachPDF'yi, hafif, yönetilen bir kütüphane çözümü arayan projeler için cazip bir seçenek haline getirir.
Potansiyeline rağmen,PeachPDFhala geliştirilme aşamasında olup heyecan verici olasılıkları ve belirgin sınırlamaları vurgular. PeachPDF, çeşitli ortamlarda kolay dağıtım vaat eden tamamen .NET çekirdeği nedeniyle cazibesini korur. Bununla birlikte, daha küçük kullanıcı tabanı ve topluluk destekli olması, sınırlı benimsenmeye dönüşür.
PeachPDF'nin Sınırlamaları
PeachPDF, BSD-3-Madde lisansı altında yayımlanan ve tek bir geliştirici tarafından bakımı yapılan (en son 0.7.26, Ekim 2025) bir ön-1.0 .NET kütüphanesidir. Yerleşik çözümlerin olgunluğu, özellikleri ve desteğine sahip değildir. Geçiş için ana sebepler:
-
1.0 Öncesi Özellik Seti: PeachPDF'de dijital imzalar,PDF/Auyumluluğu, OCR, form doldurma veya sayfa tabanlı başlık/alt bilgi API'si yerleşik değildir.
-
JavaScript motoru yok: PeachPDF,
PeachPDF.PdfSharpCoreüzerine kurulmuş bir düzen motorudur, tarayıcı değildir; Betikler ve karmaşık Grid/Flexbox yerleşimleri çalışmaz. -
Sadece
net8.0: paketnet8.0hedef almaktadır; eski .NET Framework / .NET 6 projeleri yükseltmeli veya farklı bir kütüphane seçmelidir. -
Küçük Topluluk: yalnız bir GitHub bakımcısı, sınırlı belgeler, sınırlı örnekler.
- Kurumsal Destek Yok: ticari destek veya SLA seçenekleri yoktur.
PeachPDFvs IronPDF Karşılaştırması
| Özellik/Özellik | PeachPDF | IronPDF |
|---|---|---|
| Uygulama | Saf yönetilen .NET (PeachPDF.PdfSharpCore + SixLabors üzerinde) |
Yönetilen ve gömülü Chromium çalıştırma ile |
| Lisans | BSD-3-Madde | Ticari |
| Hedef Çerçeve | Sadece net8.0 |
.NET Framework 4.6.2+, .NET 6/7/8 |
| Kullanıcı Tabanı | Küçük (ön-1.0, Ekim 2025 yayımlanan 0.7.26) |
Büyük |
| Destek | Topluluk odaklı (tek bir geliştirici, jhaygood86) |
Profesyonel ve özel destekli |
| HTML İşleme | PdfSharpCore üzerinde HTML+CSS düzen motoru | Tam Chromium |
| CSS Desteği | HTML+CSS alt kümesi, web yazı tipleri, @font-face |
Tam CSS3 |
| JavaScript | Yürütülmez | Tam ES2024 |
| Dijital İmzalar | Hayır | Evet |
| PDF/A Uyumlu | Hayır | Evet |
| Dokümantasyon | Sınırlı (tek README) | Kapsamlı |
| Geliştirme Durumu | Ön-1.0 (0.7.26, Ekim 2025) |
Olgun, istikrarlı sürüm |
IronPDF, daha geniş işlevselliğiyle öne çıkar, sadece HTML'den PDF'ye dönüşüm sağlamakla kalmaz, aynı zamanda OCR, filigranlama ve diğer gelişmiş özellikler de destekler. Profesyonel destek yapısı geliştiricilerin karşılaştığı sorunlar için hızlı çözüm yolları sunar.
Modern .NET'i benimseyen ekipler için, IronPDF, güncel .NET sürümleri arasında uzun vadeli kararlılığı destekleyen kapsamlı özellikler ve aktif bakım sunar.
Başlamadan Önce
Ön Koş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ükleyebilme
- IronPDF Lisansı: Lisans anahtarınızı ironpdf.com adresinden edinin
NuGet Paket Değişiklikleri
# Remove PeachPDF
dotnet remove package PeachPDF
# Install IronPDF
dotnet add package IronPdf
# Remove PeachPDF
dotnet remove package PeachPDF
# Install IronPDF
dotnet add package IronPdf
Lisans Yapılandırması
// Add at application startup
IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY";
// Add at application startup
IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY";
' Add at application startup
IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY"
PeachPDFKullanımını Tanıma
# AuditPeachPDFusage in codebase
grep -r "using PeachPDF" --include="*.cs" .
grep -r "PdfGenerator\|PdfGenerateConfig\|GeneratePdf" --include="*.cs" .
# AuditPeachPDFusage in codebase
grep -r "using PeachPDF" --include="*.cs" .
grep -r "PdfGenerator\|PdfGenerateConfig\|GeneratePdf" --include="*.cs" .
Tam API Referansı
Ad Alanı Değişiklikleri
// Before: PeachPDF
using PeachPDF;
using PeachPDF.PdfSharpCore;
using System.IO;
using System.Threading.Tasks;
// After: IronPDF
using IronPdf;
using IronPdf.Rendering;
// Before: PeachPDF
using PeachPDF;
using PeachPDF.PdfSharpCore;
using System.IO;
using System.Threading.Tasks;
// After: IronPDF
using IronPdf;
using IronPdf.Rendering;
Imports IronPdf
Imports IronPdf.Rendering
Imports System.IO
Imports System.Threading.Tasks
Temel API Eşlemeleri
| PeachPDF | IronPDF |
|---|---|
new PdfGenerator() |
new ChromePdfRenderer() |
await generator.GeneratePdf(html, config) |
renderer.RenderHtmlAsPdf(html) |
document.Save(stream) |
pdf.SaveAs(path) |
document.Save(memStream) ardından memStream.ToArray() |
pdf.BinaryData |
new PdfGenerateConfig { NetworkAdapter = new HttpClientNetworkAdapter(...) } |
renderer.RenderUrlAsPdf(url) |
config.PageSize, config.PageOrientation |
renderer.RenderingOptions.PaperSize, .PaperOrientation |
Kaynak HTML'e gömme (CSS position: fixed) |
RenderingOptions.HtmlHeader / HtmlFooter |
| Desteklenmiyor | PdfDocument.FromFile(path) |
| Desteklenmiyor | PdfDocument.Merge(pdfs) / pdf.AppendPdf(...) |
Kod Göç Örnekleri
Örnek 1: HTML Metin Dizesi'ni PDF'e Dönüşüm
Önce (PeachPDF):
using PeachPDF;
using PeachPDF.PdfSharpCore;
using System.IO;
using System.Threading.Tasks;
class Program
{
static async Task Main()
{
var html = "<html><body><h1>Hello World</h1></body></html>";
var config = new PdfGenerateConfig
{
PageSize = PageSize.Letter,
PageOrientation = PageOrientation.Portrait
};
var generator = new PdfGenerator();
var document = await generator.GeneratePdf(html, config);
using var stream = File.Create("output.pdf");
document.Save(stream);
}
}
using PeachPDF;
using PeachPDF.PdfSharpCore;
using System.IO;
using System.Threading.Tasks;
class Program
{
static async Task Main()
{
var html = "<html><body><h1>Hello World</h1></body></html>";
var config = new PdfGenerateConfig
{
PageSize = PageSize.Letter,
PageOrientation = PageOrientation.Portrait
};
var generator = new PdfGenerator();
var document = await generator.GeneratePdf(html, config);
using var stream = File.Create("output.pdf");
document.Save(stream);
}
}
Imports PeachPDF
Imports PeachPDF.PdfSharpCore
Imports System.IO
Imports System.Threading.Tasks
Module Program
Async Function Main() As Task
Dim html As String = "<html><body><h1>Hello World</h1></body></html>"
Dim config As New PdfGenerateConfig With {
.PageSize = PageSize.Letter,
.PageOrientation = PageOrientation.Portrait
}
Dim generator As New PdfGenerator()
Dim document = Await generator.GeneratePdf(html, config)
Using stream As FileStream = File.Create("output.pdf")
document.Save(stream)
End Using
End Function
End Module
Sonrası (IronPDF):
// 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
Bu örnek, iki kütüphane arasındaki temel farkı gösteriyor. PeachPDF, PdfGenerator (motor) ile PdfGenerateConfig (ayarlar) arasında ayrım yapar, bir asenkron GeneratePdf yöntemi sunar ve Save yöntemi bir Stream yazan bir belge döndürür.IronPDFChromePdfRenderer ile RenderHtmlAsPdf() kullanır ve içinde yerleşik bir SaveAs() yöntemi olan bir PdfDocument nesnesi döndürür.
IronPDF'nin yaklaşımının pratik bir avantajı: PdfDocument nesnesi kaydedilmeden önce (filigran ekleme, birleştirme, güvenlik ayarları) daha da işlenebilir ve SaveAs bir ara FileStream olmadan doğrudan bir dosya yolunu alır. HTML'den PDF'e belgeler için daha fazla örneğe bakın.
Örnek 2: URL'den PDF'ye Dönüştürme
Önce (PeachPDF):
//PeachPDFhas no ConvertUrl-style helper; URL fetching is wired via
// HttpClientNetworkAdapter and passing null HTML so the engine fetches the page.
using PeachPDF;
using PeachPDF.Network;
using PeachPDF.PdfSharpCore;
using System;
using System.IO;
using System.Net.Http;
using System.Threading.Tasks;
class Program
{
static async Task Main()
{
var http = new HttpClient();
var config = new PdfGenerateConfig
{
PageSize = PageSize.Letter,
NetworkAdapter = new HttpClientNetworkAdapter(http, new Uri("https://www.example.com"))
};
var generator = new PdfGenerator();
var document = await generator.GeneratePdf(null, config);
using var stream = File.Create("webpage.pdf");
document.Save(stream);
}
}
//PeachPDFhas no ConvertUrl-style helper; URL fetching is wired via
// HttpClientNetworkAdapter and passing null HTML so the engine fetches the page.
using PeachPDF;
using PeachPDF.Network;
using PeachPDF.PdfSharpCore;
using System;
using System.IO;
using System.Net.Http;
using System.Threading.Tasks;
class Program
{
static async Task Main()
{
var http = new HttpClient();
var config = new PdfGenerateConfig
{
PageSize = PageSize.Letter,
NetworkAdapter = new HttpClientNetworkAdapter(http, new Uri("https://www.example.com"))
};
var generator = new PdfGenerator();
var document = await generator.GeneratePdf(null, config);
using var stream = File.Create("webpage.pdf");
document.Save(stream);
}
}
Imports PeachPDF
Imports PeachPDF.Network
Imports PeachPDF.PdfSharpCore
Imports System
Imports System.IO
Imports System.Net.Http
Imports System.Threading.Tasks
Module Program
Async Function Main() As Task
Dim http As New HttpClient()
Dim config As New PdfGenerateConfig With {
.PageSize = PageSize.Letter,
.NetworkAdapter = New HttpClientNetworkAdapter(http, New Uri("https://www.example.com"))
}
Dim generator As New PdfGenerator()
Dim document = Await generator.GeneratePdf(Nothing, config)
Using stream As FileStream = File.Create("webpage.pdf")
document.Save(stream)
End Using
End Function
End Module
Sonrası (IronPDF):
// NuGet: Install-Package IronPdf
using IronPdf;
using System;
class Program
{
static void Main()
{
var renderer = new ChromePdfRenderer();
var url = "https://www.example.com";
var pdf = renderer.RenderUrlAsPdf(url);
pdf.SaveAs("webpage.pdf");
}
}
// NuGet: Install-Package IronPdf
using IronPdf;
using System;
class Program
{
static void Main()
{
var renderer = new ChromePdfRenderer();
var url = "https://www.example.com";
var pdf = renderer.RenderUrlAsPdf(url);
pdf.SaveAs("webpage.pdf");
}
}
Imports IronPdf
Imports System
Class Program
Shared Sub Main()
Dim renderer = New ChromePdfRenderer()
Dim url = "https://www.example.com"
Dim pdf = renderer.RenderUrlAsPdf(url)
pdf.SaveAs("webpage.pdf")
End Sub
End Class
PeachPDF'in birinci sınıf URL'den PDF'e yardımcı işlevi yok; Motor sayfayı getirmesi için yapılandırmada NetworkAdapter bir HttpClientNetworkAdapter ve null HTML atıyorsunuz.IronPDF doğrudan RenderUrlAsPdf(url) sağlar. PeachPDFJavaScriptçalıştırmadığı için, tek sayfalık uygulamalar ve dinamik içerikler tipik olarak ağ adaptörü yoluyla doğru bir şekilde render edilmez; IronPDF'ın Chromium motoru modern CSS ve JavaScript'i işler. Daha fazla bilgiyi kılavuzlarımızda öğrenin.
Örnek 3: Başlık ve Alt Bilgi Ekleme
Önce (PeachPDF):
//PeachPDFv0.7.x has no header/footer API. The closest approach is
// to embed the header/footer markup directly inside the source HTML
// using CSS positioning.
using PeachPDF;
using PeachPDF.PdfSharpCore;
using System.IO;
using System.Threading.Tasks;
class Program
{
static async Task Main()
{
var html = @"
<html><head><style>
.header { position: fixed; top: 0; left: 0; right: 0; text-align:center; }
.footer { position: fixed; bottom: 0; left: 0; right: 0; text-align:center; }
</style></head>
<body>
<div class='header'>My Header</div>
<h1>Document Content</h1>
<div class='footer'>Footer text</div>
</body></html>";
var config = new PdfGenerateConfig { PageSize = PageSize.Letter };
var generator = new PdfGenerator();
var document = await generator.GeneratePdf(html, config);
using var stream = File.Create("document.pdf");
document.Save(stream);
}
}
//PeachPDFv0.7.x has no header/footer API. The closest approach is
// to embed the header/footer markup directly inside the source HTML
// using CSS positioning.
using PeachPDF;
using PeachPDF.PdfSharpCore;
using System.IO;
using System.Threading.Tasks;
class Program
{
static async Task Main()
{
var html = @"
<html><head><style>
.header { position: fixed; top: 0; left: 0; right: 0; text-align:center; }
.footer { position: fixed; bottom: 0; left: 0; right: 0; text-align:center; }
</style></head>
<body>
<div class='header'>My Header</div>
<h1>Document Content</h1>
<div class='footer'>Footer text</div>
</body></html>";
var config = new PdfGenerateConfig { PageSize = PageSize.Letter };
var generator = new PdfGenerator();
var document = await generator.GeneratePdf(html, config);
using var stream = File.Create("document.pdf");
document.Save(stream);
}
}
Imports PeachPDF
Imports PeachPDF.PdfSharpCore
Imports System.IO
Imports System.Threading.Tasks
Module Program
Async Function Main() As Task
Dim html As String = "
<html><head><style>
.header { position: fixed; top: 0; left: 0; right: 0; text-align:center; }
.footer { position: fixed; bottom: 0; left: 0; right: 0; text-align:center; }
</style></head>
<body>
<div class='header'>My Header</div>
<h1>Document Content</h1>
<div class='footer'>Footer text</div>
</body></html>"
Dim config As New PdfGenerateConfig With {.PageSize = PageSize.Letter}
Dim generator As New PdfGenerator()
Dim document = Await generator.GeneratePdf(html, config)
Using stream As FileStream = File.Create("document.pdf")
document.Save(stream)
End Using
End Function
End Module
Sonrası (IronPDF):
// NuGet: Install-Package IronPdf
using IronPdf;
using IronPdf.Rendering;
using System;
class Program
{
static void Main()
{
var renderer = new ChromePdfRenderer();
renderer.RenderingOptions.HtmlHeader = new HtmlHeaderFooter() { HtmlFragment = "<div style='text-align:center'>My Header</div>" };
renderer.RenderingOptions.HtmlFooter = new HtmlHeaderFooter() { HtmlFragment = "<div style='text-align:center'>Page {page}</div>" };
var html = "<html><body><h1>Document Content</h1></body></html>";
var pdf = renderer.RenderHtmlAsPdf(html);
pdf.SaveAs("document.pdf");
}
}
// NuGet: Install-Package IronPdf
using IronPdf;
using IronPdf.Rendering;
using System;
class Program
{
static void Main()
{
var renderer = new ChromePdfRenderer();
renderer.RenderingOptions.HtmlHeader = new HtmlHeaderFooter() { HtmlFragment = "<div style='text-align:center'>My Header</div>" };
renderer.RenderingOptions.HtmlFooter = new HtmlHeaderFooter() { HtmlFragment = "<div style='text-align:center'>Page {page}</div>" };
var html = "<html><body><h1>Document Content</h1></body></html>";
var pdf = renderer.RenderHtmlAsPdf(html);
pdf.SaveAs("document.pdf");
}
}
Imports IronPdf
Imports IronPdf.Rendering
Imports System
Module Program
Sub Main()
Dim renderer As New ChromePdfRenderer()
renderer.RenderingOptions.HtmlHeader = New HtmlHeaderFooter() With {.HtmlFragment = "<div style='text-align:center'>My Header</div>"}
renderer.RenderingOptions.HtmlFooter = New HtmlHeaderFooter() With {.HtmlFragment = "<div style='text-align:center'>Page {page}</div>"}
Dim html As String = "<html><body><h1>Document Content</h1></body></html>"
Dim pdf = renderer.RenderHtmlAsPdf(html)
pdf.SaveAs("document.pdf")
End Sub
End Module
Bu örnek, önemli bir mimari farkı gösterir.PeachPDFPdfGenerator ve PdfGenerateConfig üzerinde bir başlık/altbilgi API'si sağlamaz, bu yüzden sayfa marginleri kaynak HTML içinde CSS konumlandırması kullanılarak yerleştirilmelidir.IronPDFRenderingOptions.HtmlHeader ve RenderingOptions.HtmlFooter atanan HtmlHeaderFooter nesnelerini kullanır, sayfa marginlerini belge içeriğinden ayırır.
IronPDF yaklaşımı ayrıca başlık/altbilgi boyutunu kontrol etmek için MaxHeight gibi özellikleri de sunar ve sayfa numaralandırması için {page} ve {total-pages} yer tutucularını destekler.
IronPDF için gereken ek ad alanını not edin: using IronPdf.Rendering; sınıf için gereklidir.
Kritik Taşıma Notları
Generator/Renderer Sınıf Değişikliği
PeachPDF bir PdfGenerator + PdfGenerateConfig çifti kullanır;IronPDF tek bir ChromePdfRenderer kullanır:
// PeachPDF
var config = new PdfGenerateConfig { PageSize = PageSize.Letter };
var generator = new PdfGenerator();
// IronPDF
var renderer = new ChromePdfRenderer();
// PeachPDF
var config = new PdfGenerateConfig { PageSize = PageSize.Letter };
var generator = new PdfGenerator();
// IronPDF
var renderer = new ChromePdfRenderer();
' PeachPDF
Dim config As New PdfGenerateConfig With {.PageSize = PageSize.Letter}
Dim generator As New PdfGenerator()
' IronPDF
Dim renderer As New ChromePdfRenderer()
Async ve Sync, ve Dönüş Türü
PeachPDF'nin GeneratePdf yalnızca asenkron ve Save yöntemi bir Stream alan bir belge döndürür. IronPDF'nin RenderHtmlAsPdf senkronize (bir asenkron varyantı RenderHtmlAsPdfAsync da mevcuttur) ve bir PdfDocument döndürür:
// PeachPDF: async, save to a Stream
var document = await generator.GeneratePdf(html, config);
using var fs = File.Create("output.pdf");
document.Save(fs);
// IronPDF: synchronous PdfDocument object
PdfDocument pdf = renderer.RenderHtmlAsPdf(html);
pdf.SaveAs("output.pdf");
// Or get bytes: byte[] bytes = pdf.BinaryData;
// PeachPDF: async, save to a Stream
var document = await generator.GeneratePdf(html, config);
using var fs = File.Create("output.pdf");
document.Save(fs);
// IronPDF: synchronous PdfDocument object
PdfDocument pdf = renderer.RenderHtmlAsPdf(html);
pdf.SaveAs("output.pdf");
// Or get bytes: byte[] bytes = pdf.BinaryData;
Imports System.IO
' PeachPDF: async, save to a Stream
Dim document = Await generator.GeneratePdf(html, config)
Using fs As FileStream = File.Create("output.pdf")
document.Save(fs)
End Using
' IronPDF: synchronous PdfDocument object
Dim pdf As PdfDocument = renderer.RenderHtmlAsPdf(html)
pdf.SaveAs("output.pdf")
' Or get bytes: Dim bytes As Byte() = pdf.BinaryData
Başlık/Alt Bilgi Özellik Değişikliği
// PeachPDF: no header/footer API -- embed in source HTML
// (e.g. via CSS position:fixed)
// IronPDF: HtmlHeaderFooter objects
renderer.RenderingOptions.HtmlHeader = new HtmlHeaderFooter()
{
HtmlFragment = "<div>Header</div>"
};
renderer.RenderingOptions.HtmlFooter = new HtmlHeaderFooter()
{
HtmlFragment = "<div>Footer</div>"
};
// PeachPDF: no header/footer API -- embed in source HTML
// (e.g. via CSS position:fixed)
// IronPDF: HtmlHeaderFooter objects
renderer.RenderingOptions.HtmlHeader = new HtmlHeaderFooter()
{
HtmlFragment = "<div>Header</div>"
};
renderer.RenderingOptions.HtmlFooter = new HtmlHeaderFooter()
{
HtmlFragment = "<div>Footer</div>"
};
' PeachPDF: no header/footer API -- embed in source HTML
' (e.g. via CSS position:fixed)
' IronPDF: HtmlHeaderFooter objects
renderer.RenderingOptions.HtmlHeader = New HtmlHeaderFooter() With {
.HtmlFragment = "<div>Header</div>"
}
renderer.RenderingOptions.HtmlFooter = New HtmlHeaderFooter() With {
.HtmlFragment = "<div>Footer</div>"
}
Metot Adı Değişiklikleri
| PeachPDF | IronPDF |
|---|---|
await generator.GeneratePdf(html, config) |
renderer.RenderHtmlAsPdf(html) |
NetworkAdapter = new HttpClientNetworkAdapter(...) + GeneratePdf(null, config) |
renderer.RenderUrlAsPdf(url) |
document.Save(stream) |
pdf.SaveAs(path) |
Geçiş Sonrası Yeni Özellikler
IronPDF'ye geçiş yaptıktan sonra, PeachPDF'nin sağlayamayacağı yeteneklere sahip olursunuz:
PDF Birleştirme
var pdf1 = PdfDocument.FromFile("doc1.pdf");
var pdf2 = PdfDocument.FromFile("doc2.pdf");
var merged = PdfDocument.Merge(pdf1, pdf2);
merged.SaveAs("merged.pdf");
var pdf1 = PdfDocument.FromFile("doc1.pdf");
var pdf2 = PdfDocument.FromFile("doc2.pdf");
var merged = PdfDocument.Merge(pdf1, pdf2);
merged.SaveAs("merged.pdf");
CONVERTER NOT RUNNING
HTML ile Filigranlar
var pdf = PdfDocument.FromFile("document.pdf");
pdf.ApplyWatermark("<div style='color: red; font-size: 48pt;'>DRAFT</div>");
pdf.SaveAs("watermarked.pdf");
var pdf = PdfDocument.FromFile("document.pdf");
pdf.ApplyWatermark("<div style='color: red; font-size: 48pt;'>DRAFT</div>");
pdf.SaveAs("watermarked.pdf");
Dim pdf = PdfDocument.FromFile("document.pdf")
pdf.ApplyWatermark("<div style='color: red; font-size: 48pt;'>DRAFT</div>")
pdf.SaveAs("watermarked.pdf")
Şifre Koruma
var renderer = new ChromePdfRenderer();
var pdf = renderer.RenderHtmlAsPdf("<h1>Confidential</h1>");
pdf.SecuritySettings.OwnerPassword = "owner123";
pdf.SecuritySettings.UserPassword = "user123";
pdf.SecuritySettings.AllowUserCopyPasteContent = false;
pdf.SecuritySettings.AllowUserPrinting = PdfPrintSecurity.NoPrint;
pdf.SaveAs("protected.pdf");
var renderer = new ChromePdfRenderer();
var pdf = renderer.RenderHtmlAsPdf("<h1>Confidential</h1>");
pdf.SecuritySettings.OwnerPassword = "owner123";
pdf.SecuritySettings.UserPassword = "user123";
pdf.SecuritySettings.AllowUserCopyPasteContent = false;
pdf.SecuritySettings.AllowUserPrinting = PdfPrintSecurity.NoPrint;
pdf.SaveAs("protected.pdf");
Dim renderer As New ChromePdfRenderer()
Dim pdf = renderer.RenderHtmlAsPdf("<h1>Confidential</h1>")
pdf.SecuritySettings.OwnerPassword = "owner123"
pdf.SecuritySettings.UserPassword = "user123"
pdf.SecuritySettings.AllowUserCopyPasteContent = False
pdf.SecuritySettings.AllowUserPrinting = PdfPrintSecurity.NoPrint
pdf.SaveAs("protected.pdf")
Dijital İmzalar
using IronPdf.Signing;
var pdf = PdfDocument.FromFile("document.pdf");
var signature = new PdfSignature("certificate.pfx", "password")
{
SigningReason = "Document Approval",
SigningLocation = "New York"
};
pdf.Sign(signature);
pdf.SaveAs("signed.pdf");
using IronPdf.Signing;
var pdf = PdfDocument.FromFile("document.pdf");
var signature = new PdfSignature("certificate.pfx", "password")
{
SigningReason = "Document Approval",
SigningLocation = "New York"
};
pdf.Sign(signature);
pdf.SaveAs("signed.pdf");
Imports IronPdf.Signing
Dim pdf = PdfDocument.FromFile("document.pdf")
Dim signature = New PdfSignature("certificate.pfx", "password") With {
.SigningReason = "Document Approval",
.SigningLocation = "New York"
}
pdf.Sign(signature)
pdf.SaveAs("signed.pdf")
Asenkron İşlemler
var renderer = new ChromePdfRenderer();
var pdf = await renderer.RenderHtmlAsPdfAsync("<h1>Async PDF</h1>");
pdf.SaveAs("async_output.pdf");
var renderer = new ChromePdfRenderer();
var pdf = await renderer.RenderHtmlAsPdfAsync("<h1>Async PDF</h1>");
pdf.SaveAs("async_output.pdf");
Dim renderer As New ChromePdfRenderer()
Dim pdf = Await renderer.RenderHtmlAsPdfAsync("<h1>Async PDF</h1>")
pdf.SaveAs("async_output.pdf")
Özellik Karşılaştırması Özeti
| Özellik | PeachPDF | IronPDF |
|---|---|---|
| HTML'den PDF'ye | PdfSharpCore tabanlı düzen | Tam Chromium |
| URL'yi PDF'ye çevir | HttpClientNetworkAdapter üzerinden (JS yok) |
Evet |
| CSS Grid/Flexbox | Kısmi / garanti edilmez | Evet |
| JavaScript | Yürütülmez | Tam ES2024 |
| PDF'leri birleştir | Yok (sadece HTML->PDF) | Evet |
| PDF Ayırma | Hayır | Evet |
| Filigranlar | HTML üzerinden manuel | Tam HTML |
| Başlıklar/Altbilgiler | HTML/CSS üzerinden manuel | Tam HTML |
| Dijital İmzalar | Hayır | Evet |
| PDF/A | Hayır | Evet |
| Form Doldurma | Hayır | Evet |
| Metin Çıkarma | Hayır | Evet |
| Resim Çıkarma | Hayır | Evet |
| Asenkron Destek | Yalnızca Asenkron API | Evet |
| Platformlar Arası | net8.0 (Windows / Linux / macOS) |
Evet |
Yaygın Geçiş Sorunları
Sorun 1: API Desen Farklılığı
Sorun: PeachPDF, PdfGenerator (motor) ve PdfGenerateConfig (ayarlar) arasında ayrım yapar ve asenkron;IronPDF bir ChromePdfRenderer kullanır ve senkronize olarak bir PdfDocument döndürür.
Çözüm:
//PeachPDFpattern (async, stream-out)
var config = new PdfGenerateConfig { PageSize = PageSize.Letter };
var generator = new PdfGenerator();
var document = await generator.GeneratePdf(html, config);
using var fs = File.Create(path);
document.Save(fs);
//IronPDF pattern
var renderer = new ChromePdfRenderer();
var pdf = renderer.RenderHtmlAsPdf(html);
pdf.SaveAs(path);
//PeachPDFpattern (async, stream-out)
var config = new PdfGenerateConfig { PageSize = PageSize.Letter };
var generator = new PdfGenerator();
var document = await generator.GeneratePdf(html, config);
using var fs = File.Create(path);
document.Save(fs);
//IronPDF pattern
var renderer = new ChromePdfRenderer();
var pdf = renderer.RenderHtmlAsPdf(html);
pdf.SaveAs(path);
Imports System.IO
' PeachPDFpattern (async, stream-out)
Dim config As New PdfGenerateConfig With {.PageSize = PageSize.Letter}
Dim generator As New PdfGenerator()
Dim document = Await generator.GeneratePdf(html, config)
Using fs As FileStream = File.Create(path)
document.Save(fs)
End Using
' IronPDF pattern
Dim renderer As New ChromePdfRenderer()
Dim pdf = renderer.RenderHtmlAsPdf(html)
pdf.SaveAs(path)
Sorun 2: Akışa Hedef Kaydetme, Yola Değil
Sorun: PeachPDF'nin document.Save(stream) yalnızca bir Stream alır; IronPDF'nin pdf.SaveAs(path) bir yol dizesi alır.
Çözüm: Bir FileStream açmak yerine doğrudan IronPDF içinde pdf.SaveAs("file.pdf") kullanın.
Sorun 3: Mevcut PDF İşlemleri Yok
Problem:PeachPDFsadece HTML'den PDF'e; mevcut PDF'leri yükleyemez, birleştiremez, bölemez veya düzenleyemez.
Çözüm: Taşındıktan sonra bu operasyonları IronPDF'nin PdfDocument.FromFile, PdfDocument.Merge ve pdf.AppendPdf ile değiştirin.
Geçiş Kontrol Listesi
Öncesi-Geçiş
- Kod tabanındakiPeachPDFkullanımını denetleyin
- Özel yapılandırmaları belgeleyin
- Tüm başlık/altbilgi uygulamalarını not edin
- ironpdf.com adresinden IronPDF lisans anahtarını edinin
- İlk önce IronPDF deneme lisansı ile test edin
Paket Değişiklikleri
PeachPDFNuGet paketini kaldırınIronPdfNuGet paketini yükleyin:dotnet add package IronPdf
Kod Değişiklikleri
- Ad alanı içe aktarımlarını güncelle (
using PeachPDF;→using IronPdf;) - Başlık/altbilgi işlevselliği için
using IronPdf.Rendering;ekleyin PdfGenerator+PdfGenerateConfigileChromePdfRendererdeğiştirinawait generator.GeneratePdf(html, config)ilerenderer.RenderHtmlAsPdf(html)(veya asenkron kalmak içinRenderHtmlAsPdfAsync) değiştirinHttpClientNetworkAdapter+GeneratePdf(null, config)ilerenderer.RenderUrlAsPdf(url)değiştirindocument.Save(stream)ilepdf.SaveAs(path)değiştirin- HTML gömülü başlıkları/altbilgileri
HtmlFooternesneleri ile değiştirin - Uygulama başlangıcında lisans başlatma ekle
Geçiş Sonrası
- HTML işleme kalitesini test edin
- PDF çıktısının beklentilere uyan şekilde olduğunu doğrulayın
- Sayfa numaralı başlık/altbilgi işlemesini test edin
- Gerektiğinde yeni yetenekler ekleyin (güvenlik, filigranlar, birleştirme)

