Wie man XAML zu PDF in NET MAUI konvertiert
Warum von pdforge zu IronPDF migrieren
Verstehen Sie pdforge
pdforge (umbenannt zu "pdf noodle" im Jahr 2026 — pdfnoodle.com; der api.pdforge.com Hostname funktioniert weiterhin über 301-Weiterleitungen bis Ende 2026) ist eine cloud-basierte, vorlagengetriebene PDF-Generierungs-API, die eine einfache Möglichkeit bietet, PDF-Dateien zu erstellen, indem sie über HTTP-Aufrufe in Ihre Anwendung integriert wird. Es gibt kein offizielles .NET SDK auf NuGet — die Integration erfolgt mit HttpClient gegen die dokumentierten REST-Endpunkte. Indem sie die Aufgabe der PDF-Erstellung an eine externe API auslagern, können Entwickler den Entwicklungsprozess vereinfachen. Allerdings hat pdforge auch Nachteile, wie z. B. externe Abhängigkeiten, begrenzte Anpassungsmöglichkeiten und laufende Abonnementkosten, derer sich Entwickler bewusst sein sollten.
Das Problem der Cloud-API-Abhängigkeit
pdforge verarbeitet alle Dokumente auf externen Cloud-Servern. Diese Architektur schafft erhebliche Probleme für Produktionsanwendungen:
-
Externe Serververarbeitung: Jedes von Ihnen generierte PDF erfordert das Senden Ihrer HTML-/Daten an die Server von pdforge – Ihre Dokumente verlassen somit Ihre Infrastruktur.
-
Datenschutz- und Compliance-Risiken: Sensible Daten werden über das Internet an Server von Drittanbietern übertragen. Bei der Verwendung von pdforge müssen die Entwickler Sicherheitsbedenken in Bezug auf die Übermittlung von Daten an eine externe API berücksichtigen. Wenn der PDF-Inhalt sensible Informationen enthält, könnte dies ein kritischer Punkt sein.
-
Laufende Abonnementkosten: Monatliche Gebühren fallen unbegrenzt an, ohne dass Eigentumsrechte erworben werden. Das SaaS-Modell von pdforge führt zu kontinuierlichen Betriebskosten, die sich im Laufe der Zeit summieren können.
-
Internetabhängigkeit: Es wird keine PDF-Datei generiert, wenn keine Netzwerkverbindung besteht.
-
Ratenbegrenzungen: API-Nutzungsbeschränkungen können Anwendungen mit hohem Datenaufkommen ausbremsen.
- Netzwerklatenz: Die Roundtrip-Zeit verlängert die Generierung jeder PDF-Datei um einige Sekunden.
pdforge vs IronPDF Vergleich
| Feature | pdforge | IronPDF |
|---|---|---|
| Bereitstellungsart | Cloud-basierte API | Lokale Bibliothek |
| Abhängigkeiten | Erfordert Internet und API-Authentifizierung | Keine externen Abhängigkeiten |
| Anpassung | Begrenzte Kontrolle über die PDF-Erzeugung | Volle Kontrolle über Anpassungen |
| Kostenstruktur | Laufendes Abonnement | Einmalige Kaufoption |
| Sicherheit | Mögliche Probleme mit Daten, die über das Internet gesendet werden | Die Datenverarbeitung bleibt vollständig in der lokalen Umgebung |
| Komplexität der Einrichtung | Leichtere Ersteinrichtung durch externe Bearbeitung | Erfordert mehr anfängliche Einrichtung und Konfiguration |
IronPDF hebt sich durch die Bereitstellung einer vollständig lokalen Bibliothek ab, die Entwicklern die vollständige Kontrolle über den PDF-Erstellungsprozess ermöglicht. Dies ist besonders vorteilhaft für Anwendungen, bei denen die interne Handhabung von Dateien bevorzugt wird oder bei denen externe API-Aufrufe Sicherheitsbedenken aufwerfen.IronPDF verarbeitet alles lokal und minimiert so die Risiken.
Für Teams, die die Einführung von .NET 10 und C# 14 auf den aktuellen .NET-Versionen planen, bietet IronPDF eine lokale Verarbeitungsgrundlage, die die Abhängigkeit von der Cloud eliminiert und gleichzeitig umfassende PDF-Manipulationsfunktionen hinzufügt.
Bevor Sie beginnen
Voraussetzungen
- .NET -Umgebung: .NET Framework 4.6.2+ oder .NET Core 3.1+ / .NET 5/6/7/8/9+
- NuGet -Zugriff: Möglichkeit zur Installation von NuGet -Paketen
- IronPDF -Lizenz: Ihren Lizenzschlüssel erhalten Sie unter IronPDF.
NuGet-Paketänderungen
# pdforge has no official .NET SDK on NuGet — integration is HttpClient + JSON.
# If your project depends only on built-in System.Net.Http, there is no
# competitor package to remove. Just install IronPDF:
dotnet add package IronPdf
# pdforge has no official .NET SDK on NuGet — integration is HttpClient + JSON.
# If your project depends only on built-in System.Net.Http, there is no
# competitor package to remove. Just install IronPDF:
dotnet add package IronPdf
Lizenz-Konfiguration
// Add at application startup (Program.cs or Startup.cs)
IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY";
// Add at application startup (Program.cs or Startup.cs)
IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY";
' Add at application startup (Program.vb or Startup.vb)
IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY"
Identifizieren Sie die Verwendung von pdforge
# Find pdforge / pdf noodle endpoint usage
grep -r "api\.pdforge\.com\|api\.pdfnoodle\.com" --include="*.cs" .
# Find API key / Bearer token references
grep -r "pdfnoodle_api_\|pdforge_api_" --include="*.cs" --include="*.json" --include="*.config" .
# Find Chromium header/footer templates that need migrating
grep -r "totalPages\|pageNumber\|footerTemplate\|headerTemplate" --include="*.cs" .
# Find pdforge / pdf noodle endpoint usage
grep -r "api\.pdforge\.com\|api\.pdfnoodle\.com" --include="*.cs" .
# Find API key / Bearer token references
grep -r "pdfnoodle_api_\|pdforge_api_" --include="*.cs" --include="*.json" --include="*.config" .
# Find Chromium header/footer templates that need migrating
grep -r "totalPages\|pageNumber\|footerTemplate\|headerTemplate" --include="*.cs" .
Komplette API-Referenz
Namensraumänderungen
// Before: pdforge — raw HttpClient against api.pdfnoodle.com
using System.Net.Http;
using System.Net.Http.Headers;
using System.Text;
using System.Text.Json;
// After: IronPDF
using IronPdf;
using IronPdf.Rendering;
// Before: pdforge — raw HttpClient against api.pdfnoodle.com
using System.Net.Http;
using System.Net.Http.Headers;
using System.Text;
using System.Text.Json;
// After: IronPDF
using IronPdf;
using IronPdf.Rendering;
Imports System.Net.Http
Imports System.Net.Http.Headers
Imports System.Text
Imports System.Text.Json
Imports IronPdf
Imports IronPdf.Rendering
Kernkonzept-Zuordnungen
| pdforge (REST) | IronPDF |
|---|---|
HttpClient + Authorization: Bearer pdfnoodle_api_... |
new ChromePdfRenderer() |
POST https://api.pdfnoodle.com/v1/html-to-pdf/sync |
renderer.RenderHtmlAsPdf(html) |
JSON-Body { html, pdfParams } |
ChromePdfRenderer + RenderingOptions |
Antwort: JSON-Umschlag mit signedUrl |
PdfDocument |
Rückgabe: byte[] (nach Abrufen von signedUrl) |
pdf.BinaryData |
Operationszuordnungen
| pdforge | IronPDF |
|---|---|
POST /v1/html-to-pdf/sync mit { html } |
renderer.RenderHtmlAsPdf(html) |
| URL abrufen, dann HTML POSTen (kein dedizierter URL-Endpunkt) | renderer.RenderUrlAsPdf(url) |
Download signedUrl dann File.WriteAllBytes(path, bytes) |
pdf.SaveAs(path) |
await http.GetByteArrayAsync(signedUrl) |
pdf.BinaryData |
Konfigurations-Zuordnungen
pdforge pdfParams |
IronPDF(RenderingOptions) |
|---|---|
format: "A4" |
renderer.RenderingOptions.PaperSize = PdfPaperSize.A4 |
landscape: true |
renderer.RenderingOptions.PaperOrientation = PdfPaperOrientation.Landscape |
margin: { top: "20px" } |
renderer.RenderingOptions.MarginTop = 20 |
footerTemplate mit <span class="pageNumber"> / <span class="totalPages"> |
TextFooter = new TextHeaderFooter { CenterText = "Page {page} of {total-pages}" } |
Neue Funktionen, die in pdforge nicht verfügbar sind
| IronPDF Merkmal | Beschreibung |
|---|---|
PdfDocument.Merge() |
Kombinieren mehrerer PDFs |
pdf.ExtractAllText() |
Extrahieren von Text aus PDFs |
pdf.ApplyWatermark() |
Wasserzeichen hinzufügen |
pdf.SecuritySettings |
Passwortschutz |
pdf.Form |
Ausfüllen von Formularen |
pdf.SignWithDigitalSignature() |
Digitale Signaturen |
Beispiele für die Code-Migration
Beispiel 1: Konvertierung von HTML-Strings in PDF
Vor (pdforge):
// REST API — no .NET SDK on NuGet. Integration is HttpClient + JSON POST.
using System.IO;
using System.Net.Http;
using System.Net.Http.Headers;
using System.Text;
using System.Text.Json;
using System.Threading.Tasks;
class Program
{
static async Task Main()
{
using var http = new HttpClient();
http.DefaultRequestHeaders.Authorization =
new AuthenticationHeaderValue("Bearer", "pdfnoodle_api_YOUR_KEY");
var body = new { html = "<html><body><h1>Hello World</h1></body></html>" };
var json = new StringContent(JsonSerializer.Serialize(body), Encoding.UTF8, "application/json");
var resp = await http.PostAsync("https://api.pdfnoodle.com/v1/html-to-pdf/sync", json);
resp.EnsureSuccessStatusCode();
using var doc = JsonDocument.Parse(await resp.Content.ReadAsStringAsync());
var pdfBytes = await http.GetByteArrayAsync(doc.RootElement.GetProperty("signedUrl").GetString());
File.WriteAllBytes("output.pdf", pdfBytes);
}
}
// REST API — no .NET SDK on NuGet. Integration is HttpClient + JSON POST.
using System.IO;
using System.Net.Http;
using System.Net.Http.Headers;
using System.Text;
using System.Text.Json;
using System.Threading.Tasks;
class Program
{
static async Task Main()
{
using var http = new HttpClient();
http.DefaultRequestHeaders.Authorization =
new AuthenticationHeaderValue("Bearer", "pdfnoodle_api_YOUR_KEY");
var body = new { html = "<html><body><h1>Hello World</h1></body></html>" };
var json = new StringContent(JsonSerializer.Serialize(body), Encoding.UTF8, "application/json");
var resp = await http.PostAsync("https://api.pdfnoodle.com/v1/html-to-pdf/sync", json);
resp.EnsureSuccessStatusCode();
using var doc = JsonDocument.Parse(await resp.Content.ReadAsStringAsync());
var pdfBytes = await http.GetByteArrayAsync(doc.RootElement.GetProperty("signedUrl").GetString());
File.WriteAllBytes("output.pdf", pdfBytes);
}
}
Imports System.IO
Imports System.Net.Http
Imports System.Net.Http.Headers
Imports System.Text
Imports System.Text.Json
Imports System.Threading.Tasks
Module Program
Async Function Main() As Task
Using http As New HttpClient()
http.DefaultRequestHeaders.Authorization = New AuthenticationHeaderValue("Bearer", "pdfnoodle_api_YOUR_KEY")
Dim body = New With {.html = "<html><body><h1>Hello World</h1></body></html>"}
Dim json As New StringContent(JsonSerializer.Serialize(body), Encoding.UTF8, "application/json")
Dim resp = Await http.PostAsync("https://api.pdfnoodle.com/v1/html-to-pdf/sync", json)
resp.EnsureSuccessStatusCode()
Using doc = JsonDocument.Parse(Await resp.Content.ReadAsStringAsync())
Dim pdfBytes = Await http.GetByteArrayAsync(doc.RootElement.GetProperty("signedUrl").GetString())
File.WriteAllBytes("output.pdf", pdfBytes)
End Using
End Using
End Function
End Module
Nach (IronPDF):
// NuGet: Install-Package IronPdf
using IronPdf;
class Program
{
static void Main()
{
var renderer = new ChromePdfRenderer();
var html = "<html><body><h1>Hello World</h1></body></html>";
var pdf = renderer.RenderHtmlAsPdf(html);
pdf.SaveAs("output.pdf");
}
}
// NuGet: Install-Package IronPdf
using IronPdf;
class Program
{
static void Main()
{
var renderer = new ChromePdfRenderer();
var html = "<html><body><h1>Hello World</h1></body></html>";
var pdf = renderer.RenderHtmlAsPdf(html);
pdf.SaveAs("output.pdf");
}
}
Imports IronPdf
Class Program
Shared Sub Main()
Dim renderer = New ChromePdfRenderer()
Dim html = "<html><body><h1>Hello World</h1></body></html>"
Dim pdf = renderer.RenderHtmlAsPdf(html)
pdf.SaveAs("output.pdf")
End Sub
End Class
Der grundlegende Unterschied ist das Verarbeitungsmodell und der Rückgabetyp. pdforge erfordert ein authentifiziertes HttpClient POST an https://api.pdfnoodle.com/v1/html-to-pdf/sync, das einen JSON-Umschlag mit einer signierten S3-URL zurückgibt — dann rufen Sie die PDF-Bytes von dieser URL ab und schreiben sie mit File.WriteAllBytes().
IronPDF verwendet ChromePdfRenderer mit RenderHtmlAsPdf(), das ein PdfDocument Objekt zurückgibt. Dieses Objekt kann direkt mit SaveAs() gespeichert werden, oder Sie können auf pdf.BinaryData zugreifen, wenn Sie die Rohbytes benötigen. Das PdfDocument ermöglicht auch die Bearbeitung (Wasserzeichen hinzufügen, mit anderen PDFs zusammenführen, Sicherheit hinzufügen) vor dem Speichern. Umfassende Beispiele finden Sie in der HTML to PDF Dokumentation.
Beispiel 2: Konvertierung von URL in PDF
Vor (pdforge):
// REST API — no .NET SDK on NuGet. pdforge has no dedicated URL endpoint;
// fetch the page yourself and POST its HTML to /v1/html-to-pdf/sync.
using System.IO;
using System.Net.Http;
using System.Net.Http.Headers;
using System.Text;
using System.Text.Json;
using System.Threading.Tasks;
class Program
{
static async Task Main()
{
using var http = new HttpClient();
http.DefaultRequestHeaders.Authorization =
new AuthenticationHeaderValue("Bearer", "pdfnoodle_api_YOUR_KEY");
var sourceHtml = await http.GetStringAsync("https://example.com");
var body = new { html = sourceHtml };
var json = new StringContent(JsonSerializer.Serialize(body), Encoding.UTF8, "application/json");
var resp = await http.PostAsync("https://api.pdfnoodle.com/v1/html-to-pdf/sync", json);
resp.EnsureSuccessStatusCode();
using var doc = JsonDocument.Parse(await resp.Content.ReadAsStringAsync());
var pdfBytes = await http.GetByteArrayAsync(doc.RootElement.GetProperty("signedUrl").GetString());
File.WriteAllBytes("webpage.pdf", pdfBytes);
}
}
// REST API — no .NET SDK on NuGet. pdforge has no dedicated URL endpoint;
// fetch the page yourself and POST its HTML to /v1/html-to-pdf/sync.
using System.IO;
using System.Net.Http;
using System.Net.Http.Headers;
using System.Text;
using System.Text.Json;
using System.Threading.Tasks;
class Program
{
static async Task Main()
{
using var http = new HttpClient();
http.DefaultRequestHeaders.Authorization =
new AuthenticationHeaderValue("Bearer", "pdfnoodle_api_YOUR_KEY");
var sourceHtml = await http.GetStringAsync("https://example.com");
var body = new { html = sourceHtml };
var json = new StringContent(JsonSerializer.Serialize(body), Encoding.UTF8, "application/json");
var resp = await http.PostAsync("https://api.pdfnoodle.com/v1/html-to-pdf/sync", json);
resp.EnsureSuccessStatusCode();
using var doc = JsonDocument.Parse(await resp.Content.ReadAsStringAsync());
var pdfBytes = await http.GetByteArrayAsync(doc.RootElement.GetProperty("signedUrl").GetString());
File.WriteAllBytes("webpage.pdf", pdfBytes);
}
}
Imports System.IO
Imports System.Net.Http
Imports System.Net.Http.Headers
Imports System.Text
Imports System.Text.Json
Imports System.Threading.Tasks
Module Program
Async Function Main() As Task
Using http As New HttpClient()
http.DefaultRequestHeaders.Authorization = New AuthenticationHeaderValue("Bearer", "pdfnoodle_api_YOUR_KEY")
Dim sourceHtml As String = Await http.GetStringAsync("https://example.com")
Dim body = New With {Key .html = sourceHtml}
Dim json As New StringContent(JsonSerializer.Serialize(body), Encoding.UTF8, "application/json")
Dim resp As HttpResponseMessage = Await http.PostAsync("https://api.pdfnoodle.com/v1/html-to-pdf/sync", json)
resp.EnsureSuccessStatusCode()
Using doc As JsonDocument = JsonDocument.Parse(Await resp.Content.ReadAsStringAsync())
Dim pdfBytes As Byte() = Await http.GetByteArrayAsync(doc.RootElement.GetProperty("signedUrl").GetString())
File.WriteAllBytes("webpage.pdf", pdfBytes)
End Using
End Using
End Function
End Module
Nach (IronPDF):
// NuGet: Install-Package IronPdf
using IronPdf;
class Program
{
static void Main()
{
var renderer = new ChromePdfRenderer();
var pdf = renderer.RenderUrlAsPdf("https://example.com");
pdf.SaveAs("webpage.pdf");
}
}
// NuGet: Install-Package IronPdf
using IronPdf;
class Program
{
static void Main()
{
var renderer = new ChromePdfRenderer();
var pdf = renderer.RenderUrlAsPdf("https://example.com");
pdf.SaveAs("webpage.pdf");
}
}
Imports IronPdf
Class Program
Shared Sub Main()
Dim renderer = New ChromePdfRenderer()
Dim pdf = renderer.RenderUrlAsPdf("https://example.com")
pdf.SaveAs("webpage.pdf")
End Sub
End Class
pdforge hat keinen dedizierten URL-zu-PDF-Endpunkt — Sie holen sich die Seite selbst, posten dann ihr HTML an den synchronen Endpunkt und laden das Ergebnis von der zurückgegebenen signierten URL herunter.IronPDF verwendet RenderUrlAsPdf() auf ChromePdfRenderer, wobei ein PdfDocument mit der eingebauten SaveAs() Methode zurückgegeben wird.
Der Hauptvorteil von IronPDF besteht darin, dass die URL lokal mit einer Chromium-Engine abgerufen und gerendert wird - es werden keine Daten an externe Server gesendet. Da IronPDF eine lokale Bibliothek ist, bietet es möglicherweise eine bessere Leistung, da bei Webanfragen keine Round-Trip-Zeit anfällt. Erfahren Sie mehr über die URL in PDF Konvertierung.
Beispiel 3: HTML-Datei in PDF mit benutzerdefinierten Einstellungen
Vor (pdforge):
// REST API — no .NET SDK on NuGet. Page size / orientation flow through the
// optional `pdfParams` object using Chromium/Puppeteer-style names.
using System.IO;
using System.Net.Http;
using System.Net.Http.Headers;
using System.Text;
using System.Text.Json;
using System.Threading.Tasks;
class Program
{
static async Task Main()
{
using var http = new HttpClient();
http.DefaultRequestHeaders.Authorization =
new AuthenticationHeaderValue("Bearer", "pdfnoodle_api_YOUR_KEY");
var htmlContent = File.ReadAllText("input.html");
var body = new { html = htmlContent, pdfParams = new { format = "A4", landscape = true } };
var json = new StringContent(JsonSerializer.Serialize(body), Encoding.UTF8, "application/json");
var resp = await http.PostAsync("https://api.pdfnoodle.com/v1/html-to-pdf/sync", json);
resp.EnsureSuccessStatusCode();
using var doc = JsonDocument.Parse(await resp.Content.ReadAsStringAsync());
var pdfBytes = await http.GetByteArrayAsync(doc.RootElement.GetProperty("signedUrl").GetString());
File.WriteAllBytes("output.pdf", pdfBytes);
}
}
// REST API — no .NET SDK on NuGet. Page size / orientation flow through the
// optional `pdfParams` object using Chromium/Puppeteer-style names.
using System.IO;
using System.Net.Http;
using System.Net.Http.Headers;
using System.Text;
using System.Text.Json;
using System.Threading.Tasks;
class Program
{
static async Task Main()
{
using var http = new HttpClient();
http.DefaultRequestHeaders.Authorization =
new AuthenticationHeaderValue("Bearer", "pdfnoodle_api_YOUR_KEY");
var htmlContent = File.ReadAllText("input.html");
var body = new { html = htmlContent, pdfParams = new { format = "A4", landscape = true } };
var json = new StringContent(JsonSerializer.Serialize(body), Encoding.UTF8, "application/json");
var resp = await http.PostAsync("https://api.pdfnoodle.com/v1/html-to-pdf/sync", json);
resp.EnsureSuccessStatusCode();
using var doc = JsonDocument.Parse(await resp.Content.ReadAsStringAsync());
var pdfBytes = await http.GetByteArrayAsync(doc.RootElement.GetProperty("signedUrl").GetString());
File.WriteAllBytes("output.pdf", pdfBytes);
}
}
Imports System.IO
Imports System.Net.Http
Imports System.Net.Http.Headers
Imports System.Text
Imports System.Text.Json
Imports System.Threading.Tasks
Module Program
Async Function Main() As Task
Using http As New HttpClient()
http.DefaultRequestHeaders.Authorization = New AuthenticationHeaderValue("Bearer", "pdfnoodle_api_YOUR_KEY")
Dim htmlContent As String = File.ReadAllText("input.html")
Dim body = New With {
.html = htmlContent,
.pdfParams = New With {
.format = "A4",
.landscape = True
}
}
Dim json As New StringContent(JsonSerializer.Serialize(body), Encoding.UTF8, "application/json")
Dim resp As HttpResponseMessage = Await http.PostAsync("https://api.pdfnoodle.com/v1/html-to-pdf/sync", json)
resp.EnsureSuccessStatusCode()
Using doc As JsonDocument = JsonDocument.Parse(Await resp.Content.ReadAsStringAsync())
Dim pdfBytes As Byte() = Await http.GetByteArrayAsync(doc.RootElement.GetProperty("signedUrl").GetString())
File.WriteAllBytes("output.pdf", pdfBytes)
End Using
End Using
End Function
End Module
Nach (IronPDF):
// NuGet: Install-Package IronPdf
using IronPdf;
using IronPdf.Rendering;
class Program
{
static void Main()
{
var renderer = new ChromePdfRenderer();
renderer.RenderingOptions.PaperSize = PdfPaperSize.A4;
renderer.RenderingOptions.PaperOrientation = PdfPaperOrientation.Landscape;
var htmlContent = System.IO.File.ReadAllText("input.html");
var pdf = renderer.RenderHtmlAsPdf(htmlContent);
pdf.SaveAs("output.pdf");
}
}
// NuGet: Install-Package IronPdf
using IronPdf;
using IronPdf.Rendering;
class Program
{
static void Main()
{
var renderer = new ChromePdfRenderer();
renderer.RenderingOptions.PaperSize = PdfPaperSize.A4;
renderer.RenderingOptions.PaperOrientation = PdfPaperOrientation.Landscape;
var htmlContent = System.IO.File.ReadAllText("input.html");
var pdf = renderer.RenderHtmlAsPdf(htmlContent);
pdf.SaveAs("output.pdf");
}
}
Imports IronPdf
Imports IronPdf.Rendering
Class Program
Shared Sub Main()
Dim renderer = New ChromePdfRenderer()
renderer.RenderingOptions.PaperSize = PdfPaperSize.A4
renderer.RenderingOptions.PaperOrientation = PdfPaperOrientation.Landscape
Dim htmlContent = System.IO.File.ReadAllText("input.html")
Dim pdf = renderer.RenderHtmlAsPdf(htmlContent)
pdf.SaveAs("output.pdf")
End Sub
End Class
Dieses Beispiel zeigt den Unterschied im Konfigurationsmuster. pdforge übergibt Optionen als JSON-Felder innerhalb eines pdfParams Objekts im POST-Body (format = "A4", landscape = true), nach den Chromium/Puppeteer-Namenskonventionen.
IronPDF verwendet die RenderingOptions Eigenschaft mit stark typisierten Enums: renderer.RenderingOptions.PaperSize = PdfPaperSize.A4 und renderer.RenderingOptions.PaperOrientation = PdfPaperOrientation.Landscape. Dies bietet IntelliSense-Unterstützung und Kompilierzeit-Typensicherheit. Beachten Sie, dass IronPDF das Importieren des IronPdf.Rendering Namespace für die Papierformat- und Ausrichtungs-Enums erfordert. In den Tutorials finden Sie weitere Konfigurationsbeispiele.
Kritische Hinweise zur Migration
Rückgabetyp ändern
pdforge gibt einen JSON-Umschlag mit einer signierten URL zurück;IronPDF gibt PdfDocument zurück:
// pdforge: Two-step — parse signedUrl from JSON, then fetch bytes from it
var resp = await http.PostAsync("https://api.pdfnoodle.com/v1/html-to-pdf/sync", json);
using var doc = JsonDocument.Parse(await resp.Content.ReadAsStringAsync());
var pdfBytes = await http.GetByteArrayAsync(doc.RootElement.GetProperty("signedUrl").GetString());
File.WriteAllBytes("output.pdf", pdfBytes);
// IronPDF: Returns PdfDocument
var pdf = renderer.RenderHtmlAsPdf(html);
pdf.SaveAs("output.pdf"); // Direct save
byte[] bytes = pdf.BinaryData; // Get bytes if needed
// pdforge: Two-step — parse signedUrl from JSON, then fetch bytes from it
var resp = await http.PostAsync("https://api.pdfnoodle.com/v1/html-to-pdf/sync", json);
using var doc = JsonDocument.Parse(await resp.Content.ReadAsStringAsync());
var pdfBytes = await http.GetByteArrayAsync(doc.RootElement.GetProperty("signedUrl").GetString());
File.WriteAllBytes("output.pdf", pdfBytes);
// IronPDF: Returns PdfDocument
var pdf = renderer.RenderHtmlAsPdf(html);
pdf.SaveAs("output.pdf"); // Direct save
byte[] bytes = pdf.BinaryData; // Get bytes if needed
Imports System.IO
Imports System.Net.Http
Imports System.Text.Json
Imports IronPdf
' pdforge: Two-step — parse signedUrl from JSON, then fetch bytes from it
Dim resp = Await http.PostAsync("https://api.pdfnoodle.com/v1/html-to-pdf/sync", json)
Using doc As JsonDocument = JsonDocument.Parse(Await resp.Content.ReadAsStringAsync())
Dim pdfBytes = Await http.GetByteArrayAsync(doc.RootElement.GetProperty("signedUrl").GetString())
File.WriteAllBytes("output.pdf", pdfBytes)
End Using
' IronPDF: Returns PdfDocument
Dim pdf = renderer.RenderHtmlAsPdf(html)
pdf.SaveAs("output.pdf") ' Direct save
Dim bytes As Byte() = pdf.BinaryData ' Get bytes if needed
Generator Änderung
// pdforge: HttpClient against the REST endpoint
using var http = new HttpClient();
http.DefaultRequestHeaders.Authorization =
new AuthenticationHeaderValue("Bearer", "pdfnoodle_api_YOUR_KEY");
// IronPDF: ChromePdfRenderer
var renderer = new ChromePdfRenderer();
// pdforge: HttpClient against the REST endpoint
using var http = new HttpClient();
http.DefaultRequestHeaders.Authorization =
new AuthenticationHeaderValue("Bearer", "pdfnoodle_api_YOUR_KEY");
// IronPDF: ChromePdfRenderer
var renderer = new ChromePdfRenderer();
' pdforge: HttpClient against the REST endpoint
Using http As New HttpClient()
http.DefaultRequestHeaders.Authorization = New AuthenticationHeaderValue("Bearer", "pdfnoodle_api_YOUR_KEY")
' IronPDF: ChromePdfRenderer
Dim renderer As New ChromePdfRenderer()
End Using
Änderungen an Operationen
// pdforge operations
await http.PostAsync("https://api.pdfnoodle.com/v1/html-to-pdf/sync", json); // HTML to PDF
// URL to PDF: fetch the page first, then POST its HTML to the same endpoint
//IronPDF methods
renderer.RenderHtmlAsPdf(html)
renderer.RenderUrlAsPdf(url)
// pdforge operations
await http.PostAsync("https://api.pdfnoodle.com/v1/html-to-pdf/sync", json); // HTML to PDF
// URL to PDF: fetch the page first, then POST its HTML to the same endpoint
//IronPDF methods
renderer.RenderHtmlAsPdf(html)
renderer.RenderUrlAsPdf(url)
' pdforge operations
Await http.PostAsync("https://api.pdfnoodle.com/v1/html-to-pdf/sync", json) ' HTML to PDF
' URL to PDF: fetch the page first, then POST its HTML to the same endpoint
' IronPDF methods
renderer.RenderHtmlAsPdf(html)
renderer.RenderUrlAsPdf(url)
Methodenänderung speichern
// pdforge: Two-step — fetch bytes from signed URL, then write to disk
var pdfBytes = await http.GetByteArrayAsync(signedUrl);
File.WriteAllBytes("output.pdf", pdfBytes);
// IronPDF: Built-in save method
pdf.SaveAs("output.pdf");
// pdforge: Two-step — fetch bytes from signed URL, then write to disk
var pdfBytes = await http.GetByteArrayAsync(signedUrl);
File.WriteAllBytes("output.pdf", pdfBytes);
// IronPDF: Built-in save method
pdf.SaveAs("output.pdf");
' pdforge: Two-step — fetch bytes from signed URL, then write to disk
Dim pdfBytes = Await http.GetByteArrayAsync(signedUrl)
File.WriteAllBytes("output.pdf", pdfBytes)
' IronPDF: Built-in save method
pdf.SaveAs("output.pdf")
Konfigurationsort ändern
pdforge übergibt Optionen als JSON-Felder auf pdfParams;IronPDF verwendet RenderingOptions:
// pdforge: JSON pdfParams object on the POST body
var body = new { html, pdfParams = new { format = "A4", landscape = true } };
// IronPDF: Properties on RenderingOptions
renderer.RenderingOptions.PaperSize = PdfPaperSize.A4;
renderer.RenderingOptions.PaperOrientation = PdfPaperOrientation.Landscape;
// pdforge: JSON pdfParams object on the POST body
var body = new { html, pdfParams = new { format = "A4", landscape = true } };
// IronPDF: Properties on RenderingOptions
renderer.RenderingOptions.PaperSize = PdfPaperSize.A4;
renderer.RenderingOptions.PaperOrientation = PdfPaperOrientation.Landscape;
' pdforge: JSON pdfParams object on the POST body
Dim body = New With {Key .html = html, Key .pdfParams = New With {Key .format = "A4", Key .landscape = True}}
' IronPDF: Properties on RenderingOptions
renderer.RenderingOptions.PaperSize = PdfPaperSize.A4
renderer.RenderingOptions.PaperOrientation = PdfPaperOrientation.Landscape
Kopf-/Fußzeilen-Platzhalter-Syntax
pdforge übernimmt Chromiums Kopf-/Fußzeilen-Vorlagenformat — HTML-Fragmente, die <span class="..."></span> Elemente enthalten, die die Engine zur Renderzeit ersetzt.IronPDF verwendet klammergeschlossene Platzhalter innerhalb eines TextHeaderFooter / HtmlHeaderFooter:
// pdforge: Chromium template HTML inside pdfParams.footerTemplate
// "<div>Page <span class=\"pageNumber\"></span> of <span class=\"totalPages\"></span></div>"
//IronPDF placeholders
"Page {page} of {total-pages}" // Note: hyphen in total-pages
// pdforge: Chromium template HTML inside pdfParams.footerTemplate
// "<div>Page <span class=\"pageNumber\"></span> of <span class=\"totalPages\"></span></div>"
//IronPDF placeholders
"Page {page} of {total-pages}" // Note: hyphen in total-pages
' pdforge: Chromium template HTML inside pdfParams.footerTemplate
' "<div>Page <span class=""pageNumber""></span> of <span class=""totalPages""></span></div>"
' IronPDF placeholders
"Page {page} of {total-pages}" ' Note: hyphen in total-pages
Neue Funktionen nach der Migration
Nach der Migration zu IronPDF erhalten Sie Funktionen, die pdforge nicht bieten kann:
PDF-Zusammenführung
var pdf1 = PdfDocument.FromFile("document1.pdf");
var pdf2 = PdfDocument.FromFile("document2.pdf");
var merged = PdfDocument.Merge(pdf1, pdf2);
merged.SaveAs("merged.pdf");
var pdf1 = PdfDocument.FromFile("document1.pdf");
var pdf2 = PdfDocument.FromFile("document2.pdf");
var merged = PdfDocument.Merge(pdf1, pdf2);
merged.SaveAs("merged.pdf");
Dim pdf1 = PdfDocument.FromFile("document1.pdf")
Dim pdf2 = PdfDocument.FromFile("document2.pdf")
Dim merged = PdfDocument.Merge(pdf1, pdf2)
merged.SaveAs("merged.pdf")
Textextraktion
var pdf = PdfDocument.FromFile("document.pdf");
string allText = pdf.ExtractAllText();
var pdf = PdfDocument.FromFile("document.pdf");
string allText = pdf.ExtractAllText();
Dim pdf = PdfDocument.FromFile("document.pdf")
Dim allText As String = pdf.ExtractAllText()
Wasserzeichen
pdf.ApplyWatermark("<h2 style='color:red;'>CONFIDENTIAL</h2>");
pdf.ApplyWatermark("<h2 style='color:red;'>CONFIDENTIAL</h2>");
pdf.ApplyWatermark("<h2 style='color:red;'>CONFIDENTIAL</h2>")
Passwortschutz
pdf.SecuritySettings.UserPassword = "userpassword";
pdf.SecuritySettings.OwnerPassword = "ownerpassword";
pdf.SecuritySettings.UserPassword = "userpassword";
pdf.SecuritySettings.OwnerPassword = "ownerpassword";
pdf.SecuritySettings.UserPassword = "userpassword"
pdf.SecuritySettings.OwnerPassword = "ownerpassword"
Zusammenfassung des Funktionsvergleichs
| Feature | pdforge | IronPDF |
|---|---|---|
| HTML zu PDF | ✓ | ✓ |
| URL zu PDF | ✓ | ✓ |
| Seite Einstellungen | ✓ | ✓ |
| Offline-fähig | ✗ | ✓ |
| Lokale Verarbeitung | ✗ | ✓ |
| PDFs zusammenführen | ✗ | ✓ |
| PDFs teilen | ✗ | ✓ |
| Text extrahieren | ✗ | ✓ |
| Wasserzeichen | ✗ | ✓ |
| Formular ausfüllen | ✗ | ✓ |
| Digitale Signaturen | ✗ | ✓ |
| Passwortschutz | ✗ | ✓ |
| Keine Preisbeschränkung | ✗ | ✓ |
| Einmallizenz | ✗ | ✓ |
Migrations-Checkliste
Vor der Migration
- Inventarisieren Sie alle pdforge / pdf noodle Endpunktaufrufe im Code-Base (
api.pdforge.com,api.pdfnoodle.com) - Dokumentieren Sie die aktuell verwendete
pdfParamsJSON-Konfiguration (Seitenformat, Ausrichtung, Ränder) - Identifizieren Sie Chromium-Stil Kopf-/Fußzeilen-Vorlagen (
<span class="pageNumber">,<span class="totalPages">), um sie in IronPDF-Platzhalter ({page},{total-pages}) zu konvertieren - Speicherung des IronPDF-Lizenzschlüssels (Umgebungsvariablen empfohlen)
- Zuerst mit der IronPDF Testlizenz testen
Paketänderungen
- pdforge hat kein .NET SDK auf NuGet — es gibt kein Konkurrenzpaket zu entfernen
- Installieren Sie das
IronPdfNuGet-Paket:dotnet add package IronPdf
Code-Änderungen
- Entfernen Sie
System.Net.Http/System.Text.JsonImporte, die nur für pdforge-Aufrufe verwendet werden - Fügen Sie
using IronPdf;undusing IronPdf.Rendering;für Papierformat- und Ausrichtungs-Enums hinzu - Ersetzen Sie das authentifizierte
HttpClientmitChromePdfRenderer - Ersetzen Sie
POST /v1/html-to-pdf/syncmitRenderHtmlAsPdf() - Ersetzen Sie das Fetch-URL-dann-POST-Muster durch
RenderUrlAsPdf() - Ersetzen Sie den zweistufigen
GetByteArrayAsync(signedUrl)+File.WriteAllBytes()mitpdf.SaveAs() - Verschieben Sie
pdfParams.formatzuRenderingOptions.PaperSize - Verschieben Sie
pdfParams.landscapezuRenderingOptions.PaperOrientation - Verwenden Sie
PdfPaperSize.A4/PdfPaperOrientation.LandscapeEnums - Konvertieren Sie Chromium-Vorlagen in IronPDF-Platzhalter innerhalb
TextHeaderFooter/HtmlHeaderFooter - Ersetzen Sie das
BearerToken pro Anfrage durch ein einmaligesIronPdf.License.LicenseKeybeim Start
Nach der Migration
- Testen Sie, ob die Qualität der PDF-Ausgabe den Erwartungen entspricht
- Überprüfen Sie, ob der Offline-Betrieb funktioniert
- API-Zugangsdaten aus der Konfiguration entfernen
- Fügen Sie bei Bedarf neue Funktionen hinzu (Zusammenführung, Wasserzeichen, Sicherheit).

