news 2026/7/4 4:25:58

Spring Boot 实现 HTML 转 PDF

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Spring Boot 实现 HTML 转 PDF

一、接口概述


在实际业务开发中,我们经常遇到将 HTML 内容转换为 PDF 文件的需求,比如生成合同、报告、证书等文档。本文介绍一个基于 Spring Boot 实现的 HTML 转 PDF 接口,支持动态渲HTML 并生成 PDF 文件供用户下载。


二、接口定义

@RequestMapping(value = "/rest/api/convertHtmlToPdf", method = RequestMethod.GET) public void convertHtmlToPdfTwo(HttpServletResponse httpResponse) { // ... }


三、核心实现代码

@RequestMapping(value = "/rest/api/convertHtmlToPdf", method = RequestMethod.GET) public void convertHtmlToPdf(HttpServletResponse httpResponse) { try { // 1. 渲染 HTML 模板 String htmlContent = service.buildConvertHtml(); // 2. 校验 HTML 内容 if (htmlContent == null || htmlContent.trim().isEmpty()) { httpResponse.setStatus(HttpServletResponse.SC_NOT_FOUND); httpResponse.setContentType("application/json;charset=UTF-8"); httpResponse.getWriter().write("{\"code\":404,\"msg\":\"未找到HTML内容\"}"); return; } // 3. 生成 PDF HtmlConvertToPdfUtils.generatePdf(htmlContent, httpResponse); } catch (Exception e) { try { httpResponse.setStatus(HttpServletResponse.SC_INTERNAL_SERVER_ERROR); httpResponse.setContentType("application/json;charset=UTF-8"); httpResponse.getWriter().write("{\"code\":500,\"msg\":\"PDF生成失败: " + e.getMessage() + "\"}"); } catch (Exception ignored) { httpResponse.setStatus(HttpServletResponse.SC_INTERNAL_SERVER_ERROR); } } }

四、响应说明

4.1 成功响应

┌──────────────┬──────────────────┐
│ 项目 │ 说明 │
├──────────────┼──────────────────┤
│ HTTP 状态码 │ 200 OK │
├──────────────┼──────────────────┤
│ Content-Type │ application/pdf │
├──────────────┼──────────────────┤
│ 响应体 │ PDF 文件二进制流 │
└──────────────┴──────────────────┘

浏览器会根据设置自动下载或在浏览器中直接预览 PDF 文件。

五、关键技术点

5.1 直接输出流到 Response

该接口没有返回值(void),而是直接操作 HttpServletResponse 输出 PDF 流:

HtmlConvertToPdfUtils.generatePdf(htmlContent, httpResponse);

这种方式的优点:
- 减少内存占用:不需要在内存中先构建完整的 PDF 字节数组
- 响应更快:边生成边输出,用户体验更好
- 适合大文件:避免了 OutOfMemoryError 风险,支持自定义文件名

response.setHeader("Content-Disposition", "attachment; filename=" + URLEncoder.encode(fileName, "UTF-8") + ".pdf");

六、总结

1. 动态渲染:根据业务数据和模板动态生成 HTML

2. 流式输出:直接输出到 Response,内存友好

3. 完善的异常处理:多层保护,确保用户收到明确的错误信息

4. RESTful 风格:GET 请求,参数清晰,便于浏览器直接访问

这种实现方式在企业级应用中非常实用,特别适合合同、报告、证书等文档的在线生成与下载场景。

相关技术栈:Spring Boot、iText / Flying Saucer、Thymeleaf / FreeMarker

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/29 0:43:48

视频上传极速响应,全程零延迟

你的文件上传接口是否也要缓慢加载,是否也要等待上传的小圈圈,一圈一圈转个不停。下面我将介绍一种文件上传接口的实现技术,从此告别文件上传的长时间接口延迟,做到文件上传极速响应,全程零延迟,流畅拉升用…

作者头像 李华
网站建设 2026/6/29 0:43:46

Linux2

1. 网络接口配置 1.1 修改网卡名称 在 Linux 系统中,ens32 是常见的网卡(网络接口)名称。如需同步网络接口,可执行以下操作:输入ip a查看接口,编辑 GRUB 配置文件:vim /boot/grub2/grub.cfg跳转…

作者头像 李华
网站建设 2026/6/29 0:29:04

7B 还是 32B,Strix Halo 上不同参数量模型的速度实测

7B 还是 32B?Strix Halo 上的真实速度对决 最近把主力机换成了搭载 AMD Strix Halo 架构的新本,最让我意外的不是游戏帧数,而是它跑本地大模型时的那种“从容感”。以前在轻薄本上跑 LLM,要么显存爆掉,要么速度慢得像 …

作者头像 李华
网站建设 2026/6/29 0:29:11

用云渲染好还是自己渲染好?不同项目该怎么选?

用云渲染好还是自己渲染好?这是很多设计师、动画师和工作室在出图前都会考虑的问题。其实两种方式各有优势,关键要看项目复杂度、交付时间、电脑配置和预算。如果场景简单,本地渲染更方便;如果任务紧急,云渲染效率更高…

作者头像 李华