Diese Seite kann automatisch übersetzten Text enthalten.

HTML-zu-PDF-Funktionen

Sie können HTML mit der Bibliothek Docotic.Pdf in PDF konvertieren. Sehen Sie sich die auf dieser Seite genannten Ressourcen an, um herauszufinden, wie Sie aus Ihren Daten schöne PDFs erstellen.

HTML-zu-PDF-Konvertierungsprozess

Für die Konvertierung von HTML in PDF benötigen Sie das HTML-zu-PDF-Add-on. Dies ist ein kostenloses Add-on für die Docotic.Pdf-Bibliothek. Das Add-on ist auch in der ZIP-Datei mit Bibliotheksbinärdateien verfügbar.

Docotic.Pdf-Bibliothek 9.5.17615-dev HTML-zu-PDF-Add-on 9.5.17615-dev
Regressionstests 14,813 bestanden NuGet-Downloads insgesamt 4,924,084

API-Referenz

Auf unserer Website stellen wir die API-Referenz für das HTML-zu-PDF-Add-on bereit.

Artikel

Lesen Sie Folgendes, um mehr über die HTML-zu-PDF-Konvertierung in C#- und VB.NET-Code zu erfahren.

Beispielcode

Als HTML-zu-PDF-Konvertierung bezeichnet man die Vielfalt der damit verbundenen Aufgaben. Die folgenden Abschnitte beschreiben diese Aufgaben detaillierter.

HTML-zu-PDF-C#-Konvertierung

Sie müssen mit der Installation des Add-Ons beginnen. Verwenden Sie den Paket-Manager, um das HTML-zu-PDF-Add-On von NuGet zu installieren.

Install-Package BitMiracle.Docotic.Pdf.HtmlToPdf

Das Add-on bietet eine ausschließlich asynchrone API. Wir haben es für die Arbeit mit asynchronen Ereignishandlern und asynchronen Methoden entwickelt. Sie können das Add-on in Windows Forms, WPF, ASP.NET und Konsolenanwendungen verwenden.

C# HTML-zu-PDF-Code sieht folgendermaßen aus:

using var converter = await HtmlConverter.CreateAsync();
var uri = new Uri("https://bitmiracle.com/pdf-library/html-pdf/");
using var pdf = await converter.CreatePdfAsync(uri);
pdf.Save("out.pdf");

Der Code erstellt eine Instanz des HTML-zu-PDF-Konverters. Anschließend verwendet der Code die Instanz, um aus HTML ein PDF zu erstellen. Sie können mit dem PDF-Dokument weiterarbeiten, aber der Beispielcode speichert nur das Dokument.

Wenn Ihre Konsolenanwendung eine ältere Version von C# verwendet und Sie nicht über async Main verfügen, machen Sie sich keine Sorgen. Sie können das Add-On trotzdem in Ihrer App verwenden.

Der folgende Code zeigt, wie eine URL in einer regulären synchronen Methode in ein PDF konvertiert wird:

Task.Run(async () =>
{
    using var converter = await HtmlConverter.CreateAsync();
    var uri = new Uri("https://bitmiracle.com/pdf-library/html-pdf/");
    using var pdf = await converter.CreatePdfAsync(uri);
    pdf.Save("out.pdf");
}).GetAwaiter().GetResult();

VB.NET-Anwendungen verwenden einen ähnlichen Code. Hier ist ein Ausschnitt, der zeigt, wie man HTML in PDF in VB.NET konvertiert.

Task.Run(
    Async Function()
        Using converter = Await HtmlConverter.CreateAsync()
            Dim uri = New Uri("https://bitmiracle.com/pdf-library/html-pdf/")
            Using pdf = Await converter.CreatePdfAsync(uri)
                pdf.Save("out.pdf")
            End Using
        End Using
    End Function
).GetAwaiter().GetResult()

Laden Sie vollständige Testprojekte aus unserem GitHub-Repository herunter:

Konvertieren Sie HTML-Strings in C# in PDF

Eine der häufigsten Aufgaben ist das Generieren von PDF aus HTML in C#- oder VB.NET-Anwendungen. Der Prozess kann mit einer Vorlage beginnen, die die App mit Daten aus einer Datenbank füllt. Es ist nicht ungewöhnlich, dass ein Benutzer einer Website die Vorlage, die Daten oder beides erstellt.

