.NET 8 için Belge Üretim Kütüphanesi Seçimi
.NET 8, birçok geleneksel PDF kütüphanesiyle uyumluluğu bozan çalışma zamanı değişiklikleri sundu. System.Drawing.Common, Windows dışı platformlarda kullanımdan kaldırılmaktadır. Native AOT, yansıma ağırlıkta kütüphaneler üzerinde yeni sınırlamalar getirir ve kapsayıcı öncelikli dağıtım modeli, Windows geliştirme makinelerinde ortaya çıkmayan bağımlılık sorunlarını açığa çıkarır. Kütüphaneler, .NET Framework veya hatta .NET 6'da çalışırken .NET 8'de NU1202, DllNotFoundException veya PlatformNotSupportedException hataları ile başarısız olabilir.
Bu makale, hangi PDF kütüphanelerinin .NET 8 ile çalıştığını belgelemekte, uyumsuz kütüphanelerle karşılaşılan specific hataları göstermekte ve Docker ve Azure Functions için dağıtım yapılandırmaları sağlamaktadır.
Hızlı Başlangıç: .NET 8'de HTML'den PDF Oluşturma
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 üzerinden yükleyin: Install-Package IronPdf. Ek yapılandırma olmadan net8.0 hedefler. Platforma özgü ayarlama gerektirmeden Windows, Linux, macOS, Docker ve Azure'a dağıtımlar.
.NET 8'de Eski PDF Kütüphaneleri Neden Başarısız Oluyor?
iText— .NET 8 ile Uyumsuz
iText (iText'in orijinal .NET portu) 2018'den beri güncellenmemiştir. Sadece .NET Framework'ü hedefler:
hata NU1202: Paket iTextSharp 5.5.13 net8.0 ile uyumlu değilGeçiş yolu, farklı bir API'ye sahip olan ve ya AGPL uyumluluğu (tüm uygulamanızı açık kaynağa dönüştürün) ya da ticari lisanslama gerektiren iText'tir. Fiyatlandırma yayınlanmamış — üçüncü taraf verileri $15,000–$210,000/yıl öneriyor.
wkhtmltopdf Çevreleyicileri — .NET 8'de DLL Yükleme Hataları
Wkhtmltopdf etrafında C# çevreleyicileri (DinkToPdf, Rotativa, NReco.PdfGenerator) .NET 8'deki dağıtım modeliyle yalnızca platforma özgü hatalar ile başarısız oluyor:
DinkToPdf — yerel kütüphane bulunamadı:
System.DllNotFoundException: 'libwkhtmltox' DLL'i yüklenemediRotativa.AspNetCore — .NET 8'in kapsayıcı öncelikli dağıtımıyla çelişen manuel ikili yol yapılandırması gerektiriyor:
// 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 derlemeyi yükleyemediBu hatalar daha derin bir sorunu yansıtıyor: wkhtmltopdf, Temmuz 2024'te arşivlendi yamalanmamış CVE'lerle. Yerel binary mimarisi .NET 8'in platform algılama iyileştirmelerinin öncesinde geldi. Hiçbir düzeltme yok — sadece farklı bir kütüphaneye geçiş var.
PDFSharp— Linux'ta System.Drawing.Common Başarısızlıkları
PDFSharp, Microsoft'un .NET 6'da Windows dışı platformlar için kullanımdan kaldırdığı System.Drawing.Common'a bağlıdır. .NET 8'de, Linux veya Docker'a dağıtıldığında ç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ırmak için çalışmıştır, ancak 2026 başı itibariyle platformlar arası destek hala tamamlanmamıştır. Sadece Windows dağıtımları için PDFSharp, .NET 8 ile çalışır. Linux, Docker veya bulut dağıtımları için güvenilir değildir.
.NET 8 ile Hangi PDF Kütüphaneleri Çalışır?
IronPDF— Tam .NET 8 Desteği, Çapraz Platform
IronPDF, gömülü Chromium render ile yerel olarak net8.0 hedefler. System.Drawing.Common bağımlılığı yok, yerel binary yönetimi yok, platforma özel yapılandırma yok.
Minimal API entegrasyonu (ana .NET 8 modeli):
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()Controller pattern kullanan ekipler için, aynı kod bir controller işleminde çalışır — RenderHtmlAsPdf, .BinaryData ile baytlara dönüştürebileceğiniz bir PdfDocument döndürür.
Lisanslama: Süresiz lisans, $2,998'dan başlar (Lite — 1 geliştirici, 1 proje). Professional: $1,499 (10 geliştirici). Enterprise: $2,999 (sınırsız). ironpdf.com adresinde yayınlanmıştır.
QuestPDF— .NET 8 Uyumlu, HTML Yok
QuestPDF, platform bağımlılıkları olmadan .NET 8 ile çalışır. Akıcı C# API'si belgeleri programatik olarak oluşturur — HTML ayrıştırıcı, CSS motoru, 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. İş akışınız HTML şablonları kullanıyorsa (Razor görünümleri, pano dışa aktarımları, web içerik arşivi), farklı bir kütüphaneye ihtiyacınız var. Topluluk Lisansı, yıllık $1M brüt gelir altındaki işletmeleri kapsar; bu eşiği geçerseniz, ticari lisans gereklidir.
iText— .NET 8 Uyumlu, AGPL Lisanslı
iText (iText'in ardılı) .NET 8'i destekler. pdfHTML eklentisi, özel bir ayrıştırıcı ile HTML-to-PDF dönüşümü sağlar — bir tarayıcı motoru değildir, bu nedenle modern CSS özellikleri (Flexbox, Grid) doğru şekilde rendere edilmez.
Lisanslama: AGPL açık kaynak kullanımı için, ticarî uygulamalar için ticarî lisanslama (abonelik, fiyat açıklanmadı).iText2024'te abonelik bazlı ticarî lisansa geçiş yaptı.
Docker Dağıtımı
Standart Debian Görüntüsü (Ö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
#IronPDFworks 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 Görüntüsü (Daha Küçük Bir Kapasite)
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 görüntüsü hiçbir ek paket gerektirmez. Alpine görüntüsü daha küçüktür ama açıkça Chromium kütüphane kurulumu gerektirir. Çoğu dağıtım için, standart Debian görüntüsü daha basit ve daha güvenilir.
Azure Functions (İzole İşçi)
.NET 8 Azure Functions izole işçi modelini kullanır. IronPDF, isteğe bağlı PDF üretimi 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 düşüncesi: IronPDF'in Chromium binary'si konuşlanma paketine ~200MB ekler. Azure Functions tüketim planının 1.5GB dağıtım boyutu sınırı vardır — toplam paket boyutunuzu doğrulayın. Premium veya Adanmış planlar için, bu sınır geçerli değil. İlk PDF üretimi için soğuk başlatma gecikmesi, Chromium başlatılırken 2–5 saniyedir.
Yerel AOT Uyumluluğu
.NET 8, Native AOT desteğini genişletti, ancak PDF kütüphaneleri temel sınırlamalarla karşı karşıya. Chromium tabanlı kütüphaneler (IronPDF, Puppeteer Sharp) AOT derlenemez çünkü tarayıcı süreçlerini gömüyor veya çalıştırıyorlar. iText, kırpma ile çelişen kapsamlı bir yansıma kullanır.
Mevcut durum <PublishAot>true</PublishAot> ile:
| Kütüphane | AOT Durumu | Sebep |
|---|---|---|
| IronPDF | Uyumsuz | Chromium çalışma zamanı gömüyor |
| iText | Uyumsuz | Ağır yansıma, dinamik kod üretimi |
| QuestPDF | Kısmi (TrimMode=partial ile) | Bazı yansıma kullanımı |
| PDFSharp | Uyumsuz | System.Drawing.Common bağımlılığı |
Eğer Native AOT kesin bir gereklilikse,QuestPDFve TrimMode=partial en yakın seçenek olup, sadece programatik belge üretimi için geçerlidir, HTML dönüşümü için değil. HTML-PDF senaryoları için, AOT şu anda hiçbir kütüphane ile uygulanabilir değil.
Lisans Karşılaştırması
| Kütüphane | Model | Maliyet | .NET 8 Desteği |
|---|---|---|---|
| IronPDF | Süresiz | $2,998 (Lite) / 1.499 $ (Pro) / 2.999 $ (Enterprise) | Tam |
| iText | AGPL veya Abonelik | Yayınlanmamış ($15K–$210K/yıl tahmini) | Tam |
| QuestPDF | Topluluk / Ticari | Ücretsiz <$1M gelir, sonra ticari | Tam |
| PDFSharp | MIT (ücretsiz) | $0 | Yalnızca Windows (Linux tamamlanmamış) |
| Aspose.PDF | Geliştirici başına | ~$999+ | Tam (Linux bellek sorunları) |
.NET 9 İleri Uyumluluk
.NET 9 (Kasım 2025'te yayına çıktı), .NET 8'de belirtilmiş olan desenleri devam ettiriyor. .NET 8 ile çalışan kütüphaneler genel olarak değişiklik yapmadan .NET 9 ile çalışır. .NET 9'un PDF üretimi için ilgili başlıca eklemeleri ARM64 performansı iyileştirmeleri (Apple Silicon ve AWS Graviton üzerinde Chromium tabanlı renderden faydalanır) ve devam eden Yerel AOT geliştirmeleri (ancak PDF kütüphaneleri için temel sınırlamalar devam ediyor).
.NET 9'u hedefliyorsanız 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 özel sorunları olan kütüphaneler (Linux'ta PDFSharp, libgdiplus ile Aspose), .NET 9'da bu sorunları çözmeleri pek olası değildir çünkü altta yatan bağımlılık kullanımdan kaldırma kalıcıdır.
Geçiş Rehberi
iText'ten 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 Çevreleyicilerinden IronPDF'e Geçiş
// 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.BinaryDataHer iki durumda da API yüzeyi daha basittir. Ana geçiş maliyeti, çıktının beklentilere uygun olduğunu doğrulamak için mevcut HTML şablonlarınızı yeni render motoruna karşı test etmenizdir.
Tavsiye
.NET 8 projeleri için HTML-PDF dönüşümü gerekmektedir: IronPDF, yerleşik Chromium render işlemiyle yapılandırma olmaksızın çapraz platform olarak çalışır. Docker dağıtımını, Azure Functions'ını ve Linux kapsayıcılarını kutudan çıktığı gibi kullanır.
.NET 8 projeleri için verilerden programatik olarak belge oluşturuluyorsa: QuestPDF'nin akıcı API'si iyi tasarlanmış ve .NET 8 uyumlu, Topluluk Lisansı çoğu girişim ve küçük ekipleri kapsar.
Windows'ta PDF işlemleri (birleştirme, ayırma, formlar) için: Dağıtım hedefiniz sadece Windows ise,PDFSharpgeçerli kalır.
iText'ten (uyumlu değildir), wkhtmltopdf sarmalayıcılardan (arşivlenmiş, CVE'ler) ve çapraz platform dağıtım için System.Drawing.Common'a bağlı herhangi bir kütüphaneden kaçının.
