IRONSOFTWAREHOME
VIDEOS

Wie man Stempel & Wasserzeichen in PDFs in C# hinzufügt

Curtis Chau
Curtis Chau
Updated: 19. Juli 2026

Der Wechsel von PDFBoltzu IronPDF verschiebt Ihren .NET-PDF-Workflow von einem cloud-basierten SaaS-REST-Service zu einer selbst gehosteten Bibliothek mit lokaler Dokumentenverarbeitung ohne Pro-Dokument-Lizenzbeschränkungen. Diese Anleitung bietet einen schrittweisen Migrationspfad, der Netzwerkabhängigkeiten, monatliche Nutzungsbeschränkungen und externe Datenübertragung beseitigt und PDF-Manipulationsfunktionen hinzufügt, die PDFBoltnicht bietet.

Warum von PDFBoltzu IronPDF migrieren

Das Cloud-Only-Problem

PDFBolt ist eine ausschließlich cloudbasierte SaaS-Plattform, die als REST-API bereitgestellt wird; es gibt kein offizielles .NET SDK und kein PDFBolt NuGet-Paket. Die Integration erfolgt manuell mit HttpClient gegen https://api.pdfbolt.com/v1/direct. Obwohl bequem für schnelle Prototypen, schafft diese Architektur Herausforderungen für produktionsreife Anwendungen:

  1. Nur-Cloud-Verarbeitung: Jedes Dokument durchläuft die Server von PDFBolt- es gibt keine selbst gehostete Option, was ein Hindernis für Teams sein kann, die mehr Kontrolle über den Datenfluss benötigen.

  2. Datenschutzüberlegungen: Sensible Dokumente (Verträge, Krankenakten, finanzielle Daten) werden extern übertragen. Unternehmen, die mit regulierten Daten arbeiten, haben berechtigte Prüfungsbedenken.

  3. Nutzungsgrenzen: Das kostenlose Tier ist auf 100 Dokumente pro Monat, 20 Anfragen pro Minute, 1 gleichzeitige Anfrage beschränkt, was für produktionsreife Workloads möglicherweise nicht ausreicht. Bezahlte Stufen (laut pdfbolt.com/preise) skalieren von $19/Monat bis $249/Monat.

  4. Netzwerkabhängigkeit: Internetausfälle oder PDFBolt-Ausfallzeiten bedeuten, dass Ihre PDF-Erzeugung vollständig stoppt.

  5. Latenz: Die Netzwerk-Roundtrip-Zeit verlängert jede Konvertierung um Sekunden im Vergleich zur lokalen Verarbeitung.

  6. Compliance-Prüfung: GDPR-, HIPAA- und SOC2-Audits erfordern in der Regel zusätzliche Dokumentation, wenn externe Dokumentenverarbeitung beteiligt ist.

  7. Sicherheit der API-Schlüssel: Durchgesickerte API-Schlüssel können zu unautorisierter Nutzung führen, die Ihrem Konto in Rechnung gestellt wird.

  8. Vendor Lock-in: Ihre Anwendung funktioniert nicht mehr, wenn PDFBoltdie Bedingungen ändert oder eingestellt wird.

PDFBoltvs IronPDF Vergleich

BetrifftPDFBoltIronPDF
DatenstandortExterne ServerNur Ihre Server
Nutzungseinschränkungen100 kostenlos/Monat, dann gestufte AbonnementsUnbegrenzt
Internet erforderlichJa, immerNein
LatenzzeitNetzwerk-Round-TripLokale
KonformitätKomplex (externe Bearbeitung)Einfach (lokale Verarbeitung)
KostenmodellMonatliche Abo-Stufen ($19-$249/Monat)Einmalig oder jährlich
Offline-BetriebUnmöglichVollständig unterstützt
API HauptrisikenDurchgesickert = in Rechnung gestelltLizenzschlüssel, kein Abrechnungsrisiko

IronPDF bietet eine selbst gehostete Grundlage auf moderner .NET, die die Dokumentenverarbeitung lokal hält und die Abhängigkeit von einem externen Cloud-Service entfernt.


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 unter IronPDF.

NuGet-Paketänderungen

PDFBolt hat kein offizielles .NET SDK und kein PDFBolt NuGet-Paket, daher gibt es nichts zu deinstallieren. Die Bereinigung auf der PDFBolt-Seite besteht darin, den manuell erstellten HttpClient Wrapper und die Anfragen-/Antwort-DTOs zu löschen. Dann IronPDF installieren:

# Install IronPDF(replaces the hand-rolled HttpClient wrapper)
dotnet add package IronPdf
SHELL

Lizenz-Konfiguration

