C#'ta (NET Geliştiricileri İçin Karşılaştırma Listesi) PDFA Kütüphanesi
Bir C# geliştiricisi olarak, projelerimde PDFler oluştururken ve manipüle ederken sıklıkla zorluklarla karşılaşırım. Verimli, güvenilir ve kolay entegre edilebilen PDF çözümlerine olan ihtiyaç alanımızda yaygın bir sorundur. Bu yüzden C# uygulamalarında PDF ile ilgili görevleri basitleştirmeyi vaat eden iki popüler araç olan APITemplate ve IronPDF'yi keşfetmeye karar verdim.
Bu makalede, APITemplate ve IronPDF ile olan pratik deneyimlerimi paylaşarak, özelliklerini, performansını ve entegrasyon yeteneklerini karşılaştıracağım. Amacım, bir sonraki projeniz için bilinçli bir karar vermenize yardımcı olacak açık ve tarafsız bir analiz sunmaktır. APITemplate ve IronPDF ile ilk kez karşılaştığımda, C# geliştirme sürecinde karşılaşılan PDF ile ilgili zorlukları çözme potansiyelleri beni çekti. Bu araçların her biri ne sunuyor, bir göz atalım.
APITemplate

APITemplate, bulut tabanlı bir hizmet olup şablonlardan PDF ve görüntü üretmeye odaklanır. Geliştiricilerin JSON verilerini önceden tanımlanmış şablonlara göndererek belgeler ve grafikler oluşturmasını sağlayan bir API sunar. İlk testlerimde, APITemplate'in kullanımının basit olduğunu gördüm. Web arayüzlerini kullanarak bir şablon oluşturabilir ve ardından API'larını, C# uygulamamdan veri ile doldurabilirim.
APITemplate'in Temel Özellikleri
Şablon Tabanlı Üretim
APITemplate'in en güçlü yanı, şablon tabanlı yaklaşımında yatar. Belgeler ve görüntüler için yeniden kullanılabilir şablonlar oluşturabilirim, bu da tekrarlı görevlerde bana çok zaman kazandırır. PDF oluşturmak için bir markdown şablon düzenleyicisi de sunar. Zapier ve diğer üçüncü taraflarla entegre edilmiş yeniden kullanılabilir şablonlarla PDF üretebilirsiniz.
JSON Veri Entegrasyonu
JSON Veri Entegrasyonu sık kullandığım bir özelliktir. JSON verileri ile şablonları doldurma yeteneği verir. Bu, nesnelerimi JSON'a serileştirip API'ya gönderebileceğim için C# uygulamalarıma entegre etmeyi son derece kolay hale getirir.
API Konsolu
API konsolu özelliği benim için zaman kazandırıcı oldu. Bununla, API çağrılarını doğrudan kendi web sitelerinden önizleyebilir ve test edebilir, isteklerimi C# kodumda uygulamadan önce hata ayıklayıp ince ayar yapabilirim.
Özelleştirilebilir Üstbilgi ve Altbilgi
PDF'ime özelleştirilmiş üstbilgi ve altbilgiler ekleme yeteneği, özellikle profesyonel raporlar veya faturalar oluştururken değerli olmuştur. Sayfa numaralarını, tarihleri veya şirket logolarını kolayca ekleyebilirim.
IronPDF

