Markdown を PDF に変換するための .NET ライブラリ。 Markdig を使用してマークダウンを HTML に変換し、次に Puppeteer Sharp を使用してその出力を PDF に変換します。
このパッケージを使用したクロスプラットフォームの cli アプリケーションについては、Markdown2Pdf.Console をチェックしてください。

完全なデモ PDF はここにあります。
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" )マークダウン ファイルの列挙をコンバータに渡し、それらを 1 つの PDF に結合することもできます。
詳しいドキュメントについては Wiki を参照してください。
変換プロセスをさらに指定するには、Markdown2PdfOptions をコンバーターに渡します。
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 ) ;あるいは、Markdown2PdfOptions は、マークダウン ファイルの先頭にある YAML Front Matter ブロックからロードすることもできます。
var converter = Markdown2PdfConverter . CreateWithInlineOptionsFromFile ( "README.md" ) ;
var resultPath = await converter . Convert ( "README.md" ) ;この使用例はここにあります。
| オプション | 説明 |
|---|---|
| クロムパス | chrome または chromium 実行可能ファイルへのパス、またはnullの場合は自己ダウンロードします。 |
| コードハイライトテーマ | コードブロックを強調表示するために使用するテーマ。 |
| カスタムヘッドコンテンツ | ドキュメントに追加のスクリプト/スタイルを適用するための、HTML <head>内で有効なコンテンツを含むstring 。 |
| ドキュメントタイトル | このドキュメントのタイトル。クラスdocument-title要素に追加することで、ヘッダー/フッターに挿入できます。 |
| 自動言語検出を有効にする | 言語が指定されていないコード ブロックの言語を自動検出します。 |
| フッターHTML | ドキュメントのフッターとして使用する HTML 文字列。 |
| 形式 | PDF の用紙形式。 |
| ヘッダーHTML | ドキュメントヘッダーとして使用する HTML 文字列。 |
| 風景です | 用紙の向き。 |
| KeepHTML | 作成された HTML を削除しない場合はtrue 。 |
| マージンオプション | ドキュメントの側面の CSS マージン。 |
| モジュールオプション | 追加モジュールをどこからロードするかを決定するオプション。詳細情報。 |
| 規模 | コンテンツの規模。 0.1 ~ 2 の間である必要があります。 |
| 目次 | マークダウンヘッダーから目次を作成します。詳細情報。 |
| テーマ | ドキュメントに適用するスタイル。 |
目次を追加するには挿入
[TOC] (Gitlab 構文)[[_TOC_]] (Gitlab 構文)<!-- toc --> (コメント)マークダウン ドキュメントに追加し、 Markdown2PdfOptions.TableOfContentsオプションを使用します。
# My Document
[ TOC ]
...目次の作成例:
options . TableOfContents = new TableOfContentsOptions {
ListStyle = ListStyle . Decimal ,
// Include all heading levels from 2 to 4.
MinDepthLevel = 2 ,
MaxDepthLevel = 4
} ; toc からヘッダーを省略するには、ヘッダーを<!-- omit from toc -->で終了します。
## This header won't be displayed in the TOC <!-- omit from toc -->目次は<nav class="table-of-contents">内に生成されます。これを使用して、追加のカスタム スタイルを適用できます。
| オプション | 説明 |
|---|---|
| 色付きリンクあり | 設定すると、目次内のタイトルにデフォルトのリンク マークアップが取得されます。 |
| リストスタイル | 目次タイトルの前に使用する文字を決定します。 |
| MaxDepthLevel | 目次に含める見出しの深さの最大レベル。 |
| 最小深さレベル | 目次に含める見出しの深さの最小レベル。 |
| ページ番号オプション | 設定すると、ページ番号付きの目次が生成されます。 |
このライブラリは、 node_modulesパッケージを使用します。デフォルトでは、https://cdn.jsdelivr.net などでホストされている CDN 経由でロードされます。
次のパッケージをインストールし、Markdown2PdfOptions.ModuleOptions を 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注:このためには、 npmをインストールし、
PATHに追加する必要があります。
| モジュール | 説明 |
|---|---|
| マスジャックス | ラテックス数学のレンダリング |
| マーメイド | 図表 |
| 素晴らしいフォント | アイコン (人魚図内でサポートされています) |
| ハイライト.js | 構文の強調表示 |
| github-マークダウン-css | Github のテーマ |
| ラテックス-CSS | ラテックスのテーマ |
HTML 生成をさらに制御するには (独自の JS スクリプトを追加するなど)、converter.ContentTemplate を変更します。
自動テストの場合、プロジェクト Markdown2Pdf.Tests が存在します。これらを開始する前に、setup.ps1 を実行してください。
Puppeteer によってインストールされるバンドルされた Chromium には、必要な依存関係がすべて含まれていません (「Docker での Puppeteer の実行」を参照)。
これを解決するには、それらを.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 は当初、HTML に変換できるように開発されました。その結果、そのツールの多くは JavaScript の世界内に存在します。たとえば、Mermaid は JavaScript でのみ実装されているため、それをサポートするには JS エンジンが必要です。その結果、このパッケージは遅くなりますが、Markdown から PDF を直接生成する他のソリューションよりも多くの機能をサポートできます。