将 HTML 转化为 PDF新姿势

Thymeleaf企业级真实应用:将HTML界面数据转换为PDF输出 Thymeleaf是一种现代化的服务器端Java模板引擎可以用于Web和独立环境中的HTML、XML、JavaScript、CSS和文本。在实际开发中,Thymeleaf可以用于生成动态的HTML页面,支持将数据与模板进行绑定,生成最终的HTML内容。它是一个开源的软件,采用Apache许可证2.0进行发布。 阅读详情

img

前篇

使用 Thymeleaf 动态渲染 HTML

1、添加依赖

  <!--PDF转化工具-->
        <dependency>
            <groupId>com.itextpdf</groupId>
            <artifactId>itextpdf</artifactId>
            <version>5.4.2</version>
        </dependency>

        <dependency>
            <groupId>org.xhtmlrenderer</groupId>
            <artifactId>core-renderer</artifactId>
            <version>R8</version>
        </dependency>

2、编码工具类


import com.itextpdf.text.pdf.BaseFont;
import com.lowagie.text.DocumentException;
import org.springframework.stereotype.Component;
import org.xhtmlrenderer.pdf.ITextFontResolver;
import org.xhtmlrenderer.pdf.ITextRenderer;

import java.io.IOException;
import java.io.OutputStream;

/**
 * 导出PDF文件转换工具
 */
public class PDFUtil{

    /**
     * 生成 PDF 文件
     * @param out 输出流
     * @param html HTML字符串
     * @throws IOException IO异常
     * @throws DocumentException Document异常
     */
    public static void createPDF(OutputStream out, String html) throws IOException, DocumentException {
        ITextRenderer renderer = new ITextRenderer();
        renderer.setDocumentFromString(html);
        // 解决中文支持问题
        ITextFontResolver fontResolver = renderer.getFontResolver();
        fontResolver.addFont("pdf/font/fangsong.ttf", BaseFont.IDENTITY_H, BaseFont.NOT_EMBEDDED);
        fontResolver.addFont("pdf/font/PingFangSC.ttf", BaseFont.IDENTITY_H, BaseFont.NOT_EMBEDDED);
        renderer.layout();
        renderer.createPDF(out);
    }

}

字体文件自行下载,并添加到 resouces 路径下,上述路径对应修改

3、效果演示

img

遇到的问题与解决方法

1、Maven 打包源码后,导致 HTML 文件内容被篡改

  • 原因:Maven 插件使用的占位符 ${} 与 Thymeleaf冲突
  • 解决方法:在 pom.xml 中配置资源文件,打包时不对html文件的占位符进行处理
<build>
    ...
    <resources>
        <resource>
            <directory>src/main/resources</directory>
            <filtering>true</filtering>
            <excludes>
                <exclude>**/*.html</exclude>
            </excludes>
        </resource>
        <resource>
            <directory>src/main/resources</directory>
            <filtering>false</filtering>
            <includes>
                <include>**/*.html</include>
            </includes>
        </resource>
    </resources>
</build>

2、使用 Docker 制作镜像时,下载文件时报错,缺少字体处理类

  • 使用镜像源 java:8 而不是 openjdk:8-jre-alpine

© 著作权归作者所有,转载或内容合作请联系作者

img

● Service Mesh - gRPC 本地联调远程服务

● 使用 Thymeleaf 动态渲染 HTML

● Fastjson致命缺陷

● Spring Boot 2 集成log4j2日志框架

● Java面试通关要点汇总集之核心篇参考答案

● Java面试通关要点汇总集之框架篇参考答案

● Spring Security 实战干货:如何保护用户密码

● Spring Boot RabbitMQ - 优先级队列

img

本文由博客一文多发平台 OpenWrite 发布!

Vue实战:巧用html2pdf解决复杂表格PDF下载与样式分页难题 本文详细介绍了在Vue项目中如何使用html2pdf插件解决复杂表格导出PDF时的样式和分页问题。通过分析常见问题根源,提供从安装配置到高级技巧的完整解决方案,包括表格边框处理、内容截断修复、复杂表头处理等实战经验,帮助开发者高效实现企业级PDF导出功能。 阅读详情

