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

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>

依赖

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

PDFGenerator

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();}}
}

使用

        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就会失败

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/741438.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【BI-Dataease】dataease设计思路

参考&#xff1a;https://juejin.cn/post/7089310768671227940 1、BI可视化工具的关键问题是什么&#xff1f; &#xff08;1&#xff09;各种数据源的数据结构和类型如何统一&#xff1f; &#xff08;2&#xff09;各种图表的配置属性不一致&#xff0c;属性如何绑定到数据…

不同系统有着不同的文件路径分隔符

在不同的操作系统中&#xff0c;文件路径的分隔符是不一样的&#xff1a; 在类 Unix&#xff08;例如 Linux 和 macOS&#xff09;系统中&#xff0c;文件路径使用正斜杠&#xff08;/&#xff09;作为目录分隔符。在 Windows 系统中&#xff0c;文件路径使用反斜杠&#xff0…

【python】linux系统安装了多个版本的python,如何查看安装路径、第三方库路径

【python】linux系统安装了多个版本的python&#xff0c;如何查看安装路径、第三方库路劲。 1. 查看安装路径、第三方库路径 进入对应版本的python路径&#xff0c;进入交互界面&#xff0c;输入 import sys sys.path 2. 查看第三方库中已安装库

tesseract ocr 安装/调用/训练

安装 jTessBoxEditor 训练工具自带 tesseract-ocrVietOCR - Browse /jTessBoxEditor at SourceForge.net jTessBoxEditor 需要 JDK 依赖 jdk-8u201-windows-x64.exe下载地址 Java Downloads | Oracle tessseract 开源地址 https://github.com/tesseract-ocr/tesseract PHP …

STM32进阶笔记——FATFS文件系统(下)

本专栏争取每周三更新直到更新完成&#xff0c;期待大家的订阅关注&#xff0c;欢迎互相学习交流。 本文需要一些SD卡和内存管理等前置知识&#xff0c;后续文章会介绍&#xff0c;这里先介绍一下FATFS文件系统。关于FATFS的文章分为上下两篇&#xff0c;上篇主要介绍什么是FAT…

二分搜索树和AVL树

问题 跑道预订系统。一个飞机场只有一个飞机跑道&#xff0c;需要为未来的飞机着陆预留空闲的跑道。飞机预订的着陆时间为t&#xff0c;假如没有其他的计划在(t-k,tk)的时间内着陆的飞机&#xff0c;则将t加入集合R。其中k是变量。请问有没有一种时间复杂度为O(logn)的算法解决…

增强PLMs可塑性!MetaAI | 提出主动遗忘机制,加快模型收敛,准确率高出21.2%!

引言 在自然语言处理领域&#xff0c;预训练语言模型&#xff08;PLMs&#xff09;扮演着至关重要的角色&#xff0c;它可以根据任务需求&#xff0c;可迁移至各种下游任务中。然而&#xff0c;PLMs在适应新语言时面临挑战&#xff0c;尤其是在数据和计算资源受限的情况下。本…

面试官:web常见的攻击方式有哪些?如何防御?

一、Web攻击是什么 Web攻击&#xff08;WebAttack&#xff09;是针对用户上网行为或网站服务器等设备进行攻击的行为 如植入恶意代码&#xff0c;修改网站权限&#xff0c;获取网站用户隐私信息等等 Web应用程序的安全性是任何基于Web业务的重要组成部分 确保Web应用程序安全…

数据结构与算法----复习Part 14 (树与二叉树)

本系列是算法通关手册LeeCode的学习笔记 算法通关手册&#xff08;LeetCode&#xff09; | 算法通关手册&#xff08;LeetCode&#xff09; (itcharge.cn) 目录 一&#xff0c;树&#xff08;Tree&#xff09; 树的相关术语 节点间关系 树的其他术语 二&#xff0c;二叉…

【深度学习笔记】8_1 命令式和符号式混合编程

