IRONSOFTWAREHOME
VIDÉOS

Comment protéger les fichiers PDF avec des mots de passe et des autorisations en C#

Curtis Chau
Curtis Chau
Updated: 19 juillet 2026

La migration de Gotenberg vers IronPDF transforme votre flux de travail PDF .NET d'une architecture microservice basée sur Docker avec des appels d'API HTTP vers une bibliothèque C# native en cours de processus. Ce guide fournit un chemin de migration complet, étape par étape, qui élimine la surcharge de l'infrastructure, la latence du réseau et la complexité de la gestion des conteneurs pour les développeurs .NET professionnels.

Pourquoi migrer de Gotenberg à IronPDF

Le problème de l'architecture de Gotenberg

Gotenberg est une architecture de microservices basée sur Docker pour la génération de PDF. Bien que puissant et flexible, il introduit une complexité importante pour les applications C# :

  1. Surcharge d'infrastructure : Nécessite Docker, l'orchestration de conteneurs (Kubernetes/Docker Compose), la découverte de services et l'équilibrage de charge. Chaque déploiement devient plus complexe.

  2. Latence réseau : Chaque opération PDF nécessite un appel HTTP à un service distinct, ce qui ajoute 10 à 100 ms (voire plus) par requête. Cette latence s'accumule rapidement en cas de forte activité.

  3. Problèmes de démarrage à froid : le démarrage du conteneur peut ajouter 2 à 5 secondes aux premières requêtes. Chaque redémarrage de pod, chaque événement de mise à l'échelle et chaque déploiement déclenche des démarrages à froid.

  4. Complexité opérationnelle : Vous devez gérer l'état, la mise à l'échelle, la journalisation et la surveillance des conteneurs comme des préoccupations distinctes de votre application principale.

  5. Données de formulaire multipart : Chaque requête nécessite la construction de charges utiles multipart/form-data — verbeuses, sujettes aux erreurs et fastidieuses à maintenir.

  6. Points de défaillance : Les délais d'attente du réseau, l'indisponibilité du service et les pannes de conteneurs sont tous à votre charge.

  7. Gestion des versions : les images de Gotenberg sont mises à jour séparément de votre application ; Les modifications de l'API peuvent interrompre les intégrations de manière inattendue.

Comparaison Gotenberg vs IronPDF

AspectGotenbergIronPDF
DéploiementConteneur Docker + orchestrationPaquet NuGet unique
ArchitectureMicroservice (API REST)Bibliothèque en cours
Temps de latence par requête10-100ms+ (aller-retour sur le réseau)temps de latence < 1ms
Démarrage à froid2-5 secondes (démarrage du conteneur)1-2 secondes (premier rendu uniquement)
InfrastructureDocker, Kubernetes, équilibreurs de chargeAucune exigence
Modes de défaillanceRéseau, conteneur, défaillance de serviceExceptions .NET Standard
Style APIREST multipart/form-dataAppels de méthodes C# natifs
Mise à l'échelleHorizontal (plus de conteneurs)Vertical (en cours)
DébogageTraçage distribué nécessaireDébogueur standard
Contrôle de versionBalises de l'image du conteneurVersions des paquets NuGet

Pour les équipes ciblant les versions actuelles de .NET, IronPDF fournit une base sans dépendances d'infrastructure qui s'intègre nativement aux modèles .NET modernes.


Évaluation de la complexité de la migration

Estimation de l'effort par fonctionnalité

FonctionComplexité de la migration
HTML vers PDFTrès faible
URL vers PDFTrès faible
Format de papier personnaliséFaible
MargesFaible
Fusion de PDFFaible
En-têtes/Pieds de pageMoyen
Délais d'attenteFaible
Conversion PDF/AFaible

Changement de paradigme

Le Shift fondamental de cette migration de Gotenberg réside dans le passage des appels d'API HTTP avec des données de formulaire multipart aux appels de méthodes C# natives :

