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. Si lo que necesitas es lo contrario, mostrar un PDF ya existente dentro de un documento, consulta cómo insertar un PDF en Markdown.

¿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. 😊