«1. Обзор

В этом уроке мы научимся создавать PDF-файлы, используя Thymeleaf в качестве механизма шаблонов, на быстром практическом примере.

2. Зависимости Maven

Во-первых, давайте добавим нашу зависимость от Thymeleaf:

<dependency>
    <groupId>org.thymeleaf</groupId>
    <artifactId>thymeleaf</artifactId>
    <version>3.0.11.RELEASE</version>
</dependency>

Thymeleaf сам по себе является просто механизмом шаблонов, и он не может генерировать PDF-файлы самостоятельно. Для этого мы добавим в наш файл pom.xml «летающую тарелку»:

<dependency>
    <groupId>org.xhtmlrenderer</groupId>
    <artifactId>flying-saucer-pdf</artifactId>
    <version>9.1.20</version>
</dependency>

3. Генерация PDF-файлов

Далее давайте создадим простой HTML-шаблон Thymeleaf — thymeleaf_template.html:

<html xmlns:th="http://www.thymeleaf.org">
  <body>
    <h3 style="text-align: center; color: green">
      <span th:text="'Welcome to ' + ${to} + '!'"></span>
    </h3>
  </body>
</html>

Затем мы создадим простую функцию – parseThymeleafTemplate – которая будет анализировать наш шаблон и возвращать строку HTML:

private String parseThymeleafTemplate() {
    ClassLoaderTemplateResolver templateResolver = new ClassLoaderTemplateResolver();
    templateResolver.setSuffix(".html");
    templateResolver.setTemplateMode(TemplateMode.HTML);

    TemplateEngine templateEngine = new TemplateEngine();
    templateEngine.setTemplateResolver(templateResolver);

    Context context = new Context();
    context.setVariable("to", "Baeldung");

    return templateEngine.process("thymeleaf_template", context);
}

Наконец, давайте реализуем простую функцию, которая получает ранее сгенерированный HTML в качестве входных данных и записать PDF в нашу домашнюю папку:

public void generatePdfFromHtml(String html) {
    String outputFolder = System.getProperty("user.home") + File.separator + "thymeleaf.pdf";
    OutputStream outputStream = new FileOutputStream(outputFolder);

    ITextRenderer renderer = new ITextRenderer();
    renderer.setDocumentFromString(html);
    renderer.layout();
    renderer.createPDF(outputStream);

    outputStream.close();
}

После запуска нашего кода мы заметим файл с именем thymeleaf.pdf в домашнем каталоге нашего пользователя, который выглядит следующим образом: ~~ ~ Как мы видим, текст зеленого цвета и выровнен по центру, как определено в нашем встроенном CSS. Это чрезвычайно мощный инструмент для настройки наших PDF-файлов.

Мы должны иметь в виду, что Thymeleaf полностью отделен от Flying Saucer, а это означает, что мы можем использовать любой другой механизм шаблонов для создания PDF-файлов, такой как Apache FreeMarker.

4. Заключение

В этом кратком руководстве мы узнали, как легко создавать PDF-файлы, используя Thymeleaf в качестве механизма шаблонов.

Как всегда, код доступен на GitHub.

«