Работа с Markdown в Java: библиотеки, парсинг и конвертация

Онлайн-тренажер Python для начинающих

Изучайте Python легко и без перегрузки теорией. Решайте практические задачи с автоматической проверкой, получайте подсказки на русском языке и пишите код прямо в браузере — без необходимости что-либо устанавливать.

Начать курс

Работа с Markdown в Java: библиотеки, инструменты и примеры кода

Markdown — это легковесный язык разметки, который широко используется для форматирования текста в документации, README-файлах, сообщениях на форумах и блогах. В Java существует несколько мощных библиотек, позволяющих парсить Markdown, конвертировать его в HTML, PDF или другие форматы, а также создавать интерактивные редакторы. В этой статье мы подробно рассмотрим основные инструменты, их возможности и приведем практические примеры кода.

Зачем нужен парсинг Markdown в Java?

Java остается одним из самых популярных языков для серверной разработки. Интеграция Markdown в Java-приложения позволяет:

  • Автоматически генерировать HTML-контент из Markdown-файлов (например, для документации).
  • Создавать WYSIWYG-редакторы с поддержкой Markdown.
  • Импортировать и экспортировать данные в формате Markdown.
  • Реализовывать безопасное отображение пользовательского контента (санитизация HTML).

Основные библиотеки для работы с Markdown в Java

1. commonmark-java

Официальная реализация спецификации CommonMark для Java. Эта библиотека отличается высокой производительностью, строгим соответствием стандарту и минимальным размером. Она идеально подходит для проектов, где требуется надежный и предсказуемый парсинг.

Установка (Maven):

<dependency>
    <groupId>org.commonmark</groupId>
    <artifactId>commonmark</artifactId>
    <version>0.21.0</version>
</dependency>

Пример использования:

import org.commonmark.node.*;
import org.commonmark.parser.Parser;
import org.commonmark.renderer.html.HtmlRenderer;

public class CommonMarkExample {
    public static void main(String[] args) {
        Parser parser = Parser.builder().build();
        HtmlRenderer renderer = HtmlRenderer.builder().build();

        String markdown = "# Заголовок\n\nЭто **жирный** текст и *курсив*.";
        Node document = parser.parse(markdown);
        String html = renderer.render(document);

        System.out.println(html);
        // Вывод: <h1>Заголовок</h1>
        // <p>Это <strong>жирный</strong> текст и <em>курсив</em>.</p>
    }
}

2. Flexmark-java

Flexmark — это расширяемая библиотека, которая поддерживает CommonMark, GFM (GitHub Flavored Markdown) и множество дополнительных расширений (таблицы, сноски, автоссылки, emoji и др.). Она идеально подходит для сложных проектов с нестандартными требованиями.

Установка (Gradle):

implementation 'com.vladsch.flexmark:flexmark-all:0.64.8'

Пример с расширением таблиц:

import com.vladsch.flexmark.html.HtmlRenderer;
import com.vladsch.flexmark.parser.Parser;
import com.vladsch.flexmark.ext.tables.TablesExtension;
import com.vladsch.flexmark.util.data.MutableDataSet;

import java.util.Arrays;

public class FlexmarkExample {
    public static void main(String[] args) {
        MutableDataSet options = new MutableDataSet();
        options.set(Parser.EXTENSIONS, Arrays.asList(TablesExtension.create()));

        Parser parser = Parser.builder(options).build();
        HtmlRenderer renderer = HtmlRenderer.builder(options).build();

        String markdown = "| Колонка 1 | Колонка 2 |\n|----------|----------|\n| Ячейка 1 | Ячейка 2 |";
        String html = renderer.render(parser.parse(markdown));

        System.out.println(html);
        // Вывод: <table>...</table>
    }
}

3. Pegdown

Одна из старейших библиотек для Java. Pegdown использует PEG-парсер и поддерживает множество расширений, но в последние годы уступает по производительности commonmark-java и flexmark. Рекомендуется для поддержки легаси-проектов.

Пример:

import org.pegdown.PegDownProcessor;

public class PegdownExample {
    public static void main(String[] args) {
        PegDownProcessor processor = new PegDownProcessor();
        String html = processor.markdownToHtml("## Подзаголовок\n\n- Элемент списка");
        System.out.println(html);
    }
}

Дополнительные инструменты и возможности

Конвертация Markdown в PDF

Для преобразования Markdown в PDF можно использовать комбинацию библиотек: сначала конвертировать Markdown в HTML (например, через commonmark-java), а затем преобразовать HTML в PDF с помощью Flying Saucer или iText.

// Шаг 1: Markdown -> HTML (commonmark-java)
String html = render                    

Рекомендаций