Convertir Markdown a PDF

Convierte tus documentos Markdown a PDF de forma online y gratuita

Conversor de Markdown a PDF

Escribe o pega tu Markdown y descárgalo como PDF con un solo clic.

Cargando conversor...

La conversión de Markdown a PDF es una de las más demandadas, ya que el formato PDF es universalmente aceptado para compartir documentos con formato fijo.

¿Por qué convertir Markdown a PDF?

Estas son las principales razones para convertir Markdown a PDF:

  • Compartir documentos: El PDF mantiene el formato en cualquier dispositivo.
  • Impresión: Ideal para documentos que se van a imprimir.
  • Documentación formal: Informes, propuestas y documentos oficiales.
  • Currículums: Crear CVs profesionales con Markdown.

Cómo convertir Markdown a PDF

Herramientas online

Estas son algunas herramientas online para convertir Markdown a PDF:

  • Dillinger: Permite exportar directamente a PDF.
  • StackEdit: Exportación a PDF desde el editor.
  • md2pdf: Convertidor online dedicado.

Aplicaciones de escritorio

Estas son algunas aplicaciones de escritorio para convertir Markdown a PDF:

  • Typora: Exportación directa a PDF con estilos personalizables.
  • VS Code: Con extensiones como "Markdown PDF".
  • Obsidian: Con plugins de la comunidad para exportar a PDF.
  • Pandoc: Herramienta de línea de comandos muy versátil.

Con Pandoc

pandoc archivo.md -o archivo.pdf

Para personalizar el estilo:

pandoc archivo.md -o archivo.pdf --pdf-engine=xelatex -V geometry:margin=2cm

Con librerías JavaScript

Si necesitas hacerlo programáticamente:

// Usando marked + html2pdf.js
import { marked } from 'marked';
import html2pdf from 'html2pdf.js';

const html = marked.parse(markdownText);
html2pdf().from(html).save('documento.pdf');

Personalizar el aspecto del PDF

Con html2pdf.js (CSS en el navegador)

Si usas html2pdf.js en el navegador, puedes aplicar estilos CSS al HTML intermedio antes de generar el PDF:

import { marked } from 'marked';
import html2pdf from 'html2pdf.js';

const markdownText = '# Mi documento\n\nContenido del documento...';
const html = marked.parse(markdownText);

// Envolver el HTML con estilos personalizados
const htmlConEstilos = `
<style>
  body {
    font-family: 'Georgia', serif;
    line-height: 1.8;
    color: #333;
    max-width: 700px;
    margin: 0 auto;
  }
  h1 {
    color: #1a1a2e;
    border-bottom: 2px solid #e0e0e0;
    padding-bottom: 0.5em;
  }
  h2 {
    color: #16213e;
    margin-top: 2em;
  }
  code {
    background: #f4f4f4;
    padding: 2px 6px;
    border-radius: 3px;
    font-size: 0.9em;
  }
  pre {
    background: #2d2d2d;
    color: #f8f8f2;
    padding: 1em;
    border-radius: 5px;
    overflow-x: auto;
  }
  blockquote {
    border-left: 4px solid #3498db;
    margin-left: 0;
    padding-left: 1em;
    color: #555;
  }
</style>
${html}
`;

const opciones = {
  margin:       10,
  filename:     'documento.pdf',
  image:        { type: 'jpeg', quality: 0.98 },
  html2canvas:  { scale: 2 },
  jsPDF:        { unit: 'mm', format: 'a4', orientation: 'portrait' }
};

html2pdf().set(opciones).from(htmlConEstilos).save();

Con Pandoc (plantillas y variables de LaTeX)

Pandoc genera PDFs a través de LaTeX, lo que te da un control tipográfico profesional. Puedes personalizar casi cualquier aspecto del documento usando variables:

pandoc archivo.md -o archivo.pdf \
  --pdf-engine=xelatex \
  -V geometry:margin=2.5cm \
  -V fontsize=12pt \
  -V mainfont="Arial" \
  --highlight-style=tango

Explicación de cada parámetro:

  • --pdf-engine=xelatex: Usa XeLaTeX como motor, lo que permite usar cualquier fuente del sistema (necesario para fuentes como Arial o Times New Roman).
  • -V geometry:margin=2.5cm: Establece los márgenes del documento.
  • -V fontsize=12pt: Tamaño de fuente base.
  • -V mainfont="Arial": Fuente principal del texto (requiere XeLaTeX).
  • --highlight-style=tango: Estilo de resaltado para bloques de código (opciones: pygments, tango, espresso, zenburn, kate, monochrome, breezedark, haddock).

Más variables útiles de Pandoc

pandoc archivo.md -o archivo.pdf \
  --pdf-engine=xelatex \
  -V geometry:margin=2.5cm \
  -V fontsize=12pt \
  -V mainfont="Noto Serif" \
  -V sansfont="Noto Sans" \
  -V monofont="Fira Code" \
  -V linestretch=1.5 \
  -V colorlinks=true \
  -V linkcolor=blue \
  -V urlcolor=blue \
  -V lang=es \
  --toc \
  --toc-depth=3 \
  --number-sections