// Add at application startup (Program.cs or Startup.cs)
IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY";

Die Verwendung von PDFBolterkennen

# Find all PDFBoltREST calls
grep -rE "api\.pdfbolt\.com|API-KEY|/v1/direct" --include="*.cs" .

# Find API key references
grep -r "PDFBOLT\|ApiKey" --include="*.cs" --include="*.json" --include="*.config" .
SHELL

Komplette API-Referenz

Kernkonzept-Zuordnungen

PDFBolt (REST)IronPDF
HttpClient + API-KEY Headernew ChromePdfRenderer()
JSON-Anfragekörperrenderer.RenderingOptions
POST https://api.pdfbolt.com/v1/directrenderer.RenderHtmlAsPdf(...) / RenderUrlAsPdf(...)
Antwort byte[]PdfDocument

Konvertierungsmethoden-Zuordnungen

PDFBolt (REST)IronPDF
POST /v1/direct mit { "html": <base64> }renderer.RenderHtmlAsPdf(html)
POST /v1/direct mit { "url": "..." }renderer.RenderUrlAsPdf(url)

Zuordnungen von Ausgabemethoden

PDFBolt (REST)IronPDF
await response.Content.ReadAsByteArrayAsync() dann File.WriteAllBytespdf.SaveAs(path)
await response.Content.ReadAsByteArrayAsync()pdf.BinaryData

Zuordnungen der Seitenkonfiguration

PDFBolt JSONIronPDF
"format": "A4"renderer.RenderingOptions.PaperSize = PdfPaperSize.A4
"margin": { "top": "20mm" }renderer.RenderingOptions.MarginTop = 20
"margin": { "bottom": "20mm" }renderer.RenderingOptions.MarginBottom = 20
"margin": { "left": "15mm" }renderer.RenderingOptions.MarginLeft = 15
"margin": { "right": "15mm" }renderer.RenderingOptions.MarginRight = 15

Kopf-/Fußzeilen-Platzhalter-Zuordnungen

PDFBolt (innerhalb von base64-codiertem headerTemplate / footerTemplate)IronPDF (HtmlFragment Token)
<span class="pageNumber"></span>{page}
<span class="totalPages"></span>{total-pages}
<span class="date"></span>{date}
<span class="title"></span>{html-title}

Beispiele für die Code-Migration

Beispiel 1: Grundlegendes HTML zu PDF

Vorher (PDFBolt - REST über HttpClient):

// REST API — no official .NET SDK; integrate via HttpClient.
// Docs: https://pdfbolt.com/docs/quick-start-guide/csharp
using System;
using System.IO;
using System.Net.Http;
using System.Text;
using System.Text.Json;
using System.Threading.Tasks;

class Program
{
    static async Task Main()
    {
        var html = "<html><body><h1>Hello World</h1></body></html>";
        var payload = JsonSerializer.Serialize(new
        {
            html = Convert.ToBase64String(Encoding.UTF8.GetBytes(html))
        });

        using var http = new HttpClient();
        http.DefaultRequestHeaders.Add("API-KEY", "YOUR-PDFBOLT-API-KEY");
        using var content = new StringContent(payload, Encoding.UTF8, "application/json");
        using var response = await http.PostAsync("https://api.pdfbolt.com/v1/direct", content);
        response.EnsureSuccessStatusCode();

        var pdfBytes = await response.Content.ReadAsByteArrayAsync();
        await File.WriteAllBytesAsync("output.pdf", pdfBytes);
    }
}

Nach (IronPDF):

// NuGet: Install-Package IronPdf
using IronPdf;
using System.IO;

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

Der strukturelle Unterschied ist das Integrationsmodell. PDFBolterfordert, dass Sie das HTML base64-kodieren, eine JSON-Nutzlast erstellen, den API-KEY Header setzen, POST auf https://api.pdfbolt.com/v1/direct, auf die Antwort warten und die zurückgegebenen Bytes selbst auf die Festplatte schreiben.

IronPDF's ChromePdfRenderer.RenderHtmlAsPdf() gibt ein PdfDocument Objekt mit einer integrierten SaveAs() Methode zurück. Das objektorientierte Modell erlaubt es Ihnen, das PDF zu manipulieren (Wasserzeichen hinzufügen, Dokumente zusammenführen, Sicherheit anwenden), bevor Sie es speichern. Wenn Sie die Roh-Bytes für die Kompatibilität mit vorhandenem Code benötigen, verwenden Sie pdf.BinaryData. Weitere Rendering-Optionen finden Sie in der HTML to PDF Dokumentation.

Beispiel 2: Konvertierung von URL in PDF

Vorher (PDFBolt - REST über HttpClient):

