Migrieren von Aspose.PDF zu IronPDF in C#
Full Comparison
Looking for a detailed feature-by-feature breakdown? See how IronPDF stacks up against Aspose PDF on pricing, HTML support, and licensing.
Warum von Aspose.PDF abwandern?
Obwohl Aspose.PDF Funktionen auf Unternehmensebene bietet, gibt es mehrere Faktoren, die Entwicklungsteams dazu veranlassen, nach modernen Alternativen für ihre PDF-Erzeugungsanforderungen zu suchen.
Kostenvergleich
Aspose.PDF verwendet ein traditionelles Unternehmenslizenzierungsmodell mit jährlichen Verlängerungen, die sich im Laufe der Zeit erheblich summieren:
| Aspekt | Aspose.PDF | IronPDF |
|---|---|---|
| Startpreis | 1.199 $/Entwickler/Jahr | $749 einmalig (Lite) |
| Lizenzmodell | Jahresabonnement + Erneuerung | Unbefristete Lizenz |
| OEM-Lizenz | $5.997+ zusätzlich | Eingeschlossen in höhere Stufen |
| Unterstützung | Zusätzliche Kostenstufen | Enthalten |
| Gesamtkosten für 3 Jahre | $3.597+ pro Entwickler | 749 $ einmalig |
HTML Rendering Engine Vergleich
Aspose.PDF verwendet die Flying Saucer CSS-Engine, die mit modernen Webstandards nicht zurechtkommt.IronPDF nutzt eine vollständige Chromium-Rendering-Engine:
| Feature | Aspose.PDF (Flying Saucer) | IronPDF(Chromium) |
|---|---|---|
| CSS3-Unterstützung | Begrenzt (älteres CSS) | Vollständig CSS3 |
| Flexbox/Grid | Nicht unterstützt | Unterstützt |
| JavaScript | Sehr begrenzt | Unterstützt |
| Web-Schriftarten | Teilweise | Vollständige |
| Modernes HTML5 | Beschränkt | Vollständige |
| Wiedergabequalität | Variable | Pixelgenaue |
Dokumentierte Performance-Probleme
Benutzer haben über erhebliche Leistungsunterschiede zwischen den beiden Bibliotheken berichtet:
| Metrik | Aspose.PDF | IronPDF |
|---|---|---|
| HTML-Rendering | Dokumentierte Verlangsamungen (in einigen Fällen 30x langsamer) | Optimierte Chromium-Engine |
| Große Dokumente | Gemeldete Speicherprobleme | Effizientes Streaming |
| Linux-Leistung | Hohe CPU- und Speicherlecks gemeldet | Stabile |
Aspose.PDF vs. IronPDF: Hauptunterschiede
| Aspekt | Aspose.PDF | IronPDF |
|---|---|---|
| Preisgestaltung | $1.199/Entwickler/Jahr (Abonnement) | $749 einmalig (Lite) |
| HTML Engine | Flying Saucer (eingeschränktes CSS) | Chromium (vollständig CSS3/JS) |
| Leistung | Dokumentierte Verlangsamungen | Optimiert |
| Lizenzmodell | Jährliche Erneuerung + .lic-Datei | Ewiger + codebasierter Schlüssel |
| Linux-Unterstützung | Gemeldete Probleme (CPU, Speicher) | Stabile |
| Seitenindizierung | 1-basiert (Pages[1]) |
0-basiert (Pages[0]) |
Vorbereitung auf die Migration
Voraussetzungen
Stellen Sie sicher, dass Ihre Umgebung diese Anforderungen erfüllt:
- .NET Framework 4.6.2+ oder .NET Core 3.1 / .NET 5-9
- Visual Studio 2019+ oder VS Code mit C#-Erweiterung
- NuGet Package Manager Zugang
- IronPDF-Lizenzschlüssel (kostenlose Testversion erhältlich unter ironpdf.com)
Audit der Aspose.PDF-Verwendung
Führen Sie diese Befehle in Ihrem Lösungsverzeichnis aus, um alle Aspose.PDF-Referenzen zu identifizieren:
# Find all Aspose.Pdf using statements
grep -r "using Aspose.Pdf" --include="*.cs" .
# Find HtmlLoadOptions usage
grep -r "HtmlLoadOptions\|HtmlFragment" --include="*.cs" .
# Find Facades usage
grep -r "PdfFileEditor\|PdfFileMend\|PdfFileStamp" --include="*.cs" .
# Find TextAbsorber usage
grep -r "TextAbsorber\|TextFragmentAbsorber" --include="*.cs" .
# Find all Aspose.Pdf using statements
grep -r "using Aspose.Pdf" --include="*.cs" .
# Find HtmlLoadOptions usage
grep -r "HtmlLoadOptions\|HtmlFragment" --include="*.cs" .
# Find Facades usage
grep -r "PdfFileEditor\|PdfFileMend\|PdfFileStamp" --include="*.cs" .
# Find TextAbsorber usage
grep -r "TextAbsorber\|TextFragmentAbsorber" --include="*.cs" .
Bahnbrechende Änderungen, die zu erwarten sind
| Aspose.PDF-Muster | Änderung erforderlich |
|---|---|
new Document() + Pages.Add() |
Stattdessen HTML-Rendering verwenden |
HtmlLoadOptions |
ChromePdfRenderer.RenderHtmlAsPdf() |
TextFragment + manuelle Positionierung |
CSS-basierte Positionierung |
PdfFileEditor.Concatenate() |
PdfDocument.Merge() |
TextFragmentAbsorber |
pdf.ExtractAllText() |
ImageStamp |
HTML-basierte Wasserzeichen |
.lic Dateilizenzierung |
Code-basierter Lizenzschlüssel |
| 1-basierte Seitenindizierung | 0-basierte Seitenindizierung |
Schritt-für-Schritt-Migrationsprozess
Schritt 1: NuGet-Pakete aktualisieren
Entfernen Sie Aspose.PDF und installieren Sie IronPDF:
# Remove Aspose.PDF
dotnet remove package Aspose.PDF
# Install IronPDF
dotnet add package IronPdf
# Remove Aspose.PDF
dotnet remove package Aspose.PDF
# Install IronPDF
dotnet add package IronPdf
Oder über die Paketmanager-Konsole:
Uninstall-Package Aspose.PDF
Install-Package IronPdf
Schritt 2: Namensraumreferenzen aktualisieren
Ersetzen Sie die Namensräume von Aspose.PDF durch IronPDF:
// Remove these
using Aspose.Pdf;
using Aspose.Pdf.Text;
using Aspose.Pdf.Facades;
using Aspose.Pdf.Generator;
// Add these
using IronPdf;
using IronPdf.Rendering;
using IronPdf.Editing;
// Remove these
using Aspose.Pdf;
using Aspose.Pdf.Text;
using Aspose.Pdf.Facades;
using Aspose.Pdf.Generator;
// Add these
using IronPdf;
using IronPdf.Rendering;
using IronPdf.Editing;
' Remove these
' Imports Aspose.Pdf
' Imports Aspose.Pdf.Text
' Imports Aspose.Pdf.Facades
' Imports Aspose.Pdf.Generator
' Add these
Imports IronPdf
Imports IronPdf.Rendering
Imports IronPdf.Editing
Schritt 3: Lizenzkonfiguration aktualisieren
Aspose.PDF verwendet die .lic-Datei-Lizenzierung.IronPDF verwendet einen einfachen codebasierten Schlüssel.
Aspose.PDF Implementierung:
var license = new Aspose.Pdf.License();
license.SetLicense("Aspose.Pdf.lic");
var license = new Aspose.Pdf.License();
license.SetLicense("Aspose.Pdf.lic");
Imports Aspose.Pdf
Dim license As New License()
license.SetLicense("Aspose.Pdf.lic")
IronPDF-Implementierung:
IronPdf.License.LicenseKey = "YOUR-IRONPDF-LICENSE-KEY";
IronPdf.License.LicenseKey = "YOUR-IRONPDF-LICENSE-KEY";
IronPdf.License.LicenseKey = "YOUR-IRONPDF-LICENSE-KEY"
Komplette API-Migrationsreferenz
Kernklassen-Zuordnung
| Aspose.PDF-Klasse | IronPDF-Äquivalent |
|---|---|
Document |
PdfDocument |
HtmlLoadOptions |
ChromePdfRenderer |
TextFragmentAbsorber |
PdfDocument.ExtractAllText() |
PdfFileEditor |
PdfDocument.Merge() |
TextStamp / ImageStamp |
PdfDocument.ApplyWatermark() |
License |
IronPdf.License |
Dokumentenoperationen
| Aspose.PDF-Methode | IronPDF-Methode |
|---|---|
new Document() |
new PdfDocument() |
new Document(path) |
PdfDocument.FromFile(path) |
doc.Save(path) |
pdf.SaveAs(path) |
doc.Pages.Count |
pdf.PageCount |
doc.Pages.Delete(index) |
pdf.RemovePage(index) |
HTML-zu-PDF-Konvertierung
| Aspose.PDF-Methode | IronPDF-Methode |
|---|---|
new HtmlLoadOptions() |
new ChromePdfRenderer() |
new Document(stream, htmlOptions) |
renderer.RenderHtmlAsPdf(html) |
new Document(path, htmlOptions) |
renderer.RenderHtmlFileAsPdf(path) |
Beispiele für die Code-Migration
HTML-String in PDF konvertieren
Die gängigste Aspose.PDF-Operation verdeutlicht den grundlegenden Unterschied in der Herangehensweise - Aspose.PDF erfordert das Einwickeln von HTML in einen MemoryStream, während IronPDFStrings direkt akzeptiert.
Aspose.PDF Implementierung:
// NuGet: Install-Package Aspose.PDF
using Aspose.Pdf;
using System;
using System.IO;
using System.Text;
class Program
{
static void Main()
{
string htmlContent = "<html><body><h1>Hello World</h1><p>This is a PDF from HTML string.</p></body></html>";
using (var stream = new MemoryStream(Encoding.UTF8.GetBytes(htmlContent)))
{
var htmlLoadOptions = new HtmlLoadOptions();
var document = new Document(stream, htmlLoadOptions);
document.Save("output.pdf");
}
Console.WriteLine("PDF created from HTML string");
}
}
// NuGet: Install-Package Aspose.PDF
using Aspose.Pdf;
using System;
using System.IO;
using System.Text;
class Program
{
static void Main()
{
string htmlContent = "<html><body><h1>Hello World</h1><p>This is a PDF from HTML string.</p></body></html>";
using (var stream = new MemoryStream(Encoding.UTF8.GetBytes(htmlContent)))
{
var htmlLoadOptions = new HtmlLoadOptions();
var document = new Document(stream, htmlLoadOptions);
document.Save("output.pdf");
}
Console.WriteLine("PDF created from HTML string");
}
}
Imports Aspose.Pdf
Imports System
Imports System.IO
Imports System.Text
Module Program
Sub Main()
Dim htmlContent As String = "<html><body><h1>Hello World</h1><p>This is a PDF from HTML string.</p></body></html>"
Using stream As New MemoryStream(Encoding.UTF8.GetBytes(htmlContent))
Dim htmlLoadOptions As New HtmlLoadOptions()
Dim document As New Document(stream, htmlLoadOptions)
document.Save("output.pdf")
End Using
Console.WriteLine("PDF created from HTML string")
End Sub
End Module
IronPDF-Implementierung:
// NuGet: Install-Package IronPdf
using IronPdf;
using System;
class Program
{
static void Main()
{
string htmlContent = "<html><body><h1>Hello World</h1><p>This is a PDF from HTML string.</p></body></html>";
var renderer = new ChromePdfRenderer();
var pdf = renderer.RenderHtmlAsPdf(htmlContent);
pdf.SaveAs("output.pdf");
Console.WriteLine("PDF created from HTML string");
}
}
// NuGet: Install-Package IronPdf
using IronPdf;
using System;
class Program
{
static void Main()
{
string htmlContent = "<html><body><h1>Hello World</h1><p>This is a PDF from HTML string.</p></body></html>";
var renderer = new ChromePdfRenderer();
var pdf = renderer.RenderHtmlAsPdf(htmlContent);
pdf.SaveAs("output.pdf");
Console.WriteLine("PDF created from HTML string");
}
}
Imports IronPdf
Imports System
Class Program
Shared Sub Main()
Dim htmlContent As String = "<html><body><h1>Hello World</h1><p>This is a PDF from HTML string.</p></body></html>"
Dim renderer = New ChromePdfRenderer()
Dim pdf = renderer.RenderHtmlAsPdf(htmlContent)
pdf.SaveAs("output.pdf")
Console.WriteLine("PDF created from HTML string")
End Sub
End Class
IronPDF macht den MemoryStream-Wrapper komplett überflüssig - eine sauberere, intuitivere API.
HTML-Datei zu PDF
Aspose.PDF Implementierung:
// NuGet: Install-Package Aspose.PDF
using Aspose.Pdf;
using System;
class Program
{
static void Main()
{
var htmlLoadOptions = new HtmlLoadOptions();
var document = new Document("input.html", htmlLoadOptions);
document.Save("output.pdf");
Console.WriteLine("PDF created successfully");
}
}
// NuGet: Install-Package Aspose.PDF
using Aspose.Pdf;
using System;
class Program
{
static void Main()
{
var htmlLoadOptions = new HtmlLoadOptions();
var document = new Document("input.html", htmlLoadOptions);
document.Save("output.pdf");
Console.WriteLine("PDF created successfully");
}
}
Imports Aspose.Pdf
Imports System
Class Program
Shared Sub Main()
Dim htmlLoadOptions As New HtmlLoadOptions()
Dim document As New Document("input.html", htmlLoadOptions)
document.Save("output.pdf")
Console.WriteLine("PDF created successfully")
End Sub
End Class
IronPDF-Implementierung:
// NuGet: Install-Package IronPdf
using IronPdf;
using System;
class Program
{
static void Main()
{
var renderer = new ChromePdfRenderer();
var pdf = renderer.RenderHtmlFileAsPdf("input.html");
pdf.SaveAs("output.pdf");
Console.WriteLine("PDF created successfully");
}
}
// NuGet: Install-Package IronPdf
using IronPdf;
using System;
class Program
{
static void Main()
{
var renderer = new ChromePdfRenderer();
var pdf = renderer.RenderHtmlFileAsPdf("input.html");
pdf.SaveAs("output.pdf");
Console.WriteLine("PDF created successfully");
}
}
Imports IronPdf
Imports System
Class Program
Shared Sub Main()
Dim renderer = New ChromePdfRenderer()
Dim pdf = renderer.RenderHtmlFileAsPdf("input.html")
pdf.SaveAs("output.pdf")
Console.WriteLine("PDF created successfully")
End Sub
End Class
Mehrere PDFs zusammenführen
Aspose.PDF erfordert eine manuelle Iteration der Seiten.IronPDF stellt eine statische Merge Methode bereit.
Aspose.PDF Implementierung:
// NuGet: Install-Package Aspose.PDF
using Aspose.Pdf;
using System;
class Program
{
static void Main()
{
var document1 = new Document("file1.pdf");
var document2 = new Document("file2.pdf");
foreach (Page page in document2.Pages)
{
document1.Pages.Add(page);
}
document1.Save("merged.pdf");
Console.WriteLine("PDFs merged successfully");
}
}
// NuGet: Install-Package Aspose.PDF
using Aspose.Pdf;
using System;
class Program
{
static void Main()
{
var document1 = new Document("file1.pdf");
var document2 = new Document("file2.pdf");
foreach (Page page in document2.Pages)
{
document1.Pages.Add(page);
}
document1.Save("merged.pdf");
Console.WriteLine("PDFs merged successfully");
}
}
Imports Aspose.Pdf
Imports System
Class Program
Shared Sub Main()
Dim document1 As New Document("file1.pdf")
Dim document2 As New Document("file2.pdf")
For Each page As Page In document2.Pages
document1.Pages.Add(page)
Next
document1.Save("merged.pdf")
Console.WriteLine("PDFs merged successfully")
End Sub
End Class
IronPDF-Implementierung:
// NuGet: Install-Package IronPdf
using IronPdf;
using System;
using System.Collections.Generic;
class Program
{
static void Main()
{
var pdf1 = PdfDocument.FromFile("file1.pdf");
var pdf2 = PdfDocument.FromFile("file2.pdf");
var merged = PdfDocument.Merge(pdf1, pdf2);
merged.SaveAs("merged.pdf");
Console.WriteLine("PDFs merged successfully");
}
}
// NuGet: Install-Package IronPdf
using IronPdf;
using System;
using System.Collections.Generic;
class Program
{
static void Main()
{
var pdf1 = PdfDocument.FromFile("file1.pdf");
var pdf2 = PdfDocument.FromFile("file2.pdf");
var merged = PdfDocument.Merge(pdf1, pdf2);
merged.SaveAs("merged.pdf");
Console.WriteLine("PDFs merged successfully");
}
}
Imports IronPdf
Imports System
Imports System.Collections.Generic
Module Program
Sub Main()
Dim pdf1 = PdfDocument.FromFile("file1.pdf")
Dim pdf2 = PdfDocument.FromFile("file2.pdf")
Dim merged = PdfDocument.Merge(pdf1, pdf2)
merged.SaveAs("merged.pdf")
Console.WriteLine("PDFs merged successfully")
End Sub
End Module
Textextraktion
Aspose.PDF Implementierung:
using Aspose.Pdf;
using Aspose.Pdf.Text;
var document = new Document("document.pdf");
var absorber = new TextAbsorber();
foreach (Page page in document.Pages)
{
page.Accept(absorber);
}
string extractedText = absorber.Text;
Console.WriteLine(extractedText);
using Aspose.Pdf;
using Aspose.Pdf.Text;
var document = new Document("document.pdf");
var absorber = new TextAbsorber();
foreach (Page page in document.Pages)
{
page.Accept(absorber);
}
string extractedText = absorber.Text;
Console.WriteLine(extractedText);
Imports Aspose.Pdf
Imports Aspose.Pdf.Text
Dim document As New Document("document.pdf")
Dim absorber As New TextAbsorber()
For Each page As Page In document.Pages
page.Accept(absorber)
Next
Dim extractedText As String = absorber.Text
Console.WriteLine(extractedText)
IronPDF-Implementierung:
using IronPdf;
var pdf = PdfDocument.FromFile("document.pdf");
// Extract all text - one line!
string allText = pdf.ExtractAllText();
Console.WriteLine(allText);
// Or extract from specific page
string page1Text = pdf.ExtractTextFromPage(0);
using IronPdf;
var pdf = PdfDocument.FromFile("document.pdf");
// Extract all text - one line!
string allText = pdf.ExtractAllText();
Console.WriteLine(allText);
// Or extract from specific page
string page1Text = pdf.ExtractTextFromPage(0);
Imports IronPdf
Dim pdf = PdfDocument.FromFile("document.pdf")
' Extract all text - one line!
Dim allText As String = pdf.ExtractAllText()
Console.WriteLine(allText)
' Or extract from specific page
Dim page1Text As String = pdf.ExtractTextFromPage(0)
IronPDF vereinfacht die Textextraktion von mehreren Schritten auf einen einzigen Methodenaufruf.
Wasserzeichen hinzufügen
Aspose.PDF Implementierung:
using Aspose.Pdf;
using Aspose.Pdf.Text;
var document = new Document("document.pdf");
var textStamp = new TextStamp("CONFIDENTIAL");
textStamp.Background = true;
textStamp.XIndent = 100;
textStamp.YIndent = 100;
textStamp.Rotate = Rotation.on45;
textStamp.Opacity = 0.5;
textStamp.TextState.Font = FontRepository.FindFont("Arial");
textStamp.TextState.FontSize = 72;
textStamp.TextState.ForegroundColor = Color.Red;
foreach (Page page in document.Pages)
{
page.AddStamp(textStamp);
}
document.Save("watermarked.pdf");
using Aspose.Pdf;
using Aspose.Pdf.Text;
var document = new Document("document.pdf");
var textStamp = new TextStamp("CONFIDENTIAL");
textStamp.Background = true;
textStamp.XIndent = 100;
textStamp.YIndent = 100;
textStamp.Rotate = Rotation.on45;
textStamp.Opacity = 0.5;
textStamp.TextState.Font = FontRepository.FindFont("Arial");
textStamp.TextState.FontSize = 72;
textStamp.TextState.ForegroundColor = Color.Red;
foreach (Page page in document.Pages)
{
page.AddStamp(textStamp);
}
document.Save("watermarked.pdf");
Imports Aspose.Pdf
Imports Aspose.Pdf.Text
Dim document As New Document("document.pdf")
Dim textStamp As New TextStamp("CONFIDENTIAL")
textStamp.Background = True
textStamp.XIndent = 100
textStamp.YIndent = 100
textStamp.Rotate = Rotation.on45
textStamp.Opacity = 0.5
textStamp.TextState.Font = FontRepository.FindFont("Arial")
textStamp.TextState.FontSize = 72
textStamp.TextState.ForegroundColor = Color.Red
For Each page As Page In document.Pages
page.AddStamp(textStamp)
Next
document.Save("watermarked.pdf")
IronPDF-Implementierung:
using IronPdf;
using IronPdf.Editing;
var pdf = PdfDocument.FromFile("document.pdf");
// HTML-based watermark with full styling control
string watermarkHtml = @"
<div style='
color: red;
opacity: 0.5;
font-family: Arial;
font-size: 72px;
font-weight: bold;
text-align: center;
'>CONFIDENTIAL</div>";
pdf.ApplyWatermark(watermarkHtml,
rotation: 45,
verticalAlignment: VerticalAlignment.Middle,
horizontalAlignment: HorizontalAlignment.Center);
pdf.SaveAs("watermarked.pdf");
using IronPdf;
using IronPdf.Editing;
var pdf = PdfDocument.FromFile("document.pdf");
// HTML-based watermark with full styling control
string watermarkHtml = @"
<div style='
color: red;
opacity: 0.5;
font-family: Arial;
font-size: 72px;
font-weight: bold;
text-align: center;
'>CONFIDENTIAL</div>";
pdf.ApplyWatermark(watermarkHtml,
rotation: 45,
verticalAlignment: VerticalAlignment.Middle,
horizontalAlignment: HorizontalAlignment.Center);
pdf.SaveAs("watermarked.pdf");
Imports IronPdf
Imports IronPdf.Editing
Dim pdf = PdfDocument.FromFile("document.pdf")
' HTML-based watermark with full styling control
Dim watermarkHtml As String = "
<div style='
color: red;
opacity: 0.5;
font-family: Arial;
font-size: 72px;
font-weight: bold;
text-align: center;
'>CONFIDENTIAL</div>"
pdf.ApplyWatermark(watermarkHtml,
rotation:=45,
verticalAlignment:=VerticalAlignment.Middle,
horizontalAlignment:=HorizontalAlignment.Center)
pdf.SaveAs("watermarked.pdf")
IronPDF verwendet HTML/CSS-basierte Wasserzeichen und bietet so volle Kontrolle über das Styling durch vertraute Webtechnologien.
Passwortschutz
Aspose.PDF Implementierung:
using Aspose.Pdf;
var document = new Document("document.pdf");
document.Encrypt("userPassword", "ownerPassword", DocumentPrivilege.ForbidAll, CryptoAlgorithm.AESx256);
document.Save("protected.pdf");
using Aspose.Pdf;
var document = new Document("document.pdf");
document.Encrypt("userPassword", "ownerPassword", DocumentPrivilege.ForbidAll, CryptoAlgorithm.AESx256);
document.Save("protected.pdf");
Imports Aspose.Pdf
Dim document As New Document("document.pdf")
document.Encrypt("userPassword", "ownerPassword", DocumentPrivilege.ForbidAll, CryptoAlgorithm.AESx256)
document.Save("protected.pdf")
IronPDF-Implementierung:
using IronPdf;
var pdf = PdfDocument.FromFile("document.pdf");
// Set passwords
pdf.SecuritySettings.UserPassword = "userPassword";
pdf.SecuritySettings.OwnerPassword = "ownerPassword";
// Set permissions
pdf.SecuritySettings.AllowUserPrinting = PdfPrintSecurity.FullPrintRights;
pdf.SecuritySettings.AllowUserCopyPasteContent = false;
pdf.SecuritySettings.AllowUserEdits = PdfEditSecurity.NoEdit;
pdf.SaveAs("protected.pdf");
using IronPdf;
var pdf = PdfDocument.FromFile("document.pdf");
// Set passwords
pdf.SecuritySettings.UserPassword = "userPassword";
pdf.SecuritySettings.OwnerPassword = "ownerPassword";
// Set permissions
pdf.SecuritySettings.AllowUserPrinting = PdfPrintSecurity.FullPrintRights;
pdf.SecuritySettings.AllowUserCopyPasteContent = false;
pdf.SecuritySettings.AllowUserEdits = PdfEditSecurity.NoEdit;
pdf.SaveAs("protected.pdf");
Imports IronPdf
Dim pdf = PdfDocument.FromFile("document.pdf")
' Set passwords
pdf.SecuritySettings.UserPassword = "userPassword"
pdf.SecuritySettings.OwnerPassword = "ownerPassword"
' Set permissions
pdf.SecuritySettings.AllowUserPrinting = PdfPrintSecurity.FullPrintRights
pdf.SecuritySettings.AllowUserCopyPasteContent = False
pdf.SecuritySettings.AllowUserEdits = PdfEditSecurity.NoEdit
pdf.SaveAs("protected.pdf")
IronPDF bietet eine granulare Kontrolle über Berechtigungen durch stark typisierte Eigenschaften. Weitere Optionen finden Sie in der Dokumentation zur Verschlüsselung .
Kopf- und Fußzeilen
IronPDF-Implementierung:
using IronPdf;
var renderer = new ChromePdfRenderer();
renderer.RenderingOptions.HtmlHeader = new HtmlHeaderFooter
{
HtmlFragment = @"
<div style='text-align:center; font-family:Arial; font-size:12px;'>
Company Header
</div>",
DrawDividerLine = true,
MaxHeight = 30
};
renderer.RenderingOptions.HtmlFooter = new HtmlHeaderFooter
{
HtmlFragment = @"
<div style='text-align:center; font-family:Arial; font-size:10px;'>
Page {page} of {total-pages}
</div>",
DrawDividerLine = true,
MaxHeight = 25
};
var pdf = renderer.RenderHtmlAsPdf("<h1>Content here</h1>");
pdf.SaveAs("with_headers.pdf");
using IronPdf;
var renderer = new ChromePdfRenderer();
renderer.RenderingOptions.HtmlHeader = new HtmlHeaderFooter
{
HtmlFragment = @"
<div style='text-align:center; font-family:Arial; font-size:12px;'>
Company Header
</div>",
DrawDividerLine = true,
MaxHeight = 30
};
renderer.RenderingOptions.HtmlFooter = new HtmlHeaderFooter
{
HtmlFragment = @"
<div style='text-align:center; font-family:Arial; font-size:10px;'>
Page {page} of {total-pages}
</div>",
DrawDividerLine = true,
MaxHeight = 25
};
var pdf = renderer.RenderHtmlAsPdf("<h1>Content here</h1>");
pdf.SaveAs("with_headers.pdf");
Imports IronPdf
Dim renderer As New ChromePdfRenderer()
renderer.RenderingOptions.HtmlHeader = New HtmlHeaderFooter With {
.HtmlFragment = "
<div style='text-align:center; font-family:Arial; font-size:12px;'>
Company Header
</div>",
.DrawDividerLine = True,
.MaxHeight = 30
}
renderer.RenderingOptions.HtmlFooter = New HtmlHeaderFooter With {
.HtmlFragment = "
<div style='text-align:center; font-family:Arial; font-size:10px;'>
Page {page} of {total-pages}
</div>",
.DrawDividerLine = True,
.MaxHeight = 25
}
Dim pdf = renderer.RenderHtmlAsPdf("<h1>Content here</h1>")
pdf.SaveAs("with_headers.pdf")
IronPDF unterstützt Platzhalter-Tokens wie {page} und {total-pages} für die dynamische Seitennummerierung. Weitere Optionen finden Sie in der Kopf- und Fußzeilen-Dokumentation.
Kritische Hinweise zur Migration
Änderung der Seitenindizierung
Aspose.PDF verwendet eine 1-basierte Indizierung.IronPDF verwendet eine 0-basierte Indizierung:
// Aspose.PDF - 1-based indexing
var firstPage = doc.Pages[1]; // First page
var thirdPage = doc.Pages[3]; // Third page
//IronPDF- 0-based indexing
var firstPage = pdf.Pages[0]; // First page
var thirdPage = pdf.Pages[2]; // Third page
// Aspose.PDF - 1-based indexing
var firstPage = doc.Pages[1]; // First page
var thirdPage = doc.Pages[3]; // Third page
//IronPDF- 0-based indexing
var firstPage = pdf.Pages[0]; // First page
var thirdPage = pdf.Pages[2]; // Third page
Imports Aspose.Pdf
Imports IronPdf
' Aspose.PDF - 1-based indexing
Dim firstPageAspose = doc.Pages(1) ' First page
Dim thirdPageAspose = doc.Pages(3) ' Third page
' IronPDF - 0-based indexing
Dim firstPageIron = pdf.Pages(0) ' First page
Dim thirdPageIron = pdf.Pages(2) ' Third page
Lizenzdatei in Code-Schlüssel
Ersetzen Sie die Dateilizenzierung .lic durch codebasierte Aktivierung:
// Aspose.PDF
var license = new Aspose.Pdf.License();
license.SetLicense("Aspose.Pdf.lic");
// IronPDF
IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY";
// Or from environment variable
IronPdf.License.LicenseKey = Environment.GetEnvironmentVariable("IRONPDF_LICENSE_KEY");
// Aspose.PDF
var license = new Aspose.Pdf.License();
license.SetLicense("Aspose.Pdf.lic");
// IronPDF
IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY";
// Or from environment variable
IronPdf.License.LicenseKey = Environment.GetEnvironmentVariable("IRONPDF_LICENSE_KEY");
Imports Aspose.Pdf
Imports System
Dim license As New License()
license.SetLicense("Aspose.Pdf.lic")
IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY"
' Or from environment variable
IronPdf.License.LicenseKey = Environment.GetEnvironmentVariable("IRONPDF_LICENSE_KEY")
ASP.NET Core -Integration
IronPDF-Muster:
[ApiController]
[Route("[controller]")]
public class PdfController : ControllerBase
{
[HttpGet("generate")]
public IActionResult GeneratePdf()
{
var renderer = new ChromePdfRenderer();
var pdf = renderer.RenderHtmlAsPdf("<h1>Report</h1>");
return File(pdf.BinaryData, "application/pdf", "report.pdf");
}
[HttpGet("generate-async")]
public async Task<IActionResult> GeneratePdfAsync()
{
var renderer = new ChromePdfRenderer();
var pdf = await renderer.RenderHtmlAsPdfAsync("<h1>Report</h1>");
return File(pdf.Stream, "application/pdf", "report.pdf");
}
}
[ApiController]
[Route("[controller]")]
public class PdfController : ControllerBase
{
[HttpGet("generate")]
public IActionResult GeneratePdf()
{
var renderer = new ChromePdfRenderer();
var pdf = renderer.RenderHtmlAsPdf("<h1>Report</h1>");
return File(pdf.BinaryData, "application/pdf", "report.pdf");
}
[HttpGet("generate-async")]
public async Task<IActionResult> GeneratePdfAsync()
{
var renderer = new ChromePdfRenderer();
var pdf = await renderer.RenderHtmlAsPdfAsync("<h1>Report</h1>");
return File(pdf.Stream, "application/pdf", "report.pdf");
}
}
Imports Microsoft.AspNetCore.Mvc
<ApiController>
<Route("[controller]")>
Public Class PdfController
Inherits ControllerBase
<HttpGet("generate")>
Public Function GeneratePdf() As IActionResult
Dim renderer = New ChromePdfRenderer()
Dim pdf = renderer.RenderHtmlAsPdf("<h1>Report</h1>")
Return File(pdf.BinaryData, "application/pdf", "report.pdf")
End Function
<HttpGet("generate-async")>
Public Async Function GeneratePdfAsync() As Task(Of IActionResult)
Dim renderer = New ChromePdfRenderer()
Dim pdf = Await renderer.RenderHtmlAsPdfAsync("<h1>Report</h1>")
Return File(pdf.Stream, "application/pdf", "report.pdf")
End Function
End Class
Dependency Injection Konfiguration
// Program.cs
public void ConfigureServices(IServiceCollection services)
{
// Set license once
IronPdf.License.LicenseKey = Configuration["IronPdf:LicenseKey"];
// Register renderer as scoped service
services.AddScoped<ChromePdfRenderer>();
}
// Program.cs
public void ConfigureServices(IServiceCollection services)
{
// Set license once
IronPdf.License.LicenseKey = Configuration["IronPdf:LicenseKey"];
// Register renderer as scoped service
services.AddScoped<ChromePdfRenderer>();
}
' Program.vb
Public Sub ConfigureServices(services As IServiceCollection)
' Set license once
IronPdf.License.LicenseKey = Configuration("IronPdf:LicenseKey")
' Register renderer as scoped service
services.AddScoped(Of ChromePdfRenderer)()
End Sub
Performance-Optimierung
// 1. Reuse renderer instance
private static readonly ChromePdfRenderer SharedRenderer = new ChromePdfRenderer();
// 2. Disable unnecessary features for speed
var renderer = new ChromePdfRenderer();
renderer.RenderingOptions.EnableJavaScript = false; // If not needed
renderer.RenderingOptions.WaitFor.RenderDelay(0); // No delay
renderer.RenderingOptions.Timeout = 30000; // 30s max
// 3. Proper disposal
using (var pdf = renderer.RenderHtmlAsPdf(html))
{
pdf.SaveAs("output.pdf");
}
// 1. Reuse renderer instance
private static readonly ChromePdfRenderer SharedRenderer = new ChromePdfRenderer();
// 2. Disable unnecessary features for speed
var renderer = new ChromePdfRenderer();
renderer.RenderingOptions.EnableJavaScript = false; // If not needed
renderer.RenderingOptions.WaitFor.RenderDelay(0); // No delay
renderer.RenderingOptions.Timeout = 30000; // 30s max
// 3. Proper disposal
using (var pdf = renderer.RenderHtmlAsPdf(html))
{
pdf.SaveAs("output.pdf");
}
' 1. Reuse renderer instance
Private Shared ReadOnly SharedRenderer As New ChromePdfRenderer()
' 2. Disable unnecessary features for speed
Dim renderer As New ChromePdfRenderer()
renderer.RenderingOptions.EnableJavaScript = False ' If not needed
renderer.RenderingOptions.WaitFor.RenderDelay(0) ' No delay
renderer.RenderingOptions.Timeout = 30000 ' 30s max
' 3. Proper disposal
Using pdf = renderer.RenderHtmlAsPdf(html)
pdf.SaveAs("output.pdf")
End Using
Fehlerbehebung bei allgemeinen Migrationsproblemen
Problem: HtmlLoadOptions nicht gefunden
Ersetzen durch ChromePdfRenderer:
// Remove this
var doc = new Document(stream, new HtmlLoadOptions());
// Use this
var renderer = new ChromePdfRenderer();
var pdf = renderer.RenderHtmlAsPdf(htmlString);
// Remove this
var doc = new Document(stream, new HtmlLoadOptions());
// Use this
var renderer = new ChromePdfRenderer();
var pdf = renderer.RenderHtmlAsPdf(htmlString);
Dim doc = New Document(stream, New HtmlLoadOptions())
Dim renderer = New ChromePdfRenderer()
Dim pdf = renderer.RenderHtmlAsPdf(htmlString)
Thema: TextFragmentAbsorber nicht gefunden
Verwenden Sie die direkte Textextraktion:
// Remove this
var absorber = new TextFragmentAbsorber();
page.Accept(absorber);
string text = absorber.Text;
// Use this
var pdf = PdfDocument.FromFile("doc.pdf");
string text = pdf.ExtractAllText();
// Remove this
var absorber = new TextFragmentAbsorber();
page.Accept(absorber);
string text = absorber.Text;
// Use this
var pdf = PdfDocument.FromFile("doc.pdf");
string text = pdf.ExtractAllText();
' Remove this
Dim absorber As New TextFragmentAbsorber()
page.Accept(absorber)
Dim text As String = absorber.Text
' Use this
Dim pdf = PdfDocument.FromFile("doc.pdf")
Dim text As String = pdf.ExtractAllText()
Issue: PdfFileEditor.Concatenate nicht verfügbar
Verwenden Sie PdfDocument.Merge():
// Remove this
var editor = new PdfFileEditor();
editor.Concatenate(files, output);
// Use this
var pdfs = files.Select(PdfDocument.FromFile).ToList();
var merged = PdfDocument.Merge(pdfs);
merged.SaveAs(output);
// Remove this
var editor = new PdfFileEditor();
editor.Concatenate(files, output);
// Use this
var pdfs = files.Select(PdfDocument.FromFile).ToList();
var merged = PdfDocument.Merge(pdfs);
merged.SaveAs(output);
' Remove this
Dim editor = New PdfFileEditor()
editor.Concatenate(files, output)
' Use this
Dim pdfs = files.Select(Function(file) PdfDocument.FromFile(file)).ToList()
Dim merged = PdfDocument.Merge(pdfs)
merged.SaveAs(output)
Post-Migrations-Checkliste
Überprüfen Sie nach Abschluss der Codemigration Folgendes:
- Entfernen Sie die Aspose.PDF-Lizenzdateien (.lic)
- Überprüfen Sie die HTML-Rendering-Qualität (CSS Grid, Flexbox sollten jetzt korrekt funktionieren)
- Testen von Grenzfällen mit großen Dokumenten und komplexem CSS
- Aktualisierung der Seitenindexverweise (von 1-basiert auf 0-basiert)
- Docker-Konfigurationen gegebenenfalls aktualisieren
- CI/CD-Pipelines mit neuer Lizenzschlüsselkonfiguration aktualisieren
- Neue Muster für Ihr Team dokumentieren
Zukunftssicherheit für Ihre PDF-Infrastruktur
Mit .NET 10 am Horizont und C# 14, das neue Sprachfunktionen einführt, stellt die Wahl einer PDF-Bibliothek mit modernen Rendering-Funktionen die Kompatibilität mit sich entwickelnden Webstandards sicher. Die Chromium-Engine von IronPDF rendert dasselbe HTML/CSS, das in modernen Browsern funktioniert. Das bedeutet, dass Ihre PDF-Vorlagen auch bei Projekten, die bis ins Jahr 2025 oder 2026 reichen, aktuell bleiben - ohne die CSS-Einschränkungen der Flying Saucer-Engine von Aspose.PDF.
Zusätzliche Ressourcen
Durch die Migration von Aspose.PDF zu IronPDF wird Ihre PDF-Codebasis von einer veralteten HTML-Rendering-Engine auf modernes Chromium-basiertes Rendering umgestellt. Die Abschaffung von MemoryStream-Wrappern, die vereinfachte Textextraktion und die hervorragende CSS3-Unterstützung sorgen für unmittelbare Produktivitätssteigerungen und reduzieren die langfristigen Lizenzkosten von jährlichen Abonnements auf eine einmalige Investition.

