Jak przeprowadzić migrację z Spire.PDF do IronPDF w języku C#
Migracja z Spire.PDF do IronPDF przenosi twój przepływ pracy generowania PDF z przestarzałej ścieżki HTML, która często generuje tekst w formie grafik, na pipeline Chromium, który generuje prawdziwy, wybieralny, przeszukiwalny tekst. Niniejszy przewodnik oferuje kompletną, krok po kroku ścieżkę migracji, obejmującą kompromisy renderowania HTML Spire.PDF oraz zgłoszone problemy z osadzaniem czcionek.
Dlaczego warto przejść z Spire.PDF na IronPDF
Zrozumienie Spire.PDF
Spire.PDF to solidna, komercyjna biblioteka PDF przeznaczona dla programistów .NET do wydajnej obsługi dokumentów PDF. Spire.PDF zyskał uznanie w społeczności programistów dzięki swoim specyficznym możliwościom, zwłaszcza w aplikacjach starszego typu, a jego możliwości integracyjne płynnie współgrają z innymi komponentami zestawu narzędzi E-iceblue.
Jednak Spire.PDF ma kilka zasadniczych problemów, które wpływają na rzeczywiste użytkowanie, szczególnie w zakresie konwersji HTML do PDF oraz obsługi nowoczesnych standardów internetowych.
Kluczowe kwestie techniczne
| Problem | Wpływ | Rozwiązanie IronPDF |
|---|---|---|
| Tekst często renderowany jest jako grafiki na przestarzałej ścieżce HTML | Pliki PDF nie są przeszukiwalne, nie są dostępne, nie można kopiować tekstu | Renderowanie rzeczywistego tekstu |
| Zależność IE/Edge Legacy lub QtWebKit na przestarzałej ścieżce | Przestarzałe renderowanie, nowoczesne problemy CSS | Dołączone nowoczesne Chromium |
| Zgłoszone problemy z osadzaniem czcionek | Dokumenty wyglądają nieprawidłowo na innych systemach | Niezawodna obsługa czcionek |
| Duży zasięg wdrożeń | Większe użycie pamięci | Dołączone środowisko uruchomieniowe Chromium |
| Ograniczone CSS na przestarzałej ścieżce | Nowoczesne układy nie wyświetlają się poprawnie | Pełna obsługa CSS3 |
Główny problem: pliki PDF oparte na obrazach
Jedną z zgłoszonych wad przestarzałej ścieżki HTML Spire.PDF jest jej skłonność do renderowania tekstu w dokumentach HTML jako grafiki. To generuje PDFy, w których tekst nie jest wybieralny ani przeszukiwalny - ograniczenie dla aplikacji, które potrzebują wyszukiwania lub interakcji z tekstem.
Gdy używasz metody LoadFromHTML() Spire.PDF na przestarzałym silniku, często renderuje ona tekst jako obrazy bitmapowe zamiast rzeczywistego tekstu, tworząc te problemy:
- Tekst NIE MOŻE być zaznaczony
- Tekst NIE MOŻE być przeszukiwany
- Tekst NIE MOŻE być kopiowany
- Czytniki ekranu NIE MOGĄ tego odczytać (naruszenie zasad dostępności)
- Rozmiar pliku jest DUŻO większy
- Zoom powoduje pikselizację
Porównanie Spire.PDF i IronPDF
| Funkcja | Spire.PDF | IronPDF |
|---|---|---|
| Renderowanie HTML do PDF | Domyślnie IE/QtWebKit; opcjonalnie ChromeHtmlConverter (wymagany systemowy Chrome) od wersji 10.7.21 |
Dołączone Chromium (nowoczesne, bez dodatkowej instalacji) |
| Wyjście tekstu (ścieżka HTML) | Często renderowane jako grafiki na przestarzałej ścieżce | Rzeczywisty tekst (wybieralny i przeszukiwanie) |
| Obsługa czcionek | Zgłoszone problemy na przestarzałej ścieżce | Niezawodna obsługa czcionek |
| Obsługa CSS3 | Ograniczone na przestarzałej ścieżce | Pełna |
| Flexbox/Grid | Nieobsługiwane na przestarzałej ścieżce | Obsługiwane |
| JavaScript | Ograniczone na przestarzałej ścieżce | Pełna obsługa ES6+ |
| Dostępność plików PDF | Słabe na przestarzałej ścieżce (wyjście oparte na obrazach) | Wyjście tekstu z oznaczeniami |
| Projektowanie API | Wiele przeciążeń, ręczne ustawienia strony | Pojedynczy płynny renderer |
| Licencjonowanie | Freemium/Komercjalne | Komercjalne |
Na nowoczesnym .NET,IronPDF rozwiązuje kompromisy Spire.PDF w konwertowaniu HTML na PDF, renderując tekst jako rzeczywisty wybieralny tekst zamiast obrazów, dzięki czemu wynikowe PDFy są przeszukiwalne i dostępne.
Zanim zaczniesz
Wymagania wstępne
- Środowisko .NET: .NET Framework 4.6.2+ lub .NET Core 3.1+ / .NET 5/6/7/8/9+
- Dostęp do NuGet: Możliwość instalowania pakietów NuGet
- Licencja IronPDF: Uzyskaj klucz licencyjny na stronie ironpdf.com
Zmiany w pakiecie NuGet
# 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
Konfiguracja licencji
// 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"
Kompletna dokumentacija API
Zmiany w przestrzeni nazw
// 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
Mapowania podstawowych interfejsów API
| Spire.PDF | IronPDF |
|---|---|
new PdfDocument() |
new ChromePdfRenderer() |
pdf.LoadFromHTML() |
renderer.RenderHtmlAsPdf() |
pdf.LoadFromFile() |
PdfDocument.FromFile() |
pdf.SaveToFile() |
pdf.SaveAs() |
pdf.Close() |
Nie jest potrzebne |
pdf.Pages.Add() |
renderer.RenderHtmlAsPdf() |
pdf.InsertPageRange() |
PdfDocument.Merge() |
page.Canvas.DrawString() |
TextStamper + ApplyStamp() |
PdfFont |
Stylizacja CSS w HTML |
PdfBrush |
Stylizacja CSS w HTML |
Przykłady migracji kodu
Przykład 1: Konwersja HTML do PDF
Przed (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
Po (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
Ten przykład ilustruje zasadniczą różnicę w renderowaniu HTML. Spire.PDF używa LoadFromHTML() z obiektem PdfHtmlLayoutFormat, który często renderuje tekst jako obrazy bitmapowe. Wynikiem są pliki PDF, w których użytkownicy nie mogą zaznaczać, kopiować ani wyszukiwać tekstu.
IronPDF używa ChromePdfRenderer z RenderHtmlAsPdf(), generując prawdziwy tekst, który jest w pełni wybieralny, przeszukiwalny i dostępny. Nie jest wymagane wywołanie Close()—IronPDF używa wzorca dispose do automatycznego oczyszczania. Zobacz dokumentację HTML do PDF dla kompleksowych przykładów.
Przykład 2: Łączenie wielu plików PDF
Przed (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
Po (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 wymaga ręcznego ładowania każdego dokumentu za pomocą new PdfDocument() + LoadFromFile(), następnie używając InsertPageRange() do określenia, które strony wstawić, a na końcu wywołanie Close() na każdym dokumencie.
IronPDF używa prostszego wzorca PdfDocument.FromFile() i statycznej metody PdfDocument.Merge(), która przyjmuje wiele dokumentów. Nie są potrzebne wywołania Close(). Dowiedz się więcej z naszych samouczków.
Przykład 3: Dodawanie tekstu do pliku PDF
Przed (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
Po (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 używa modelu rysowania opartego na kanwie z PdfFont, PdfBrush i page.Canvas.DrawString() do umieszczania tekstu w określonych współrzędnych za pomocą PointF.
IronPDF używa obiektu TextStamper z intuicyjnymi właściwościami jak Text, FontSize, VerticalOffset, HorizontalOffset, a następnie stosuje go z ApplyStamp(). Takie podejście jest bardziej deklaratywne i łatwiejsze w utrzymaniu.
Problem tekstu w postaci obrazów
Dlaczego jest to tak ważne
Gdy Spire.PDF konwertuje HTML na PDF przy użyciu renderowania opartego na obrazach, dokumenty tracą istotną funkcjonalność:
1. Brak wyszukiwania tekstu: Użytkownicy nie mogą używać skrótu Ctrl+F do wyszukiwania tekstu. Systemy zarządzania dokumentami nie mogą indeksować treści.
2. Brak możliwości zaznaczania/kopiowania tekstu: Użytkownicy próbujący skopiować cytat, odniesienie lub dane nie mogą zaznaczyć tekstu — jest to obraz.
3. Naruszenia dostępności: Pliki PDF oparte na obrazach nie spełniają wymagań WCAG 2.1, sekcji 508 (rząd USA), ADA oraz nie są kompatybilne z czytnikami ekranu.
4. Duże rozmiary plików: Wyjście oparte na obrazach ze starej ścieżki HTML może powodować pliki dziesięciokrotnie większe niż wyjście tekstowe generowane przez IronPDF dla tej samej zawartości.
Wykrywanie: Czy Twój plik PDF jest oparty na obrazach?
Otwórz dokument wygenerowany przez Spire.PDF i wypróbuj poniższe testy:
- Zaznaczanie tekstu: Kliknij i przeciągnij kursor po tekście. Jeśli nic nie jest wyróżnione → NA PODSTAWIE OBRAZU
- Wyszukiwanie za pomocą Ctrl+F: Wyszukaj dowolne słowo na stronie. Jeśli "Nie znaleziono wyników" → NA PODSTAWIE OBRAZU
- Kopiuj/Wklej: Zaznacz i skopiuj tekst do notatnika. Jeśli nic się nie wkleja → NA PODSTAWIE OBRAZU
Problem ze starą maszyną HTML
Maszyny renderujące Spire.PDF
Funkcja LoadFromHTML(...) Spire.PDF historycznie oferowała dwie ścieżki: ścieżkę bez wtyczek wspieraną przez kontrolę WebBrowser Windows Internet Explorer / Edge Legacy oraz ścieżkę z wtyczką QT/WebKit pobieraną oddzielnie. Spire.PDF 10.7.21 (w połowie 2024 roku) dodał trzecią opcję, ChromeHtmlConverter, która uruchamia się na zainstalowanej lokalnie przeglądarce Google Chrome — ale jest to opcjonalne, a oryginalne API LoadFromHTML nadal domyślnie wybiera przestarzałe silniki. IE/Edge Legacy zostało odrzucone przez Microsoft w 2022, nowoczesny CSS jest zawodny na starej ścieżce, wsparcie JavaScript jest częściowe, a rendering może różnić się w zależności od systemu.
Nowoczesny CSS, który zawodzi w Spire.PDF
<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 wykorzystuje nowoczesny silnik renderujący Chromium, dzięki czemu wszystkie te funkcje CSS działają poprawnie.
Nowe możliwości po migracji
Po migracji do IronPDF zyskujesz możliwości, których Spire.PDF nie jest w stanie zapewnić:
Tekst z możliwością zaznaczania i wyszukiwania
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
Obsługa nowoczesnego CSS
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!
Znaki wodne oparte na HTML
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>")
Lista kontrolna migracji
Przed migracją
- Sporządź spis wszystkich miejsc użycia Spire.PDF w kodzie źródłowym
- Sprawdź istniejące pliki PDF pod kątem możliwości zaznaczania tekstu (wykrywanie krytycznych problemów)
- Wywołania dokumentu
LoadFromHTML()(są to priorytety do naprawy) - Uzyskaj klucz licencyjny IronPDF ze strony ironpdf.com
Aktualizacje kodu
- Usunąć pakiet NuGet
Spire.PDF(orazFreeSpire.PDFjeśli używana jest darmowa wersja) - Zainstalować pakiet NuGet
IronPdf - Zaktualizować importy przestrzeni nazw (
using Spire.Pdf;→using IronPdf;) - Zastąpić
LoadFromHTML()zRenderHtmlAsPdf()(KRYTYCZNA NAPRAWA) - Zastąpić
new PdfDocument()+LoadFromFile()zPdfDocument.FromFile() - Zastąpić
InsertPageRange()zPdfDocument.Merge() - Zastąpić
Canvas.DrawString()zTextStamper+ApplyStamp() - Zastąpić
SaveToFile()zSaveAs() - Usunąć wszystkie wywołania
Close()(nie są potrzebne w IronPDF) - Dodaj inicjalizację licencji podczas uruchamiania aplikacji
Testowanie
- Sprawdź, czy tekst jest zaznaczalny w wygenerowanych plikach PDF (TEST KLUCZOWY)
- Sprawdź ulepszenia w renderowaniu CSS (Flexbox/Grid teraz działają)
- Sprawdź, czy rozmiary plików są mniejsze
- Sprawdź dostępność za pomocą czytników ekranu
- Porównanie wydajności