Gotenberg :  HTTP POST multipart/form-data vers un conteneur Docker
IronPDF :    Appels directs de méthodes sur des objets C#
Text

Avant de commencer

Prérequis

  1. Version .NET : IronPDF prend en charge .NET Framework 4.6.2+ et .NET Core 3.1+ / .NET 5/6/7/8/9+.
  2. Clé de licence : Obtenez votre clé de licence IronPDF sur IronPDF
  3. Plan de retrait de l'infrastructure : documenter les conteneurs Gotenberg en vue de leur mise hors service après la migration

Identifier tous les usages de Gotenberg

# Find direct HTTP calls to Gotenberg
grep -r "gotenberg\|/forms/chromium\|/forms/libreoffice\|/forms/pdfengines" --include="*.cs" .

# Find GotenbergSharpApiClient usage
grep -r "GotenbergSharpClient\|Gotenberg.Sharp\|ChromiumRequest" --include="*.cs" .

# Find Docker/Kubernetes Gotenberg configuration
grep -r "gotenberg/gotenberg\|gotenberg:" --include="*.yml" --include="*.yaml" .
SHELL

Modifications du paquet NuGet

# Remove Gotenberg client (if using)
dotnet remove package Gotenberg.Sharp.API.Client

# Install IronPDF
dotnet add package IronPdf
SHELL

Migration rapide

Étape 1 : Mise à jour de la configuration de la licence

Avant (Gotenberg):

Gotenberg ne nécessite pas de licence mais requiert une infrastructure Docker avec des URL de conteneurs.

private readonly string _gotenbergUrl = "http://localhost:3000";

Après (IronPDF):

// Set once at application startup
IronPdf.License.LicenseKey = "YOUR-LICENSE-KEY";

Étape 2 : mise à jour des importations de l'espace de noms

// Before (Gotenberg)
using System.Net.Http;
using System.Threading.Tasks;
using System.IO;

// After (IronPDF)
using IronPdf;
using IronPdf.Rendering;

Référence API complète

Mappage du point d'extrémité de Gotenberg à IronPDF

Route de GotenbergÉquivalent d'IronPDF
POST /forms/chromium/convert/htmlChromePdfRenderer.RenderHtmlAsPdf()
POST /forms/chromium/convert/urlChromePdfRenderer.RenderUrlAsPdf()
POST /forms/pdfengines/mergePdfDocument.Merge()
POST /forms/pdfengines/convertpdf.SaveAs() avec paramètres
GET /healthN/A

Mappage des paramètres de formulaire aux options de rendu

Paramètre GotenbergPropriété d'IronPDFNotes sur la conversion
paperWidth (pouces)RenderingOptions.PaperSizeUtiliser une énumération ou une taille personnalisée
paperHeight (pouces)RenderingOptions.PaperSizeUtiliser une énumération ou une taille personnalisée
marginTop (pouces)RenderingOptions.MarginTopMultiplier par 25,4 pour obtenir mm
marginBottom (pouces)RenderingOptions.MarginBottomMultiplier par 25,4 pour obtenir mm
printBackgroundRenderingOptions.PrintHtmlBackgroundsBooléen
landscapeRenderingOptions.PaperOrientationLandscape énumération
waitDelay (par exemple, "3s")RenderingOptions.WaitFor.RenderDelay(ms)Convertir une chaîne en millisecondes

Exemples de migration de code

Exemple 1 : HTML de base vers PDF

Avant (Gotenberg):

using System;
using System.Net.Http;
using System.Threading.Tasks;
using System.IO;

class GotenbergExample
{
    static async Task Main()
    {
        var gotenbergUrl = "http://localhost:3000/forms/chromium/convert/html";
        
        using var client = new HttpClient();
        using var content = new MultipartFormDataContent();
        
        var html = "<html><body><h1>Hello from Gotenberg</h1></body></html>";
        content.Add(new StringContent(html), "files", "index.html");
        
        var response = await client.PostAsync(gotenbergUrl, content);
        var pdfBytes = await response.Content.ReadAsByteArrayAsync();
        
        await File.WriteAllBytesAsync("output.pdf", pdfBytes);
        Console.WriteLine("PDF generated successfully");
    }
}

