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 を直接生成する他のソリューションよりも多くの機能をサポートできます。