Я пытаюсь сгенерировать 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
значение - "html_to_print", которое является именем файла html (html_to_print.html). Я не передаю расширение .html, как я ранее объявил префикс и суффикс внутри TempletResolver
вы можете добавить структуру ресурсов? это может помочь
Я отредактировал пост. Проверьте структуру @slimane
Вероятно, это не имеет ничего общего с генерацией PDF. Фактически, вам, вероятно, следует реорганизовать код, который создает HTML, в отдельный метод и посмотреть, получите ли вы ту же ошибку, не вызывая код PDF.




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