Java将数据集合转换为PDF

这里写自定义目录标题

  • 将数据集合转换为pdf
    • 引入包
    • 工具类
    • 测试代码
    • 导出效果

将数据集合转换为pdf

依赖itext7包将数据集合转换导出为PDF文件

引入包

<properties><itext.version>7.1.11</itext.version>
</properties><dependency><groupId>com.itextpdf</groupId><artifactId>itext7-core</artifactId><version>${itext.version}</version><type>pom</type>
</dependency>

工具类

package xxxxxxxxxxxxxxxxxxxxx;import cn.hutool.core.date.DateTime;import com.itextpdf.kernel.font.PdfFont;
import com.itextpdf.kernel.font.PdfFontFactory;
import com.itextpdf.kernel.geom.PageSize;
import com.itextpdf.kernel.pdf.PdfDocument;
import com.itextpdf.kernel.pdf.PdfWriter;
import com.itextpdf.layout.Document;
import com.itextpdf.layout.element.Cell;
import com.itextpdf.layout.element.Paragraph;
import com.itextpdf.layout.element.Table;import org.apache.poi.ss.usermodel.CellType;
import org.apache.poi.ss.usermodel.Sheet;import javax.servlet.ServletException;
import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServletResponse;import java.io.ByteArrayOutputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.sql.Timestamp;
import java.util.List;
import java.util.Map;/*** TO PDF Utils** @author linxifengbao* @Date 2023/7/14**/
public class ToPdfUtils {/*** excel 写入到 pdf* @param workbook      excel的workbook* @param outFilePath   要写入的pdf文件详细路径(带.pdf,例如写到项目根目录:"output.pdf")* @throws IOException*/public static void excelToPdf(org.apache.poi.ss.usermodel.Workbook workbook, String outFilePath) throws IOException {PdfFont pdfFont = PdfFontFactory.createFont("STSong-Light", "UniGB-UCS2-H", true);try (PdfDocument pdf = new PdfDocument(new PdfWriter(new FileOutputStream(outFilePath)));Document document = new Document(pdf, PageSize.A4.rotate())) {Sheet sheet = workbook.getSheetAt(0);int column = sheet.getRow(0).getLastCellNum();int row = sheet.getPhysicalNumberOfRows();Table table = new Table(column - sheet.getRow(0).getFirstCellNum());String str = null;for (int i = sheet.getFirstRowNum(); i < row; i++) {for (int j = sheet.getRow(0).getFirstCellNum(); j < column; j++) {//获取excel单元格org.apache.poi.ss.usermodel.Cell cell = sheet.getRow(i).getCell(j);if (cell.getCellType() == CellType.NUMERIC) {str = (int) cell.getNumericCellValue() + "";} else {str = cell.getStringCellValue();}Cell cells = new Cell().setFont(pdfFont).add(new Paragraph(str));table.addCell(cells);}}document.add(table);} catch (Exception e) {throw new RuntimeException();}}/*** excel 写入到 pdf 点击浏览器直接下载 pdf* @param workbook      excel的workbook* @param response* @throws IOException*/public static void excelToPdfForBrowserDownload(org.apache.poi.ss.usermodel.Workbook workbook,HttpServletResponse response,String fileName) throws ServletException, IOException {String currentTimeStr = cn.hutool.core.date.DateUtil.format(new DateTime(new Date().getTime()), "yyyyMMddHHmmss");fileName = fileName + currentTimeStr + ".pdf";// 设置响应头,告诉浏览器下载文件response.reset();response.setCharacterEncoding("utf-8");fileName = java.net.URLEncoder.encode(fileName,"UTF-8").replace("+", "%20");response.setHeader("Content-Disposition", "attachment; filename*=UTF-8''" + fileName);response.setContentType("application/pdf");// 将PDF内容写入响应输出流ServletOutputStream outputStream = response.getOutputStream();PdfFont pdfFont = PdfFontFactory.createFont("STSong-Light", "UniGB-UCS2-H", true);try (PdfDocument pdf = new PdfDocument(new PdfWriter(outputStream));Document document = new Document(pdf, PageSize.A4.rotate())) {Sheet sheet = workbook.getSheetAt(0);int column = sheet.getRow(0).getLastCellNum();int row = sheet.getPhysicalNumberOfRows();Table table = new Table(column - sheet.getRow(0).getFirstCellNum());String str = null;for (int i = sheet.getFirstRowNum(); i < row; i++) {for (int j = sheet.getRow(0).getFirstCellNum(); j < column; j++) {//获取excel单元格org.apache.poi.ss.usermodel.Cell cell = sheet.getRow(i).getCell(j);if (cell.getCellType() == CellType.NUMERIC) {str = (int) cell.getNumericCellValue() + "";} else {str = cell.getStringCellValue();}Cell cells = new Cell().setFont(pdfFont).add(new Paragraph(str));table.addCell(cells);}}document.add(table);} catch (Exception e) {throw new RuntimeException();} finally {outputStream.flush();outputStream.close();}}private static String getSuffix(String filePath) {int dotIndex = filePath.lastIndexOf(".");return filePath.substring(dotIndex + 1);}/*** 数据集合 写入到 pdf 点击浏览器直接下载 pdf* @param headList       表头数据* @param columnNameList 字段名数据* @param dataList       列表数据* @param fileName       文件名* @param response* @throws IOException*/public static void dataToPdfForBrowserDownload(List<String> headList,List<String> columnNameList,List<Map<String, Object>> dataList,HttpServletResponse response,String fileName) throws ServletException, IOException {String currentTimeStr = cn.hutool.core.date.DateUtil.format(new DateTime(new Date().getTime()), "yyyyMMddHHmmss");fileName = fileName + currentTimeStr + ".pdf";// 设置响应头,告诉浏览器下载文件response.reset();response.setCharacterEncoding("utf-8");fileName = java.net.URLEncoder.encode(fileName,"UTF-8").replace("+", "%20");response.setHeader("Content-Disposition", "attachment; filename*=UTF-8''" + fileName);response.setContentType("application/pdf");// 将PDF内容写入响应输出流ServletOutputStream outputStream = response.getOutputStream();PdfFont pdfFont = PdfFontFactory.createFont("STSong-Light", "UniGB-UCS2-H", true);try (PdfDocument pdf = new PdfDocument(new PdfWriter(outputStream));Document document = new Document(pdf, PageSize.A4.rotate())) {//设置表格列数Table table = new Table(headList.size());// 设置表格宽度为页面宽度的百分比table.useAllAvailableWidth();//添加表头数据for (String itemHead : headList) {table.addCell(new Cell().setFont(pdfFont).add(new Paragraph(itemHead)));}//添加表格内数据if(dataList != null && dataList.size() > 0) {for (Map<String, Object> itemDataMap : dataList) {for (String columnName : columnNameList) {String str = itemDataMap.get(columnName) == null ? "" : itemDataMap.get(columnName).toString();Cell cell = new Cell().setFont(pdfFont).add(new Paragraph(str));table.addCell(cell);}}}document.add(table);} catch (Exception e) {throw new RuntimeException();} finally {outputStream.flush();outputStream.close();}}/*** 数据集合 写入到 pdf 点击浏览器直接下载 pdf* 带contentLength设置** @param headList       表头数据* @param columnNameList 字段名数据* @param dataList       列表数据* @param fileName       文件名* @param response* @throws IOException*/public static void dataToPdfForBrowserDownloadWithProgress(List<String> headList,List<String> columnNameList,List<Map<String, Object>> dataList,HttpServletResponse response,String fileName) throws ServletException, IOException {String currentTimeStr = cn.hutool.core.date.DateUtil.format(new DateTime(new Date().getTime()), "yyyyMMddHHmmss");fileName = fileName + currentTimeStr + ".pdf";// 设置响应头,告诉浏览器下载文件response.reset();response.setCharacterEncoding("utf-8");fileName = java.net.URLEncoder.encode(fileName,"UTF-8").replace("+", "%20");response.setHeader("Content-Disposition", "attachment; filename*=UTF-8''" + fileName);response.setContentType("application/pdf");// 响应输出流ServletOutputStream outputStream = response.getOutputStream();// 内存字节数组流对象ByteArrayOutputStream baos = new ByteArrayOutputStream();PdfFont pdfFont = PdfFontFactory.createFont("STSong-Light", "UniGB-UCS2-H", true);try {// 将pdfWriter与一个ByteArrayOutputStream对象关联起来,以便将PDF写入内存中的字节数组PdfWriter pdfWriter = new PdfWriter(baos);PdfDocument pdf = new PdfDocument(pdfWriter);Document document = new Document(pdf, PageSize.A4.rotate());//设置表格列数Table table = new Table(headList.size());// 设置表格宽度为页面宽度的百分比table.useAllAvailableWidth();//添加表头数据for (String itemHead : headList) {table.addCell(new Cell().setFont(pdfFont).add(new Paragraph(itemHead)));}//添加表格内数据if(dataList != null && dataList.size() > 0) {for (Map<String, Object> itemDataMap : dataList) {for (String columnName : columnNameList) {String str = itemDataMap.get(columnName) == null ? "" : itemDataMap.get(columnName).toString();Cell cell = new Cell().setFont(pdfFont).add(new Paragraph(str));table.addCell(cell);}}}document.add(table);// 关闭文档document.close();// 获取PDF内容的字节数组byte[] byteArray = baos.toByteArray();// 设置response的内容长度response.setContentLength(byteArray.length);// 输出PDF内容到response的输出流中response.getOutputStream().write(byteArray);} catch (Exception e) {throw new RuntimeException();} finally {outputStream.flush();outputStream.close();}}}

测试代码

