使用Thymeleaf-没有js的html模板导出为pdf

html模板

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

<head>
    <title>PDF Template</title>
</head>
<body>
<h1>User Information</h1>
<p>Name: <span th:text="${user.name}"></span></p>
[[${user.getName()}]]
[[${user.name}]]111
<p>Email: <span th:text="${user.email}"></span></p>
</body>
</html>

依赖

java 复制代码
        <!-- thymeleaf for html to pdf -->
        <dependency>
            <groupId>org.thymeleaf</groupId>
            <artifactId>thymeleaf</artifactId>
            <version>${org.thymeleaf.version}</version>
            <scope>compile</scope>
        </dependency>

PDFGenerator

java 复制代码
import org.springframework.stereotype.Component;
import org.thymeleaf.TemplateEngine;
import org.thymeleaf.context.Context;
import org.thymeleaf.templateresolver.ClassLoaderTemplateResolver;
import org.xhtmlrenderer.pdf.ITextRenderer;

import java.io.FileOutputStream;
import java.io.OutputStream;

@Component
public class PdfGenerator {

    public PdfGenerator() {

    }

    public void generatePdfFromTemplate(User user, String templatePath, String outputPath) {
        try (OutputStream outputStream = new FileOutputStream(outputPath)) {
            Context context = new Context();
            context.setVariable("user", user);
            TemplateEngine templateEngine = new TemplateEngine();
            // 创建并配置模板解析器
            ClassLoaderTemplateResolver templateResolver = new ClassLoaderTemplateResolver();
            templateResolver.setPrefix("templates/");
            templateResolver.setSuffix(".html");
            templateResolver.setTemplateMode("HTML");
                // 将模板解析器设置到TemplateEngine中
            templateEngine.setTemplateResolver(templateResolver);
            String htmlContent = templateEngine.process(templatePath, context);

            ITextRenderer renderer = new ITextRenderer();
            renderer.setDocumentFromString(htmlContent);
            renderer.layout();
            renderer.createPDF(outputStream);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

使用

java 复制代码
        String templatePath = "template.html";
        String outputPath = "C:\\Temp\\aaa\\2024\\3\\12\\output.pdf";

        PdfGenerator pdfGenerator = new PdfGenerator();
        pdfGenerator.generatePdfFromTemplate(User.builder().name("ss").email("22").build(), templatePath, outputPath);
 

导出成功

出现的问题:如果HTML文件里面有js就会失败

相关推荐
m0_7482478010 分钟前
Flutter Intl包使用指南:实现国际化和本地化
前端·javascript·flutter
ZJ_.37 分钟前
WPSJS:让 WPS 办公与 JavaScript 完美联动
开发语言·前端·javascript·vscode·ecmascript·wps
joan_851 小时前
layui表格templet图片渲染--模板字符串和字符串拼接
前端·javascript·layui
还是大剑师兰特2 小时前
什么是尾调用,使用尾调用有什么好处?
javascript·大剑师·尾调用
Watermelo6172 小时前
详解js柯里化原理及用法,探究柯里化在Redux Selector 的场景模拟、构建复杂的数据流管道、优化深度嵌套函数中的精妙应用
开发语言·前端·javascript·算法·数据挖掘·数据分析·ecmascript
m0_748248942 小时前
HTML5系列(11)-- Web 无障碍开发指南
前端·html·html5
m0_748235612 小时前
从零开始学前端之HTML(三)
前端·html
LostSpeed3 小时前
在福昕(pdf)阅读器中导航到上次阅读页面的方法
pdf
旭久3 小时前
SpringBoot的Thymeleaf做一个可自定义合并td的pdf表格
pdf·html·springboot
一个处女座的程序猿O(∩_∩)O4 小时前
小型 Vue 项目,该不该用 Pinia 、Vuex呢?
前端·javascript·vue.js