IRONSOFTWAREHOME
VIDÉOS

Comment ajouter des tampons et des filigranes aux PDF en C#

Curtis Chau
Curtis Chau
Updated: 19 juillet 2026

Migrer de PDFBoltà IronPDF transfère votre flux de travail PDF .NET d'un service cloud SaaS REST à une bibliothèque auto-hébergée avec traitement de documents local et sans quotas par document. Ce guide fournit un chemin de migration étape par étape qui élimine les dépendances réseau, les plafonds d'utilisation mensuels et la transmission de données externes tout en ajoutant des fonctionnalités de manipulation de PDF que PDFBoltne fournit pas.

Pourquoi migrer de PDFBoltà IronPDF

Le problème du cloud uniquement

PDFBolt est une plateforme SaaS uniquement cloud exposée en tant qu'API REST ; il n'y a pas de SDK .NET officiel et pas de paquet NuGet PDFBolt. L'intégration est faite manuellement avec HttpClient contre https://api.pdfbolt.com/v1/direct. Bien qu'elle soit pratique pour des prototypes rapides, cette architecture crée des défis pour les applications de production :

  1. Traitement uniquement cloud : Chaque document passe par les serveurs de PDFBolt— il n'y a pas d'option auto-hébergée, ce qui peut être un obstacle pour les équipes qui ont besoin de plus de contrôle sur le flux de données.

  2. Considérations sur la confidentialité des données : Les documents sensibles (contrats, dossiers médicaux, données financières) sont transmis en externe. Les entreprises traitant des données réglementées auront des préoccupations légitimes.

  3. Limites d'utilisation : Le plan gratuit est limité à 100 documents par mois, 20 requêtes par minute, 1 requête simultanée, ce qui peut ne pas suffire pour les charges de travail de production. Les niveaux payants (par pdfbolt.com/pricing) vont de 19 $/mois à 249 $/mois.

  4. Dépendance réseau : Les pannes Internet ou les temps d'arrêt de PDFBoltsignifient que votre génération de PDF s'arrête entièrement.

  5. Latence : L'aller-retour sur le réseau ajoute des secondes à chaque conversion par rapport au traitement local.

  6. Examen de conformité : Les audits GDPR, HIPAA et SOC2 nécessitent généralement une documentation supplémentaire lorsque le traitement de documents externes est impliqué.

  7. Sécurité des clés API : Les fuites de clés API peuvent entraîner une utilisation non autorisée facturée sur votre compte.

  8. Enfermement par le vendeur : Votre application s'arrête si PDFBoltchange les termes ou ferme.

Comparaison de PDFBoltet IronPDF

| Concerne| PDFBolt|IronPDF| |---------|---------|---------| | Lieu des données| Serveurs externes| Vos serveurs uniquement| | Limites d'utilisation|100 gratuits/mois, puis abonnements par niveaux| Nombre illimité| | Internet requis| Oui, toujours| Non | | Latence| Aller-retour sur le réseau| Localement| | Conformité| Complexe (sous-traitance)| Simple (traitement local)| | Modèle de coût|Forfaits d'abonnement mensuels (19 $ – 249 $/mo)| Une seule fois ou une fois par an| | Opérations hors ligne| Impossible| Entièrement pris en charge| | Risques clés de l'API| Leaked = facturé| Clé de licence, pas de risque de facturation|

IronPDF fournit une base auto-hébergée sur la plateforme .NET moderne qui garde le traitement des documents local et élimine la dépendance à un service cloud externe.


Avant de commencer

Prérequis

  1. Environnement .NET : .NET Framework 4.6.2+ ou .NET Core 3.1+ / .NET 5/6/7/8/9+
  2. Accès à NuGet : possibilité d'installer des packages NuGet
  3. Licence IronPDF : Obtenez votre clé de licence sur IronPDF

Modifications du paquet NuGet

PDFBolt n'a pas de SDK .NET officiel et pas de paquet NuGet PDFBolt, donc il n'y a rien à désinstaller. Le nettoyage du côté de PDFBoltconsiste à supprimer le wrapper HttpClient fait à la main et les DTO de requête/réponse. Ensuite, installez IronPDF:

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

Configuration de la licence

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

Identifier l'utilisation de PDFBolt

# 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

Référence API complète

Correspondances de concepts de base

| PDFBolt(REST) |IronPDF| |----------------|---------| | HttpClient + API-KEY en-tête | new ChromePdfRenderer() | | Corps de requête JSON | renderer.RenderingOptions | | POST https://api.pdfbolt.com/v1/direct | renderer.RenderHtmlAsPdf(...) / RenderUrlAsPdf(...) | | Réponse byte[] | PdfDocument |

Mappages de méthodes de conversion

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

