Comment générer des fichiers PDF dans .NET Core

Convertir HTML en PDF dans .NET Core en utilisant C# avec IronPDF

This article was translated from English: Does it need improvement?
Translated
View the article in English

Générer des PDF de haute fidélité directement à partir du HTML est une exigence courante dans les applications modernes .NET - rapports, factures et billets nécessitent tous une sortie pixel-perfect qui correspond à l'interface utilisateur du web. IronPDF simplifie ce flux de travail en exposant une API unique en C# pour rendre le HTML, les vues Razor et les sites web complets en documents PDF conformes aux normes. À la fin de ce guide, un développeur pourra convertir des URL, du HTML brut ou des vues MVC dans un projet ASP.NET Core, et déployer le même code sous Windows, Linux, Docker ou des environnements serverless.

[[t: (Pour les problèmes de disposition, IronPDF expédie un débogueur Chrome sans tête qui aide à diagnostiquer les bizarreries de CSS, JavaScript et des requêtes multimédias avant que le PDF ne soit rendu. Consultez le guide dédié HTML à PDF pixel-perfect pour des techniques approfondies.)]]

Démarrage rapide : Créer un PDF à partir de HTML avec .NET Core

Convertissez sans effort le HTML en PDF dans .NET Core en utilisant la bibliothèque IronPDF. Ce guide fournit un exemple simple pour vous permettre de commencer rapidement en rendant le contenu HTML dans un PDF de haute qualité avec un minimum de code. Idéal pour les développeurs cherchant à intégrer la création de PDF dans leurs applications avec facilité.

  1. Installez IronPDF avec le Gestionnaire de Packages NuGet

    PM > Install-Package IronPdf
  2. Copiez et exécutez cet extrait de code.

    var pdf = new IronPdf.ChromePdfRenderer().RenderHtmlAsPdf("<h1>Hello World</h1>");
  3. Déployez pour tester sur votre environnement de production.

    Commencez à utiliser IronPDF dans votre projet dès aujourd'hui avec un essai gratuit

    arrow pointer

Liste de vérification rapide

  1. InstallInstall-Package IronPdf
  2. Render a URLChromePdfRenderer.RenderUrlAsPdf()
  3. Render raw HTMLChromePdfRenderer.RenderHtmlAsPdf()
  4. Exporter une vue RazorChromePdfRenderer.RenderHtmlAsPdfAsync()
  5. Affiner la sortie – exploitez ChromePdfRenderer.RenderingOptions

Ce que ce tutoriel couvre

  • Conversion d'URL, de chaîne HTML et de vue Razor
  • Configuration de papier, de marge et de type de média
  • Déploiement multiplateforme (Windows, Linux, Docker)
  • Post-traitement : fusionner, filigraner, protéger par mot de passe et signer numériquement des PDFs
  • Exemple de bout en bout : application MVC de réservation de billets

Comment installer la bibliothèque PDF dans .NET Core ?

Installer la bibliothèque est une simple commande dans tout projet .NET 8 et reste compatible avec la préversion de .NET 9 et la prochaine version .NET 10. Utilisez la console du gestionnaire de packages de NuGet et le gestionnaire de packages résoudra automatiquement chaque dépendance pour Windows, Linux, Docker et les cibles serverless.

PM> Install-Package IronPdf             # .NET 8 LTS and higher
PM> Install-Package IronPdf             # .NET 8 LTS and higher
SHELL

Veuillez noterBesoin de CLI ? La même commande fonctionne avec dotnet add package IronPdf dans le dossier de votre projet.

Une fois installé, confirmez que tout est en place en convertissant n'importe quelleURLpublique :

:path=/static-assets/pdf/content-code-examples/tutorials/dotnet-core-pdf-generating-3.cs
public class ClientModel
{
    [Required]
    public string Name { get; set; }
    [Required]
    public string Phone { get; set; }
    [Required]
    public string Email { get; set; }
}
Public Class ClientModel
	<Required>
	Public Property Name() As String
	<Required>
	Public Property Phone() As String
	<Required>
	Public Property Email() As String
End Class
$vbLabelText   $csharpLabel

Comment ça fonctionne

  • ChromePdfRenderer lance une instance de Chromium en bac à sable, aucune installation de Chrome séparée n'est requise.
  • RenderUrlAsPdf capture le DOM rendu complètement, y compris le contenu piloté par JavaScript, les requêtes multimédias CSS, et les polices.
  • Le PdfDocument résultant expose des méthodes d'aide pour fusionner, protéger par mot de passe, ou signer numériquement la sortie — les capacités sont couvertes plus tard dans ce tutoriel.

Pour plus de détails sur les nuances de déploiement (Azure App Service, AWS Lambda, Linux sur site), consultez le guide d'installation dédié et les pages configuration avancée de NuGet. Les conseils CI/CD internes pour Docker et les clusters K8s sont abordés dans les meilleures pratiques de déploiement Docker.


Comment un service .NET Core peut-il convertir uneURLde site web en PDF ?

Un seul appel à RenderUrlAsPdf suffit : passez n'importe quelleURLpubliquement accessible et IronPDF retourne un PDF totalement rendu, conforme aux normes. Le code ci-dessous vise .NET 8 LTS et se compile sans modification sur la préversion .NET 9 ainsi que la prochaine version .NET 10 prévue en 2025.

Exemple pas à pas

