Trabajo con Markdown en Java: resumen de bibliotecas y ejemplos de uso
\n\nMarkdown es un lenguaje de marcado ligero, ampliamente utilizado para formatear texto en documentación, archivos README, blogs y sistemas de gestión de contenido. En Java existen varias bibliotecas maduras que permiten analizar Markdown, convertirlo a HTML y realizar operaciones inversas. En este artículo, revisaremos en detalle las tres bibliotecas más populares: CommonMark, Flexmark y Pegdown, y proporcionaremos ejemplos prácticos de su uso.
\n\n1. CommonMark (org.commonmark:commonmark)
\n\nCommonMark es un estándar estricto de Markdown que elimina las ambigüedades de la especificación original. La biblioteca commonmark-java es la implementación de referencia de este estándar. Es ligera, rápida y admite extensiones (tablas, tachado, enlaces automáticos).
Configuración (Maven):
\n<dependency>\n <groupId>org.commonmark</groupId>\n <artifactId>commonmark</artifactId>\n <version>0.21.0</version>\n</dependency>\n\nEjemplo de análisis de Markdown a HTML:
\nimport org.commonmark.node.*;\nimport org.commonmark.parser.Parser;\nimport org.commonmark.renderer.html.HtmlRenderer;\n\npublic class CommonMarkExample {\n public static void main(String[] args) {\n String markdown = "# Título\\n\\nEste es texto en **negrita** y *cursiva*.\\n\\n- Elemento 1\\n- Elemento 2";\n\n Parser parser = Parser.builder().build();\n Node document = parser.parse(markdown);\n\n HtmlRenderer renderer = HtmlRenderer.builder().build();\n String html = renderer.render(document);\n\n System.out.println(html);\n }\n}\n\nResultado de la ejecución:
\n<h1>Título</h1>\n<p>Este es texto en <strong>negrita</strong> y <em>cursiva</em>.</p>\n<ul>\n<li>Elemento 1</li>\n<li>Elemento 2</li>\n</ul>\n\nPara agregar extensiones (por ejemplo, tablas), use:
\nimport org.commonmark.ext.gfm.tables.TablesExtension;\n\nParser parser = Parser.builder()\n .extensions(List.of(TablesExtension.create()))\n .build();\n\n2. Flexmark (com.vladsch.flexmark)
\n\nFlexmark es una biblioteca de alto rendimiento para trabajar con Markdown que admite múltiples extensiones: tablas GFM, notas al pie, atributos, tipografía, resaltado de sintaxis de código y mucho más. Es completamente personalizable y adecuada para proyectos complejos.
\n\nConfiguración (Maven):
\n<dependency>\n <groupId>com.vladsch.flexmark</groupId>\n <artifactId>flexmark-all</artifactId>\n <version>0.64.8</version>\n</dependency>\n\nEjemplo de conversión de Markdown a HTML con tablas:
\nimport com.vladsch.flexmark.html.HtmlRenderer;\nimport com.vladsch.flexmark.parser.Parser;\nimport com.vladsch.flexmark.util.data.MutableDataSet;\nimport com.vladsch.flexmark.ext.tables.TablesExtension;\n\nimport java.util.Arrays;\n\npublic class FlexmarkExample {\n public static void main(String[] args) {\n MutableDataSet options = new MutableDataSet();\n options.set(Parser.EXTENSIONS, Arrays.asList(TablesExtension.create()));\n\n Parser parser = Parser.builder(options).build();\n HtmlRenderer renderer = HtmlRenderer.builder(options).build();\n\n String markdown = "| Columna 1 | Columna 2 |\\n|-----------|-----------|\\n| Celda 1 | Celda 2 |";\n\n String html = renderer.render(parser.parse(markdown));\n System.out.println(html);\n }\n}\n\nFlexmark también permite extraer metadatos (YAML front matter), convertir a LaTeX y trabajar con el árbol AST.
\n\n<También en la biblioteca
Planificador de tareas Java: Quartz Scheduler — guía completa
Serialización de objetos en C++: bibliotecas, métodos y ejemplos de código
Exposed para Kotlin: guía completa con ejemplos
Internacionalización (i18n) en C++: guía completa