Biblioteca .NET para convertir Markdown a PDF. Utiliza Markdig para convertir Markdown a HTML y luego Puppeteer Sharp para convertir esa salida a PDF.
Para una aplicación CLI multiplataforma que utilice este paquete, consulte Markdown2Pdf.Console.
¡Puede encontrar un PDF de demostración completo aquí!
DO#:
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" )
También se puede pasar una enumeración de archivos de rebajas al convertidor, combinándolos en un solo PDF.
Consulte la Wiki para obtener más documentación.
Para especificar más el proceso de conversión, pase Markdown2PdfOptions al convertidor:
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, Markdown2PdfOptions se puede cargar desde un bloque YAML Front Matter al inicio del archivo de rebajas:
var converter = Markdown2PdfConverter . CreateWithInlineOptionsFromFile ( "README.md" ) ;
var resultPath = await converter . Convert ( "README.md" ) ;
Se pueden encontrar ejemplos de uso para esto aquí.
Opción | Descripción |
---|---|
ChromePath | Ruta al ejecutable de Chrome o Chrome o lo descarga automáticamente si es null . |
Código DestacadoTema | El tema que se utilizará para resaltar bloques de código. |
Contenido de encabezado personalizado | Una string que contiene cualquier contenido válido dentro de un <head> HTML para aplicar secuencias de comandos/estilo adicionales al documento. |
Título del documento | El título de este documento. Se puede inyectar en el encabezado/pie de página agregando la clase document-title al elemento. |
Habilitar detección automática de idioma | Detección automática del idioma para bloques de código sin idioma especificado. |
Pie de páginaHtml | Cadena HTML para usar como pie de página del documento. |
Formato | El formato de papel para el PDF. |
EncabezadoHtml | Cadena HTML para usar como encabezado del documento. |
espaisaje | Orientación del papel. |
Mantener HTML | true si el HTML creado no debe eliminarse. |
Opciones de margen | Márgenes CSS para los lados del documento. |
Opciones de módulo | Opciones que deciden desde dónde cargar módulos adicionales. Más información. |
Escala | Escala del contenido. Debe estar entre 0,1 y 2. |
Tabla de contenido | Crea un TOC a partir de los encabezados de rebajas. Más información. |
Tema | El estilo que se aplicará al documento. |
Para agregar una tabla de contenido, inserte
[TOC]
(Sintaxis de Gitlab)[[_TOC_]]
(Sintaxis de Gitlab)<!-- toc -->
(Comentario) en el documento de rebajas y utilice la opción Markdown2PdfOptions.TableOfContents
:
# My Document
[ TOC ]
...
Ejemplo de creación de una TOC:
options . TableOfContents = new TableOfContentsOptions {
ListStyle = ListStyle . Decimal ,
// Include all heading levels from 2 to 4.
MinDepthLevel = 2 ,
MaxDepthLevel = 4
} ;
Se puede omitir un encabezado del toc finalizándolo con <!-- omit from toc -->
:
## This header won't be displayed in the TOC <!-- omit from toc -->
El TOC se genera dentro de un <nav class="table-of-contents">
. Esto se puede utilizar para aplicar estilos personalizados adicionales.
Opción | Descripción |
---|---|
Tiene enlaces de colores | Si se establece, los títulos en el TOC obtienen el marcado de enlace predeterminado. |
Estilo de lista | Decide qué caracteres usar antes de los títulos de TOC. |
Nivel de profundidad máxima | El nivel máximo de profundidad de rumbo para incluir en el TOC. |
Nivel mínimo de profundidad | El nivel mínimo de profundidad de rumbo a incluir en el TOC. |
Opciones de número de página | Si se configura, el TOC se generará con los números de página. |
Esta biblioteca utiliza paquetes node_modules . De forma predeterminada, se cargan a través de la CDN en la que están alojados, por ejemplo, https://cdn.jsdelivr.net.
También puede utilizar una instalación local instalando los siguientes paquetes y configurando Markdown2PdfOptions.ModuleOptions en 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 esto necesita tener npm instalado y agregado a
PATH
.
Módulo | Descripción |
---|---|
MatemáticasJax | Representación de látex y matemáticas |
Sirena | Diagramas |
Fuente impresionante | Iconos (compatibles con diagramas de sirena) |
Resaltar.js | Resaltado de sintaxis |
github-markdown-css | Tema Github |
látex-css | Tema de látex |
Para obtener más control sobre la generación de HTML (por ejemplo, para agregar sus propios JS-Scripts), modifique el convertidor.ContentTemplate.
Para pruebas automatizadas, existe el proyecto Markdown2Pdf.Tests. Antes de iniciarlos, ejecute setup.ps1.
El Chromium incluido que instala Puppeteer no incluye todas las dependencias necesarias (consulte Ejecución de Puppeteer en Docker).
Para resolver esto, instálelos en su .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 se desarrolló inicialmente para poder convertirlo a HTML. Como resultado de esto, muchas de sus herramientas existen dentro del mundo de JavaScript. Por ejemplo, Mermaid solo se implementa en JavaScript, por lo que necesitamos un motor JS para admitirlo. Esto hace que este paquete sea más lento pero también capaz de admitir más funciones que otras soluciones que generan directamente el PDF desde Markdown.