:path=/static-assets/pdf/content-code-examples/tutorials/dotnet-core-pdf-generating-4.cs
public class ClientServices
{
    private static ClientModel _clientModel;
    public static void AddClient(ClientModel clientModel)
    {
        _clientModel = clientModel;
    }
    public static ClientModel GetClient()
    {
        return _clientModel;
    }
}
Public Class ClientServices
	Private Shared _clientModel As ClientModel
	Public Shared Sub AddClient(ByVal clientModel As ClientModel)
		_clientModel = clientModel
	End Sub
	Public Shared Function GetClient() As ClientModel
		Return _clientModel
	End Function
End Class
$vbLabelText   $csharpLabel

Pourquoi ça fonctionne

  • ChromePdfRenderer lance une instance de Chromium en bac à sable — aucune dépendance système de Chrome, gardant les images Docker légères.
  • RenderUrlAsPdf attend que le DOM et JavaScript soient terminés avant de prendre le snapshot, de sorte que les applications monopage soient rendues correctement.
  • En réglant CssMediaType sur Impression, l'engine utilise des règles spécifiques à l'impression, correspondant à la sortie d'un navigateur Imprimer → Enregistrer sous PDF.
  • Le PdfDocument résultant peut être chiffré, signé numériquement, fusionné ou rasterisé — les capacités sont couvertes dans les sections suivantes.

ConseilsDébogage pixel par pixel : activez renderer.LoggingOptions.DebugMode = true et suivez le guide de débogage de Chrome en mode sans tête pour inspecter les DevTools en direct lors du rendu.

Ressources connexes

-Référence API– ChromePdfRenderer.RenderUrlAsPdf -Référence API– PdfDocument.SaveAs


Comment convertir du HTML brut en PDF dans .NET Core ?

Passer une chaîne HTML — ou le balisage rendu d'une vue Razor — à ChromePdfRenderer.RenderHtmlAsPdf produit instantanément un PDF conforme aux normes. La méthode lance le moteur Chromium intégré d'IronPDF, donc aucune installation de navigateur externe ou dépendance WebView n'est requise. Le même code illustré ci-dessous se compile sur .NET 8 LTS aujourd'hui et reste compatible avec .NET 9 et la version .NET 10 prévue en novembre 2025.

Exemple — générer un PDF à partir d'un fragment HTML

:path=/static-assets/pdf/content-code-examples/tutorials/dotnet-core-pdf-generating-5.cs
@model IronPdfMVCHelloWorld.Models.ClientModel
@{
  ViewBag.Title = "Book Ticket";
}
<h2>Index</h2>
@using (Html.BeginForm())
{
  <div class="form-horizontal">
    @Html.ValidationSummary(true, "", new { @class = "text-danger" })
    <div class="form-group">
      @Html.LabelFor(model => model.Name, htmlAttributes: new { @class = "control-label col-md-2" })
      <div class="col-md-10">
        @Html.EditorFor(model => model.Name, new { htmlAttributes = new { @class = "form-control" } })
        @Html.ValidationMessageFor(model => model.Name, "", new { @class = "text-danger" })
      </div>
    </div>
    <div class="form-group">
      @Html.LabelFor(model => model.Phone, htmlAttributes: new { @class = "control-label col-md-2" })
      <div class="col-md-10">
        @Html.EditorFor(model => model.Phone, new { htmlAttributes = new { @class = "form-control" } })
        @Html.ValidationMessageFor(model => model.Phone, "", new { @class = "text-danger" })
      </div>
    </div>
    <div class="form-group">
      @Html.LabelFor(model => model.Email, htmlAttributes: new { @class = "control-label col-md-2" })
      <div class="col-md-10">
        @Html.EditorFor(model => model.Email, new { htmlAttributes = new { @class = "form-control" } })
        @Html.ValidationMessageFor(model => model.Email, "", new { @class = "text-danger" })
      </div>
    </div>
    <div class="form-group">
      <div class="col-md-10 pull-right">
        <button type="submit" value="Save" class="btn btn-sm">
          <i class="fa fa-plus"></i>
          <span>
            Save
          </span>
        </button>
      </div>
    </div>
  </div>
}
model ReadOnly Property () As IronPdfMVCHelloWorld.Models.ClientModel
  ViewBag.Title = "Book Ticket"
End Property
'INSTANT VB TODO TASK: The following line could not be converted:
(Of h2) Index</h2> [using](Html.BeginForm())
If True Then
'INSTANT VB TODO TASK: The following line uses invalid syntax:
'  <div class="form-horizontal"> @Html.ValidationSummary(True, "", New { @class = "text-danger" }) <div class="form-group"> @Html.LabelFor(model => model.Name, htmlAttributes: New { @class = "control-label col-md-2" }) <div class="col-md-10"> @Html.EditorFor(model => model.Name, New { htmlAttributes = New { @class = "form-control" } }) @Html.ValidationMessageFor(model => model.Name, "", New { @class = "text-danger" }) </div> </div> <div class="form-group"> @Html.LabelFor(model => model.Phone, htmlAttributes: New { @class = "control-label col-md-2" }) <div class="col-md-10"> @Html.EditorFor(model => model.Phone, New { htmlAttributes = New { @class = "form-control" } }) @Html.ValidationMessageFor(model => model.Phone, "", New { @class = "text-danger" }) </div> </div> <div class="form-group"> @Html.LabelFor(model => model.Email, htmlAttributes: New { @class = "control-label col-md-2" }) <div class="col-md-10"> @Html.EditorFor(model => model.Email, New { htmlAttributes = New { @class = "form-control" } }) @Html.ValidationMessageFor(model => model.Email, "", New { @class = "text-danger" }) </div> </div> <div class="form-group"> <div class="col-md-10 pull-right"> <button type="submit" value="Save" class="btn btn-sm"> <i class="fa fa-plus"></i> <span> Save </span> </button> </div> </div> </div> }
$vbLabelText   $csharpLabel