IronPDF, diğer yandan, C# uygulamalarında 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 yelpazesi sunar. Öne çıkan özelliklerinden biri, HTML'den PDF oluşturma yeteneğidir, bu web tabanlı uygulamalar için son derece yararlı olabilir.
IronPDF ile ilk deneyimim, onu NuGet üzerinden yüklemek ve C# projeme doğrudan entegre etmekle başladı. API entegrasyon süreci son derece pürüzsüzdür, bu da projelerimde hızlı bir şekilde çalışmaya başlamamı sağladı. Harici hizmetlere ihtiyaç duymadan programlı olarak PDF oluşturmanın ne kadar kolay olduğuna hayran kaldım.
Temel fark olarak, APITemplate'in önceden tanımlanmış şablonlardan belgeler oluşturma konusunda üstün olduğunu, IronPDF'nin ise C# kodunuzda özel PDF manipülasyonu için daha fazla esneklik sunduğunu fark ettim. APITemplate'in bulut tabanlı doğası, PDF oluşturma için sunucu kaynakları ile ilgili endişelenmenize gerek kalmamasını sağlar, ancak internet bağlantısı gerektirir. Yerel bir kütüphane olan IronPDF, çevrimdışı çalışabilir ancak sunucunuzun kaynaklarını kullanır.
IronPDF'nin Ana Özellikleri
HTML'den PDF Oluşturma
IronPDF, HTML içeriklerinden PDF oluşturma konusunda mükemmeldir. Bu özelliği dinamik raporlar ve belgeler oluşturmak için geniş ölçüde kullandım. HTML dize veya hatta URL'leri kütüphaneye geçirmek kadar basittir. IronPDF'nin modern web standartlarını geniş ölçüde desteklemesi, HTML içeriklerinden ürettiğim her PDF'nin yüksek kaliteli bir belge olarak çıkması anlamına geliyordu.
PDF Manipülasyonu
Bu özellik, mevcut PDF'leri programlı olarak düzenlememi sağlar. PDF belgelerine metin, resim veya yeni sayfalar ekleyebilirim, bu raporları veya formları güncellemek için inanılmaz derecede faydalı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 bir araya getirmeyi veya tek bir PDF'yi birkaç dosyaya bölmeyi kolaylaştırır.
Metin Çıkarma
PDF'lerden analiz veya indeksleme için metin içeriği çekmem gerektiğinde, IronPDF'nin metin çıkarma yetenekleri işe yarar. Bu, çeşitli PDF düzenlerini iyi bir şekilde işler, veri çıkarmayı kolaylaştırır.
Form Doldurma
Otomatik form doldurma projesinde, IronPDF form doldurma özelliği son derece faydalıdır. PDF formlarını programlı olarak doldurabilir ve manuel veri girişi işlerimi azaltabilirim.
Dijital İmzalar
Birçok projemde güvenlik kritik öneme sahiptir. IronPDF, PDF'lere dijital imzalar eklememe imkan tanır, belge otantikliğini ve güvenliğini artırır.
Şifre Koruması
Hassas belgelerle uğraştığımda, PDF'lere şifre koruması eklemek için IronPDF'yi kullanırım. Bu, gizli bilgilerimin güvende kalmasını sağlamada fazlasıyla yardımcıdır.
PDF'den Görüntüye Dönüşüm
Önizlemeler veya küçük resimler için zaman zaman PDF sayfalarını görüntülere dönüştürmem gerekir. IronPDF, bu süreci basit hale getirir, benden sadece birkaç satır kod gerektirir ve çeşitli görüntü formatlarını destekler.
Çapraz Platform Uyumluluğu
Çapraz platform projelerine çalışan bir .NET geliştiricisi olarak, .NET Standard desteği sayesinde IronPDF'nin farklı işletim sistemlerinde sorunsuz çalışmasını takdir ediyorum.
C# Projeniz İçin IronPDF ve APITemplate Kurulumu
Bu araçları bir C# projesine kurmak oldukça basittir. Deneyimlerime dayanarak, hem IronPDF hem de APITemplate için kurulumu size anlatacağım.
IronPDF
C# projelerimde IronPDF'yi kurmak için şu adımları takip ederim:
-
Projemi Visual Studio'da açarım.
-
NuGet Paket Yöneticisini kullanarak IronPDF'yi yüklerim. Ya NuGet Paket Yöneticisini ya da Paket Yöneticisi Konsolunu kullanırım.
- NuGet Paket Yöneticisinde IronPDF arayın ve yükleyin.

- Alternatif olarak Paket Yöneticisi Konsolunda,
PM> Install-Package IronPDFkomutunu çalıştırırım.
Install-Package IronPdf