Mappages de méthodes de sortie

| PDFBolt(REST) |IronPDF| |----------------|---------| | await response.Content.ReadAsByteArrayAsync() puis File.WriteAllBytes | pdf.SaveAs(path) | | await response.Content.ReadAsByteArrayAsync() | pdf.BinaryData |

Mappages de configuration de page

| JSON PDFBolt|IronPDF| |--------------|---------| | "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 |

Mappages des espaces réservés de l'en-tête et du pied de page

| PDFBolt(encodé en base64 headerTemplate / footerTemplate) |IronPDF(HtmlFragment jeton) | |---|---| | <span class="pageNumber"></span> | {page} | | <span class="totalPages"></span> | {total-pages} | | <span class="date"></span> | {date} | | <span class="title"></span> | {html-title} |


Exemples de migration de code

Exemple 1 : HTML de base vers PDF

Before (PDFBolt — REST via 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);
    }
}

Après (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");
    }
}

La différence structurelle est le modèle d'intégration. PDFBoltvous oblige à encoder en base64 le HTML, à construire une charge utile JSON, à définir l'en-tête API-KEY, POST vers https://api.pdfbolt.com/v1/direct, à attendre la réponse et à écrire vous-même les octets retournés sur le disque.

L'ChromePdfRenderer.RenderHtmlAsPdf() d'IronPDF renvoie un objet PdfDocument avec une méthode SaveAs() intégrée. Le modèle orienté objet vous permet de manipuler le PDF (ajouter des filigranes, fusionner des documents, appliquer la sécurité) avant de l'enregistrer. Si vous avez besoin des octets bruts pour la compatibilité avec le code existant, utilisez pdf.BinaryData. Voir la documentation HTML vers PDF pour des options de rendu supplémentaires.

Exemple 2 : Conversion d'une URL en PDF

Before (PDFBolt — REST via 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);
    }
}

Après (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");
    }
}

Du côté de PDFBolt, la conversion d'URL nécessite toujours un aller-retour complet REST : créer le corps JSON, définir l'entête de clé API, attendre le POST, et écrire les octets de réponse. Bien que vous pointiez déjà vers une URL publique, l'extraction et le rendu se produisent tous deux sur les serveurs de PDFBolt.

L'RenderUrlAsPdf() d'IronPDF renvoie un PdfDocument avec la méthode SaveAs() intégrée. L'avantage clé est qu'IronPDF effectue l'extraction URL et le rendu PDF localement — aucune donnée de document ne quitte votre infrastructure. En savoir plus sur la conversion d'URL en PDF.

Exemple 3 : Fichier HTML avec paramètres de page personnalisés

Before (PDFBolt — REST via 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);
    }
}

Après (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");
    }
}

Cet exemple montre la correspondance de configuration de page. PDFBoltaccepte des format de haut niveau plus un objet imbriqué margin dont les valeurs sont des chaînes style CSS ("20mm").IronPDF utilise un objet RenderingOptions sur le rendu avec des propriétés fortement typées.

Les principales correspondances :

  • "format": "A4"PdfPaperSize.A4 (énumération fortement typée)
  • "margin": { "top": "20mm" }RenderingOptions.MarginTop = 20 (mm numériques)

Les marges d'IronPDF sont toujours en millimètres numériques, donc les chaînes d'unités CSS de PDFBoltcomme "20mm" se mappent directement. L'espace de noms IronPdf.Rendering est requis pour accéder à l'énumération PdfPaperSize. Pour des configurations de page supplémentaires, voir la documentation des options de rendu.


Notes de migration essentielles

Changement de type de retour

Le point de terminaison /v1/direct de PDFBoltrenvoie le PDF brut comme le corps de réponse HTTP ;IronPDF renvoie un PdfDocument :

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

Changement de modèle d'intégration

La forme d'intégration change du client REST vers une bibliothèque en processus :

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

Modification du modèle de configuration

La configuration de PDFBoltest des champs JSON sur le corps de la requête ;IronPDF utilise RenderingOptions :

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

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

Élimination des clés API

PDFBolt nécessite un en-tête API-KEY sur chaque requête ;IronPDF utilise une clé de licence unique :

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

Supprimer la gestion des erreurs réseau

Le traitement local signifie qu'il n'y a pas d'erreurs de réseau à gérer :

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

// IronPDF: Remove network-specific catches entirely

Nouvelles fonctionnalités disponibles

Après la migration vers IronPDF, vous gagnez des capacités que PDFBoltne fournit pas :

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

Dépannage

Problème 1 : Pas de paquet PDFBolt sur NuGet

Problème : Recherche de using PDFBolt; / new HtmlToPdfConverter() dans IronPDF.

