C#'ta Spire.PDF'den IronPDF'ye Nasıl Geçilir
Spire.PDF'den IronPDF'ye geçmek, PDF oluşturma işlemini sıkça görüntüye dayalı metin üreten bir eski HTML yolundan, gerçek, seçilebilir, aranabilir metin üreten Chromium bandına taşır. Bu kılavuz, Spire.PDF'in HTML işleme ödünleri ve bildirilmiş font yerleştirme sorunlarını kapsayan eksiksiz bir, adım adım geçiş yolu sağlar.
Neden Spire.PDF'den IronPDF'ye Geçmeli
Spire.PDF'i Anlamak
Spire.PDF, .NET geliştiricileri için PDF belgelerini etkili bir şekilde yönetmek üzere tasarlanmış güçlü bir ticari PDF kütüphanesidir. Spire.PDF, özellikle eski uygulamalarda ve E-iceblue araç setinin diğer bileşenleriyle kusursuz entegrasyon kabiliyeti ile programlama topluluğunda öne çıkmıştır.
Ancak, Spire.PDF'nin, gerçek dünyada kullanımını etkileyen bazı temel sorunları var, özellikle HTML'den PDF'ye dönüşüm ve modern web standartları desteği konusunda.
Kritik Teknik Sorunlar
| Issue | Etki | IronPDF Çözümü |
|---|---|---|
| Metin genellikle eski HTML yolunda görüntü olarak işlenir | PDF'ler aramada bulunamaz, erişilemez, metin kopyalanamaz | Gerçek metin işleme |
| Eski yolu üzerine IE/Edge Legacy veya QtWebKit bağımlılığı | Eski işleme, modern CSS sorunları | Paketlenmiş modern Chromium |
| Font yerleştirme sorunları bildirildi | Belgeler diğer sistemlerde yanlış görünür | Güvenilir yazı tipi yönetimi |
| Büyük kurulum izleri | Daha yüksek bellek kullanımı | Paketlenmiş Chromium çalışma zamanı |
| Eski yolda sınırlı CSS | Modern düzenler doğru şekilde görüntülenmiyor | Tam CSS3 desteği |
Temel Sorun: Görüntü Tabanlı PDF'ler
Spire.PDF'in Eski HTML yolunun bilinen bir dezavantajı, HTML belgelerindeki metinleri görüntüler olarak işleme eğilimidir. Bu, metnin seçilebilir veya aranabilir olmadığı PDF'ler üretir — bir arama veya metin etkileşimi gerektiren uygulamalar için bir sınırlamadır.
Spire.PDF'in LoadFromHTML() yöntemini eski motor üzerinde kullandığınızda, bu genellikle metni gerçek metin yerine bitmap görüntüsü olarak işler ve şu sorunları yaratır:
- Metin SEÇİLEMEZ
- Metin ARANAMAZ
- Metin KOPYALANAMAZ
- Ekran okuyucular erişemez (erişilebilirlik ihlali)
- Dosya boyutu ÇOK daha büyük
- Yakınlaştırma pikselleşmeye neden olur
Spire.PDF ve IronPDF Karşılaştırması
| Özellik | Spire.PDF | IronPDF |
|---|---|---|
| HTML'den PDF'ye Oluşturma | Varsayılan olarak Eski IE/QtWebKit; v10.7.21'den bu yana sistem Chrome gerektiren ChromeHtmlConverter'a isteğe bağlı katılım |
Paketlenmiş Chromium (modern, ekstra kurulum gerektirmez) |
| Metin Çıkışı (HTML yolu) | Genellikle eski yol üzerinde görüntü olarak işlenir | Gerçek metin (seçilebilir ve aranabilir) |
| Yazı Tipi İşleme | Eski yolda sorunlar bildirilmiştir | Güvenilir yazı tipi yönetimi |
| CSS3 Desteği | Eski yolda sınırlı | Tam |
| Flexbox/Grid | Eski yolda desteklenmez | Desteklenen |
| JavaScript | Eski yolda sınırlı | Tam ES6+ |
| PDF Erişilebilirliği | Eski yolda zayıf (görüntü tabanlı çıktı) | Etiketlenmiş metin çıkışı |
| API Tasarımı | Birçok aşırı yüklenme, manuel sayfa ayarları | Tek akışkan rendeleme |
| Lisanslama | Freemium/Kömersiyel | Ticari |
Modern .NET üzerinde, IronPDF, gerçek seçilebilir metin yerine görüntüler olarak işleyen Spire.PDF'in HTML'den PDF'ye geçiş ödünlerini ele alır, böylece elde edilen PDF'ler aranabilir ve erişilebilir hale gelir.
Başlamadan Önce
Ön Koşullar
- .NET Ortamı: .NET Framework 4.6.2+ veya .NET Core 3.1+ / .NET 5/6/7/8/9+
- NuGet Erişimi: NuGet paketlerini yükleyebilme
- IronPDF Lisansı: Lisans anahtarınızı ironpdf.com adresinden edinin
NuGet Paket Değişiklikleri
# Remove Spire.PDF
dotnet remove package Spire.PDF
dotnet remove package FreeSpire.PDF # If using free version
# Install IronPDF
dotnet add package IronPdf
# Remove Spire.PDF
dotnet remove package Spire.PDF
dotnet remove package FreeSpire.PDF # If using free version
# Install IronPDF
dotnet add package IronPdf
Lisans Yapılandırması
// Add at application startup
IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY";
// Add at application startup
IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY";
' Add at application startup
IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY"
Tam API Referansı
Ad Alanı Değişiklikleri
// Before: Spire.PDF
using Spire.Pdf;
using Spire.Pdf.Graphics;
using Spire.Pdf.HtmlConverter;
// After: IronPDF
using IronPdf;
using IronPdf.Editing;
// Before: Spire.PDF
using Spire.Pdf;
using Spire.Pdf.Graphics;
using Spire.Pdf.HtmlConverter;
// After: IronPDF
using IronPdf;
using IronPdf.Editing;
Imports IronPdf
Imports IronPdf.Editing
Temel API Eşlemeleri
| Spire.PDF | IronPDF |
|---|---|
new PdfDocument() |
new ChromePdfRenderer() |
pdf.LoadFromHTML() |
renderer.RenderHtmlAsPdf() |
pdf.LoadFromFile() |
PdfDocument.FromFile() |
pdf.SaveToFile() |
pdf.SaveAs() |
pdf.Close() |
Gerekli değil |
pdf.Pages.Add() |
renderer.RenderHtmlAsPdf() |
pdf.InsertPageRange() |
PdfDocument.Merge() |
page.Canvas.DrawString() |
TextStamper + ApplyStamp() |
PdfFont |
HTML'de CSS stil oluşturma |
PdfBrush |
HTML'de CSS stil oluşturma |
Kod Göç Örnekleri
Örnek 1: HTML'den PDF'ye Dönüştürme
Önce (Spire.PDF):
// NuGet: Install-Package Spire.PDF
using Spire.Pdf;
using Spire.Pdf.Graphics;
using System;
class Program
{
static void Main()
{
PdfDocument pdf = new PdfDocument();
PdfHtmlLayoutFormat htmlLayoutFormat = new PdfHtmlLayoutFormat();
string htmlString = "<html><body><h1>Hello World</h1><p>This is a PDF from HTML.</p></body></html>";
pdf.LoadFromHTML(htmlString, false, true, true);
pdf.SaveToFile("output.pdf");
pdf.Close();
}
}
// NuGet: Install-Package Spire.PDF
using Spire.Pdf;
using Spire.Pdf.Graphics;
using System;
class Program
{
static void Main()
{
PdfDocument pdf = new PdfDocument();
PdfHtmlLayoutFormat htmlLayoutFormat = new PdfHtmlLayoutFormat();
string htmlString = "<html><body><h1>Hello World</h1><p>This is a PDF from HTML.</p></body></html>";
pdf.LoadFromHTML(htmlString, false, true, true);
pdf.SaveToFile("output.pdf");
pdf.Close();
}
}
Imports Spire.Pdf
Imports Spire.Pdf.Graphics
Imports System
Class Program
Shared Sub Main()
Dim pdf As New PdfDocument()
Dim htmlLayoutFormat As New PdfHtmlLayoutFormat()
Dim htmlString As String = "<html><body><h1>Hello World</h1><p>This is a PDF from HTML.</p></body></html>"
pdf.LoadFromHTML(htmlString, False, True, True)
pdf.SaveToFile("output.pdf")
pdf.Close()
End Sub
End Class
Sonrası (IronPDF):
// NuGet: Install-Package IronPdf
using IronPdf;
using System;
class Program
{
static void Main()
{
var renderer = new ChromePdfRenderer();
string htmlString = "<html><body><h1>Hello World</h1><p>This is a PDF from HTML.</p></body></html>";
var pdf = renderer.RenderHtmlAsPdf(htmlString);
pdf.SaveAs("output.pdf");
}
}
// NuGet: Install-Package IronPdf
using IronPdf;
using System;
class Program
{
static void Main()
{
var renderer = new ChromePdfRenderer();
string htmlString = "<html><body><h1>Hello World</h1><p>This is a PDF from HTML.</p></body></html>";
var pdf = renderer.RenderHtmlAsPdf(htmlString);
pdf.SaveAs("output.pdf");
}
}
Imports IronPdf
Imports System
Class Program
Shared Sub Main()
Dim renderer = New ChromePdfRenderer()
Dim htmlString As String = "<html><body><h1>Hello World</h1><p>This is a PDF from HTML.</p></body></html>"
Dim pdf = renderer.RenderHtmlAsPdf(htmlString)
pdf.SaveAs("output.pdf")
End Sub
End Class
Bu örnek, HTML işleminde temel farkı gösterir. Spire.PDF, metni sıklıkla bitmap görüntüsü olarak işleyen bir LoadFromHTML() nesnesi ile kullanır. Sonuç, kullanıcıların metni seçemediği, kopyalayamadığı veya arayamadığı PDF'lerdir.
IronPDF, tamamen seçilebilir, aranabilir ve erişilebilir olan gerçek metin üreten ChromePdfRenderer ile RenderHtmlAsPdf() kullanır. Hiçbir Close() çağrısı gerekli değildir—IronPDF, otomatik temizleme için dispose desenini kullanır. Kapsamlı örnekler için HTML to PDF belgelerini inceleyin.
Örnek 2: Birden Fazla PDF'yi Birleştirme
Önce (Spire.PDF):
// NuGet: Install-Package Spire.PDF
using Spire.Pdf;
using System;
class Program
{
static void Main()
{
PdfDocument pdf1 = new PdfDocument();
pdf1.LoadFromFile("document1.pdf");
PdfDocument pdf2 = new PdfDocument();
pdf2.LoadFromFile("document2.pdf");
pdf1.InsertPageRange(pdf2, 0, pdf2.Pages.Count - 1);
pdf1.SaveToFile("merged.pdf");
pdf1.Close();
pdf2.Close();
}
}
// NuGet: Install-Package Spire.PDF
using Spire.Pdf;
using System;
class Program
{
static void Main()
{
PdfDocument pdf1 = new PdfDocument();
pdf1.LoadFromFile("document1.pdf");
PdfDocument pdf2 = new PdfDocument();
pdf2.LoadFromFile("document2.pdf");
pdf1.InsertPageRange(pdf2, 0, pdf2.Pages.Count - 1);
pdf1.SaveToFile("merged.pdf");
pdf1.Close();
pdf2.Close();
}
}
Imports Spire.Pdf
Imports System
Class Program
Shared Sub Main()
Dim pdf1 As New PdfDocument()
pdf1.LoadFromFile("document1.pdf")
Dim pdf2 As New PdfDocument()
pdf2.LoadFromFile("document2.pdf")
pdf1.InsertPageRange(pdf2, 0, pdf2.Pages.Count - 1)
pdf1.SaveToFile("merged.pdf")
pdf1.Close()
pdf2.Close()
End Sub
End Class
Sonrası (IronPDF):
// NuGet: Install-Package IronPdf
using IronPdf;
using System;
class Program
{
static void Main()
{
var pdf1 = PdfDocument.FromFile("document1.pdf");
var pdf2 = PdfDocument.FromFile("document2.pdf");
var merged = PdfDocument.Merge(pdf1, pdf2);
merged.SaveAs("merged.pdf");
}
}
// NuGet: Install-Package IronPdf
using IronPdf;
using System;
class Program
{
static void Main()
{
var pdf1 = PdfDocument.FromFile("document1.pdf");
var pdf2 = PdfDocument.FromFile("document2.pdf");
var merged = PdfDocument.Merge(pdf1, pdf2);
merged.SaveAs("merged.pdf");
}
}
Imports IronPdf
Imports System
Class Program
Shared Sub Main()
Dim pdf1 = PdfDocument.FromFile("document1.pdf")
Dim pdf2 = PdfDocument.FromFile("document2.pdf")
Dim merged = PdfDocument.Merge(pdf1, pdf2)
merged.SaveAs("merged.pdf")
End Sub
End Class
Spire.PDF her belgeyi new PdfDocument() + LoadFromFile() ile manuel olarak yüklemeyi, ardından hangi sayfaların ekleneceğini belirtmek için InsertPageRange() kullanmayı ve son olarak her bir belge için Close() çağrısı yapmayı gerektirir.
IronPDF, birden çok belge kabul eden basit PdfDocument.FromFile() deseni ve statik bir PdfDocument.Merge() yöntemi kullanır. Hiçbir Close() çağrısı gerekmez. Daha fazla bilgiyi kılavuzlarımızda öğrenin.
Örnek 3: Bir PDF'ye Metin Ekleme
Önce (Spire.PDF):
// NuGet: Install-Package Spire.PDF
using Spire.Pdf;
using Spire.Pdf.Graphics;
using System.Drawing;
using System;
class Program
{
static void Main()
{
PdfDocument pdf = new PdfDocument();
PdfPageBase page = pdf.Pages.Add();
PdfFont font = new PdfFont(PdfFontFamily.Helvetica, 20);
PdfBrush brush = new PdfSolidBrush(Color.Black);
page.Canvas.DrawString("Hello from Spire.PDF!", font, brush, new PointF(50, 50));
pdf.SaveToFile("output.pdf");
pdf.Close();
}
}
// NuGet: Install-Package Spire.PDF
using Spire.Pdf;
using Spire.Pdf.Graphics;
using System.Drawing;
using System;
class Program
{
static void Main()
{
PdfDocument pdf = new PdfDocument();
PdfPageBase page = pdf.Pages.Add();
PdfFont font = new PdfFont(PdfFontFamily.Helvetica, 20);
PdfBrush brush = new PdfSolidBrush(Color.Black);
page.Canvas.DrawString("Hello from Spire.PDF!", font, brush, new PointF(50, 50));
pdf.SaveToFile("output.pdf");
pdf.Close();
}
}
Imports Spire.Pdf
Imports Spire.Pdf.Graphics
Imports System.Drawing
Imports System
Class Program
Shared Sub Main()
Dim pdf As New PdfDocument()
Dim page As PdfPageBase = pdf.Pages.Add()
Dim font As New PdfFont(PdfFontFamily.Helvetica, 20)
Dim brush As PdfBrush = New PdfSolidBrush(Color.Black)
page.Canvas.DrawString("Hello from Spire.PDF!", font, brush, New PointF(50, 50))
pdf.SaveToFile("output.pdf")
pdf.Close()
End Sub
End Class
Sonrası (IronPDF):
// NuGet: Install-Package IronPdf
using IronPdf;
using IronPdf.Editing;
using System;
class Program
{
static void Main()
{
var renderer = new ChromePdfRenderer();
var pdf = renderer.RenderHtmlAsPdf("<html><body></body></html>");
var textStamper = new TextStamper()
{
Text = "Hello from IronPDF!",
FontSize = 20,
VerticalOffset = 50,
HorizontalOffset = 50
};
pdf.ApplyStamp(textStamper);
pdf.SaveAs("output.pdf");
}
}
// NuGet: Install-Package IronPdf
using IronPdf;
using IronPdf.Editing;
using System;
class Program
{
static void Main()
{
var renderer = new ChromePdfRenderer();
var pdf = renderer.RenderHtmlAsPdf("<html><body></body></html>");
var textStamper = new TextStamper()
{
Text = "Hello from IronPDF!",
FontSize = 20,
VerticalOffset = 50,
HorizontalOffset = 50
};
pdf.ApplyStamp(textStamper);
pdf.SaveAs("output.pdf");
}
}
Imports IronPdf
Imports IronPdf.Editing
Imports System
Class Program
Shared Sub Main()
Dim renderer = New ChromePdfRenderer()
Dim pdf = renderer.RenderHtmlAsPdf("<html><body></body></html>")
Dim textStamper = New TextStamper() With {
.Text = "Hello from IronPDF!",
.FontSize = 20,
.VerticalOffset = 50,
.HorizontalOffset = 50
}
pdf.ApplyStamp(textStamper)
pdf.SaveAs("output.pdf")
End Sub
End Class
Spire.PDF, metni PointF kullanarak belirli koordinatlara yerleştiren PdfFont, PdfBrush ve page.Canvas.DrawString() ile tuval tabanlı bir çizim modeli kullanır.
IronPDF, TextStamper nesnesini ve ardından ApplyStamp() ile uygulama yapmayı kullanarak, Text, FontSize, VerticalOffset ve HorizontalOffset gibi sezgisel özelliklere sahiptir. Bu yaklaşım daha açıklayıcı ve bakımını sağlamak daha kolaydır.
Metin Olarak Görüntüler Sorunu
Neden Bu Kritik
Spire.PDF, HTML'den PDF'ye görüntü tabanlı işleme kullandığında, belgeleriniz temel işlevselliği kaybeder:
1. Metin Arama Yok: Kullanıcılar metni bulmak için Ctrl+F kullanamaz. Belge yönetim sistemleri içeriği indeksleyemez.
2. Metin Seçimi/Kopyalama Yok: Bir alıntıyı, referansı veya veriyi kopyalamaya çalışan kullanıcılar metni seçemez—bu bir görüntü.
3. Erişilebilirlik İhlalleri: Görüntü tabanlı PDF'ler WCAG 2.1 uyumluluğunu, Bölüm 508 uyumluluğunu (ABD Hükümeti), ADA gerekliliklerini ve ekran okuyucu uyumluluğunu ihlal eder.
4. Büyük Dosya Boyutları: Eski HTML yolundan gelen görüntü tabanlı çıktı, IronPDF'nin aynı içerik için ürettiği metin tabanlı çıktılardan on kat daha büyük dosyalar üretebilir.
Tespit: PDF'niz Görüntü Tabanlı mı?
Spire.PDF tarafından oluşturulmuş belgenizi açın ve bu testleri deneyin:
- Metin Seçimi: Metin üzerinde tıklayın ve sürükleyin. Hiçbir şey vurgulanmazsa → GÖRÜNTÜ TABANLI
- Ctrl+F Arama: Sayfadaki herhangi bir kelimeyi arayın. "Eşleşme bulunamadı" yazarsa → GÖRÜNTÜ TABANLI
- Kopyala/Yapıştır: Metin seçin ve notdefterine kopyalayın. Hiçbir şey yapıştırılmazsa → GÖRÜNTÜ TABANLI
Eski HTML Motoru Sorunu
Spire.PDF Rendering Motorları
Spire.PDF'in LoadFromHTML(...) tarihsel olarak iki yol teklif etti: Windows Internet Explorer / Edge Legacy WebBrowser kontrolü ile desteklenen bir eklenti olmayan yol ve ayrı indirilen QT/WebKit eklenti yolu. Spire.PDF 10.7.21 (2024 ortası) yerel olarak kurulu Google Chrome'a başvuran üçüncü bir seçenek, ChromeHtmlConverter ekledi — ancak isteğe bağlıdır ve orijinal LoadFromHTML API'si hala eski motorlara varsayılan olarak ayarlıdır. IE/Edge Legacy, Microsoft tarafından 2022'de kullanım dışı bırakıldı, modern CSS eski yolda güvenilmez, JavaScript desteği kısmi ve rendering sistemler arasında farklılık gösterebilir.
Spire.PDF'de Başarısız Olan Modern CSS
<div style="display: flex; justify-content: space-between; gap: 20px;">
<div style="flex: 1;">Column 1</div>
<div style="flex: 1;">Column 2</div>
</div>
<div style="display: grid; grid-template-columns: repeat(3, 1fr); gap: 10px;">
<div>Item 1</div>
<div>Item 2</div>
<div>Item 3</div>
</div>
<style>
:root { --primary-color: #007bff; }
h1 { color: var(--primary-color); }
</style>
<div style="display: flex; justify-content: space-between; gap: 20px;">
<div style="flex: 1;">Column 1</div>
<div style="flex: 1;">Column 2</div>
</div>
<div style="display: grid; grid-template-columns: repeat(3, 1fr); gap: 10px;">
<div>Item 1</div>
<div>Item 2</div>
<div>Item 3</div>
</div>
<style>
:root { --primary-color: #007bff; }
h1 { color: var(--primary-color); }
</style>
IronPDF, modern Chromium işleme kullanır, bu nedenle tüm bu CSS özellikleri doğru çalışır.
Geçiş Sonrası Yeni Özellikler
IronPDF'ye geçiş yaptıktan sonra, Spire.PDF'nin sağlayamadığı özelliklere sahip olursunuz:
Seçilebilir, Aranabilir Metin
var renderer = new ChromePdfRenderer();
var pdf = renderer.RenderHtmlAsPdf("<h1>Important Contract</h1>");
pdf.SaveAs("contract.pdf");
// Result:
// ✅ Text is fully selectable
// ✅ Text is searchable with Ctrl+F
// ✅ Text can be copied to clipboard
// ✅ Screen readers work perfectly
// ✅ File size is compact
// ✅ Zooming is crystal clear
var renderer = new ChromePdfRenderer();
var pdf = renderer.RenderHtmlAsPdf("<h1>Important Contract</h1>");
pdf.SaveAs("contract.pdf");
// Result:
// ✅ Text is fully selectable
// ✅ Text is searchable with Ctrl+F
// ✅ Text can be copied to clipboard
// ✅ Screen readers work perfectly
// ✅ File size is compact
// ✅ Zooming is crystal clear
Dim renderer = New ChromePdfRenderer()
Dim pdf = renderer.RenderHtmlAsPdf("<h1>Important Contract</h1>")
pdf.SaveAs("contract.pdf")
' Result:
' ✅ Text is fully selectable
' ✅ Text is searchable with Ctrl+F
' ✅ Text can be copied to clipboard
' ✅ Screen readers work perfectly
' ✅ File size is compact
' ✅ Zooming is crystal clear
Modern CSS Desteği
var renderer = new ChromePdfRenderer();
var html = @"
<style>
:root { --primary: #007bff; }
.container { display: flex; gap: 20px; }
.grid { display: grid; grid-template-columns: repeat(3, 1fr); }
</style>
<div class='container'>
<div style='flex: 1; color: var(--primary)'>Column 1</div>
<div style='flex: 1'>Column 2</div>
</div>
<div class='grid'>
<div>Item 1</div>
<div>Item 2</div>
<div>Item 3</div>
</div>";
var pdf = renderer.RenderHtmlAsPdf(html);
// All modern CSS features render correctly!
var renderer = new ChromePdfRenderer();
var html = @"
<style>
:root { --primary: #007bff; }
.container { display: flex; gap: 20px; }
.grid { display: grid; grid-template-columns: repeat(3, 1fr); }
</style>
<div class='container'>
<div style='flex: 1; color: var(--primary)'>Column 1</div>
<div style='flex: 1'>Column 2</div>
</div>
<div class='grid'>
<div>Item 1</div>
<div>Item 2</div>
<div>Item 3</div>
</div>";
var pdf = renderer.RenderHtmlAsPdf(html);
// All modern CSS features render correctly!
Dim renderer = New ChromePdfRenderer()
Dim html = "
<style>
:root { --primary: #007bff; }
.container { display: flex; gap: 20px; }
.grid { display: grid; grid-template-columns: repeat(3, 1fr); }
</style>
<div class='container'>
<div style='flex: 1; color: var(--primary)'>Column 1</div>
<div style='flex: 1'>Column 2</div>
</div>
<div class='grid'>
<div>Item 1</div>
<div>Item 2</div>
<div>Item 3</div>
</div>"
Dim pdf = renderer.RenderHtmlAsPdf(html)
' All modern CSS features render correctly!
HTML Tabanlı Filigranlar
var pdf = renderer.RenderHtmlAsPdf(html);
pdf.ApplyWatermark(@"
<div style='
font-size: 48px;
color: rgba(255, 0, 0, 0.5);
transform: rotate(-45deg);
'>DRAFT</div>");
var pdf = renderer.RenderHtmlAsPdf(html);
pdf.ApplyWatermark(@"
<div style='
font-size: 48px;
color: rgba(255, 0, 0, 0.5);
transform: rotate(-45deg);
'>DRAFT</div>");
Dim pdf = renderer.RenderHtmlAsPdf(html)
pdf.ApplyWatermark("
<div style='
font-size: 48px;
color: rgba(255, 0, 0, 0.5);
transform: rotate(-45deg);
'>DRAFT</div>")
Geçiş Kontrol Listesi
Öncesi-Geçiş
- Kod tabanındaki tüm Spire.PDF kullanımlarını envanterleyin
- Mevcut PDF'leri metin seçilebilirliği için test edin (kritik sorun tespiti)
- Belge
LoadFromHTML()çağrıları (düzeltme önceliği olanlar) - ironpdf.com adresinden IronPDF lisans anahtarını edinin
Kod Güncellemeleri
Spire.PDFNuGet paketini kaldır (ve ücretsiz sürümü kullanıyorsanızFreeSpire.PDF)IronPdfNuGet paketini yükleyin- Ad alanı alımlarını güncelleyin (
using Spire.Pdf;→using IronPdf;) LoadFromHTML()ileRenderHtmlAsPdf()değiştirin (KRİTİK DÜZELTME)new PdfDocument()+LoadFromFile()ilePdfDocument.FromFile()değiştirinInsertPageRange()ilePdfDocument.Merge()değiştirinCanvas.DrawString()ileTextStamper+ApplyStamp()değiştirinSaveToFile()ileSaveAs()değiştirin- IronPDF'de gerekmediği için tüm
Close()çağrılarını kaldırın - Uygulama başlangıcında lisans başlatma ekle
Test Etme
- Oluşturulan PDF'lerde metnin seçilebilir olduğunu doğrulayın (KRİTİK TEST)
- CSS işleme iyileştirmelerini doğrulayın (Artık Flexbox/Grid çalışır)
- Dosya boyutlarının daha küçük olduğunu doğrulayın.
- Erişilebilirliği ekran okuyucularla test edin
- Performans karşılaştırması