-
Kurulum tamamlandıktan sonra, C# dosyamın üst kısmına gerekli using ifadesi eklenir:
using IronPdf;using IronPdf;Imports IronPdf$vbLabelText $csharpLabel -
Lisansı etkinleştirmek için uygulama başlangıcımın erken bir safhasında 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
Hepsi bu kadar! Artık kodumda IronPDF'yi kullanmaya başlayabilirim.
APITemplate
APITemplate için kurulum süreci biraz farklı, çünkü bu web tabanlı bir API:
- Öncelikle, web sitelerinde bir APITemplate hesabı oluşturuyorum.
- Kayıt olduktan sonra, API anahtarımı almak için API bölümüne ilerliyorum.
-
C# projemde herhangi bir özel paket yüklemem gerekmiyor. Genellikle API çağrıları yapmak için yerleşik HttpClient kullanırım.
-
API anahtarını güvenli bir şekilde saklıyorum. Geliştirmede, 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 birlikte HttpClient'i kurarı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, yalnızca şablon anahtarını eklemeniz gereken APITemplate'in resmi örnek GitHub projesini kullanacağım. Bu kurulumlar tamamlandığında, IronPDF ve APITemplate'i C# projelerimde kullanmaya başlayabilirim. IronPDF, uygulamam dahilinde yerel olarak çalışırken, APITemplate sunucularıyla iletişim kurmak için internet bağlantısı gerektirir.
IronPDF ve APITemplate'teki Gelişmiş Özellikler
Bir C# geliştiricisi olarak, hem IronPDF hem de APITemplate'i keşfetme şansım oldu. Beni etkileyen bazı gelişmiş özelliklerine bir göz atalım.
IronPDF Gelişmiş Özellikleri
JavaScript Desteği ile HTML'den PDF Dönüşümü
IronPDF'nin HTML'den PDF'ye dönüşümü etkileyici. Sadece statik HTML'leri render etmekle kalmaz - JavaScript'i de işleyebilir. Bu, dinamik web içeriği ile çalışırken benim için önemli bir avantaj olmuştur.
İşte bunu nasıl kullandığım hakkında kısa 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üreci sırasında yürütülür ve bu da render edilmiş grafiği içeren bir PDF ile sonuçlanır. Bu özelliği, verilerin sık sık değiştiği dinamik raporlar oluşturmak için kullandım, beni grafik ve grafikleri manuel olarak güncellemekten kurtardı.

Bu örnekte Chart.js gibi dış skriptleri dahil etme yeteneği bana güçlü JavaScript kütüphanelerini PDF'lerimde zengin ve dinamik içerik oluşturmak için kullanma imkanı tanır. Ayrıca bu özellik, HTML'lerimde CSS ve duyarlı tasarım teknikleri kullanmama imkan tanır ve sonuçta ortaya çıkan PDF'nin çeşitli cihaz ve baskı formatlarında harika görünmesini sağlar. Aynı HTML kaynağından ekran görüntüleme ve baskıya yönelik optimize edilmiş PDFler oluşturmak için medya sorgularını bile kullandım.
PDF Şifreleme ve Şifre Çözme
Güvenlik, özellikle hassas bilgilerle çalışırken birçok projemde kritik önem taşır. 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 PDF'i bir kullanıcı parolası ile şifrelemekle kalmaz, aynı zamanda izinler üzerinde ayrıntılı kontrol sağlayan bir sahip parolası da ayarlar. Kullanıcıların PDF ile ne yapabileceklerini veya yapamayacaklarını, örneğin yazdırma veya içerik kopyalama gibi, tam olarak belirtebilirim.
Şifre çözme için sık sık şu 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, kullanıcı parolası ile şifreli bir PDF'yi açmayı dener, tüm güvenlik kısıtlamalarını kaldırır ve onu yeni, şifresiz bir dosya olarak kaydeder. try-catch bloğu, parolanın yanlış olabileceği durumları ele almaya yardımcı olur.
Bu özellikleri, farklı kullanıcıların PDF'lere erişim seviyelerinin farklı olduğu güvenli belge yönetim sistemleri oluştururken çeşitli senaryolarda kullandım. Örneğin, bir tıbbi kayıt sisteminde, hassas hasta bilgilerinin şifrelenmiş olmasını ve yalnızca yetkili personel tarafından erişilebilmesini sağladım.
PDF Sıkıştırma
Büyük miktarda 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 sınırlamalarını yönetmek için hayat kurtarıcı olmuştur.
Sıkıştırmayı nasıl kullandığıma dair daha gelişmiş bir örnek burada:
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}%")
Sonuç burada:

Bu tekniklerin kombinasyonunu dosya boyutunu önemli ölçüde azaltırken kaliteyi fazla etkilemeden yüksek derecede etkili 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 ki ek boyut sınırlarını aşmasın.
- Web uygulamaları: Kullanıcılar tarafından indirilecek PDF'lerde, sıkıştırma yükleme sürelerini ve bant genişliği kullanımını azaltmaya yardımcı olur.
- Arşivleme: Uzun süreli saklama için büyük 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 dosyaları vardı, bunların çoğu büyük dosya boyutlarına sahip taranmış belgelerdi. Bu sıkıştırma tekniğini uygulayarak, depolama gereksinimlerinde önemli azalmalar elde ettik ve bu da bulut depolama faturalarında anlamlı maliyet tasarruflarına yol açtı.
Dijital İmzalar
PDF'lere dijital imzalar eklemek, birçok iş süreci için belge otantikliğini ve inkâr edilemezliğini sağlamak 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 burada:
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 birkaç gerçek dünyadaki uygulamada kullandım:
- Sözleşme yönetim sistemi: Bir şirket için elektronik ortamda gönderilecek ve alınacak imzalı sözleşmeler gerektiren bir sistem 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ı ve reçeteleri üzerinde dijital imzalarını kullanmalarını sağladık.
- Devlet 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 kullandığım temel bir özelliktir. IronPDF'nin bu özellikleri uygulaması hem güçlü hem de esnektir. PDF'leri bölme ve birleştirme konusunda daha gelişmiş bir örnek burada:
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

Kod tarafından üretilen birleştirilmiş belge burada:

Form Doldurma
Form doldurmayı otomatikleştirmek birçok projemde büyük bir zaman tasarrufu sağladı. IronPDF, PDF formlarını programatik olarak doldurmama olanak tanır ve bu, büyük hacimde form işlemek veya kişiselleştirilmiş belgeler oluşturmak için paha biçilmezdir. İşte form doldurma konusunda 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 birkaç gerçek dünyadaki uygulamada kullandım:
-
İK işe alım sistemi: İK veritabanından alınan bilgilere dayanarak yeni çalışan belgelerini otomatik olarak dolduran bir sistem oluşturduk, bu da saatlerce manuel veri girişini kurtardı.
-
Sigorta talep işleme: Bir sigorta şirketi için, poliçe sahibi bilgileriyle önceden doldurulmuş talep formları oluşturan, talep gönderme işlemini önemli ölçüde hızlandıran bir sistem kurduk.
-
Okul başvuru sistemi: Bir eğitim projesinde, öğrenci verilerine dayalı olarak okul başvuru formlarını dolduran bir sistem uyguladık, böylece hem öğrenciler hem de idari personel için başvuru sürecini kolaylaştırdık.
- Vergi formu oluşturma: Bir muhasebe firması için, müşteri finansal verilerine dayalı olarak vergi formlarını otomatik olarak dolduran bir sistem oluşturduk, bu da hata riskini azaltarak vergi mevsiminde zaman tasarrufu sağladı.
Formları programatik olarak doldurma yeteneği, birçok iş sürecini otomatikleştirmede kilit bir faktör olmuş, manuel veri girişinden ötürü meydana gelen hataları azaltmış ve önemli zaman tasarrufu sağlanmıştır.
Filigran Ekleme
PDF'lere filigranlar eklemek, genellikle markalama, güvenlik veya durum belirtisi için gereklidir. IronPDF, birçok projede faydalı bulduğum esnek filigran ekleme yetenekleri sağlar. İşte filigran eklemeyi nasıl kullandığımın daha ayrıntılı bir örneği:
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 Gelişmiş Özellikler
Dinamik Şablon Oluşturma
APITemplate'in dinamik şablon oluşturması, yüksek oranda özelleştirilebilir belgeler oluşturulmasına olanak tanır ve bu özellik, özelleştirilebilir JSON veri kullanılarak yapılır. 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ü kullanarak PDF belgelerini kolayca oluşturmayı başardım.
Bu özelliği projelerimde nasıl kullandığımı inceleyelim.
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

Bu, oluşturulan PDF belgesidir:

Toplu PDF Oluşturma
APITemplate'in toplu PDF oluşturma özelliği, tek bir API çağrısında birden fazla belge oluşturulduğunda önemli bir avantajdır. İşte bunu nasıl kullandığımın daha ayrıntılı bir örneği:
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. Bu kod tarafından üretilen bir kart şudur:

Görüntü Oluşturma
PDF oluşturma APITemplate'in birincil amacı olsa da, görüntü oluşturma yetenekleri de etkileyici. Konsoldaki görüntü şablonlarını kullanarak sosyal medya görüntüleri oluşturabilirsiniz. Ayrıca, duyarlı bir görüntü akıllı kırpma da sunar. Afiş oluşturma API'si, görüntü API'si ile aynıdır. İşte 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 yerleştirilmiş ürün görüntüsü ile bir ürün promosyon görseli oluşturur.
QR Kod Oluşturma
APITemplate'in yerleşik QR kodu oluşturma özelliği birçok projeme büyük katkı sağladı. İçerik yerine veri URL'leri koyabilirsiniz. İşte 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 manipülasyonu ile sıkça çalışan bir C# geliştiricisi olarak, belgelerin kalitesinin ve desteğin proje başarısını sağlayabildiğini veya bozduğunu deneyimledim. IronPDF ve APITemplate için belgelendirme ve destekle ilgili deneyimlerimi inceleyelim.
IronPDF
Dokümantasyon
IronPDF belgelendirmesi kapsamlı ve iyi yapılandırılmıştır, bu da projelerimde önemli bir yardım olmuştur. İşte deneyimimin ayrıntılı bir dökümü: IronPDF belgelendirmesi https://ironpdf.com/docs/ adresinde mevcuttur ve oldukça geniş kapsamlıdır. İşte takdir ettiğim bazı anahtar noktalar:
-
Başlangıç Kılavuzu: Belgelendirme, IronPDF'nin NuGet üzerinden nasıl yükleneceği ve ilk PDF'nizi nasıl oluşturacağınıza dair adım adım, açık bir kılavuzla başlar. Bu, ilk projelerimde hızlı bir şekilde başlamama yardımcı oldu.
-
API Referansı: API referansı kapsamlıdır ve tüm sınıf ve yöntemleri kapsar. Her girdi, belirli özellikler uygularken paha biçilmez bulduğum C# örneklerini içerir.
-
Kod Örnekleri: Belgelendirme boyunca birçok kod parçacığı ve tam örnekler yer almaktadır. Bunlar, daha karmaşık PDF işlemleri uygulamam gerektiğinde son derece yardımcı oldular.
-
Öğreticiler ve Nasıl Yapılır Kılavuzları: IronPDF, HTML'den PDF'ler oluşturma, filigran ekleme veya formlarla çalışma gibi ortak görevler için ayrıntılı öğreticiler sağlar. Bunlar, daha ileri düzey kullanım durumlarını inceleyebilmemde bana rehberlik etti.
- Hata Ayıklama Bölümü: Belgelendirmede, yaygın sorunlarla ilgili bir hata ayıklama bölümü bulunmaktadır. Bu, hatalarla veya beklenmedik davranışlarla karşılaştığımda bana zaman kazandırdı.
Destek
IronPDF'nin iletişim kısmı duyarlı ve destek kanalları deneyimlerimde son derece yardımcı oldu:
-
E-posta Desteği: Karmaşık sorunlar yaşadığımda e-posta desteklerini kullandım. Yanıt süreleri genellikle 24 saat içinde oldu ve destek ekibi ürün hakkında bilgiliydi.
-
Topluluk Forumu: IronPDF, geliştiricilerin sorular sorabileceği ve çözümler paylaşıbileceği bir topluluk forumu tutmaktadır. Sorularıma yanıtlar bulmanın yanında, deneyimlerime dayalı çözümler de sundum.
-
Stack Overflow: IronPDF ekibi, Stack Overflow'daki [IronPDF] etiketini aktif olarak izler. Oraya gönderdiğim sorulara yardımcı yanıtlar aldım.
-
Düzenli Güncellemeler: IronPDF, hata düzeltmeleri ve yeni özelliklerle sık sık güncellemeler yayınlar. Değişim günlüğü detaylıdır, her sürümde neyin yeni veya değişmiş olduğunu anlamama yardımcı olur.
- Geçiş Rehberleri: Büyük sürümler arasında önemli değişiklikler olduğunda, IronPDF geçiş rehberleri sağlamıştır. Bunlar, projelerimin kütüphanenin daha yeni sürümlerine güncellenmesinde önemli olmuştur.
APITemplate
APITemplate'in belgelendirme ve destek yapısı, IronPDF'den farklıdır, bulut tabanlı bir hizmet yapısını yansıtır. İşte deneyimim:
Dokümantasyon
APITemplate'in belgelendirmesi https://docs.apitemplate.io/reference/api-reference.html adresinde mevcuttur ve API kullanımı üzerine odaklanmıştır. İşte ana noktalar:
-
API Referansı: Belgelendirme, mevcut tüm uç noktaları, gereken parametreleri ve yanıt formatlarını detaylandıran açık bir API referansı sağlar. C# uygulamalarıma entegre ederken bu benim başvuru kaynağım olmuştur.
- Kimlik Doğrulama: API anahtarlarının nasıl kullanılacağını açıkça açıklayan, kimlik doğrulamaya adanmış bir bölüm bulunmaktadır. Hizmeti kullanmaya ilk başladığımda bu çok önemliydi.
Destek
APITemplate'in destek yapısı daha çok e-posta desteğine odaklıdır:
-
E-posta Desteği: Sorunlarım veya sorularım olduğunda e-posta desteklerini kullandım. Yanıt süreleri genellikle 1-2 iş günü içinde oldu.
- SSS Bölümü: Belgelendirme, yaygın soruları ele alan bir SSS bölümü içerir. Sorunlarla karşılaştığımda genellikle ilk durağım olmuştur.
IronPDF ile Analytics Panoları İçin Bootstrap 5 Kullanma
IronPDF'nin Chrome V8 görüntüleme motoru, modern Bootstrap 5 düzenlerini işlemede mükemmeldir ve iş metrikleri ve veri görselleştirmeleriyle PDF raporları oluşturmak için idealdir. APITemplate'in API bazlı yaklaşımından farklı olarak, IronPDF tam CSS3 desteği ile HTML'yi doğrudan işler; flexbox, CSS Grid ve özel özellikler dahil.
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 ile profesyonel bir analiz panosu PDF'si oluşturur. IronPDF'nin Chrome motoru, Bootstrap'in flexbox düzenlerini, gölgelerini ve hover etkilerini kusursuz bir şekilde işler - APITemplate gibi API temelli hizmetlerle önemli özelleştirme gerektiren özellikler.
APITemplate'e Karşı Temel Avantajlar:
- Tam Bootstrap desteğiyle doğrudan HTML işleme
- API çağrıları veya şablon yapılandırması gerektirmez
- Animasyonlar dahil tam CSS3 uyumluluğu
- Harici bağımlılıklar olmadan çevrimdışı işleme
Bootstrap PDF oluşturma hakkında daha fazla bilgi için, bkz. HTML'den PDF'ye Bootstrap Kılavuzu.
Lisanslama
IronPDF Fiyatlandırma ve Lisanslama

