用於將 Markdown 轉換為 PDF 的 .NET 程式庫。使用 Markdig 將 markdown 轉換為 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" )
也可以將 Markdown 檔案的列舉傳遞給轉換器,將它們組合成一個 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 ) ;
或者,可以從 Markdown 檔案開頭的 YAML Front Matter 區塊載入 Markdown2PdfOptions:
var converter = Markdown2PdfConverter . CreateWithInlineOptionsFromFile ( "README.md" ) ;
var resultPath = await converter . Convert ( "README.md" ) ;
可以在此處找到此用法的範例。
選項 | 描述 |
---|---|
ChromePath | chrome 或 chromium 執行檔的路徑,若為null 則自行下載。 |
程式碼亮點主題 | 用於突出顯示程式碼區塊的主題。 |
自訂標題內容 | 包含 HTML <head> 內任何有效內容的string ,用於將額外的腳本/樣式套用至文件。 |
文件標題 | 本文檔的標題。可以透過將類別document-title 新增至元素來注入頁首/頁尾。 |
啟用自動語言偵測 | 自動偵測沒有指定語言的程式碼區塊的語言。 |
頁尾HTML | 用作文檔頁腳的 HTML 字串。 |
格式 | PDF 的紙張格式。 |
標題HTML | 用作文檔標題的 HTML 字串。 |
是風景 | 紙張方向。 |
保留HTML | true 如果建立的 HTML 不應被刪除。 |
保證金選項 | 文件兩側的 CSS 邊距。 |
模組選項 | 決定從何處載入附加模組的選項。更多資訊。 |
規模 | 內容的規模。必須介於 0.1 和 2 之間。 |
目錄 | 從 Markdown 標題建立目錄。更多資訊。 |
主題 | 套用到文檔的樣式。 |
新增目錄插入
[TOC]
(Gitlab 語法)[[_TOC_]]
(Gitlab 語法)<!-- toc -->
(註)進入 Markdown 文件並使用Markdown2PdfOptions.TableOfContents
選項:
# My Document
[ TOC ]
...
建立目錄的範例:
options . TableOfContents = new TableOfContentsOptions {
ListStyle = ListStyle . Decimal ,
// Include all heading levels from 2 to 4.
MinDepthLevel = 2 ,
MaxDepthLevel = 4
} ;
以<!-- omit from toc -->
結尾,可以從目錄中省略標頭:
## This header won't be displayed in the TOC <!-- omit from toc -->
TOC 在<nav class="table-of-contents">
中產生。這可用於套用額外的自訂樣式。
選項 | 描述 |
---|---|
有彩色連結 | 如果設置,目錄中的標題將獲得預設連結標記。 |
清單樣式 | 決定在目錄標題之前使用哪些字元。 |
最大深度級別 | TOC 中包含的最大航向深度等級。 |
最小深度級別 | TOC 中包含的最小航向深度等級。 |
頁碼選項 | 如果設置,將產生帶有頁碼的目錄。 |
該函式庫使用node_modules套件。預設情況下,它們透過託管的 CDN 加載,例如 https://cdn.jsdelivr.net。
您也可以透過安裝以下軟體包並將 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
。
模組 | 描述 |
---|---|
數學賈克斯 | Latex-數學渲染 |
美人魚 | 圖表 |
字體-棒 | 圖示(美人魚圖中支援) |
高亮.js | 語法高亮 |
github-markdown-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 的解決方案支援更多功能。