Ce que le code démontre

  • Chromium intégré — IronPDF intègre le moteur Chromium, garantissant la parité HTML5, CSS3 et JavaScript avec les navigateurs modernes.
  • Dépendance unique — Une installation NuGet légère couvre Windows, Linux, Docker et Azure/AWS sans bibliothèques système supplémentaires.
  • Options de renduPaperSize, CssMediaType, et RenderDelay reflètent les paramètres d'impression du navigateur afin que les PDF correspondent aux mises en page à l'écran.
  • Ciblage pérenne — La surface de l'API est la même à travers .NET 8, .NET 9 STS, et le prochain .NET 10, de sorte que la maintenance à long terme est minimale.
  • Hooks de post-traitementPdfDocument expose des aides pour la fusion, la protection par mot de passe, et les signatures numériques — chacune est couverte plus tard dans ce guide.

Lecture supplémentaire : voir le tutoriel étape par étape HTML-string-to-PDF et la documentation API complète ChromePdfRenderer.


Comment une vue ASP .NET Core MVC peut-elle être exportée en PDF ?

IronPDF rend une vue Razor entièrement traitée ( .cshtml ) de la même manière qu'un navigateur le ferait et stream le résultat en tant que PdfDocument. Le flux de travail ci-dessous garde la logique du contrôleur propre, ne nécessite aucun plugin de navigateur et fonctionne sur .NET 8 LTS, .NET 9 preview et la version .NET 10 prévue en novembre 2025.

Exemple de contrôleur de bout en bout

// TicketsController.cs — .NET 8 LTS / MVC
using IronPdf;
using Microsoft.AspNetCore.Mvc;
using YourApp.Models;           // TicketViewModel

public class TicketsController : Controller
{
    private readonly ChromePdfRenderer _renderer;

    public TicketsController()
    {
        _renderer = new ChromePdfRenderer
        {
            RenderingOptions =
            {
                PaperSize        = PdfPaperSize.A5,            // Compact ticket size
                PaperOrientation = PdfPdfOrientation.Portrait,
                FitToPaperWidth  = true,
                CssMediaType     = PdfCssMediaType.Print,
                Margins = new PdfMargins(5, 10, 5, 10)         // mm
            }
        };
    }

    // GET /Tickets/Print/42
    public async Task<IActionResult> Print(int id)
    {
        TicketViewModel vm = await _service.GetTicketAsync(id);

        // 1. Render the Razor view to an HTML string
        string html  = await RazorTemplateEngine.RenderViewAsync(
                           HttpContext, "~/Views/Tickets/Print.cshtml", vm);

        // 2. Convert HTML → PDF
        using PdfDocument pdf = _renderer.RenderHtmlAsPdf(html);

        // 3. Stream back as a file
        return File(pdf.BinaryData, "application/pdf",
                    $"ticket-{id}.pdf");
    }
}
// TicketsController.cs — .NET 8 LTS / MVC
using IronPdf;
using Microsoft.AspNetCore.Mvc;
using YourApp.Models;           // TicketViewModel

public class TicketsController : Controller
{
    private readonly ChromePdfRenderer _renderer;

    public TicketsController()
    {
        _renderer = new ChromePdfRenderer
        {
            RenderingOptions =
            {
                PaperSize        = PdfPaperSize.A5,            // Compact ticket size
                PaperOrientation = PdfPdfOrientation.Portrait,
                FitToPaperWidth  = true,
                CssMediaType     = PdfCssMediaType.Print,
                Margins = new PdfMargins(5, 10, 5, 10)         // mm
            }
        };
    }

    // GET /Tickets/Print/42
    public async Task<IActionResult> Print(int id)
    {
        TicketViewModel vm = await _service.GetTicketAsync(id);

        // 1. Render the Razor view to an HTML string
        string html  = await RazorTemplateEngine.RenderViewAsync(
                           HttpContext, "~/Views/Tickets/Print.cshtml", vm);

        // 2. Convert HTML → PDF
        using PdfDocument pdf = _renderer.RenderHtmlAsPdf(html);

        // 3. Stream back as a file
        return File(pdf.BinaryData, "application/pdf",
                    $"ticket-{id}.pdf");
    }
}
Imports IronPdf
Imports Microsoft.AspNetCore.Mvc
Imports YourApp.Models ' TicketViewModel

Public Class TicketsController
    Inherits Controller

    Private ReadOnly _renderer As ChromePdfRenderer

    Public Sub New()
        _renderer = New ChromePdfRenderer With {
            .RenderingOptions = New PdfRenderingOptions With {
                .PaperSize = PdfPaperSize.A5, ' Compact ticket size
                .PaperOrientation = PdfPdfOrientation.Portrait,
                .FitToPaperWidth = True,
                .CssMediaType = PdfCssMediaType.Print,
                .Margins = New PdfMargins(5, 10, 5, 10) ' mm
            }
        }
    End Sub

    ' GET /Tickets/Print/42
    Public Async Function Print(id As Integer) As Task(Of IActionResult)
        Dim vm As TicketViewModel = Await _service.GetTicketAsync(id)

        ' 1. Render the Razor view to an HTML string
        Dim html As String = Await RazorTemplateEngine.RenderViewAsync(
            HttpContext, "~/Views/Tickets/Print.cshtml", vm)

        ' 2. Convert HTML → PDF
        Using pdf As PdfDocument = _renderer.RenderHtmlAsPdf(html)
            ' 3. Stream back as a file
            Return File(pdf.BinaryData, "application/pdf", $"ticket-{id}.pdf")
        End Using
    End Function
