.NET-Bibliothek zum Konvertieren von Markdown in PDF. Verwendet Markdig zum Konvertieren von Markdown in HTML und dann Puppeteer Sharp, um diese Ausgabe in PDF zu konvertieren.
Für eine plattformübergreifende CLI-Anwendung, die dieses Paket verwendet, schauen Sie sich Markdown2Pdf.Console an.
Eine vollständige Demo-PDF finden Sie hier!
C#:
var converter = new Markdown2PdfConverter ( ) ;
var resultPath = await converter . Convert ( "README.md" ) ;
VB.NET:
Dim converter As New Markdown2PdfConverter()
Dim resultPath As String = Await converter.Convert( "README.md" )
Es kann auch eine Aufzählung von Markdown-Dateien an den Konverter übergeben werden, die diese zu einem PDF zusammenfügt.
Weitere Dokumentation finden Sie im Wiki.
Um den Konvertierungsprozess weiter zu spezifizieren, übergeben Sie Markdown2PdfOptions an den Konverter:
var options = new Markdown2PdfOptions {
HeaderHtml = "<div class= " document-title " style= " background-color: #5eafed; width: 100%; padding: 5px " ></div>" ,
FooterHtml = "<div style= " background-color: #5eafed; width: 100%; padding: 5px " >Page <span class= " pageNumber " ></span>/<span class= " totalPages " ></span></div>" ,
DocumentTitle = "Example PDF" ,
} ;
var converter = new Markdown2PdfConverter ( options ) ;
Alternativ können die Markdown2PdfOptions aus einem YAML Front Matter-Block am Anfang der Markdown-Datei geladen werden:
var converter = Markdown2PdfConverter . CreateWithInlineOptionsFromFile ( "README.md" ) ;
var resultPath = await converter . Convert ( "README.md" ) ;
Anwendungsbeispiele hierfür finden Sie hier.
Option | Beschreibung |
---|---|
ChromePath | Pfad zu Chrome oder zur ausführbaren Chromium-Datei oder lädt sie selbst herunter, wenn null . |
CodeHighlightTheme | Das zum Hervorheben von Codeblöcken zu verwendende Thema. |
CustomHeadContent | Eine string die alle gültigen Inhalte innerhalb eines HTML- <head> enthält, um zusätzliche Skripte/Stile auf das Dokument anzuwenden. |
Dokumenttitel | Der Titel dieses Dokuments. Kann in die Kopf-/Fußzeile eingefügt werden, indem dem Element die Klasse document-title hinzugefügt wird. |
EnableAutoLanguageDetection | Automatische Erkennung der Sprache für Codeblöcke ohne angegebene Sprache. |
FooterHtml | HTML-String, der als Dokumentfußzeile verwendet werden soll. |
Format | Das Papierformat für das PDF. |
HeaderHtml | HTML-String, der als Dokumentkopf verwendet werden soll. |
IsLandscape | Papierausrichtung. |
KeepHtml | true wenn der erstellte HTML-Code nicht gelöscht werden soll. |
MarginOptions | CSS-Ränder für die Seiten des Dokuments. |
Moduloptionen | Optionen, die entscheiden, von wo aus zusätzliche Module geladen werden. Weitere Informationen. |
Skala | Umfang des Inhalts. Muss zwischen 0,1 und 2 liegen. |
Inhaltsverzeichnis | Erstellt ein Inhaltsverzeichnis aus den Markdown-Headern. Weitere Informationen. |
Thema | Der Stil, der auf das Dokument angewendet werden soll. |
Um ein Inhaltsverzeichnis hinzuzufügen, fügen Sie ein
[TOC]
(Gitlab-Syntax)[[_TOC_]]
(Gitlab-Syntax)<!-- toc -->
(Kommentar) in das Markdown-Dokument und verwenden Sie die Option Markdown2PdfOptions.TableOfContents
:
# My Document
[ TOC ]
...
Beispiel für die Erstellung eines Inhaltsverzeichnisses:
options . TableOfContents = new TableOfContentsOptions {
ListStyle = ListStyle . Decimal ,
// Include all heading levels from 2 to 4.
MinDepthLevel = 2 ,
MaxDepthLevel = 4
} ;
Ein Header kann im Inhaltsverzeichnis weggelassen werden, indem man ihn mit <!-- omit from toc -->
beendet:
## This header won't be displayed in the TOC <!-- omit from toc -->
Das Inhaltsverzeichnis wird innerhalb eines <nav class="table-of-contents">
generiert. Dies kann verwendet werden, um zusätzliche benutzerdefinierte Stile anzuwenden.
Option | Beschreibung |
---|---|
HasColoredLinks | Wenn festgelegt, erhalten die Titel im Inhaltsverzeichnis ein Standard-Link-Markup. |
ListStyle | Entscheidet, welche Zeichen vor den Inhaltsverzeichnistiteln verwendet werden sollen. |
MaxDepthLevel | Die maximale Überschriftstiefe, die in das Inhaltsverzeichnis einbezogen werden soll. |
MinDepthLevel | Die Mindesttiefe der Überschrift, die in das Inhaltsverzeichnis aufgenommen werden soll. |
PageNumberOptions | Wenn festgelegt, wird das Inhaltsverzeichnis mit Seitenzahlen generiert. |
Diese Bibliothek verwendet node_modules- Pakete. Standardmäßig werden sie über das CDN geladen, auf dem sie gehostet werden, z. B. https://cdn.jsdelivr.net.
Sie können auch eine lokale Installation verwenden, indem Sie die folgenden Pakete installieren und Markdown2PdfOptions.ModuleOptions auf ModuleOptions.FromLocalPath() setzen:
npm i mathjax@3
npm i mermaid@10
npm i font-awesome
npm i @highlightjs/cdn-assets@11
npm i github-markdown-css
npm i latex.css
Hinweis: Dazu muss npm installiert und zu
PATH
hinzugefügt sein.
Modul | Beschreibung |
---|---|
MathJax | Latex-Math-Rendering |
Meerjungfrau | Diagramme |
Schriftart-genial | Symbole (unterstützt in Meerjungfrauendiagrammen) |
Highlight.js | Syntaxhervorhebung |
github-markdown-css | Github-Theme |
Latex-CSS | Latex-Thema |
Um mehr Kontrolle über die HTML-Generierung zu erhalten (z. B. um eigene JS-Skripte hinzuzufügen), ändern Sie die Datei „converter.ContentTemplate“.
Für automatisierte Tests existiert das Projekt Markdown2Pdf.Tests. Bevor Sie diese starten, führen Sie setup.ps1 aus.
Das gebündelte Chromium, das von Puppeteer installiert wird, wird nicht mit allen erforderlichen Abhängigkeiten ausgeliefert (siehe Ausführen von Puppeteer in Docker).
Um dieses Problem zu beheben, installieren Sie sie in Ihrer .dockerfile
:
RUN apt-get update
&& apt-get install -y wget gnupg
&& wget -q -O - https://dl-ssl.google.com/linux/linux_signing_key.pub | apt-key add -
&& sh -c 'echo "deb [arch=amd64] http://dl.google.com/linux/chrome/deb/ stable main" >> /etc/apt/sources.list.d/google.list'
&& apt-get update
&& apt-get install -y google-chrome-stable fonts-ipafont-gothic fonts-wqy-zenhei fonts-thai-tlwg fonts-kacst fonts-freefont-ttf libxss1
--no-install-recommends
&& rm -rf /var/lib/apt/lists/*
Markdown wurde ursprünglich so entwickelt, dass es in HTML konvertiert werden kann. Aus diesem Grund existieren viele seiner Tools innerhalb der JavaScript-Welt. Mermaid ist beispielsweise nur in JavaScript implementiert, daher benötigen wir eine JS-Engine, um es zu unterstützen. Dies führt dazu, dass dieses Paket langsamer ist, aber auch mehr Funktionen unterstützen kann als andere Lösungen, die das PDF direkt aus Markdown generieren.