    @GetMapping("/testDataToPdf")public void testDataToPdf(HttpServletResponse httpServletResponse) throws ServletException, IOException {List<String> headList = Arrays.asList("姓名", "年龄");List<String> columnNameList = Arrays.asList("name", "age");List<Map<String, Object>> dataList = new ArrayList<>();for (int i = 0; i < 1000; i++) {Map<String, Object> itemMap = new HashMap<>();itemMap.put("id", i);itemMap.put("name", "张" + i);itemMap.put("age", new Random().nextInt(50) + 1);dataList.add(itemMap);}String fileName = "测试";ToPdfUtils.dataToPdfForBrowserDownloadWithProgress(headList, columnNameList, dataList, httpServletResponse, fileName);}

导出效果

在这里插入图片描述

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

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

相关文章

什么是HTTP 500错误,怎么解决

目录 什么是HTTP 500 HTTP 500错误的常见原因&#xff1a; 如何修复HTTP 500 总结 什么是HTTP 500 错误 HTTP 500内部服务器错误是指在客户端发出请求后&#xff0c;服务器在处理请求过程中发生了未知的问题&#xff0c;导致服务器无法完成请求。HTTP 500错误是一个通用的服…

Spring-缓存初步认识

Spring-缓存 简单介绍 缓存是一种介于数据永久存储介质和数据应用之间的数据临时存储介质缓存有效提高读取速度&#xff0c;加速查询效率 spring使用缓存方式 添加依赖 <dependency><groupId>org.springframework.boot</groupId><artifactId>spring…

海康摄像头开发笔记(一):连接防爆摄像头、配置摄像头网段、设置rtsp码流、播放rtsp流、获取rtsp流、调优rtsp流播放延迟以及录像存储

文为原创文章&#xff0c;转载请注明原文出处 本文章博客地址&#xff1a;https://hpzwl.blog.csdn.net/article/details/131679108 红胖子(红模仿)的博文大全&#xff1a;开发技术集合&#xff08;包含Qt实用技术、树莓派、三维、OpenCV、OpenGL、ffmpeg、OSG、单片机、软硬结…

每日一题——反转链表

题目 给定一个单链表的头结点pHead(该头节点是有值的&#xff0c;比如在下图&#xff0c;它的val是1)&#xff0c;长度为n&#xff0c;反转该链表后&#xff0c;返回新链表的表头。 数据范围&#xff1a;0≤n≤1000 要求&#xff1a;空间复杂度 O(1) &#xff0c;时间复杂度 O…

Python实战项目——旅游数据分析(四)

由于有之前的项目&#xff0c;所以今天我们直接开始&#xff0c;不做需求分析&#xff0c;还不会需求分析的可以看我之前的文章。Python实战项目——用户消费行为数据分析&#xff08;三&#xff09; 导入库 import numpy as np import pandas as pd import matplotlib.pyplo…

PHP后台登录功能单账号登录限制

PHP后台登录功能单账号登录限制 单账号登陆是什么第一步创建数据表第二步创建登录页面test2.html第三步创建登录提交test2.php第四步访问后台首页第五步演示 单账号登陆是什么 一个用户只能登录一个账号通常被称为单账号登录限制或单用户单账号限制。这意味着每个用户只能使用…

Linux 学习记录53(ARM篇)

Linux 学习记录53(ARM篇) 本文目录 Linux 学习记录53(ARM篇)一、内存读写指令1. 在C语言中读取内存2. 指令码及功能3. 格式4. 使用示例5. 寻址方式(1. 前索引方式(2. 后索引方式(3. 自动索引 6.批量寄存器操作指令(1. 操作码(2. 格式(3. 使用示例(4. 地址增长方式>1 ia后缀&…

========Java基础——小结1========

一、Java 两大版本 Java 主要分为两个版本: Java SE 和Java EE。 Java SE 全称Java Platform Standard Edition&#xff0c;是 Java 的标准版&#xff0c;主要用于桌面应用程序开发&#xff0c;它包含了 Java 语言基础、JDBC (Java 数据库连接)、I/O (输入/输出)、TCP/IP 网络…

股票基金入门知识

1.开盘价和收盘价如何产生 时间9:30-11:30 13:00-15:00 集合竞价时间段&#xff1a;9:15-9:25 以此产生开盘价 最后集中竞价时间段&#xff1a;深市14:57-15:00 &#xff0c;以此产生收盘价。 沪市则采用最后一分钟加权得出收盘价影响股价的因素 市场投资情绪&#xff0c;宏观…

Hadoop——DataGrip连接MySQL|Hive

1、下载 DataGrip下载&#xff1a;DataGrip: The Cross-Platform IDE for Databases & SQL by JetBrains 2、破解 破解链接&#xff1a;https://www.cnblogs.com/xiaohuhu/p/17218430.html 3、启动环境 启动Hadoop&#xff1a;到Hadoop的sbin目录下右键管理员身份运行…

【C++】list 模拟笔记

文章目录 list定义结点类&#xff08;list_node&#xff09;为什么封装迭代器为类 &#xff1f;库里面模板多参数的由来 &#xff1f;为什么普通迭代器不能隐式类型转换成const迭代器&#xff1f;迭代器位置指向及其返回值和整体代码 list list 和前面学习的 string 和 vector …

微信小程序使用ECharts的示例详解

目录 安装 ECharts 组件使用 ECharts 组件图表延迟加载 echarts-for-weixin 是 ECharts 官方维护的一个开源项目&#xff0c;提供了一个微信小程序组件&#xff08;Component&#xff09;&#xff0c;我们可以通过这个组件在微信小程序中使用 ECharts 绘制图表。 echarts-fo…

excel中单行换成多行

今天碰以下情况&#xff1a; 这在excel表中是在一个单元格&#xff0c;现在需要对其进行转换&#xff0c;将一个单元格换成多行 步骤&#xff1a; 1.删除换行符&#xff0c;添加一个逗号 2.选择数据-分列-分隔字符-逗号-确定 3.复制上述数据&#xff0c;选择性粘贴-转置 完…

2816. 判断子序列

题目链接&#xff1a; 自己的做法&#xff1a; #include <bits/stdc.h>using namespace std;const int N 1e5 10; int a[N], b[N]; int main() {int n, m;bool flag true;scanf("%d%d", &n, &m);for (int i 0; i < n; i) scanf("%d"…

哈希:探索快速的数据存储和搜索方法

哈希&#xff1a;探索快速的数据存储和搜索方法 哈希表作为一种高效的数据存储结构&#xff0c;可以使数据的存储位置与关键码之间建立一一映射的关系&#xff0c;从而加快元素的搜索速度。然而&#xff0c;哈希方法也面临着哈希冲突的问题&#xff0c;即不同的关键字通过相同…

dxf怎么转换成PDF格式?转换方法其实很简单

PDF文件是一种可靠的文件格式&#xff0c;可以在各种操作系统和软件上打开和查看。而dxf是CAD文件的一种格式&#xff0c;打开它一般都是需要相关的操作软件才能打开&#xff0c;不是特别方便&#xff0c;将dxf文件转换成PDF格式就可以很好的解决这一问题&#xff0c;下面教大家…

Kafka - Primie Number of Partitions Issue Consumer Group Rebalance

文章目录 生产者&#xff1a;将数据写入 Kafka 的客户端。 消费者&#xff1a;从 Kafka 中读取数据的客户端。 Topic&#xff1a;Kafka 中用于组织和存储数据的逻辑概念&#xff0c;类似于数据库表。 Record&#xff1a;发送到 Topic 的消息称为 Record。 Partition&#x…

List有值二次转换给其他对象报null

List<PlatformUsersData> listData platformUsersMapper.selectPlatformUserDataById(data); users.setPlatformUsersData(listData);为什么listData 有值&#xff0c;users.getPlatformUsersData&#xff08;&#xff09;仍然为空在这段代码中&#xff0c;我们假设listD…

NLP(六十)Baichuan-13B-Chat模型使用体验

2023年7月11日&#xff0c;百川智能正式发布参数量130亿的通用大语言模型Baichuan-13B-Base、对话模型Baichuan-13B-Chat及其INT4/INT8两个量化版本。   本文将介绍大模型BaiChuan-13B-Chat的使用体验&#xff0c;其HuggingFace网址为&#xff1a;https://huggingface.co/bai…

【团队协作开发】IDEA中Git新建自己的dev工作分支,合并到master主分支教程(极其简单,新手)

文章目录 一、创建新dev工作分支二、push到自己的远程dev工作分支三、工作分支合并到master主分支1、先切换到master主分支2、将远程工作dev分支的内容merge到当前master分支中3、将merge提交到远程master分支 一、创建新dev工作分支 创建完新dev分支以后将默认切换到新dev分支…