pom依赖
<!--spring boot集成itextpdf-->
<dependency>
<groupId>com.itextpdf</groupId>
<artifactId>itextpdf</artifactId>
<version>5.4.3</version>
</dependency>
<dependency>
<groupId>com.itextpdf</groupId>
<artifactId>itext-asian</artifactId>
<version>5.2.0</version>
</dependency>
<!--Easypoi导入导出-->
<dependency>
<groupId>cn.afterturn</groupId>
<artifactId>easypoi-annotation</artifactId>
<version>4.1.0</version>
</dependency>
controller层
package com.controller;
import com.controller.pdfdto.CustomerCheckedOrder;
import com.itextpdf.text.*;
import com.itextpdf.text.pdf.BaseFont;
import com.itextpdf.text.pdf.PdfPCell;
import com.itextpdf.text.pdf.PdfPTable;
import com.itextpdf.text.pdf.PdfWriter;
import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.math.BigDecimal;
import java.net.URLEncoder;
import java.util.ArrayList;
import java.util.List;
@RequestMapping("/test")
@Slf4j
@RestController
public class TestPdf {
/**
* 导出pdf方法
*
*/
@GetMapping("/pdf")
@SuppressWarnings("AlibabaMethodTooLong")
public void exportPDF(HttpServletRequest req, HttpServletResponse resp) throws Exception {
List<CustomerCheckedOrder> list = new ArrayList<>();
CustomerCheckedOrder c = new CustomerCheckedOrder();
c.setOrderId("123456");
c.setWaybillId("ssssssssss");
c.setCustomerWeight(new BigDecimal(1));
list.add(c);
log.info("已核对订单PDF打印");
File file = null;
InputStream fin = null;
ServletOutputStream out = null;
/*******pdf文件内容生成开始*********/
Document document = new Document(PageSize.A4, 25, 25, 25, 25);
String filePar = null;
// 设置默认文件夹路径
filePar = "";
File myPath = new File(filePar);
file = new File(myPath.getCanonicalPath() + "/" + "testpdf" + System.currentTimeMillis() + ".pdf");
if (!myPath.exists()) {
myPath.mkdir();
}
PdfWriter writer = PdfWriter.getInstance(document, new FileOutputStream(file));
document.open();
// 设置表头中文字体中文字体
BaseFont bfChinese = BaseFont.createFont("STSong-Light", "UniGB-UCS2-H", BaseFont.NOT_EMBEDDED);
//定义中文字体大小
Font f10 = new Font(bfChinese, 10, Font.NORMAL);
Font f12 = new Font(bfChinese, 12, Font.NORMAL);
Font f26 = new Font(bfChinese, 26, Font.NORMAL);
//创建标题
Paragraph title1 = new Paragraph("CheckedOrderExport", f26);
title1.setAlignment(Element.ALIGN_CENTER);
Chapter chapter1 = new Chapter(title1, 1);
chapter1.setNumberDepth(0);
Section section1 = chapter1;
//创建一定列数的表格
int colNumber = 13;
PdfPTable t = new PdfPTable(colNumber);
//设置段落上下空白
t.setSpacingBefore(25);
t.setSpacingAfter(25);
// 居左,定义单元格宽度
t.setHorizontalAlignment(Element.ALIGN_CENTER);
float[] cellsWidth = {0.5f, 0.5f, 0.5f, 0.4f, 0.4f, 0.4f, 0.3f, 0.3f, 0.4f, 0.4f, 0.4f, 0.2f, 0.2f};
t.setWidths(cellsWidth);
//表格的总宽度
t.setTotalWidth(500f);
// 表格的宽度百分比
t.setWidthPercentage(100);
//设置表头
PdfPCell c1 = new PdfPCell(new Paragraph("订单号", f12));
t.addCell(c1);
PdfPCell c2 = new PdfPCell(new Paragraph("运单号", f12));
t.addCell(c2);
PdfPCell c3 = new PdfPCell(new Paragraph("出库单号", f12));
t.addCell(c3);
PdfPCell c4 = new PdfPCell(new Paragraph("客户重量", f12));
t.addCell(c4);
PdfPCell c5 = new PdfPCell(new Paragraph("清单重量", f12));
t.addCell(c5);
PdfPCell c6 = new PdfPCell(new Paragraph("运费", f12));
t.addCell(c6);
PdfPCell c7 = new PdfPCell(new Paragraph("产品类型", f12));
t.addCell(c7);
PdfPCell c8 = new PdfPCell(new Paragraph("核对产品类型", f12));
t.addCell(c8);
PdfPCell c9 = new PdfPCell(new Paragraph("修改原因", f12));
t.addCell(c9);
PdfPCell c10 = new PdfPCell(new Paragraph("核对帐号", f12));
t.addCell(c10);
PdfPCell c11 = new PdfPCell(new Paragraph("状态", f12));
t.addCell(c11);
PdfPCell c12 = new PdfPCell(new Paragraph("里程", f12));
t.addCell(c12);
PdfPCell c13 = new PdfPCell(new Paragraph("重汽审核", f12));
t.addCell(c13);
//向表格类动态填充list集合数据
for (int i = 0; i < list.size(); i++) {
CustomerCheckedOrder customerCheckedOrder = list.get(i);
t.addCell(new Paragraph(customerCheckedOrder.getOrderId(), f10));
t.addCell(new Paragraph(customerCheckedOrder.getWaybillId(), f10));
t.addCell(new Paragraph(customerCheckedOrder.getOutboundOrderId(), f10));
t.addCell(new Paragraph(checkNull(customerCheckedOrder.getCustomerWeight()), f10));
t.addCell(new Paragraph(checkNull(customerCheckedOrder.getListWeight()), f10));
t.addCell(new Paragraph(checkNull(customerCheckedOrder.getFreight()), f10));
t.addCell(new Paragraph(customerCheckedOrder.getProductType(), f10));
t.addCell(new Paragraph(customerCheckedOrder.getCheckedProductType(), f10));
t.addCell(new Paragraph("我是数据22", f10));
t.addCell(new Paragraph(customerCheckedOrder.getCheckAccount(), f10));
t.addCell(new Paragraph(customerCheckedOrder.getStatus(), f10));
t.addCell(new Paragraph(checkNull(customerCheckedOrder.getMileage()), f10));
t.addCell(new Paragraph(customerCheckedOrder.getReviewResult(), f10));
}
section1.add(t);
document.add(chapter1);
document.close();
/*******pdf文件生成结束,进行导出*********/
try {
fin = new FileInputStream(file);
resp.setCharacterEncoding("utf-8");
resp.setContentType("application/pdf");
String filename = "CheckedOrderExport";
String userAgent = "User-Agent";
String msie = "MSIE";
if (req.getHeader(userAgent).toUpperCase().indexOf(msie) > 0) {
filename = URLEncoder.encode(filename, "UTF-8");
} else {
filename = new String(filename.getBytes("UTF-8"), "ISO8859-1");
}
resp.addHeader("Content-Disposition", "attachment;filename=" + filename + ".pdf");
out = resp.getOutputStream();
// 缓冲区
byte[] buffer = new byte[512];
int bytesToRead = -1;
while ((bytesToRead = fin.read(buffer)) != -1) {
out.write(buffer, 0, bytesToRead);
}
} finally {
//整理资源
if (fin != null) {
fin.close();
}
if (out != null) {
out.close();
}
}
// 删除临时文件
if (file != null) {
file.delete();
}
if (myPath != null) {
myPath.delete();
}
}
/**
* 判空,返回字符串
*
* @param value
* @return string
*/
public String checkNull(BigDecimal value) {
if (value == null) {
return "/";
}
return value.toString();
}
}
测试地址
http://localhost:8090/test/pdf