springboot导出PDF

在POM中添加pdf依赖

	<!--pdf依赖-->
		<dependency>
			<groupId>org.xhtmlrenderer</groupId>
			<artifactId>core-renderer</artifactId>
			<version>R8</version>
		</dependency>
		<dependency>
			<groupId>com.itextpdf</groupId>
			<artifactId>itextpdf</artifactId>
			<version>5.5.12</version>
		</dependency>

需继承抽象类AbstractPdfView并实现其抽象方法

因为AbstractPdfView 是一个抽象类,在继承它后, 就要实现
其定义的抽象方法,从而完成导出的逻辑,而各个控制器都会有不同的导出逻辑。为了适应不同控
制器的自定义导出,这里先定义导出的接口

package com.example.springboot.service;


import com.lowagie.text.Document;
import com.lowagie.text.pdf.PdfWriter;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.util.Map;

public interface PdfExportService {

    public void make(Map<String,Object> model, Document document,
                     PdfWriter writer, HttpServletRequest request,
                     HttpServletResponse response);
}

PDF导出视图类

package com.example.springboot.view;

import com.example.springboot.service.PdfExportService;
import com.lowagie.text.Document;
import com.lowagie.text.pdf.PdfWriter;
import org.springframework.web.servlet.view.document.AbstractPdfView;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.util.Map;

public class PdfView extends AbstractPdfView {

    private PdfExportService pdfExportService;

    public PdfView(PdfExportService pdfExportService){
        this.pdfExportService = pdfExportService;
    }

    @Override
    protected void buildPdfDocument(Map<String, Object> map, Document document, PdfWriter pdfWriter, HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse) throws Exception {
        pdfExportService.make(map,document,pdfWriter,httpServletRequest,httpServletResponse);
    }
}

在用户控制器中导出PDF 数据

package com.example.springboot.controller;

import com.example.springboot.entity.Appeal;
import com.example.springboot.service.AppealService;
import com.example.springboot.service.PdfExportService;
import com.example.springboot.view.PdfView;
import com.lowagie.text.*;
import com.lowagie.text.Font;


import com.lowagie.text.pdf.PdfCell;
import com.lowagie.text.pdf.PdfPCell;
import com.lowagie.text.pdf.PdfPTable;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.View;

import java.awt.*;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

@Controller
@RequestMapping("/appeal")
public class AppealController {
    @Autowired
    AppealService appealService;

    @GetMapping("/export/pdf")
    public ModelAndView exportPdf(){
        List<Appeal> appealList = appealService.getAppeals();
        //定义pdf视图
        View view = new PdfView(exportService());
        ModelAndView mv = new ModelAndView();
        //设置视图
        mv.setView(view);
        //加入数据模型
        mv.addObject("appealList",appealList);
        return mv;
    }

    private PdfExportService exportService(){
        return ((model, document, writer, request, response) -> {
           try{
               //A4纸
               document.setPageSize(PageSize.A4);
               //标题
               document.addTitle("申诉信息");
               //换行
               document.add(new Chunk(("\n")));
               //表格 4列
               PdfPTable table = new PdfPTable(4);
               //单元格
               PdfPCell cell = null;
               //字体
               Font f8 = new Font();
               f8.setColor(Color.BLUE);
               f8.setStyle(Font.BOLD);
               //标题
               cell = new PdfPCell(new Paragraph("id",f8));
               //居中对齐
               cell.setHorizontalAlignment(1);
               //将单元加入表格
               table.addCell(cell);
               //标题
               cell = new PdfPCell(new Paragraph("ywdh",f8));
               //居中对齐
               cell.setHorizontalAlignment(1);
               //将单元加入表格
               table.addCell(cell);
               //标题
               cell = new PdfPCell(new Paragraph("reason",f8));
               //居中对齐
               cell.setHorizontalAlignment(1);
               //将单元加入表格
               table.addCell(cell);
               //标题
               cell = new PdfPCell(new Paragraph("time",f8));
               //居中对齐
               cell.setHorizontalAlignment(1);
               //将单元加入表格
               table.addCell(cell);
               //获取数据模型中的申诉列表
               List<Appeal> appealList = (List<Appeal>)model.get("appealList");
               for(Appeal appeal:appealList){
                   document.add(new Chunk(("\n")));
                   cell = new PdfPCell(new Paragraph(appeal.getId()));
                   table.addCell(cell);
                   cell = new PdfPCell(new Paragraph(appeal.getOrderNo()));
                   table.addCell(cell);
                   cell = new PdfPCell(new Paragraph(appeal.getReason()));
                   table.addCell(cell);
                   cell = new PdfPCell(new Paragraph(appeal.getAppealTime()));
                   table.addCell(cell);
               }
               //文档中加入表格
               document.add(table);
           }catch (DocumentException e){
               e.printStackTrace();
           }
        });
    }
}

浏览器输入http://localhost:8082/appeal/export/pdf  显示

 

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值