C# PDF Kütüphaneleri İçin APITemplate io ve IronPDF Karşılaştırması
Bir C# geliştiricisi olarak, projelerimde PDF oluşturma ve düzenlemede sıkça zorluklarla karşılaştım. Verimli, güvenilir ve entegre edilebilir PDF çözümleri ihtiyaçı, bizim alanda yaygın bir sorundur. Bu yüzden APITemplate ve IronPDF'i, C# uygulamalarındaki PDF ile ilgili görevleri basitleştirdiğini vaat eden iki popüler aracı incelemeye karar verdim.
Bu makalede, APITemplate ve IronPDF ile olan pratik deneyimlerimi, özelliklerini, performanslarını ve entegrasyon yeteneklerini karşılaştırarak paylaşacağım. Amacım size net, tarafsız bir analiz sunarak bir sonraki projeniz için bilgilendirici bir karar vermenize yardımcı olmaktır. İlk kez APITemplate ve IronPDF ile karşılaştığımda, bu araçların C# geliştirmede PDF ile ilgili zorlukları çözme potansiyelleri beni etkiledi. Haydi bu araçların her birinin sunduklarını inceleyelim.
APITemplate

APITemplate, şablonlardan PDF ve görüntüler oluşturmaya odaklanan bulut tabanlı bir hizmettir. Geliştiricilerin, önceden tanımlanmış şablonlara JSON verileri göndererek dökümanlar ve grafikler oluşturmalarına olanak tanıyan bir API sunar. İlk testlerimde, APITemplate'in kullanımı kolay buldum. Web arayüzlerini kullanarak bir şablon oluşturabilir ve C# uygulamamdan verilerle doldurmak için API'lerini kullanabilirim.
APITemplate'in Temel Özellikleri
Şablon Tabanlı Oluşturma
APITemplate'in temel gücü şablon tabanlı yaklaşımında yatıyor. Dökümanlar ve görüntüler için yeniden kullanılabilir şablonlar oluşturabilirim, bu da tekrarlayan görevlerde bana çok zaman kazandırıyor. Ayrıca PDF oluşturmak için bir markdown şablon düzenleyici de sunuyor. Zapier ve diğer üçüncü taraflarla entegre edilebilir yeniden kullanılabilir şablonlardan PDF oluşturabilirsiniz.
JSON Veri Entegrasyonu
JSON Veri Entegrasyonu, sık kullandığım bir özellik. Şablonları JSON verileriyle doldurma yeteneği sunar. Bu, objelerimi JSON'a serileyip API'ye gönderebileceğim için C# uygulamalarımla entegrasyonu son derece kolaylaştırıyor.
API Konsolu
API konsolu özelliği benim için zaman kazandırıcı oldu. Bu özellik ile API çağrılarını doğrudan web sitelerinden önizleyip test edebilir, isteklerimi C# kodumda uygulamadan önce hata ayıklayıp ince ayar yapabilirim.
Özelleştirilebilir Başlıklar ve Alt Bilgiler
PDF'lerime özel başlıklar ve alt bilgiler ekleme yeteneği, özellikle profesyonel raporlar veya faturalar oluştururken değerli oldu. Kolayca sayfa numaraları, tarihler veya şirket logoları ekleyebilirim.
IronPDF

IronPDF ise, C# uygulamaları içinde PDF manipülasyonu için özel olarak tasarlanmış bir .NET kütüphanesidir. PDF oluşturma, düzenleme ve dönüştürme de dahil olmak üzere geniş bir işlevsellik sunar. Öne çıkan özelliklerinden biri, HTML'den PDF oluşturma yeteneğidir ki bu, web tabanlı uygulamalar için inanılmaz derecede kullanışlı olabilir.
IronPDF ile ilk deneyimim, NuGet üzerinden kurulumunu ve doğrudan C# projemle entegrasyonunu kapsıyordu. API entegrasyon süreci çok sorunsuz olduğundan, projelerim içinde çalışmasına hızla olanak sağladım. Harici hizmetlere gerek kalmadan programatik olarak PDF oluşturabilmek beni etkiledi.
Fark ettiğim ana fark, APITemplate'in önceden tanımlanmış şablonlardan döküman oluşturma konusundaki mükemmelliği iken, IronPDF'in C# kodunuz içinde özelleştirilmiş PDF manipülasyonuna daha fazla esneklik sunduğudur. APITemplate'in bulut tabanlı doğası, PDF oluşturma için sunucu kaynaklarınızı düşünmenize gerek olmadığını fakat internet bağlantısı gerektirdiğini ifade ediyor. Yerel bir kütüphane olan IronPDF ise çevrimdışı çalışabilir ancak sunucunuzun kaynaklarını kullanır.
IronPDF'in Temel Özellikleri
HTML'den PDF Oluşturma
IronPDF, HTML içeriğinden PDF'ler üretme konusunda mükemmeldir. Raporlar ve belgeleri dinamik olarak oluşturmak için bu özelliği geniş ölçüde kullandım. HTML dizeleri veya hatta URL'leri kütüphaneye iletmek kadar basittir. IronPDF'in modern web standartları desteği, HTML içeriğinden üretilen her PDF'in yüksek kaliteli bir belge olarak çıktığını ifade eder.
PDF Manipülasyonu
Bu özellik, mevcut PDF'leri programatik olarak düzenlememe olanak tanır. Raporları veya formları güncellemek için PDF belgelerine metin, resimler veya hatta yeni sayfalar ekleyebilirim ki bu oldukça kullanışlıdır.
PDF Birleştirme ve Bölme
Büyük belgelerle çalışırken bu özelliği özellikle kullanışlı buldum. IronPDF, birden fazla PDF'yi birleştirmenizi veya tek bir PDF'i birkaç dosyaya bölmenizi kolaylaştırır.
Metin Çıkarma
PDF'lerden analiz veya indeksleme için metin içeriği çıkarmam gerektiğinde, IronPDF'in metin çıkarma yetenekleri işe yarıyor. Veri çıkarmayı kolaylaştırarak çeşitli PDF düzenlerini iyi işler.
Form Doldurma
Otomatik form doldurma içeren projelerde, IronPDF'in form doldurma özelliği çok kullanışlıdır. PDF formlarını programatik olarak doldurabilirim ve manuel veri girişi süresini azaltabilirim.
Dijital İmzalar
Güvenlik, projelerimin birçoğunda kritik bir unsurdur. IronPDF, belgelerin özgünlüğünü ve güvenliğini artıran PDF'lere dijital imzalar eklememe olanak tanır.
Şifre Koruma
Hassas belgelerle uğraşırken, PDF'lere şifre koruması eklemek için IronPDF kullanırım. Bu, gizli bilgilerimin güvende kalmasını sağlamak için son derece yararlıdır.
PDF'yi Görüntüye Dönüştürme
Ön izlemeler veya küçük resimler için PDF sayfalarını görüntülere dönüştürmem gerektiği zamanlar oluyor. IronPDF bu süreci kolaylaştırır, benden sadece birkaç satır kod gerektirir ve çeşitli görüntü formatlarını destekler.
Çapraz Platform Uyumluluğu
Çapraz platform projelerinde çalışan bir .NET geliştiricisi olarak, IronPDF'nin farklı işletim sistemlerinde kesintisiz çalışmasını, .NET Standard desteği sayesinde takdir ediyorum.
C# Projeniz İçin IronPDF ve APITemplate Kurulumu
Bu araçları bir C# projesinde kurmak oldukça basittir. Size, deneyimlerime dayanarak hem IronPDF hem de APITemplate için süreci anlatacağım.
IronPDF
C# projelerimde IronPDF kurmak için bu adımları izlerim:
-
Projemi Visual Studio'da açarım.
-
IronPDF'yi kurmak için NuGet Paket Yöneticisini kullanırım. Ya NuGet Paket Yöneticisini ya da Paket Yöneticisi Konsolunu kullanırım.**
- NuGet Paket Yöneticisinde IronPDF'yi arayıp kurarım.

-
Alternatif olarak, Paket Yöneticisi Konsolunda şu komutu çalıştırırım:
Install-Package IronPdf

-
Kurulumdan sonra, C# dosyamın en üstüne gerekli using ifadesini eklerim:
using IronPdf;using IronPdf;Imports IronPdf$vbLabelText $csharpLabel -
Lisansı etkinleştirmek için uygulamama başlangıçta bu satırı eklerim:
IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY-HERE";IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY-HERE";IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY-HERE"$vbLabelText $csharpLabel
İşte bu kadar! Artık kodumda IronPDF'yi kullanmaya başlayabilirim.
APITemplate
APITemplate için kurulum süreci biraz farklıdır çünkü bu, web tabanlı bir API'dir:
- Önce, APITemplate hesabı için web sitelerinden kayıt olurum.
- Kayıt işleminden sonra, API anahtarımı almak için API bölümüne giderim.
-
C# projemde belirli bir paket yüklememe gerek yok. Genellikle API çağrıları yapmak için yerleşik HttpClient'ı kullanırım.**
-
API anahtarını güvenli bir şekilde saklarım. Geliştirme sırasında, kullanıcı sırlarını kullanabilirim:**
dotnet user-secrets set "APITemplate:ApiKey" "YOUR-API-KEY-HERE"dotnet user-secrets set "APITemplate:ApiKey" "YOUR-API-KEY-HERE"SHELL -
Kodumda API anahtarı ile HttpClient'ı ayarlarım:
using System.Net.Http; using System.Net.Http.Headers; var client = new HttpClient(); client.DefaultRequestHeaders.Add("X-API-KEY", Configuration["APITemplate:ApiKey"]);using System.Net.Http; using System.Net.Http.Headers; var client = new HttpClient(); client.DefaultRequestHeaders.Add("X-API-KEY", Configuration["APITemplate:ApiKey"]);Imports System.Net.Http Imports System.Net.Http.Headers Private client = New HttpClient() client.DefaultRequestHeaders.Add("X-API-KEY", Configuration("APITemplate:ApiKey"))$vbLabelText $csharpLabel - Artık APITemplate'e API çağrıları yapmaya hazırım.
Bu proje için, zaten yapılandırılmış olan ve sadece şablon anahtarını eklemeniz gereken APITemplate'in resmi örnek GitHub projesini kullanacağım. Bu kurulumlar tamamlandığında, C# projelerimde hem IronPDF hem de APITemplate'i kullanmaya başlayabilirim. IronPDF uygulamam içinde yerel olarak çalışırken, APITemplate sunucuları ile iletişim kurmak için internet bağlantısına ihtiyaç duyar.
IronPDF ve APITemplate'te Gelişmiş Özellikler
Bir C# geliştiricisi olarak, hem IronPDF hem de APITemplate'i keşfetme şansım oldu. Şimdi beni etkileyen bazı gelişmiş özelliklerine bakalım.
IronPDF Gelişmiş Özellikler
JavaScript Desteği ile HTML'den PDF'ye Dönüştürme
IronPDF'nin HTML'den PDF'ye dönüşümü etkileyicidir. Sadece statik HTML'yi işlemekle kalmaz, JavaScript'i de ele alabilir. Dinamik web içeriği ile çalışırken bu benim için önemli bir avantaj olmuştur.
İşte nasıl kullandığıma dair hızlı bir örnek:
var Renderer = new ChromePdfRenderer();
string htmlContent = @"
<html>
<body>
<h1>Dynamic Chart</h1>
<canvas id='myChart'></canvas>
<script src='https://cdn.jsdelivr.net/npm/chart.js'></script>
<script>
var ctx = document.getElementById('myChart').getContext('2d');
new Chart(ctx, {
type: 'bar',
data: {
labels: ['Red', 'Blue', 'Yellow', 'Green', 'Purple', 'Orange'],
datasets: [{
label: '# of Votes',
data: [12, 19, 3, 5, 2, 3],
backgroundColor: [
'rgba(255, 99, 132, 0.2)',
'rgba(54, 162, 235, 0.2)',
'rgba(255, 206, 86, 0.2)',
'rgba(75, 192, 192, 0.2)',
'rgba(153, 102, 255, 0.2)',
'rgba(255, 159, 64, 0.2)'
],
borderColor: [
'rgba(255, 99, 132, 1)',
'rgba(54, 162, 235, 1)',
'rgba(255, 206, 86, 1)',
'rgba(75, 192, 192, 1)',
'rgba(153, 102, 255, 1)',
'rgba(255, 159, 64, 1)'
],
borderWidth: 1
}]
},
options: {
scales: {
y: {
beginAtZero: true
}
}
}
});
</script>
</body>
</html>";
var PDF = Renderer.RenderHtmlAsPdf(htmlContent);
PDF.SaveAs("dynamic_chart.pdf");
var Renderer = new ChromePdfRenderer();
string htmlContent = @"
<html>
<body>
<h1>Dynamic Chart</h1>
<canvas id='myChart'></canvas>
<script src='https://cdn.jsdelivr.net/npm/chart.js'></script>
<script>
var ctx = document.getElementById('myChart').getContext('2d');
new Chart(ctx, {
type: 'bar',
data: {
labels: ['Red', 'Blue', 'Yellow', 'Green', 'Purple', 'Orange'],
datasets: [{
label: '# of Votes',
data: [12, 19, 3, 5, 2, 3],
backgroundColor: [
'rgba(255, 99, 132, 0.2)',
'rgba(54, 162, 235, 0.2)',
'rgba(255, 206, 86, 0.2)',
'rgba(75, 192, 192, 0.2)',
'rgba(153, 102, 255, 0.2)',
'rgba(255, 159, 64, 0.2)'
],
borderColor: [
'rgba(255, 99, 132, 1)',
'rgba(54, 162, 235, 1)',
'rgba(255, 206, 86, 1)',
'rgba(75, 192, 192, 1)',
'rgba(153, 102, 255, 1)',
'rgba(255, 159, 64, 1)'
],
borderWidth: 1
}]
},
options: {
scales: {
y: {
beginAtZero: true
}
}
}
});
</script>
</body>
</html>";
var PDF = Renderer.RenderHtmlAsPdf(htmlContent);
PDF.SaveAs("dynamic_chart.pdf");
Dim Renderer = New ChromePdfRenderer()
Dim htmlContent As String = "
<html>
<body>
<h1>Dynamic Chart</h1>
<canvas id='myChart'></canvas>
<script src='https://cdn.jsdelivr.net/npm/chart.js'></script>
<script>
var ctx = document.getElementById('myChart').getContext('2d');
new Chart(ctx, {
type: 'bar',
data: {
labels: ['Red', 'Blue', 'Yellow', 'Green', 'Purple', 'Orange'],
datasets: [{
label: '# of Votes',
data: [12, 19, 3, 5, 2, 3],
backgroundColor: [
'rgba(255, 99, 132, 0.2)',
'rgba(54, 162, 235, 0.2)',
'rgba(255, 206, 86, 0.2)',
'rgba(75, 192, 192, 0.2)',
'rgba(153, 102, 255, 0.2)',
'rgba(255, 159, 64, 0.2)'
],
borderColor: [
'rgba(255, 99, 132, 1)',
'rgba(54, 162, 235, 1)',
'rgba(255, 206, 86, 1)',
'rgba(75, 192, 192, 1)',
'rgba(153, 102, 255, 1)',
'rgba(255, 159, 64, 1)'
],
borderWidth: 1
}]
},
options: {
scales: {
y: {
beginAtZero: true
}
}
}
});
</script>
</body>
</html>"
Dim PDF = Renderer.RenderHtmlAsPdf(htmlContent)
PDF.SaveAs("dynamic_chart.pdf")
Bu kod, Chart.js kullanarak dinamik bir grafik içeren bir PDF oluşturur. JavaScript, PDF oluşturma sürecinde çalıştırılır, böylece PDF içeren grafik oluşturulmuş dosya haline gelir. Sık değişen verilerin olduğu dinamik raporlar oluşturmak için bunu kullandım, böylece grafikleri ve diyagramları elle güncellemekten kurtuldum.