Das automatisch generierte oder hochgeladene HTML kann die Form einer Datei oder eines Strings mit Code annehmen. Das Add-on bietet eine Methode die einen Dateipfad akzeptiert. Verwenden Sie die Methode, um HTML-Dateien in C#-Code in PDF zu konvertieren. Der folgende Code ist für den Fall, dass Sie einen String haben.

using var converter = await HtmlConverter.CreateAsync();

var html = "<body><br><br><br><h1>Hello, World</h1></body>";
using var pdf = await converter.CreatePdfFromStringAsync(html);
pdf.Save("out.pdf");

HTML kann relative Verweise auf Bilder, Skripte und CSS-Dateien enthalten. Um solchen Code richtig zu konvertieren, müssen Sie Konvertierungsoptionen verwenden. So geben Sie mithilfe der Optionen eine Basis-URL an:

using var converter = await HtmlConverter.CreateAsync();

var incompleteHtml = "<img src=\"/images/team.svg\"></img>";
var options = new HtmlConversionOptions();
options.Load.BaseUri = new Uri("https://bitmiracle.com/");
using var pdf = await converter.CreatePdfFromStringAsync(incompleteHtml, options);
pdf.Save("out.pdf");

Unser GitHub-Repository enthält das vollständige Testprojekt.

Ausführen von JavaScript vor der Konvertierung

Die Add-on-API bietet eine Möglichkeit, vor der Konvertierung einen JS-Code auszuführen. Der Code kann den HTML-Inhalt dynamisch generieren oder ändern. Er kann beispielsweise Elemente umschalten oder das dynamische Laden von Inhalten ermöglichen.

Der folgende Code zeigt, wie die Konvertierung von HTML in PDF verzögert wird, bis JavaScript abgeschlossen ist.

using var converter = await HtmlConverter.CreateAsync();

var options = new HtmlConversionOptions();
var js = @"document.body.style.backgroundColor = 'green';";
options.Start.SetStartAfterScriptRun(js);

var url = new Uri("https://google.com");
using var pdf = await converter.CreatePdfAsync(url, options);
pdf.Save("out.pdf");

Der obige Codeausschnitt verwendet einen sehr einfachen Code, um den Ansatz zu veranschaulichen. Ein realistischeres Beispiel finden Sie in der entsprechenden Beispiel-App in unserem GitHub-Repo. Die App zeigt, wie man mit einer Seite umgeht, die ihren Inhalt dynamisch lädt. Der JavaScript-Code in der App scrollt die Seite, bis kein neuer Inhalt mehr vorhanden ist. Danach erfolgt die Konvertierung in PDF.

SSL-Fehler ignorieren

Beim Senden sicherer Anfragen zum Laden von HTML überprüft das Add-on, ob das SSL-Zertifikat, das die Identität einer Website authentifiziert und eine verschlüsselte Verbindung ermöglicht, gültig und vertrauenswürdig ist.

Standardmäßig löst das Add-on eine Ausnahme aus, wenn der HTML-zu-PDF-Konverter dem Zertifikat aus irgendeinem Grund nicht vertraut. Wenn Sie sich des Risikos bewusst sind, das mit der Annahme eines nicht vertrauenswürdigen Zertifikats verbunden ist, können Sie das Add-on anweisen, die Prüfungen zu umgehen.

var engineOptions = new HtmlEngineOptions
{
    IgnoreSslErrors = true
};
using var converter = await HtmlConverter.CreateAsync(engineOptions);

var url = new Uri("https://self-signed.badssl.com/");
using var pdf = await converter.CreatePdfAsync(url);
pdf.Save("out.pdf");

Den vollständigen Code finden Sie im Docotic.Pdf-Beispiel-Repository.

Geben Sie ein Passwort für geschützte Seiten ein

Für den Zugriff auf einige Webseiten ist eine Authentifizierung erforderlich. Wenn Sie auf eine sichere URL zugreifen, die eine HTTP-Authentifizierung erfordert, fordert Sie der Browser zur Eingabe von Benutzername und Kennwort auf.

Mithilfe der Konvertierungsoptionen können Sie die API anweisen, Anmeldeinformationen für Webseiten bereitzustellen, für die eine Anmeldung erforderlich ist.

Dieser C#-Code zeigt, wie passwortgeschütztes HTML in PDF konvertiert wird

