Belge Üretim Kütüphanesi Seçimi .NET 8 için
.NET 8, birçok geleneksel PDF kütüphanesi ile uyumluluğu bozan çalışma zamanı değişiklikleri getirdi. System.Drawing.Common, Windows dışı platformlarda kullanım dışı bırakılmıştır, Native AOT, yansıma ağırlıklı kütüphanelere yeni kısıtlamalar getirir ve konteyner öncelikli dağıtım modeli, Windows geliştirme makinelerinde ortaya çıkmayan bağımlılık sorunlarını açığa çıkarır. Kutuphanaler .NET Framework veya hatta .NET 6'da calistiysa, .NET 8'de NU1202, DllNotFoundException veya PlatformNotSupportedException hatalariyla basarisiz olabilir.
Bu makale, hangi PDF kütüphanelerinin .NET 8 ile çalıştığını, uyumsuz kütüphanelerle karşılaşacağınız belirli hataları ve Docker ve Azure Functions için dağıtım yapılandırmalarını belgeler.
Başlangıç Kılavuzu: .NET 8'de HTML'den PDF Üretin
using IronPdf;
var renderer = new ChromePdfRenderer();
renderer.RenderingOptions.PaperSize = IronPdf.Rendering.PdfPaperSize.A4;
var pdf = renderer.RenderHtmlAsPdf(@"
<html>
<head><style>
body { font-family: 'Segoe UI', sans-serif; padding: 40px; }
h1 { color: #2563eb; }
table { width: 100%; border-collapse: collapse; margin-top: 20px; }
th { background: #2563eb; color: white; padding: 12px; text-align: left; }
td { padding: 10px; border-bottom: 1px solid #e5e7eb; }
</style></head>
<body>
<h1>Q4 Report</h1>
<table>
<tr><th>Metric</th><th>Value</th><th>Change</th></tr>
<tr><td>Revenue</td><td>$1.2M</td><td>+12%</td></tr>
<tr><td>Users</td><td>45,230</td><td>+23%</td></tr>
</table>
</body></html>");
pdf.SaveAs("report.pdf");using IronPdf;
var renderer = new ChromePdfRenderer();
renderer.RenderingOptions.PaperSize = IronPdf.Rendering.PdfPaperSize.A4;
var pdf = renderer.RenderHtmlAsPdf(@"
<html>
<head><style>
body { font-family: 'Segoe UI', sans-serif; padding: 40px; }
h1 { color: #2563eb; }
table { width: 100%; border-collapse: collapse; margin-top: 20px; }
th { background: #2563eb; color: white; padding: 12px; text-align: left; }
td { padding: 10px; border-bottom: 1px solid #e5e7eb; }
</style></head>
<body>
<h1>Q4 Report</h1>
<table>
<tr><th>Metric</th><th>Value</th><th>Change</th></tr>
<tr><td>Revenue</td><td>$1.2M</td><td>+12%</td></tr>
<tr><td>Users</td><td>45,230</td><td>+23%</td></tr>
</table>
</body></html>");
pdf.SaveAs("report.pdf");Imports IronPdf
Dim renderer As New ChromePdfRenderer()
renderer.RenderingOptions.PaperSize = IronPdf.Rendering.PdfPaperSize.A4
Dim pdf = renderer.RenderHtmlAsPdf("
<html>
<head><style>
body { font-family: 'Segoe UI', sans-serif; padding: 40px; }
h1 { color: #2563eb; }
table { width: 100%; border-collapse: collapse; margin-top: 20px; }
th { background: #2563eb; color: white; padding: 12px; text-align: left; }
td { padding: 10px; border-bottom: 1px solid #e5e7eb; }
</style></head>
<body>
<h1>Q4 Report</h1>
<table>
<tr><th>Metric</th><th>Value</th><th>Change</th></tr>
<tr><td>Revenue</td><td>$1.2M</td><td>+12%</td></tr>
<tr><td>Users</td><td>45,230</td><td>+23%</td></tr>
</table>
</body></html>")
pdf.SaveAs("report.pdf")NuGet ile yukleyin: Install-Package IronPdf. Ek bir konfigurasyon olmadan net8.0 hedefler. Windows, Linux, macOS, Docker ve Azure'a platforma özgü ayar olmadan dağıtır.
Neden Eski PDF Kütüphaneleri .NET 8'de Başarısız Oluyor?
iTextSharp — .NET 8 ile Uyumlu Değil
iTextSharp (iText'in orijinal .NET portu) 2018'den beri güncellenmemiştir. Yalnızca .NET Framework hedeflenmiştir:
hata NU1202: Paket iTextSharp 5.5.13 net8.0 ile uyumlu değilGeçiş yolu iText 7'dir, ki bu farklı bir API'ye sahiptir ve ya AGPL uyumluluğu (tüm uygulamanızı açık kaynak yapın) ya da ticari lisanslama gerektirir. Fiyatlandırma yayınlanmamıştır — üçüncü taraf veriler $15,000–$210,000/yıl öneriyor.
wkhtmltopdf Sarmalayıcılar — .NET 8'de DLL Yükleme Hataları
Wkhtmltopdf etrafındaki C# sarmalayıcılar (DinkToPdf, Rotativa, NReco.PdfGenerator), .NET 8'in dağıtım modeline özgü platform hatalarıyla başarısız oluyor:
DinkToPdf — yerel kütüphane bulunamadı:
System.DllNotFoundException: DLL 'libwkhtmltox' yuklenemediRotativa.AspNetCore — .NET 8'in konteyner öncelikli dağıtımıyla çakışan el ile ikili yol yapılandırması gerektirir:
// This pattern requires deploying wkhtmltopdf binaries alongside your app
// and breaks in Docker containers without explicit path configuration
RotativaConfiguration.Setup(env.WebRootPath, "wkhtmltopdf");// This pattern requires deploying wkhtmltopdf binaries alongside your app
// and breaks in Docker containers without explicit path configuration
RotativaConfiguration.Setup(env.WebRootPath, "wkhtmltopdf");' This pattern requires deploying wkhtmltopdf binaries alongside your app
' and breaks in Docker containers without explicit path configuration
RotativaConfiguration.Setup(env.WebRootPath, "wkhtmltopdf")TuesPechkin / NReco — mimari uyumsuzluk:
System.BadImageFormatException: Dosya veya bütünlük yüklenemediBu hatalar daha derin bir sorunu yansıtıyor: wkhtmltopdf Temmuz 2024'te arşivlendi ve yamanmamış CVE'ler içeriyordu. Yerel ikili mimari, .NET 8'in platform algılama iyileştirmelerinden önce gelmektedir. Bir çözüm yok — sadece başka bir kütüphaneye geçmelisiniz.
PdfSharp — Linux'ta System.Drawing.Common Hataları
PdfSharp, .NET 6'da Microsoft tarafından Windows dışı platformlarda kullanım dışı bırakılan System.Drawing.Common'a bağımlıdır. .NET 8'de bu, Linux veya Docker'a dağıtılırken çalışma zamanı hatalarına neden olur:
using PdfSharp.Pdf;
using PdfSharp.Drawing;
var document = new PdfDocument();
// PlatformNotSupportedException on Linux:
// System.Drawing.Common is not supported on this platformusing PdfSharp.Pdf;
using PdfSharp.Drawing;
var document = new PdfDocument();
// PlatformNotSupportedException on Linux:
// System.Drawing.Common is not supported on this platformImports PdfSharp.Pdf
Imports PdfSharp.Drawing
Dim document As New PdfDocument()
' PlatformNotSupportedException on Linux:
' System.Drawing.Common is not supported on this platformPdfSharp 6.x, bu bağımlılığı kaldırma üzerinde çalışıyor, ancak 2026 yılının başı itibarıyla çapraz platform desteği hala eksik. Yalnızca Windows dağıtımları için PdfSharp, .NET 8 ile çalışır. Linux, Docker veya bulut dağıtımları için güvenilmezdir.
Hangi PDF Kütüphaneleri .NET 8 ile Çalışır?
IronPDF — Tam .NET 8 Desteği, Çapraz Platform
IronPDF, gomulu Chromium rendering ile dogal olarak net8.0 hedef alir. System.Drawing.Common bağımlılığı yok, yerel ikili yönetimi yok, platforma özgü yapılandırma yok.
Minimal API entegrasyonu (birincil .NET 8 deseni):
using IronPdf;
var builder = WebApplication.CreateBuilder(args);
var app = builder.Build();
app.MapGet("/invoice/{id}/pdf", async (int id, InvoiceService service) =>
{
var invoice = await service.GetInvoiceAsync(id);
var renderer = new ChromePdfRenderer();
var pdf = renderer.RenderHtmlAsPdf(invoice.ToHtml());
return Results.File(pdf.BinaryData, "application/pdf", $"invoice-{id}.pdf");
});
app.Run();using IronPdf;
var builder = WebApplication.CreateBuilder(args);
var app = builder.Build();
app.MapGet("/invoice/{id}/pdf", async (int id, InvoiceService service) =>
{
var invoice = await service.GetInvoiceAsync(id);
var renderer = new ChromePdfRenderer();
var pdf = renderer.RenderHtmlAsPdf(invoice.ToHtml());
return Results.File(pdf.BinaryData, "application/pdf", $"invoice-{id}.pdf");
});
app.Run();Imports IronPdf
Dim builder = WebApplication.CreateBuilder(args)
Dim app = builder.Build()
app.MapGet("/invoice/{id}/pdf", Async Function(id As Integer, service As InvoiceService)
Dim invoice = Await service.GetInvoiceAsync(id)
Dim renderer = New ChromePdfRenderer()
Dim pdf = renderer.RenderHtmlAsPdf(invoice.ToHtml())
Return Results.File(pdf.BinaryData, "application/pdf", $"invoice-{id}.pdf")
End Function)
app.Run()Kontrolor paternini kullanan takimlar icin, ayni kod bir kontrolor aksiyonu icinde calisir — RenderHtmlAsPdf bir PdfDocument dondurur ve bunu .BinaryData ile byte'lara dönüştürebilirsiniz.
Lisanslama: $749'dan başlayan süresiz lisans (Lite — 1 geliştirici, 1 proje). Profesyonel: $1,499 (10 geliştirici). Kurumsal: $2,999 (sınırsız). ironpdf.com adresinde yayınlandı.
QuestPDF — .NET 8 ile Uyumlu, HTML Yok
QuestPDF, platforma bağımlılıklar olmadan .NET 8 ile çalışır. Fluent C# API'si belgeleri programlı olarak oluşturur — HTML ayrıştırıcısı yok, CSS motoru yok, tarayıcı motoru yok:
using QuestPDF.Fluent;
using QuestPDF.Infrastructure;
QuestPDF.Settings.License = LicenseType.Community; // Free under $1M revenue
Document.Create(container =>
{
container.Page(page =>
{
page.Size(PageSizes.A4);
page.Margin(2, Unit.Centimetre);
page.Content().Column(col =>
{
col.Item().Text("Q4 Report").FontSize(24).Bold();
col.Item().Table(table =>
{
table.ColumnsDefinition(c => { c.RelativeColumn(2); c.RelativeColumn(1); c.RelativeColumn(1); });
table.Header(h =>
{
h.Cell().Text("Metric").Bold();
h.Cell().Text("Value").Bold();
h.Cell().Text("Change").Bold();
});
table.Cell().Text("Revenue"); table.Cell().Text("$1.2M"); table.Cell().Text("+12%");
table.Cell().Text("Users"); table.Cell().Text("45,230"); table.Cell().Text("+23%");
});
});
});
}).GeneratePdf("report.pdf");using QuestPDF.Fluent;
using QuestPDF.Infrastructure;
QuestPDF.Settings.License = LicenseType.Community; // Free under $1M revenue
Document.Create(container =>
{
container.Page(page =>
{
page.Size(PageSizes.A4);
page.Margin(2, Unit.Centimetre);
page.Content().Column(col =>
{
col.Item().Text("Q4 Report").FontSize(24).Bold();
col.Item().Table(table =>
{
table.ColumnsDefinition(c => { c.RelativeColumn(2); c.RelativeColumn(1); c.RelativeColumn(1); });
table.Header(h =>
{
h.Cell().Text("Metric").Bold();
h.Cell().Text("Value").Bold();
h.Cell().Text("Change").Bold();
});
table.Cell().Text("Revenue"); table.Cell().Text("$1.2M"); table.Cell().Text("+12%");
table.Cell().Text("Users"); table.Cell().Text("45,230"); table.Cell().Text("+23%");
});
});
});
}).GeneratePdf("report.pdf");Imports QuestPDF.Fluent
Imports QuestPDF.Infrastructure
QuestPDF.Settings.License = LicenseType.Community ' Free under $1M revenue
Document.Create(Sub(container)
container.Page(Sub(page)
page.Size(PageSizes.A4)
page.Margin(2, Unit.Centimetre)
page.Content().Column(Sub(col)
col.Item().Text("Q4 Report").FontSize(24).Bold()
col.Item().Table(Sub(table)
table.ColumnsDefinition(Sub(c)
c.RelativeColumn(2)
c.RelativeColumn(1)
c.RelativeColumn(1)
End Sub)
table.Header(Sub(h)
h.Cell().Text("Metric").Bold()
h.Cell().Text("Value").Bold()
h.Cell().Text("Change").Bold()
End Sub)
table.Cell().Text("Revenue")
table.Cell().Text("$1.2M")
table.Cell().Text("+12%")
table.Cell().Text("Users")
table.Cell().Text("45,230")
table.Cell().Text("+23%")
End Sub)
End Sub)
End Sub)
End Sub).GeneratePdf("report.pdf")QuestPDF, HTML dönüştürmez. Eğer iş akışınız HTML şablonları kullanıyorsa (Razor görünümleri, pano dışa aktarımları, web içeriği arşivleme), farklı bir kütüphaneye ihtiyaç duyarsınız. Toplum Lisansı, yıllık geliri 1 milyon doların altında olan işletmeleri kapsar; bu sınırın üzerinde, ticari lisanslama gereklidir.
iText 7 — .NET 8 ile Uyumlu, AGPL Lisanslı
iText 7 (iTextSharp'ın halefi) .NET 8'i destekler. PdfHTML eklentisi, özel bir ayrıştırıcı ile HTML-to-PDF dönüşümü sağlar — tarayıcı motoru değil, bu nedenle modern CSS özellikleri (Flexbox, Grid) doğru şekilde çalışmaz.
Lisanslama: AGPL açık kaynak kullanımı için, tescilli uygulamalar için ticari lisanslama (abonelik, fiyat bilgisi yayımlanmamıştır) için. iText, 2024 yılında abonelik tabanlı ticari lisanslamaya geçiş yaptı.
Docker Dağıtımı
Standard Debian Image (Önerilen)
FROM mcr.microsoft.com/dotnet/sdk:8.0 AS build
WORKDIR /src
COPY ["MyApp.csproj", "."]
RUN dotnet restore
COPY . .
RUN dotnet publish -c Release -o /app/publish
FROM mcr.microsoft.com/dotnet/aspnet:8.0
WORKDIR /app
# IronPDF works without additional apt-get installs
# Chromium dependencies are handled internally
COPY --from=build /app/publish .
ENV DOTNET_RUNNING_IN_CONTAINER=true
EXPOSE 8080
ENTRYPOINT ["dotnet", "MyApp.dll"]Alpine Image (Daha Küçük Ayak İzi)
FROM mcr.microsoft.com/dotnet/sdk:8.0-alpine AS build
WORKDIR /src
COPY ["MyApp.csproj", "."]
RUN dotnet restore
COPY . .
RUN dotnet publish -c Release -o /app/publish
FROM mcr.microsoft.com/dotnet/aspnet:8.0-alpine
WORKDIR /app
# Alpine requires explicit Chromium dependencies
RUN apk add --no-cache chromium nss freetype harfbuzz ca-certificates ttf-freefont
COPY --from=build /app/publish .
ENTRYPOINT ["dotnet", "MyApp.dll"]Debian imajı, sıfır ek paket gerektirir. Alpine imajı daha küçüktür ama açıkça Chromium kütüphane yüklemesi gerektirir. Çoğu dağıtım için, standart Debian imajı daha basit ve daha güvenilirdir.
Azure İşlevleri (İzole Çalışan)
.NET 8 Azure İşlevleri izole çalışan modelini kullanır. IronPDF, talep üzerine PDF oluşturmak için bu modelle çalışır:
using IronPdf;
using Microsoft.Azure.Functions.Worker;
using Microsoft.Azure.Functions.Worker.Http;
namespace MyApp.Functions;
public class PdfFunctions
{
[Function("GenerateInvoice")]
public async Task<HttpResponseData> GenerateInvoice(
[HttpTrigger(AuthorizationLevel.Function, "post")] HttpRequestData req)
{
var invoice = await req.ReadFromJsonAsync<InvoiceRequest>();
var renderer = new ChromePdfRenderer();
var pdf = renderer.RenderHtmlAsPdf(BuildInvoiceHtml(invoice));
var response = req.CreateResponse(System.Net.HttpStatusCode.OK);
response.Headers.Add("Content-Type", "application/pdf");
response.Headers.Add("Content-Disposition",
$"attachment; filename=invoice-{invoice.Id}.pdf");
await response.Body.WriteAsync(pdf.BinaryData);
return response;
}
private string BuildInvoiceHtml(InvoiceRequest invoice)
{
return $@"<html><body>
<h1>Invoice #{invoice.Id}</h1>
<p>Amount: ${invoice.Amount:F2}</p>
</body></html>";
}
}
public record InvoiceRequest(string Id, decimal Amount);using IronPdf;
using Microsoft.Azure.Functions.Worker;
using Microsoft.Azure.Functions.Worker.Http;
namespace MyApp.Functions;
public class PdfFunctions
{
[Function("GenerateInvoice")]
public async Task<HttpResponseData> GenerateInvoice(
[HttpTrigger(AuthorizationLevel.Function, "post")] HttpRequestData req)
{
var invoice = await req.ReadFromJsonAsync<InvoiceRequest>();
var renderer = new ChromePdfRenderer();
var pdf = renderer.RenderHtmlAsPdf(BuildInvoiceHtml(invoice));
var response = req.CreateResponse(System.Net.HttpStatusCode.OK);
response.Headers.Add("Content-Type", "application/pdf");
response.Headers.Add("Content-Disposition",
$"attachment; filename=invoice-{invoice.Id}.pdf");
await response.Body.WriteAsync(pdf.BinaryData);
return response;
}
private string BuildInvoiceHtml(InvoiceRequest invoice)
{
return $@"<html><body>
<h1>Invoice #{invoice.Id}</h1>
<p>Amount: ${invoice.Amount:F2}</p>
</body></html>";
}
}
public record InvoiceRequest(string Id, decimal Amount);Imports IronPdf
Imports Microsoft.Azure.Functions.Worker
Imports Microsoft.Azure.Functions.Worker.Http
Namespace MyApp.Functions
Public Class PdfFunctions
<Function("GenerateInvoice")>
Public Async Function GenerateInvoice(
<HttpTrigger(AuthorizationLevel.Function, "post")> req As HttpRequestData) As Task(Of HttpResponseData)
Dim invoice = Await req.ReadFromJsonAsync(Of InvoiceRequest)()
Dim renderer = New ChromePdfRenderer()
Dim pdf = renderer.RenderHtmlAsPdf(BuildInvoiceHtml(invoice))
Dim response = req.CreateResponse(System.Net.HttpStatusCode.OK)
response.Headers.Add("Content-Type", "application/pdf")
response.Headers.Add("Content-Disposition", $"attachment; filename=invoice-{invoice.Id}.pdf")
Await response.Body.WriteAsync(pdf.BinaryData)
Return response
End Function
Private Function BuildInvoiceHtml(invoice As InvoiceRequest) As String
Return $"<html><body>
<h1>Invoice #{invoice.Id}</h1>
<p>Amount: ${invoice.Amount:F2}</p>
</body></html>"
End Function
End Class
Public Class InvoiceRequest
Public Property Id As String
Public Property Amount As Decimal
Public Sub New(id As String, amount As Decimal)
Me.Id = id
Me.Amount = amount
End Sub
End Class
End NamespaceDağıtım dikkat edilmesi gerekenler: IronPDF'in Chromium ikili dosyası dağıtım paketine ~200MB ekler. Azure İşlevleri tüketim planının 1,5GB dağıtım boyutu sınırı vardır — toplam paket boyutunuzu doğrulayın. Premium veya Ayrılmış planlar için bu sınır geçerli değildir. İlk PDF oluşturma için soğuk başlangıç gecikmesi, Chromium başlatıldığında 2-5 saniyedir.
Native AOT Uyumlu
.NET 8, Native AOT desteğini genişletti, ancak PDF kütüphaneleri temel kısıtlamalarla karşı karşıya. Chromium tabanlı kütüphaneler (IronPDF, Puppeteer Sharp), tarayıcı işlemleri yerleştirdikleri veya çalıştırdıkları için AOT derleyemezler. iText 7, kesme ile çelişen yoğun yansıma kullanıyor.
<PublishAot>true</PublishAot> ile mevcut durum:
| Kütüphane | AOT Durumu | Sebep |
|---|---|---|
| IronPDF | Uyumlu değil | Chromium çalışma zamanını gömer |
| iText 7 | Uyumlu değil | Ağır yansıma, dinamik kod üretimi |
| QuestPDF | Kısmi (TrimMode=partial ile) | Bazı yansıma kullanımları |
| PdfSharp | Uyumlu değil | System.Drawing.Common bağımlılığı |
Native AOT sert bir gereksinimse, TrimMode=partial ileQuestPDFen yakin seçenek — ancak sadece programatik belge oluşturma icin, HTML donusumu icin değil. HTML'den PDF'e senaryolar için, AOT şu anda hiçbir kütüphaneyle mümkün değildir.
Lisans Karşılaştırması
| Kütüphane | Model | Maliyet | .NET 8 Desteği |
|---|---|---|---|
| IronPDF | Sürekli | $749 (Lite) / $1,499 (Pro) / $2,999 (Enterprise) | Tam |
| iText 7 | AGPL veya Abonelik | Yayınlanmadı ($15K–$210K/yıl tahmin) | Tam |
| QuestPDF | Topluluk / Ticari | Ücretsiz <$1M gelir, ardından ticari | Tam |
| PdfSharp | MIT (ücretsiz) | $0 | Sadece Windows (Linux eksik) |
| Aspose.PDF | Geliştirici başına | ~$999+ | Tam (Linux bellek sorunları) |
.NET 9 İleri Uyum Yeteneği
.NET 9 (Kasım 2025'te piyasaya sürüldü), .NET 8'de kurulan kalıpları sürdürür. .NET 8 ile çalışan kütüphaneler genellikle .NET 9 ile değişiklik yapmadan çalışır. .NET 9'un PDF oluşturma ile ilgili başlıca eklemeleri, ARM64 performansındaki iyileştirmeler (Apple Silicon ve AWS Graviton üzerindeki Chromium tabanlı rendere fayda sağlar) ve devam eden Native AOT iyileştirmeleridir (ancak PDF kütüphaneleri için temel kısıtlamalar devam eder).
.NET 9'a yönelik olunuyor veya yükseltmeyi planlıyorsanız, .NET 8 çapraz platform dağıtımını tam olarak destekleyen bir kütüphane seçmek en güvenli yoldur. Platforma özgü sorunları olan kütüphaneler (Linux üzerinde PdfSharp, libgdiplus ile Aspose gibi) .NET 9'da bu sorunları çözmesi olası değildir çünkü temel bağımlılık tasfiyesi kalıcıdır.
Geçiş Rehberi
iTextSharp'tan IronPDF'e
// Before (iTextSharp — doesn't compile against net8.0)
using iTextSharp.text;
using iTextSharp.text.pdf;
var doc = new Document();
PdfWriter.GetInstance(doc, new FileStream("output.pdf", FileMode.Create));
doc.Open();
doc.Add(new Paragraph("Hello World"));
doc.Close();
// After (IronPDF — targets net8.0)
using IronPdf;
var renderer = new ChromePdfRenderer();
var pdf = renderer.RenderHtmlAsPdf("<p>Hello World</p>");
pdf.SaveAs("output.pdf");// Before (iTextSharp — doesn't compile against net8.0)
using iTextSharp.text;
using iTextSharp.text.pdf;
var doc = new Document();
PdfWriter.GetInstance(doc, new FileStream("output.pdf", FileMode.Create));
doc.Open();
doc.Add(new Paragraph("Hello World"));
doc.Close();
// After (IronPDF — targets net8.0)
using IronPdf;
var renderer = new ChromePdfRenderer();
var pdf = renderer.RenderHtmlAsPdf("<p>Hello World</p>");
pdf.SaveAs("output.pdf");Imports iTextSharp.text
Imports iTextSharp.text.pdf
Imports IronPdf
Imports System.IO
' Before (iTextSharp — doesn't compile against net8.0)
Dim doc As New Document()
PdfWriter.GetInstance(doc, New FileStream("output.pdf", FileMode.Create))
doc.Open()
doc.Add(New Paragraph("Hello World"))
doc.Close()
' After (IronPDF — targets net8.0)
Dim renderer As New ChromePdfRenderer()
Dim pdf = renderer.RenderHtmlAsPdf("<p>Hello World</p>")
pdf.SaveAs("output.pdf")wkhtmltopdf Wrapperlerinden IronPDF'e
// Before (DinkToPdf — DllNotFoundException on .NET 8)
var converter = new SynchronizedConverter(new PdfTools());
var doc = new HtmlToPdfDocument
{
Objects = { new ObjectSettings { HtmlContent = html } }
};
var bytes = converter.Convert(doc);
// After (IronPDF — native .NET 8 support)
using IronPdf;
var renderer = new ChromePdfRenderer();
var pdf = renderer.RenderHtmlAsPdf(html);
var bytes = pdf.BinaryData;// Before (DinkToPdf — DllNotFoundException on .NET 8)
var converter = new SynchronizedConverter(new PdfTools());
var doc = new HtmlToPdfDocument
{
Objects = { new ObjectSettings { HtmlContent = html } }
};
var bytes = converter.Convert(doc);
// After (IronPDF — native .NET 8 support)
using IronPdf;
var renderer = new ChromePdfRenderer();
var pdf = renderer.RenderHtmlAsPdf(html);
var bytes = pdf.BinaryData;Imports IronPdf
' Before (DinkToPdf — DllNotFoundException on .NET 8)
Dim converter = New SynchronizedConverter(New PdfTools())
Dim doc = New HtmlToPdfDocument With {
.Objects = {New ObjectSettings With {.HtmlContent = html}}
}
Dim bytes = converter.Convert(doc)
' After (IronPDF — native .NET 8 support)
Dim renderer = New ChromePdfRenderer()
Dim pdf = renderer.RenderHtmlAsPdf(html)
bytes = pdf.BinaryDataAPI yüzeyi her iki durumda da daha basittir. Ana geçiş maliyeti, mevcut HTML şablonlarınızı yeni render ile test ederek çıktının beklentilerle uyumlu olduğunu doğrulamaktır.
Oneri
.NET 8 projeleri için HTML'den PDF'e dönüşüm gerektiren: IronPDF, yapılandırma gerekmeden çapraz platform üzerinde çalışan gömülü Chromium render sağlar. Docker dağıtımını, Azure Functions'ı ve Linux konteynerlerini kutudan çıktığı gibi ele alır.
.NET 8 projeleri için verilerden programatik olarak belgeler oluşturan: QuestPDF'nin akıcı API'si iyi tasarlanmış ve .NET 8 uyumlu, Topluluk Lisansı, çoğu başlangıç ve küçük takımları kapsar.
Windows'ta PDF işleme (birleştirme, bölme, formlar) için: Dağıtım hedefiniz yalnızca Windows isePdfSharphala geçerli.
iTextSharp'tan kaçının (uyumsuz), wkhtmltopdf wrapperlerini (arşivlenmiş, CVE'ler) ve çapraz platform dağıtımı için System.Drawing.Common'e bağımlı olan herhangi bir kütüphaneden kaçının.
