Convertir une page HTML en document PDF en C# est une tâche courante, souvent utilisée pour créer des factures, des rapports, des contrats et d'autres documents commerciaux à partir de modèles HTML. Cette conversion est également essentielle pour créer des documents statiques, portables et prêts à imprimer à partir de contenu web dynamique.
Le processus de conversion d'une page HTML en document PDF comprend les étapes suivantes:
- Ouvrir le fichier HTML source et analyser le code HTML.
- Récupérer les fichiers CSS et JS utilisés dans la page HTML.
- Analyser les styles CSS dans les fichiers CSS.
- Analyser le code JavaScript dans les fichiers JS.
- Exécuter le code JavaScript et obtenir le code de la page HTML résultante.
- Créer un nouveau document PDF.
- Convertir les graphiques raster et vectoriels de la page HTML (y compris les styles CSS et la transparence) en graphiques pour la page PDF et ajouter ces graphiques au document PDF résultant.
- Convertir le texte de la page HTML (y compris les styles CSS) en texte pour la page PDF et ajouter ce texte au document PDF résultant.
- Enregistrez le document PDF créé dans un fichier.
La spécification de la norme HTML5 (
https://html.spec.whatwg.org/print.pdf) contient 1553 pages.
Spécification de la norme CSS2 (
https://www.w3.org/TR/CSS22/css2.pdf) contient 426 pages.
La spécification de la norme JavaScript (
https://ecma-international.org/wp-content/uploads/ECMA-262_16th_edition_june_2025.pdf) contient 835 pages.
Les étapes de conversion HTML vers PDF et les informations relatives aux spécifications HTML5, CSS2 et JavaScript sont fournies ci-dessus afin de bien montrer que, de manière générale, la conversion HTML vers PDF est une tâche très complexe si elle est réalisée manuellement.
Parallèlement, cette tâche complexe est déjà implémentée dans les navigateurs web modernes, qui affichent parfaitement les pages HTML et peuvent les enregistrer dans un fichier PDF. Dès lors, une question légitime se pose: est-il possible d’utiliser un navigateur web dans une application C# pour convertir une page HTML en document PDF?
Dans cet article, nous verrons comment convertir gratuitement et avec une qualité optimale une page HTML, quelle que soit sa complexité, dans une application C# grâce à Chromium.
Chromium est un projet de navigateur web open source qui sert principalement de base à la plupart des navigateurs web modernes, notamment Google Chrome, Microsoft Edge, Opera, etc. Il est conçu pour offrir rapidité, sécurité et stabilité, et bénéficie des contributions importantes de développeurs de Google, Microsoft et d'autres entreprises.
Conversion d'une page HTML en document PDF en C# à l'aide de la ligne de commande Chrome
La méthode la plus simple pour convertir une page HTML en document PDF consiste à exécuter la commande Chrome suivante depuis la ligne de commande:
"C:\Program Files\Google\Chrome\Application\chrome.exe" --headless --disable-gpu —run-all-compositor-stages-before-draw --no-margins --printBackground=true --no-pdf-header-footer --print-to-pdf="D:\result.pdf" "https://www.vintasoft.com/index.html"
Voici une brève description des paramètres utilisés dans la ligne de commande Chrome:
- --headless: indique que Chrome doit s'exécuter sans interface graphique.
- --disable-gpu: indique que le GPU doit être désactivé lors du rendu d'une page HTML.Ce paramètre est requis pour la compatibilité avec les anciennes versions de Chrome.
- --run-all-compositor-stages-before-draw – indique que toutes les étapes de rendu et de composition doivent être terminées avant le rendu de la page HTML.
- --no-margins – indique que la page HTML doit être rendue sans marges.
- --printBackground – indique que la page HTML doit contenir des images d'arrière-plan.
- --no-pdf-header-footer – indique que le document PDF généré ne doit pas contenir d'en-tête ni de pied de page.
- --print-to-pdf – indique le chemin d'accès au fichier PDF enregistré. Ce chemin doit être absolu.
La commande ci-dessus peut être exécutée depuis l'invite de commandes Windows/Linux/macOS ou depuis du code C#.
Voici un exemple de code C# montrant comment convertir une page HTML en document PDF dans une application console .NET utilisant Chrome:
using System.Diagnostics;
namespace ConsoleApp1
{
internal class Program
{
static void Main(string[] args)
{
string chromePath = @"C:\Program Files\Google\Chrome\Application\chrome.exe";
string sourceUrl = "https://www.vintasoft.com/index.html";
string resultPdfFilePath = @"D:\result.pdf";
string chromeArgsTemplate =
"--headless --no-pdf-header-footer --no-margins --disable-gpu --run-all-compositor-stages-before-draw --printBackground=true --print-to-pdf=\"{0}\" {1}";
ProcessStartInfo startInfo = new ProcessStartInfo
{
FileName = chromePath,
Arguments = string.Format(chromeArgsTemplate, resultPdfFilePath, sourceUrl),
UseShellExecute = false,
CreateNoWindow = false
};
using (Process process = Process.Start(startInfo))
{
process.WaitForExit();
}
Console.WriteLine("HTML page is converted to the PDF document.");
}
}
}
Cette méthode de conversion peut être utilisée si le navigateur web Chrome est installé sur votre ordinateur et que vous connaissez le chemin d'accès au fichier "chrome.exe".
L'application .NET résultante est de petite taille car elle ne contient aucune bibliothèque supplémentaire et repose entièrement sur le navigateur web Chrome.
Conversion d'une page HTML en document PDF en C# à l'aide du package NuGet CefSharp.OffScreen
Le package NuGet CefSharp.OffScreen contient une version compilée de la bibliothèque CefSharp et permet aux développeurs d'exécuter une instance complète du navigateur web Chromium en arrière-plan, sans interface utilisateur visible.
Pour utiliser la bibliothèque CefSharp.OffScreen dans une application .NET Framework, ajoutez simplement une référence au package NuGet CefSharp.OffScreen à l'application .NET Framework.
Pour utiliser la bibliothèque CefSharp.OffScreen dans une application .NET Core, ajoutez simplement une référence au package NuGet CefSharp.OffScreen.NETCore à l'application .NET Core.
Voici le code C# d'une application console .NET qui convertit une page HTML en document PDF à l'aide de la bibliothèque CefSharp.OffScreen:
using CefSharp;
using CefSharp.OffScreen;
using System;
using System.Threading.Tasks;
namespace ConsoleApp1
{
internal class Program
{
static void Main(string[] args)
{
string sourceUrl = "https://www.vintasoft.com/index.html";
string resultPdfFilePath = @"D:\result.pdf";
Task task = ConvertHtmlToPdfUsingCefSharpOffScreen(sourceUrl, resultPdfFilePath);
task.Wait();
Console.WriteLine("HTML page is converted to the PDF document.");
Console.ReadKey();
}
static async Task ConvertHtmlToPdfUsingCefSharpOffScreen(string url, string pdfPath)
{
// if CEF is not initialized
if (Cef.IsInitialized == null || Cef.IsInitialized == false)
{
// create CEF settings
CefSettings settings = new CefSettings();
// initialize CEF
Cef.Initialize(settings);
}
// create Chromium web browser
using (ChromiumWebBrowser browser = new ChromiumWebBrowser(url))
{
// wait while page will be loaded
await browser.WaitForInitialLoadAsync();
// create PDF print settings
PdfPrintSettings printSettings = new PdfPrintSettings
{
MarginType = CefPdfPrintMarginType.None,
PrintBackground = true,
Landscape = false,
Scale = 1.0,
PreferCssPageSize = true,
DisplayHeaderFooter = false
};
// print web page to a PDF file
await browser.PrintToPdfAsync(pdfPath, printSettings);
}
}
}
}
Cette méthode de conversion est indépendante du navigateur web Chrome et, dans ce cas, il n'est pas nécessaire de compiler CefSharp vous-même, car les créateurs du package NuGet CefSharp.OffScreen l'ont déjà fait.
L'application .NET résultante est entièrement autonome et volumineuse (un peu plus de 300 Mo) car elle contient des fichiers de bibliothèque CefSharp.
Conversion d'une page HTML en document PDF en C# à l'aide de la bibliothèque CefSharp.
CefSharp est un projet open source qui fournit un wrapper .NET pour le framework Chromium Embedded (CEF). CefSharp permet aux développeurs d'intégrer un navigateur web Chromium entièrement fonctionnel directement dans des applications de bureau C# ou VB.NET.
Le dépôt CefSharp est situé sur GitHub:
https://github.com/cefsharp/cefsharp
Le dépôt contient 15 projets, dont un exemple d'application console, un exemple d'application WinForms et un exemple d'application WPF.
Essayez d'exécuter l'exemple d'application WPF (projet "CefSharp.Wpf.Example").En exécutant `netcore`, vous verrez une application WPF avec une navigation similaire à celle de Chrome. Cette application WPF inclut une navigation par liens, des styles CSS et du code JavaScript; son utilisation est identique à celle de Chrome. Dans le menu principal de l'application, vous pouvez sélectionner "Tests => Imprimer l'onglet actuel au format PDF" et enregistrer la page HTML rendue au format PDF.
Cette méthode de conversion est indépendante du navigateur web Chrome, mais vous devrez compiler manuellement CefSharp à partir du code source, ce qui est fait automatiquement lors de la compilation du projet CefSharp dans Visual Studio.
L'application .NET résultante (le projet "CefSharp.Wpf.Example.netcore") est totalement autonome et volumineuse (un peu plus de 400 Mo) car elle contient les fichiers de la bibliothèque CefSharp.
Traitement des documents PDF avec le VintaSoft Imaging .NET SDK
VintaSoft a choisi de ne pas inclure cette fonctionnalité pour la conversion de pages HTML en documents PDF dans ses SDK, car cette tâche est très complexe et déjà implémentée dans les navigateurs web modernes.
Parallèlement, les
VintaSoft Imaging .NET SDK et
VintaSoft PDF .NET Plug-in vous permettent de créer, visualiser, vérifier, imprimer, annoter, modifier, protéger, signer, optimiser, compresser, convertir et enregistrer des documents PDF et PDF/A sous Windows, Linux et macOS.
Ainsi, le SDK VintaSoft peut être utilisé pour traiter le document PDF créé, à savoir:
Des informations détaillées sur les capacités de traitement des documents PDF à l'aide de
VintaSoft Imaging .NET SDK +
VintaSoft PDF .NET Plug-in sont disponibles ici :
https://www.vintasoft.com/fr/vspdf-dotnet-index.html