Bu örnekte olduğu gibi Chart.js gibi harici betikleri dahil edebilme yeteneği, PDF'lerimde zengin, dinamik içerik oluşturmak için güçlü JavaScript kütüphanelerini kullanabileceğim anlamına geliyor. Ayrıca, bu özellik CSS ve duyarlı tasarım tekniklerini HTML'mde kullanmama olanak tanır, böylece ortaya çıkan PDF çeşitli cihazlar ve baskı formatlarında harika görünür. Aynı HTML kaynağından görüntüleme ve baskı için optimize edilmiş PDF'ler oluşturmak için medya sorgularını bile kullandım.
PDF Şifreleme ve Şifre Çözme
Güvenlik, özellikle hassas bilgilerle uğraşırken projelerimin çoğunda son derece önemlidir. IronPDF'nin şifreleme ve şifre çözme yetenekleri bu senaryolarda paha biçilmez olmuştur.
var pdf = PdfDocument.FromFile("input.pdf");
// Set user password (for opening the document)
pdf.Password = "user_password";
// Set owner password (for editing, printing, etc.)
pdf.OwnerPassword = "owner_password";
// Set specific permissions
pdf.SecuritySettings.AllowUserPrinting = IronPdf.Security.PdfPrintSecurity.NoPrint;
pdf.SecuritySettings.AllowUserCopyPasteContent = false;
pdf.SecuritySettings.AllowUserEdits = IronPdf.Security.PdfEditSecurity.NoEdit;
pdf.SaveAs("highly_secured.pdf");
var pdf = PdfDocument.FromFile("input.pdf");
// Set user password (for opening the document)
pdf.Password = "user_password";
// Set owner password (for editing, printing, etc.)
pdf.OwnerPassword = "owner_password";
// Set specific permissions
pdf.SecuritySettings.AllowUserPrinting = IronPdf.Security.PdfPrintSecurity.NoPrint;
pdf.SecuritySettings.AllowUserCopyPasteContent = false;
pdf.SecuritySettings.AllowUserEdits = IronPdf.Security.PdfEditSecurity.NoEdit;
pdf.SaveAs("highly_secured.pdf");
Dim pdf = PdfDocument.FromFile("input.pdf")
' Set user password (for opening the document)
pdf.Password = "user_password"
' Set owner password (for editing, printing, etc.)
pdf.OwnerPassword = "owner_password"
' Set specific permissions
pdf.SecuritySettings.AllowUserPrinting = IronPdf.Security.PdfPrintSecurity.NoPrint
pdf.SecuritySettings.AllowUserCopyPasteContent = False
pdf.SecuritySettings.AllowUserEdits = IronPdf.Security.PdfEditSecurity.NoEdit
pdf.SaveAs("highly_secured.pdf")

Bu kod sadece kullanıcı şifresiyle PDF'yi şifrelemekle kalmaz, ayrıca izinler üzerinde ayrıntılı kontrol sağlayan bir sahip şifresi de ayarlar. Ben, kullanıcıların PDF ile ne yapabileceklerini veya yapamayacaklarını, örneğin içerik yazdırma veya kopyalama gibi, tam olarak belirleyebilirim.
Şifre çözme için genellikle bu yaklaşımı kullanırım:
try
{
var pdf = PdfDocument.FromFile("encrypted.pdf", "user_password");
pdf.SecuritySettings.RemovePasswordsAndEncryption();
pdf.SaveAs("decrypted.pdf");
Console.WriteLine("PDF decrypted successfully!");
}
catch (Exception ex)
{
Console.WriteLine($"Decryption failed: {ex.Message}");
}
try
{
var pdf = PdfDocument.FromFile("encrypted.pdf", "user_password");
pdf.SecuritySettings.RemovePasswordsAndEncryption();
pdf.SaveAs("decrypted.pdf");
Console.WriteLine("PDF decrypted successfully!");
}
catch (Exception ex)
{
Console.WriteLine($"Decryption failed: {ex.Message}");
}
Try
Dim pdf = PdfDocument.FromFile("encrypted.pdf", "user_password")
pdf.SecuritySettings.RemovePasswordsAndEncryption()
pdf.SaveAs("decrypted.pdf")
Console.WriteLine("PDF decrypted successfully!")
Catch ex As Exception
Console.WriteLine($"Decryption failed: {ex.Message}")
End Try
Bu kod, bir kullanıcı şifresiyle şifrelenmiş bir PDF'yi açmaya çalışır, tüm güvenlik kısıtlamalarını kaldırır ve yeni, şifresiz bir dosya olarak kaydeder. try-catch bloğu, şifrenin yanlış olabileceği durumları ele almaya yardımcı olur.
Bu özellikleri, farklı kullanıcıların PDF'lere farklı erişim seviyelerine sahip olduğu güvenli belge yönetim sistemleri oluşturduğum çeşitli senaryolarda kullandım. Örneğin, bir tıbbi kayıt sisteminde, hassas hasta bilgilerinin şifrelendiğini ve yalnızca yetkili personel tarafından erişilebildiğini garanti ettim.
PDF Sıkıştırma
Büyük sayıda PDF ile uğraşırken, dosya boyutu önemli bir faktör haline gelir. IronPDF'nin sıkıştırma özelliği, depolama ve bant genişliği kısıtlamalarını yönetmede bir cankurtaran olmuştur.
İşte sıkıştırmayı nasıl kullandığıma dair daha gelişmiş bir örnek:
using IronPdf;
using System.IO;
using PdfDocument = IronPdf.PdfDocument;
var PDF = PdfDocument.FromFile(@"F:/Test.pdf");
// Compress images
PDF.CompressImages(80); // 80% quality
// Compress fonts
PDF.CompressStructTree();
// Save the compressed PDF
PDF.SaveAs(@"F:/highly_compressed.pdf");
// Compare file sizes
var originalSize = new FileInfo(@"F:/Test.pdf").Length;
var compressedSize = new FileInfo(@"F:/highly_compressed.pdf").Length;
var compressionRatio = (1 - (double)compressedSize / originalSize) * 100;
Console.WriteLine($"Original size: {originalSize / 1024} KB");
Console.WriteLine($"Compressed size: {compressedSize / 1024} KB");
Console.WriteLine($"Compression ratio: {compressionRatio:F2}%");
using IronPdf;
using System.IO;
using PdfDocument = IronPdf.PdfDocument;
var PDF = PdfDocument.FromFile(@"F:/Test.pdf");
// Compress images
PDF.CompressImages(80); // 80% quality
// Compress fonts
PDF.CompressStructTree();
// Save the compressed PDF
PDF.SaveAs(@"F:/highly_compressed.pdf");
// Compare file sizes
var originalSize = new FileInfo(@"F:/Test.pdf").Length;
var compressedSize = new FileInfo(@"F:/highly_compressed.pdf").Length;
var compressionRatio = (1 - (double)compressedSize / originalSize) * 100;
Console.WriteLine($"Original size: {originalSize / 1024} KB");
Console.WriteLine($"Compressed size: {compressedSize / 1024} KB");
Console.WriteLine($"Compression ratio: {compressionRatio:F2}%");
Imports IronPdf
Imports System.IO
Imports PdfDocument = IronPdf.PdfDocument
Private PDF = PdfDocument.FromFile("F:/Test.pdf")
' Compress images
PDF.CompressImages(80) ' 80% quality
' Compress fonts
PDF.CompressStructTree()
' Save the compressed PDF
PDF.SaveAs("F:/highly_compressed.pdf")
' Compare file sizes
Dim originalSize = (New FileInfo("F:/Test.pdf")).Length
Dim compressedSize = (New FileInfo("F:/highly_compressed.pdf")).Length
Dim compressionRatio = (1 - CDbl(compressedSize) / originalSize) * 100
Console.WriteLine($"Original size: {originalSize \ 1024} KB")
Console.WriteLine($"Compressed size: {compressedSize \ 1024} KB")
Console.WriteLine($"Compression ratio: {compressionRatio:F2}%")
İşte sonuç:

Dosya boyutlarını kaliteden ödün vermeden azaltmada son derece etkili bir teknik kombinasyonu buldum.
Bu özelliği çeşitli senaryolarda kullandım:
- E-posta ekleri: PDF'leri e-posta ile gönderirken sıkıştırırım, böylece ek boyutu sınırlarını aşmazlar.
- Web uygulamaları: Kullanıcılar tarafından indirilmesi gereken PDF'ler için, sıkıştırma yükleme sürelerini ve bant genişliği kullanımını azaltır.
- Arşivleme: Uzun süreli saklama için çok sayıda PDF depolarken, sıkıştırma depolama maliyetlerini önemli ölçüde azaltır.
Bir projede, bir hukuk firması için bir belge yönetim sistemi üzerinde çalıştım. PDF formatında binlerce dava dosyası vardı, birçoğu büyük dosya boyutlarına sahip taranmış belgelerdi. Bu sıkıştırma tekniğini uygulayarak, bulut depolama faturalarında önemli bir tasarrufa yol açarak depolama gereksinimlerini %60'ın üzerinde azalttık.
Dijital İmzalar
Dijital imzalar eklemek, belge bütünlüğünü ve inkar edilemezliği sağlamak için birçok iş süreci için gerekli bir özelliktir. IronPDF bu karmaşık görevi şaşırtıcı derecede basit hale getirir. Dijital imzaları nasıl uyguladığıma dair daha ayrıntılı bir örnek:
using IronPdf;
using IronPdf.Signing;
var renderer = new ChromePdfRenderer();
var pdf = PdfDocument.FromFile(@"F:/Contract.pdf");
var signature = new IronPdf.Signing.PdfSignature(@"F:/Iron.pfx", "123")
{
// Step 3. Optional signing options and a handwritten signature graphic
SigningContact = "support@ironsoftware.com",
SigningLocation = "New York, USA",
SigningReason = "Signing PDF"
};
pdf.Sign(signature);
pdf.SaveAs(@"F:/signed.pdf");
using IronPdf;
using IronPdf.Signing;
var renderer = new ChromePdfRenderer();
var pdf = PdfDocument.FromFile(@"F:/Contract.pdf");
var signature = new IronPdf.Signing.PdfSignature(@"F:/Iron.pfx", "123")
{
// Step 3. Optional signing options and a handwritten signature graphic
SigningContact = "support@ironsoftware.com",
SigningLocation = "New York, USA",
SigningReason = "Signing PDF"
};
pdf.Sign(signature);
pdf.SaveAs(@"F:/signed.pdf");
Imports IronPdf
Imports IronPdf.Signing
Private renderer = New ChromePdfRenderer()
Private pdf = PdfDocument.FromFile("F:/Contract.pdf")
Private signature = New IronPdf.Signing.PdfSignature("F:/Iron.pfx", "123") With {
.SigningContact = "support@ironsoftware.com",
.SigningLocation = "New York, USA",
.SigningReason = "Signing PDF"
}
pdf.Sign(signature)
pdf.SaveAs("F:/signed.pdf")
Bu özelliği birçok gerçek dünya uygulamasında kullandım:
- Sözleşme yönetim sistemi: Elektronik İmzalı belgeleri gönderip alması gereken bir şirket için bunu uyguladık. Dijital imzalar sözleşmelerin yasal geçerliliğini sağladı.
- Tıbbi kayıt sistemi: Bir sağlık uygulamasında, doktorların hasta kayıtlarına ve reçetelerine imza atmalarına olanak tanımak için dijital imzalar kullandık.
- Hükümet belge işleme: Bir devlet kurumu için, resmi belgelerin dijital olarak imzalanabildiği bir sistem uyguladık.
PDF Bölme ve Birleştirme
PDF'leri bölme ve birleştirme yeteneği, belge yönetim sistemlerinde sıkça kullandığım temel bir özelliktir. IronPDF'nin bu özellikleri uygulaması güçlü ve esnektir. Pdf'leri bölme ve birleştirme ile ilgili daha gelişmiş bir örnek:
using IronPdf;
class Program
{
static void Main(string[] args)
{
// Create first PDF with three pages
const string html_a = @"
<h1>Document A</h1>
<p>This is the first page of Document A.</p>
<div style='page-break-after: always;'></div>
<h2>Document A - Page 2</h2>
<p>This is the second page of Document A.</p>
<div style='page-break-after: always;'></div>
<h2>Document A - Page 3</h2>
<p>This is the third and final page of Document A.</p>";
// Create second PDF with two pages
const string html_b = @"
<h1>Document B</h1>
<p>Welcome to the first page of Document B.</p>
<div style='page-break-after: always;'></div>
<h2>Document B - Page 2</h2>
<p>This is the second and last page of Document B.</p>";
// Render HTML to PDF
var renderer = new ChromePdfRenderer();
var pdfdoc_a = renderer.RenderHtmlAsPdf(html_a);
var pdfdoc_b = renderer.RenderHtmlAsPdf(html_b);
// Merge PDFs
var merged = PdfDocument.Merge(pdfdoc_a, pdfdoc_b);
merged.SaveAs(@"F:/IronPdf/MergedDocument.pdf");
Console.WriteLine("Merged PDF created: MergedDocument.pdf");
// Load the merged PDF
var pdf = PdfDocument.FromFile(@"F:/IronPdf/MergedDocument.pdf");
// Extract the first page
var firstPage = pdf.CopyPage(0);
firstPage.SaveAs(@"F:/IronPdf/FirstPageOnly.pdf");
Console.WriteLine("First page extracted: FirstPageOnly.pdf");
// Extract pages 2 to 4 (note: index starts at 0)
var middlePages = pdf.CopyPages(1, 3);
middlePages.SaveAs(@"F:/IronPdf/Pages2to4.pdf");
Console.WriteLine("Pages 2 to 4 extracted: Pages2to4.pdf");
Console.WriteLine("Process completed. Press any key to exit.");
Console.ReadKey();
}
}
using IronPdf;
class Program
{
static void Main(string[] args)
{
// Create first PDF with three pages
const string html_a = @"
<h1>Document A</h1>
<p>This is the first page of Document A.</p>
<div style='page-break-after: always;'></div>
<h2>Document A - Page 2</h2>
<p>This is the second page of Document A.</p>
<div style='page-break-after: always;'></div>
<h2>Document A - Page 3</h2>
<p>This is the third and final page of Document A.</p>";
// Create second PDF with two pages
const string html_b = @"
<h1>Document B</h1>
<p>Welcome to the first page of Document B.</p>
<div style='page-break-after: always;'></div>
<h2>Document B - Page 2</h2>
<p>This is the second and last page of Document B.</p>";
// Render HTML to PDF
var renderer = new ChromePdfRenderer();
var pdfdoc_a = renderer.RenderHtmlAsPdf(html_a);
var pdfdoc_b = renderer.RenderHtmlAsPdf(html_b);
// Merge PDFs
var merged = PdfDocument.Merge(pdfdoc_a, pdfdoc_b);
merged.SaveAs(@"F:/IronPdf/MergedDocument.pdf");
Console.WriteLine("Merged PDF created: MergedDocument.pdf");
// Load the merged PDF
var pdf = PdfDocument.FromFile(@"F:/IronPdf/MergedDocument.pdf");
// Extract the first page
var firstPage = pdf.CopyPage(0);
firstPage.SaveAs(@"F:/IronPdf/FirstPageOnly.pdf");
Console.WriteLine("First page extracted: FirstPageOnly.pdf");
// Extract pages 2 to 4 (note: index starts at 0)
var middlePages = pdf.CopyPages(1, 3);
middlePages.SaveAs(@"F:/IronPdf/Pages2to4.pdf");
Console.WriteLine("Pages 2 to 4 extracted: Pages2to4.pdf");
Console.WriteLine("Process completed. Press any key to exit.");
Console.ReadKey();
}
}
Imports IronPdf
Friend Class Program
Shared Sub Main(ByVal args() As String)
' Create first PDF with three pages
Const html_a As String = "
<h1>Document A</h1>
<p>This is the first page of Document A.</p>
<div style='page-break-after: always;'></div>
<h2>Document A - Page 2</h2>
<p>This is the second page of Document A.</p>
<div style='page-break-after: always;'></div>
<h2>Document A - Page 3</h2>
<p>This is the third and final page of Document A.</p>"
' Create second PDF with two pages
Const html_b As String = "
<h1>Document B</h1>
<p>Welcome to the first page of Document B.</p>
<div style='page-break-after: always;'></div>
<h2>Document B - Page 2</h2>
<p>This is the second and last page of Document B.</p>"
' Render HTML to PDF
Dim renderer = New ChromePdfRenderer()
Dim pdfdoc_a = renderer.RenderHtmlAsPdf(html_a)
Dim pdfdoc_b = renderer.RenderHtmlAsPdf(html_b)
' Merge PDFs
Dim merged = PdfDocument.Merge(pdfdoc_a, pdfdoc_b)
merged.SaveAs("F:/IronPdf/MergedDocument.pdf")
Console.WriteLine("Merged PDF created: MergedDocument.pdf")
' Load the merged PDF
Dim pdf = PdfDocument.FromFile("F:/IronPdf/MergedDocument.pdf")
' Extract the first page
Dim firstPage = pdf.CopyPage(0)
firstPage.SaveAs("F:/IronPdf/FirstPageOnly.pdf")
Console.WriteLine("First page extracted: FirstPageOnly.pdf")
' Extract pages 2 to 4 (note: index starts at 0)
Dim middlePages = pdf.CopyPages(1, 3)
middlePages.SaveAs("F:/IronPdf/Pages2to4.pdf")
Console.WriteLine("Pages 2 to 4 extracted: Pages2to4.pdf")
Console.WriteLine("Process completed. Press any key to exit.")
Console.ReadKey()
End Sub
End Class

İşte kod tarafından oluşturulan birleştirilmiş belge:

Form Doldurma
Form doldurma otomasyonu, birçok projemde büyük zaman tasarrufu sağladı. IronPDF, büyük miktarda formu işlemek veya kişiselleştirilmiş belgeler oluşturmak için PDF formlarını programlı olarak doldurmama olanak tanır. Form doldurmaya dair daha kapsamlı bir örnek:
using IronPdf;
using System;
// Load the combined form
PdfDocument pdf = PdfDocument.FromFile(@"F:/completeForm.pdf");
// Handle radio buttons
var radioForm = pdf.Form.FindFormField("traveltype");
radioForm.Value = "Airplane";
// Handle checkbox
var checkboxForm = pdf.Form.FindFormField("taskCompleted");
checkboxForm.Value = "Yes";
// Handle combobox
var comboboxForm = pdf.Form.FindFormField("priority");
comboboxForm.Value = "Low";
// Print out all the available choices for combobox
foreach (var choice in comboboxForm.Choices)
{
Console.WriteLine(choice);
}
// Handle text inputs
pdf.Form.FindFormField("firstname").Value = "John";
pdf.Form.FindFormField("lastname").Value = "Smith";
// Handle text area
pdf.Form.FindFormField("address").Value = "Iron Software\r\n205 N. Michigan Ave.";
// Save the edited PDF
pdf.SaveAs(@"F:/completeFormEdited.pdf");
using IronPdf;
using System;
// Load the combined form
PdfDocument pdf = PdfDocument.FromFile(@"F:/completeForm.pdf");
// Handle radio buttons
var radioForm = pdf.Form.FindFormField("traveltype");
radioForm.Value = "Airplane";
// Handle checkbox
var checkboxForm = pdf.Form.FindFormField("taskCompleted");
checkboxForm.Value = "Yes";
// Handle combobox
var comboboxForm = pdf.Form.FindFormField("priority");
comboboxForm.Value = "Low";
// Print out all the available choices for combobox
foreach (var choice in comboboxForm.Choices)
{
Console.WriteLine(choice);
}
// Handle text inputs
pdf.Form.FindFormField("firstname").Value = "John";
pdf.Form.FindFormField("lastname").Value = "Smith";
// Handle text area
pdf.Form.FindFormField("address").Value = "Iron Software\r\n205 N. Michigan Ave.";
// Save the edited PDF
pdf.SaveAs(@"F:/completeFormEdited.pdf");
Imports Microsoft.VisualBasic
Imports IronPdf
Imports System
' Load the combined form
Private pdf As PdfDocument = PdfDocument.FromFile("F:/completeForm.pdf")
' Handle radio buttons
Private radioForm = pdf.Form.FindFormField("traveltype")
radioForm.Value = "Airplane"
' Handle checkbox
Dim checkboxForm = pdf.Form.FindFormField("taskCompleted")
checkboxForm.Value = "Yes"
' Handle combobox
Dim comboboxForm = pdf.Form.FindFormField("priority")
comboboxForm.Value = "Low"
' Print out all the available choices for combobox
For Each choice In comboboxForm.Choices
Console.WriteLine(choice)
Next choice
' Handle text inputs
pdf.Form.FindFormField("firstname").Value = "John"
pdf.Form.FindFormField("lastname").Value = "Smith"
' Handle text area
pdf.Form.FindFormField("address").Value = "Iron Software" & vbCrLf & "205 N. Michigan Ave."
' Save the edited PDF
pdf.SaveAs("F:/completeFormEdited.pdf")
Bu özelliği birçok gerçek dünya uygulamasında kullandım:
-
İK işe alım sistemi: İnsan kaynakları veritabanından alınan bilgilere göre yeni çalışan belgelerini otomatik olarak dolduran bir sistem oluşturduk, bu da saatlerce manuel veri girişi tasarrufu sağladı.
-
Sigorta talep işleme: bir sigorta şirketi için, bir sistem geliştirdik ve talepleri hızlandırmak için poliçe sahibi bilgileriyle doldurulmuş form şablonları geliştirdik.
-
Okul başvuru sistemi: Bir eğitim projesinde bir sistem, öğrenci verilerine göre okul başvuru formlarını doldurdu ve başvuru sürecini hem öğrenciler hem de idari personel için daha kolay hale getirdi.
- Vergi formu oluşturma: bir muhasebe firması için otomatik olarak müşteri finansal verilerine dayanarak vergi formları doldurduğumuz, hataları azaltan ve vergi mevsiminde zamandan kazandıran bir sistem geliştirdik.
Formların programlı olarak doldurulabilmesi, birçok iş sürecini otomatikleştirmede önemli bir faktör olmuştur, bu da önemli zaman tasarrufu ve manuel bilgi girişi hatalarından kaçınmaya yol açmaktadır.
Filigran Eklemek
Filigran eklemek PDF'lere, markalaşma, güvenlik veya durum belirtilimi için genellikle gereklidir. IronPDF'nin esnek filigranlama yetenekleri, birçok projede yararlı bulduğum bir özelliktir. Filigranları nasıl kullandığıma dair daha ayrıntılı bir örnek:
using IronPdf;
using IronSoftware.Drawing;
string watermarkHtml = @"
<img style='width: 250px;' src='https://ironsoftware.com/img/products/ironpdf-logo-text-dotnet.svg'>
<h1>Iron Software</h1>";
ChromePdfRenderer renderer = new ChromePdfRenderer();
PdfDocument pdf = renderer.RenderHtmlAsPdf("<h1>Watermark</h1>");
// Apply watermark with 45 degrees rotation and 70% opacity
pdf.ApplyWatermark(watermarkHtml, rotation: 30, opacity: 90);
pdf.SaveAs("watermarkOpacity&Rotation.pdf");
using IronPdf;
using IronSoftware.Drawing;
string watermarkHtml = @"
<img style='width: 250px;' src='https://ironsoftware.com/img/products/ironpdf-logo-text-dotnet.svg'>
<h1>Iron Software</h1>";
ChromePdfRenderer renderer = new ChromePdfRenderer();
PdfDocument pdf = renderer.RenderHtmlAsPdf("<h1>Watermark</h1>");
// Apply watermark with 45 degrees rotation and 70% opacity
pdf.ApplyWatermark(watermarkHtml, rotation: 30, opacity: 90);
pdf.SaveAs("watermarkOpacity&Rotation.pdf");
Imports IronPdf
Imports IronSoftware.Drawing
Private watermarkHtml As String = "
<img style='width: 250px;' src='https://ironsoftware.com/img/products/ironpdf-logo-text-dotnet.svg'>
<h1>Iron Software</h1>"
Private renderer As New ChromePdfRenderer()
Private pdf As PdfDocument = renderer.RenderHtmlAsPdf("<h1>Watermark</h1>")
' Apply watermark with 45 degrees rotation and 70% opacity
pdf.ApplyWatermark(watermarkHtml, rotation:= 30, opacity:= 90)
pdf.SaveAs("watermarkOpacity&Rotation.pdf")