相关推荐

Java把html生成pdf (xhtmlrenderer)

Java代码示例: tools.pdf.ITextTest xhtml代码示例: template.xhtml

xhtmlrenderer 将html转换成pdf,完美css,带图片,手动分页,解决内容断开的问题

来源:xhtmlrenderer 将html转换成pdf,完美css,带图片,手动分页,解决内容断开的问题 - 煮过的花朵 - 博客园 之前用itext7将html导出为pdf,比较方便,代码较少,而且支持base64的图片。但是itext7是收费的,所以换成了xhtmlrenderer。 xhtmlrenderer自动引入依赖包itext2.0.8,而且不能再引入其他版本的itext,因为itext2.0.8是已经被废弃的,里面的很多方法在新版本已经没有了。 itext导出pdf最重要的4个难点:

小强快跑~~ 7311

松灵机器人——ROS下的CAN通讯调试(内含所需调用包,都是操作步骤)

松灵机器人——ROS下的CAN通讯调试(都是操作步骤) 1 代码包地址 scout_ros package:https://github.com/westonrobot/scout_ros.git ugv_sdk-main package:https://github.com/westonrobot/ugv_sdk webots package:https://cyberbotics.com/ 2 硬件准备 2.1 SCOUT MINI 小白车 + 尾部航空插头 + CAN_TO_USB适配器

weixin_48924581的博客 1万+

Spring boot实现自定义html页面转pdf,并下载

用到的工具类: 通过这个工具类来讲html转换为pdf,可先用main方法进行测试。以上是html模板 ,要求html遵守xhtml的规范,严格语法要求。vm模板: 使用此模板来进行渲染。然后下面是引用的maven坐标。

seeblood的博客 2455

视觉SLAM十四讲--第13讲 实践:设计SLAM系统(最详细的代码调试运行步骤)

最详细的代码调试运行避坑说明,也包含了我自己对代码的理解,如有理解错误的地方,欢迎指正交流。

记录和分享 1万+

4D毫米波雷达与激光雷达融合评测:3种主流融合框架在极端天气下的性能对比

本文深度评测了4D毫米波雷达与激光雷达在极端天气下的三大融合框架性能,包括前融合、特征级融合和后融合。通过实测数据对比,揭示了多传感器融合在暴雨、浓雾等恶劣环境中的显著优势,为自动驾驶感知系统提供了关键的技术参考和工程实践指南。

weixin_28677005的博客 331

基于xhtmlrenderer+freemarker的HTML转PDF方法

最近项目上有要求,需要生成一个可供客户下载的pdf或者图片的许可协议,这个pdf/图片里面的内容需要是用户相关的内容,也就是内容是可变的,不过其他的样式是统一的,我也因此找了相关的功能包,发现可以使用 xhtmlrenderer+freemarker 完成这个需求,此次仅制作了pdf相关教程供大家参考,至于图片相关等下期 因pdf的内容是可变的,所以单纯的html是无法满足要求的,搜索了一下发现可以使用freemarker, freemarker是一种模板引擎,可以基于模板和要改变的数据, 用来生

goya的博客 1415

RS422总线

①.RS422发送驱动器无高阻三态(浮空)状态RS422收发芯片,发送脚固定强驱动输出,永远钳位 A/B 差分电平,不能关断、不能悬空,只要芯片上电,TX+、TX - 就强制输出互补电压(一路高、一路低)。多条发送并联在同一组差分线上:两个驱动器一个拉 A 高、一个拉 A 低,B 线反向拉扯 → 电源→地大电流对灌,瞬间芯片过流发烫烧毁、总线电平短路错乱。注意:RS485 带DE/RE 收发使能脚:不用发送时可关闭驱动器,输出变成高阻浮空,让出总线,因此能多节点分时发送。③.多点通信方式,一主多从方式;

zhuimeng_1234的博客 223