End Class
$vbLabelText   $csharpLabel

Ce que ce code illustre

  • Aucun fichier temporaire — la vue Razor est rendue en mémoire, puis passée directement à RenderHtmlAsPdf, évitant les E/S disque et les conditions de course de dossier temporaire.
  • Sortie de taille ticketPaperSize = A5 et des marges étroites gardent les tickets imprimés à la maison compacts.
  • Styles d'impression cohérentsCssMediaType = Print applique les mêmes règles CSS @media print utilisées par les navigateurs.
  • Streaming binairepdf.BinaryData stream le document sans toucher le système de fichiers ; idéal pour les points de terminaison API et les fonctions Lambda.
  • Rendu réutilisableChromePdfRenderer est instancié une fois par contrôleur, puis réutilisé, minimisant le surcoût de lancement de processus.

PaperSize , PaperOrientation , FitToPaperWidth

Margines, Header, Footer, Watermark

Prochaines étapes : ajouter le chiffrement, les signatures numériques ou fusionner plusieurs billets en un seul fichier. Voir l' exemple de fusion et le guide des signatures numériques.


Icon Quote related to Ce que ce code illustre

Ma bibliothèque préférée de ce genre est IronPDF. Elle permet une manipulation rapide et efficace des fichiers PDF. Elle dispose également de nombreuses fonctionnalités précieuses, comme l'exportation au format PDF/A et la signature numérique des documents PDF.

Milan Jovanovic related to Ce que ce code illustre

Milan Jovanovic

Microsoft MVP

Voir l'étude de cas
Icon Quote related to Ce que ce code illustre

IronOCR signifie que nous pouvons économiser 40 000 $ par an grâce au traitement manuel, tout en améliorant la productivité et en libérant des ressources pour des tâches à fort impact. Je le recommande vivement.

Brent Matzelle related to Ce que ce code illustre

Brent Matzelle

Directeur technique, OPYN

Voir l'étude de cas
Icon Quote related to Ce que ce code illustre

Iron Suite joue un rôle crucial dans nos opérations. Ce sont des outils qui augmentent l'efficacité de l'entreprise, y compris la création de plans d'étage et l'amélioration de la gestion des stocks.

David Jones related to Ce que ce code illustre

David Jones

Ingénieur logiciel principal, Agorus Build

Voir l'étude de cas

Comment ajuster la taille du papier, marges, en-têtes, filigranes et sécurité avant le rendu ?

IronPDF expose un seul objet ChromePdfRenderOptions qui contrôle tous les aspects de la sortie — dimensions papeterie, orientation, en-têtes & pieds de page, minutage JavaScript, filigranes, cryptage, et signatures numériques — tout cela sans plugins de navigateur supplémentaires.

Exemple de code — appliquer plusieurs options à la fois

:path=/static-assets/pdf/content-code-examples/tutorials/dotnet-core-pdf-generating-7.cs
[HttpPost]
public ActionResult Index(ClientModel model)
{
    if (ModelState.IsValid)
    {
        ClientServices.AddClient(model);
        return RedirectToAction("TicketView");
    }
  return View(model);
}
<HttpPost>
Public Function Index(ByVal model As ClientModel) As ActionResult
	If ModelState.IsValid Then
		ClientServices.AddClient(model)
		Return RedirectToAction("TicketView")
	End If
  Return View(model)
End Function
$vbLabelText   $csharpLabel

Pourquoi ces options comptent

  • PaperSize, Margins, et CssMediaType reflètent la boîte de dialogue d'impression d'un navigateur afin que les mises en page à l'écran et le PDF restent identiques sur Windows, Linux, et Docker.
  • En-têtes et pieds de page HTML prennent en charge les jetons Razor, le CSS et le JavaScript — pratiques pour les numéros de page dynamiques ou le marquage.
  • HtmlStamp permet à une seule ligne de créer des filigranes de marque avec un contrôle HTML + CSS complet.
  • Options de sécurité activent le cryptage 128 bits, les mots de passe propriétaires/utilisateurs et des autorisations granulaires sans outils tiers.
  • Signatures numériques ajoutent un sceau cryptographique directement dans le code, maintenant l'authenticité légale et la preuve de falsification.
  • Les aides d'extraction telles que ExtractAllText et ExtractAllImages inversent le processus lorsque l'analyse est requise.

Référence rapide — Paramètres populaires

##

PaperSize , PaperOrientation , Margins , CssMediaType , RenderDelay

##

`HtmlHeader`, `HtmlFooter`, placeholders dynamiques de Razor, jetons de numéro de page

##

`Watermark`, `HtmlStamp`, opacité, alignement

##

`SecurityOptions`, `SignAndStamp`, mots de passe propriétaire/utilisateur, scellement de certificats

Prochaines tâches : fusionner plusieurs PDFs, extraire du texte et des images, et déployer sur Docker ou sans serveur. Continuez vers la section de déploiement pour garantir la parité multiplateforme.


Comment puis-je déployer le code de génération de PDF sur Docker sous Linux et Windows ?

IronPdf est livré sous forme d'un package NuGet autonome, donc la conteneurisation d'une application ASP.NET Core (ou console) est simple à la fois sur Windows et Linux. La clé est de copier les binaires publiés dans une image runtime mince et, sous Linux, ajouter les deux bibliothèques natives requises par IronPDF (libnss3 et libatk1.0-0).

Dockerfile multi-étapes (Ubuntu 22.04)

Veuillez noterPourquoi multi-étape ? L'image SDK (étape 1) compile le projet ; l'image d'exécution finale (étape 2) reste légère—< 120 Mo—car les outils de build sont supprimés.