Après (IronPDF):

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

class IronPdfExample
{
    static void Main()
    {
        var renderer = new ChromePdfRenderer();
        
        var html = "<html><body><h1>Hello from IronPDF</h1></body></html>";
        var pdf = renderer.RenderHtmlAsPdf(html);
        
        pdf.SaveAs("output.pdf");
        Console.WriteLine("PDF generated successfully");
    }
}

La différence est substantielle : Gotenberg nécessite la construction d'un HttpClient, la création MultipartFormDataContent, l'exécution d'une requête HTTP POST asynchrone vers un conteneur Docker en cours d'exécution, et la gestion de la réponse sous forme de tableau de bytes. IronPDF réduit cela à trois lignes avec un appel à la méthode ChromePdfRenderer — aucun surcoût réseau, aucune dépendance de conteneur, aucune complexité asynchrone. Voir la documentation HTML vers PDF pour des options de rendu supplémentaires.

Exemple 2 : Conversion d'une URL en PDF

Avant (Gotenberg):

using System;
using System.Net.Http;
using System.Threading.Tasks;
using System.IO;

class GotenbergUrlToPdf
{
    static async Task Main()
    {
        var gotenbergUrl = "http://localhost:3000/forms/chromium/convert/url";
        
        using var client = new HttpClient();
        using var content = new MultipartFormDataContent();
        
        content.Add(new StringContent("https://example.com"), "url");
        
        var response = await client.PostAsync(gotenbergUrl, content);
        var pdfBytes = await response.Content.ReadAsByteArrayAsync();
        
        await File.WriteAllBytesAsync("webpage.pdf", pdfBytes);
        Console.WriteLine("PDF from URL generated successfully");
    }
}

Après (IronPDF):

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

class IronPdfUrlToPdf
{
    static void Main()
    {
        var renderer = new ChromePdfRenderer();
        
        var pdf = renderer.RenderUrlAsPdf("https://example.com");
        
        pdf.SaveAs("webpage.pdf");
        Console.WriteLine("PDF from URL generated successfully");
    }
}

L'approche Gotenberg nécessite un point de terminaison différent (/forms/chromium/convert/url), la construction d'un contenu multipart avec l'URL comme champ de formulaire, et la gestion des réponses HTTP asynchrones. La méthode RenderUrlAsPdf() d'IronPDF accepte directement l'URL et renvoie un objet PdfDocument de manière synchrone. En savoir plus sur la conversion d'URL en PDF.

Exemple 3 : Taille du papier et marges personnalisées

Avant (Gotenberg):

using System;
using System.Net.Http;
using System.Threading.Tasks;
using System.IO;

class GotenbergCustomSize
{
    static async Task Main()
    {
        var gotenbergUrl = "http://localhost:3000/forms/chromium/convert/html";
        
        using var client = new HttpClient();
        using var content = new MultipartFormDataContent();
        
        var html = "<html><body><h1>Custom Size PDF</h1></body></html>";
        content.Add(new StringContent(html), "files", "index.html");
        content.Add(new StringContent("8.5"), "paperWidth");
        content.Add(new StringContent("11"), "paperHeight");
        content.Add(new StringContent("0.5"), "marginTop");
        content.Add(new StringContent("0.5"), "marginBottom");
        
        var response = await client.PostAsync(gotenbergUrl, content);
        var pdfBytes = await response.Content.ReadAsByteArrayAsync();
        
        await File.WriteAllBytesAsync("custom-size.pdf", pdfBytes);
        Console.WriteLine("Custom size PDF generated successfully");
    }
}

Après (IronPDF):

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