xhtmlrenderer进行HTML转PDF【解决中文、数字、英文过长自动换行问题】

首先,当然是找到能够解析PDF的完美组件,百度和谷歌不约而同的告诉我们。IText是王道。而目前开源的组件中,Itext的确是一个First Choice,如果各位单纯是做把图片转成PDF或者自己写了Velocity或者FreeMarker模板生成了HTML是非常推荐直接用Itext来进行的。 下面就是用Flying Saucer(xhtmlrendere)来实现的代码: loading......

qq_18836683的博客 1万+

FPGA 学习笔记:解决FPGA程序固化重新上电程序不运行的问题

FPGA 学习笔记:解决FPGA程序固化重新上电程序不运行的问题

坚韧与专注 1万+

【教程4>第3章>第1节】通信系统高阶调制解调概述

高阶调制(High Order Modulation)是一种先进的数字调制技术,旨在通过增加每个符号携带的信息比特数来提高无线通信系统的数据传输速率和频谱效率。这种技术特别适用于具有较高信噪比(Signal-to-Noise Ratio, SNR)的通信环境,例如卫星通信、光纤通信以及一些高质量的无线通信链路。在数字通信中,调制是将数字信号(比特流)转换为适合在物理信道上传输的模拟信号的过程。高阶调制通过使用更多的信号状态或星座点来表示不同的比特组合,从而在一个符号周期内传输更多的信息。

FPGA/MATLAB学习教程/源码/项目合作开发 1704

docker源码分析 pdf_将 HTML 转化为 PDF新姿势

点击上方☝SpringForAll社区,轻松关注!及时获取有趣有料的技术文章前篇使用 Thymeleaf 动态渲染 HTML1、添加依赖 <dependency> <groupId>com.itextpdfgroupId> <artifactId>itextpdfartif...

weixin_39929595的博客 266

【多目标跟踪】ByteTrack复现(有yolov5例子)

1.环境 ubuntu16.04 cuda10.1 cudnn7 python3.6 Cython matplotlib>=3.2.2 numpy>=1.18.5 opencv-python>=4.1.2 Pillow PyYAML>=5.3 scipy>=1.4.1 tensorboard>=2.2 torch>=1.7.0 torchvision>=0.8.1 tqdm>=4.41.0 seaborn>=0.11.0 easydic

聿默的博客 1万+

流文件pdf_将 HTML 转化为 PDF新姿势

点击上方☝SpringForAll社区,轻松关注!及时获取有趣有料的技术文章前篇使用 Thymeleaf 动态渲染 HTML1、添加依赖 <dependency> <groupId>com.itextpdfgroupId> <artifactId>itextpdfartif...

weixin_33961375的博客 154

要理解成本中心与利润中心的根本区别与适用场景,需从 “责任范围、考核核心、管理目标” 三个核心维度切入,同时明确二者在企业管理体系中的联动关系

摘要: 成本中心与利润核心区别在于责任范围、考核目标和管理权限。成本中心仅对成本负责(如生产、行政部门),考核成本控制能力;利润中心需同时管控成本与收入(如独立产品线、区域分公司),以利润为核心指标。选择标准取决于单元是否拥有收入决策权:无收入权的支持/执行部门设为成本中心,能独立经营、核算盈亏的单元设为利润中心。二者协同运作,成本中心为利润中心提供基础支持,利润中心的需求动态影响成本中心资源配置,共同实现企业整体目标。划分本质是确保考核指标与责任范围匹配,避免管理失效。

金牌架构师 660

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

HTML 转 PDF 新姿势

点击蓝色“程序猿DD”关注我回复“资源”获取独家整理的学习资料!前篇使用 Thymeleaf 动态渲染 HTML1、添加依赖 <!--PDF转化工具--> <dependency> <groupId>com.itextpdf</groupId> <artifactId>itextpdf</artifactId&...

程序猿DD 617

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

使用 itext html转成pdf的正确姿势

