Jak przeprowadzić migrację z Spire.PDF do IronPDF w języku C#
Migracja z Spire.PDF doIronPDFprzekształca proces generowania plików PDF z biblioteki, która renderuje tekst jako obrazy, w bibliotekę, która tworzy prawdziwy, zaznaczalny i przeszukiwalny tekst przy użyciu nowoczesnego silnika renderującego Chromium. Ten przewodnik zawiera kompletną, krok po kroku ścieżkę migracji, która rozwiązuje krytyczne ograniczenia renderowania HTML w Spire.PDF oraz 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ązanieIronPDF |
|---|---|---|
| Tekst wyświetlany jako obrazy | Pliki PDF nie są przeszukiwalne, nie są dostępne, nie można kopiować tekstu | Renderowanie rzeczywistego tekstu |
| Zależność od przeglądarki Internet Explorer | Przestarzałe renderowanie, zagrożenia bezpieczeństwa | Nowoczesny silnik Chromium |
| Błędy osadzania czcionek | Dokumenty wyglądają nieprawidłowo na innych systemach | Niezawodna obsługa czcionek |
| Duży zasięg wdrożeń | Wysokie zużycie pamięci, powolny start | Wydajne wdrażanie |
| Ograniczona obsługa CSS | Nowoczesne układy nie wyświetlają się poprawnie | Pełna obsługa CSS3 |
Główny problem: pliki PDF oparte na obrazach
Jedną z istotnych wad Spire.PDF jest tendencja do renderowania tekstu w dokumentach HTML jako obrazów. W rezultacie powstają pliki PDF, w których tekst nie jest zaznaczalny ani przeszukiwalny, co może stanowić poważne ograniczenie dla aplikacji wymagających funkcji wyszukiwania lub interakcji z tekstem dokumentu.
Podczas korzystania z metody LoadFromHTML() w Spire.PDF tekst jest często renderowany jako obrazy bitmapowe zamiast jako rzeczywisty tekst, co powoduje następujące 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 | Tekst wyświetlany jako obrazy | Renderowanie tekstu (z możliwością zaznaczania i wyszukiwania) |
| Silnik renderujący | Internet Explorer zależny od niektórych systemów | Oparty na Chromium, zgodny z nowoczesnymi standardami internetowymi |
| Obsługa czcionek | Znane problemy z osadzaniem czcionek | Niezawodna i solidna obsługa czcionek |
| Obsługa CSS3 | Ograniczone | Pełna |
| Flexbox/Grid | Nieobsługiwane | Obsługiwane |
| JavaScript | Ograniczone | Pełna obsługa ES6+ |
| Dostępność plików PDF | Słabe (na podstawie obrazu) | Doskonałe |
| Projektowanie API | Złożone | Proste i intuicyjne |
| Zasięg wdrożenia | Duży | Umiarkowany |
| Licencjonowanie | Freemium/Komercjalne | Komercjalne |
Dla zespołów planujących wdrożenie .NET 10 i C# 14 w latach 2025 i 2026,IronPDFrozwiązuje kluczowe problemy związane z konwersją HTML do PDF w Spire.PDF, renderując tekst jako rzeczywisty tekst z możliwością zaznaczania, a nie jako obrazy, zapewniając tym samym możliwość przeszukiwania i dostępności plików PDF.
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, co często powoduje renderowanie tekstu jako obrazów bitmapowych. Wynikiem są pliki PDF, w których użytkownicy nie mogą zaznaczać, kopiować ani wyszukiwać tekstu.
IronPDF używa ChromePdfRenderer z RenderHtmlAsPdf(), tworząc prawdziwy tekst, który można w pełni zaznaczać, przeszukiwać i który jest dostępny. Nie jest wymagane wywołanie Close() —IronPDFwykorzystuje wzorzec dispose do automatycznego czyszczenia. Kompleksowe przykłady można znaleźć w dokumentacji HTML do PDF.
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 załadowania każdego dokumentu za pomocą new PdfDocument() + LoadFromFile(), a następnie użycia InsertPageRange() w celu określenia, które strony mają zostać wstawione, i wreszcie wywołania Close() dla każdego dokumentu.
IronPDF wykorzystuje prostszy wzorzec PdfDocument.FromFile() oraz statyczną metodę PdfDocument.Merge(), która akceptuje wiele dokumentów. Nie są wymagane 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 wykorzystuje model rysowania oparty na płótnie z PdfFont, PdfBrush i page.Canvas.DrawString() do pozycjonowania tekstu w określonych współrzędnych przy użyciu PointF.
IronPDF wykorzystuje obiekt TextStamper z intuicyjnymi właściwościami, takimi jak Text, FontSize, VerticalOffset oraz HorizontalOffset, a następnie stosuje go za pomocą 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: Porównanie tej samej treści pokazuje, że Spire.PDF (oparty na obrazach) generuje pliki nawet 16 razy większe niżIronPDF(oparty na tekście).
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 z przeglądarką Internet Explorer
Silnik renderujący Spire.PDF
W niektórych środowiskach Spire.PDF wykorzystuje przeglądarkę Internet Explorer/Edge Legacy do renderowania HTML. IE zostało wycofane w 2022 r., nowoczesny CSS nie działa, obsługa JavaScript jest ograniczona, a renderowanie jest niespójne w różnych systemach.
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 doIronPDFzyskujesz 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)
- Dokument
LoadFromHTML()zawiera odwołania (należy je naprawić w pierwszej kolejności) - Uzyskaj klucz licencyjnyIronPDFze strony ironpdf.com
Aktualizacje kodu
- Usuń pakiet NuGet
Spire.PDF(orazFreeSpire.PDF, jeśli korzystasz z wersji darmowej) - Zainstaluj pakiet NuGet
IronPdf - Zaktualizuj importy przestrzeni nazw (
using Spire.Pdf;→using IronPdf;) - Zastąp
LoadFromHTML()przezRenderHtmlAsPdf()(POPRAWKA KRYTYCZNA) - Zastąp
new PdfDocument()+LoadFromFile()przezPdfDocument.FromFile() - Zastąp
InsertPageRange()przezPdfDocument.Merge() - Zastąp
Canvas.DrawString()przezTextStamper+ApplyStamp() - Zastąp
SaveToFile()przezSaveAs() - Usuń 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

