用于将 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 的解决方案能够支持更多功能。