class IronPdfCustomSize
{
    static void Main()
    {
        var renderer = new ChromePdfRenderer();
        
        renderer.RenderingOptions.PaperSize = PdfPaperSize.Letter;
        renderer.RenderingOptions.MarginTop = 50;
        renderer.RenderingOptions.MarginBottom = 50;
        
        var html = "<html><body><h1>Custom Size PDF</h1></body></html>";
        var pdf = renderer.RenderHtmlAsPdf(html);
        
        pdf.SaveAs("custom-size.pdf");
        Console.WriteLine("Custom size PDF generated successfully");
    }
}

Gotenberg nécessite des paramètres basés sur des chaînes ("8.5", "11", "0.5") ajoutés aux données de formulaire multipart — pas de sécurité de type, pas d'IntelliSense, facile à mal taper. IronPDF fournit des propriétés fortement typées avec des énumérations PdfPaperSize et des valeurs de marge numériques. Notez que les marges d'IronPDF sont en millimètres (50mm ≈ 2 pouces), alors que Gotenberg utilise des pouces.


Notes de migration essentielles

Conversions d'unités

La conversion la plus importante dans cette migration Gotenberg est celle des unités de marge :

// Gotenberg: margins in inches
content.Add(new StringContent("0.5"), "marginTop");    // 0.5 inches
content.Add(new StringContent("1"), "marginBottom");   // 1 inch

// IronPDF: margins in millimeters
renderer.RenderingOptions.MarginTop = 12.7;    // 0.5 inches × 25.4 = 12.7mm
renderer.RenderingOptions.MarginBottom = 25.4; // 1 inch × 25.4 = 25.4mm

Formule de conversion : millimeters = inches × 25.4

Synchrone vs Asynchrone

Gotenberg nécessite des opérations asynchrones en raison de la communication HTTP :

// Gotenberg: Forced async due to network calls
var response = await client.PostAsync(gotenbergUrl, content);
var pdfBytes = await response.Content.ReadAsByteArrayAsync();

// IronPDF: Synchronous in-process execution
var pdf = renderer.RenderHtmlAsPdf(html);
pdf.SaveAs("output.pdf");

// IronPDF: Async wrapper if needed
var pdf = await Task.Run(() => renderer.RenderHtmlAsPdf(html));

Gestion des erreurs

// Gotenberg: HTTP error handling
try
{
    var response = await client.PostAsync(gotenbergUrl, content);
    response.EnsureSuccessStatusCode();  // What if 500? 503? Timeout?
}
catch (HttpRequestException ex) { /* Network error */ }
catch (TaskCanceledException ex) { /* Timeout */ }

// IronPDF: Standard .NET exceptions
try
{
    var pdf = renderer.RenderHtmlAsPdf(html);
}
catch (Exception ex)
{
    Console.WriteLine($"PDF generation failed: {ex.Message}");
}

Suppression de l'infrastructure

Après la migration, supprimez Gotenberg de votre infrastructure :

# REMOVE from docker-compose.yml:
# services:
#   gotenberg:
#     image: gotenberg/gotenberg:8
#     ports:
#       - "3000:3000"
#     deploy:
#       resources:
#         limits:
#           memory: 2G
Text

Considérations de Performance

Comparaison de latence

OpérationGotenberg(Chaud)Gotenberg(Démarrage à froid)IronPDF(premier rendu)IronPDF(suite)
HTML simple150-300ms2 à 5 secondes1-2 secondes50-150ms
HTML complexe500-1500ms3-7 secondes1.5-3 secondes200-800ms
Rendu d'URL1-5 secondes3-10 secondes1-5 secondes500ms-3s

Élimination des coûts d'infrastructure