itext html2pdf 网上一些资料不全面,网上很多例子不太靠谱,有很多坑,这里给出工具和常见的坑,可以少走很多弯路。 支持html前端分页符和避免分页的属性。 1、优势 转换效果非常理想 不需要安装软件 2、依赖3个包 https://mvnrepository.com/artifact/com.itextpdf/html2pdf/2.1.0 https://mvnrepos......

悟鸣的技术博客 1万+

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

html转换pdf中文失败,解决html导出pdf中文乱码问题的正确姿势

简介jspd页求是解这如前总回随4泉标使幻近面的是,f是歪果仁开发的,因此在一开始就没想过支持非英文以外的文字,这就导致了非英文的文本朋不功事做时次功好来多这开制的请一例农在个屏器随的会满和满时波实的于设幻近友支能前的我基能自又,些发都是乱码。因此就有持发秀事应差互过来商类如处。,到图近就这其他大佬给增加了其他解决方案,到了1.5版本也正式加入了非英文支持的解决方案到二新,为都础过过发等宗和发制数...

weixin_33631836的博客 1687

解决html导出pdf中文乱码问题的正确姿势

解决html导出pdf中文乱码问题的正确姿势

weixin_46246967的博客 685

职场人必看!网页保存新姿势:批量转换 HTML 为 PDF 高效方法,轻松应对资料存档!

4. 在界面下方的输出目录设置中,点击“选择新文件”按钮,为转换后的PDF文件指定一个统一的保存文件夹。5. 确认所有文件和设置无误后,直接点击界面下方的“开始转换”按钮,软件将自动执行批量转换任务。1. 运行首助编辑高手软件,进入主界面后,在“PDF编辑工具”模块中选择“批量转换格式”功能。6. 转换过程中,您可以在软件的状态栏中实时查看每个文件的转换进度和总体状态,以确保过程顺利。3. 点击“添加文件”按钮,在弹出的文件选择窗口中,批量选中需要转换的所有HTML网页文件。

TLZTD22159的博客 312

三种新姿势帮你写出精美简历

Markdown 内容生成简历 准备工作 掌握 Markdown 基本语法。标题、内容强调、段落、代码块、图片链接等。 掌握 HTML、CSS 基本语法,因为 Markdown 编辑器支持 HTML 内容。 写简历 Markdown 基本语法 标题,使用 # 可代表 1~6 级标题。例如:### 表示三级标题。 内容强调,在强调内容两侧分别加上 * 或者 _。例如:*斜体*、_斜体_ 表示斜...

快乐的工程师的博客 822

GoFr vs Gin、Fiber、Echo、Chi:Go 微服务框架选型对比

GoFr、Gin、Fiber、Echo 与 Chi 同属 Go Web 生态的开源项目,但定位与边界完全不同:**Gin、Fiber、Echo、Chi 本质是"最小化 HTTP 路由器",让团队自行挑选并组装可观测性、数据源、gRPC、Pub/Sub 与弹性模式所需的第三方库;而 GoFr 是范围更宽的"微服务框架"**,在 HTTP 路由之外,将 OpenTelemetry 链路追踪、Prome

gitblog_00918的博客 466

法律文书处理新姿势:PDF-Parser-1.0智能解析实战

本文介绍了如何在星图GPU平台上一键自动化部署PDF-Parser-1.0文档理解模型,快速搭建智能法律文书解析系统。该模型能精准解析合同、判决书等PDF文档,将其转化为结构化数据,核心应用场景包括自动化合同审查与关键条款比对,极大提升法律从业者的工作效率。

weixin_33239721的博客 289

html2pdf.js 实现打印功能

特殊点的用法我就用到这两种,还有打印时第一页是空白页,我的情况是用了这个属性,识别到内容某个外部div,判断到 这个div里的内容不能放到当前页,就会扩到下一页,删除掉这个div标签就可以了。

weixin_45725679的博客 1228
上一篇: Java 使用 UnixSocket 调用 Docker API
下一篇: Spring Cloud Gateway - 快速开始
SpringForAll
博客等级 码龄7年 15粉丝 79原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值