Solution : PDFBoltn'a pas de SDK .NET — son intégration est HttpClient contre https://api.pdfbolt.com/v1/direct.IronPDF remplace entièrement ce wrapper par ChromePdfRenderer :

// IronPDF
var renderer = new ChromePdfRenderer();

Problème 2 : Où est allé ConvertHtmlString ?

Problème : Migration d'un wrapper PDFBoltinterne qui exposait une méthode ConvertHtmlString(html).

Solution: Use RenderHtmlAsPdf():

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

Problème 3 : Où est allé ConvertUrl ?

Problème : Migration d'un wrapper PDFBoltinterne qui exposait une méthode ConvertUrl(url).

Solution: Use RenderUrlAsPdf():

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

Problème 4 : Champ JSON format → Enum

Problème : Traduction du champ JSON "format": "A4" de PDFBolt.

Solution : Utilisez PdfPaperSize de IronPdf.Rendering :

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

Edition 5 : La première génération de PDF est lente

Problème : Le rendu initial prend plus de temps que prévu.

Solution : Le moteur Chromium s'initialise lors de sa première utilisation. Préchauffez si nécessaire :

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

Liste de contrôle de la migration

Pré-migration

  • Inventorier tous les appels REST PDFBoltdans la base de code (api.pdfbolt.com)
  • Documenter les champs de requête JSON actuels (format, margin, printBackground, headerTemplate, etc.)
  • Identifier le code de gestion des clés API à supprimer
  • Listez 429 / gestion de relance de quota à supprimer
  • Obtenir une clé de licence IronPDF

Modifications du paquet

  • Supprimer le wrapper et les DTO PDFBoltHttpClient faits à la main (aucun paquet NuGet à désinstaller)
  • Installer le paquet NuGet IronPdf : dotnet add package IronPdf
  • Ajouter l'espace de noms using IronPdf;
  • Ajouter using IronPdf.Rendering; pour les énumérations de taille de papier

Modifications du code

  • Ajouter la configuration de la clé de licence au démarrage
  • Remplacer l'intégration HttpClient + API-KEY par ChromePdfRenderer
  • Remplacer POST /v1/direct par RenderHtmlAsPdf() / RenderUrlAsPdf()
  • Remplacer await response.Content.ReadAsByteArrayAsync() + File.WriteAllBytes() par pdf.SaveAs() (ou pdf.BinaryData si des octets sont encore nécessaires)
  • Mapper les champs JSON "format" / "margin" vers RenderingOptions.PaperSize / RenderingOptions.MarginTop etc.
  • Supprimer le code de gestion des clés API
  • Supprimez la gestion des limites de taux 429
  • Supprimer la gestion des erreurs réseau

Après la migration

  • Supprimer la clé API des fichiers de configuration
  • Supprimer la clé API des gestionnaires de secrets
  • Exécutez tous les tests comparant la sortie PDF
  • Vérifiez que les dimensions et les marges des pages s'affichent correctement.
  • Envisagez d'ajouter de nouvelles fonctionnalités (filigranes, sécurité, fusion).

Please note: PDFBolt est une marque déposée de son propriétaire respectif. Ce site n'est pas affilié à, approuvé par ou sponsorisé par PDFBolt. Tous les noms de produits, logos et marques sont la propriété de leurs propriétaires respectifs. Les comparaisons sont à titre informatif uniquement et reflètent les informations publiquement disponibles au moment de l'écriture.
Curtis Chau
Technical Writer

Curtis Chau holds a Bachelor’s degree in Computer Science (Carleton University) and specializes in front-end development with expertise in Node.js, TypeScript, JavaScript, and React. Passionate about crafting intuitive and aesthetically pleasing user interfaces, Curtis enjoys working with modern frameworks and creating well-structured, visually appealing manuals.

...
Read More

Related Articles

Key in blue circle

Obtenez votre clé d'essai de 30 jours instantanément.

bullet_checkedAucune carte de crédit ou création de compte requise
  • Logo Aetna
  • Logo NASA
  • Logo GE
  • Logo Porsche
  • Logo USDA
  • Logo Qatar
Join Millions of Engineers who’ve tried IronPDF
Réservez votre Démonstration en direct gratuite
Booking Badge related to IronPDF Product Demo

De confiance par des millions d'ingénieurs dans le monde entier

Logos des clients d'Iron Software
Obtenez Votre Consultation sans Engagement
Remplissez le formulaire ci-dessous ou envoyez un email à sales@ironsoftware.com
Vos informations seront toujours gardées confidentielles.
De confiance par des millions d'ingénieurs dans le monde entier
Logos des clients d'Iron Software
Obtenez votre clé d'essai 30 jours gratuitement.
Aucune carte de crédit ou création de compte requise