实体类Entity
package com.cbb.entity;
import java.math.BigDecimal;
import java.util.Arrays;
import java.util.Date;
import java.util.List;
import org.springframework.format.annotation.DateTimeFormat;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import com.fasterxml.jackson.annotation.JsonFormat;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
/**
* 这是一个关于每个银行卡有多少金额的实体类 && 导出excel表格与pdf文档
*
* @author 陈斌斌
*
* @date 2022年5月11日 09点23分
*
*/
@Data
@AllArgsConstructor
@NoArgsConstructor
@TableName("card")
public class Card {
/**
* 主键id
*/
@TableId(value = "id", type = IdType.AUTO)
private Integer id;
/**
* 银行卡号
*/
@TableField("cid")
private String cid;
/**
* 银行卡类别
*/
@TableField("type")
private String type;
/**
* 金额
*/
@TableField("price")
private BigDecimal price;
/**
* 起始金额
*/
@TableField(exist = false)
private BigDecimal beginPrice;
/**
* 结束金额
*/
@TableField(exist = false)
private BigDecimal endPrice;
/**
* 注册时间
*/
@DateTimeFormat(pattern = "yyyy-MM-dd")
@JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
@TableField("createTime")
private Date createTime;
/**
* 起始时间
*/
@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
@TableField(exist = false)
private Date beginTime;
/**
* 结束时间
*/
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
@DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
@TableField(exist = false)
private Date endTime;
/**
* 导出pdf
*/
public static List<String> listNames = Arrays.asList("银行卡号", "银行类别", "金额", "创建时间");
}
Service接口
package com.cbb.service;
import java.util.Map;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.springframework.web.multipart.MultipartFile;
import com.cbb.entity.Card;
/**
* 这是一个关于银行卡的业务处理的接口
*
* @author 陈斌斌
* @Date 2022年5月11日 09点25分
*
*/
public interface CardService {
/**
* 导出PDF文档
*/
void exportPdf(HttpServletRequest request, HttpServletResponse response);
}
实现类Imple
package com.cbb.serviceimple;
import java.math.BigDecimal;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.web.multipart.MultipartFile;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.cbb.entity.Card;
import com.cbb.entity.ImportCard;
import com.cbb.mapper.CardMapper;
import com.cbb.service.CardService;
import com.cbb.service.ImportCardService;
import com.cbb.util.ExcelPortUtil;
import com.cbb.util.ExportPDF;
import com.cbb.util.FileExport;
import lombok.RequiredArgsConstructor;
/**
* 这是一个关于银行卡的业务处理的实现类,处理业务逻辑
*
* @author 陈斌斌
* @Date 2022年5月11日 09点25分
*
*/
@Service
@RequiredArgsConstructor(onConstructor = @__(@Autowired))
public class CardServiceImple implements CardService {
/**
* 导出PDF文档
*/
@Override
public void exportPdf(HttpServletRequest request, HttpServletResponse response) {
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
List<Card> cardList = cardMapper.selectList(null);
// Pdf文件名
String fileName = "账单信息";
// 导出的结果集
List<String> lists = new ArrayList<String>(0);
if (cardList != null && cardList.size() > 0) {
for (int i = 0; i < cardList.size(); i++) {
lists.add(cardList.get(i).getCid().toString());
lists.add(cardList.get(i).getType().toString());
lists.add(cardList.get(i).getPrice().toString());
lists.add(sdf.format(cardList.get(i).getCreateTime()));
}
;
try {
exportPDF.createPDF(fileName, lists, Card.listNames, request, response);
} catch (Exception e) {
e.printStackTrace();
}
}
}
}
util工具类
package com.cbb.util;
import java.net.URLEncoder;
import java.util.List;
import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.springframework.stereotype.Component;
import com.itextpdf.text.Chunk;
import com.itextpdf.text.Document;
import com.itextpdf.text.Font;
import com.itextpdf.text.Paragraph;
import com.itextpdf.text.pdf.BaseFont;
import com.itextpdf.text.pdf.PdfPTable;
import com.itextpdf.text.pdf.PdfWriter;
/**
*
* @author:陈斌斌
* @创建日期: 2022年5月5日 15点52分
* @ClassName ImportPDF
* @类描述-Description:导出pdf工具类
* @版本: 1.0
*/
@Component
public class ExportPDF {
/**
*
* @param filename 生成pdf的名字
* @param list 结果集
* @param titleList 字段名称
* @param request
* @param response
* @throws Exception
*/
public void createPDF(String fileNames, List<?> list, List<String> titleList, HttpServletRequest request,
HttpServletResponse response) throws Exception {
// 第一步,实例化一个document对象
Document document = new Document();
// 第二步,设置要到出的路径
// FileOutputStream out = new FileOutputStream("D:/workbook111.pdf");
response.setContentType("application/msexcel");
response.addHeader("Content-Disposition",
"attachment; filename=" + URLEncoder.encode(fileNames + ".pdf", "UTF-8"));
response.setCharacterEncoding("utf-8");
ServletOutputStream out = response.getOutputStream();
// 如果是浏览器通过request请求需要在浏览器中输出则使用下面方式
// OutputStream out = response.getOutputStream();
// 第三步,设置字符
BaseFont bfChinese = BaseFont.createFont("STSong-Light", "UniGB-UCS2-H", false);
Font fontZH = new Font(bfChinese, 12.0F, 0);
// 第四步,将pdf文件输出到磁盘
@SuppressWarnings("unused")
PdfWriter writer = PdfWriter.getInstance(document, out);
// 第五步,打开生成的pdf文件
document.open();
// 第六步,设置内容
// String title = "标题";
document.add(new Paragraph(new Chunk("", fontZH).setLocalDestination("")));
document.add(new Paragraph("\n"));
// 创建table,注意这里的2是两列的意思,下面通过table.addCell添加的时候必须添加整行内容的所有列
PdfPTable table = new PdfPTable(titleList.size());
table.setWidthPercentage(100.0F);
table.setHeaderRows(1);
table.getDefaultCell().setHorizontalAlignment(1);
for (int i = 0; i < titleList.size(); i++) {
table.addCell(new Paragraph(titleList.get(i).toString(), fontZH));
}
for (int i = 0; i < list.size(); i++) {
table.addCell(new Paragraph(list.get(i).toString(), fontZH));
}
document.add(table);
document.add(new Paragraph("\n"));
// 第七步,关闭document
document.close();
}
}
controller层
package com.cbb.controller;
import java.util.Map;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.multipart.MultipartFile;
import com.cbb.entity.Card;
import com.cbb.service.CardService;
import lombok.RequiredArgsConstructor;
/**
* 这是一个关于银行卡的控制层
*
* @author 陈斌斌
* @Date 2022年5月11日 09点25分
*
*/
@RestController
@RequiredArgsConstructor(onConstructor = @__(@Autowired))
public class CardController {
/**
* 银行卡的业务接口
*/
private final CardService cardService;
/**
* 导出PDF文档
*/
@RequestMapping("exportCardPdf")
public void exportPdf(HttpServletRequest request, HttpServletResponse response) {
cardService.exportPdf(request, response);
}
}