RessourceGotenbergIronPDF
Conteneurs requis1-N (mise à l'échelle)0
Mémoire par conteneur512MB-2GBN/A
Frais généraux de réseau par requête10-100ms0ms
Points d'arrivée du bilan de santéLes exigences sont les suivantesPas nécessaire
Équilibreur de chargeSouvent nécessairePas nécessaire

Dépannage

Édition 1 : Les modèles HttpClient ne sont pas nécessaires

Problème : Code utilisant toujours HttpClient et MultipartFormDataContent.

Solution : Remplacer entièrement par ChromePdfRenderer :

// Remove all of this:
// using var client = new HttpClient();
// using var content = new MultipartFormDataContent();
// content.Add(new StringContent(html), "files", "index.html");
// var response = await client.PostAsync(url, content);

// Replace with:
var renderer = new ChromePdfRenderer();
var pdf = renderer.RenderHtmlAsPdf(html);

Enjeu 2 : Les unités de marge ne sont pas les bonnes

Problème : les marges des fichiers PDF sont incorrectes après la migration.

Solution : Convertir les pouces en millimètres :

// Gotenberg used inches: "0.5"
// IronPDF uses millimeters: 0.5 × 25.4 = 12.7
renderer.RenderingOptions.MarginTop = 12.7;

Sujet 3 : Références URL des conteneurs

Problème : Le code contient http://gotenberg:3000 ou des URL similaires.

Solution : Supprimez toutes les références à l'URL du conteneur — IronPDF s'exécute dans le même processus :

// Remove:
// private readonly string _gotenbergUrl = "http://gotenberg:3000";

// IronPDF needs no URL - it's in-process
var renderer = new ChromePdfRenderer();

Liste de contrôle de la migration

Pré-migration

  • Inventaire de tous les appels HTTP Gotenberg dans le code source
  • Documenter la configuration actuelle de Gotenberg (délais d'expiration, marges, formats de papier)
  • Identifier toutes les configurations Docker/Kubernetes Gotenberg
  • Obtenir une clé de licence IronPDF
  • Planifier le démantèlement des infrastructures

Migration de code

  • Installez le package NuGet IronPDF: dotnet add package IronPdf
  • Supprimer les packages clients Gotenberg
  • Remplacer tous les appels HTTP à Gotenberg par des appels de méthode IronPDF
  • Convertir les unités de marge de pouces en millimètres
  • Mise à jour de la gestion des erreurs (erreurs HTTP → exceptions .NET )
  • Ajouter l'initialisation de la clé de licence au démarrage

Migration des infrastructures

  • Supprimer Gotenberg de Docker Compose / Kubernetes
  • Mise à jour des pipelines CI/CD (suppression des extractions d'images Gotenberg)
  • Supprimer les contrôles sanitaires de Gotenberg
  • Supprimer l'URL de Gotenberg de la configuration

Essai

  • Tester la conversion de HTML en PDF
  • Test de conversion d'URL en PDF
  • Vérifier la précision des marges et des dimensions
  • Test de performance sous charge
  • Test du temps de préchauffage du premier rendu

Après la migration

  • Supprimer les déploiements de conteneurs Gotenberg
  • Fichiers de configuration d'archive Gotenberg
  • Mise à jour de la documentation
  • Surveiller l'utilisation de la mémoire des applications
  • Vérifier l'absence de connexions réseau orphelines

Veuillez noter: Gotenberg est une marque déposée de son propriétaire respectif. Ce site n'est pas affilié à, approuvé par, ou parrainé par Gotenberg. 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
Rédacteur technique

Curtis Chau détient un baccalauréat en informatique (Université de Carleton) et se spécialise dans le développement front-end avec expertise en Node.js, TypeScript, JavaScript et React. Passionné par la création d'interfaces utilisateur intuitives et esthétiquement plaisantes, Curtis aime travailler avec des frameworks modernes et créer des manuels bien structurés et visuellement attrayants.

...
Lire la suite

Articles connexes

Key in blue circle

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

Your trial license will be sent to your email address

Aucune restriction. 100 % débloqué. Pas de carte bancaire.

bullet_checkedAucune carte de crédit ou création de compte requiseAucune restriction. 100 % débloqué. Pas de carte bancaire.
  • 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

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