CraftMyPDF'ten IronPDF'e C# ile Nasıl Geçilir
CraftMyPDF'den IronPDF'ye Neden Geçmelisiniz?
CraftMyPDF gibi bulut tabanlı PDF API'leri, birçok üretim ortamı için uygunsuz olan temel sorunlar sunar.
Bulut Tabanlı PDF API'lerinin Sorunu
-
Verileriniz Sisteminizden Ayrılır: Her HTML şablonu ve JSON veri yüküCraftMyPDFsunucularına iletilir. Faturalar, sözleşmeler, tıbbi kayıtlar veya herhangi bir hassas iş verisi için bu, HIPAA, GDPR ve SOC2 uyumluluk riskleri yaratır.
-
Ağ Gecikmesi: CraftMyPDF'nin kendi belgeleri, PDF başına 1,5-30 saniye olduğunu belirtir. IronPDF, yerel ortamda milisaniyeler içinde oluşturur.
-
PDF Başına Maliyetler Artar: Abonelik oranlarında aylık 10,000 PDF, bir sürekli lisansla karşılaştırıldığında önemli tekrarlayan maliyetler yaratır.
-
Baskı İçin Optimize Edilmiş Çıktı: Bulut API'leri genellikle arka planları azaltarak ve rengi sadeleştirerek "mürekkep" tasarrufu yapmak için optimizasyon yapar. Sonuç, ekranınızdaki HTML'nize asla benzemez.
- Şablon Kilitlemesi: CraftMyPDF, kendilerine ait sürükle ve bırak editörlerini gerektirir. Standart HTML/CSS'yi serbestçe kullanamazsınız.
Mimari Karşılaştırma
| Bağlam | CraftMyPDF | IronPDF |
|---|---|---|
| Veri Konumu | Bulut (verileriniz sisteminizden ayrılır) | Yerinde (veriler asla ayrılmaz) |
| Gecikme | PDF başına 1.5-30 saniye | Milisaniye |
| Fiyatlandırma | PDF başına abonelik | Tek seferlik süresiz lisans |
| Şablon Sistemi | Yalnızca tescilli sürükle-bırak | Herhangi bir HTML/CSS/JavaScript |
| Çıktı Kalitesi | Baskı için optimize edilmiş | Piksel mükemmel ekran renderlemesi |
| Çevrimdışı Çalışır mı? | Hayır (internete ihtiyaç duyar) | Evet |
| Uyumluluk | Veri organizasyonu bırakır | SOC2/HIPAA uyumlu |
Özellik Karşılaştırma
| Özellik | CraftMyPDF | IronPDF |
|---|---|---|
| HTML'den PDF'ye | API şablonları aracılığıyla | ✅Yerel |
| URL'den PDF'ye | API Aracılığıyla | ✅Yerel |
| Özel şablonlar | Yalnızca tescilli editör | ✅Herhangi bir HTML |
| CSS3 desteği | Sınırlı | ✅Tam |
| JavaScript renderleme | Sınırlı | ✅Tam |
| PDF'leri Birleştir/Böl | API Aracılığıyla | ✅Yerel |
| Filigranlar | API Aracılığıyla | ✅Yerel |
| Çevrımdışı çalışır | ❌ | ✅ |
| Kendi kendine barındırılan | ❌ | ✅ |
Önceden Taşıma Hazırlığı
Önkoşullar
Ortamınızın bu gereksinimlere uygun olduğunu doğrulayın:
- .NET Framework 4.6.2+ veya .NET Core 3.1 / .NET 5-9
- Visual Studio 2019+ veya C# uzantılı VS Code
- NuGet Paket Yöneticisi erişimi -IronPDFlisans anahtarı (ücretsiz deneme ironpdf.com adresinde mevcuttur)
CraftMyPDFKullanımını Denetle
TümCraftMyPDFreferanslarını belirlemek için çözüm dizininde bu komutları çalıştırın:
# Find allCraftMyPDFusages in your codebase
grep -r "CraftMyPdf\|craftmypdf\|api.craftmypdf.com" --include="*.cs" .
grep -r "X-API-KEY" --include="*.cs" .
# Find API key references
grep -r "your-api-key\|template-id\|template_id" --include="*.cs" .
# Find NuGet package references
grep -r "CraftMyPdf\|RestSharp" --include="*.csproj" .
# Find allCraftMyPDFusages in your codebase
grep -r "CraftMyPdf\|craftmypdf\|api.craftmypdf.com" --include="*.cs" .
grep -r "X-API-KEY" --include="*.cs" .
# Find API key references
grep -r "your-api-key\|template-id\|template_id" --include="*.cs" .
# Find NuGet package references
grep -r "CraftMyPdf\|RestSharp" --include="*.csproj" .
Beklenen Büyük Değişiklikler
| Değişiklik | CraftMyPDF | IronPDF | Etkisi |
|---|---|---|---|
| Mimari | Bulut REST API | Yerel .NET kütüphanesi | HTTP çağrılarını kaldır |
| Şablonlar | Özel editör | Standart HTML | Şablonları HTML'ye dönüştür |
| API Anahtarı | Her çağrı için gerekli | Başlangıçta lisanslayın | API anahtarı işlemlerini kaldır |
| Async pattern | Gerekli (HTTP) | Opsiyonel | Tercih edilirse await kaldırın |
| Hata yönetimi | HTTP durum kodları | İstisnalar | try/catch desenlerini değiştirin |
| Veri bağlama | JSON şablonları | Dize enterpolasyonu | Veri baglamayi basitlestirin |
Adım Adım Geçiş Süreci
Adım 1: NuGet Paketlerini Güncelleyin
HTTP istemci kutuphanesini kaldirin ve IronPDF'i yukleyin:
# Remove RestSharp HTTP client
dotnet remove package RestSharp
# Install IronPDF
dotnet add package IronPdf
# Remove RestSharp HTTP client
dotnet remove package RestSharp
# Install IronPDF
dotnet add package IronPdf
2. Adım: Namespace Referanslarını Güncelleyin
HTTP istemci ad alanlariniIronPDFile değiştirin:
// Remove these
using RestSharp;
using System.IO;
// Add this
using IronPdf;
// Remove these
using RestSharp;
using System.IO;
// Add this
using IronPdf;
Imports IronPdf
Adim 3: Lisansi Ayarlayin (Başlangicta Bir Kez)
Her bir istek icin API anahtar basliklarini tek bir lisans konfigrasyonu ile değiştirin:
// Add at application startup (Program.cs or Global.asax)
// This replaces all X-API-KEY headers
IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY";
// Add at application startup (Program.cs or Global.asax)
// This replaces all X-API-KEY headers
IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY";
' Add at application startup (Program.vb or Global.asax)
' This replaces all X-API-KEY headers
IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY"
Tam API Geçiş Referansı
API Uc Noktasi Eslestirmesi
| CraftMyPDF | IronPDF |
|---|---|
POST /v1/create |
renderer.RenderHtmlAsPdf(html) |
X-API-KEY başlık |
License.LicenseKey = "..." |
template_id |
Standart HTML dizgesi |
{%name%} yer tutucular |
$"{name}" C# ara işlem |
POST /v1/merge |
PdfDocument.Merge(pdfs) |
POST /v1/add-watermark |
pdf.ApplyWatermark(html) |
| Webhook geri çağrıları | Gerekli değil |
| Oran sınırlaması | Geçerli değil |
Yapılandırma Eşleme
| CraftMyPDFSeçeneği | IronPDF Eşdeğeri |
|---|---|
template_id |
HTML dizesi |
data JSON |
C# interpolasyonu |
page_size: "A4" |
PaperSize = PdfPaperSize.A4 |
orientation: "landscape" |
PaperOrientation = Landscape |
margin_top: 20 |
MarginTop = 20 |
header |
HtmlHeader |
footer |
HtmlFooter |
Kod Geçiş Örnekleri
HTML'den PDF'ye Dönüşüm
En yaygin işlem, bulut API'sinden yerel rendering'e temel mimari değişikligini gösterir.
CraftMyPDF Uygulamasi:
// NuGet: Install-Package RestSharp
using System;
using RestSharp;
using System.IO;
class Program
{
static void Main()
{
var client = new RestClient("https://api.craftmypdf.com/v1/create");
var request = new RestRequest(Method.POST);
request.AddHeader("X-API-KEY", "your-api-key");
request.AddJsonBody(new
{
template_id = "your-template-id",
data = new
{
html = "<h1>Hello World</h1><p>This is a PDF from HTML</p>"
}
});
var response = client.Execute(request);
File.WriteAllBytes("output.pdf", response.RawBytes);
}
}
// NuGet: Install-Package RestSharp
using System;
using RestSharp;
using System.IO;
class Program
{
static void Main()
{
var client = new RestClient("https://api.craftmypdf.com/v1/create");
var request = new RestRequest(Method.POST);
request.AddHeader("X-API-KEY", "your-api-key");
request.AddJsonBody(new
{
template_id = "your-template-id",
data = new
{
html = "<h1>Hello World</h1><p>This is a PDF from HTML</p>"
}
});
var response = client.Execute(request);
File.WriteAllBytes("output.pdf", response.RawBytes);
}
}
Imports System
Imports RestSharp
Imports System.IO
Module Program
Sub Main()
Dim client As New RestClient("https://api.craftmypdf.com/v1/create")
Dim request As New RestRequest(Method.POST)
request.AddHeader("X-API-KEY", "your-api-key")
request.AddJsonBody(New With {
.template_id = "your-template-id",
.data = New With {
.html = "<h1>Hello World</h1><p>This is a PDF from HTML</p>"
}
})
Dim response = client.Execute(request)
File.WriteAllBytes("output.pdf", response.RawBytes)
End Sub
End Module
IronPDF Uygulaması:
// NuGet: Install-Package IronPdf
using System;
using IronPdf;
class Program
{
static void Main()
{
var renderer = new ChromePdfRenderer();
var pdf = renderer.RenderHtmlAsPdf("<h1>Hello World</h1><p>This is a PDF from HTML</p>");
pdf.SaveAs("output.pdf");
}
}
// NuGet: Install-Package IronPdf
using System;
using IronPdf;
class Program
{
static void Main()
{
var renderer = new ChromePdfRenderer();
var pdf = renderer.RenderHtmlAsPdf("<h1>Hello World</h1><p>This is a PDF from HTML</p>");
pdf.SaveAs("output.pdf");
}
}
Imports System
Imports IronPdf
Class Program
Shared Sub Main()
Dim renderer = New ChromePdfRenderer()
Dim pdf = renderer.RenderHtmlAsPdf("<h1>Hello World</h1><p>This is a PDF from HTML</p>")
pdf.SaveAs("output.pdf")
End Sub
End Class
IronPDF, RestClient kurulumunu, API anahtar basliklarini, sablon ID'lerini ve HTTP yanit işlemeyi ortadan kaldirarak 15 satirlik bir bulut işleminden 4 satirlik yerel bir kod yapar. Daha fazla seçenek icin HTML'den PDF'ye belgelerini gorun.
URL'den PDF'ye Dönüşüm
CraftMyPDF Uygulamasi:
// NuGet: Install-Package RestSharp
using System;
using RestSharp;
using System.IO;
class Program
{
static void Main()
{
var client = new RestClient("https://api.craftmypdf.com/v1/create");
var request = new RestRequest(Method.POST);
request.AddHeader("X-API-KEY", "your-api-key");
request.AddJsonBody(new
{
template_id = "your-template-id",
data = new
{
url = "https://example.com"
},
export_type = "pdf"
});
var response = client.Execute(request);
File.WriteAllBytes("webpage.pdf", response.RawBytes);
}
}
// NuGet: Install-Package RestSharp
using System;
using RestSharp;
using System.IO;
class Program
{
static void Main()
{
var client = new RestClient("https://api.craftmypdf.com/v1/create");
var request = new RestRequest(Method.POST);
request.AddHeader("X-API-KEY", "your-api-key");
request.AddJsonBody(new
{
template_id = "your-template-id",
data = new
{
url = "https://example.com"
},
export_type = "pdf"
});
var response = client.Execute(request);
File.WriteAllBytes("webpage.pdf", response.RawBytes);
}
}
Imports System
Imports RestSharp
Imports System.IO
Module Program
Sub Main()
Dim client As New RestClient("https://api.craftmypdf.com/v1/create")
Dim request As New RestRequest(Method.POST)
request.AddHeader("X-API-KEY", "your-api-key")
request.AddJsonBody(New With {
.template_id = "your-template-id",
.data = New With {
.url = "https://example.com"
},
.export_type = "pdf"
})
Dim response = client.Execute(request)
File.WriteAllBytes("webpage.pdf", response.RawBytes)
End Sub
End Module
IronPDF Uygulaması:
// NuGet: Install-Package IronPdf
using System;
using IronPdf;
class Program
{
static void Main()
{
var renderer = new ChromePdfRenderer();
var pdf = renderer.RenderUrlAsPdf("https://example.com");
pdf.SaveAs("webpage.pdf");
}
}
// NuGet: Install-Package IronPdf
using System;
using IronPdf;
class Program
{
static void Main()
{
var renderer = new ChromePdfRenderer();
var pdf = renderer.RenderUrlAsPdf("https://example.com");
pdf.SaveAs("webpage.pdf");
}
}
Imports System
Imports IronPdf
Class Program
Shared Sub Main()
Dim renderer = New ChromePdfRenderer()
Dim pdf = renderer.RenderUrlAsPdf("https://example.com")
pdf.SaveAs("webpage.pdf")
End Sub
End Class
IronPDF'nin RenderUrlAsPdf yöntemi, JavaScript ile oluşturulan içerik de dahil olmak üzere tüm web sayfasını yakalar. Daha fazla seçenek icin URL'den PDF'ye belgelerini gorun.
Üstbilgiler ve Altbilgiler
CraftMyPDF Uygulamasi:
// NuGet: Install-Package RestSharp
using System;
using RestSharp;
using System.IO;
class Program
{
static void Main()
{
var client = new RestClient("https://api.craftmypdf.com/v1/create");
var request = new RestRequest(Method.POST);
request.AddHeader("X-API-KEY", "your-api-key");
request.AddJsonBody(new
{
template_id = "your-template-id",
data = new
{
html = "<h1>Document Content</h1>",
header = "<div>Page Header</div>",
footer = "<div>Page {page} of {total_pages}</div>"
}
});
var response = client.Execute(request);
File.WriteAllBytes("document.pdf", response.RawBytes);
}
}
// NuGet: Install-Package RestSharp
using System;
using RestSharp;
using System.IO;
class Program
{
static void Main()
{
var client = new RestClient("https://api.craftmypdf.com/v1/create");
var request = new RestRequest(Method.POST);
request.AddHeader("X-API-KEY", "your-api-key");
request.AddJsonBody(new
{
template_id = "your-template-id",
data = new
{
html = "<h1>Document Content</h1>",
header = "<div>Page Header</div>",
footer = "<div>Page {page} of {total_pages}</div>"
}
});
var response = client.Execute(request);
File.WriteAllBytes("document.pdf", response.RawBytes);
}
}
Imports System
Imports RestSharp
Imports System.IO
Module Program
Sub Main()
Dim client As New RestClient("https://api.craftmypdf.com/v1/create")
Dim request As New RestRequest(Method.POST)
request.AddHeader("X-API-KEY", "your-api-key")
request.AddJsonBody(New With {
.template_id = "your-template-id",
.data = New With {
.html = "<h1>Document Content</h1>",
.header = "<div>Page Header</div>",
.footer = "<div>Page {page} of {total_pages}</div>"
}
})
Dim response = client.Execute(request)
File.WriteAllBytes("document.pdf", response.RawBytes)
End Sub
End Module
IronPDF Uygulaması:
// NuGet: Install-Package IronPdf
using System;
using IronPdf;
using IronPdf.Rendering;
class Program
{
static void Main()
{
var renderer = new ChromePdfRenderer();
renderer.RenderingOptions.TextHeader = new TextHeaderFooter()
{
CenterText = "Page Header"
};
renderer.RenderingOptions.TextFooter = new TextHeaderFooter()
{
CenterText = "Page {page} of {total-pages}"
};
var pdf = renderer.RenderHtmlAsPdf("<h1>Document Content</h1>");
pdf.SaveAs("document.pdf");
}
}
// NuGet: Install-Package IronPdf
using System;
using IronPdf;
using IronPdf.Rendering;
class Program
{
static void Main()
{
var renderer = new ChromePdfRenderer();
renderer.RenderingOptions.TextHeader = new TextHeaderFooter()
{
CenterText = "Page Header"
};
renderer.RenderingOptions.TextFooter = new TextHeaderFooter()
{
CenterText = "Page {page} of {total-pages}"
};
var pdf = renderer.RenderHtmlAsPdf("<h1>Document Content</h1>");
pdf.SaveAs("document.pdf");
}
}
Imports System
Imports IronPdf
Imports IronPdf.Rendering
Module Program
Sub Main()
Dim renderer = New ChromePdfRenderer()
renderer.RenderingOptions.TextHeader = New TextHeaderFooter() With {
.CenterText = "Page Header"
}
renderer.RenderingOptions.TextFooter = New TextHeaderFooter() With {
.CenterText = "Page {page} of {total-pages}"
}
Dim pdf = renderer.RenderHtmlAsPdf("<h1>Document Content</h1>")
pdf.SaveAs("document.pdf")
End Sub
End Module
IronPDF, dinamik sayfa numaralandırma için {page} ve {total-pages} gibi yer tutucu belirteçlerini destekler. Daha fazla seçenek için bkz. başlıklar ve altbilgiler belgeleri.
Sablon Degisken Donusumu
CraftMyPDF, C# string interpolasyonuna dönüştürulmesi gereken ozel sablon yer tutucularini kullanir:
CraftMyPDF Deseni:
//CraftMyPDFtemplate variables
request.AddJsonBody(new
{
template_id = "invoice-template",
data = new
{
customer = "John Doe",
amount = "$1,000",
items = invoiceItems
}
});
//CraftMyPDFtemplate variables
request.AddJsonBody(new
{
template_id = "invoice-template",
data = new
{
customer = "John Doe",
amount = "$1,000",
items = invoiceItems
}
});
'CraftMyPDFtemplate variables
request.AddJsonBody(New With {
.template_id = "invoice-template",
.data = New With {
.customer = "John Doe",
.amount = "$1,000",
.items = invoiceItems
}
})
IronPDF Deseni:
// C# string interpolation
var html = $@"
<html>
<body>
<h1>Invoice</h1>
<p>Customer: {customerName}</p>
<p>Amount: {amount}</p>
{GenerateItemsTable(invoiceItems)}
</body>
</html>";
var pdf = renderer.RenderHtmlAsPdf(html);
// C# string interpolation
var html = $@"
<html>
<body>
<h1>Invoice</h1>
<p>Customer: {customerName}</p>
<p>Amount: {amount}</p>
{GenerateItemsTable(invoiceItems)}
</body>
</html>";
var pdf = renderer.RenderHtmlAsPdf(html);
Dim html As String = $"
<html>
<body>
<h1>Invoice</h1>
<p>Customer: {customerName}</p>
<p>Amount: {amount}</p>
{GenerateItemsTable(invoiceItems)}
</body>
</html>"
Dim pdf = renderer.RenderHtmlAsPdf(html)
Kritik Geçiş Notları
Butun HTTP Kodlarini Kaldirin
En onemli değişiklik, ag bagimliliklarini ortadan kaldirmaktir.IronPDFyerel calisir—RestClient yok, API cagrisi yok, yanit işleme yok:
//CraftMyPDF- HTTP required
var client = new RestClient("https://api.craftmypdf.com/v1/create");
var request = new RestRequest(Method.POST);
request.AddHeader("X-API-KEY", "your-api-key");
var response = await client.ExecuteAsync(request);
//IronPDF- no HTTP
var pdf = renderer.RenderHtmlAsPdf(html);
//CraftMyPDF- HTTP required
var client = new RestClient("https://api.craftmypdf.com/v1/create");
var request = new RestRequest(Method.POST);
request.AddHeader("X-API-KEY", "your-api-key");
var response = await client.ExecuteAsync(request);
//IronPDF- no HTTP
var pdf = renderer.RenderHtmlAsPdf(html);
Imports RestSharp
'CraftMyPDF- HTTP required
Dim client As New RestClient("https://api.craftmypdf.com/v1/create")
Dim request As New RestRequest(Method.POST)
request.AddHeader("X-API-KEY", "your-api-key")
Dim response = Await client.ExecuteAsync(request)
'IronPDF- no HTTP
Dim pdf = renderer.RenderHtmlAsPdf(html)
Hiz Limitleme Kodunu Kaldirin
CraftMyPDF, yeniden deneme mantigi gerektiren API hiz sinirlari uygular. IronPDF'un siniri yok:
//CraftMyPDF- needed to avoid 429 errors
await Task.Delay(100);
if (response.StatusCode == TooManyRequests) { /* retry */ }
//IronPDF- no limits, just generate
var pdf = renderer.RenderHtmlAsPdf(html);
// Remove all rate limit code!
//CraftMyPDF- needed to avoid 429 errors
await Task.Delay(100);
if (response.StatusCode == TooManyRequests) { /* retry */ }
//IronPDF- no limits, just generate
var pdf = renderer.RenderHtmlAsPdf(html);
// Remove all rate limit code!
Webhook Isleyicileri Kaldirin
CraftMyPDF, PDF tamamlayici icin asenkron webhooks kullanir.IronPDFeszamanli calisir—PDF hemen hazır:
//CraftMyPDF- webhook callback required
// POST with webhook_url, wait for callback
//IronPDF- PDF ready immediately
var pdf = renderer.RenderHtmlAsPdf(html);
pdf.SaveAs("output.pdf");
// No callback needed!
//CraftMyPDF- webhook callback required
// POST with webhook_url, wait for callback
//IronPDF- PDF ready immediately
var pdf = renderer.RenderHtmlAsPdf(html);
pdf.SaveAs("output.pdf");
// No callback needed!
'CraftMyPDF- webhook callback required
' POST with webhook_url, wait for callback
'IronPDF- PDF ready immediately
Dim pdf = renderer.RenderHtmlAsPdf(html)
pdf.SaveAs("output.pdf")
' No callback needed!
Varsıyılan Olarak Eszamanli
Eger sadece HTTP cagrilari icin gerekiyorsa asenkron/bekleme kaliplarini kaldirin:
//CraftMyPDF- async required
var response = await client.ExecuteAsync(request);
//IronPDF- sync by default (async available if needed)
var pdf = renderer.RenderHtmlAsPdf(html);
//CraftMyPDF- async required
var response = await client.ExecuteAsync(request);
//IronPDF- sync by default (async available if needed)
var pdf = renderer.RenderHtmlAsPdf(html);
Göç Sonrası Kontrol Listesi
Kod göçünü tamamladıktan sonra, aşağıdakileri doğrulayın:
- Tüm PDF oluşturma testlerini calistirin
- Cikti kalitesini karsilastirin (IronPDF'un Chrome motoru piksel-hatasiz render eder)
- Performans iyilestirmesini olcun (milisaniyeler vs. saniyeler)
- Tüm sablonlarin dogru bir sekilde dönüştüruldugunu dogrulayin
- Hiz siniri olmadan toplu işlemeyi test edin
- Tüm hedef ortamlarda test edin
- CI/CD hatlarını güncelleyin -CraftMyPDFaboneligini iptal edin
- API anahtarini gizli/dosya konfigrasyonundan kaldirin
PDF Altyapınızı Geleceğe Hazırlama
.NET 10 ufuklarda ve C# 14 yeni dil özellikleri tanitirken, yerel bir PDF kutuphanesi secimi bulut API deprecosyon risklerini ve sürüm uyumluluk endiselerini ortadan kaldirir. IronPDF'un surekli lisanslama modeli, projeniz 2025 ve 2026'ya kadar uzarken yatiriminizin donusunu sonsuza kadar saglar—abonelik maliyetleri olmadan veya verileriniz alt yapinizdan disari cikmadan.
Ek Kaynaklar
CraftMyPDF'ten IronPDF'e goc etmek, bulut bagimliliklarini, ag gecikmesini, PDF basina maliyetleri ve sablon kitlenmesini ortadan kaldirirken, cevrimdisi calisan piksel-hatasiz Chrome renderi sunar. REST API cagrilarindan yerel metod cagrilarina gecis, kod tabaninizi basitlestirir ve hassas doküman verilerini altyapiniz icinde tutar.

