CraftMyPDF'ten IronPDF'e C# ile Nasıl Geçilir
CraftMyPDF'den IronPDF'ye Neden Geçilmeli?
CraftMyPDF gibi bulut tabanlı PDF API'leri, birçok prodüksiyon ortamı için uygun olmayan temel sorunlar ortaya çıkarır.
Bulut Tabanlı PDF API'lerinin Sorunu
-
Veriniz Sisteminizden Ayrılır: Her HTML şablonu ve JSON veri yükü CraftMyPDF'nin sunucuları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 oluşturur.
-
Ağ Gecikmesi: Her PDF oluşturma işlemi, bir ağ gidiş-dönüşü ve kuyruklandırma ve işleme süresi (genellikle saniyeler) içerir. IronPDF, yerel olarak milisaniye içinde oluşturur.
-
PDF Başına Maliyetler Artar: Krediye dayalı fiyatlandırma hacimle birlikte birikir — yüksek geçiş yükleri, bir kereye mahsus süresiz lisansa kıyasla önemli sürekli maliyetler oluşturur.
-
Baskı İçi̇n Opti̇mi̇ze Edi̇len Çıktı: Bulut API'leri genellikle arka planları azaltarak ve renkleri basit hale getirerek "mürekkep" tasarrufu sağlar. Sonuç hiçbir zaman ekranınızdaki HTML gibi görünmez.
- Şablon Bağlılığı: CraftMyPDF, kendi tescilli sürükle ve bırak editörünü gerektirir. Standart HTML/CSS özgürce kullanılamaz.
Mimari̇ Karşılaştırma
| Aspekt | CraftMyPDF | IronPDF |
|---|---|---|
| Veri Konumu | Bulut (veriniz sisteminizden ayrılır) | Yerel (veri asla ayrılmaz) |
| Gecikme | Ağ gidiş-dönüşü + işleme (genellikle saniyeler) | Milisaniye |
| Fiyatlandırma | Krediye dayalı abonelik | Tek seferlik süresiz lisans |
| Şablon Sistemi | Tescilli sürükle-bırak yalnızca | Herhangi bir HTML/CSS/JavaScript |
| Çıktı Kalitesi | Baskı için optimize edilmiştir | Piksellikle aynı ekran renderı |
| Çevrimdışı Çalışır | Hayır (internet gerektirir) | Evet |
| Uyumluluk | Veri organizasyondan çıkar | SOC2/HIPAA dostu |
Özellik Karşılaştırması
| Özellik | CraftMyPDF | IronPDF |
|---|---|---|
| HTML'den PDF'ye | API şablonları aracılığıyla | ✅Yerel |
| URL'yi PDF'ye çevir | API ile | ✅Yerel |
| Özel şablonlar | Yalnızca tescilli editör | Herhangi bir HTML ✅ |
| CSS3 desteği | Sınırlı | Tam ✅ |
| JavaScript işleme | Sınırlı | Tam ✅ |
| PDF'leri Birleştir/Böl | API ile | ✅Yerel |
| Filigranlar | API ile | ✅Yerel |
| Çevrimdışı çalışır | ❌ | ✅ |
| Kendi kendine barındırılan | ❌ | ✅ |
Migration'a Ön Hazırlık
Ön Koşullar
Ortamınızın bu gereksinimleri karşıladığından emin olun:
- .NET Framework 4.6.2+ or .NET Core 3.1 / .NET 5-9
- Visual Studio 2019+ veya C# eklentisi ile VS Code
- NuGet Package Manager erişimi -IronPDF lisans anahtarı (ücretsiz deneme sürümü ironpdf.com adresinde mevcut)
CraftMyPDFKullanımı Denetle
TümCraftMyPDFreferanslarını belirlemek için bu komutları çözüm dizininde ç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" .
Beklenebilecek Kırıcı Değişiklikler
| Değişim | CraftMyPDF | IronPDF | Etki |
|---|---|---|---|
| Mimari | Bulut REST API | Yerel .NET kütüphanesi | HTTP çağrılarını kaldır |
| Şablonlar | Tescilli editör | Standart HTML | Şablonları HTML'ye dönüştür |
| API Anahtarı | Her çağrı için gerekli | Başlangıçta lisans | API anahtarı yönetimini kaldır |
| Asenkron desen | Gerekli (HTTP) | Opsiyonel | Tercih edilirse await kaldır |
| Hata yönetimi | HTTP durumu kodları | Istisnalar | try/catch kalıplarını değiştirin |
| Veri bağlama | JSON şablonlar | Dizi iç içe dizimi | Veri bağlamayı basitleştir |
Adım Adım Geçiş Süreci
1. Adım: NuGet Paketlerini Güncelleyin
HTTP istemci kütüphanesini kaldirin ve IronPDF'i yükleyin:
# 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
Adım 2: Ad Alanı Referanslarını Güncelleyin
HTTP istemci ad alanlarınıIronPDF ile 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
Adım 3: Lisansı Yapılandırın (Başlangıçta Bir Defa)
Her istek için API anahtar başlıklarını tek bir lisans yapılandırması 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 Uç Nokta Eşlemesi
| CraftMyPDF | IronPDF |
|---|---|
POST /v1/create |
renderer.RenderHtmlAsPdf(html) |
X-API-KEY başlık |
License.LicenseKey = "..." |
template_id |
Standart HTML dizesi |
{%name%} yer tutucular |
$"{name}" C# ara ekleme |
POST /v1/merge |
PdfDocument.Merge(pdfs) |
POST /v1/add-watermark |
pdf.ApplyWatermark(html) |
| Web kancası geri çağrıları | Gerekli değil |
| Hız sınırlama | Uygulanamaz |
Yapılandırma Eşleştirmesi
| CraftMyPDFSeçeneği | IronPDF Eşdeğeri |
|---|---|
template_id |
HTML dizgisi |
data JSON |
C# ara dil |
page_size: "A4" |
PaperSize = PdfPaperSize.A4 |
orientation: "landscape" |
PaperOrientation = Landscape |
margin_top: 20 |
MarginTop = 20 |
header |
HtmlHeader |
footer |
HtmlFooter |
Kod Göç Örnekleri
HTML'den PDF'ye Dönüşüm
En yaygın işlem, bulut API'sinden yerel işleme temel mimari değişikliği göstermektedir.
CraftMyPDF Uygulaması:
// 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 başlıklarını, şablon kimliklerini ve HTTP yanıt yönetimini ortadan kaldırır—15 satırlık bulut işlemini 4 satır yerel koda indirir. Daha fazla seçenek için, HTML'den PDF'e dokümantasyona bakın.
URL'den PDF'ye Dönüşüm
CraftMyPDF Uygulaması:
// 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 = "file" // "file" returns binary PDF; "json" returns a CDN URL
});
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 = "file" // "file" returns binary PDF; "json" returns a CDN URL
});
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 = "file" ' "file" returns binary PDF; "json" returns a CDN URL
})
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 dahil olmak üzere tüm web sayfasını yakalar. Daha fazla seçenek için, URL'den PDF'e dokümantas bakın.
Başlıklar ve Altbilgiler
CraftMyPDF Uygulaması:
// 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çleri destekler. Daha fazla seçenek için başlıklar ve altbilgiler belgelerine bakın.
Şablon Değişken Dönüşümü
CraftMyPDF, C# dize ara diline dönüştürülmesi gereken tescilli şablon yer tutucularını kullanır:
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 Taşıma Notları
HTTP Kodlarını Kaldır
En önemli değişiklik, ağ bağımlılıklarını ortadan kaldırmaktır.IronPDF yerel olarak çalışır—RestClient yok, API çağrıları yok, yanıt yönetimi 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)
Hız Sınırlandırma Kodunu Kaldır
CraftMyPDF, yeniden deneme mantığı gerektiren API hız sınırlarını uygular. IronPDF'nin sınırı yoktur:
//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 İşlemcilerini Kaldır
CraftMyPDF, PDF tamamlama için asenkron web kancalarını kullanır.IronPDF senkron çalışır—PDF hemen hazırdı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!
Varsayılan Olarak Senkron
Sadece HTTP çağrıları için gerekiyorsa asenkron/await kalıplarını kaldırın:
//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);
Taşınma Sonrası Kontrollistesi
Kod taşımasını tamamladıktan sonra, aşağıdakileri doğrulayın:
- Tüm PDF oluşturma testlerini çalıştırın
- Çıktı kalitesini karşılaştırın (IronPDF'nin Chromium motoru piksellik-kusursuz geriverir)
- Performans iyileştirmesini ölçün (milisaniyeler vs. saniyeler)
- Tüm şablonların doğru şekilde dönüştürüldüğünü doğrulayın
- Hız limiti olmadan toplu işlem yapmayı test edin
- Tüm hedef ortamları test edin
- CI/CD yapılarını güncelleyin -CraftMyPDFaboneliğini iptal edin
- API anahtarını sırlar/ayarlar'dan kaldırın
Ek Kaynaklar
CraftMyPDF'den IronPDF'e geçiş, çevrimdışı çalışabilen piksellik-kusursuz Chromium işleme yapısı sağlayarak bulut bağımlılıklarını, ağ gecikmesini, PDF başına ücreti ve şablon kilitlenmelerini ortadan kaldırır. REST API çağrılarından yerel metod çağrısına geçiş, kod tabanınızı basitleştirir ve hassas belge verilerini altyapınız içinde tutar.

