Ошибка в обработке тимелеафа храма при попытке создания PDF-файла

Я пытаюсь сгенерировать PDF-файл из шаблона тимелеафа, но при выполнении метода templateEngine.process () получаю сообщение об ошибке. Ошибка выглядит следующим образом:

org.thymeleaf.exceptions.TemplateProcessingException: разрешение ресурса с помощью ServletContext с помощью org.thymeleaf.resourceresolver.ServletContextResourceResolver может выполняться только тогда, когда контекст реализует org.thymeleaf.context.IWebContext

Пожалуйста, помогите. Заранее спасибо.

Метод контроллера

  @Autowired
  TemplateEngine templateEngine;

 @RequestMapping(value = "/print-pdf",method = RequestMethod.GET, produces = "application/pdf")
    public ResponseEntity<InputStreamResource> view() throws IOException {

        UserDto userDto = userService.findUserById(100689);

        ByteArrayInputStream bis=null;
        try {
            bis = pdfGenerator.createAndViewPdf("html_to_print",userDto);

        } catch (Exception e) {
            e.printStackTrace();
        }

        HttpHeaders headers = new HttpHeaders();
        headers.add("Content-Disposition", "inline; filename=user.pdf");

        return ResponseEntity
                .ok()
                .headers(headers)
                .contentType(MediaType.parseMediaType("application/pdf"))
                .body(new InputStreamResource(bis));

    }

Метод обслуживания PDF

public ByteArrayInputStream createAndViewPdf(String templateName, UserDto userDto) throws Exception {

        ByteOutputStream os = new ByteOutputStream();
        ITextRenderer renderer = new ITextRenderer();
        Context ctx = new Context();
        ctx.setVariable("userDto",userDto);


        String processedHtml = templateEngine.process(templateName, ctx);

        renderer.setDocumentFromString(processedHtml);
        renderer.layout();
        renderer.createPDF(os);

        byte[] pdfAsBytes = os.getBytes();
        os.close();


        return new ByteArrayInputStream(pdfAsBytes);
    }

Конфигурация TempletEngine на основе XML

<bean id = "templateEngine" class = "org.thymeleaf.spring4.SpringTemplateEngine">
        <property name = "dialects">
            <set>
                <bean class = "org.thymeleaf.spring4.dialect.SpringStandardDialect" />
            </set>
        </property>
        <property name = "templateResolvers">
            <set>

                <bean
                      class = "org.thymeleaf.templateresolver.ServletContextTemplateResolver">
                    <property name = "prefix" value = "/WEB-INF/views/user/" />
                    <property name = "suffix" value = ".html" />
                    <property name = "templateMode" value = "HTML5" />
                    <property name = "characterEncoding" value = "UTF-8" />
                    <property name = "cacheable" value = "false" />
                </bean>

            </set>
        </property>
    </bean>

    <bean class = "org.thymeleaf.spring4.view.ThymeleafViewResolver">
        <property name = "templateEngine" ref = "templateEngine"/>
        <property name = "characterEncoding" value = "UTF-8" />
    </bean>

Зависимость добавлена ​​в pom.xml

<dependency>
      <groupId>org.xhtmlrenderer</groupId>
      <artifactId>flying-saucer-pdf</artifactId>
      <version>9.0.9</version>
  </dependency>
  <dependency>
      <groupId>org.xhtmlrenderer</groupId>
      <artifactId>flying-saucer-pdf-itext5</artifactId>
      <version>9.1.16</version>
  </dependency>

Folder structure

Ошибка в обработке тимелеафа храма при попытке создания PDF-файла

какое значение templateName вы передаете во время выполнения в createAndViewPdf ()?

stacker 29.11.2018 11:25

значение - "html_to_print", которое является именем файла html (html_to_print.html). Я не передаю расширение .html, как я ранее объявил префикс и суффикс внутри TempletResolver

Abdullah Al Mamun 29.11.2018 11:31

вы можете добавить структуру ресурсов? это может помочь

stacker 29.11.2018 11:40

Я отредактировал пост. Проверьте структуру @slimane

Abdullah Al Mamun 29.11.2018 12:11

Вероятно, это не имеет ничего общего с генерацией PDF. Фактически, вам, вероятно, следует реорганизовать код, который создает HTML, в отдельный метод и посмотреть, получите ли вы ту же ошибку, не вызывая код PDF.

vphilipnyc 29.11.2018 17:36
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
0
5
108
0

Другие вопросы по теме