// REST API — no official .NET SDK; integrate via HttpClient.
// Docs: https://pdfbolt.com/docs/quick-start-guide/csharp
using System.IO;
using System.Net.Http;
using System.Text;
using System.Text.Json;
using System.Threading.Tasks;

class Program
{
    static async Task Main()
    {
        var payload = JsonSerializer.Serialize(new { url = "https://www.example.com" });

        using var http = new HttpClient();
        http.DefaultRequestHeaders.Add("API-KEY", "YOUR-PDFBOLT-API-KEY");
        using var content = new StringContent(payload, Encoding.UTF8, "application/json");
        using var response = await http.PostAsync("https://api.pdfbolt.com/v1/direct", content);
        response.EnsureSuccessStatusCode();

        var pdfBytes = await response.Content.ReadAsByteArrayAsync();
        await File.WriteAllBytesAsync("webpage.pdf", pdfBytes);
    }
}

Nach (IronPDF):

// NuGet: Install-Package IronPdf
using IronPdf;

class Program
{
    static void Main()
    {
        var renderer = new ChromePdfRenderer();
        var pdf = renderer.RenderUrlAsPdf("https://www.example.com");
        pdf.SaveAs("webpage.pdf");
    }
}

Auf der PDFBolt-Seite erfordert die URL-Konvertierung immer noch die vollständige REST-Rundreise: Erstellen Sie den JSON-Körper, setzen Sie den API-Schlüssel-Header, warten Sie auf den POST und schreiben Sie die Antwort-Bytes. Auch wenn Sie bereits auf eine öffentliche URL zeigen, erfolgen das Abrufen und Rendern auf den Servern von PDFBolt.

IronPDF's RenderUrlAsPdf() gibt ein PdfDocument zurück mit der integrierten SaveAs() Methode. Der Hauptvorteil besteht darin, dass IronPDF das URL-Abrufen und PDF-Rendern lokal durchführt - keine Dokumentendaten verlassen Ihre Infrastruktur. Erfahren Sie mehr über die URL in PDF Konvertierung.

Beispiel 3: HTML-Datei mit benutzerdefinierten Seiteneinstellungen

Vorher (PDFBolt - REST über HttpClient):

// REST API — no official .NET SDK; integrate via HttpClient.
// Docs: https://pdfbolt.com/docs/parameters
using System;
using System.IO;
using System.Net.Http;
using System.Text;
using System.Text.Json;
using System.Threading.Tasks;

class Program
{
    static async Task Main()
    {
        var html = await File.ReadAllTextAsync("input.html");
        var payload = JsonSerializer.Serialize(new
        {
            html = Convert.ToBase64String(Encoding.UTF8.GetBytes(html)),
            format = "A4",
            margin = new { top = "20mm", bottom = "20mm" },
            printBackground = true
        });

        using var http = new HttpClient();
        http.DefaultRequestHeaders.Add("API-KEY", "YOUR-PDFBOLT-API-KEY");
        using var content = new StringContent(payload, Encoding.UTF8, "application/json");
        using var response = await http.PostAsync("https://api.pdfbolt.com/v1/direct", content);
        response.EnsureSuccessStatusCode();

        var pdfBytes = await response.Content.ReadAsByteArrayAsync();
        await File.WriteAllBytesAsync("output.pdf", pdfBytes);
    }
}

Nach (IronPDF):

// NuGet: Install-Package IronPdf
using IronPdf;
using IronPdf.Rendering;
using System.IO;

class Program
{
    static void Main()
    {
        var renderer = new ChromePdfRenderer();
        renderer.RenderingOptions.PaperSize = PdfPaperSize.A4;
        renderer.RenderingOptions.MarginTop = 20;
        renderer.RenderingOptions.MarginBottom = 20;
        var html = File.ReadAllText("input.html");
        var pdf = renderer.RenderHtmlAsPdf(html);
        pdf.SaveAs("output.pdf");
    }
}

Dieses Beispiel zeigt die Seitenkonfigurationszuordnung. PDFBoltakzeptiert Top-Level format plus ein verschachteltes margin Objekt, dessen Werte CSS-ähnliche Zeichenfolgen ("20mm") sind.IronPDF verwendet ein RenderingOptions Objekt auf dem Renderer mit stark typisierten Eigenschaften.

Die wichtigsten Mappings:

  • "format": "A4"PdfPaperSize.A4 (stark typisiertes Enum)
  • "margin": { "top": "20mm" }RenderingOptions.MarginTop = 20 (numerisch mm)

