Java项目如何导出数据为 PDF 文件?
创始人
2024-04-15 08:05:31
0

文章目录

  • Java项目如何导出数据为 PDF 文件?
    • 一、代码结构如下
    • 二、代码说明
      • 1、添加依赖 pom.xml
      • 3、添加字体
      • 4、PDF 导出工具类
    • 三、效果图
  • 结语

Java项目如何导出数据为 PDF 文件?

一个小需求,需要将页面上的数据导出为PDF,正常情况下这个需求需要让前端来做,但是现在上面让咱们后端来做,也没问题。

直接上代码

一、代码结构如下

图片

二、代码说明

1、添加依赖 pom.xml

com.openhtmltopdfopenhtmltopdf-core1.0.0

com.openhtmltopdfopenhtmltopdf-pdfbox1.0.0

org.thymeleafthymeleaf3.0.11.RELEASE

org.thymeleafthymeleaf-spring53.0.11.RELEASE

2、HTML模板文件 audit_order_record.html






审批记录
资源信息
目录名称[[${resourceName}]]
资源名称[[${infoName}]]
资源类型[[${resourceType}]]
数据提供方[[${resOrgName}]]
订阅信息
资源需求方[[${orgName}]]
需求方系统[[${systemName}]]
联系人[[${linkMan}]]
联系手机[[${linkPhone}]]
申请日期[[${orderDate}]]
申请理由[[${orderReason}]]
审核信息
审核人[[${prejuUserName}]]
审核结果[[${prejuResult}]]
审核日期[[${prejuDate}]]
审核意见[[${prejuSuggest}]]

3、添加字体

将字体文件 STXIHEI.TTF 放在 pdf/fonts 下面

4、PDF 导出工具类

 
package com.libin.pdf.demo.util;import com.openhtmltopdf.pdfboxout.PdfRendererBuilder;
import org.springframework.util.ResourceUtils;
import org.thymeleaf.context.Context;
import org.thymeleaf.spring5.SpringTemplateEngine;
import org.thymeleaf.templateresolver.ClassLoaderTemplateResolver;
import org.thymeleaf.templateresolver.FileTemplateResolver;import javax.servlet.http.HttpServletResponse;
import java.io.File;
import java.io.OutputStream;
import java.util.Map;public class PdfUtil {/*** @param response     http请求后的相应* @param pdfFileName  pdf文件名称(不包含pdf后缀)* @param templateName 模板名称* @param variables    模板变量*/public static void exportPdf(HttpServletResponse response, String pdfFileName, String templateName, Map variables) throws Exception {response.setContentType("application/pdf");response.setHeader("Content-Disposition", "attachment;filename=" + new String((pdfFileName + ".pdf").getBytes(), "iso8859-1"));OutputStream os = response.getOutputStream();//构造模板引擎ClassLoaderTemplateResolver resolver = new ClassLoaderTemplateResolver();resolver.setPrefix("pdf/templates/"); //模板所在目录,相对于当前classloader的classpath。resolver.setSuffix(".html"); //模板文件后缀
//        FileTemplateResolver resolver = new FileTemplateResolver();
//        resolver.setPrefix(ServletActionContext.getServletContext().getRealPath("pdf/templates") + File.separator); // 如果放在web下
//        resolver.setSuffix(".html");SpringTemplateEngine templateEngine = new SpringTemplateEngine();templateEngine.setTemplateResolver(resolver);//构造上下文(Model)Context context = new Context();context.setVariable("pdfFileName", pdfFileName);context.setVariables(variables);//渲染模板String example = templateEngine.process(templateName, context);PdfRendererBuilder builder = new PdfRendererBuilder();//设置字体文件builder.useFont(ResourceUtils.getFile("classpath:pdf/fonts/SIMHEI.TTF"), "stxihei");
//        builder.useFont(new File(ServletActionContext.getServletContext().getRealPath("/pdf/fonts/SIMHEI.TTF")), "stxihei"); // 如果是放在web下面builder.useFastMode();builder.withHtmlContent(example, null);builder.toStream(os);builder.run();}
}

5、导出接口

 package com.libin.pdf.demo.controller;import com.libin.pdf.demo.util.PdfUtil;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;import javax.servlet.http.HttpServletResponse;
import java.util.HashMap;
import java.util.Map;@RestController
public class DemoController {@GetMapping("pdf")public void test(HttpServletResponse response) throws Exception {Map variables = new HashMap<>();// 资源信息// 资源名称variables.put("resourceName", "XXXXXXXXXX");// 目录名称variables.put("infoName", "XXXXXXXXXX");//资源类型variables.put("resourceType", "XXXXXXXXXX");// 数据提供方variables.put("resOrgName", "XXXXXXXXXX");// 资源需求方variables.put("orgName", "XXXXXXXXXX");// 需求方系统variables.put("systemName", "XXXXXXXXXX");// 联系人variables.put("linkMan", "XXXXXXXXXX");// 联系手机variables.put("linkPhone", "XXXXXXXXXX");// 申请日期variables.put("orderDate", "XXXXXXXXXX");// 申请理由variables.put("orderReason", "XXXXXXXXXX");// 审核人variables.put("prejuUserName", "XXXXXXXXXX");// 审核结果variables.put("prejuResult", "XXXXXXXXXX");// 审核日期variables.put("prejuDate", "XXXXXXXXXX");// 审核意见variables.put("prejuSuggest", "XXXXXXXXXX");PdfUtil.exportPdf(response, "审批记录", "audit_order_record.html", variables);}
}

6、打开浏览器测试

浏览器访问 localhost:8080/pdf 进行测试

三、效果图

图片

结语

如果这篇文章对您有所帮助,或者有所启发的话,求一键三连:点赞、评论、收藏➕关注,您的支持是我坚持写作最大的动力。

相关内容

热门资讯

监控摄像头接入GB28181平... 流程简介将监控摄像头的视频在网站和APP中直播,要解决的几个问题是:1&...
Windows10添加群晖磁盘... 在使用群晖NAS时,我们需要通过本地映射的方式把NAS映射成本地的一块磁盘使用。 通过...
protocol buffer... 目录 目录 什么是protocol buffer 1.protobuf 1.1安装  1.2使用...
在Word、WPS中插入AxM... 引言 我最近需要写一些文章,在排版时发现AxMath插入的公式竟然会导致行间距异常&#...
【PdgCntEditor】解... 一、问题背景 大部分的图书对应的PDF,目录中的页码并非PDF中直接索引的页码...
Fluent中创建监测点 1 概述某些仿真问题,需要创建监测点,用于获取空间定点的数据࿰...
educoder数据结构与算法...                                                   ...
MySQL下载和安装(Wind... 前言:刚换了一台电脑,里面所有东西都需要重新配置,习惯了所...
MFC文件操作  MFC提供了一个文件操作的基类CFile,这个类提供了一个没有缓存的二进制格式的磁盘...
有效的括号 一、题目 给定一个只包括 '(',')','{','}'...