APITemplate İleri Düzey Özellikler
Dinamik Şablon Oluşturma
APITemplate'in dinamik şablon oluşturma özelliği, özelleştirilebilir JSON verileri kullanarak son derece özelleştirilebilir belgeler oluşturmanıza olanak tanıyan güçlü bir özelliktir. APITemplate'in API'si dinamik bileşenleri destekler. Kodunuzun hem PDF hem de görüntü çıktısını alabilirsiniz. API konsolunda, WYSIWYG editörünü kullanarak PDF belgeleri kolayca oluşturabildim.
Bunu projelerimde nasıl kullandığımı keşfedelim.
using System;
using System.IO;
using System.Net.Http;
using System.Text.Json;
using System.Threading.Tasks;
namespace csharp
{
class ReturnContent
{
public string download_url { get; set; }
public string status { get; set; }
}
class Program
{
static async Task Main(string[] args)
{
var api_key = "a9e4MjA2NTg6MTc3Njk6Uk1ZSzVjTWs1T3d6VE9Mdw=";
var template_id = "bf077b23b4a407ae";
var url = $"https://rest.apitemplate.io/v2/create-pdf?template_id={template_id}";
var data = new
{
date = "15/05/2022",
invoice_no = "435568799",
sender_address1 = "3244 Jurong Drive",
sender_address2 = "Falmouth Maine 1703",
sender_phone = "255-781-6789",
sender_email = "dev@ironsoftware.com",
rece_addess1 = "2354 Lakeside Drive",
rece_addess2 = "New York 234562 ",
rece_phone = "34333-84-223",
rece_email = "info@ironsoftware.com",
items = new[]
{
new { item_name = "Oil", unit = 1, unit_price = 100, total = 100 },
new { item_name = "Rice", unit = 2, unit_price = 200, total = 400 },
new { item_name = "Orange", unit = 7, unit_price = 20, total = 1400 }
},
total = "total",
footer_email = "info@ironsoftware.com"
};
var json_content = JsonSerializer.Serialize(data);
var buffer = System.Text.Encoding.UTF8.GetBytes(json_content);
var byteContent = new ByteArrayContent(buffer);
Console.WriteLine(json_content);
var client = new HttpClient();
client.DefaultRequestHeaders.Add("X-API-KEY", api_key);
var response = await client.PostAsync(url, byteContent);
var ret = await response.Content.ReadAsStringAsync();
var returnContent = JsonSerializer.Deserialize<ReturnContent>(ret);
if (returnContent.status == "success")
{
Console.WriteLine($"Downloading {returnContent.download_url}...");
var download_response = await client.GetAsync(returnContent.download_url);
using (var stream = await download_response.Content.ReadAsStreamAsync())
{
var fileInfo = new FileInfo(@"F:/generated_document.pdf");
using (var fileStream = fileInfo.OpenWrite())
{
await stream.CopyToAsync(fileStream);
}
}
Console.WriteLine("PDF file has been downloaded and saved as 'generated_document.pdf'");
}
}
}
}
using System;
using System.IO;
using System.Net.Http;
using System.Text.Json;
using System.Threading.Tasks;
namespace csharp
{
class ReturnContent
{
public string download_url { get; set; }
public string status { get; set; }
}
class Program
{
static async Task Main(string[] args)
{
var api_key = "a9e4MjA2NTg6MTc3Njk6Uk1ZSzVjTWs1T3d6VE9Mdw=";
var template_id = "bf077b23b4a407ae";
var url = $"https://rest.apitemplate.io/v2/create-pdf?template_id={template_id}";
var data = new
{
date = "15/05/2022",
invoice_no = "435568799",
sender_address1 = "3244 Jurong Drive",
sender_address2 = "Falmouth Maine 1703",
sender_phone = "255-781-6789",
sender_email = "dev@ironsoftware.com",
rece_addess1 = "2354 Lakeside Drive",
rece_addess2 = "New York 234562 ",
rece_phone = "34333-84-223",
rece_email = "info@ironsoftware.com",
items = new[]
{
new { item_name = "Oil", unit = 1, unit_price = 100, total = 100 },
new { item_name = "Rice", unit = 2, unit_price = 200, total = 400 },
new { item_name = "Orange", unit = 7, unit_price = 20, total = 1400 }
},
total = "total",
footer_email = "info@ironsoftware.com"
};
var json_content = JsonSerializer.Serialize(data);
var buffer = System.Text.Encoding.UTF8.GetBytes(json_content);
var byteContent = new ByteArrayContent(buffer);
Console.WriteLine(json_content);
var client = new HttpClient();
client.DefaultRequestHeaders.Add("X-API-KEY", api_key);
var response = await client.PostAsync(url, byteContent);
var ret = await response.Content.ReadAsStringAsync();
var returnContent = JsonSerializer.Deserialize<ReturnContent>(ret);
if (returnContent.status == "success")
{
Console.WriteLine($"Downloading {returnContent.download_url}...");
var download_response = await client.GetAsync(returnContent.download_url);
using (var stream = await download_response.Content.ReadAsStreamAsync())
{
var fileInfo = new FileInfo(@"F:/generated_document.pdf");
using (var fileStream = fileInfo.OpenWrite())
{
await stream.CopyToAsync(fileStream);
}
}
Console.WriteLine("PDF file has been downloaded and saved as 'generated_document.pdf'");
}
}
}
}
Imports System
Imports System.IO
Imports System.Net.Http
Imports System.Text.Json
Imports System.Threading.Tasks
Namespace csharp
Friend Class ReturnContent
Public Property download_url() As String
Public Property status() As String
End Class
Friend Class Program
Shared Async Function Main(ByVal args() As String) As Task
Dim api_key = "a9e4MjA2NTg6MTc3Njk6Uk1ZSzVjTWs1T3d6VE9Mdw="
Dim template_id = "bf077b23b4a407ae"
Dim url = $"https://rest.apitemplate.io/v2/create-pdf?template_id={template_id}"
Dim data = New With {
Key .date = "15/05/2022",
Key .invoice_no = "435568799",
Key .sender_address1 = "3244 Jurong Drive",
Key .sender_address2 = "Falmouth Maine 1703",
Key .sender_phone = "255-781-6789",
Key .sender_email = "dev@ironsoftware.com",
Key .rece_addess1 = "2354 Lakeside Drive",
Key .rece_addess2 = "New York 234562 ",
Key .rece_phone = "34333-84-223",
Key .rece_email = "info@ironsoftware.com",
Key .items = {
New With {
Key .item_name = "Oil",
Key .unit = 1,
Key .unit_price = 100,
Key .total = 100
},
New With {
Key .item_name = "Rice",
Key .unit = 2,
Key .unit_price = 200,
Key .total = 400
},
New With {
Key .item_name = "Orange",
Key .unit = 7,
Key .unit_price = 20,
Key .total = 1400
}
},
Key .total = "total",
Key .footer_email = "info@ironsoftware.com"
}
Dim json_content = JsonSerializer.Serialize(data)
Dim buffer = System.Text.Encoding.UTF8.GetBytes(json_content)
Dim byteContent = New ByteArrayContent(buffer)
Console.WriteLine(json_content)
Dim client = New HttpClient()
client.DefaultRequestHeaders.Add("X-API-KEY", api_key)
Dim response = Await client.PostAsync(url, byteContent)
Dim ret = Await response.Content.ReadAsStringAsync()
Dim returnContent = JsonSerializer.Deserialize(Of ReturnContent)(ret)
If returnContent.status = "success" Then
Console.WriteLine($"Downloading {returnContent.download_url}...")
Dim download_response = Await client.GetAsync(returnContent.download_url)
Using stream = Await download_response.Content.ReadAsStreamAsync()
Dim fileInfo As New FileInfo("F:/generated_document.pdf")
Using fileStream = fileInfo.OpenWrite()
Await stream.CopyToAsync(fileStream)
End Using
End Using
Console.WriteLine("PDF file has been downloaded and saved as 'generated_document.pdf'")
End If
End Function
End Class
End Namespace

İşte oluşturulan PDF belge:

Yığın PDF Oluşturma
APITemplate'in yığın PDF oluşturma özelliği, tek bir API çağrısında birden fazla belge oluşturmak söz konusu olduğunda önemli bir avantajdır. Bunu nasıl kullandığıma dair daha ayrıntılı bir örnek:
using System;
using System.IO;
using System.Net.Http;
using System.Text.Json;
using System.Threading.Tasks;
using System.Collections.Generic;
namespace csharp
{
class ReturnContent
{
public string download_url { get; set; }
public string status { get; set; }
}
class Program
{
static async Task Main(string[] args)
{
var api_key = "a9e4MjA2NTg6MTc3Njk6Uk1ZSzVjTWs1T3d6VE9Mdw=";
var template_id = "d4f77b23b4ab09fa";
var url = $"https://rest.apitemplate.io/v2/create-pdf?template_id={template_id}";
var membershipCards = new List<object>
{
new { name = "Iron Dev 1", email = "dev1@ironsoftware.com", membership_id = "M001", expiry_date = "2024-12-31" },
new { name = "Iron Dev 2", email = "dev2@ironsoftware.com", membership_id = "M002", expiry_date = "2025-06-30" },
new { name = "Iron Dev 3", email = "dev3@ironsoftware.com", membership_id = "M003", expiry_date = "2024-09-15" }
};
var client = new HttpClient();
client.DefaultRequestHeaders.Add("X-API-KEY", api_key);
for (int i = 0; i < membershipCards.Count; i++)
{
var json_content = JsonSerializer.Serialize(membershipCards[i]);
var buffer = System.Text.Encoding.UTF8.GetBytes(json_content);
var byteContent = new ByteArrayContent(buffer);
Console.WriteLine($"Creating PDF for {((dynamic)membershipCards[i]).name}...");
var response = await client.PostAsync(url, byteContent);
var ret = await response.Content.ReadAsStringAsync();
var returnContent = JsonSerializer.Deserialize<ReturnContent>(ret);
if (returnContent.status == "success")
{
Console.WriteLine($"Downloading {returnContent.download_url}...");
var download_response = await client.GetAsync(returnContent.download_url);
using (var stream = await download_response.Content.ReadAsStreamAsync())
{
var fileInfo = new FileInfo($"F:/membership_card_{i + 1}.pdf");
using (var fileStream = fileInfo.OpenWrite())
{
await stream.CopyToAsync(fileStream);
}
}
Console.WriteLine($"PDF file has been downloaded and saved as 'membership_card_{i + 1}.pdf'");
}
else
{
Console.WriteLine($"Failed to create PDF for {((dynamic)membershipCards[i]).name}. Status: {returnContent.status}");
}
}
}
}
}
using System;
using System.IO;
using System.Net.Http;
using System.Text.Json;
using System.Threading.Tasks;
using System.Collections.Generic;
namespace csharp
{
class ReturnContent
{
public string download_url { get; set; }
public string status { get; set; }
}
class Program
{
static async Task Main(string[] args)
{
var api_key = "a9e4MjA2NTg6MTc3Njk6Uk1ZSzVjTWs1T3d6VE9Mdw=";
var template_id = "d4f77b23b4ab09fa";
var url = $"https://rest.apitemplate.io/v2/create-pdf?template_id={template_id}";
var membershipCards = new List<object>
{
new { name = "Iron Dev 1", email = "dev1@ironsoftware.com", membership_id = "M001", expiry_date = "2024-12-31" },
new { name = "Iron Dev 2", email = "dev2@ironsoftware.com", membership_id = "M002", expiry_date = "2025-06-30" },
new { name = "Iron Dev 3", email = "dev3@ironsoftware.com", membership_id = "M003", expiry_date = "2024-09-15" }
};
var client = new HttpClient();
client.DefaultRequestHeaders.Add("X-API-KEY", api_key);
for (int i = 0; i < membershipCards.Count; i++)
{
var json_content = JsonSerializer.Serialize(membershipCards[i]);
var buffer = System.Text.Encoding.UTF8.GetBytes(json_content);
var byteContent = new ByteArrayContent(buffer);
Console.WriteLine($"Creating PDF for {((dynamic)membershipCards[i]).name}...");
var response = await client.PostAsync(url, byteContent);
var ret = await response.Content.ReadAsStringAsync();
var returnContent = JsonSerializer.Deserialize<ReturnContent>(ret);
if (returnContent.status == "success")
{
Console.WriteLine($"Downloading {returnContent.download_url}...");
var download_response = await client.GetAsync(returnContent.download_url);
using (var stream = await download_response.Content.ReadAsStreamAsync())
{
var fileInfo = new FileInfo($"F:/membership_card_{i + 1}.pdf");
using (var fileStream = fileInfo.OpenWrite())
{
await stream.CopyToAsync(fileStream);
}
}
Console.WriteLine($"PDF file has been downloaded and saved as 'membership_card_{i + 1}.pdf'");
}
else
{
Console.WriteLine($"Failed to create PDF for {((dynamic)membershipCards[i]).name}. Status: {returnContent.status}");
}
}
}
}
}
'INSTANT VB NOTE: 'Option Strict Off' is used here since dynamic typing is used:
Option Strict Off
Imports System
Imports System.IO
Imports System.Net.Http
Imports System.Text.Json
Imports System.Threading.Tasks
Imports System.Collections.Generic
Namespace csharp
Friend Class ReturnContent
Public Property download_url() As String
Public Property status() As String
End Class
Friend Class Program
Shared Async Function Main(ByVal args() As String) As Task
Dim api_key = "a9e4MjA2NTg6MTc3Njk6Uk1ZSzVjTWs1T3d6VE9Mdw="
Dim template_id = "d4f77b23b4ab09fa"
Dim url = $"https://rest.apitemplate.io/v2/create-pdf?template_id={template_id}"
Dim membershipCards = New List(Of Object) From {
New With {
Key .name = "Iron Dev 1",
Key .email = "dev1@ironsoftware.com",
Key .membership_id = "M001",
Key .expiry_date = "2024-12-31"
},
New With {
Key .name = "Iron Dev 2",
Key .email = "dev2@ironsoftware.com",
Key .membership_id = "M002",
Key .expiry_date = "2025-06-30"
},
New With {
Key .name = "Iron Dev 3",
Key .email = "dev3@ironsoftware.com",
Key .membership_id = "M003",
Key .expiry_date = "2024-09-15"
}
}
Dim client = New HttpClient()
client.DefaultRequestHeaders.Add("X-API-KEY", api_key)
For i As Integer = 0 To membershipCards.Count - 1
Dim json_content = JsonSerializer.Serialize(membershipCards(i))
Dim buffer = System.Text.Encoding.UTF8.GetBytes(json_content)
Dim byteContent = New ByteArrayContent(buffer)
'INSTANT VB NOTE: In the following line, Instant VB substituted 'Object' for 'dynamic' - this will work in VB with Option Strict Off:
Console.WriteLine($"Creating PDF for {CType(membershipCards(i), Object).name}...")
Dim response = Await client.PostAsync(url, byteContent)
Dim ret = Await response.Content.ReadAsStringAsync()
Dim returnContent = JsonSerializer.Deserialize(Of ReturnContent)(ret)
If returnContent.status = "success" Then
Console.WriteLine($"Downloading {returnContent.download_url}...")
Dim download_response = Await client.GetAsync(returnContent.download_url)
Using stream = Await download_response.Content.ReadAsStreamAsync()
Dim fileInfo As New FileInfo($"F:/membership_card_{i + 1}.pdf")
Using fileStream = fileInfo.OpenWrite()
Await stream.CopyToAsync(fileStream)
End Using
End Using
Console.WriteLine($"PDF file has been downloaded and saved as 'membership_card_{i + 1}.pdf'")
Else
'INSTANT VB NOTE: In the following line, Instant VB substituted 'Object' for 'dynamic' - this will work in VB with Option Strict Off:
Console.WriteLine($"Failed to create PDF for {CType(membershipCards(i), Object).name}. Status: {returnContent.status}")
End If
Next i
End Function
End Class
End Namespace
Bu kod, tek bir API çağrısında birden fazla üyelik kartı oluşturur. Her kart, bireysel üye bilgileri ile özelleştirilmiştir. İşte bu kod tarafından oluşturulan bir kart:

Görüntü Oluşturma
PDF oluşturma APITemplate'in öncelikli odağı olsa da, görüntü oluşturma yetenekleri de aynı derecede etkileyicidir. Konsolda görüntü şablonları kullanarak sosyal medya görüntüleri oluşturabilirsiniz. Ayrıca duyarlı görsel akıllı kırpma özelliği de sunar. Afiş oluşturma API'si, görüntü API'si ile aynıdır. İşte bunu nasıl kullandığımın daha karmaşık bir örneği:
using System;
using System.IO;
using System.Net.Http;
using System.Text;
using System.Text.Json;
using System.Threading.Tasks;
namespace csharp
{
class ReturnContent
{
public string download_url { get; set; }
public string status { get; set; }
}
class Program
{
static async Task Main(string[] args)
{
var api_key = "a9e4MjA2NTg6MTc3Njk6Uk1ZSzVjTWs1T3d6VE9Mdw=";
var template_id = "f4377b23b4aeeed0";
var url = $"https://rest.apitemplate.io/v2/create-image?template_id={template_id}";
var json_content = @"{
""overrides"": [
{
""name"": ""rect_image_bg"",
""stroke"": ""grey"",
""src"": ""https://images.unsplash.com/photo-1542401886-65d6c61db217?crop=entropy&cs=tinysrgb&fit=max&fm=jpg&ixid=MnwxOTc1MDZ8MHwxfHNlYXJjaHwzfHxkZXNlcnR8ZW58MHwwfHx8MTYyMTUxOTI2OA&ixlib=rb-1.2.1&q=80&w=1080""
},
{
""name"": ""rect_container"",
""stroke"": ""grey"",
""backgroundColor"": ""rgba(255, 255, 255, 0.62)""
},
{
""name"": ""text_quote"",
""text"": ""Just witnessed the most breathtaking sunset over the Sahara. The way the light dances on the dunes, painting the sky in shades of orange and purple, is truly magical. Nature's artistry at its finest! #DesertAdventures #SaharaSkies"",
""textBackgroundColor"": ""rgba(246, 243, 243, 0)"",
""color"": ""#414141""
},
{
""name"": ""text_footer"",
""text"": ""2024-07-30 - Twitter - iPhone 16 Pro"",
""textBackgroundColor"": ""rgba(246, 243, 243, 0)"",
""color"": ""#666666""
},
{
""name"": ""circle_profile"",
""stroke"": ""grey"",
""src"": ""https://images.unsplash.com/photo-1520998116484-6eeb2f72b5b9?crop=entropy&cs=tinysrgb&fit=max&fm=jpg&ixid=MnwxOTc1MDZ8MHwxfHNlYXJjaHw2Mnx8aGFwcHl8ZW58MHwwfHx8MTYyMTY5MjkwNw&ixlib=rb-1.2.1&q=80&w=1080""
},
{
""name"": ""text_name"",
""text"": ""Sarah Wanderlust"",
""textBackgroundColor"": ""rgba(246, 243, 243, 0)"",
""color"": ""#4E4E4E""
},
{
""name"": ""text_twitter"",
""text"": ""@sarahexplores"",
""textBackgroundColor"": ""rgba(246, 243, 243, 0)"",
""color"": ""#4E4E4E""
}
]
}";
var buffer = System.Text.Encoding.UTF8.GetBytes(json_content);
var byteContent = new ByteArrayContent(buffer);
Console.WriteLine(json_content);
var client = new HttpClient();
client.DefaultRequestHeaders.Add("X-API-KEY", api_key);
var response = await client.PostAsync(url, byteContent);
var ret = await response.Content.ReadAsStringAsync();
var returnContent = JsonSerializer.Deserialize<ReturnContent>(ret);
if (returnContent.status == "success")
{
Console.WriteLine($"Downloading {returnContent.download_url}...");
var download_response = await client.GetAsync(returnContent.download_url);
using (var stream = await download_response.Content.ReadAsStreamAsync())
{
var fileInfo = new FileInfo("image.jpeg");
using (var fileStream = fileInfo.OpenWrite())
{
await stream.CopyToAsync(fileStream);
}
}
}
}
}
}
using System;
using System.IO;
using System.Net.Http;
using System.Text;
using System.Text.Json;
using System.Threading.Tasks;
namespace csharp
{
class ReturnContent
{
public string download_url { get; set; }
public string status { get; set; }
}
class Program
{
static async Task Main(string[] args)
{
var api_key = "a9e4MjA2NTg6MTc3Njk6Uk1ZSzVjTWs1T3d6VE9Mdw=";
var template_id = "f4377b23b4aeeed0";
var url = $"https://rest.apitemplate.io/v2/create-image?template_id={template_id}";
var json_content = @"{
""overrides"": [
{
""name"": ""rect_image_bg"",
""stroke"": ""grey"",
""src"": ""https://images.unsplash.com/photo-1542401886-65d6c61db217?crop=entropy&cs=tinysrgb&fit=max&fm=jpg&ixid=MnwxOTc1MDZ8MHwxfHNlYXJjaHwzfHxkZXNlcnR8ZW58MHwwfHx8MTYyMTUxOTI2OA&ixlib=rb-1.2.1&q=80&w=1080""
},
{
""name"": ""rect_container"",
""stroke"": ""grey"",
""backgroundColor"": ""rgba(255, 255, 255, 0.62)""
},
{
""name"": ""text_quote"",
""text"": ""Just witnessed the most breathtaking sunset over the Sahara. The way the light dances on the dunes, painting the sky in shades of orange and purple, is truly magical. Nature's artistry at its finest! #DesertAdventures #SaharaSkies"",
""textBackgroundColor"": ""rgba(246, 243, 243, 0)"",
""color"": ""#414141""
},
{
""name"": ""text_footer"",
""text"": ""2024-07-30 - Twitter - iPhone 16 Pro"",
""textBackgroundColor"": ""rgba(246, 243, 243, 0)"",
""color"": ""#666666""
},
{
""name"": ""circle_profile"",
""stroke"": ""grey"",
""src"": ""https://images.unsplash.com/photo-1520998116484-6eeb2f72b5b9?crop=entropy&cs=tinysrgb&fit=max&fm=jpg&ixid=MnwxOTc1MDZ8MHwxfHNlYXJjaHw2Mnx8aGFwcHl8ZW58MHwwfHx8MTYyMTY5MjkwNw&ixlib=rb-1.2.1&q=80&w=1080""
},
{
""name"": ""text_name"",
""text"": ""Sarah Wanderlust"",
""textBackgroundColor"": ""rgba(246, 243, 243, 0)"",
""color"": ""#4E4E4E""
},
{
""name"": ""text_twitter"",
""text"": ""@sarahexplores"",
""textBackgroundColor"": ""rgba(246, 243, 243, 0)"",
""color"": ""#4E4E4E""
}
]
}";
var buffer = System.Text.Encoding.UTF8.GetBytes(json_content);
var byteContent = new ByteArrayContent(buffer);
Console.WriteLine(json_content);
var client = new HttpClient();
client.DefaultRequestHeaders.Add("X-API-KEY", api_key);
var response = await client.PostAsync(url, byteContent);
var ret = await response.Content.ReadAsStringAsync();
var returnContent = JsonSerializer.Deserialize<ReturnContent>(ret);
if (returnContent.status == "success")
{
Console.WriteLine($"Downloading {returnContent.download_url}...");
var download_response = await client.GetAsync(returnContent.download_url);
using (var stream = await download_response.Content.ReadAsStreamAsync())
{
var fileInfo = new FileInfo("image.jpeg");
using (var fileStream = fileInfo.OpenWrite())
{
await stream.CopyToAsync(fileStream);
}
}
}
}
}
}
Imports System
Imports System.IO
Imports System.Net.Http
Imports System.Text
Imports System.Text.Json
Imports System.Threading.Tasks
Namespace csharp
Friend Class ReturnContent
Public Property download_url() As String
Public Property status() As String
End Class
Friend Class Program
Shared Async Function Main(ByVal args() As String) As Task
Dim api_key = "a9e4MjA2NTg6MTc3Njk6Uk1ZSzVjTWs1T3d6VE9Mdw="
Dim template_id = "f4377b23b4aeeed0"
Dim url = $"https://rest.apitemplate.io/v2/create-image?template_id={template_id}"
Dim json_content = "{
""overrides"": [
{
""name"": ""rect_image_bg"",
""stroke"": ""grey"",
""src"": ""https://images.unsplash.com/photo-1542401886-65d6c61db217?crop=entropy&cs=tinysrgb&fit=max&fm=jpg&ixid=MnwxOTc1MDZ8MHwxfHNlYXJjaHwzfHxkZXNlcnR8ZW58MHwwfHx8MTYyMTUxOTI2OA&ixlib=rb-1.2.1&q=80&w=1080""
},
{
""name"": ""rect_container"",
""stroke"": ""grey"",
""backgroundColor"": ""rgba(255, 255, 255, 0.62)""
},
{
""name"": ""text_quote"",
""text"": ""Just witnessed the most breathtaking sunset over the Sahara. The way the light dances on the dunes, painting the sky in shades of orange and purple, is truly magical. Nature's artistry at its finest! #DesertAdventures #SaharaSkies"",
""textBackgroundColor"": ""rgba(246, 243, 243, 0)"",
""color"": ""#414141""
},
{
""name"": ""text_footer"",
""text"": ""2024-07-30 - Twitter - iPhone 16 Pro"",
""textBackgroundColor"": ""rgba(246, 243, 243, 0)"",
""color"": ""#666666""
},
{
""name"": ""circle_profile"",
""stroke"": ""grey"",
""src"": ""https://images.unsplash.com/photo-1520998116484-6eeb2f72b5b9?crop=entropy&cs=tinysrgb&fit=max&fm=jpg&ixid=MnwxOTc1MDZ8MHwxfHNlYXJjaHw2Mnx8aGFwcHl8ZW58MHwwfHx8MTYyMTY5MjkwNw&ixlib=rb-1.2.1&q=80&w=1080""
},
{
""name"": ""text_name"",
""text"": ""Sarah Wanderlust"",
""textBackgroundColor"": ""rgba(246, 243, 243, 0)"",
""color"": ""#4E4E4E""
},
{
""name"": ""text_twitter"",
""text"": ""@sarahexplores"",
""textBackgroundColor"": ""rgba(246, 243, 243, 0)"",
""color"": ""#4E4E4E""
}
]
}"
Dim buffer = System.Text.Encoding.UTF8.GetBytes(json_content)
Dim byteContent = New ByteArrayContent(buffer)
Console.WriteLine(json_content)
Dim client = New HttpClient()
client.DefaultRequestHeaders.Add("X-API-KEY", api_key)
Dim response = Await client.PostAsync(url, byteContent)
Dim ret = Await response.Content.ReadAsStringAsync()
Dim returnContent = JsonSerializer.Deserialize(Of ReturnContent)(ret)
If returnContent.status = "success" Then
Console.WriteLine($"Downloading {returnContent.download_url}...")
Dim download_response = Await client.GetAsync(returnContent.download_url)
Using stream = Await download_response.Content.ReadAsStreamAsync()
Dim fileInfo As New FileInfo("image.jpeg")
Using fileStream = fileInfo.OpenWrite()
Await stream.CopyToAsync(fileStream)
End Using
End Using
End If
End Function
End Class
End Namespace