Variables adicionales:

  • linestretch: Interlineado (1.5 es muy legible para documentos largos).
  • colorlinks y linkcolor: Colorear los enlaces en lugar de recuadrarlos.
  • lang=es: Activar la localización en español (guiones de separación, etiquetas como "Tabla de contenidos").
  • --toc: Generar tabla de contenidos automática.
  • --number-sections: Numerar los encabezados (1, 1.1, 1.2, etc.).

Convertir Markdown a PDF con Node.js (ejemplo completo)

Este ejemplo crea un botón de descarga en el navegador que convierte Markdown a PDF al hacer clic:

<!DOCTYPE html>
<html lang="es">
<head>
  <meta charset="UTF-8">
  <title>Markdown a PDF</title>
  <script src="https://cdn.jsdelivr.net/npm/marked/marked.min.js"></script>
  <script src="https://cdnjs.cloudflare.com/ajax/libs/html2pdf.js/0.10.1/html2pdf.bundle.min.js"></script>
</head>
<body>

<textarea id="editor" rows="15" cols="80" placeholder="Escribe tu Markdown aquí...">
# Mi documento

Un párrafo con negrita y *cursiva*.

## Sección 1

- Elemento 1
- Elemento 2
- Elemento 3

## Sección 2

> Una cita importante.

```javascript
console.log("Hola mundo");
```
</textarea>

<br>
<button id="btn-descargar">Descargar como PDF</button>

<script>
document.getElementById('btn-descargar').addEventListener('click', function() {
  const markdown = document.getElementById('editor').value;
  const html = marked.parse(markdown);

  // Crear un contenedor temporal con estilos
  const contenedor = document.createElement('div');
  contenedor.innerHTML = `
    <style>
      * { font-family: 'Helvetica', 'Arial', sans-serif; }
      h1 { font-size: 28px; color: #222; }
      h2 { font-size: 22px; color: #333; margin-top: 1.5em; }
      p { line-height: 1.7; color: #444; }
      code { background: #f0f0f0; padding: 2px 5px; border-radius: 3px; }
      pre { background: #282c34; color: #abb2bf; padding: 16px; border-radius: 6px; }
      blockquote { border-left: 3px solid #3498db; padding-left: 12px; color: #666; }
    </style>
    ${html}
  `;

  const opciones = {
    margin: 15,
    filename: 'documento.pdf',
    image: { type: 'jpeg', quality: 0.98 },
    html2canvas: { scale: 2, useCORS: true },
    jsPDF: { unit: 'mm', format: 'a4', orientation: 'portrait' },
    pagebreak: { mode: ['avoid-all', 'css', 'legacy'] }
  };

  html2pdf().set(opciones).from(contenedor).save();
});
</script>

</body>
</html>

Alternativas online

Si no quieres instalar nada en tu equipo, hay varias herramientas web que convierten Markdown a PDF directamente en el navegador:

  • Dillinger: Editor de Markdown online completo. Permite escribir Markdown con vista previa en tiempo real y exportar directamente a PDF, HTML y documentos con estilos. Soporta sincronización con GitHub, Dropbox y Google Drive.

  • StackEdit: Editor en el navegador con soporte para Markdown extendido (KaTeX para matemáticas, diagramas UML, partituras musicales). Exporta a PDF a través de su integración con Pandoc. También permite publicar directamente en Blogger, WordPress y GitHub.

  • Markdown to PDF: Convertidor dedicado exclusivamente a la conversión de Markdown a PDF. Sin registro, sin instalación. Pega tu Markdown o sube un archivo .md y descarga el PDF al instante.

  • md2pdf: Herramienta ligera y rápida que convierte Markdown a PDF con un diseño limpio. Incluye soporte para resaltado de sintaxis en bloques de código.

Consejos para una buena conversión

Ten en cuenta estos consejos para obtener mejores resultados:

  • Usa encabezados correctamente: Ayudan a estructurar el PDF y generar tablas de contenidos automáticas.
  • Cuida las imágenes: Usa URLs absolutas para que se muestren correctamente. Para Pandoc, las rutas relativas se resuelven desde el directorio donde ejecutas el comando.
  • Prueba con tablas: No todos los convertidores manejan bien las tablas complejas. Pandoc con LaTeX ofrece los mejores resultados.
  • Revisa los saltos de página: En Pandoc puedes usar \newpage para forzar un salto de página. En html2pdf.js usa la clase CSS html2pdf__page-break.
  • Incluye metadatos YAML: Pandoc lee metadatos del archivo Markdown para usar como título, autor y fecha en el PDF:
---
title: "Mi documento"
author: "Tu nombre"
date: "2024-01-15"
---

👋 Hola! Soy Edu, me encanta crear cosas y he redactado este tutorial. Si te ha resultado útil, el mayor favor que me podrías hacer es el de compatirlo en Twitter.

para estar al día con mi contenido. 😊