注&#xff1a;本文为《动手学深度学习》开源内容&#xff0c;部分标注了个人理解&#xff0c;仅为个人学习记录&#xff0c;无抄袭搬运意图 8.1 命令式和符号式混合编程 本书到目前为止一直都在使用命令式编程&#xff0c;它使用编程语句改变程序状态。考虑下面这段简单的命令…

比较JavaScript中的for...in和for...of循环

&#x1f90d; 前端开发工程师、技术日更博主、已过CET6 &#x1f368; 阿珊和她的猫_CSDN博客专家、23年度博客之星前端领域TOP1 &#x1f560; 牛客高级专题作者、打造专栏《前端面试必备》 、《2024面试高频手撕题》 &#x1f35a; 蓝桥云课签约作者、上架课程《Vue.js 和 E…

linux解析域名指令 nslookup 或者 host

host www.baidu.com 第二种方法 nslookup www.baidu.com 注意&#xff1a;ns是name server之意

【包邮送书】Elasticsearch 通过索引阻塞实现数据保护深入解析

欢迎关注博主 Mindtechnist 或加入【智能科技社区】一起学习和分享Linux、C、C、Python、Matlab&#xff0c;机器人运动控制、多机器人协作&#xff0c;智能优化算法&#xff0c;滤波估计、多传感器信息融合&#xff0c;机器学习&#xff0c;人工智能等相关领域的知识和技术。关…

运维工程师面试题

1. CPU性能指标中&#xff0c;以下指标代表什么意思&#xff1f; 外频&#xff1a;CPU的基准频率&#xff0c;CPU与主板之间同步运行的速度&#xff0c;它决定整个主板的运行速率。 前端总线频率&#xff1a;直接影响CPU和内存数据交换的速度。 2. 主板的两个芯片分别是什么…

uView Upload 上传

该组件用于上传图片场景 #平台差异说明 App&#xff08;vue&#xff09;App&#xff08;nvue&#xff09;H5小程序√√√√ #基础用法 可以通过设置fileList参数(数组&#xff0c;元素为对象)&#xff0c;显示预置的图片。其中元素的url属性为图片路径 <template>&l…

面试经典-9-跳跃游戏

题目 给你一个非负整数数组 nums &#xff0c;你最初位于数组的 第一个下标 。数组中的每个元素代表你在该位置可以跳跃的最大长度。 判断你是否能够到达最后一个下标&#xff0c;如果可以&#xff0c;返回 true &#xff1b;否则&#xff0c;返回 false 。 示例 1&#xff…

回收小程序系统后台管理功能

会员管理&#xff1a;管理员可以查看和管理会员的基本信息&#xff0c;如姓名、联系方式、寄送地址和订单记录等。 产品管理&#xff1a;对回收物品进行管理&#xff0c;包括分类、规格设定、数据统计等。 订单管理&#xff1a;对所有订单进行追踪和管理&#xff0c;确保订单处…

Leetcode 543. 二叉树的直径

题目描述&#xff1a; 给你一棵二叉树的根节点&#xff0c;返回该树的 直径 。 二叉树的 直径 是指树中任意两个节点之间最长路径的 长度 。这条路径可能经过也可能不经过根节点 root 。 两节点之间路径的 长度 由它们之间边数表示。 示例 1&#xff1a; 输入&#xff1a;ro…

汽车屏类产品(五):仪表Cluster常用芯片i.MX117x

前言: 仪表一般就是指方向盘前面那个表盘。做仪表的芯片最主要需要支持显示Display,而仪表的主要排版布局多种多样,但是主旨显示内容不尽相同。 仪表需求: 1、rpm转速表盘 仪表Cluster一般会有转速表盘rpm,单位一般是x1000,大部分汽车仪表范围就是0~8,也就是最高8000…

MySQL安装使用(mac、windows)

目录 macOS环境 一、下载MySQL 二、环境变量 三、启动 MySql 四、初始化密码设置 windows环境 一、下载 二、 环境配置 三、安装mysql 1.初始化mysql 2.安装Mysql服务 3.更改密码 四、检验 1.查看默认安装的数据库 2.其他操作 macOS环境 一、下载MySQL 打开 MyS…