Bu örnek, dinamik içerik, özel arka plan rengi ve gömülü ürün resmi ile bir ürün tanıtım görüntüsü oluşturur.
QR Kod Oluşturma
APITemplate'in dahili QR kod oluşturma özelliği, birçok projemde büyük katkı sağlamıştır. QR kodları için içerik yerine veri URL'leri koyabilirsiniz. İşte bunu nasıl kullandığımın daha karmaşık bir örneği:
using System;
using System.IO;
using System.Net.Http;
using System.Text;
using System.Text.Json;
using System.Threading.Tasks;
namespace csharp
{
class ReturnContent
{
public string download_url { get; set; }
public string status { get; set; }
}
class Program
{
static async Task Main(string[] args)
{
var api_key = "API-Key";
var template_id = "Template-Key";
var url = $"https://rest.apitemplate.io/v2/create-image?template_id={template_id}";
var json_content = @"{
""overrides"": [
{
""name"": ""background-color"",
""stroke"": ""grey"",
""backgroundColor"": ""#FFFFFF""
},
{
""name"": ""qr_1"",
""content"": ""http://ironpdf.com/"",
""backgroundColor"": ""white"",
""color"": ""#000000""
}
]
}";
var buffer = System.Text.Encoding.UTF8.GetBytes(json_content);
var byteContent = new ByteArrayContent(buffer);
//Console.WriteLine(json_content);
var client = new HttpClient();
client.DefaultRequestHeaders.Add("X-API-KEY", api_key);
var response = await client.PostAsync(url, byteContent);
var ret = await response.Content.ReadAsStringAsync();
var returnContent = JsonSerializer.Deserialize<ReturnContent>(ret);
Console.WriteLine(returnContent.status);
if (returnContent.status == "success")
{
Console.WriteLine($"Downloading {returnContent.download_url}...");
var download_response = await client.GetAsync(returnContent.download_url);
using (var stream = await download_response.Content.ReadAsStreamAsync())
{
var fileInfo = new FileInfo(@"F:/QRimage.jpeg");
using (var fileStream = fileInfo.OpenWrite())
{
await stream.CopyToAsync(fileStream);
}
}
}
}
}
}
using System;
using System.IO;
using System.Net.Http;
using System.Text;
using System.Text.Json;
using System.Threading.Tasks;
namespace csharp
{
class ReturnContent
{
public string download_url { get; set; }
public string status { get; set; }
}
class Program
{
static async Task Main(string[] args)
{
var api_key = "API-Key";
var template_id = "Template-Key";
var url = $"https://rest.apitemplate.io/v2/create-image?template_id={template_id}";
var json_content = @"{
""overrides"": [
{
""name"": ""background-color"",
""stroke"": ""grey"",
""backgroundColor"": ""#FFFFFF""
},
{
""name"": ""qr_1"",
""content"": ""http://ironpdf.com/"",
""backgroundColor"": ""white"",
""color"": ""#000000""
}
]
}";
var buffer = System.Text.Encoding.UTF8.GetBytes(json_content);
var byteContent = new ByteArrayContent(buffer);
//Console.WriteLine(json_content);
var client = new HttpClient();
client.DefaultRequestHeaders.Add("X-API-KEY", api_key);
var response = await client.PostAsync(url, byteContent);
var ret = await response.Content.ReadAsStringAsync();
var returnContent = JsonSerializer.Deserialize<ReturnContent>(ret);
Console.WriteLine(returnContent.status);
if (returnContent.status == "success")
{
Console.WriteLine($"Downloading {returnContent.download_url}...");
var download_response = await client.GetAsync(returnContent.download_url);
using (var stream = await download_response.Content.ReadAsStreamAsync())
{
var fileInfo = new FileInfo(@"F:/QRimage.jpeg");
using (var fileStream = fileInfo.OpenWrite())
{
await stream.CopyToAsync(fileStream);
}
}
}
}
}
}
Imports System
Imports System.IO
Imports System.Net.Http
Imports System.Text
Imports System.Text.Json
Imports System.Threading.Tasks
Namespace csharp
Friend Class ReturnContent
Public Property download_url() As String
Public Property status() As String
End Class
Friend Class Program
Shared Async Function Main(ByVal args() As String) As Task
Dim api_key = "API-Key"
Dim template_id = "Template-Key"
Dim url = $"https://rest.apitemplate.io/v2/create-image?template_id={template_id}"
Dim json_content = "{
""overrides"": [
{
""name"": ""background-color"",
""stroke"": ""grey"",
""backgroundColor"": ""#FFFFFF""
},
{
""name"": ""qr_1"",
""content"": ""http://ironpdf.com/"",
""backgroundColor"": ""white"",
""color"": ""#000000""
}
]
}"
Dim buffer = System.Text.Encoding.UTF8.GetBytes(json_content)
Dim byteContent = New ByteArrayContent(buffer)
'Console.WriteLine(json_content);
Dim client = New HttpClient()
client.DefaultRequestHeaders.Add("X-API-KEY", api_key)
Dim response = Await client.PostAsync(url, byteContent)
Dim ret = Await response.Content.ReadAsStringAsync()
Dim returnContent = JsonSerializer.Deserialize(Of ReturnContent)(ret)
Console.WriteLine(returnContent.status)
If returnContent.status = "success" Then
Console.WriteLine($"Downloading {returnContent.download_url}...")
Dim download_response = Await client.GetAsync(returnContent.download_url)
Using stream = Await download_response.Content.ReadAsStreamAsync()
Dim fileInfo As New FileInfo("F:/QRimage.jpeg")
Using fileStream = fileInfo.OpenWrite()
Await stream.CopyToAsync(fileStream)
End Using
End Using
End If
End Function
End Class
End Namespace

