Api2pdf'ten IronPDF'e C# ile Nasıl Geçilir
Api2pdf, PDF oluşturmak için bulut tabanlı bir hizmet sunar, ancak hassas belgeleri harici sunuculara göndermek, güvenlik riskleri, uyumluluk sorunları ve zamanla biriken sürekli maliyetlere yol açabilir. Bu rehber, Api2pdf'den IronPDF'e tamamen kendi altyapınızda belge işleme sağlayan, veri aktarım endişelerini ortadan kaldırarak dönüşüm başına maliyetleri tek seferlik bir yatırım haline dönüştüren yerel bir .NET PDF kütüphanesine geçiş yolunu ayrıntılı olarak sunar.
Neden Api2pdf'den Taşınmayı Düşünmelisiniz?
Api2pdf, bulut tabanlı PDF oluşturma kolaylığı sağlarken, bir dizi faktör geliştirme ekiplerini PDF oluşturma ihtiyaçları için yerel alternatifler aramaya teşvik eder.
Güvenlik ve Uyumluluk Endişeleri
Api2pdf, hassas HTML ve belgelerinizin işlenmesi için üçüncü taraf sunuculara gönderildiği bulut tabanlı bir hizmet olarak çalışır. Bu, düzenlenmiş verileri işleyen kuruluşlar için önemli endişeler yaratır.
| Risk | Api2pdf | IronPDF |
|---|---|---|
| Veri İletimi | Tüm içerik harici sunuculara gönderilir | Altyapınızda yerel olarak işler |
| GDPR Uyumluluğu | Veri yargı yetkilerini geçer | Veri asla ortamınızı terk etmez |
| HIPAA Uyumluluğu | PHI harici olarak aktarılır | PHI sistemlerinizde kalır |
| SOC 2 | Üçüncü taraf bağımlılığı | Veri işleme üzerinde tam kontrol |
| PCI DSS | Kart verileri potansiyel olarak açığa çıkar | Dışa aktarım yok |
Zamanla Biriken Maliyetler
Api2pdf, metreli kullanım (bant genişliği ve hesaplama saniyesi) süresiz $1/ay baz fiyat artı metrelendirilmiş kullanım ücreti olarak ücretlendirilirken,IronPDF bir kez süresiz lisans sunar. Güncel rakamları api2pdf.com/pricing adresinden doğrulayın:
| Bileşen | Api2pdf | IronPDF |
|---|---|---|
| Taban | $1/ay | Tek seferlik lisans |
| Bant genişliği | $0,001 MB başına | geçerli değil (yerel) |
| Hesapla | $0,00019551 saniye başına | geçerli değil (yerel) |
| Hacim ölçeklendirme | Kullanım ve dosya büyüklüğüyle orantılı | Flat (Lite ~$749, Plus ~$1,499, Professional ~$2,999) |
Daha ağır iş yükleri (büyük dosyalar, JS yoğun sayfalar, uzun rendere süreleri) api2pdf faturasının yukarı kaymasına neden olur;IronPDF maliyeti lisanslandıktan sonra sabittir.
Performans ve Kullanılabilirlik
Api2pdf, her PDF oluşturma isteğine 2-5 saniye ek gecikme ekleyen ağ döngüleri gerektirir. IronPDF, yerel olarak 100-500 milisaniye içinde işler. Ek olarak,IronPDF tamamen çevrimdışı ve izole ortamlarda çalışır—dış hizmet kullanılabilirliğine güvenemeyen uygulamalar için kritik.
Api2pdfvs. IronPDF: Temel Farklar
| Aspekt | Api2pdf | IronPDF |
|---|---|---|
| Veri İşleme | Üçüncü taraf bulut sunucularına gönderilir | Altyapınızda yerel olarak işlenir |
| Fiyatlandırma | $1/ay baz + hesaplı ($0,001/MB bant genişliği, $0,00019551/sn hesapla) | Tek seferlik süresiz lisans |
| Gecikme | 2-5 saniye (ağ gidiş-geliş) | 100-500ms (yerel işleme) |
| Çevrimdışı | Mevcut değil | Tamamen çevrimdışı çalışır |
| Kurulum | API anahtarı + HTTP istemcisi | Simple NuGet package |
| Uyumluluk | GDPR/HIPAA endişeleri (veri ağ dışına çıkar) | Tam uyumluluk kontrolü |
Adım Adım Geçiş Süreci
1. Adım: NuGet Paketlerini Güncelleyin
Api2pdf paketini kaldırın ve IronPDF'i yükleyin:
# Remove Api2pdf
dotnet remove package Api2Pdf
# Install IronPDF
dotnet add package IronPdf
# Remove Api2pdf
dotnet remove package Api2Pdf
# Install IronPDF
dotnet add package IronPdf
Veya Paket Yöneticisi Konsolu aracılığıyla:
Uninstall-Package Api2Pdf
Install-Package IronPdf
Adım 2: Ad Alanı Referanslarını Güncelleyin
Api2pdf ad alanlarınıIronPDF ile değiştirin:
// Remove these
using Api2Pdf;
// Add these
using IronPdf;
using IronPdf.Rendering;
// Remove these
using Api2Pdf;
// Add these
using IronPdf;
using IronPdf.Rendering;
Imports IronPdf
Imports IronPdf.Rendering
Adım 3: Lisans Anahtarını Yapılandırın
Uygulama başlatıldığında IronPDF lisans anahtarını ayarlayın:
// Set once at application startup
IronPdf.License.LicenseKey = "YOUR-IRONPDF-LICENSE-KEY";
// Or configure via appsettings.json:
// { "IronPdf.LicenseKey": "YOUR-IRONPDF-LICENSE-KEY" }
// Set once at application startup
IronPdf.License.LicenseKey = "YOUR-IRONPDF-LICENSE-KEY";
// Or configure via appsettings.json:
// { "IronPdf.LicenseKey": "YOUR-IRONPDF-LICENSE-KEY" }
' Set once at application startup
IronPdf.License.LicenseKey = "YOUR-IRONPDF-LICENSE-KEY"
' Or configure via appsettings.json:
' { "IronPdf.LicenseKey": "YOUR-IRONPDF-LICENSE-KEY" }
Adım 4: API Anahtarı Yapılandırmasını Kaldırın
IronPDF yerel olarak çalışır ve API anahtarları gerektirmez:
// Remove thisApi2pdfpattern
var client = new Api2Pdf("API_KEY");
// Just create the renderer directly
var renderer = new ChromePdfRenderer();
// Remove thisApi2pdfpattern
var client = new Api2Pdf("API_KEY");
// Just create the renderer directly
var renderer = new ChromePdfRenderer();
' Remove thisApi2pdfpattern
Dim client = New Api2Pdf("API_KEY")
' Just create the renderer directly
Dim renderer = New ChromePdfRenderer()
Tam API Geçiş Referansı
Temel Sınıf Eşlemeleri
| Api2pdf Sınıfı | IronPDF Eşdeğeri |
|---|---|
Api2Pdf (istemci) |
ChromePdfRenderer |
Api2PdfResult |
PdfDocument |
ChromeHtmlToPdfOptions |
ChromePdfRenderOptions |
Metot Haritalama
| Api2pdf Yöntemi | IronPDF Yöntemi |
|---|---|
client.Chrome.HtmlToPdfAsync(new ChromeHtmlToPdfRequest { Html = html }) |
renderer.RenderHtmlAsPdf(html) |
client.Chrome.UrlToPdfAsync(new ChromeUrlToPdfRequest { Url = url }) |
renderer.RenderUrlAsPdf(url) |
result.FileUrl (indirme bağlantısı) |
pdf.SaveAs(path) |
result.GetFileBytes() |
pdf.BinaryData |
client.PdfSharp.MergePdfs(new PdfMergeRequest { Urls = urls }) |
PdfDocument.Merge(pdfs) |
client.PdfSharp.SetPassword(new PdfPasswordRequest { Url, OwnerPassword }) |
pdf.SecuritySettings.OwnerPassword |
İşleme Seçenekleri Eşleşmesi
| Api2pdf Seçeneği | IronPDF Seçeneği |
|---|---|
Landscape = true |
RenderingOptions.PaperOrientation = Landscape |
PreferCSSPageSize = true / Format |
RenderingOptions.PaperSize = PdfPaperSize.A4 |
PrintBackground = true |
RenderingOptions.PrintHtmlBackgrounds = true |
MarginTop, vb. |
RenderingOptions.MarginTop, vb. |
Delay = 5000 |
RenderingOptions.WaitFor.RenderDelay(5000) |
Kod Göç Örnekleri
HTML'den PDF'ye Dönüşüm
En yaygınApi2pdfişlemi, bulut API çağrılarından yerel işleme temel değişimi gösterir.
Api2pdf Uygulaması:
// NuGet: Install-Package Api2Pdf
using System;
using System.Threading.Tasks;
using Api2Pdf;
class Program
{
static async Task Main(string[] args)
{
var client = new Api2Pdf("your-api-key");
var result = await client.Chrome.HtmlToPdfAsync(new ChromeHtmlToPdfRequest
{
Html = "<h1>Hello World</h1>"
});
Console.WriteLine(result.FileUrl);
}
}
// NuGet: Install-Package Api2Pdf
using System;
using System.Threading.Tasks;
using Api2Pdf;
class Program
{
static async Task Main(string[] args)
{
var client = new Api2Pdf("your-api-key");
var result = await client.Chrome.HtmlToPdfAsync(new ChromeHtmlToPdfRequest
{
Html = "<h1>Hello World</h1>"
});
Console.WriteLine(result.FileUrl);
}
}
Imports System
Imports System.Threading.Tasks
Imports Api2Pdf
Module Program
Async Function Main(args As String()) As Task
Dim client = New Api2Pdf("your-api-key")
Dim result = Await client.Chrome.HtmlToPdfAsync(New ChromeHtmlToPdfRequest With {
.Html = "<h1>Hello World</h1>"
})
Console.WriteLine(result.FileUrl)
End Function
End Module
IronPDF Uygulaması:
// NuGet: Install-Package IronPdf
using System;
using IronPdf;
class Program
{
static void Main(string[] args)
{
var renderer = new ChromePdfRenderer();
var pdf = renderer.RenderHtmlAsPdf("<h1>Hello World</h1>");
pdf.SaveAs("output.pdf");
Console.WriteLine("PDF created successfully");
}
}
// NuGet: Install-Package IronPdf
using System;
using IronPdf;
class Program
{
static void Main(string[] args)
{
var renderer = new ChromePdfRenderer();
var pdf = renderer.RenderHtmlAsPdf("<h1>Hello World</h1>");
pdf.SaveAs("output.pdf");
Console.WriteLine("PDF created successfully");
}
}
Imports System
Imports IronPdf
Class Program
Shared Sub Main(ByVal args As String())
Dim renderer = New ChromePdfRenderer()
Dim pdf = renderer.RenderHtmlAsPdf("<h1>Hello World</h1>")
pdf.SaveAs("output.pdf")
Console.WriteLine("PDF created successfully")
End Sub
End Class
IronPDF, ağ döngüsünü, API anahtarı yönetimini ve Api2pdf'in URL tabanlı yanıt deseninin gerektirdiği ayrı indirme adımını ortadan kaldırır.
URL'den PDF'ye Dönüşüm
Api2pdf Uygulaması:
// NuGet: Install-Package Api2Pdf
using System;
using System.Threading.Tasks;
using Api2Pdf;
class Program
{
static async Task Main(string[] args)
{
var client = new Api2Pdf("your-api-key");
var result = await client.Chrome.UrlToPdfAsync(new ChromeUrlToPdfRequest
{
Url = "https://www.example.com"
});
Console.WriteLine(result.FileUrl);
}
}
// NuGet: Install-Package Api2Pdf
using System;
using System.Threading.Tasks;
using Api2Pdf;
class Program
{
static async Task Main(string[] args)
{
var client = new Api2Pdf("your-api-key");
var result = await client.Chrome.UrlToPdfAsync(new ChromeUrlToPdfRequest
{
Url = "https://www.example.com"
});
Console.WriteLine(result.FileUrl);
}
}
Imports System
Imports System.Threading.Tasks
Imports Api2Pdf
Module Program
Async Function Main(args As String()) As Task
Dim client = New Api2Pdf("your-api-key")
Dim result = Await client.Chrome.UrlToPdfAsync(New ChromeUrlToPdfRequest With {
.Url = "https://www.example.com"
})
Console.WriteLine(result.FileUrl)
End Function
End Module
IronPDF Uygulaması:
// NuGet: Install-Package IronPdf
using System;
using IronPdf;
class Program
{
static void Main(string[] args)
{
var renderer = new ChromePdfRenderer();
var pdf = renderer.RenderUrlAsPdf("https://www.example.com");
pdf.SaveAs("webpage.pdf");
Console.WriteLine("PDF created from URL successfully");
}
}
// NuGet: Install-Package IronPdf
using System;
using IronPdf;
class Program
{
static void Main(string[] args)
{
var renderer = new ChromePdfRenderer();
var pdf = renderer.RenderUrlAsPdf("https://www.example.com");
pdf.SaveAs("webpage.pdf");
Console.WriteLine("PDF created from URL successfully");
}
}
Imports System
Imports IronPdf
Module Program
Sub Main(args As String())
Dim renderer = New ChromePdfRenderer()
Dim pdf = renderer.RenderUrlAsPdf("https://www.example.com")
pdf.SaveAs("webpage.pdf")
Console.WriteLine("PDF created from URL successfully")
End Sub
End Module
Seçeneklerle HTML Dosyasını PDF'ye Dönüştürme
Api2pdf Uygulaması:
// NuGet: Install-Package Api2Pdf
using System;
using System.IO;
using System.Threading.Tasks;
using Api2Pdf;
class Program
{
static async Task Main(string[] args)
{
var client = new Api2Pdf("your-api-key");
string html = File.ReadAllText("input.html");
var result = await client.Chrome.HtmlToPdfAsync(new ChromeHtmlToPdfRequest
{
Html = html,
Options = new ChromeHtmlToPdfOptions
{
Landscape = true,
PrintBackground = true
}
});
Console.WriteLine(result.FileUrl);
}
}
// NuGet: Install-Package Api2Pdf
using System;
using System.IO;
using System.Threading.Tasks;
using Api2Pdf;
class Program
{
static async Task Main(string[] args)
{
var client = new Api2Pdf("your-api-key");
string html = File.ReadAllText("input.html");
var result = await client.Chrome.HtmlToPdfAsync(new ChromeHtmlToPdfRequest
{
Html = html,
Options = new ChromeHtmlToPdfOptions
{
Landscape = true,
PrintBackground = true
}
});
Console.WriteLine(result.FileUrl);
}
}
Imports System
Imports System.IO
Imports System.Threading.Tasks
Imports Api2Pdf
Module Program
Async Function Main(args As String()) As Task
Dim client = New Api2Pdf("your-api-key")
Dim html As String = File.ReadAllText("input.html")
Dim result = Await client.Chrome.HtmlToPdfAsync(New ChromeHtmlToPdfRequest With {
.Html = html,
.Options = New ChromeHtmlToPdfOptions With {
.Landscape = True,
.PrintBackground = True
}
})
Console.WriteLine(result.FileUrl)
End Function
End Module
IronPDF Uygulaması:
// NuGet: Install-Package IronPdf
using System;
using System.IO;
using IronPdf;
class Program
{
static void Main(string[] args)
{
var renderer = new ChromePdfRenderer();
renderer.RenderingOptions.PaperOrientation = IronPdf.Rendering.PdfPaperOrientation.Landscape;
renderer.RenderingOptions.CssMediaType = IronPdf.Rendering.PdfCssMediaType.Print;
string html = File.ReadAllText("input.html");
var pdf = renderer.RenderHtmlAsPdf(html);
pdf.SaveAs("output.pdf");
Console.WriteLine("PDF created with options successfully");
}
}
// NuGet: Install-Package IronPdf
using System;
using System.IO;
using IronPdf;
class Program
{
static void Main(string[] args)
{
var renderer = new ChromePdfRenderer();
renderer.RenderingOptions.PaperOrientation = IronPdf.Rendering.PdfPaperOrientation.Landscape;
renderer.RenderingOptions.CssMediaType = IronPdf.Rendering.PdfCssMediaType.Print;
string html = File.ReadAllText("input.html");
var pdf = renderer.RenderHtmlAsPdf(html);
pdf.SaveAs("output.pdf");
Console.WriteLine("PDF created with options successfully");
}
}
Imports System
Imports System.IO
Imports IronPdf
Module Program
Sub Main(args As String())
Dim renderer As New ChromePdfRenderer()
renderer.RenderingOptions.PaperOrientation = IronPdf.Rendering.PdfPaperOrientation.Landscape
renderer.RenderingOptions.CssMediaType = IronPdf.Rendering.PdfCssMediaType.Print
Dim html As String = File.ReadAllText("input.html")
Dim pdf = renderer.RenderHtmlAsPdf(html)
pdf.SaveAs("output.pdf")
Console.WriteLine("PDF created with options successfully")
End Sub
End Module
IronPDF, işleme seçeneklerini doğrudan işleyici nesnesinde yapılandırır, bunları her bir API çağrısına ayrı bir seçenekler parametresi olarak iletmek yerine.
Birden Fazla PDF'yi Birleştirme
Api2pdf Uygulaması:
using Api2Pdf;
var client = new Api2Pdf("YOUR_API_KEY");
var pdfUrls = new List<string>
{
"https://example.com/pdf1.pdf",
"https://example.com/pdf2.pdf",
"https://example.com/pdf3.pdf"
};
var request = new PdfMergeRequest { Urls = pdfUrls };
var result = await client.PdfSharp.MergePdfsAsync(request);
if (result.Success)
{
// Download merged PDF from result.FileUrl
}
using Api2Pdf;
var client = new Api2Pdf("YOUR_API_KEY");
var pdfUrls = new List<string>
{
"https://example.com/pdf1.pdf",
"https://example.com/pdf2.pdf",
"https://example.com/pdf3.pdf"
};
var request = new PdfMergeRequest { Urls = pdfUrls };
var result = await client.PdfSharp.MergePdfsAsync(request);
if (result.Success)
{
// Download merged PDF from result.FileUrl
}
Imports Api2Pdf
Dim client As New Api2Pdf("YOUR_API_KEY")
Dim pdfUrls As New List(Of String) From {
"https://example.com/pdf1.pdf",
"https://example.com/pdf2.pdf",
"https://example.com/pdf3.pdf"
}
Dim request As New PdfMergeRequest With {.Urls = pdfUrls}
Dim result = Await client.PdfSharp.MergePdfsAsync(request)
If result.Success Then
' Download merged PDF from result.FileUrl
End If
IronPDF Uygulaması:
using IronPdf;
// Load PDFs from files
var pdf1 = PdfDocument.FromFile("document1.pdf");
var pdf2 = PdfDocument.FromFile("document2.pdf");
var pdf3 = PdfDocument.FromFile("document3.pdf");
// Merge all PDFs
var merged = PdfDocument.Merge(pdf1, pdf2, pdf3);
merged.SaveAs("merged.pdf");
using IronPdf;
// Load PDFs from files
var pdf1 = PdfDocument.FromFile("document1.pdf");
var pdf2 = PdfDocument.FromFile("document2.pdf");
var pdf3 = PdfDocument.FromFile("document3.pdf");
// Merge all PDFs
var merged = PdfDocument.Merge(pdf1, pdf2, pdf3);
merged.SaveAs("merged.pdf");
Imports IronPdf
' Load PDFs from files
Dim pdf1 = PdfDocument.FromFile("document1.pdf")
Dim pdf2 = PdfDocument.FromFile("document2.pdf")
Dim pdf3 = PdfDocument.FromFile("document3.pdf")
' Merge all PDFs
Dim merged = PdfDocument.Merge(pdf1, pdf2, pdf3)
merged.SaveAs("merged.pdf")
IronPDF, URL tabanlı iş akışını ortadan kaldırarak, belgeleri doğrudan kabul eden statik Merge yöntemine sahiptir.
Şifre Koruması Altındaki PDF'ler
Api2pdf Uygulaması:
using Api2Pdf;
var client = new Api2Pdf("YOUR_API_KEY");
// Generate PDF first
var pdfResult = await client.Chrome.HtmlToPdfAsync(new ChromeHtmlToPdfRequest
{
Html = "<h1>Confidential</h1>"
});
// Then add password protection in a second round-trip
var protectedResult = await client.PdfSharp.SetPasswordAsync(new PdfPasswordRequest
{
Url = pdfResult.FileUrl,
OwnerPassword = "secretpassword"
});
using Api2Pdf;
var client = new Api2Pdf("YOUR_API_KEY");
// Generate PDF first
var pdfResult = await client.Chrome.HtmlToPdfAsync(new ChromeHtmlToPdfRequest
{
Html = "<h1>Confidential</h1>"
});
// Then add password protection in a second round-trip
var protectedResult = await client.PdfSharp.SetPasswordAsync(new PdfPasswordRequest
{
Url = pdfResult.FileUrl,
OwnerPassword = "secretpassword"
});
Imports Api2Pdf
Dim client = New Api2Pdf("YOUR_API_KEY")
' Generate PDF first
Dim pdfResult = Await client.Chrome.HtmlToPdfAsync(New ChromeHtmlToPdfRequest With {
.Html = "<h1>Confidential</h1>"
})
' Then add password protection in a second round-trip
Dim protectedResult = Await client.PdfSharp.SetPasswordAsync(New PdfPasswordRequest With {
.Url = pdfResult.FileUrl,
.OwnerPassword = "secretpassword"
})
IronPDF Uygulaması:
using IronPdf;
var renderer = new ChromePdfRenderer();
var pdf = renderer.RenderHtmlAsPdf("<h1>Confidential</h1>");
// Set security in one step
pdf.SecuritySettings.OwnerPassword = "owner123";
pdf.SecuritySettings.UserPassword = "user123";
pdf.SecuritySettings.AllowUserPrinting = PdfPrintSecurity.NoPrint;
pdf.SecuritySettings.AllowUserCopyPasteContent = false;
pdf.SecuritySettings.AllowUserEdits = PdfEditSecurity.NoEdit;
pdf.SaveAs("protected.pdf");
using IronPdf;
var renderer = new ChromePdfRenderer();
var pdf = renderer.RenderHtmlAsPdf("<h1>Confidential</h1>");
// Set security in one step
pdf.SecuritySettings.OwnerPassword = "owner123";
pdf.SecuritySettings.UserPassword = "user123";
pdf.SecuritySettings.AllowUserPrinting = PdfPrintSecurity.NoPrint;
pdf.SecuritySettings.AllowUserCopyPasteContent = false;
pdf.SecuritySettings.AllowUserEdits = PdfEditSecurity.NoEdit;
pdf.SaveAs("protected.pdf");
Imports IronPdf
Dim renderer As New ChromePdfRenderer()
Dim pdf = renderer.RenderHtmlAsPdf("<h1>Confidential</h1>")
' Set security in one step
pdf.SecuritySettings.OwnerPassword = "owner123"
pdf.SecuritySettings.UserPassword = "user123"
pdf.SecuritySettings.AllowUserPrinting = PdfPrintSecurity.NoPrint
pdf.SecuritySettings.AllowUserCopyPasteContent = False
pdf.SecuritySettings.AllowUserEdits = PdfEditSecurity.NoEdit
pdf.SaveAs("protected.pdf")
IronPDF, SecuritySettings özelliği aracılığıyla PDF izinleri üzerinde ayrıntılı kontrol sağlar.
Başlıklar ve Altbilgiler
Api2pdf Uygulaması:
using Api2Pdf;
var client = new Api2Pdf("YOUR_API_KEY");
var result = await client.Chrome.HtmlToPdfAsync(new ChromeHtmlToPdfRequest
{
Html = html,
Options = new ChromeHtmlToPdfOptions
{
DisplayHeaderFooter = true,
HeaderTemplate = "<div style='font-size:10px'>Company Header</div>",
FooterTemplate = "<div style='font-size:10px'>Page <span class='pageNumber'></span></div>"
}
});
using Api2Pdf;
var client = new Api2Pdf("YOUR_API_KEY");
var result = await client.Chrome.HtmlToPdfAsync(new ChromeHtmlToPdfRequest
{
Html = html,
Options = new ChromeHtmlToPdfOptions
{
DisplayHeaderFooter = true,
HeaderTemplate = "<div style='font-size:10px'>Company Header</div>",
FooterTemplate = "<div style='font-size:10px'>Page <span class='pageNumber'></span></div>"
}
});
Imports Api2Pdf
Dim client = New Api2Pdf("YOUR_API_KEY")
Dim result = Await client.Chrome.HtmlToPdfAsync(New ChromeHtmlToPdfRequest With {
.Html = html,
.Options = New ChromeHtmlToPdfOptions With {
.DisplayHeaderFooter = True,
.HeaderTemplate = "<div style='font-size:10px'>Company Header</div>",
.FooterTemplate = "<div style='font-size:10px'>Page <span class='pageNumber'></span></div>"
}
})
IronPDF Uygulaması:
using IronPdf;
var renderer = new ChromePdfRenderer();
// HTML headers and footers with full styling
renderer.RenderingOptions.HtmlHeader = new HtmlHeaderFooter
{
HtmlFragment = "<div style='font-size:10px; text-align:center;'>Company Header</div>",
DrawDividerLine = true
};
renderer.RenderingOptions.HtmlFooter = new HtmlHeaderFooter
{
HtmlFragment = "<div style='font-size:10px; text-align:center;'>Page {page} of {total-pages}</div>",
DrawDividerLine = true
};
var pdf = renderer.RenderHtmlAsPdf(html);
pdf.SaveAs("with-headers.pdf");
using IronPdf;
var renderer = new ChromePdfRenderer();
// HTML headers and footers with full styling
renderer.RenderingOptions.HtmlHeader = new HtmlHeaderFooter
{
HtmlFragment = "<div style='font-size:10px; text-align:center;'>Company Header</div>",
DrawDividerLine = true
};
renderer.RenderingOptions.HtmlFooter = new HtmlHeaderFooter
{
HtmlFragment = "<div style='font-size:10px; text-align:center;'>Page {page} of {total-pages}</div>",
DrawDividerLine = true
};
var pdf = renderer.RenderHtmlAsPdf(html);
pdf.SaveAs("with-headers.pdf");
Imports IronPdf
Dim renderer As New ChromePdfRenderer()
' HTML headers and footers with full styling
renderer.RenderingOptions.HtmlHeader = New HtmlHeaderFooter With {
.HtmlFragment = "<div style='font-size:10px; text-align:center;'>Company Header</div>",
.DrawDividerLine = True
}
renderer.RenderingOptions.HtmlFooter = New HtmlHeaderFooter With {
.HtmlFragment = "<div style='font-size:10px; text-align:center;'>Page {page} of {total-pages}</div>",
.DrawDividerLine = True
}
Dim pdf = renderer.RenderHtmlAsPdf(html)
pdf.SaveAs("with-headers.pdf")
IronPDF, dinamik sayfa numaralandırma için {page} ve {total-pages} gibi yer tutucu belirteçleri destekler. Daha fazla seçenek için başlıklar ve altbilgiler belgelerine bakın.
ASP.NET Core Integration
Api2pdf'in asenkron HTTP deseni, IronPDF'in doğrudan PDF oluşturmasından önemli ölçüde farklıdır.
Api2pdf Deseni:
[ApiController]
public class PdfController : ControllerBase
{
private readonly Api2Pdf _client;
public PdfController()
{
_client = new Api2Pdf("YOUR_API_KEY");
}
[HttpGet("generate")]
public async Task<IActionResult> GeneratePdf()
{
var result = await _client.Chrome.HtmlToPdfAsync(new ChromeHtmlToPdfRequest
{
Html = "<h1>Report</h1>"
});
if (!result.Success)
return BadRequest(result.Error);
// Redirect to download URL
return Redirect(result.FileUrl);
}
}
[ApiController]
public class PdfController : ControllerBase
{
private readonly Api2Pdf _client;
public PdfController()
{
_client = new Api2Pdf("YOUR_API_KEY");
}
[HttpGet("generate")]
public async Task<IActionResult> GeneratePdf()
{
var result = await _client.Chrome.HtmlToPdfAsync(new ChromeHtmlToPdfRequest
{
Html = "<h1>Report</h1>"
});
if (!result.Success)
return BadRequest(result.Error);
// Redirect to download URL
return Redirect(result.FileUrl);
}
}
Imports Microsoft.AspNetCore.Mvc
<ApiController>
Public Class PdfController
Inherits ControllerBase
Private ReadOnly _client As Api2Pdf
Public Sub New()
_client = New Api2Pdf("YOUR_API_KEY")
End Sub
<HttpGet("generate")>
Public Async Function GeneratePdf() As Task(Of IActionResult)
Dim result = Await _client.Chrome.HtmlToPdfAsync(New ChromeHtmlToPdfRequest With {
.Html = "<h1>Report</h1>"
})
If Not result.Success Then
Return BadRequest(result.Error)
End If
' Redirect to download URL
Return Redirect(result.FileUrl)
End Function
End Class
IronPDF Deseni:
[ApiController]
public class PdfController : ControllerBase
{
[HttpGet("generate")]
public IActionResult GeneratePdf()
{
var renderer = new ChromePdfRenderer();
var pdf = renderer.RenderHtmlAsPdf("<h1>Report</h1>");
// Return PDF directly - no download step needed
return File(pdf.BinaryData, "application/pdf", "report.pdf");
}
[HttpGet("generate-async")]
public async Task<IActionResult> GeneratePdfAsync()
{
var renderer = new ChromePdfRenderer();
var pdf = await renderer.RenderHtmlAsPdfAsync("<h1>Report</h1>");
return File(pdf.BinaryData, "application/pdf", "report.pdf");
}
}
[ApiController]
public class PdfController : ControllerBase
{
[HttpGet("generate")]
public IActionResult GeneratePdf()
{
var renderer = new ChromePdfRenderer();
var pdf = renderer.RenderHtmlAsPdf("<h1>Report</h1>");
// Return PDF directly - no download step needed
return File(pdf.BinaryData, "application/pdf", "report.pdf");
}
[HttpGet("generate-async")]
public async Task<IActionResult> GeneratePdfAsync()
{
var renderer = new ChromePdfRenderer();
var pdf = await renderer.RenderHtmlAsPdfAsync("<h1>Report</h1>");
return File(pdf.BinaryData, "application/pdf", "report.pdf");
}
}
Imports Microsoft.AspNetCore.Mvc
<ApiController>
Public Class PdfController
Inherits ControllerBase
<HttpGet("generate")>
Public Function GeneratePdf() As IActionResult
Dim renderer = New ChromePdfRenderer()
Dim pdf = renderer.RenderHtmlAsPdf("<h1>Report</h1>")
' Return PDF directly - no download step needed
Return File(pdf.BinaryData, "application/pdf", "report.pdf")
End Function
<HttpGet("generate-async")>
Public Async Function GeneratePdfAsync() As Task(Of IActionResult)
Dim renderer = New ChromePdfRenderer()
Dim pdf = Await renderer.RenderHtmlAsPdfAsync("<h1>Report</h1>")
Return File(pdf.BinaryData, "application/pdf", "report.pdf")
End Function
End Class
IronPDF, yönlendirme yoluyla indirme desenini ortadan kaldırarak, PDF'yi doğrudan BinaryData veya Stream üzerinden döndürür.
Dependency Injection Yapılandırması
// Program.cs or Startup.cs
public void ConfigureServices(IServiceCollection services)
{
services.AddScoped<IPdfService, IronPdfService>();
}
// IPdfService.cs
public interface IPdfService
{
PdfDocument GenerateFromHtml(string html);
Task<PdfDocument> GenerateFromHtmlAsync(string html);
}
// IronPdfService.cs
public class IronPdfService : IPdfService
{
private readonly ChromePdfRenderer _renderer;
public IronPdfService()
{
_renderer = new ChromePdfRenderer();
_renderer.RenderingOptions.PrintHtmlBackgrounds = true;
_renderer.RenderingOptions.PaperSize = PdfPaperSize.A4;
}
public PdfDocument GenerateFromHtml(string html) =>
_renderer.RenderHtmlAsPdf(html);
public Task<PdfDocument> GenerateFromHtmlAsync(string html) =>
_renderer.RenderHtmlAsPdfAsync(html);
}
// Program.cs or Startup.cs
public void ConfigureServices(IServiceCollection services)
{
services.AddScoped<IPdfService, IronPdfService>();
}
// IPdfService.cs
public interface IPdfService
{
PdfDocument GenerateFromHtml(string html);
Task<PdfDocument> GenerateFromHtmlAsync(string html);
}
// IronPdfService.cs
public class IronPdfService : IPdfService
{
private readonly ChromePdfRenderer _renderer;
public IronPdfService()
{
_renderer = new ChromePdfRenderer();
_renderer.RenderingOptions.PrintHtmlBackgrounds = true;
_renderer.RenderingOptions.PaperSize = PdfPaperSize.A4;
}
public PdfDocument GenerateFromHtml(string html) =>
_renderer.RenderHtmlAsPdf(html);
public Task<PdfDocument> GenerateFromHtmlAsync(string html) =>
_renderer.RenderHtmlAsPdfAsync(html);
}
' Program.vb or Startup.vb
Public Sub ConfigureServices(services As IServiceCollection)
services.AddScoped(Of IPdfService, IronPdfService)()
End Sub
' IPdfService.vb
Public Interface IPdfService
Function GenerateFromHtml(html As String) As PdfDocument
Function GenerateFromHtmlAsync(html As String) As Task(Of PdfDocument)
End Interface
' IronPdfService.vb
Public Class IronPdfService
Implements IPdfService
Private ReadOnly _renderer As ChromePdfRenderer
Public Sub New()
_renderer = New ChromePdfRenderer()
_renderer.RenderingOptions.PrintHtmlBackgrounds = True
_renderer.RenderingOptions.PaperSize = PdfPaperSize.A4
End Sub
Public Function GenerateFromHtml(html As String) As PdfDocument Implements IPdfService.GenerateFromHtml
Return _renderer.RenderHtmlAsPdf(html)
End Function
Public Function GenerateFromHtmlAsync(html As String) As Task(Of PdfDocument) Implements IPdfService.GenerateFromHtmlAsync
Return _renderer.RenderHtmlAsPdfAsync(html)
End Function
End Class
Hata Yönetimi Geçişi
Api2pdf, yanıt nesnesi kontrollerini kullanır. IronPDF, standart .NET istisnalarını kullanır.
Api2pdf Deseni:
var result = await client.Chrome.HtmlToPdfAsync(new ChromeHtmlToPdfRequest { Html = html });
if (!result.Success)
{
Console.WriteLine($"Error: {result.Error}");
return;
}
var result = await client.Chrome.HtmlToPdfAsync(new ChromeHtmlToPdfRequest { Html = html });
if (!result.Success)
{
Console.WriteLine($"Error: {result.Error}");
return;
}
Imports System
Dim result = Await client.Chrome.HtmlToPdfAsync(New ChromeHtmlToPdfRequest With {.Html = html})
If Not result.Success Then
Console.WriteLine($"Error: {result.Error}")
Return
End If
IronPDF Deseni:
try
{
var renderer = new ChromePdfRenderer();
var pdf = renderer.RenderHtmlAsPdf(html);
pdf.SaveAs("output.pdf");
}
catch (IronPdf.Exceptions.IronPdfLicenseException ex)
{
Console.WriteLine($"License error: {ex.Message}");
}
catch (IronPdf.Exceptions.IronPdfRenderingException ex)
{
Console.WriteLine($"Rendering error: {ex.Message}");
}
catch (Exception ex)
{
Console.WriteLine($"Error: {ex.Message}");
}
try
{
var renderer = new ChromePdfRenderer();
var pdf = renderer.RenderHtmlAsPdf(html);
pdf.SaveAs("output.pdf");
}
catch (IronPdf.Exceptions.IronPdfLicenseException ex)
{
Console.WriteLine($"License error: {ex.Message}");
}
catch (IronPdf.Exceptions.IronPdfRenderingException ex)
{
Console.WriteLine($"Rendering error: {ex.Message}");
}
catch (Exception ex)
{
Console.WriteLine($"Error: {ex.Message}");
}
Imports IronPdf.Exceptions
Try
Dim renderer = New ChromePdfRenderer()
Dim pdf = renderer.RenderHtmlAsPdf(html)
pdf.SaveAs("output.pdf")
Catch ex As IronPdfLicenseException
Console.WriteLine($"License error: {ex.Message}")
Catch ex As IronPdfRenderingException
Console.WriteLine($"Rendering error: {ex.Message}")
Catch ex As Exception
Console.WriteLine($"Error: {ex.Message}")
End Try
Performans Karşılaştırması
| Metrik | Api2pdf | IronPDF |
|---|---|---|
| Basit HTML | 2-5 saniye (ağ) | 100-500ms (yerel) |
| Kompleks sayfa | 5-10 saniye | 500ms-2s |
| 100'lük Toplu İşlem | Dakikalar (oran limitleri) | Saniyeler (paralel) |
| Çevrimdışı | Mevcut değil | Tamamen çalışır |
| Soğuk başlatma | None | ~2s (ilk işleme) |
Performans Optimizasyonu İpuçları
// 1. Reuse renderer instance
private static readonly ChromePdfRenderer SharedRenderer = new ChromePdfRenderer();
public PdfDocument GeneratePdf(string html)
{
return SharedRenderer.RenderHtmlAsPdf(html);
}
// 2. Parallel generation
var tasks = htmlDocs.Select(html =>
Task.Run(() => SharedRenderer.RenderHtmlAsPdf(html)));
var results = await Task.WhenAll(tasks);
// 3. Disable unnecessary features for speed
var renderer = new ChromePdfRenderer();
renderer.RenderingOptions.EnableJavaScript = false; // If not needed
renderer.RenderingOptions.WaitFor.RenderDelay(0); // No delay
// 1. Reuse renderer instance
private static readonly ChromePdfRenderer SharedRenderer = new ChromePdfRenderer();
public PdfDocument GeneratePdf(string html)
{
return SharedRenderer.RenderHtmlAsPdf(html);
}
// 2. Parallel generation
var tasks = htmlDocs.Select(html =>
Task.Run(() => SharedRenderer.RenderHtmlAsPdf(html)));
var results = await Task.WhenAll(tasks);
// 3. Disable unnecessary features for speed
var renderer = new ChromePdfRenderer();
renderer.RenderingOptions.EnableJavaScript = false; // If not needed
renderer.RenderingOptions.WaitFor.RenderDelay(0); // No delay
Imports System.Threading.Tasks
' 1. Reuse renderer instance
Private Shared ReadOnly SharedRenderer As New ChromePdfRenderer()
Public Function GeneratePdf(html As String) As PdfDocument
Return SharedRenderer.RenderHtmlAsPdf(html)
End Function
' 2. Parallel generation
Dim tasks = htmlDocs.Select(Function(html) Task.Run(Function() SharedRenderer.RenderHtmlAsPdf(html)))
Dim results = Await Task.WhenAll(tasks)
' 3. Disable unnecessary features for speed
Dim renderer As New ChromePdfRenderer()
renderer.RenderingOptions.EnableJavaScript = False ' If not needed
renderer.RenderingOptions.WaitFor.RenderDelay(0) ' No delay
Yaygın Göç Sorunlarını Giderme
Sorun: PDF,Api2pdfÇıktısından Farklı Görünüyor
Api2pdf'in Başsız Chrome ayarlarını eşleştirin:
var renderer = new ChromePdfRenderer();
renderer.RenderingOptions.CssMediaType = PdfCssMediaType.Print;
renderer.RenderingOptions.PrintHtmlBackgrounds = true;
renderer.RenderingOptions.ViewPortWidth = 1280;
renderer.RenderingOptions.EnableJavaScript = true;
renderer.RenderingOptions.WaitFor.RenderDelay(1000);
var renderer = new ChromePdfRenderer();
renderer.RenderingOptions.CssMediaType = PdfCssMediaType.Print;
renderer.RenderingOptions.PrintHtmlBackgrounds = true;
renderer.RenderingOptions.ViewPortWidth = 1280;
renderer.RenderingOptions.EnableJavaScript = true;
renderer.RenderingOptions.WaitFor.RenderDelay(1000);
Dim renderer = New ChromePdfRenderer()
renderer.RenderingOptions.CssMediaType = PdfCssMediaType.Print
renderer.RenderingOptions.PrintHtmlBackgrounds = True
renderer.RenderingOptions.ViewPortWidth = 1280
renderer.RenderingOptions.EnableJavaScript = True
renderer.RenderingOptions.WaitFor.RenderDelay(1000)
Sorun: Harici Kaynaklar Yüklenemiyor
Kaynak yükleme zaman aşımı yapılandırmasını ayarlayın:
var renderer = new ChromePdfRenderer();
renderer.RenderingOptions.WaitFor.AllFontsLoaded(timeout: 10000);
renderer.RenderingOptions.WaitFor.NetworkIdle(timeout: 10000);
// Or use base URL for relative paths
var pdf = renderer.RenderHtmlAsPdf(html, baseUrl: "https://example.com/");
var renderer = new ChromePdfRenderer();
renderer.RenderingOptions.WaitFor.AllFontsLoaded(timeout: 10000);
renderer.RenderingOptions.WaitFor.NetworkIdle(timeout: 10000);
// Or use base URL for relative paths
var pdf = renderer.RenderHtmlAsPdf(html, baseUrl: "https://example.com/");
Dim renderer = New ChromePdfRenderer()
renderer.RenderingOptions.WaitFor.AllFontsLoaded(timeout:=10000)
renderer.RenderingOptions.WaitFor.NetworkIdle(timeout:=10000)
' Or use base URL for relative paths
Dim pdf = renderer.RenderHtmlAsPdf(html, baseUrl:="https://example.com/")
Sorun: Büyük PDF Dosya Boyutları
Oluşturma sonrasında resimleri sıkıştırın:
renderer.RenderingOptions.ImageQuality = 80;
// Or compress after generation
pdf.CompressImages(quality: 75);
pdf.SaveAs("compressed.pdf");
renderer.RenderingOptions.ImageQuality = 80;
// Or compress after generation
pdf.CompressImages(quality: 75);
pdf.SaveAs("compressed.pdf");
renderer.RenderingOptions.ImageQuality = 80
' Or compress after generation
pdf.CompressImages(quality:=75)
pdf.SaveAs("compressed.pdf")
Taşınma Sonrası Kontrollistesi
Kod taşımasını tamamladıktan sonra, aşağıdakileri doğrulayın:
- PDF çıktı kalitesinin beklentilere uygun olmasını doğrulayın
- Tüm kenar durumlarını test edin (büyük belgeler, özel karakterler)
- Performans metriklerini doğrulayın (önemli bir iyileşme görmelisiniz)
- Docker yapılandırmalarını güncelleyin mümkünse -Api2pdfportal hesabını ve API anahtarlarını kaldırın
- İzlemeyi güncelleyin (artık API gecikme izleme gerekmez)
- Ekibiniz için yeni kalıpları belgeleyin
- CI/CD yapılarını güncelleyin
Ek Kaynaklar
Api2pdf'den IronPDF'e geçiş, PDF üretiminizi buluta bağımlı, dönüşüm başına maliyet modelinden yerel, tek seferlik yatırımlı hale dönüştürür. Hassas belgeleriniz kendi altyapınızda kalır, gecikme saniyelerden milisaniyelere düşer ve bu kritik uygulama yeteneği için satıcı bağımlılığını ortadan kaldırırsınız.

