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

徽标不会显示在thymleaf html模板中,尤其是在下载pdf文件时

司徒斌
2023-03-14

我正在使用胸腺叶html模板在Spring启动中使用java生成pdf。徽标和图像未加载。它会抛出错误。请参阅下面附加的代码和错误。

注意:但是图像正在加载用于预览和打印界面。仅用于下载,我面临一个问题。文件位置:user:/src/main/Resources/静态/图像$lslogo.pnguser-image-2.jpg

//代码

<div class="logo">
   <img th:src="@{/images/logo.png}" />
</div> 
   <img class="profilepic" th:src="@{/images/user-image-2.jpg}">

//生成pdf的代码

 public File generatePdf(String id) throws Exception {
        Context context = initProfileContext(id);
        String html = loadAndFillTemplate(context);
        return renderPdf(id, html);
    }

    private File renderPdf(String id, String html) throws Exception {
        File file = File.createTempFile("profile_" + id, ".pdf");
        OutputStream outputStream = new FileOutputStream(file);
        ITextRenderer renderer = new ITextRenderer(20f * 4f / 3f, 20);
        renderer.setDocumentFromString(html);
        renderer.layout();
        renderer.createPDF(outputStream);
        outputStream.close();
        file.deleteOnExit();
        return file;
    }

    private Context initProfileContext(String id) {
        Context context = new Context();
        context.setVariable("profile", profileService.findById(id));
        return context;
    }

    private String loadAndFillTemplate(Context context) {
        return templateEngine.process("profile", context);
    }

//错误

2020-10-29 16:53:13.799 ERROR 26176 --- [nio-5555-exec-2] org.thymeleaf.TemplateEngine             : [THYMELEAF][http-nio-5555-exec-2] Exception processing template "profile": Link base "/images/logo.png" cannot be context relative (/...) unless the context used for executing the engine implements the org.thymeleaf.context.IWebContext interface (template: "profile" - line 66, col 6)

org.thymeleaf.exceptions.TemplateProcessingException: Link base "/images/logo.png" cannot be context relative (/...) unless the context used for executing the engine implements the org.thymeleaf.context.IWebContext interface (template: "profile" - line 66, col 6)
        at org.thymeleaf.linkbuilder.StandardLinkBuilder.computeContextPath(StandardLinkBuilder.java:493) ~[thymeleaf-3.0.11.RELEASE.jar:3.0.11.RELEASE]
        at org.thymeleaf.linkbuilder.StandardLinkBuilder.buildLink(StandardLinkBuilder.java:126) ~[thymeleaf-3.0.11.RELEASE.jar:3.0.11.RELEASE]
        at org.thymeleaf.context.AbstractEngineContext.buildLink(AbstractEngineContext.java:167) ~[thymeleaf-3.0.11.RELEASE.jar:3.0.11.RELEASE]
        at org.thymeleaf.standard.expression.LinkExpression.executeLinkExpression(LinkExpression.java:290) ~[thymeleaf-3.0.11.RELEASE.jar:3.0.11.RELEASE]
        at org.thymeleaf.standard.expression.SimpleExpression.executeSimple(SimpleExpression.java:85) ~[thymeleaf-3.0.11.RELEASE.jar:3.0.11.RELEASE]
        at org.thymeleaf.standard.expression.Expression.execute(Expression.java:109) ~[thymeleaf-3.0.11.RELEASE.jar:3.0.11.RELEASE]
        at org.thymeleaf.standard.expression.Expression.execute(Expression.java:138) ~[thymeleaf-3.0.11.RELEASE.jar:3.0.11.RELEASE]
        at org.thymeleaf.standard.processor.AbstractStandardExpressionAttributeTagProcessor.doProcess(AbstractStandardExpressionAttributeTagProcessor.java:144) ~[thymeleaf-3.0.11.RELEASE.jar:3.0.11.RELEASE]
        at org.thymeleaf.processor.element.AbstractAttributeTagProcessor.doProcess(AbstractAttributeTagProcessor.java:74) ~[thymeleaf-3.0.11.RELEASE.jar:3.0.11.RELEASE]
        at org.thymeleaf.processor.element.AbstractElementTagProcessor.process(AbstractElementTagProcessor.java:95) ~[thymeleaf-3.0.11.RELEASE.jar:3.0.11.RELEASE]
        at org.thymeleaf.util.ProcessorConfigurationUtils$ElementTagProcessorWrapper.process(ProcessorConfigurationUtils.java:633) ~[thymeleaf-3.0.11.RELEASE.jar:3.0.11.RELEASE]
        at org.thymeleaf.engine.ProcessorTemplateHandler.handleStandaloneElement(ProcessorTemplateHandler.java:918) ~[thymeleaf-3.0.11.RELEASE.jar:3.0.11.RELEASE]
        at org.thymeleaf.engine.StandaloneElementTag.beHandled(StandaloneElementTag.java:228) ~[thymeleaf-3.0.11.RELEASE.jar:3.0.11.RELEASE]
        at org.thymeleaf.engine.TemplateModel.process(TemplateModel.java:136) ~[thymeleaf-3.0.11.RELEASE.jar:3.0.11.RELEASE]
        at org.thymeleaf.engine.TemplateManager.parseAndProcess(TemplateManager.java:592) ~[thymeleaf-3.0.11.RELEASE.jar:3.0.11.RELEASE]
        at org.thymeleaf.TemplateEngine.process(TemplateEngine.java:1098) ~[thymeleaf-3.0.11.RELEASE.jar:3.0.11.RELEASE]
        at org.thymeleaf.TemplateEngine.process(TemplateEngine.java:1059) ~[thymeleaf-3.0.11.RELEASE.jar:3.0.11.RELEASE]
        at org.thymeleaf.TemplateEngine.process(TemplateEngine.java:1048) ~[thymeleaf-3.0.11.RELEASE.jar:3.0.11.RELEASE]
        at com.palmtree.matrimony.service.ProfilePdfService.loadAndFillTemplate(ProfilePdfService.java:50) ~[main/:na]
        at com.palmtree.matrimony.service.ProfilePdfService.generatePdf(ProfilePdfService.java:27) ~[main/:na]
