Bibliothèque .NET pour convertir Markdown en PDF. Utilise Markdig pour convertir le markdown en HTML, puis Puppeteer Sharp pour convertir cette sortie en PDF.
Pour une application cli multiplateforme utilisant ce package, consultez Markdown2Pdf.Console.
Un PDF de démonstration complet peut être trouvé ici !
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" )
Une énumération de fichiers markdown peut également être transmise au convertisseur, les combinant en un seul PDF.
Consultez le Wiki pour plus de documentation.
Pour spécifier davantage le processus de conversion, transmettez Markdown2PdfOptions au convertisseur :
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 ) ;
Alternativement, les Markdown2PdfOptions peuvent être chargés à partir d'un bloc YAML Front Matter au début du fichier markdown :
var converter = Markdown2PdfConverter . CreateWithInlineOptionsFromFile ( "README.md" ) ;
var resultPath = await converter . Convert ( "README.md" ) ;
Des exemples d’utilisation pour cela peuvent être trouvés ici.
Option | Description |
---|---|
Chemin Chrome | Chemin d'accès à l'exécutable Chrome ou Chrome ou télécharge-le automatiquement si null . |
CodeHighlightThème | Thème à utiliser pour mettre en évidence les blocs de code. |
Contenu d'en-tête personnalisé | Une string contenant tout contenu valide à l'intérieur d'un <head> HTML pour appliquer un script/style supplémentaire au document. |
Titre du document | Le titre de ce document. Peut être injecté dans l'en-tête/pied de page en ajoutant le document-title de classe à l'élément. |
Activer la détection automatique de la langue | Détection automatique de la langue des blocs de code sans langue spécifiée. |
Pied de pageHtml | Chaîne HTML à utiliser comme pied de page du document. |
Format | Le format papier pour le PDF. |
En-têteHtml | Chaîne HTML à utiliser comme en-tête du document. |
EstPaysage | Orientation du papier. |
GarderHtml | true si le code HTML créé ne doit pas être supprimé. |
Options de marge | Marges CSS pour les côtés du document. |
Options du module | Options qui décident d'où charger les modules supplémentaires. Plus d'informations. |
Échelle | Échelle du contenu. Doit être compris entre 0,1 et 2. |
Table des matières | Crée une table des matières à partir des en-têtes de démarque. Plus d'informations. |
Thème | Le style à appliquer au document. |
Pour ajouter une table des matières, insérer
[TOC]
(syntaxe Gitlab)[[_TOC_]]
(syntaxe Gitlab)<!-- toc -->
(Commentaire) dans le document markdown et utilisez l'option Markdown2PdfOptions.TableOfContents
:
# My Document
[ TOC ]
...
Exemple de création d'une table des matières :
options . TableOfContents = new TableOfContentsOptions {
ListStyle = ListStyle . Decimal ,
// Include all heading levels from 2 to 4.
MinDepthLevel = 2 ,
MaxDepthLevel = 4
} ;
Un en-tête peut être omis de la table des matières en le terminant par <!-- omit from toc -->
:
## This header won't be displayed in the TOC <!-- omit from toc -->
La table des matières est générée dans un <nav class="table-of-contents">
. Cela peut être utilisé pour appliquer des styles personnalisés supplémentaires.
Option | Description |
---|---|
A des liens colorés | S'il est défini, les titres de la table des matières obtiennent un balisage de lien par défaut. |
Style de liste | Décide quels caractères utiliser avant les titres de la table des matières. |
Niveau de profondeur maximum | Le niveau maximum de profondeur de cap à inclure dans la table des matières. |
Niveau de profondeur min | Le niveau minimum de profondeur de cap à inclure dans la table des matières. |
Options du numéro de page | Si défini, la table des matières sera générée avec les numéros de page. |
Cette bibliothèque utilise les packages node_modules . Par défaut, ils sont chargés via le CDN sur lequel ils sont hébergés, par exemple https://cdn.jsdelivr.net.
Vous pouvez également utiliser une installation locale en installant les packages suivants et en définissant Markdown2PdfOptions.ModuleOptions sur ModuleOptions.FromLocalPath() :
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
Remarque : Pour cela, vous devez avoir installé npm et ajouté à
PATH
.
Module | Description |
---|---|
MathJax | Rendu Latex-Math |
Sirène | Diagrammes |
Police géniale | Icônes (prises en charge dans les diagrammes de sirène) |
Highlight.js | Mise en évidence de la syntaxe |
github-markdown-css | Thème Github |
latex-css | Thème Latex |
Pour avoir plus de contrôle sur la génération HTML (par exemple pour ajouter vos propres scripts JS), modifiez le converter.ContentTemplate.
Pour les tests automatisés, le projet Markdown2Pdf.Tests existe. Avant de les démarrer, exécutez setup.ps1.
Le Chromium fourni qui est installé par Puppeteer n'est pas livré avec toutes les dépendances nécessaires (voir Exécuter Puppeteer dans Docker).
Pour résoudre ce problème, installez-les dans votre .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 a été initialement développé pour pouvoir être converti en HTML. En conséquence, une grande partie de ses outils existent dans le monde JavaScript. Par exemple, Mermaid n'est implémenté qu'en JavaScript, nous avons donc besoin d'un moteur JS pour le prendre en charge. Cela fait que ce package est plus lent mais également capable de prendre en charge plus de fonctionnalités que les autres solutions qui génèrent directement le PDF à partir de Markdown.