IronPDF-Ränder sind immer numerische Millimeter, daher werden PDFBoltCSS-Einheiten wie "20mm" direkt zugeordnet. Das IronPdf.Rendering Namespace ist erforderlich, um auf das PdfPaperSize Enum zuzugreifen. Für zusätzliche Seitenkonfigurationen, siehe die Rendering-Optionen-Dokumentation.


Kritische Hinweise zur Migration

Rückgabetyp ändern

PDFBolt's /v1/direct Endpoint gibt das rohe PDF als HTTP-Antwort zurück;IronPDF gibt ein PdfDocument zurück:

// PDFBoltpattern:
var pdfBytes = await response.Content.ReadAsByteArrayAsync();
await File.WriteAllBytesAsync("output.pdf", pdfBytes);

//IronPDF pattern:
var pdf = renderer.RenderHtmlAsPdf(html);
pdf.SaveAs("output.pdf");

// Or if you need bytes:
byte[] pdfBytes = renderer.RenderHtmlAsPdf(html).BinaryData;
C#

Integrationsmodelländerung

Die Integrationsform ändert sich vom REST-Client zur In-Prozess-Bibliothek:

// PDFBolt
using var http = new HttpClient();
http.DefaultRequestHeaders.Add("API-KEY", "YOUR-PDFBOLT-API-KEY");
// ... build JSON, POST to https://api.pdfbolt.com/v1/direct

// IronPDF
var renderer = new ChromePdfRenderer();

Änderung von Konfigurationsmustern

PDFBolt-Konfiguration sind JSON-Felder im Anforderungskörper;IronPDF verwendet RenderingOptions:

// PDFBolt: JSON request fields
new { format = "A4", margin = new { top = "20mm" } }

// IronPDF: RenderingOptions properties
renderer.RenderingOptions.PaperSize = PdfPaperSize.A4;
renderer.RenderingOptions.MarginTop = 20;

API-Schlüssel-Eliminierung

PDFBolt erfordert einen API-KEY Header bei jeder Anfrage;IronPDF verwendet einen einmaligen Lizenzschlüssel:

// PDFBolt: API key per HTTP call (security risk if leaked)
http.DefaultRequestHeaders.Add("API-KEY", config["PDFBolt:ApiKey"]);

// IronPDF: License key once at startup
IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY";
var renderer = new ChromePdfRenderer();

Entfernen der Netzwerk-Fehlerbehandlung

Lokale Verarbeitung bedeutet, dass keine Netzwerkfehler zu behandeln sind:

// PDFBolt: Network error handling required
catch (HttpRequestException ex)
catch (TaskCanceledException)
catch (TimeoutException)

// IronPDF: Remove network-specific catches entirely

Neue Funktionen verfügbar

Nach der Migration zu IronPDF erhalten Sie Fähigkeiten, die PDFBoltnicht bietet:

// PDF Merging (not available in PDFBolt)
var merged = PdfDocument.Merge(pdf1, pdf2);

// Watermarks (not available in PDFBolt)
pdf.ApplyWatermark("<h1 style='opacity:0.3;'>DRAFT</h1>");

// Password Protection (not available in PDFBolt)
pdf.SecuritySettings.UserPassword = "secret";

// Text Extraction (not available in PDFBolt)
string text = pdf.ExtractAllText();

// PDF to Images (not available in PDFBolt)
pdf.RasterizeToImageFiles("page_*.png");

Fehlerbehebung

Problem 1: Kein PDFBolt Paket auf NuGet

Problem: Nach using PDFBolt; / new HtmlToPdfConverter() in IronPDF suchen.

Lösung: PDFBolthat kein .NET SDK — die Integration erfolgt mit HttpClient gegen https://api.pdfbolt.com/v1/direct.IronPDF ersetzt diesen Wrapper vollständig durch ChromePdfRenderer:

// IronPDF
var renderer = new ChromePdfRenderer();

Problem 2: Wo ist ConvertHtmlString hin?

Problem: Eine interne PDFBolt-Wrap-Unterstützung migrieren, die eine ConvertHtmlString(html) Methode bereitstellte.

Lösung: Verwenden Sie RenderHtmlAsPdf():

// IronPDF
var pdf = renderer.RenderHtmlAsPdf(html);

Problem 3: Wo ist ConvertUrl hin?

Problem: Eine interne PDFBolt-Wrap-Unterstützung migrieren, die eine ConvertUrl(url) Methode bereitstellte.

Lösung: Verwenden Sie RenderUrlAsPdf():

// IronPDF
var pdf = renderer.RenderUrlAsPdf(url);

Issue 4: format JSON Field → Enum

Problem: Das JSON-Feld "format": "A4" von PDFBoltübersetzen.