####### ---------- stage 1 ----------
FROM mcr.microsoft.com/dotnet/sdk:8.0 AS build
WORKDIR /src
COPY ["MyPdfApp.csproj", "."]
RUN dotnet restore

COPY . .
RUN dotnet publish -c Release -o /app/publish

####### ---------- stage 2 ----------
FROM mcr.microsoft.com/dotnet/aspnet:8.0-jammy
######## Install two native libs required by Chromium
RUN apt-get update && \
    apt-get install -y --no-install-recommends libnss3 libatk1.0-0 && \
    rm -rf /var/lib/apt/lists/*

WORKDIR /app
COPY --from=build /app/publish .
ENTRYPOINT ["dotnet", "MyPdfApp.dll"]

Veuillez noterConteneurs Windows ? Remplacez la deuxième étape par mcr.microsoft.com/dotnet/aspnet:8.0-windowsservercore-ltsc2022—aucun paquet supplémentaire requis car les DLLs de Chromium sont intégrées.

Script de validation de bout en bout

docker build -t pdf-demo .
docker run --rm -p 8080:80 pdf-demo
######### ↳ Navigate to http://localhost:8080/api/pdf?url=https://example.com
docker build -t pdf-demo .
docker run --rm -p 8080:80 pdf-demo
######### ↳ Navigate to http://localhost:8080/api/pdf?url=https://example.com
SHELL
  • L'action API appelle en interne ChromePdfRenderer.RenderUrlAsPdf tout comme dans Section2.
  • Comment faire – Exécuter IronPDF sur Azure App Service Linux
  • L'empreinte mémoire reste inférieure à 200 Mo même lors de grands rendus.

ConseilsConseil de dépannage : Si les journaux du conteneur montrent une erreur "libnss3.so introuvable", vérifiez que les deux libnss3 et libatk1.0-0 sont présents. IronPDF traite chaque PDF — qu'il soit généré par IronPDF, Adobe® Acrobat ou des outils tiers — comme un objet PdfDocument de premier ordre qui peut être ouvert, édité, sécurisé et ré-enregistré sans perte de qualité.

Ressources internes


Comment puis-je ouvrir, fusionner, ajouter un filigrane et extraire du contenu de PDF existants en .NET Core ?

IronPDF traite chaque PDF — qu'il soit généré par IronPDF, Adobe® Acrobat, ou des outils tiers — comme un objet PdfDocument de première classe pouvant être ouvert, édité, sécurisé, et re-sauvegardé sans perte de qualité. La même surface API fonctionne aujourd'hui sur .NET 8 LTS et se compile sans changement sur .NET 9 preview et la prochaine version .NET 10.

Échantillon unifié — ouvrir → fusionner → ajouter un filigrane → extraire

:path=/static-assets/pdf/content-code-examples/tutorials/dotnet-core-pdf-generating-10.cs
[HttpPost]
public ActionResult TicketView(TicketModel model)
{
    IronPdf.Installation.TempFolderPath = $@"{Directory.GetParent}/irontemp/";
    IronPdf.Installation.LinuxAndDockerDependenciesAutoConfig = true;
    var html = this.RenderViewAsync("_TicketPdf", model);
    var renderer = new IronPdf.ChromePdfRenderer();
    using var pdf = renderer.RenderHtmlAsPdf(html.Result, @"wwwroot/css");
    return File(pdf.Stream.ToArray(), "application/pdf");
}
<HttpPost>
Public Function TicketView(ByVal model As TicketModel) As ActionResult
	IronPdf.Installation.TempFolderPath = $"{AddressOf Directory.GetParent}/irontemp/"
	IronPdf.Installation.LinuxAndDockerDependenciesAutoConfig = True
	Dim html = Me.RenderViewAsync("_TicketPdf", model)
	Dim renderer = New IronPdf.ChromePdfRenderer()
	Dim pdf = renderer.RenderHtmlAsPdf(html.Result, "wwwroot/css")
	Return File(pdf.Stream.ToArray(), "application/pdf")
End Function
$vbLabelText   $csharpLabel

Pourquoi cela compte

  • Ouvrir & fusionnerPdfDocument.FromFile charge n'importe quel PDF conforme aux normes, y compris les fichiers chiffrés, tandis que PdfDocument.Merge concatène un nombre arbitraire de documents en un seul appel.
  • FiligraneApplyStamp (alias HtmlStamp) intègre des superpositions HTML/CSS entièrement stylisées — logo, code QR, ou texte diagonal — sur les pages sélectionnées sans rasterisation.
  • Extraction de contenuExtractAllText et ExtractAllImages retirent le texte brut UTF-8 ou les flux d'images binaires pour l'archivage en aval ou les pipelines IA.
  • Prêt pour les signatures numériques – la même instance PdfDocument peut être scellée avec SignAndStamp, produisant des hachages conformes à la RFC 3161 alignés avec les exigences de signature numérique ISO 32000-2.
  • Conformité aux normes ouvertes – IronPDF préserve la structure PDF originale (polices, calques, métadonnées XMP) afin que la sortie reste compatible avec Adobe® Reader et les autres visionneuses ISO 32000-1.
  • Préparation pour l'avenir – L'API évite les assemblies interop et les appels GDI Win32, de sorte que le code s'exécute inchangé sur Windows, Linux, Docker, et les futures versions serverless .NET 10.

Besoin de diviser, faire pivoter ou supprimer des pages ? Consultez le tutoriel de modification au niveau des pages pour des opérations granulaires.


Comment les PDF peuvent-ils être cryptés et signés numériquement dans .NET Core ?

IronPDF sécurise un document en deux étapes : Cryptage basé sur AES (mots de passe utilisateur/propriétaire + permissions granulaires) et signatures numériques X.509 qui scellent le fichier avec un hachage cryptographique. Les deux APIs vivent sur le même objet PdfDocument, donc le workflow est identique sur .NET 8 LTS aujourd'hui et se compile inchangé sur la préversion .NET 9 et la future version .NET 10.

Exemple — appliquer AES 256 bits, verrouiller les droits d'impression et ajouter une signature visible

:path=/static-assets/pdf/content-code-examples/tutorials/dotnet-core-pdf-generating-11.cs
using System.IO;
using System.Threading.Tasks;

public static class ControllerExtensions
{
    public static async Task<string> RenderViewAsync<TModel>(this Controller controller, string viewName, TModel model, bool partial = false)
    {
        if (string.IsNullOrEmpty(viewName))
        {
            viewName = controller.ControllerContext.ActionDescriptor.ActionName;
        }
        controller.ViewData.Model = model;
        using (var writer = new StringWriter())
        {
            IViewEngine viewEngine = controller.HttpContext.RequestServices.GetService(typeof(ICompositeViewEngine)) as ICompositeViewEngine;
            ViewEngineResult viewResult = viewEngine.FindView(controller.ControllerContext, viewName, !partial);
            if (viewResult.Success == false)
            {
                return $"A view with the name {viewName} could not be found";
            }
            ViewContext viewContext = new ViewContext(controller.ControllerContext, viewResult.View, controller.ViewData, controller.TempData, writer, new HtmlHelperOptions());
            await viewResult.View.RenderAsync(viewContext);
            return writer.GetStringBuilder().ToString();
        }
    }
}
Imports System.IO
Imports System.Threading.Tasks

Public Module ControllerExtensions
	<System.Runtime.CompilerServices.Extension> _
	Public Async Function RenderViewAsync(Of TModel)(ByVal controller As Controller, ByVal viewName As String, ByVal model As TModel, Optional ByVal As Boolean = False) As Task(Of String)
		If String.IsNullOrEmpty(viewName) Then
			viewName = controller.ControllerContext.ActionDescriptor.ActionName
		End If
		controller.ViewData.Model = model
		Using writer = New StringWriter()
			Dim viewEngine As IViewEngine = TryCast(controller.HttpContext.RequestServices.GetService(GetType(ICompositeViewEngine)), ICompositeViewEngine)
			Dim viewResult As ViewEngineResult = viewEngine.FindView(controller.ControllerContext, viewName, Not partial)
			If viewResult.Success = False Then
				Return $"A view with the name {viewName} could not be found"
			End If
			Dim viewContext As New ViewContext(controller.ControllerContext, viewResult.View, controller.ViewData, controller.TempData, writer, New HtmlHelperOptions())
			Await viewResult.View.RenderAsync(viewContext)
			Return writer.GetStringBuilder().ToString()
		End Using
	End Function
End Module
$vbLabelText   $csharpLabel
  • API unique -- le chiffrement et la signature modifient la même instance PdfDocument, évitant plusieurs passages de fichier et préservant les polices internes, les couches et les métadonnées.

  • Chiffrement AES-256 — IronPDF enveloppe la charge utile avec des clés AES approuvées par le NIST, bloquant l'ouverture, l'impression ou le copier-coller non autorisés.
  • Granularité des permissions — les propriétés telles que AllowUserPrinting et AllowUserFormData basculent les droits par action ; un mot de passe propriétaire est requis pour que toute restriction prenne effet.
  • Signatures numériquesSignAndStamp intègre un horodatage RFC 3161 et une chaîne de certificats, créant des hachages montrant toute altération reconnus par Adobe® Acrobat et d'autres visionneuses ISO 32000-2.
  • API tout-en-un — le chiffrement et la signature modifient le même PdfDocument instance, évitant de multiples passes de fichiers et préservant les polices internes, les couches, et les métadonnées.

ConseilsConseil de dépannage : si Adobe Reader signale "signature invalide", assurez-vous que le PFX contient un certificat racine de confiance et que les chaînes location sont nettes en ASCII.

Paramètres de sécurité principaux

##

`PdfSecuritySettings` → `OwnerPassword` , `UserPassword` , `EncryptionAlgorithm` , `AllowUserPrinting`

##

`PdfDocument.SignAndStamp` - Chemin PFX, autorité, emplacement, raison, horodatage

Ressources internes pour des plongées plus profondes


Comment optimiser et mettre à l'échelle les performances HTML vers PDF dans .NET Core ?

Le moteur Chromium d'IronPDF rend déjà la plupart des pages en moins de 1 s sur du matériel moderne, mais le débit peut être multiplié par le traitement par lots, l'activation du multithreading, et la réduction des charges de Headless Chrome. Les conseils ci-dessous s'appliquent également à toutes les versions .NET.

1. Rendus par lots sur un pool de threads en arrière-plan

:path=/static-assets/pdf/content-code-examples/tutorials/dotnet-core-pdf-generating-12.cs
IronPdf.License.LicenseKey = "YourLicenseKey";
ChromePdfRenderer renderer = new ChromePdfRenderer();

// Set rendering options
renderer.RenderingOptions.PaperSize = IronPdf.Rendering.PdfPaperSize.A4;
renderer.RenderingOptions.PaperOrientation = IronPdf.Rendering.PdfPaperOrientation.Portrait;

renderer.RenderHtmlFileAsPdf(@"testFile.html").SaveAs("GeneratedFile.pdf");
Imports IronPdf

License.LicenseKey = "YourLicenseKey"
Dim renderer As New ChromePdfRenderer()

' Set rendering options
renderer.RenderingOptions.PaperSize = Rendering.PdfPaperSize.A4
renderer.RenderingOptions.PaperOrientation = Rendering.PdfPaperOrientation.Portrait

renderer.RenderHtmlFileAsPdf("testFile.html").SaveAs("GeneratedFile.pdf")
$vbLabelText   $csharpLabel

2. Réduire le coût de démarrage de Headless Chrome

IronPDF distribue sa propre version Chromium, mais chaque rendu entraîne un petit surcoût initial. La mise en commun des ressources est utile, et les conteneurs Linux doivent inclure deux bibliothèques natives :

RUN apt-get update && \
    apt-get install -y --no-install-recommends libnss3 libatk1.0-0

L'absence de l'une ou l'autre bibliothèque se manifeste comme une erreur libnss3.so not found dans les journaux Docker.

Les drapeaux Chrome recommandés (automatiquement appliqués par IronPDF) incluent --disable-gpu et --no-sandbox pour réduire la mémoire et les problèmes d'utilisateur root dans les conteneurs.

3. Attendez le JavaScript tardif avec RenderDelay ou WaitFor

Les pages qui animent des compteurs ou récupèrent des données après DOMContentLoaded peuvent nécessiter un court délai :

renderer.RenderingOptions.RenderDelay = 200;        // ms
// OR: renderer.RenderingOptions.JavaScript = "WaitFor('window.doneLoading')";
renderer.RenderingOptions.RenderDelay = 200;        // ms
// OR: renderer.RenderingOptions.JavaScript = "WaitFor('window.doneLoading')";
renderer.RenderingOptions.RenderDelay = 200 ' ms
' OR: renderer.RenderingOptions.JavaScript = "WaitFor('window.doneLoading')";
$vbLabelText   $csharpLabel

Voir le tutoriel WaitFor pour des promesses personnalisées et le sondage de DOM.

4. Activez la journalisation de débogage pour une demande

:path=/static-assets/pdf/content-code-examples/tutorials/dotnet-core-pdf-generating-15.cs
IronPdf.License.LicenseKey = "YourLicenseKey";
PdfDocument pdf = PdfDocument.FromFile("1.pdf");
PdfDocument pdf2 = PdfDocument.FromFile("2.pdf");
pdf.AppendPdf(pdf2);
pdf.SaveAs("appendedFile.pdf");
IronPdf.License.LicenseKey = "YourLicenseKey"
Dim pdf As PdfDocument = PdfDocument.FromFile("1.pdf")
Dim pdf2 As PdfDocument = PdfDocument.FromFile("2.pdf")
pdf.AppendPdf(pdf2)
pdf.SaveAs("appendedFile.pdf")
$vbLabelText   $csharpLabel

Les traces Live DevTools exposent les polices manquantes, les images en 404 et les événements de timing sans recompilation du code.

5. Réutilisez les PDF modèles au lieu de les re-rendre

Pour les séries de factures, créez un modèle PDF avec des espaces réservés comme [[name]] et effectuez un remplacement de texte au lieu de reconstruire du HTML complexe. C'est 10× plus rapide et léger en mémoire.

Liste de vérification d'ajustement rapide

##

`Parallel.ForEach`, `async/await`, réutilisation d'un seul `ChromePdfRenderer`

##

Utilisez `aspnet:8.0-jammy` ; installez `libnss3` + `libatk1.0-0` ; flags `--no-sandbox`, `--disable-gpu`

##

`RenderDelay` , `WaitFor()` , journalisation de la chronologie DevTools pour les hydratations SPA lentes

Lectures complémentaires


Où puis-je télécharger un essai gratuit, choisir une licence et trouver un support expert ?

Une clé d'essai de 30 jours est émise instantanément à partir du formulaire Démarrer un essai gratuit et débloque chaque fonctionnalité, y compris HTML-à-PDF, signatures numériques et cryptage, sans filigrane.

Après avoir évalué la bibliothèque, choisissez une licence développeur, de déploiement ou entreprise perpétuelle ; chaque plan inclut des mises à jour mineures gratuites, des droits d'utilisation en dev/staging/production, et une garantie de remboursement de 30 jours. Appliquer la clé est une seule ligne de code (IronPdf.License.LicenseKey = "YOUR-KEY";) et peut être automatisée dans les pipelines CI/CD.

La documentation complète — guides de démarrage rapide, référence API, et tutoriels vidéo — est disponible au portail des docs et est mise à jour pour chaque version de .NET.

Les questions d'ingénierie reçoivent des réponses sous un jour ouvrable via chat en direct, e-mail, ou téléphone avec l'équipe de support basée à Chicago.

Les questions fréquentes sur l'optimisation des performances et le déploiement sont agrégées dans le Centre d'assistance à la performance.

Liens rapides

Ressource URL Pourquoi cela est important
Obtenez une clé d'essai de 30 jours https://ironpdf.com/demos/ Débloque chaque fonctionnalité sans filigranes
Licences & tarification https://ironpdf.com/licensing/ Plans perpétuels ou par abonnement; Iron Suite regroupe 10 bibliothèques
Référence API https://ironpdf.com/object-reference/api/ Documentation complète des classes, par exemple ChromePdfRenderer
Portail des docs https://ironpdf.com/docs/ Guides, tutoriels, projets d'exemple
Assistance à la performance https://ironpdf.com/troubleshooting/ironpdf-performance-assistance/ Conseils d'optimisation et de mise à l'échelle
Contacter le support https://ironsoftware.com/contact-us/ Chat en direct, courrier électronique, assistance téléphonique

Prochaines étapes

  1. Clonez le repo d'exemple qui démontre chaque fonctionnalité majeure, de la restitution du MVC au cryptage AES-256.
  2. Brancher la clé d'essai dans une solution existante et exécutez les tests unitaires pour valider la compatibilité multiplateforme.
  3. Réservez une démo en direct avec l'équipe d'ingénierie pour des recommandations spécifiques au projet.

Avec ces ressources en main, toute équipe .NET peut expédier des PDF parfaits en production — sur site, dans Docker ou sans serveur — en une seule itération.

Questions Fréquemment Posées

Comment puis-je convertir du HTML en PDF dans .NET Core ?

Vous pouvez convertir du HTML en PDF dans .NET Core en utilisant la bibliothèque IronPDF. Tout d'abord, installez le package NuGet IronPDF, puis créez une instance de ChromePdfRenderer. Utilisez la méthode RenderHtmlAsPdf pour convertir les chaînes HTML en PDFs.

Comment convertir une URL de site web en document PDF ?

Pour convertir une URL de site web en document PDF, installez le package NuGet IronPDF, créez une instance de ChromePdfRenderer, et utilisez la méthode RenderUrlAsPdf pour rendre l'URL en PDF. Le résultat peut être enregistré en utilisant la méthode SaveAs.

Quelle est la meilleure façon de convertir des vues Razor en PDFs ?

La meilleure façon de convertir des vues Razor en PDFs est d'utiliser IronPDF. D'abord, rendez la vue Razor en une chaîne HTML, puis passez cette chaîne à la méthode RenderHtmlAsPdf pour créer un document PDF.

Comment puis-je améliorer la sécurité de mes documents PDF ?

Améliorez la sécurité des PDFs avec IronPDF en appliquant le chiffrement AES-256, en définissant des mots de passe et en contrôlant les autorisations des utilisateurs. Configurez ces paramètres via la propriété SecuritySettings pour restreindre des actions telles que l'impression et la modification.

Quelles options sont disponibles pour personnaliser le rendu des PDF ?

IronPDF fournit diverses options de rendu via la classe ChromePdfRenderOptions, y compris la définition de la taille du papier, de l'orientation, des marges, et l'application des types de médias CSS. Vous pouvez également ajouter des en-têtes, pieds de page, et filigranes pour une sortie de document personnalisée.

Comment déployer une application de génération de PDF dans un conteneur Docker ?

Pour déployer une application de génération de PDF dans un conteneur Docker, configurez les dépendances Linux dans votre Dockerfile et définissez les permissions de l'utilisateur. Utilisez IronPdf.Installation.LinuxAndDockerDependenciesAutoConfig pour la gestion automatique des dépendances.

Comment puis-je ajouter des filigranes à un PDF en utilisant C# ?

Vous pouvez ajouter des filigranes aux PDFs avec IronPDF en utilisant la propriété Watermark avec des objets HtmlStamp. Pour des options avancées, la classe HtmlStamper permet des positionnements et effets de transparence personnalisés.

Puis-je ajouter des signatures numériques aux documents PDF ?

Oui, vous pouvez ajouter des signatures numériques aux PDFs en utilisant la classe PdfSignature d'IronPDF. Utilisez la méthode Sign sur un PdfDocument et fournissez un fichier de certificat pour assurer l'intégrité et l'authenticité du document.

Comment puis-je optimiser les performances de génération de PDF dans .NET Core ?

Optimisez les performances de génération de PDF en réutilisant une instance de ChromePdfRenderer thread-safe, en activant le multi-threading et en éliminant les drapeaux de démarrage headless-Chrome inutiles. Ces pratiques contribuent à améliorer l'efficacité de votre application.

L'exemple HTML vers PDF en .NET Core de ce tutoriel fonctionne-t-il également avec .NET 10 ?

Oui. IronPDF est entièrement compatible avec .NET 10, vous pouvez donc utiliser l'exemple ChromePdfRenderer HTML-vers-PDF de ce tutoriel dans des projets .NET 10 sans modifier le code principal. La principale différence est que vous ciblez .NET 10 lors de la création du projet, puis installez le dernier package IronPDF depuis NuGet pour générer des PDFs parfaits à partir de HTML, de vues Razor ou d'URLs.

Jacob Mellor, Directeur technique @ Team Iron
Directeur technique

Jacob Mellor est directeur de la technologie chez Iron Software et un ingénieur visionnaire pionnier de la technologie C# PDF. En tant que développeur à l'origine de la base de code centrale d'Iron Software, il a façonné l'architecture des produits de l'entreprise depuis sa création, la ...

Lire la suite
Revu par
Jeff Fritz
Jeffrey T. Fritz
Responsable principal du programme - Équipe de la communauté .NET
Jeff est également responsable principal du programme pour les équipes .NET et Visual Studio. Il est le producteur exécutif de la série de conférences virtuelles .NET Conf et anime 'Fritz and Friends', une diffusion en direct pour développeurs qui est diffusée deux fois par semaine où il parle de technologie et écrit du code avec les téléspectateurs. Jeff écrit des ateliers, des présentations et prévoit du contenu pour les plus grands événements de développement Microsoft, y compris Microsoft Build, Microsoft Ignite, .NET Conf et le sommet Microsoft MVP
Prêt à commencer ?
Nuget Téléchargements 20,296,129 | Version : 2026.7 vient de sortir
Still Scrolling Icon

Vous faites encore défiler ?

Vous voulez une preuve rapidement ? PM > Install-Package IronPdf
exécuter un échantillon Regardez votre code HTML se transformer en PDF.