Convierte tus documentos Markdown a formato Word (DOCX) de forma sencilla
La conversión de Markdown a DOCX (Microsoft Word) es útil cuando necesitas compartir documentos con personas que trabajan con Word o cuando necesitas un formato editable con formato enriquecido.
Estas son las principales razones para convertir Markdown a DOCX:
La forma más fiable es usar Pandoc:
pandoc archivo.md -o archivo.docxPara usar una plantilla personalizada:
pandoc archivo.md -o archivo.docx --reference-doc=plantilla.docxEstas son algunas herramientas online para convertir Markdown a DOCX:
Estas son algunas aplicaciones de escritorio para convertir Markdown a DOCX:
// Usando html-docx-js
import { marked } from 'marked';
import htmlDocx from 'html-docx-js';
const html = marked.parse(markdownText);
const docx = htmlDocx.asBlob(html);La forma más potente de personalizar el DOCX generado por Pandoc es usar un documento de referencia. Este es un archivo .docx que contiene los estilos que quieres aplicar al documento final.
Paso 1: Genera el documento de referencia base de Pandoc:
pandoc -o referencia.docx --print-default-data-file reference.docxPaso 2: Abre referencia.docx en Microsoft Word o LibreOffice Writer y modifica los estilos:
>).No cambies el texto del documento de referencia; solo modifica los estilos desde el panel de estilos de Word.
Paso 3: Usa el documento de referencia al convertir:
pandoc archivo.md -o archivo.docx --reference-doc=referencia.docxTodos los documentos generados con esta referencia tendrán los mismos estilos corporativos, colores y tipografías.
# Combinar metadatos, contenido y estilos corporativos
pandoc archivo.md -o informe.docx \
--reference-doc=estilos-empresa.docx \
--toc \
--toc-depth=2 \
--number-sections \
-V lang=esSi necesitas convertir varios archivos Markdown a DOCX de forma regular, puedes crear un script que automatice el proceso.
#!/bin/bash
# convertir-a-docx.sh
# Convierte todos los archivos .md de una carpeta a .docx
DIRECTORIO_ENTRADA="./documentos"
DIRECTORIO_SALIDA="./docx"
REFERENCIA="./estilos/referencia.docx"
# Crear directorio de salida si no existe
mkdir -p "$DIRECTORIO_SALIDA"
# Recorrer todos los archivos .md
for archivo in "$DIRECTORIO_ENTRADA"/*.md; do
nombre=$(basename "$archivo" .md)
echo "Convirtiendo: $nombre.md -> $nombre.docx"
pandoc "$archivo" -o "$DIRECTORIO_SALIDA/$nombre.docx" \
--reference-doc="$REFERENCIA" \
--toc \
--number-sections
if [ $? -eq 0 ]; then
echo " ✓ Completado"
else
echo " ✗ Error al convertir $nombre.md"
fi
done
echo "Conversión finalizada."Hazlo ejecutable y úsalo:
chmod +x convertir-a-docx.sh
./convertir-a-docx.shSi prefieres JavaScript, puedes usar el paquete node-pandoc o ejecutar Pandoc directamente con child_process:
import { execSync } from 'child_process';
import { readdirSync } from 'fs';
import path from 'path';
const dirEntrada = './documentos';
const dirSalida = './docx';
const referencia = './estilos/referencia.docx';
const archivos = readdirSync(dirEntrada).filter(f => f.endsWith('.md'));
for (const archivo of archivos) {
const nombre = path.basename(archivo, '.md');
const entrada = path.join(dirEntrada, archivo);
const salida = path.join(dirSalida, `${nombre}.docx`);
console.log(`Convirtiendo: ${archivo}`);
try {
execSync(`pandoc "${entrada}" -o "${salida}" --reference-doc="${referencia}"`);
console.log(` Completado: ${nombre}.docx`);
} catch (error) {
console.error(` Error al convertir ${archivo}: ${error.message}`);
}
}| Limitación | Descripción | Solución |
|---|---|---|
| Estilos limitados | Markdown tiene menos opciones de formato que Word | Usa un --reference-doc con los estilos que necesites predefinidos |
| Imágenes | Las rutas relativas pueden fallar | Usa rutas absolutas o ejecuta Pandoc desde el directorio donde están las imágenes |
| Tablas complejas | Celdas combinadas, anchos personalizados no se soportan | Usa tablas de Pandoc con sintaxis de grid tables para más control |
| HTML incrustado | El HTML dentro de Markdown se pierde en la conversión a DOCX | Usa sintaxis nativa de Pandoc Markdown en lugar de HTML |
| Fórmulas matemáticas | LaTeX math puede no renderizarse correctamente | Pandoc convierte fórmulas a OMML (formato nativo de Word) con --mathml |
| Colores de texto | Markdown no tiene sintaxis para colores | Usa el documento de referencia para definir estilos con colores, o añade spans con atributos de Pandoc: [texto rojo]{custom-style="Rojo"} |
| Saltos de página | No hay forma estándar en Markdown | Pandoc soporta \newpage que se traduce en un salto de página en DOCX |
Para tablas más complejas con anchos de columna personalizados, puedes usar la sintaxis de grid tables de Pandoc:
+---------------+---------------+--------------------+
| Fruta | Precio | Ventajas |
+===============+===============+====================+
| Manzana | 1.50 € | Rica en fibra |
| | | y vitamina C |
+---------------+---------------+--------------------+
| Plátano | 0.80 € | Alto en potasio |
+---------------+---------------+--------------------+Estas tablas permiten celdas con múltiples líneas de texto y se convierten correctamente a DOCX.
👋 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.
Sígueme en Twitter para estar al día con mi contenido. 😊