导出PDF文档

实体类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);
    }

}

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值