Ошибка при обработке templetEngine в тимьялисте при попытке создать PDF - PullRequest
0 голосов
/ 29 ноября 2018

Я пытаюсь сгенерировать 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

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...