Dokümantasyon ve Destek
PDF oluşturma ve düzenleme ile sık sık çalışan bir C# geliştiricisi olarak, belgelendirme ve desteğin kalitesinin bir proje içinde belirleyici olabileceğini fark ettim. Her iki ürün için de belgeler ve destek konusunda edindiğim deneyimleri birlikte keşfedelim.
IronPDF
Dokümantasyon
IronPDF'in belgeleri kapsamlı ve iyi yapılandırılmıştır, bu da projelerimde önemli bir yardım olmuştur. Deneyimimin ayrıntılı bir dökümü: IronPDF belgeleri https://ironpdf.com/docs/ adresinde mevcuttur ve oldukça kapsamlıdır. İşte takdir ettiğim bazı önemli noktalar:
-
Başlangıç Kılavuzu: Belgeler, IronPDF'i NuGet üzerinden nasıl kuracağınızı ve ilk PDF'nizi nasıl oluşturacağınızı açıklayan açık bir adım adım kılavuzla başlar. İlk projelerimde hızla başlamama yardımcı oldu.
-
API Referansı: API referansı tüm sınıf ve yöntemleri kapsayan ayrıntılıdır. Her giriş, belirli özellikleri uygularken çok değerli bulduğum C# örneklerini içerir.
-
Kod Örnekleri: Belgeler boyunca, birçok kod parçacığı ve tam örnek bulunur. Bunlar, daha karmaşık PDF işlemleri uygulamam gerektiğinde özellikle yardımcı oldu.
-
Öğreticiler ve Nasıl Yapılır Kılavuzları: IronPDF, HTML'den PDF oluşturma, filigran ekleme veya formlarla çalışma gibi genel görevler için ayrıntılı öğreticiler sunar. Bunlar daha gelişmiş kullanım durumlarında beni yönlendirdi.
- Sorun Giderme Bölümü: Belgeler, yaygın sorunları ele alan bir sorun giderme bölümü içerir. Karşılaştığım hatalar veya beklenmedik davranışlar olduğunda zamanımı tasarruf etmiştir.
Destek
IronPDF'in iletişim desteği hızlı ve destek kanalları benim deneyimlerimde son derece yardımcı oldu:
-
E-posta Desteği: Karmaşık sorunlar yaşadığımda, e-posta desteğini kullandım. Yanıt süreleri genellikle 24 saat içinde olur ve destek ekibi ürün hakkında bilgilidir.
-
Topluluk Forumu: IronPDF, geliştiricilerin sorular sorup çözümleri paylaşabilecekleri bir topluluk forumu işletir. Sorularıma yanıtlar buldum ve deneyimlerime dayalı çözümler sundum.
-
Stack Overflow: IronPDF ekibi, Stack Overflow'daki [ironpdf] etiketi etiketini aktif olarak izler. Orada yazdığım sorulara faydalı yanıtlar aldım.
-
Düzenli Güncellemeler: IronPDF sık sık hata düzeltmeleri ve yeni özellikler içeren güncellemeler yayınlar. Değişiklik kaydı ayrıntılıdır ve her sürümde neyin yeni veya değiştiğini anlamama yardımcı olur.
- Geçiş Rehberleri: Büyük sürümler arasında kesici değişiklikler olduğunda, IronPDF geçiş rehberleri sağlar. Bunlar, projelerimi kütüphanenin daha yeni sürümlerine güncellememde kritik olmuştur.
APITemplate
APITemplate'in belgeleri ve destek yapısı, bulut tabanlı bir hizmet olma doğasını yansıtarak IronPDF'ten farklıdır. İşte benim deneyimim:
Dokümantasyon
APITemplate belgeleri https://docs.apitemplate.io/reference/api-reference.html adresinde bulunabilir ve API kullanımı odaklıdır. İşte ana noktalar:
-
API Referansı: Belgeler, mevcut tüm uç noktaların, gerekli parametrelerin ve yanıt formatlarının detaylandırıldığı açık bir API referansı sunar. Bu, APITemplate'i C# uygulamalarıma entegre ederken başvuru kaynağım olmuştur.
- Kimlik Doğrulama: API anahtarlarının nasıl kullanılacağını net bir şekilde açıklayan kimlik doğrulama hakkında ayrılmış bir bölüm vardır. Servisi ilk kullanmaya başladığımda bu çok önemliydi.
Destek
APITemplate'in destek yapısı daha çok e-posta desteğine odaklanır:
-
E-posta Desteği: Sorunlarım veya sorularım olduğunda e-posta desteğini kullandım. Yanıt süreleri genellikle 1-2 iş günü içindedir.
- SSS Bölümü: Belgeler, genel soruları ele alan bir SSS bölümü içerir. Karşılaştığım sorunlarda genellikle ilk durağım olmuştur.
IronPDF ile Bootstrap 5'i Analitik Kontrol Panellerinde Kullanma
IronPDF'in Chrome V8 işleme motoru, modern Bootstrap 5 düzenlerini mükemmel işlemek konusunda uzmandır, bu da iş verileri ve görselleştirmeleri içeren PDF raporları oluşturmak için idealdir. APITemplate'in API tabanlı yaklaşımının aksine, IronPDF tam CSS3 desteği ile HTML'yi doğrudan işler ve flexbox, CSS Grid ve özel özellikler içerir.
using IronPdf;
var renderer = new ChromePdfRenderer();
string analyticsDashboard = @"
<!DOCTYPE html>
<html>
<head>
<meta charset='utf-8'>
<meta name='viewport' content='width=device-width, initial-scale=1'>
<link href='https://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/css/bootstrap.min.css' rel='stylesheet'>
<style>
.metric-card {
transition: transform 0.2s;
border-left: 4px solid #0d6efd;
}
.metric-card:hover { transform: translateY(-5px); }
.trend-up { color: #198754; }
.trend-down { color: #dc3545; }
@media print {
.metric-card { page-break-inside: avoid; }
}
</style>
</head>
<body class='bg-light'>
<div class='container py-5'>
<div class='row mb-4'>
<div class='col-12'>
<div class='card shadow-sm'>
<div class='card-body'>
<h1 class='display-6 mb-0'>Performance Dashboard</h1>
<p class='text-muted mb-0'>Q4 2024 Analytics Overview</p>
</div>
</div>
</div>
</div>
<div class='row g-4 mb-4'>
<div class='col-md-3'>
<div class='card metric-card shadow-sm h-100'>
<div class='card-body'>
<h6 class='text-muted text-uppercase mb-2'>Total Revenue</h6>
<h2 class='display-6 mb-3'>$2.4M</h2>
<div class='progress' style='height: 6px;'>
<div class='progress-bar bg-success' style='width: 85%'></div>
</div>
<small class='trend-up'>↑ 18% from last quarter</small>
</div>
</div>
</div>
<div class='col-md-3'>
<div class='card metric-card shadow-sm h-100'>
<div class='card-body'>
<h6 class='text-muted text-uppercase mb-2'>Active Users</h6>
<h2 class='display-6 mb-3'>48,592</h2>
<div class='progress' style='height: 6px;'>
<div class='progress-bar bg-primary' style='width: 72%'></div>
</div>
<small class='trend-up'>↑ 12% growth rate</small>
</div>
</div>
</div>
<div class='col-md-3'>
<div class='card metric-card shadow-sm h-100'>
<div class='card-body'>
<h6 class='text-muted text-uppercase mb-2'>Conversion Rate</h6>
<h2 class='display-6 mb-3'>3.8%</h2>
<div class='progress' style='height: 6px;'>
<div class='progress-bar bg-warning' style='width: 38%'></div>
</div>
<small class='trend-down'>↓ 2% needs attention</small>
</div>
</div>
</div>
<div class='col-md-3'>
<div class='card metric-card shadow-sm h-100'>
<div class='card-body'>
<h6 class='text-muted text-uppercase mb-2'>Satisfaction</h6>
<h2 class='display-6 mb-3'>4.7/5</h2>
<div class='progress' style='height: 6px;'>
<div class='progress-bar bg-success' style='width: 94%'></div>
</div>
<small class='trend-up'>↑ Excellent rating</small>
</div>
</div>
</div>
</div>
<div class='card shadow-sm'>
<div class='card-body'>
<h5 class='card-title mb-3'>Top Performing Products</h5>
<div class='table-responsive'>
<table class='table table-hover'>
<thead class='table-light'>
<tr>
<th>Product</th>
<th>Revenue</th>
<th>Units</th>
<th>Trend</th>
</tr>
</thead>
<tbody>
<tr>
<td><strong>Enterprise Suite</strong></td>
<td>$1,240,000</td>
<td>2,150</td>
<td><span class='badge bg-success'>+22%</span></td>
</tr>
<tr>
<td><strong>Professional Plan</strong></td>
<td>$820,000</td>
<td>4,890</td>
<td><span class='badge bg-success'>+15%</span></td>
</tr>
<tr>
<td><strong>Starter Package</strong></td>
<td>$340,000</td>
<td>8,240</td>
<td><span class='badge bg-warning'>+5%</span></td>
</tr>
</tbody>
</table>
</div>
</div>
</div>
</div>
</body>
</html>";
var pdf = renderer.RenderHtmlAsPdf(analyticsDashboard);
pdf.SaveAs("analytics-dashboard.pdf");
using IronPdf;
var renderer = new ChromePdfRenderer();
string analyticsDashboard = @"
<!DOCTYPE html>
<html>
<head>
<meta charset='utf-8'>
<meta name='viewport' content='width=device-width, initial-scale=1'>
<link href='https://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/css/bootstrap.min.css' rel='stylesheet'>
<style>
.metric-card {
transition: transform 0.2s;
border-left: 4px solid #0d6efd;
}
.metric-card:hover { transform: translateY(-5px); }
.trend-up { color: #198754; }
.trend-down { color: #dc3545; }
@media print {
.metric-card { page-break-inside: avoid; }
}
</style>
</head>
<body class='bg-light'>
<div class='container py-5'>
<div class='row mb-4'>
<div class='col-12'>
<div class='card shadow-sm'>
<div class='card-body'>
<h1 class='display-6 mb-0'>Performance Dashboard</h1>
<p class='text-muted mb-0'>Q4 2024 Analytics Overview</p>
</div>
</div>
</div>
</div>
<div class='row g-4 mb-4'>
<div class='col-md-3'>
<div class='card metric-card shadow-sm h-100'>
<div class='card-body'>
<h6 class='text-muted text-uppercase mb-2'>Total Revenue</h6>
<h2 class='display-6 mb-3'>$2.4M</h2>
<div class='progress' style='height: 6px;'>
<div class='progress-bar bg-success' style='width: 85%'></div>
</div>
<small class='trend-up'>↑ 18% from last quarter</small>
</div>
</div>
</div>
<div class='col-md-3'>
<div class='card metric-card shadow-sm h-100'>
<div class='card-body'>
<h6 class='text-muted text-uppercase mb-2'>Active Users</h6>
<h2 class='display-6 mb-3'>48,592</h2>
<div class='progress' style='height: 6px;'>
<div class='progress-bar bg-primary' style='width: 72%'></div>
</div>
<small class='trend-up'>↑ 12% growth rate</small>
</div>
</div>
</div>
<div class='col-md-3'>
<div class='card metric-card shadow-sm h-100'>
<div class='card-body'>
<h6 class='text-muted text-uppercase mb-2'>Conversion Rate</h6>
<h2 class='display-6 mb-3'>3.8%</h2>
<div class='progress' style='height: 6px;'>
<div class='progress-bar bg-warning' style='width: 38%'></div>
</div>
<small class='trend-down'>↓ 2% needs attention</small>
</div>
</div>
</div>
<div class='col-md-3'>
<div class='card metric-card shadow-sm h-100'>
<div class='card-body'>
<h6 class='text-muted text-uppercase mb-2'>Satisfaction</h6>
<h2 class='display-6 mb-3'>4.7/5</h2>
<div class='progress' style='height: 6px;'>
<div class='progress-bar bg-success' style='width: 94%'></div>
</div>
<small class='trend-up'>↑ Excellent rating</small>
</div>
</div>
</div>
</div>
<div class='card shadow-sm'>
<div class='card-body'>
<h5 class='card-title mb-3'>Top Performing Products</h5>
<div class='table-responsive'>
<table class='table table-hover'>
<thead class='table-light'>
<tr>
<th>Product</th>
<th>Revenue</th>
<th>Units</th>
<th>Trend</th>
</tr>
</thead>
<tbody>
<tr>
<td><strong>Enterprise Suite</strong></td>
<td>$1,240,000</td>
<td>2,150</td>
<td><span class='badge bg-success'>+22%</span></td>
</tr>
<tr>
<td><strong>Professional Plan</strong></td>
<td>$820,000</td>
<td>4,890</td>
<td><span class='badge bg-success'>+15%</span></td>
</tr>
<tr>
<td><strong>Starter Package</strong></td>
<td>$340,000</td>
<td>8,240</td>
<td><span class='badge bg-warning'>+5%</span></td>
</tr>
</tbody>
</table>
</div>
</div>
</div>
</div>
</body>
</html>";
var pdf = renderer.RenderHtmlAsPdf(analyticsDashboard);
pdf.SaveAs("analytics-dashboard.pdf");
Imports IronPdf
Dim renderer As New ChromePdfRenderer()
Dim analyticsDashboard As String = "
<!DOCTYPE html>
<html>
<head>
<meta charset='utf-8'>
<meta name='viewport' content='width=device-width, initial-scale=1'>
<link href='https://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/css/bootstrap.min.css' rel='stylesheet'>
<style>
.metric-card {
transition: transform 0.2s;
border-left: 4px solid #0d6efd;
}
.metric-card:hover { transform: translateY(-5px); }
.trend-up { color: #198754; }
.trend-down { color: #dc3545; }
@media print {
.metric-card { page-break-inside: avoid; }
}
</style>
</head>
<body class='bg-light'>
<div class='container py-5'>
<div class='row mb-4'>
<div class='col-12'>
<div class='card shadow-sm'>
<div class='card-body'>
<h1 class='display-6 mb-0'>Performance Dashboard</h1>
<p class='text-muted mb-0'>Q4 2024 Analytics Overview</p>
</div>
</div>
</div>
</div>
<div class='row g-4 mb-4'>
<div class='col-md-3'>
<div class='card metric-card shadow-sm h-100'>
<div class='card-body'>
<h6 class='text-muted text-uppercase mb-2'>Total Revenue</h6>
<h2 class='display-6 mb-3'>$2.4M</h2>
<div class='progress' style='height: 6px;'>
<div class='progress-bar bg-success' style='width: 85%'></div>
</div>
<small class='trend-up'>↑ 18% from last quarter</small>
</div>
</div>
</div>
<div class='col-md-3'>
<div class='card metric-card shadow-sm h-100'>
<div class='card-body'>
<h6 class='text-muted text-uppercase mb-2'>Active Users</h6>
<h2 class='display-6 mb-3'>48,592</h2>
<div class='progress' style='height: 6px;'>
<div class='progress-bar bg-primary' style='width: 72%'></div>
</div>
<small class='trend-up'>↑ 12% growth rate</small>
</div>
</div>
</div>
<div class='col-md-3'>
<div class='card metric-card shadow-sm h-100'>
<div class='card-body'>
<h6 class='text-muted text-uppercase mb-2'>Conversion Rate</h6>
<h2 class='display-6 mb-3'>3.8%</h2>
<div class='progress' style='height: 6px;'>
<div class='progress-bar bg-warning' style='width: 38%'></div>
</div>
<small class='trend-down'>↓ 2% needs attention</small>
</div>
</div>
</div>
<div class='col-md-3'>
<div class='card metric-card shadow-sm h-100'>
<div class='card-body'>
<h6 class='text-muted text-uppercase mb-2'>Satisfaction</h6>
<h2 class='display-6 mb-3'>4.7/5</h2>
<div class='progress' style='height: 6px;'>
<div class='progress-bar bg-success' style='width: 94%'></div>
</div>
<small class='trend-up'>↑ Excellent rating</small>
</div>
</div>
</div>
</div>
<div class='card shadow-sm'>
<div class='card-body'>
<h5 class='card-title mb-3'>Top Performing Products</h5>
<div class='table-responsive'>
<table class='table table-hover'>
<thead class='table-light'>
<tr>
<th>Product</th>
<th>Revenue</th>
<th>Units</th>
<th>Trend</th>
</tr>
</thead>
<tbody>
<tr>
<td><strong>Enterprise Suite</strong></td>
<td>$1,240,000</td>
<td>2,150</td>
<td><span class='badge bg-success'>+22%</span></td>
</tr>
<tr>
<td><strong>Professional Plan</strong></td>
<td>$820,000</td>
<td>4,890</td>
<td><span class='badge bg-success'>+15%</span></td>
</tr>
<tr>
<td><strong>Starter Package</strong></td>
<td>$340,000</td>
<td>8,240</td>
<td><span class='badge bg-warning'>+5%</span></td>
</tr>
</tbody>
</table>
</div>
</div>
</div>
</div>
</body>
</html>"
Dim pdf = renderer.RenderHtmlAsPdf(analyticsDashboard)
pdf.SaveAs("analytics-dashboard.pdf")
Bu kod, metrik kartlar, ilerleme çubukları ve duyarlı tablolar içeren profesyonel bir analitik kontrol paneli PDF'si oluşturur. IronPDF'in Chrome motoru, Bootstrap'ın flexbox düzenlerini, gölgeleri ve hover efektlerini kusursuz bir şekilde işler - APITemplate gibi API tabanlı hizmetlerle önemli ölçüde özelleştirilmiş çalışma gerektiren özellikler.
APITemplate karşısındaki Ana Avantajlar:
- Tam Bootstrap desteğiyle doğrudan HTML işleme
- API çağrılar veya şablon yapılandırmasına gerek yok
- Animasyonlar dahil tam CSS3 uyumluluğu
- Dış bağımlılıklar olmadan çevrimdışı işlem
Bootstrap PDF oluşturma hakkında daha fazla bilgi için, HTML to PDF Bootstrap Rehberi adresine bakın.
Lisanslama
IronPDF Fiyatlandırma ve Lisanslama

IronPDF, farklı ihtiyaçlara uyacak çeşitli fiyatlandırma kademeleri sunar:
- Lite: $799 ile fiyatlandırılan bu kademe, tek bir projede çalışan tek bir geliştirici için uygundur. Bu, küçük projeler veya bireysel geliştiriciler için uygun bir seçenek sunarak tek seferlik bir ücrettir.
- Professional: $1,199 ile, bu seçenek 10 geliştiriciye, 10 lokasyona ve 10 projeye kadar destek sağlar. Bu kademe, küçük ve orta ölçekli ekipler için daha fazla esneklik sağlayarak yine tek seferlik bir ücret içerir.
- Unlimited: $2,399 ile, bu kademe sınırsız geliştirici, mekân ve projeye izin verir. Bu, büyük ekipler ve kısıtlama olmadan geniş kullanım gerektiren işletmeler için idealdir.
IronPDF ayrıca daha büyük organizasyonlar ve ticari ürünlere PDF işlevselliğini entegre etmek zorunda olanlar için kurumsal ve OEM yeniden dağıtım lisansları sunar. Test etmek için bir ücretsiz deneme de sunar.
APITemplate Fiyatlandırma ve Lisanslama
APITemplate, API tabanlı PDF oluşturma hizmeti ile farklı bir yaklaşım sunar. Fiyatlandırma genellikle API çağrı sayısına göre yapıldığından, değişen kullanım desenleri için daha esnektir:
- Temel Plan: Genellikle ayda belirli sayıda API çağrısı ile daha düşük bir fiyat noktasında başlar. Bu, küçük projeler veya minimal PDF oluşturma ihtiyaçları olan işletmeler için uygundur.
- Standart Plan: Bu plan, daha fazla API çağrısı ve ek özellikler içerecek şekilde tasarlanmış olup, orta ölçekli işletmelere hitap eder.
- Kurumsal Plan: Yüksek hacimli kullanıcılar için tasarlanmış olup, en fazla API çağrısını ve öncelikli destek ve özel entegrasyonlar gibi premium özellikleri sağlar.
APITemplate'in lisanslaması basittir ve genellikle aylık veya yıllık abonelik modeline bağlıdır.
Ana Farklılıklar
- Fiyatlandırma Modeli: IronPDF, uzun vadede ekonomik olabilecek tek seferlik bir ücret modeli kullanırken, özellikle sürekli, yoğun kullanım için uygundur. APITemplate ise, kullanım tabanlı esnek ve ölçeklenebilir bir abonelik modeli kullanır.
- Destek ve Güncellemeler: IronPDF, satın alma ile bir yıllık destek ve güncellemeler içerir ve bu süreyi uzatmak için seçenekler sunar. APITemplate'in abonelik planları genellikle paket kapsamında devam eden destek ve güncellemeleri içerir.
Neden IronPDF'i Seçmelisiniz?
Hem IronPDF hem de APITemplate, HTML içerikten PDF oluşturma yeteneği sunar, ancak IronPDF'in uygulaması daha sağlam ve esnektir. Iste bir karsilastirma:
IronPDF
using IronPdf;
var renderer = new ChromePdfRenderer();
var html = @"
<html>
<head>
<style>
body { font-family: Arial, sans-serif; }
.header { color: #0066cc; font-size: 24px; }
.content { margin-top: 20px; }
</style>
</head>
<body>
<div class='header'>Dynamic Report</div>
<div class='content'>
<p>This report was generated on: <script>document.write(new Date().toLocaleString());</script></p>
<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit.</p>
</div>
</body>
</html>";
var pdf = renderer.RenderHtmlAsPdf(html);
pdf.SaveAs("IronPDF_report.pdf");
using IronPdf;
var renderer = new ChromePdfRenderer();
var html = @"
<html>
<head>
<style>
body { font-family: Arial, sans-serif; }
.header { color: #0066cc; font-size: 24px; }
.content { margin-top: 20px; }
</style>
</head>
<body>
<div class='header'>Dynamic Report</div>
<div class='content'>
<p>This report was generated on: <script>document.write(new Date().toLocaleString());</script></p>
<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit.</p>
</div>
</body>
</html>";
var pdf = renderer.RenderHtmlAsPdf(html);
pdf.SaveAs("IronPDF_report.pdf");
Imports IronPdf
Private renderer = New ChromePdfRenderer()
Private html = "
<html>
<head>
<style>
body { font-family: Arial, sans-serif; }
.header { color: #0066cc; font-size: 24px; }
.content { margin-top: 20px; }
</style>
</head>
<body>
<div class='header'>Dynamic Report</div>
<div class='content'>
<p>This report was generated on: <script>document.write(new Date().toLocaleString());</script></p>
<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit.</p>
</div>
</body>
</html>"
Private pdf = renderer.RenderHtmlAsPdf(html)
pdf.SaveAs("IronPDF_report.pdf")
APITemplate
using System.Net.Http;
using System.Text.Json;
var apiKey = "your_api_key";
var templateId = "your_template_id";
var url = $"https://rest.apitemplate.io/v2/create-pdf?template_id={templateId}";
var data = new
{
header = "Dynamic Report",
content = "Lorem ipsum dolor sit amet, consectetur adipiscing elit.",
date = DateTime.Now.ToShortDateString()
};
var json = JsonSerializer.Serialize(data);
var content = new StringContent(json, System.Text.Encoding.UTF8, "application/json");
using var client = new HttpClient();
client.DefaultRequestHeaders.Add("X-API-KEY", apiKey);
var response = await client.PostAsync(url, content);
var pdfBytes = await response.Content.ReadAsByteArrayAsync();
File.WriteAllBytes("APITemplate_report.pdf", pdfBytes);
using System.Net.Http;
using System.Text.Json;
var apiKey = "your_api_key";
var templateId = "your_template_id";
var url = $"https://rest.apitemplate.io/v2/create-pdf?template_id={templateId}";
var data = new
{
header = "Dynamic Report",
content = "Lorem ipsum dolor sit amet, consectetur adipiscing elit.",
date = DateTime.Now.ToShortDateString()
};
var json = JsonSerializer.Serialize(data);
var content = new StringContent(json, System.Text.Encoding.UTF8, "application/json");
using var client = new HttpClient();
client.DefaultRequestHeaders.Add("X-API-KEY", apiKey);
var response = await client.PostAsync(url, content);
var pdfBytes = await response.Content.ReadAsByteArrayAsync();
File.WriteAllBytes("APITemplate_report.pdf", pdfBytes);
Imports System.Net.Http
Imports System.Text.Json
Private apiKey = "your_api_key"
Private templateId = "your_template_id"
Private url = $"https://rest.apitemplate.io/v2/create-pdf?template_id={templateId}"
Private data = New With {
Key .header = "Dynamic Report",
Key .content = "Lorem ipsum dolor sit amet, consectetur adipiscing elit.",
Key .date = DateTime.Now.ToShortDateString()
}
Private json = JsonSerializer.Serialize(data)
Private content = New StringContent(json, System.Text.Encoding.UTF8, "application/json")
Private client = New HttpClient()
client.DefaultRequestHeaders.Add("X-API-KEY", apiKey)
Dim response = Await client.PostAsync(url, content)
Dim pdfBytes = Await response.Content.ReadAsByteArrayAsync()
File.WriteAllBytes("APITemplate_report.pdf", pdfBytes)
Ana Farklılıklar
- JavaScript Destegi: IronPDF, HTML icinde JavaScript calistirmayi tamamen destekler, boylece dinamik içerik oluşturulmasina olanak tanir (örnek olarak güncel tarih gibi). APITemplate genellikle tüm verilerin onceden saglanmasini gerektirir.
- CSS Esnekligi: IronPDF ile HTML icinde CSS stilini tamamen kontrol edebilirsiniz. APITemplate, sinirli ozellestirme seçenekleri sunan onceden tanimlanmis sablonlar gerektirir.
- Performans: IronPDF, HTML'yi yerel olarak isleyerek daha hizli PDF uretimi saglar, özellikle karmasik belgeler icin. APITemplate'in bulut tabanli yaklasimi gecikmelere neden olabilir.
- Cevrimdisi Özellik: IronPDF cevrimdisi olarak calisir, bu da internet baglantisinin sinirli oldugu veya yuksek guvenlik gereksinimlerinin oldugu uygulamalar icin faydalidir. APITemplate daima bir internet baglantisi gerektirir.
- Dinamik İçerik: IronPDF, dinamik içerik oluşturulmasini saglar, APITemplate ise genellikle daha once belirlenmis bir sablon yapisi gerektirir.
- Ozellestirme: IronPDF, PDF oluşturma sureci uzerinde daha ayrintili kontrol sunar, sayfa boyutu, kenar bosluklari ve diğer PDF-ozel ayar seçenekleri dahil.
- Tutarlilik: IronPDF, kendi rendering motorunu kullandigi icin farkli ortamlarda tutarli rendering saglar. APITemplate'in cikisi, server konfigurasyonuna bagli olarak değişiklik gösterebilir.
Sonuç
IronPDF ve APITemplate ile farkli C# projelerinde kapsamli sekilde calistiktan sonra her iki aracinda kendine ozgu guclu yonlerini takdir ettim. Ancak, cogu PDF ile ilgili gorevimde IronPDF, surekli olarak daha ustun bir seçenek olmustur. APITemplate basit, sablon tabanli belge uretimi icin kendi avantajlarina sahip olsa da, IronPDF'nin çok yonlulugu bunun kadar etkili sekilde islerin ustesinden gelmesini saglamakta ve ihtiyaç duyuldugunda daha karmasik PDF işlemlerinin ustesinden gelebilme gucunu sunmaktadir.
Sonuc olarak, her iki arac da kendi yerinde olsa da, IronPDF surekli olarak C# geliştirme icin daha guclu, esnek ve maliyet etkin bir cozum oldugunu kanitlamistir. Guclu özellik seti, mükemmel performansi ve kapsamli destegi onu basit belge uretiminden en karmasik PDF işlemlerine kadar herhangi bir PDF ile ilgili is icin onerilen secimim yapiyor.
Sıkça Sorulan Sorular
Buluttabanli ve kütüphanetabanli PDF oluşturma araclari arasindaki ana farklar nelerdir?
APITemplate gibi buluttabanli araclar, API cagrilari araciligiyla PDF oluşturma sunar ve internet baglantisi gerektirir. Buna karsilik, IronPDF gibi kütüphanetabanli araclar C# uygulamanizin icine entegre edilir, cevrimdışı PDF manipüle etme imkani ve PDF oluşturma ve özellestirme uzerinde daha fazla kontrol saglar.
IronPDF, C# uygulamalarinda HTML to PDF dönüşümunu nasıl ele alir?
IronPDF, RenderHtmlAsPdf gibi metodlarla HTML to PDF dönüşümlerini sorunsuzca gerceklestirir. CSS ve JavaScript dahil modern web standartlarini tam olarak destekler ve web iceriğinin yüksek kaliteli bir şekilde PDF olarak render edilmesini saglar.
IronPDF'i PDF'lerde dinamik içerik oluşturma için kullanabilir miyim?
Evet, IronPDF JavaScript çalıştırma desteği sunar ve bu da PDF'lerde dinamik içerik oluşturmaya olanak tanir. Bu, özel verilerle dinamik içerik sunan interaktif PDF'ler oluşturmak için özellikle etkileyici.
IronPDF'in abonelik tabanli hizmete gore avantajlari nelerdir?
IronPDF tek seferlik lisans ücreti sunar, uzun vadeli kullanımda maliyet etkin bir çözüm sunar. Cevrimdisi çalışma modunu destekler ve kapsamli PDF manipüle özellikleri saglar, bu da APITemplate gibi abonelik bazli hizmetlere gore daha esnek ve güçlü olabilir.
IronPDF kullanan geliştiriciler için hangi destek mevcut?
IronPDF, rehberler, API referanslari ve kod örnekleri dahil olmak uzere detayli dokümantasyon araciligiyla kapsamli destek sunar. Geliştiriciler, e-posta desteği, topluluk forumlari ve Stack Overflow gibi platformlarda yardim arayabilirler.
IronPDF cegu platform geliştirmeyi destekliyor mu?
Evet, IronPDF .NET Standard ile uyumlu, bu da cegu platform geliştirmeyi destekler. Bu, IronPDF'in farkli işletim sistemlerinde çalışan projelere sorunsuz bir şekilde entegre edilmesini saglar.
IronPDF oluşturulan PDF'lerin güvenligini nasıl saglar?
IronPDF PDF şifreleme ve şifre cozme özellikleri icerir, geliştiricilere belgeleri parolalar ve dijital imzalarla güvenlik altina alma imkani sunar. Bu, PDF belgelerinin gizliligini ve butunlugunu saglamaya yardimci olur.
IronPDF kullanirken karsilaşilan yaygin sorun gidermeler nelerdir?
IronPDF ile karsilasilan problemler için, tüm bagimliliklarin doğru şekilde yüklendigi ve guncellendigini kontrol edin. Uyumluluk ve konfigürasyon ayarları için dokümantasyona bakin ve uygulama pratiklarini doğrulamak için örnek kodu inceleyin. Sorunlar devam ederse, destek ekibi yardimci olmaya hazirdir.



