当前位置: 首页 > 知识库问答 >
问题:

Thymeleaf:使用Spring Boot 2.0.3在线下载PDF时无法访问模板

贲凌
2023-03-14

我正在下载一个带有web应用程序的PDF文件,该应用程序是用Spring Boot 2.0.3开发的,使用Thymeleaf,来自管理部分,受Spring Security保护。在本地,它工作正常,但在网上我遇到了以下错误:

<代码>组织。特里梅莱夫。例外情况。TemplateInputException:Error resolving template“/email/confirmedbooking”,模板可能不存在,或者任何配置的模板解析程序都可能无法访问,其根本原因是

这是控制器:

@GetMapping("/admin/bookings/booking-pdf")
public void generatePdfBooking(@RequestParam Long idbooking, HttpServletResponse response)
                               throws IOException, Exception{

    bookingService.setBookingService(idbooking);
    Booking booking = bookingService.getBooking();
    Guest guest = bookingService.getGuest();

    String idlanguage;
    if(guest.getIdlanguage() != null){
        idlanguage = guest.getIdlanguage();
    } else {idlanguage = "en";}

    Map<String, Object> map = new HashMap<>();
    map.put("booking", booking);
    map.put("guest", guest);

    byte[] data = pdfGenerator.createPdf("/email/confirmedbooking", map, idlanguage);

    pdfGenerator.streamReport(response, data, "id-" + booking.getIdbooking() + ".pdf");
}

这是html页面的摘录:

<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">

<head>
    <link rel="stylesheet" href="/webjars/bootstrap /css/bootstrap.min.css"/>
    <link rel="stylesheet" href="/css/rentalwebs.css"/>
</head>

<body>
    <table style="width:680px" class="table table-borderless">
        <tbody>
            <tr>
                <td>
                    <h2 th:text="${property.name}"></h2>
                </td>
            </tr>
            <tr>
                <td>
                    <span th:text="#{booking.id}"></span>
                    <span th:text="${booking.idbooking}"></span>
                    ....

作为一个模板生成器,我使用org。XHTMLender。pdf。ITextRenderer(飞碟pdf)。

我已经测试过提供不同的. html文件来生成PDF在pdfGenerator.createPdf("/电子邮件/确认预订", map, idLanguage);,但结果总是一样的。

共有1个答案

伯庆
2023-03-14

根据Daniel Mikusa的建议,我已经解决了这个问题,去掉了第一个/from/email/confirmedbooking,代码如下:

byte[] data = pdfGenerator.createPdf("email/confirmedbooking", map, idlanguage);

它似乎没有识别路径,可能是因为双斜杠问题,在这篇文章中已经解释过:使用打包在jar中的Thymeleaf解决Spring Boot模板的错误

 类似资料:
  • 我用和创建了一个web应用程序,如果打开登录页面,然后登录,然后依次进入管理模块或报告模块,一切都很好。 当我在浏览器中键入url(需要进行身份验证,但我可以在自定义筛选器中打开所有权限)时,就会出现proleam,页面加载时没有js和CSS。在调试模式下,我看到意外地被放入路径中,如下所示。如果访问,我就可以获得资源。

  • 我目前正在S3中存储和下载我的Thymeleaf模板。 我使用以下函数从S3检索模板: 执行此操作后,文件将成功下载到所需位置。 但是当试图从FlyingSaucer PDF生成器访问文件时,该文件不存在,尽管它已经在FILE_LOCATION_PATH下载。(我可以打开文件...文件在那里,但函数看不到它) 当我一次又一次地运行程序时,我得到了相同的结果。但是当我停止程序并再次运行它时,一切都正

  • 我试图在我的PDF模板中包含一个字母头,如下所示: 片断/header.html template.html html位于app/src/main/resources/template/pdf/文件夹中。我必须包括css和图像文件与完整的路径(从项目的根),以使它们工作。我尝试包含完整路径的片段(如上),只包含片段/头,但每次都得到相同的错误。 我正在使用 Spring-Boot-Starter-

  • 有人知道为什么会抛出下面的错误吗? TemplateInputException:解析模板“DirectBind”时出错,模板可能不存在,或者任何已配置的模板解析程序都无法访问模板。

  • 我试图使用thymeleaf生成pdf,但问题是在生成pdf时,没有加载css和js等静态资源。如果我将html呈现为网页,则资源会完全加载,但每当我生成pdf时,都不会应用资源。有人知道有没有办法解决这个问题吗? 提前谢谢。

  • 问题内容: 我正在尝试使用以下划线字符开头的键访问字典的元素。例如: 我正在尝试在Django模板中访问它们。显然,我意识到您无法从Django模板访问带下划线的python变量(因为它们在Python中被视为私有),但这是一个dict对象,其中任何不可变对象都是有效键。 我无法使用{{my_dict._source}}访问Django模板中的上述字典,因此我认为Django正在阻止它。准确吗?