Die Konvertierung einer HTML-Seite in ein PDF-Dokument in C# ist eine häufige Aufgabe, die oft verwendet wird, um Rechnungen, Berichte, Verträge und andere Geschäftsdokumente aus HTML-Vorlagen zu erstellen. Die Konvertierung einer HTML-Seite in ein PDF-Dokument in C# ist auch unerlässlich, um statische, portable und druckfertige Dokumente aus dynamischen Webinhalten zu erstellen.
Der Prozess der Konvertierung einer HTML-Seite in ein PDF-Dokument umfasst die folgenden Schritte:
- Öffnen Sie die HTML-Quelldatei und analysieren Sie den HTML-Code.
- Abrufen der auf der HTML-Seite verwendeten CSS- und JS-Dateien.
- Analysieren Sie die CSS-Stile in den CSS-Dateien.
- Analysieren Sie den JavaScript-Code in den JS-Dateien.
- Ausführen des JavaScript-Codes und Abrufen des Codes der resultierenden HTML-Seite.
- Erstellen Sie ein neues PDF-Dokument.
- Konvertieren Sie Raster- und Vektorgrafiken der HTML-Seite (einschließlich CSS-Stile und Transparenz) in Grafiken der PDF-Seite und fügen Sie die Grafiken dem resultierenden PDF-Dokument hinzu.
- Konvertieren Sie Text der HTML-Seite (einschließlich CSS-Stile) in Text der PDF-Seite und fügen Sie den Text dem resultierenden PDF-Dokument hinzu.
- Speichern Sie das erstellte PDF-Dokument in einer Datei.
Die Spezifikation des HTML5-Standards (
https://html.spec.whatwg.org/print.pdf) umfasst 1553 Seiten.
Die Spezifikation des CSS2-Standards (
https://www.w3.org/TR/CSS22/css2.pdf) umfasst 426 Seiten.
Die Spezifikation des JavaScript-Standards (
https://ecma-international.org/wp-content/uploads/ECMA-262_16th_edition_june_2025.pdf) umfasst 835 Seiten.
Die Schritte zur Konvertierung von HTML in PDF sowie Informationen zu HTML5-, CSS2- und JavaScript-Spezifikationen wurden bereits oben erläutert, um zu verdeutlichen, dass die Konvertierung von HTML in PDF im Allgemeinen eine sehr komplexe Aufgabe ist, wenn sie von Grund auf neu implementiert wird.
Gleichzeitig ist diese komplexe Aufgabe in modernen Webbrowsern bereits implementiert, die HTML-Seiten perfekt rendern und gerenderte HTML-Seiten als PDF-Datei speichern können. Daher stellt sich die berechtigte Frage: Ist es möglich, einen Webbrowser in einer C#-Anwendung zu verwenden, um eine HTML-Seite in ein PDF-Dokument zu konvertieren?
In diesem Artikel zeigen wir Ihnen, wie Sie mit Chromium eine HTML-Seite beliebiger Komplexität in einer C#-Anwendung absolut kostenlos und in maximaler Qualität in ein PDF-Dokument konvertieren können.
Chromium ist ein Open-Source-Webbrowser-Projekt, das hauptsächlich als Grundlage für die meisten modernen Webbrowser dient, darunter Google Chrome, Microsoft Edge, Opera und andere. Es wurde mit Blick auf Geschwindigkeit, Sicherheit und Stabilität entwickelt und beinhaltet bedeutende Beiträge von Entwicklern bei Google, Microsoft und anderen Unternehmen.
Konvertierung einer HTML-Seite in ein PDF-Dokument in C# mithilfe der Chrome-Befehlszeile
Die einfachste Möglichkeit, eine HTML-Seite in ein PDF-Dokument zu konvertieren, besteht darin, den folgenden Chrome-Befehl in der Befehlszeile auszuführen:
"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"
Hier ist eine kurze Beschreibung der in der Chrome-Befehlszeile verwendeten Parameter:
- --headless – Gibt an, dass Chrome ohne grafische Oberfläche ausgeführt werden soll.
- --disable-gpu – Gibt an, dass die GPU beim Rendern einer HTML-Seite deaktiviert werden soll. Dieser Parameter ist für die Kompatibilität mit älteren Chrome-Versionen erforderlich.
- --run-all-compositor-stages-before-draw – Gibt an, dass alle Rendering- und Kompositionsphasen abgeschlossen sein sollen, bevor die HTML-Seite gerendert wird.
- --no-margins – Gibt an, dass die HTML-Seite ohne Ränder gerendert werden soll.
- --printBackground – Gibt an, dass die HTML-Seite Hintergrundgrafiken enthalten soll.
- --no-pdf-header-footer – Gibt an, dass das generierte PDF-Dokument keine Kopf- und Fußzeile mit Dokumentinformationen enthalten soll.
- --print-to-pdf – Gibt den Pfad zur gespeicherten PDF-Datei an. Der Pfad muss absolut sein.
Der obige Befehl kann über die Windows-/Linux-/macOS-Befehlszeile oder aus C#-Code ausgeführt werden.
Hier ist C#-Code, der zeigt, wie man eine HTML-Seite in einer .NET-Konsolenanwendung mit Chrome in ein PDF-Dokument konvertiert:
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.");
}
}
}
Diese Konvertierungsmethode kann verwendet werden, wenn der Chrome-Webbrowser auf dem Computer installiert ist und der Pfad zur Datei "chrome.exe" bekannt ist.
Die resultierende .NET-Anwendung ist klein, da sie keine zusätzlichen Bibliotheken enthält und vollständig auf dem Chrome-Webbrowser basiert.
Konvertierung einer HTML-Seite in ein PDF-Dokument in C# mit dem NuGet-Paket CefSharp.OffScreen
Das NuGet-Paket CefSharp.OffScreen enthält eine kompilierte Version der CefSharp-Bibliothek und ermöglicht es Entwicklern, eine vollständige Instanz des Chromium-Webbrowsers im Hintergrund ohne sichtbare Benutzeroberfläche auszuführen.
Wenn Sie die CefSharp.OffScreen-Bibliothek in einer .NET Framework-Anwendung verwenden möchten, fügen Sie einfach einen Verweis auf das NuGet-Paket CefSharp.OffScreen zur .NET Framework-Anwendung hinzu.
Wenn Sie die CefSharp.OffScreen-Bibliothek in einer .NET Core-Anwendung verwenden möchten, fügen Sie einfach einen Verweis auf das NuGet-Paket CefSharp.OffScreen.NETCore zur .NET Core-Anwendung hinzu.
Hier ist der C#-Code für eine .NET-Konsolenanwendung, die eine HTML-Seite mithilfe der CefSharp.OffScreen-Bibliothek in ein PDF-Dokument konvertiert:
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);
}
}
}
}
Diese Konvertierungsmethode ist unabhängig vom Chrome-Webbrowser. In diesem Fall ist es nicht erforderlich, CefSharp selbst zu kompilieren, da die Entwickler des NuGet-Pakets CefSharp.OffScreen dies bereits getan haben.
Die resultierende .NET-Anwendung ist vollständig eigenständig und aufgrund der enthaltenen CefSharp-Bibliotheksdateien recht groß (etwas über 300 MB).
Konvertierung einer HTML-Seite in ein PDF-Dokument in C# mithilfe der CefSharp-Bibliothek
CefSharp ist ein Open-Source-Projekt, das einen .NET-Wrapper für das Chromium Embedded Framework (CEF) bereitstellt. Mit CefSharp können Entwickler einen voll funktionsfähigen Chromium-basierten Webbrowser direkt in C#- oder VB.NET-Desktopanwendungen einbetten.
Das CefSharp-Repository befindet sich auf GitHub:
https://github.com/cefsharp/cefsharp
Das Repository enthält 15 Projekte, darunter eine Beispiel-Konsolenanwendung, eine Beispiel-WinForms-Anwendung und eine Beispiel-WPF-Anwendung.
Testen Sie die WPF-Beispielanwendung (Projekt "CefSharp.Wpf.Example").netcore") und Sie sehen eine WPF-Anwendung mit Seitennavigation ähnlich wie in Chrome. Die WPF-Anwendung umfasst Linknavigation, CSS-Stile und JavaScript-Code - sie fühlt sich genau wie Chrome an. Im Hauptmenü der Anwendung können Sie "Tests => Aktuellen Tab als PDF drucken" auswählen und die gerenderte HTML-Seite als PDF-Datei speichern.
Diese Konvertierungsmethode ist unabhängig vom Chrome-Webbrowser, aber Sie müssen CefSharp manuell aus dem Quellcode kompilieren, was beim Kompilieren des CefSharp-Projekts in Visual Studio automatisch geschieht.
Die resultierende .NET-Anwendung (das Projekt "CefSharp.Wpf.Example.netcore") ist vollständig eigenständig und hat eine große Größe (etwas über 400 MB), da sie CefSharp-Bibliotheksdateien enthält.
Verarbeitung von PDF-Dokumenten mit dem VintaSoft Imaging .NET SDK
VintaSoft hat sich entschieden, keine Funktionalität für Die Konvertierung von HTML-Seiten in PDF-Dokumente erfolgt in den SDKs, da diese Aufgabe sehr komplex ist und bereits in modernen Webbrowsern implementiert wurde.
Gleichzeitig ermöglichen das
VintaSoft Imaging .NET SDK und das
VintaSoft PDF .NET Plug-in das Erstellen, Anzeigen, Überprüfen, Drucken, Kommentieren, Bearbeiten, Schützen, Signieren, Optimieren, Komprimieren, Konvertieren und Speichern von PDF- und PDF/A-Dokumenten unter Windows, Linux und macOS.
Dementsprechend kann das VintaSoft SDK zur Weiterverarbeitung des erstellten PDF-Dokuments verwendet werden, nämlich:
Detaillierte Informationen zu den Möglichkeiten der PDF-Dokumentenverarbeitung mit
VintaSoft Imaging .NET SDK +
VintaSoft PDF .NET Plug-in finden Sie hier:
https://www.vintasoft.com/de/vspdf-dotnet-index.html