在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 显示