Lösung: Verwenden Sie PdfPaperSize von IronPdf.Rendering:

// IronPDF
using IronPdf.Rendering;
renderer.RenderingOptions.PaperSize = PdfPaperSize.A4;

Ausgabe 5: Erste PDF-Erzeugung ist langsam

Problem: Das erste Rendern dauert länger als erwartet.

Lösung: Die Chromium-Engine initialisiert sich bei der ersten Verwendung. Bei Bedarf vorwärmen:

// Warm up during application startup
var renderer = new ChromePdfRenderer();
renderer.RenderHtmlAsPdf("<html><body></body></html>");

Migrations-Checkliste

Vor der Migration

  • Alle PDFBoltREST-Aufrufe im Codebestand inventarisieren (api.pdfbolt.com)
  • Aktuelle JSON-Anforderungsfelder dokumentieren (format, margin, printBackground, headerTemplate, usw.)
  • API-Schlüsselverwaltungscode identifizieren, der entfernt werden soll
  • Listen Sie die 429 / Kontingent-Wiederholungsbehandlung auf, die gelöscht werden soll -IronPDF-Lizenzschlüssel erhalten

Paketänderungen

  • Den manuell erstellten PDFBoltHttpClient Wrapper und DTOs löschen (kein NuGet-Paket zum Deinstallieren)
  • IronPdf NuGet-Paket installieren: dotnet add package IronPdf
  • using IronPdf; Namespace hinzufügen
  • using IronPdf.Rendering; für Papiergrößen-Enums hinzufügen

Code-Änderungen

  • Lizenzschlüsselkonfiguration beim Start hinzufügen
  • Die HttpClient + API-KEY Integration durch ChromePdfRenderer ersetzen
  • POST /v1/direct mit RenderHtmlAsPdf() / RenderUrlAsPdf() ersetzen
  • await response.Content.ReadAsByteArrayAsync() + File.WriteAllBytes() durch pdf.SaveAs() ersetzen (oder pdf.BinaryData, wenn noch Bytes benötigt werden)
  • "format" / "margin" JSON-Felder zu RenderingOptions.PaperSize / RenderingOptions.MarginTop usw. zuordnen.
  • API-Schlüsselverwaltungscode entfernen
  • Entfernen Sie 429 / Ratenlimitbehandlung
  • Netzwerkfehlerbehandlung entfernen

Nach der Migration

  • API-Schlüssel aus Konfigurationsdateien löschen
  • API-Schlüssel aus Secret Managern entfernen
  • Führen Sie alle Tests durch und vergleichen Sie die PDF-Ausgabe.
  • Überprüfen Sie, ob Seitengrößen und Ränder korrekt dargestellt werden.
  • Erwägen Sie die Hinzufügung neuer Funktionen (Wasserzeichen, Sicherheit, Zusammenführung)

Hinweis:: PDFBolt ist ein eingetragenes Warenzeichen seines jeweiligen Eigentümers. Diese Seite steht in keiner Verbindung zu, wird nicht unterstützt von und nicht gesponsert von PDFBolt. Alle Produktnamen, Logos und Marken sind Eigentum ihrer jeweiligen Eigentümer. Vergleiche dienen nur zu Informationszwecken und spiegeln öffentlich zugängliche Informationen zum Zeitpunkt des Schreibens wider.
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 Handbücher.

...
Weiterlesen

Verwandte Artikel

Key in blue circle

Holen Sie sich sofort Ihren kostenlosen 30-Tage-Testschlüssel.

Your trial license will be sent to your email address

Keine Einschränkungen. 100 % freigeschaltet. Keine Kreditkarte.

bullet_checkedIhr Testlizenzschlüssel wurde Ihnen per E-Mail gesendet.Keine Einschränkungen. 100 % freigeschaltet. Keine Kreditkarte.
  • Logo Aetna
  • Logo NASA
  • Logo GE
  • Logo Porsche
  • Logo USDA
  • Logo Qatar
Join Millions of Engineers who’ve tried IronPDF
Buchen Sie Ihre kostenlose Live-Demo
Booking Badge

Von Millionen von Ingenieur*innen weltweit vertraut

Kundenlogos von Iron Software
Erhalten Sie Ihre unverbindliche Beratung
Füllen Sie das Formular unten aus oder senden Sie eine E-Mail an sales@ironsoftware.com
Ihre Daten werden immer vertraulich behandelt.
Von Millionen von Ingenieur*innen weltweit vertraut
Kundenlogos von Iron Software
Erhalten Sie sofort Ihren kostenlosen 30-Tage-Testschlüssel.
Ihr Testlizenzschlüssel wurde Ihnen per E-Mail gesendet.