IronPDF, farklı ihtiyaçlara uygun çeşitli fiyatlandırma seviyeleri sunar:
- Lite: $999'de fiyatlandırılmış, bu kademe tek bir geliştiricinin tek bir projede çalışması için uygundur. Tek seferlik bir ücrettir, küçük projeler veya bireysel geliştiriciler için uygun bir seçenektir.
- Artı: $1,499'de, bu seçenek 10 geliştirici, 10 konum ve 10 projeyi destekler. Bu seviye, küçük ve orta ölçekli ekipler için daha fazla esneklik sağlar.
- Profesyonel: $2,999 için, bu kademe daha geniş dağıtım hakları sağlar ve daha talepkar proje gereklilikleri olan daha büyük ekipler için uygundur.
- Sınırsız: $5,999'da, bu kademe sınırsız geliştirici, konum ve proje içerir. Bu, kısıtlama olmaksızın geniş kullanım gereksinimi olan büyük ekipler ve işletmeler için idealdir.
IronPDF ayrıca, daha büyük organizasyonlar ve ticari ürünlere PDF işlevselliğini entegre etmesi gerekenler için Enterprise ve OEM yeniden dağıtım lisansları sunar. Test etmek için ücretsiz bir deneme lisansı da sunar.
APITemplate Fiyatlandırma ve Lisanslama
APITemplate, API bazlı PDF oluşturma hizmeti yaklaşımıyla farklı bir yaklaşım sunar. Fiyatlandırma genellikle API çağrısı sayısına dayalıdır ve bu, değişken kullanım desenleri için daha esnek hale getirir:
- Temel Plan: Genellikle sınırlı sayıda aylık API çağrısıyla daha düşük bir fiyat noktasıyla başlar. Bu, küçük projeler veya minimal PDF oluşturma ihtiyacına sahip işletmeler için uygundur.
- Standart Plan: Bu plan, daha fazla API çağrısı ve ek özellikler sunar, orta ölçekli işletmelere hitap eder.
- Enterprise Plan: Yüksek hacimli kullanıcılar için özel tasarlanmış, en fazla API çağrısı ve öncelikli destek gibi premium özellikler sağlar.
APITemplate'in lisanslaması basittir, genellikle aylık veya yıllık abonelik modeline bağlıdır.
Temel Farklılıklar
- Fiyatlandırma Modeli: IronPDF, sürekli, yoğun kullanım için uzun vadede maliyet etkin olabilen tek sefere mahsus bir ücret modeli kullanır. Diğer yandan, APITemplate, kullanıma göre daha esnek ve ölçeklenebilir olabilen abonelik bazlı bir model kullanır.
- Destek ve Güncellemeler: IronPDF, satın alımıyla bir yıllık destek ve güncellemeleri içerir, bu süreyi uzatma seçenekleri mevcuttur. APITemplate'nin abonelik planları genellikle, paket kapsamında sürekli destek ve güncellemeleri içerir.
Neden IronPDF'yi Seçmelisiniz?
Hem IronPDF hem de APITemplate, HTML içeriğinden PDF oluşturma kabiliyetine sahiptir, ancak IronPDF'nun uygulaması daha sağlam ve esnektir. İşte karşılaştırma:
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)
Temel Farklılıklar
- JavaScript Desteği: IronPDF, HTML içindeki JavaScript yürütmesini tam olarak destekler, dinamik içerik oluşturmayı sağlar (örneğin, tarih ekleme gibi). APITemplate genellikle tüm verilerin önceden sağlanmasını gerektirir.
- CSS Esnekliği: IronPDF ile HTML'nizde CSS stiline doğrudan tam kontrol sahibisiniz. APITemplate genellikle ön tanımlı şablonları sınırlı özelleştirme seçenekleriyle gerektirir.
- Performans: IronPDF, HTML'yi yerel olarak işler, karmaşık belgeler için bile daha hızlı PDF oluşturma sağlar. APITemplate'nin bulut tabanlı yaklaşımı gecikmelere neden olabilir.
- Çevrimdışı Yetenek: IronPDF çevrimdışı çalışır, sınırlı internet bağlantısı veya yüksek güvenlik gereksinimleri olan uygulamalar için yararlıdır. APITemplate her zaman internet bağlantısı gerektirir.
- Dinamik İçerik: IronPDF, anında daha fazla dinamik içerik oluşturulmasına olanak tanır, APITemplate tipik olarak önceden tanımlı bir şablon yapısına ihtiyaç duyar.
- Özelleştirme: IronPDF, PDF oluşturma süreci üzerinde daha ince kontrol sağlar, sayfa boyutu, kenar boşlukları ve diğer PDF özelleştirilmiş ayarları gibi seçenekler sunar.
- Tutarlılık: IronPDF, kendi işleme motorunu kullanarak farklı ortamlarda tutarlı işleme garanti eder. APITemplate'in çıktısı, sunucu yapılandırmalarına bağlı olarak değişiklik gösterebilir.
Sonuç
Çeşitli C# projelerinde hem IronPDF hem de APITemplate ile kapsamlı bir şekilde çalıştıktan sonra her iki aracın da benzersiz güçlü yanlarını takdir etmeye başladım. Ancak, çoğu PDF ile ilgili görevlerimde, IronPDF'nin tutarlı bir şekilde üstün bir seçim olduğunu buldum. APITemplate'in, özellikle basit, şablona dayalı belge oluşturma noktasında kendi avantajları olsa da, IronPDF'nin çok yönlülüğü bu görevleri en az o kadar etkili bir şekilde çözmesine olanak tanırken, gereken durumlarda daha karmaşık PDF işlemlerini de ele alabilme gücü sağlar.
Sonuç olarak, her iki aracın da kendi yerleri olmasına rağmen, IronPDF C# geliştirmesindeki PDF manipülasyonu için daha güçlü, esnek ve maliyet açısından etkili bir çözüm olduğunu defalarca kanıtlamıştır. Güçlü özellik seti, mükemmel performansı ve kapsamlı desteği, onu en basit belge oluşturma işlemlerinden en karmaşık PDF manipülasyonlarına kadar her türlü PDF ile ilgili görev için tercih ettiğim çözüm haline getiriyor.
Sıkça Sorulan Sorular
Bulut-tabanlı ve kütüphane-tabanlı PDF oluşturma araçları arasındaki temel farklar nelerdir?
APITemplate gibi bulut-tabanlı araçlar, API çağrılarıyla PDF oluşturma sunar ve internet bağlantısına ihtiyaç duyar. Buna karşılık, IronPDF gibi kütüphane-tabanlı araçlar, C# uygulamanıza entegre edilir, çevrimdışı PDF manipülasyonu sağlar ve PDF oluşturma ve özelleştirme üzerinde daha fazla kontrol sunar.
IronPDF, C# uygulamalarında HTML'den PDF'ye dönüşümleri nasıl gerçekleştirir?
IronPDF, RenderHtmlAsPdf gibi yöntemler kullanarak HTML'den PDF'ye akıcı dönüşümler sağlar. CSS ve JavaScript dahil modern web standartlarını tam destekler, web içeriğinin yüksek kalitede PDF'lere dönüştürülmesini sağlar.
IronPDF'yi PDF'lerde dinamik içerik oluşturma için kullanabilir miyim?
Evet, IronPDF JavaScript çalıştırmayı destekler, bu da PDF'lerde dinamik içerik oluşturmayı mümkün kılar. Bu, özellikle dinamik verilere sahip web sayfalarından doğrudan etkileşimli PDF'ler oluşturmak için kullanışlıdır.
IronPDF'yi abonelik tabanlı bir servis yerine kullanmanın avantajları nelerdir?
IronPDF, uzun vadeli kullanım için maliyet etkin bir çözüm sunan tek seferlik lisans ücreti sunar. Çevrimdışı çalışmaya olanak tanır ve abonelik tabanlı hizmetlere kıyasla daha esnek ve sağlam olabilir olan kapsamlı PDF manipülasyonu özellikleri sunar.
IronPDF kullanan geliştiriciler için hangi destekler mevcuttur?
IronPDF, ayrıntılı kılavuzlar, API referansları ve kod örnekleri içeren kapsamlı belgelerle destek sunar. Geliştiriciler ayrıca e-posta desteği, topluluk forumları ve Stack Overflow gibi platformlarda yardıma başvurabilir.
IronPDF çapraz platform geliştirmeyi destekliyor mu?
Evet, IronPDF çapraz platform geliştirmeyi destekleyen .NET Standard ile uyumludur. Bu, geliştiricilerin IronPDF'yi farklı işletim sistemlerinde çalışan projelere sorunsuzca entegre edebileceği anlamına gelir.
IronPDF oluşturulan PDF'lerin güvenliğini nasıl sağlar?
IronPDF, belgeleri şifrelerle ve dijital imzalarla güvence altına almayı sağlayan PDF şifreleme ve şifre çözme özellikleri sunar. Bu özellikler, PDF belgelerinin gizliliğini ve bütünlüğünü korumaya yardımcı olur.
IronPDF kullanırken yaygın sorun giderme ipuçları nelerdir?
IronPDF ile karşılaşılan sorunlarda, tüm bağımlılıkların doğru biçimde yüklendiğinden ve güncellendiğinden emin olun. Belgeleri, uyumluluğu ve yapılandırma ayarlarını kontrol edin ve uygulama uygulamalarını doğrulamak için örnek kodları gözden geçirin. Sorunlar devam ederse, destek ekibi yardıma hazırdır.