using var converter = await HtmlConverter.CreateAsync();
var url = new Uri("http://httpbin.org/basic-auth/foo/bar");

var options = new HtmlConversionOptions();
options.Authentication.SetCredentials("foo", "bar");

using var pdf = await converter.CreatePdfAsync(url, options);
pdf.Save("out.pdf");

Suchen Sie nach dem vollständigen funktionierenden Beispiel im Beispiel-Repository.

Vor der Konvertierung warten

Eine Verzögerung der HTML-zu-PDF-Konvertierung kann sinnvoll sein, wenn die Seite nach dem Laden noch eine Weile aktualisiert wird. Dies ist häufig der Fall, wenn es sich um dynamische Inhalte handelt, die durch JavaScript- oder AJAX-Aufrufe generiert werden.

Der Acid 3-Test ist ein perfektes Beispiel für eine Seite, die von einer Verzögerung vor der Konvertierung profitieren würde. Der Test führt eine Reihe von Prüfungen durch, um die Fähigkeit eines Browsers zu bewerten, komplexe Webseiten korrekt darzustellen. Diese Prüfungen brauchen Zeit. Versuchen Sie, die Wartezeit im folgenden Code zu ändern, um zu sehen, wie sich dies auf die Konvertierungsergebnisse auswirkt.

var options = new HtmlConversionOptions();
options.Start.SetStartAfterDelay(10 * 1000);

using var converter = await HtmlConverter.CreateAsync();
var url = new Uri("http://acid3.acidtests.org/");
using var pdf = await converter.CreatePdfAsync(url, options);
pdf.Save("out.pdf");

Der obige Code zeigt, wie HTML mit Verzögerung in PDF konvertiert wird. Während die zusätzliche Zeit dabei hilft, bessere Ergebnisse zu erzielen, beachten Sie bitte, dass das Hinzufügen von Verzögerungen die Leistung beeinträchtigen kann. Unzureichende Verzögerungen können sich negativ auf die Qualität der Konvertierung auswirken. Ein alternativer Ansatz zur Verwendung einer Verzögerung ist die Verwendung eines Skripts, das ausgeführt wird, bis die Seite fertig ist.

Sie können das vollständige Testprojekt im Docotic.Pdf-Beispielrepository erhalten.

Die HTML-zu-PDF-API kann wiederholbare Fußzeilen-/Kopfzeilenblöcke auf generierten Seiten hinzufügen. Der Konverter erstellt die Blöcke aus den in den Konvertierungsoptionen angegebenen HTML-Vorlagen. Wir empfehlen die Verwendung von Inline-Stilen und Daten-URIs für Bilder innerhalb der Vorlagen.

Der Konverter platziert Kopf- und Fußzeilen innerhalb der Seitenränder. Da die Seitenränder klein sind, ist der Inhalt der Kopf- und Fußzeilen möglicherweise nicht sichtbar. Wir empfehlen, die oberen und unteren Ränder explizit anzugeben. Die Größe sollte jeweils der Größe der Kopf- und Fußzeile entsprechen.

Erfahren Sie, wie Sie HTML in PDF umwandeln und Kopf- und Fußzeilen hinzufügen

using var converter = await HtmlConverter.CreateAsync();

var options = new HtmlConversionOptions();
options.Page.HeaderTemplate = File.ReadAllText("header-template.html");
options.Page.MarginTop = 50;

options.Page.FooterTemplate = File.ReadAllText("footer-template.html");
options.Page.MarginBottom = 50;

var url = new Uri("https://www.iana.org/numbers");
using var pdf = await converter.CreatePdfAsync(url, options);
pdf.Save("out.pdf");

Der Konverter kann Werte wie das Konvertierungsdatum und den Dokumenttitel an vordefinierten Stellen in den Vorlagen einfügen. Weitere Informationen finden Sie in der Beschreibung der Eigenschaften HeaderTemplate und FooterTemplate.

Das vollständige Testprojekt und der Vorlagencode befinden sich im Docotic.Pdf-Beispielrepository.

Inhalt skalieren

Wenn Sie mit Webseiten mit breiten Layouts arbeiten, können Sie entweder die Größe der Ausgabe-PDF-Datei vergrößern oder den Inhalt verkleinern, damit er auf die PDF-Seite passt. Um den skalierten Inhalt besser zu positionieren, können Sie auch Ränder einrichten.

