Zum Fußzeileninhalt springen
MIGRATIONSLEITFäDEN

Migrieren von Spire.PDF zu IronPDF in C#

Durch die Migration von Spire.PDF zuIronPDFwird Ihr PDF-Generierungs-Workflow von einer Bibliothek, die Text als Bilder rendert, zu einer Bibliothek, die echten, auswählbaren und durchsuchbaren Text mit einer modernen Chromium-Rendering-Engine erzeugt. Diese Anleitung bietet einen vollständigen, schrittweisen Migrationspfad, der die kritischen HTML-Rendering-Beschränkungen von Spire.PDF und die Probleme bei der Schrifteinbettung beseitigt.

Warum von Spire.PDF zuIronPDFmigrieren

Spire verstehen.PDF

Spire.PDF ist eine robuste, kommerzielle PDF-Bibliothek, die für .NET-Entwickler entwickelt wurde, um PDF-Dokumente effizient zu verarbeiten. Spire.PDF hat sich in der Programmier-Community aufgrund seiner spezifischen Fähigkeiten, insbesondere bei Legacy-Anwendungen, einen Namen gemacht und lässt sich nahtlos in andere Komponenten des E-iceblue-Toolsets integrieren.

Spire.PDF hat jedoch einige grundsätzliche Probleme, die sich auf die reale Nutzung auswirken, insbesondere im Bereich der HTML-zu-PDF-Konvertierung und der Unterstützung moderner Webstandards.

Kritische technische Fragen

Problem Auswirkungen IronPDFLösung
Text als Bilder gerendert PDFs nicht durchsuchbar, nicht zugänglich, Text kann nicht kopiert werden Echte Textwiedergabe
Internet Explorer-Abhängigkeit Veraltetes Rendering, Sicherheitsrisiken Moderne Chromium-Engine
Fehler bei der Schrifteinbettung Dokumente sehen auf anderen Systemen falsch aus Zuverlässige Handhabung von Schriftarten
Großer Einsatzbereich Hoher Speicherverbrauch, langsames Starten Effiziente Bereitstellung
Beschränkte CSS-Unterstützung Moderne Layouts werden nicht korrekt wiedergegeben Vollständige CSS3-Unterstützung

Das Kernproblem: Bildbasierte PDFs

Ein wesentlicher Nachteil von Spire.PDF ist die Neigung, Text in HTML-Dokumenten als Bilder darzustellen. Das Ergebnis sind PDFs, in denen der Text nicht auswählbar oder durchsuchbar ist, was für Anwendungen, die eine Suchfunktion oder eine Interaktion mit dem Dokumententext erfordern, eine große Einschränkung darstellen kann.

Wenn Sie die LoadFromHTML()-Methode von Spire.PDF verwenden, wird der Text oft als Bitmap-Bild und nicht als echter Text dargestellt, was diese Probleme verursacht:

  • Der Text kann NICHT ausgewählt werden
  • Der Text darf NICHT durchsucht werden
  • Text darf NICHT kopiert werden
  • Bildschirmlesegeräte können sie NICHT lesen (Verstoß gegen die Zugänglichkeit)
  • Dateigröße ist VIEL größer
  • Zoomen verursacht Pixelbildung

Spire.PDF vsIronPDFVergleich

Feature Spire.PDF IronPDF
HTML zu PDF Rendering Als Bilder gerenderter Text Echte Textwiedergabe (auswählbar und durchsuchbar)
Rendering Engine Internet Explorer auf einigen Systemen abhängig Chromium-basiert, konform mit modernen Webstandards
Schriftbehandlung Bekannte Probleme mit der Schrifteinbettung Zuverlässige und robuste Handhabung von Schriftarten
CSS3-Unterstützung Beschränkt Voll
Flexbox/Grid Nicht unterstützt Volle Unterstützung
JavaScript Beschränkt Vollständig ES6+
PDF Barrierefreiheit Schlecht (bildbasiert) Ausgezeichnet
API-Entwurf Komplex Einfach und intuitiv
Bereitstellungsumfang Groß Mäßig
Lizenzierung Freemium/Kommerziell Kommerziell

Für Teams, die die Einführung von .NET 10 und C# 14 bis 2025 und 2026 planen, löstIronPDFkritische Probleme mit der HTML-zu-PDF-Konvertierung von Spire.PDF, indem es Text als tatsächlich auswählbaren Text und nicht als Bild rendert und so sicherstellt, dass PDFs durchsuchbar und zugänglich sind.


