Библиотека .NET для преобразования Markdown в PDF. Использует Markdig для преобразования уценки в HTML, а затем Puppeteer Sharp для преобразования вывода в PDF.
Для кросс-платформенного приложения cli, использующего этот пакет, выберите Markdown2Pdf.Console.
Полную демонстрационную версию PDF можно найти здесь!
С#:
var converter = new Markdown2PdfConverter ( ) ;
var resultPath = await converter . Convert ( "README.md" ) ;
ВБ.НЕТ:
Dim converter As New Markdown2PdfConverter()
Dim resultPath As String = Await converter.Convert( "README.md" )
Конвертеру также можно передать перечисление файлов уценки, объединив их в один 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" ) ;
Примеры использования можно найти здесь.
Вариант | Описание |
---|---|
ChromePath | Путь к chrome или исполняемому файлу Chrome или загрузит его самостоятельно, если null . |
КодHighlightTheme | Тема, используемая для выделения блоков кода. |
CustomHeadContent | string , содержащая любое содержимое, допустимое внутри HTML- <head> для применения к документу дополнительных сценариев/стилей. |
Название документа | Название этого документа. Можно внедрить в верхний/нижний колонтитул, добавив к элементу класс document-title . |
Включитьавтолангуажедетектион | Автоматическое определение языка для блоков кода без указания языка. |
Нижний колонтитулHtml | HTML-строка, которая будет использоваться в качестве нижнего колонтитула документа. |
Формат | Бумажный формат PDF. |
ЗаголовокHtml | HTML-строка, которая будет использоваться в качестве заголовка документа. |
IsПейзаж | Ориентация бумаги. |
KeepHtml | true если созданный HTML-код не следует удалять. |
Параметры маржи | 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
} ;
Заголовок можно исключить из содержания, закончив его <!-- omit from toc -->
:
## This header won't be displayed in the TOC <!-- omit from toc -->
Оглавление генерируется в <nav class="table-of-contents">
. Это можно использовать для применения дополнительных пользовательских стилей.
Вариант | Описание |
---|---|
HasColoredLinks | Если установлено, заголовки в оглавлении получают разметку ссылок по умолчанию. |
СписокСтиль | Решает, какие символы использовать перед заголовками оглавления. |
Макс. уровень глубины | Максимальный уровень глубины заголовка для включения в оглавление. |
Минглубинауровень | Минимальный уровень глубины заголовка для включения в оглавление. |
Параметры номера страницы | Если установлено, оглавление будет генерироваться с номерами страниц. |
Эта библиотека использует пакеты 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
.
Модуль | Описание |
---|---|
МатДжакс | Латексно-математический рендеринг |
Русалка | Диаграммы |
Шрифт-Потрясающий | Значки (поддерживаются в диаграммах русалок) |
Highlight.js | Подсветка синтаксиса |
GitHub-Markdown-CSS | Github-тема |
латекс-CSS | Латекс-тема |
Чтобы получить больше контроля над генерацией HTML (например, добавить свои собственные JS-скрипты), измените файл Converter.ContentTemplate.
Для автоматизированных тестов существует проект Markdown2Pdf.Tests. Прежде чем запускать их, запустите setup.ps1.
Входящий в комплект Chromium, который устанавливается Puppeteer, не содержит всех необходимых зависимостей (см. Запуск Puppeteer в Docker).
Чтобы решить эту проблему, установите их в свой .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-движок. В результате этот пакет работает медленнее, но при этом может поддерживать больше функций, чем другие решения, которые напрямую генерируют PDF-файл из Markdown.