Ein gut skaliertes PDF bietet ein besseres Leseerlebnis, da die Leser nicht hinein- oder herauszoomen müssen, um den Inhalt richtig anzuzeigen. Wenn das HTML-Dokument aufgrund einer kleinen Schriftgröße schwer zu lesen ist, können Sie den Inhalt vergrößern.

Standardmäßig erstellt die API PDFs mit einer Seitengröße von A4. Es gibt keine Ränder und keine Vergrößerung. Mithilfe der Konvertierungsoptionen können Sie diese Einstellungen ändern.

Erfahren Sie, wie Sie Skalierungsfaktor und Ränder beim Generieren von PDF aus HTML einrichten.

using var converter = await HtmlConverter.CreateAsync();

var html = "<html><head><style>body { background-color: coral; margin-top: 100px;}</style></head>" +
"<body><h1>Did you notice the margins and the scale?</h1></body></html>";

var options = new HtmlConversionOptions();
options.Page.MarginLeft = 10;
options.Page.MarginTop = 20;
options.Page.MarginRight = 30;
options.Page.MarginBottom = 40;
options.Page.Scale = 1.5;

using var pdf = await converter.CreatePdfFromStringAsync(html, options);
pdf.Save("out.pdf");

Das Docotic.Pdf-Beispiel-Repository enthält das komplette Projekt.

HTML auf eine vorhandene PDF-Datei legen

Es gibt Fälle, in denen Sie eine vorhandene PDF-Datei als Hintergrund für das Konvertierungsergebnis verwenden möchten. Dies ist mit Docotic.Pdf und dem Add-on möglich.

Bei dieser Methode wird aus dem HTML (dem Overlay-Inhalt) ein neues PDF erstellt und dann mit dem vorhandenen PDF zusammengeführt. Das endgültige Dokument enthält sowohl den ursprünglichen Inhalt als auch das neue Overlay. Hier ist der Code, der die Methode veranschaulicht.

using var converter = await HtmlConverter.CreateAsync();

var options = new HtmlConversionOptions();
options.Page.SetSizeInches(4.13, 5.83);

string htmlCode =
    "<div style=\"position: absolute; top: 270px; right: 100px;\">" +
    "I would like to put this here</div>";
using var htmlPdf = await converter.CreatePdfFromStringAsync(htmlCode, options);

using var pdf = new PdfDocument("pdf-to-merge-with.pdf");
var xObj = pdf.CreateXObject(htmlPdf.Pages[0]);

pdf.Pages[0].Canvas.DrawXObject(xObj, 0, 0);
pdf.Save("out.pdf");

Es ist wichtig, eine Seitengröße für das Overlay anzugeben. Normalerweise sollte die Größe der Größe der Seite entsprechen, die Sie überlagern möchten. Anschließend müssen Sie das neue PDF mit dem Overlay-Inhalt erstellen. Bitte beachten Sie, dass der Hintergrund standardmäßig transparent ist. Sie können den Hintergrund bei Bedarf ändern, indem Sie vor der Konvertierung ein Skript ausführen.

Es ist Zeit, das vorhandene PDF zu öffnen. Dieses Dokument sollte ein XObject aus einer Seite im generierten PDF erstellen. Anschließend zeichnet der Code das XObject über die vorhandene Seite.

Das vollständige Testprojekt mit einem Beispiel-Quell-PDF befindet sich im Docotic.Pdf-Beispielrepository.

Konvertieren Sie SVG in PDF in C#

Mit dem HTML-zu-PDF-Konverter können Sie aus Bildern ein PDF mit skalierbaren Vektorgrafiken erstellen. Der folgende Code zeigt die einfachste Möglichkeit, die Konvertierung durchzuführen:

using var converter = await HtmlConverter.CreateAsync();
var uri = new Uri("https://bitmiracle.com/images/team.svg");
using var pdf = await converter.CreatePdfAsync(uri);
pdf.Save("out.pdf");

Der Konverter verwendet die im SVG-Bild angegebene Breite und/oder Höhe, um eine qualitativ hochwertige Ausgabe in der richtigen Größe zu erzeugen.

Sie können eine Ausgabe in anderer Größe mithilfe von Anpassungsoptionen erstellen. Es ist möglich, das konvertierte Bild zu einem anderen PDF hinzuzufügen.

Sehen Sie sich das vollständige Testprojekt auf GitHub an.