Bevor Sie beginnen

Voraussetzungen

  1. .NET-Umgebung: .NET Framework 4.6.2+ oder .NET Core 3.1+ / .NET 5/6/7/8/9+
  2. NuGet-Zugriff: Möglichkeit zur Installation von NuGet-Paketen
  3. IronPDF-Lizenz: Ihren Lizenzschlüssel erhalten Sie auf ironpdf.com.

NuGet-Paketänderungen

# 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

Lizenz-Konfiguration

// Add at application startup
IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY";
// Add at application startup
IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY";
$vbLabelText   $csharpLabel

Komplette API-Referenz

Namensraumänderungen

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

Kern-API-Zuordnungen

Spire.PDF IronPDF Notizen
new PdfDocument() new ChromePdfRenderer() Für HTML-Rendering
pdf.LoadFromHTML() renderer.RenderHtmlAsPdf() HTML-Konvertierung
pdf.LoadFromFile() PdfDocument.FromFile() Vorhandene PDF-Datei laden
pdf.SaveToFile() pdf.SaveAs() In Datei speichern
pdf.Close() Nicht erforderlich Verwendet das Dispose-Muster
pdf.Pages.Add() renderer.RenderHtmlAsPdf() Seite aus HTML erstellen
pdf.InsertPageRange() PdfDocument.Merge() PDFs zusammenführen
Seite.Canvas.DrawString() TextStamper + ApplyStamp() Text hinzufügen
PdfFont CSS-Styling in HTML Schriftart-Konfiguration
PdfBrush CSS-Styling in HTML Farb-/Füllkonfiguration

Beispiele für die Code-Migration

Beispiel 1: Konvertierung von HTML in PDF

Vor (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();
    }
}
$vbLabelText   $csharpLabel

Nach (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");
    }
}
$vbLabelText   $csharpLabel

Dieses Beispiel verdeutlicht den grundlegenden Unterschied in der HTML-Darstellung. Spire.PDF verwendet LoadFromHTML() mit einem PdfHtmlLayoutFormat-Objekt, das Text oft als Bitmap-Bilder wiedergibt. Das Ergebnis sind PDFs, in denen die Benutzer keinen Text auswählen, kopieren oder suchen können.

IronPDF verwendet einen ChromePdfRenderer mit RenderHtmlAsPdf(), der echten Text erzeugt, der vollständig auswählbar, durchsuchbar und zugänglich ist. Es ist kein Close()-Aufruf erforderlich -IronPDFverwendet das Dispose-Muster zur automatischen Bereinigung. Umfassende Beispiele finden Sie in der HTML to PDF Dokumentation.

Beispiel 2: Zusammenführen mehrerer PDFs

Vor (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();
    }
}
$vbLabelText   $csharpLabel

Nach (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");
    }
}
$vbLabelText   $csharpLabel

Spire.PDF erfordert das manuelle Laden jedes Dokuments mit new PdfDocument()+ LoadFromFile(), dann die Verwendung von InsertPageRange(), um anzugeben, welche Seiten eingefügt werden sollen, und schließlich den Aufruf von Close() für jedes Dokument.

IronPDF verwendet das einfachere Muster PdfDocument.FromFile()und eine statische Methode PdfDocument.Merge(), die mehrere Dokumente akzeptiert. Keine Close()-Aufrufe erforderlich. Erfahren Sie mehr in unseren Tutorials.

Beispiel 3: Hinzufügen von Text zu einer PDF-Datei

Vor (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();
    }
}
$vbLabelText   $csharpLabel

Nach (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");
    }
}
$vbLabelText   $csharpLabel

Spire.PDF verwendet ein Canvas-basiertes Zeichenmodell mit PdfFont, PdfBrushund page.Canvas.DrawString(), um Text an bestimmten Koordinaten mit PointF zu positionieren.

IronPDF verwendet ein TextStamper-Objekt mit intuitiven Eigenschaften wie Text, FontSize, VerticalOffset und HorizontalOffset und wendet es dann mit ApplyStamp() an. Dieser Ansatz ist deklarativer und leichter zu pflegen.


Das Text-als-Bilder-Problem

Warum dies wichtig ist

Wenn Spire.PDF HTML in PDF konvertiert und dabei bildbasiertes Rendering verwendet, verlieren Ihre Dokumente wesentliche Funktionen:

1. Keine Textsuche: Benutzer können nicht mit Strg+F nach Text suchen. Dokumentenmanagementsysteme können Inhalte nicht indizieren.

