DinkToPdf'ten IronPDF'e C# ile Nasıl Geçilir
DinkToPdf, wkhtmltopdf'yi sardığında, tüm güvenlik açıkları ve teknik sınırlamalarını miras alır. Bu sorunları anlamak, geçiş aciliyetini değerlendirmek için kritiktir.
Kritik Güvenlik Sorunları
DinkToPdf, wkhtmltopdf'den yamalanmamış güvenlik danışmanlıklarını devralır:
- CVE-2022-35583 (SSRF): wkhtmltopdf 0.12.6'ya karşı bir Sunucu Tarafı İstek Sahteciliği tavsiyesi (NVD'de CVSS 9.8; ana proje tarafından bir kütüphane hatası yerine bir uygulama tarafı girdi temizleme sorunu olarak tartışılmaktadır). Her ne olursa olsun, yamalanmayacaktır.
- Arşivlenmiş Proje:
wkhtmltopdf/wkhtmltopdfdeposu 2 Ocak 2023 tarihinde arşivlendi ve tümwkhtmltopdfGitHub organizasyonu 10 Temmuz 2024 tarihinde arşivlendi. - Gelecek Güvenlik Yamaları Yok: Bilinen veya gelecekteki güvenlik açıkları yukarı akışta düzeltilmeyecektir.
Teknik Sorunlar
| Issue | Etki |
|---|---|
| İş Parçacığı Güvenliği | BasicConverter sadece tek iş parçacıklı; SynchronizedConverter çağrıları sıraya koyar ve yük altında hala yerel tarafta çökebilir |
| Yerel İkili Dosyalar | Platforma özel libwkhtmltox ikili dosyaları ile karmaşık dağıtım |
| CSS Sınırlamaları | Eski QtWebKit dalı — modernFlexbox/Gridlayout desteği yok |
| JavaScript | Tutarsız yürütme, süre aşımları |
| İşleme | Eskimiş QtWebKit tabanlı motor (wkhtmltopdf 0.12.6, son sürüm Haziran 2020) |
| Bakım | DinkToPdf 1.0.8 son olarak 18 Nisan 2017'de NuGet'te yayımlandı |
Mimari̇ Karşılaştırma
| Aspekt | DinkToPdf | IronPDF |
|---|---|---|
| Güvenlik | CVE-2022-35583 (SSRF), yamanmamış / üst kaynakta tartışılan | Bilinen kritik CVE yoktur |
| Render Motoru | Eski QtWebKit dalı (wkhtmltopdf 0.12.6) | Modern Krom |
| İş Parçacığı Güvenliği | SynchronizedConverter çağrıları sıraya koyar; native-side crashes reported under load |
Tasarımı gereği iş parçacığı güvenli |
| Yerel Bağımlılıklar | Platforma özel libwkhtmltox ikili dosyaları |
Yönetilen NuGet paketi |
| CSS Desteği | ModernFlexbox/Gridyok | Tam CSS3 |
| JavaScript | Sınırlı, tutarsız | Desteklenen |
| Bakım | DinkToPdf son sürüm Nisan 2017; wkhtmltopdf org Temmuz 2024'te arşivlendi | Aktif olarak sürdürülüyor |
Özellik Karşılaştırması
| Özellik | DinkToPdf | IronPDF |
|---|---|---|
| HTML'den PDF'ye | ✅ (güncel olmayan motor) | ✅ (Chromium) |
| URL'yi PDF'ye çevir | ✅ | ✅ |
| Özel kenar boşlukları | ✅ | ✅ |
| Başlıklar/Altbilgiler | ✅ (sınırlı) | ✅ (tam HTML) |
| CSS3 | ❌ Sınırlı | Tam ✅ |
| Flexbox/Grid | ❌ | ✅ |
| JavaScript | ⚠ Sınırlı | Tam ✅ |
| PDF işleme | ❌ | ✅ |
| Form doldurma | ❌ | ✅ |
| Dijital imzalar | ❌ | ✅ |
| Şifreleme | ❌ | ✅ |
| Filigranlar | ❌ | ✅ |
| Birleştirme/Bölme | ❌ | ✅ |
Migration'a Ön Hazırlık
Ön Koşullar
Ortamınızın bu gereksinimleri karşıladığından emin olun:
- .NET Framework 4.6.2+, .NET Core 3.1+, or .NET 5/6/7/8/9/10
- Visual Studio 2019+ veya C# eklentisi ile VS Code
- NuGet Package Manager erişimi -IronPDF lisans anahtarı (ücretsiz deneme sürümü ironpdf.com adresinde mevcut)
DinkToPdfKullanımını Denetle
TümDinkToPdfreferanslarını belirlemek için bu komutları çözüm dizininde çalıştırın:
# Find allDinkToPdfusages in your codebase
grep -r "using DinkToPdf" --include="*.cs" .
grep -r "SynchronizedConverter\|HtmlToPdfDocument\|ObjectSettings" --include="*.cs" .
# Find NuGet package references
grep -r "DinkToPdf" --include="*.csproj" .
# Find wkhtmltopdf binaries
find . -name "libwkhtmltox*"
# Find allDinkToPdfusages in your codebase
grep -r "using DinkToPdf" --include="*.cs" .
grep -r "SynchronizedConverter\|HtmlToPdfDocument\|ObjectSettings" --include="*.cs" .
# Find NuGet package references
grep -r "DinkToPdf" --include="*.csproj" .
# Find wkhtmltopdf binaries
find . -name "libwkhtmltox*"
Beklenebilecek Kırıcı Değişiklikler
| Değişim | DinkToPdf | IronPDF | Etki |
|---|---|---|---|
| Dönüştürücü | SynchronizedConverter(new PdfTools()) |
ChromePdfRenderer |
Daha basit başlatma |
| Belge | HtmlToPdfDocument |
Doğrudan metod çağrısı | Belge nesnesi yok |
| Ayarlar | GlobalSettings + ObjectSettings |
RenderingOptions |
Tek seçenekler nesnesi |
| Dönüş tipi | byte[] |
PdfDocument |
Daha güçlü nesne |
| İkili | libwkhtmltox.dll/so |
Yok (yönetilen) | Yerel dosyaları kaldırın |
| Thread güvenliği | BasicConverter tek iş parçacıklı; SynchronizedConverter çağrıları sıraya koyar |
Varsayılan olarak parlak iplik | Daha basit kod |
| DI | Singleton gerekli | Herhangi bir yaşam süresi | Esnek |
Adım Adım Geçiş Süreci
1. Adım: NuGet Paketlerini Güncelleyin
DinkToPdf kaldırın ve IronPDF'i yükleyin:
# Remove DinkToPdf
dotnet remove package DinkToPdf
# Install IronPDF
dotnet add package IronPdf
# Remove DinkToPdf
dotnet remove package DinkToPdf
# Install IronPDF
dotnet add package IronPdf
Adım 2: Yerel İkili Dosyaları Kaldırın
Projenizden bu platforma özel dosyaları silin:
libwkhtmltox.dll(Windows)libwkhtmltox.so(Linux)libwkhtmltox.dylib(macOS)
IronPDF'in yerel bağımlıkları yoktur—her şey yönetilen koddur.
3. Adım: Ad Alanı Referanslarını Güncelle
DinkToPdf ad alanlarınıIronPDF ile değiştirin:
// Remove these
using DinkToPdf;
using DinkToPdf.Contracts;
// Add this
using IronPdf;
// Remove these
using DinkToPdf;
using DinkToPdf.Contracts;
// Add this
using IronPdf;
Imports IronPdf
Adım 4: Lisansı Yapılandırın
// Add at application startup (Program.cs or Global.asax)
IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY";
// Add at application startup (Program.cs or Global.asax)
IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY";
' Add at application startup (Program.vb or Global.asax)
IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY"
Tam API Geçiş Referansı
Temel Sınıf Eşlemeleri
| DinkToPdf | IronPDF |
|---|---|
SynchronizedConverter |
ChromePdfRenderer |
BasicConverter |
ChromePdfRenderer |
PdfTools |
Gerekli değil |
HtmlToPdfDocument |
Gerekli değil |
GlobalSettings |
RenderingOptions |
ObjectSettings |
RenderingOptions |
MarginSettings |
Bireysel kenar boşluğu özellikleri |
Genel Ayarlar Eşlemesi
| DinkToPdfGenel Ayarları | IronPDF Eşdeğeri |
|---|---|
ColorMode = ColorMode.Color |
Varsayılan (her zaman renkli) |
Orientation = Orientation.Portrait |
PaperOrientation = PdfPaperOrientation.Portrait |
Orientation = Orientation.Landscape |
PaperOrientation = PdfPaperOrientation.Landscape |
PaperSize = PaperKind.A4 |
PaperSize = PdfPaperSize.A4 |
Margins = new MarginSettings() |
Bireysel kenar boşluğu özellikleri |
Kenar Ayarları Eşlemesi
| DinkToPdfKenarlar | IronPDF Eşdeğeri |
|---|---|
Margins.Top = 10 |
MarginTop = 10 |
Margins.Bottom = 10 |
MarginBottom = 10 |
Margins.Left = 15 |
MarginLeft = 15 |
Margins.Right = 15 |
MarginRight = 15 |
Kod Göç Örnekleri
Temel HTML'den PDF'ye
Temel dönüşüm DinkToPdf'ün ayrıntılı yapılandırmasından IronPDF'ün sadeleştirilmiş API'sine dramatik bir basitleştirme gösterir.
DinkToPdf Uygulaması:
// NuGet: Install-Package DinkToPdf
using DinkToPdf;
using DinkToPdf.Contracts;
using System.IO;
class Program
{
static void Main()
{
var converter = new SynchronizedConverter(new PdfTools());
var doc = new HtmlToPdfDocument()
{
GlobalSettings = {
ColorMode = ColorMode.Color,
Orientation = Orientation.Portrait,
PaperSize = PaperKind.A4,
},
Objects = {
new ObjectSettings() {
HtmlContent = "<h1>Hello World</h1><p>This is a PDF from HTML.</p>",
WebSettings = { DefaultEncoding = "utf-8" }
}
}
};
byte[] pdf = converter.Convert(doc);
File.WriteAllBytes("output.pdf", pdf);
}
}
// NuGet: Install-Package DinkToPdf
using DinkToPdf;
using DinkToPdf.Contracts;
using System.IO;
class Program
{
static void Main()
{
var converter = new SynchronizedConverter(new PdfTools());
var doc = new HtmlToPdfDocument()
{
GlobalSettings = {
ColorMode = ColorMode.Color,
Orientation = Orientation.Portrait,
PaperSize = PaperKind.A4,
},
Objects = {
new ObjectSettings() {
HtmlContent = "<h1>Hello World</h1><p>This is a PDF from HTML.</p>",
WebSettings = { DefaultEncoding = "utf-8" }
}
}
};
byte[] pdf = converter.Convert(doc);
File.WriteAllBytes("output.pdf", pdf);
}
}
Imports DinkToPdf
Imports DinkToPdf.Contracts
Imports System.IO
Module Program
Sub Main()
Dim converter = New SynchronizedConverter(New PdfTools())
Dim doc = New HtmlToPdfDocument() With {
.GlobalSettings = New GlobalSettings() With {
.ColorMode = ColorMode.Color,
.Orientation = Orientation.Portrait,
.PaperSize = PaperKind.A4
},
.Objects = {
New ObjectSettings() With {
.HtmlContent = "<h1>Hello World</h1><p>This is a PDF from HTML.</p>",
.WebSettings = New WebSettings() With {
.DefaultEncoding = "utf-8"
}
}
}
}
Dim pdf As Byte() = converter.Convert(doc)
File.WriteAllBytes("output.pdf", pdf)
End Sub
End Module
IronPDF Uygulaması:
// NuGet: Install-Package IronPdf
using IronPdf;
using System;
class Program
{
static void Main()
{
var renderer = new ChromePdfRenderer();
var pdf = renderer.RenderHtmlAsPdf("<h1>Hello World</h1><p>This is a PDF from HTML.</p>");
pdf.SaveAs("output.pdf");
}
}
// NuGet: Install-Package IronPdf
using IronPdf;
using System;
class Program
{
static void Main()
{
var renderer = new ChromePdfRenderer();
var pdf = renderer.RenderHtmlAsPdf("<h1>Hello World</h1><p>This is a PDF from HTML.</p>");
pdf.SaveAs("output.pdf");
}
}
Imports IronPdf
Imports System
Class Program
Shared Sub Main()
Dim renderer = New ChromePdfRenderer()
Dim pdf = renderer.RenderHtmlAsPdf("<h1>Hello World</h1><p>This is a PDF from HTML.</p>")
pdf.SaveAs("output.pdf")
End Sub
End Class
IronPDF, 20 satırlıkDinkToPdfyapılandırmasını 4 satıra indirir. Hiçbir SynchronizedConverter yok, hiçbir PdfTools yok, hiçbir HtmlToPdfDocument yok, hiçbir ObjectSettings yok—sadece render et ve kaydet. Daha fazla seçenek için, HTML'den PDF'e dokümantasyona bakın.
URL'den PDF'ye Dönüşüm
DinkToPdf Uygulaması:
// NuGet: Install-Package DinkToPdf
using DinkToPdf;
using DinkToPdf.Contracts;
using System.IO;
class Program
{
static void Main()
{
var converter = new SynchronizedConverter(new PdfTools());
var doc = new HtmlToPdfDocument()
{
GlobalSettings = {
ColorMode = ColorMode.Color,
Orientation = Orientation.Portrait,
PaperSize = PaperKind.A4,
},
Objects = {
new ObjectSettings() {
Page = "https://www.example.com",
}
}
};
byte[] pdf = converter.Convert(doc);
File.WriteAllBytes("webpage.pdf", pdf);
}
}
// NuGet: Install-Package DinkToPdf
using DinkToPdf;
using DinkToPdf.Contracts;
using System.IO;
class Program
{
static void Main()
{
var converter = new SynchronizedConverter(new PdfTools());
var doc = new HtmlToPdfDocument()
{
GlobalSettings = {
ColorMode = ColorMode.Color,
Orientation = Orientation.Portrait,
PaperSize = PaperKind.A4,
},
Objects = {
new ObjectSettings() {
Page = "https://www.example.com",
}
}
};
byte[] pdf = converter.Convert(doc);
File.WriteAllBytes("webpage.pdf", pdf);
}
}
Imports DinkToPdf
Imports DinkToPdf.Contracts
Imports System.IO
Module Program
Sub Main()
Dim converter = New SynchronizedConverter(New PdfTools())
Dim doc = New HtmlToPdfDocument() With {
.GlobalSettings = New GlobalSettings() With {
.ColorMode = ColorMode.Color,
.Orientation = Orientation.Portrait,
.PaperSize = PaperKind.A4
},
.Objects = New List(Of ObjectSettings) From {
New ObjectSettings() With {
.Page = "https://www.example.com"
}
}
}
Dim pdf As Byte() = converter.Convert(doc)
File.WriteAllBytes("webpage.pdf", pdf)
End Sub
End Module
IronPDF Uygulaması:
// NuGet: Install-Package IronPdf
using IronPdf;
using System;
class Program
{
static void Main()
{
var renderer = new ChromePdfRenderer();
var pdf = renderer.RenderUrlAsPdf("https://www.example.com");
pdf.SaveAs("webpage.pdf");
}
}
// NuGet: Install-Package IronPdf
using IronPdf;
using System;
class Program
{
static void Main()
{
var renderer = new ChromePdfRenderer();
var pdf = renderer.RenderUrlAsPdf("https://www.example.com");
pdf.SaveAs("webpage.pdf");
}
}
Imports IronPdf
Imports System
Class Program
Shared Sub Main()
Dim renderer = New ChromePdfRenderer()
Dim pdf = renderer.RenderUrlAsPdf("https://www.example.com")
pdf.SaveAs("webpage.pdf")
End Sub
End Class
IronPDF'nin RenderUrlAsPdf, iç içe geçmiş ObjectSettings.Page yapılandırmasını doğrudan bir yöntem çağrısı ile değiştirir. Daha fazla seçenek için, URL'den PDF'e dokümantas bakın.
Manzara ve Kenarlarla Özel Ayarlar
DinkToPdf Uygulaması:
// NuGet: Install-Package DinkToPdf
using DinkToPdf;
using DinkToPdf.Contracts;
using System.IO;
class Program
{
static void Main()
{
var converter = new SynchronizedConverter(new PdfTools());
var doc = new HtmlToPdfDocument()
{
GlobalSettings = {
ColorMode = ColorMode.Color,
Orientation = Orientation.Landscape,
PaperSize = PaperKind.A4,
Margins = new MarginSettings { Top = 10, Bottom = 10, Left = 15, Right = 15 }
},
Objects = {
new ObjectSettings() {
HtmlContent = "<h1>Custom PDF</h1><p>Landscape orientation with custom margins.</p>",
WebSettings = { DefaultEncoding = "utf-8" }
}
}
};
byte[] pdf = converter.Convert(doc);
File.WriteAllBytes("custom.pdf", pdf);
}
}
// NuGet: Install-Package DinkToPdf
using DinkToPdf;
using DinkToPdf.Contracts;
using System.IO;
class Program
{
static void Main()
{
var converter = new SynchronizedConverter(new PdfTools());
var doc = new HtmlToPdfDocument()
{
GlobalSettings = {
ColorMode = ColorMode.Color,
Orientation = Orientation.Landscape,
PaperSize = PaperKind.A4,
Margins = new MarginSettings { Top = 10, Bottom = 10, Left = 15, Right = 15 }
},
Objects = {
new ObjectSettings() {
HtmlContent = "<h1>Custom PDF</h1><p>Landscape orientation with custom margins.</p>",
WebSettings = { DefaultEncoding = "utf-8" }
}
}
};
byte[] pdf = converter.Convert(doc);
File.WriteAllBytes("custom.pdf", pdf);
}
}
Imports DinkToPdf
Imports DinkToPdf.Contracts
Imports System.IO
Module Program
Sub Main()
Dim converter = New SynchronizedConverter(New PdfTools())
Dim doc = New HtmlToPdfDocument() With {
.GlobalSettings = New GlobalSettings() With {
.ColorMode = ColorMode.Color,
.Orientation = Orientation.Landscape,
.PaperSize = PaperKind.A4,
.Margins = New MarginSettings() With {
.Top = 10,
.Bottom = 10,
.Left = 15,
.Right = 15
}
},
.Objects = {
New ObjectSettings() With {
.HtmlContent = "<h1>Custom PDF</h1><p>Landscape orientation with custom margins.</p>",
.WebSettings = New WebSettings() With {
.DefaultEncoding = "utf-8"
}
}
}
}
Dim pdf As Byte() = converter.Convert(doc)
File.WriteAllBytes("custom.pdf", pdf)
End Sub
End Module
IronPDF Uygulaması:
// NuGet: Install-Package IronPdf
using IronPdf;
using IronPdf.Rendering;
using System;
class Program
{
static void Main()
{
var renderer = new ChromePdfRenderer();
renderer.RenderingOptions.PaperOrientation = PdfPaperOrientation.Landscape;
renderer.RenderingOptions.MarginTop = 10;
renderer.RenderingOptions.MarginBottom = 10;
renderer.RenderingOptions.MarginLeft = 15;
renderer.RenderingOptions.MarginRight = 15;
var pdf = renderer.RenderHtmlAsPdf("<h1>Custom PDF</h1><p>Landscape orientation with custom margins.</p>");
pdf.SaveAs("custom.pdf");
}
}
// NuGet: Install-Package IronPdf
using IronPdf;
using IronPdf.Rendering;
using System;
class Program
{
static void Main()
{
var renderer = new ChromePdfRenderer();
renderer.RenderingOptions.PaperOrientation = PdfPaperOrientation.Landscape;
renderer.RenderingOptions.MarginTop = 10;
renderer.RenderingOptions.MarginBottom = 10;
renderer.RenderingOptions.MarginLeft = 15;
renderer.RenderingOptions.MarginRight = 15;
var pdf = renderer.RenderHtmlAsPdf("<h1>Custom PDF</h1><p>Landscape orientation with custom margins.</p>");
pdf.SaveAs("custom.pdf");
}
}
Imports IronPdf
Imports IronPdf.Rendering
Imports System
Module Program
Sub Main()
Dim renderer As New ChromePdfRenderer()
renderer.RenderingOptions.PaperOrientation = PdfPaperOrientation.Landscape
renderer.RenderingOptions.MarginTop = 10
renderer.RenderingOptions.MarginBottom = 10
renderer.RenderingOptions.MarginLeft = 15
renderer.RenderingOptions.MarginRight = 15
Dim pdf = renderer.RenderHtmlAsPdf("<h1>Custom PDF</h1><p>Landscape orientation with custom margins.</p>")
pdf.SaveAs("custom.pdf")
End Sub
End Module
IronPDF'nin RenderingOptions, hem GlobalSettings hem de MarginSettings birleştirilmiş, akıcı bir API ile değiştirir. Daha fazla yapılandırma seçeneği için, işleme seçenekleri dokümantasyonuna bakın.
Kritik Taşıma Notları
Yerel İkili Dosyaları Kaldırın
Temizliğin en önemli adımı wkhtmltopdf yerel ikili dosyalarını kaldırmaktır. IronPDF'in yerel bağımlılıkları yoktur:
# Delete native binaries
rm libwkhtmltox.* 2>/dev/null
# Delete native binaries
rm libwkhtmltox.* 2>/dev/null
Singleton Gerekli Değil
DinkToPdf'ın belgelenmiş kılavuzu SynchronizedConverter'i singleton olarak kaydetmeyi önerir. IronPDF'nin ChromePdfRenderer'i herhangi bir DI ömrü ile iş parçacığı güvenlidir:
//DinkToPdf- typically registered as singleton
services.AddSingleton(typeof(IConverter), new SynchronizedConverter(new PdfTools()));
//IronPDF- any lifetime works
services.AddScoped<ChromePdfRenderer>();
// Or just create inline:
var renderer = new ChromePdfRenderer();
//DinkToPdf- typically registered as singleton
services.AddSingleton(typeof(IConverter), new SynchronizedConverter(new PdfTools()));
//IronPDF- any lifetime works
services.AddScoped<ChromePdfRenderer>();
// Or just create inline:
var renderer = new ChromePdfRenderer();
' DinkToPdf - typically registered as singleton
services.AddSingleton(GetType(IConverter), New SynchronizedConverter(New PdfTools()))
' IronPDF - any lifetime works
services.AddScoped(Of ChromePdfRenderer)()
' Or just create inline:
Dim renderer As New ChromePdfRenderer()
Daha Zengin Dönüş Tipi
DinkToPdf, byte[] döner. IronPDF, manipülasyon yetenekleriyle birlikte PdfDocument döner:
//DinkToPdfreturns byte[]
byte[] pdf = converter.Convert(doc);
File.WriteAllBytes("output.pdf", pdf);
return File(pdf, "application/pdf");
//IronPDF returns PdfDocument
var pdf = renderer.RenderHtmlAsPdf(html);
pdf.SaveAs("output.pdf");
return File(pdf.BinaryData, "application/pdf");
//DinkToPdfreturns byte[]
byte[] pdf = converter.Convert(doc);
File.WriteAllBytes("output.pdf", pdf);
return File(pdf, "application/pdf");
//IronPDF returns PdfDocument
var pdf = renderer.RenderHtmlAsPdf(html);
pdf.SaveAs("output.pdf");
return File(pdf.BinaryData, "application/pdf");
' DinkToPdf returns byte()
Dim pdf As Byte() = converter.Convert(doc)
File.WriteAllBytes("output.pdf", pdf)
Return File(pdf, "application/pdf")
' IronPDF returns PdfDocument
Dim pdfDoc = renderer.RenderHtmlAsPdf(html)
pdfDoc.SaveAs("output.pdf")
Return File(pdfDoc.BinaryData, "application/pdf")
TamCSS3Desteği
DinkToPdf'de başarısız olan modern düzenlemeler IronPDF içinde mükemmel şekilde çalışır:
//DinkToPdf- doesn't work (wkhtmltopdf uses 2015 WebKit)
var html = "<div style='display: flex;'>...</div>"; // Broken!
//IronPDF- full support (modern Chromium)
var html = @"
<div style='display: flex; justify-content: space-between;'>
<div>Left</div>
<div>Right</div>
</div>";
var pdf = renderer.RenderHtmlAsPdf(html); // Works!
//DinkToPdf- doesn't work (wkhtmltopdf uses 2015 WebKit)
var html = "<div style='display: flex;'>...</div>"; // Broken!
//IronPDF- full support (modern Chromium)
var html = @"
<div style='display: flex; justify-content: space-between;'>
<div>Left</div>
<div>Right</div>
</div>";
var pdf = renderer.RenderHtmlAsPdf(html); // Works!
' DinkToPdf- doesn't work (wkhtmltopdf uses 2015 WebKit)
Dim html As String = "<div style='display: flex;'>...</div>" ' Broken!
' IronPDF- full support (modern Chromium)
Dim html As String = "
<div style='display: flex; justify-content: space-between;'>
<div>Left</div>
<div>Right</div>
</div>"
Dim pdf = renderer.RenderHtmlAsPdf(html) ' Works!
Taşınma Sonrası Kontrollistesi
Kod taşımasını tamamladıktan sonra, aşağıdakileri doğrulayın:
- Tüm birim testlerini çalıştırarak PDF oluşturmanın doğru çalıştığını doğrulayın
- Çok iş parçacıklı senaryoları test edin (
SynchronizedConverteryolu çağrıları sıraya koyar ve yük altında yerel tarafta çökme eğilimindeydi) - PDF çıktı kalitesini karşılaştırın (IronPDF'nin Chromium motoru daha iyi işler)
- CSS işleme doğrulayin (Flexbox/Grid artık çalışıyor) -JavaScriptyürütme test edin (IronPDF ile güvenilir)
- CI/CD borularını wkhtmltopdf kurulumunu kaldırmak için güncelleyin
- Güvenlik taramasının geçtiğini doğrulayın (artık CVE-2022-35583 bayrakları yok)
- Docker/dağıtım betiklerinden yerel ikili dosya dağıtımını kaldırın
Ek Kaynaklar
DinkToPdf'dan IronPDF'ye geçiş, düzeltilmemiş wkhtmltopdf saldırı yüzeyini (CVE-2022-35583), serileştirilmiş SynchronizedConverter eşzamanlılık modelini, yerel ikili dağıtımı ve eski QtWebKit render yolunu emekliye ayırır. Modern bir Chromium motoruna geçiş, tamCSS3desteği, güvenilirJavaScriptyürütme ve aktif olarak bakımı yapılan bir kütüphane sunar.

