Przejdź do treści stopki
PRZEWODNIKI MIGRACJI

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

  1. Środowisko .NET: .NET Framework 4.6.2+ lub .NET Core 3.1+ / .NET 5/6/7/8/9+
  2. Dostęp do NuGet: Możliwość instalowania pakietów NuGet
  3. 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
SHELL

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"
$vbLabelText   $csharpLabel

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
$vbLabelText   $csharpLabel

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
$vbLabelText   $csharpLabel

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
$vbLabelText   $csharpLabel

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
$vbLabelText   $csharpLabel

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
$vbLabelText   $csharpLabel

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
$vbLabelText   $csharpLabel

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
$vbLabelText   $csharpLabel

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:

  1. Zaznaczanie tekstu: Kliknij i przeciągnij kursor po tekście. Jeśli nic nie jest wyróżnione → NA PODSTAWIE OBRAZU
  2. Wyszukiwanie za pomocą Ctrl+F: Wyszukaj dowolne słowo na stronie. Jeśli "Nie znaleziono wyników" → NA PODSTAWIE OBRAZU
  3. 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>
HTML

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
$vbLabelText   $csharpLabel

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!
$vbLabelText   $csharpLabel

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>")
$vbLabelText   $csharpLabel

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 (oraz FreeSpire.PDF, jeśli korzystasz z wersji darmowej)
  • Zainstaluj pakiet NuGet IronPdf
  • Zaktualizuj importy przestrzeni nazw (using Spire.Pdf;using IronPdf;)
  • Zastąp LoadFromHTML() przez RenderHtmlAsPdf() (POPRAWKA KRYTYCZNA)
  • Zastąp new PdfDocument() + LoadFromFile() przez PdfDocument.FromFile()
  • Zastąp InsertPageRange() przez PdfDocument.Merge()
  • Zastąp Canvas.DrawString() przez TextStamper + ApplyStamp()
  • Zastąp SaveToFile() przez SaveAs()
  • 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

Curtis Chau
Autor tekstów technicznych

Curtis Chau posiada tytuł licencjata z informatyki (Uniwersytet Carleton) i specjalizuje się w front-endowym rozwoju, z ekspertką w Node.js, TypeScript, JavaScript i React. Pasjonuje się tworzeniem intuicyjnych i estetycznie przyjemnych interfejsów użytkownika, Curtis cieszy się pracą z nowoczesnymi frameworkami i tworzeniem dobrze zorganizowanych, atrakcyjnych wizualnie podrę...

Czytaj więcej

Zespol wsparcia Iron

Jestesmy online 24 godziny, 5 dni w tygodniu.
Czat
Email
Zadzwon do mnie