Biblioteca .NET para conversão de Markdown em PDF. Usa Markdig para converter markdown em HTML e depois Puppeteer Sharp para converter essa saída em PDF.
Para um aplicativo CLI de plataforma cruzada usando este pacote, verifique Markdown2Pdf.Console.
Um PDF de demonstração completo pode ser encontrado aqui!
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" )
Uma enumeração de arquivos markdown também pode ser passada para o conversor, combinando-os em um PDF.
Confira o Wiki para mais documentação.
Para especificar ainda mais o processo de conversão, passe Markdown2PdfOptions para o conversor:
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 ) ;
Alternativamente, o Markdown2PdfOptions pode ser carregado de um bloco YAML Front Matter no início do arquivo markdown:
var converter = Markdown2PdfConverter . CreateWithInlineOptionsFromFile ( "README.md" ) ;
var resultPath = await converter . Convert ( "README.md" ) ;
Exemplos de uso para isso podem ser encontrados aqui.
Opção | Descrição |
---|---|
Caminho do Chrome | Caminho para o executável chrome ou chromium ou faz o download automático se null . |
CódigoHighlightTheme | O tema a ser usado para destacar blocos de código. |
CustomHeadContent | Uma string contendo qualquer conteúdo válido dentro de um HTML <head> para aplicar scripts/estilos extras ao documento. |
Título do Documento | O título deste documento. Pode ser injetado no cabeçalho/rodapé adicionando a classe document-title ao elemento. |
EnableAutoLanguageDetection | Detecta automaticamente o idioma para blocos de código sem idioma especificado. |
RodapéHtml | String HTML a ser usada como rodapé do documento. |
Formatar | O formato de papel para o PDF. |
CabeçalhoHtml | String HTML a ser usada como cabeçalho do documento. |
ÉPaisagem | Orientação do papel. |
ManterHtml | true se o HTML criado não deve ser excluído. |
MargemOpções | Margens CSS para as laterais do documento. |
Opções de módulo | Opções que decidem onde carregar módulos adicionais. Mais informações. |
Escala | Escala do conteúdo. Deve estar entre 0,1 e 2. |
Índice | Cria um sumário a partir dos cabeçalhos de redução. Mais informações. |
Tema | O estilo a ser aplicado ao documento. |
Para adicionar um índice, insira
[TOC]
(sintaxe do Gitlab)[[_TOC_]]
(sintaxe do Gitlab)<!-- toc -->
(Comentário) no documento markdown e use a opção Markdown2PdfOptions.TableOfContents
:
# My Document
[ TOC ]
...
Exemplo de criação de um sumário:
options . TableOfContents = new TableOfContentsOptions {
ListStyle = ListStyle . Decimal ,
// Include all heading levels from 2 to 4.
MinDepthLevel = 2 ,
MaxDepthLevel = 4
} ;
Um cabeçalho pode ser omitido do toc terminando-o com <!-- omit from toc -->
:
## This header won't be displayed in the TOC <!-- omit from toc -->
O TOC é gerado dentro de um <nav class="table-of-contents">
. Isso pode ser usado para aplicar estilos personalizados extras.
Opção | Descrição |
---|---|
HasColoredLinks | Se definido, os títulos no sumário recebem marcação de link padrão. |
Estilo de lista | Decide quais caracteres usar antes dos títulos do sumário. |
Nível máximo de profundidade | O nível máximo de profundidade de rumo a ser incluído no TOC. |
Nível MinDepth | O nível mínimo de profundidade de rumo a ser incluído no TOC. |
Opções de número de página | Se definido, o sumário será gerado com números de página. |
Esta biblioteca usa pacotes node_modules . Por padrão, eles são carregados pelo CDN em que estão hospedados, por exemplo, https://cdn.jsdelivr.net.
Você também pode usar uma instalação local instalando os seguintes pacotes e definindo Markdown2PdfOptions.ModuleOptions como 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
Nota: Para isso você precisa ter o npm instalado e adicionado ao
PATH
.
Módulo | Descrição |
---|---|
MathJax | Renderização de látex-matemática |
Sereia | Diagramas |
Fonte incrível | Ícones (compatíveis com diagramas de sereia) |
Destaque.js | Destaque de sintaxe |
github-markdown-css | Tema Github |
látex-css | Tema de látex |
Para obter mais controle sobre a geração de HTML (por exemplo, para adicionar seus próprios JS-Scripts), modifique o converter.ContentTemplate.
Para testes automatizados, existe o projeto Markdown2Pdf.Tests. Antes de iniciá-los, execute setup.ps1.
O pacote Chromium instalado pelo Puppeteer não vem com todas as dependências necessárias (consulte Executando o Puppeteer no Docker).
Para resolver isso, instale-os em seu .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 foi inicialmente desenvolvido para que pudesse ser convertido para HTML. Como resultado disso, muitas de suas ferramentas existem no mundo JavaScript. Por exemplo, Mermaid só é implementado em JavaScript, então precisamos de um mecanismo JS para suportá-lo. Isso faz com que este pacote seja mais lento, mas também capaz de suportar mais recursos do que outras soluções que geram PDF diretamente do Markdown.