IRONSOFTWAREHOME
FILMY

Jak przekonwertować XAML na PDF w NET MAUI | IronPDF

Curtis Chau
Curtis Chau
Updated: 19 lipca 2026

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

ProblemWpływRozwiązanie IronPDF
Tekst często renderowany jest jako grafiki na przestarzałej ścieżce HTMLPliki PDF nie są przeszukiwalne, nie są dostępne, nie można kopiować tekstuRenderowanie rzeczywistego tekstu
Zależność IE/Edge Legacy lub QtWebKit na przestarzałej ścieżcePrzestarzałe renderowanie, nowoczesne problemy CSSDołączone nowoczesne Chromium
Zgłoszone problemy z osadzaniem czcionekDokumenty wyglądają nieprawidłowo na innych systemachNiezawodna obsługa czcionek
Duży zasięg wdrożeńWiększe użycie pamięciDołączone środowisko uruchomieniowe Chromium
Ograniczone CSS na przestarzałej ścieżceNowoczesne układy nie wyświetlają się poprawniePeł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

FunkcjaSpire.PDFIronPDF
Renderowanie HTML do PDFDomyślnie IE/QtWebKit; opcjonalnie ChromeHtmlConverter (wymagany systemowy Chrome) od wersji 10.7.21Dołączone Chromium (nowoczesne, bez dodatkowej instalacji)
Wyjście tekstu (ścieżka HTML)Często renderowane jako grafiki na przestarzałej ścieżceRzeczywisty tekst (wybieralny i przeszukiwanie)
Obsługa czcionekZgłoszone problemy na przestarzałej ścieżceNiezawodna obsługa czcionek
Obsługa CSS3Ograniczone na przestarzałej ścieżcePełna
Flexbox/GridNieobsługiwane na przestarzałej ścieżceObsługiwane
JavaScriptOgraniczone na przestarzałej ścieżcePełna obsługa ES6+
Dostępność plików PDFSłabe na przestarzałej ścieżce (wyjście oparte na obrazach)Wyjście tekstu z oznaczeniami
Projektowanie APIWiele przeciążeń, ręczne ustawienia stronyPojedynczy płynny renderer
LicencjonowanieFreemium/KomercjalneKomercjalne

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

  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
SHELL

Konfiguracja licencji

// 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;

Mapowania podstawowych interfejsów API

Spire.PDFIronPDF
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()
PdfFontStylizacja CSS w HTML
PdfBrushStylizacja 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();
    }
}

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");
    }
}

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();
    }
}

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");
    }
}

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();
    }
}

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");
    }
}

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:

  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 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

<!-- This HTML renders incorrectly in 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>

<!-- CSS Variables don't work -->
<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 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

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!

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>");

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 (oraz FreeSpire.PDF jeśli używana jest darmowa wersja)
  • Zainstalować pakiet NuGet IronPdf
  • Zaktualizować importy przestrzeni nazw (using Spire.Pdf;using IronPdf;)
  • Zastąpić LoadFromHTML() z RenderHtmlAsPdf() (KRYTYCZNA NAPRAWA)
  • Zastąpić new PdfDocument() + LoadFromFile() z PdfDocument.FromFile()
  • Zastąpić InsertPageRange() z PdfDocument.Merge()
  • Zastąpić Canvas.DrawString() z TextStamper + ApplyStamp()
  • Zastąpić SaveToFile() z SaveAs()
  • 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

Zwróć uwagę: Spire jest zastrzeżonym znakiem towarowym jego właściciela. Ta strona nie jest powiązana z, popierana ani sponsorowana przez e-iceblue. Wszystkie nazwy produktów, logo i marki są własnością ich odpowiednich właścicieli. Porównania mają charakter wyłącznie informacyjny i odzwierciedlają informacje dostępne publicznie w momencie pisania.
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ęczników.

...
Czytaj więcej

Powiązane artykuły

Key in blue circle

Uzyskaj natychmiast swój darmowy 30-dniowy Klucz Testowy.

Your trial license will be sent to your email address

Brak ograniczeń. 100% dostępności. Bez karty kredytowej.

bullet_checkedNie wymaga karty kredytowej ani tworzenia kontaBrak ograniczeń. 100% dostępności. Bez karty kredytowej.
  • Logo Aetna
  • Logo NASA
  • Logo GE
  • Logo Porsche
  • Logo USDA
  • Logo Qatar
Join Millions of Engineers who’ve tried IronPDF
Zarezerwuj swoje darmowe Demo na żywo
Booking Badge

Zaufane przez miliony inżynierów na całym świecie

Logotypy klientów Iron Software
Otrzymaj swoje Konsultacja Bez Zobowiązań
Wypełnij poniższy formularz lub wyślij e-mail na sales@ironsoftware.com
Twoje dane zawsze będą utrzymywane w tajemnicy.
Zaufane przez miliony inżynierów na całym świecie
Logotypy klientów Iron Software
Otrzymaj swój darmowy Klucz Próbny na 30 dni natychmiast.
Nie wymaga karty kredytowej ani tworzenia konta