2. Keine Textauswahl/Kopierfunktion: Benutzer, die ein Zitat, eine Referenz oder Daten kopieren möchten, können keinen Text auswählen – es handelt sich um ein Bild.

3. Verstöße gegen die Barrierefreiheit: Bildbasierte PDFs erfüllen nicht die Anforderungen der WCAG 2.1, des Section 508 (US-Regierung), der ADA und der Bildschirmleseprogramme.

4. Große Dateigrößen: Ein Vergleich gleicher Inhalte zeigt, dass Spire.PDF (bildbasiert) Dateien erzeugt, die bis zu 16-mal größer sind alsIronPDF(textbasiert).

Erkennung: Ist Ihre PDF-Datei bildbasiert?

Öffnen Sie Ihr mit Spire.PDF erstelltes Dokument und führen Sie diese Tests durch:

  1. Textauswahl: Klicken und ziehen Sie über den Text. Wenn nichts hervorgehoben wird → IMAGE-BASED
  2. Strg+F Suche: Suche nach einem beliebigen Wort auf der Seite. Wenn "Keine Treffer gefunden" → IMAGE-BASED
  3. Kopieren/Einfügen: Text auswählen und in den Editor kopieren. Wenn sich nichts einfügt → IMAGE-BASED

Das Internet Explorer Problem

Die Rendering-Engine von Spire.PDF

Spire.PDF ist in einigen Umgebungen auf Internet Explorer/Edge Legacy für das HTML-Rendering angewiesen. Der Internet Explorer ist seit 2022 veraltet, modernes CSS funktioniert nicht, die JavaScript-Unterstützung ist begrenzt und die Darstellung ist systemübergreifend inkonsistent.

Modernes CSS, das in Spire scheitert.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 verwendet modernes Chromium-Rendering, so dass alle diese CSS-Funktionen korrekt funktionieren.


Neue Funktionen nach der Migration

Nach der Migration aufIronPDFerhalten Sie Funktionen, die Spire.PDF nicht bieten kann:

Auswählbarer, durchsuchbarer Text

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

Moderne CSS-Unterstützung

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

HTML-basierte Wasserzeichen

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

Migrations-Checkliste

Vor der Migration

  • Alle Verwendungen von Spire.PDF im Quellcode erfassen
  • Bestehende PDFs auf Textauswahlbarkeit prüfen (Erkennung kritischer Probleme)
  • Document LoadFromHTML() Aufrufe (diese haben Priorität bei der Behebung)
  • Besorgen Sie sich den IronPDF-Lizenzschlüssel von ironpdf.com

Code-Aktualisierungen

  • Entfernen Sie Spire.PDF NuGet-Paket (und FreeSpire.PDF , falls Sie die kostenlose Version verwenden)
  • Installieren Sie IronPdf NuGet-Paket
  • Namespace-Importe aktualisieren ( using Spire.Pdf;using IronPdf; )
  • LoadFromHTML() durch RenderHtmlAsPdf() ersetzen (WICHTIGE FEHLERBEHEBUNG)
  • Ersetzen Sie new PdfDocument()+ LoadFromFile() durch PdfDocument.FromFile()
  • Ersetzen Sie InsertPageRange() durch PdfDocument.Merge()
  • Ersetzen Sie Canvas.DrawString() durch TextStamper + ApplyStamp()
  • Ersetzen Sie SaveToFile() durch SaveAs()
  • Entfernen Sie alle Close() -Aufrufe (inIronPDFnicht erforderlich)
  • Lizenzinitialisierung beim Anwendungsstart hinzufügen

Testen

  • Überprüfen, ob der Text in den generierten PDFs auswählbar ist (WICHTIGER TEST)
  • Überprüfung der Verbesserungen beim CSS-Rendering (Flexbox/Grid funktionieren jetzt)
  • Überprüfen Sie, ob die Dateigrößen kleiner sind.
  • Barrierefreiheit mit Bildschirmlesegeräten testen
  • Leistungsvergleich

Curtis Chau
Technischer Autor

Curtis Chau hat einen Bachelor-Abschluss in Informatik von der Carleton University und ist spezialisiert auf Frontend-Entwicklung mit Expertise in Node.js, TypeScript, JavaScript und React. Leidenschaftlich widmet er sich der Erstellung intuitiver und ästhetisch ansprechender Benutzerschnittstellen und arbeitet gerne mit modernen Frameworks sowie der Erstellung gut strukturierter, optisch ansprechender ...

Weiterlesen