org.thymeleaf.exceptions.TemplateProcessingException: Link base "/images/logo.png" cannot be context relative (/...) unless the context used for executing the engine implements the org.thymeleaf.context.IWebContext interface (template: "profile" - line 66, col 6)
        at org.thymeleaf.linkbuilder.StandardLinkBuilder.computeContextPath(StandardLinkBuilder.java:493)
        at com.palmtree.matrimony.controller.ProfileController.download(ProfileController.java:93) ~[main/:na]
        at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:na]
        at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[na:na]
        at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:na]
        at java.base/java.lang.reflect.Method.invoke(Method.java:566) ~[na:na]
        at org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:190) ~[spring-web-5.2.9.RELEASE.jar:5.2.9.RELEASE]
        at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:138) ~[spring-web-5.2.9

共有1个答案

沈琛
2023-03-14

使用Springbootclasspath前缀。

例子:

<img class="profilepic" th:src="@{classpath:images/user-image-2.jpg}">

裁判:https://stackoverflow.com/a/47907375/3427462

 类似资料:
  • 这是我发送电子邮件的PHP代码 我将HTML文件检索为$HTML 原始HTML文件包含CSS,看起来不错,但只显示白色背景的文本。在HTML文件中,我将“替换为”,但它仍然不起作用。

  • 问题内容: 操作系统和服务器信息: CentOS 6.4(最终版) 阿帕奇2.2.15 PHP 5.5.1 我以前安装了php 5.3.x,但决定升级。我首先卸载了php 5.3.x,然后安装了php 5.5.1,但是在安装完成后apache并没有解析php文件,只是下载了它们。我在这里检查了stackoverflow中的类似问题,但到目前为止,它们都没有帮助我。 作为记录,我在httpd.con

  • OS和服务器信息: CentOS 6.4(最终版) 我以前使用过PHP5.3。x已安装,但决定升级。我首先卸载了PHP5.3。然后安装PHP5.5。1但安装完成后,apache没有解析php文件,只是下载了这些文件。我在stackoverflow中检查过类似的问题,但到目前为止没有一个对我有帮助。 为了记录在案,我有以下行在我的httpd.conf和php.conf,应该使php工作,但没有: 我

  • 我有一个关于夏洛克行动吧的问题。在纵向模式下,无论可用空间有多大,ICS都不会在操作栏中的菜单项旁边显示文本。旋转到横向模式会产生预期的行为(图标文本)。如果我从菜单项中删除图标,它将以纵向模式显示文本(仅)。如果有空间,是否可以在纵向模式下显示文本图标?我使用下面的代码将菜单项添加到actionbar中。 提前谢谢。

  • 我正在实现一个ASP api来完成所有Docusign api流(获取登录信息,获取令牌,发送要签名的信封,下载信封文档)。现在我试图在浏览器中显示一个下载的文档,该文档是空白的。我正在从docusign接收文档字节内容,并试图将其呈现在iframe中。 docusign发送的PDF内容如下 更新 如果文档超过1页,则可以看到所有页面,全部为空白······