1.自定义注解部分代码:
package com.fitk.emis.corp.export_Util.itextpdf.pdf;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
@Target(ElementType.FIELD)//表示这个注解只能用到属性
@Retention(RetentionPolicy.RUNTIME)//表示这个注解在运行时会存在,自定义注解一般设置为这个值
public @interface PdfColumn {
/**
* @Title: title
* @Description: 表头列名 必填
*/
public String title();
/**
* 序号,如果为负号,则代表有行重叠
*/
public int sort();
/**
当序号重复,就是行叠加
*/
public String sort_row() default "";
/**
* @Title: width
* @Description: 列宽 默认15
*/
public float width() default 0.15f;
/**
* @Title: width
* @Description: 列高 默认30
*/
public int height() default 30;
public enum Alignment {
LEFT(0), ALIGN_CENTER(1), RIGHT(2);
private int value;
private Alignment(int value) {
this.value = value;
}
public int getValue() {
return value;
}
};
/**
* @Title: alignment
* @Description: 文字样式 默认居中(Alignment.CENTER)
*/
public PdfColumn.Alignment alignment() default Alignment.ALIGN_CENTER;
// /**
// * @Title: boder
// * @Description: 单元格是否需要边框 环绕包围 默认true
// */
// public boolean boder() default true;
// public enum StyleColor {
// WHITE(0x9), BLACK(0x8), BLUE(0xc), RED(0xa), YELLOW(0xd);
// private int value;
//
// private StyleColor(int value) {
// this.value = value;
// }
// public int getValue() {
// return value;
// }
// };
// /**
// * @Title: styleColor
// * @Description: 单元格背景色 默认白色
// */
// public ExcelColumn.StyleColor styleColor() default ExcelColumn.StyleColor.WHITE;
//
// public enum FontColor {
// BLACK(0x8), BLUE(0xc), RED(0xa), YELLOW(0xd);
// private int value;
//
// private FontColor(int value) {
// this.value = value;
// }
// public int getValue() {
// return value;
// }
// };
// /**
// * @Title: fontColor
// * @Description: 文字颜色 默认黑色(FontColor.BLACK) 暂支持 BLACK BLUE RED YELLO
// */
// public ExcelColumn.FontColor fontColor() default ExcelColumn.FontColor.BLACK;
/**
* @Title: fontSize
* @Description: 字号大小 默认10
*/
public int fontSize() default 10;
/**
* @Title: fontName
* @Description: 字体 默认微软雅黑
*/
public String fontName() default "微软雅黑";
}
2.例子实体类部分
package com.fitk.emis.corp.entity.bmpl_old;
import com.baomidou.mybatisplus.annotations.TableField;
import com.baomidou.mybatisplus.annotations.TableName;
import com.fitk.emis.corp.export_Util.itextpdf.pdf.PdfColumn;
import com.fitk.emis.corp.service.my_join_exp.pdf.MyPdfColumn;
import lombok.Data;
import java.io.Serializable;
/**
* 用来查询检修记录表的,这里其实也可以当成检修线入库轴承对象
* @TableName V_OH_JX_RECORD
*/
@TableName(value ="V_OH_JX_RECORD")
@Data
public class list_v_oh_jxRecord implements Serializable {
//默认设置值
private static final String[] myTitle = new String[]{"轴承编号","检修自互检(标记,通气栓)","附件检修自互检","注脂(g)","注脂自互检","人工组装自互检","外圈外径(mm)","内圈内径(mm)"
,"后挡圈(mm)","挡油环(mm)","测量自互检"};
/**
*
*/
@MyPdfColumn(title = "NO.",sort=1)
private String no;
private String brgId;
/**
*
*/
@PdfColumn(title = "轴承编号",width = 30,sort=1,fontSize=10)
@MyPdfColumn(title = "轴承编号",sort=2)
private String zcbh;
/**
*
*/
@PdfColumn(title = "检修自互检(标记,通气栓)",width = 30,sort=2,fontSize=10)
private String face01Man;
/**
*
*/
@PdfColumn(title = "检修自互检(标记,通气栓)",width = 30,sort=3,fontSize=10)
private String face02Man;
//复检检修自互检 (暂时空着)
@PdfColumn(title = "附件检修自互检",width = 15,sort=4,fontSize=10)
private String fujian1_man;
/**
*
*/
@PdfColumn(title = "附件检修自互检",width = 15,sort=5,fontSize=10)
private String fujian2_man;
/**
*
*/
@PdfColumn(title = "注脂(g)",width = 15,sort=-6,fontSize=10,sort_row = "6_1")
private String oilWeightNqa;
/**
*
*/
@PdfColumn(title = "注脂(g)",width = 15,sort=-6,fontSize=10,sort_row = "6_2")
private String oilWeightNqb;
/**
*
*/
@PdfColumn(title = "注脂(g)",width = 15,sort=-6,fontSize=10,sort_row = "6_3")
private String oilWeightWq;
/**
*
*/
@PdfColumn(title = "注脂自互检",width = 15,sort=7,fontSize=10)
private String oil_zzzj;
@PdfColumn(title = "注脂自互检",width = 15,sort=8,fontSize=10)
private String oil_zzhj;
/**
*
*/
private String newOh;
/**
*
*/
@PdfColumn(title = "人工组装自互检",width = 30,sort=9,fontSize=10)
private String completeMan;
//互检暂时是空的
// @PdfColumn(title = "人工组装自互检",width = 15,sort=10,fontSize=10)
private String completeMan2;
/**
*
*/
@PdfColumn(title = "外圈外径(mm)",width = 15,sort=-10,fontSize=10,sort_row = "10_1")
private String wqwja;
/**
*
*/
@PdfColumn(title = "外圈外径(mm)",width = 15,sort=-10,fontSize=10,sort_row = "10_2")
private String wqwjb;
/**
*
*/
@MyPdfColumn(title = "外圈外径平均值(mm)",sort=3)
@PdfColumn(title = "外圈外径(mm)",width = 15,sort=-10,fontSize=10,sort_row = "10_3")
private String wqwjavg;
/**
*
*/
@PdfColumn(title = "内圈内径(mm)",width = 15,sort=-11,fontSize=10,sort_row = "11_1")
private String nqnja;
/**
*
*/
@PdfColumn(title = "内圈内径(mm)",width = 15,sort=-11,fontSize=10,sort_row = "11_2")
private String nqnjb;
/**
*
*/
@MyPdfColumn(title = "内圈内径平均值(mm)",sort=4)
@PdfColumn(title = "内圈内径(mm)",width = 15,sort=-11,fontSize=10,sort_row = "11_3")
private String nqnjavg;
/**
*
*/
@MyPdfColumn(title = "后挡圈(mm)",sort=5)
@PdfColumn(title = "后挡圈(mm)",width = 15,sort=12,fontSize=10)
private String hdqnj;
/**
*
*/
@MyPdfColumn(title = "挡油环(mm)",sort=6)
@PdfColumn(title = "挡油环(mm)",width = 15,sort=13,fontSize=10)
private String dyhnj;
//暂时为空
@PdfColumn(title = "测量自互检(mm)",width = 15,sort=14,fontSize=10)
private String clman;
@PdfColumn(title = "测量自互检(mm)",width = 15,sort=15,fontSize=10)
private String checkCjMan;
private String dyhwj;
/**
*
*/
private String hdqwj;
/**
*
*/
private String lastSysPk;
/**
*
*/
private String isSt;
/**
*
*/
private String isStDesc;
/**
*
*/
private String zcxh;
/**
*
*/
private String zcxhDesc;
/**
*
*/
private String zcxc;
/**
*
*/
private String zcxcDesc;
/**
*
*/
private String lieCode;
/**
*
*/
private String carCode;
/**
*
*/
private String informCode;
/**
*
*/
private String isAxes;
/**
*
*/
private String isAxesDesc;
/**
*
*/
private String axesCode;
/**
*
*/
private String wheelCode;
/**
*
*/
private String wheelDir;
/**
*
*/
private String woPk;
/**
*
*/
private String trainNo;
/**
*
*/
private String trainType;
/**
*
*/
private String carNo;
/**
*
*/
private String projectName;
/**
*
*/
private String woName;
/**
*
*/
private String wbsName;
/**
*
*/
private String jjPeople;
/**
*
*/
private String jjDate;
/**
*
*/
private String isTrans;
/**
*
*/
private String isTransDesc;
/**
*
*/
private String lastDt;
/**
*
*/
private String ticketPaper;
/**
*
*/
private String wheelNum;
/**
*
*/
private String repaireItemNum;
/**
*
*/
private String instanceName;
/**
*
*/
private String instanceSerialNum;
/**
*
*/
private String creationDate;
/**
*
*/
private String woXc;
public String getOilWeightNqa() {
return "A:"+oilWeightNqa;
}
public String getOilWeightNqb() {
return "B:"+ oilWeightNqb;
}
public String getOilWeightWq() {
return "中间:"+ oilWeightWq;
}
public String getWqwja() {
return "A:"+wqwja;
}
public String getWqwjb() {
return "B:"+wqwjb;
}
public String getWqwjavg() {
return "平均:"+wqwjavg;
}
public String getNqnja() {
return "A:"+nqnja;
}
public String getNqnjb() {
return "B:"+nqnjb;
}
public String getNqnjavg() {
return "平均:"+nqnjavg;
}
public String getDyhwj() {
return dyhwj;
}
public String getDyhnj() {
return dyhnj;
}
public String getHdqwj() {
return hdqwj;
}
public String getHdqnj() {
return hdqnj;
}
public String getCheckCjMan() {
return checkCjMan;
}
public String getCompleteMan() {
return completeMan;
}
public String getOil_zzzj() {
if(oil_zzzj==null){
return "点检";
}
return oil_zzzj;
}
public String getClman() {
if(clman==null){
return "点检";
}
return clman;
}
public static String[] getMyTitle() {
return myTitle;
}
@TableField(exist = false)
private static final long serialVersionUID = 1L;
}
3.工具类,还没完善,有时间可以自己把一些参数提出来让调用者来设置减小耦合。
package com.fitk.emis.corp.export_Util.itextpdf.pdf;
import com.baomidou.mybatisplus.annotations.TableField;
import com.fitk.emis.corp.entity.bmpl_old.list_v_oh_jxRecord;
import com.fitk.emis.corp.entity.home.list_exp_col;
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 org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import javax.servlet.http.HttpServletResponse;
import java.io.*;
import java.lang.reflect.Field;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.Map;
public class CreatePDFUtils1 {
public Logger log = LoggerFactory.getLogger(CreatePDFUtils1.class);
public Document document;
public Class clazz;
//默认字体大小10
public Float font_size=10f;
//默认不加粗
public int font_sty=Font.NORMAL;
//创建字体(默认)
public BaseFont baseFont = BaseFont.createFont("STSong-Light", "UniGB-UCS2-H",BaseFont.NOT_EMBEDDED);
//字体大小加粗设置
public Font size14_Bfont=new Font(baseFont,14,Font.BOLD); //14号加租字体
public Font size14font=new Font(baseFont,14,Font.NORMAL); //14号正常字体
public Font size16font=new Font(baseFont,16,Font.NORMAL); //14号正常字体
public Font size18font=new Font(baseFont,18,Font.NORMAL); //14号正常字体
public Font size12_Bfont=new Font(baseFont,12,Font.BOLD); //12号加租字体
public Font size12font=new Font(baseFont,12,Font.NORMAL); //12号正常字体
public Font size11font=new Font(baseFont,10,Font.NORMAL); //11号正常字体
public Font size10_Bfont=new Font(baseFont,10,Font.BOLD); //10号加租字体
public Font size10font=new Font(baseFont,10,Font.NORMAL); //10号正常字体
public Font size8_Bfont=new Font(baseFont,8,Font.BOLD); //10号加租字体
public Font size8font=new Font(baseFont,8,Font.NORMAL); //10号正常字体
public Font size7_Bfont=new Font(baseFont,7,Font.BOLD); //7号加粗字体
public Font size7font=new Font(baseFont,7,Font.NORMAL); //7号正常字体
public Font size6_Bfont=new Font(baseFont,6,Font.BOLD); //6号加粗字体
public Font size6font=new Font(baseFont,6,Font.NORMAL); //6号正常字体
//默认字体
public Font size_natural=new Font(baseFont,font_size,font_sty);
//默认表头字体
public Font size_titleFont=new Font(baseFont,10,Font.NORMAL); //10号加租字体
//默认表尾字体
public Font size_footerFont=size8font;
//默认字段头字体
public Font size_filed_Header_font=size7font;
//默认内容体字体
public Font size_filed_Body_font=size7font;
//默认行高
public int row_Height=15;
//默认行高(表头)
public int row_Height_title=20;
//默认行高(数据字段表头)
public int row_Height_header=15;
//默认行高(数据)
public int row_Height_body=18;
//默认行高(表尾)
public int row_Height_footer=15;
//默认行宽占纸张比例 字段及数据部分
public int rowWidth=100;
//默认行宽占纸张比例 表头
public int rowWidth_level=100;
//默认行宽占纸张比例 表头
public int rowWidth_footer=100;
//左边距
public float marginLeft=36f;
//右边距
public float marginRight=36f;
//上边距
public float marginTop=36f;
//下边距
public float marginBottom=36f;
public CreatePDFUtils1() throws IOException, DocumentException {
}
/**
*
* @param str 字符串
* @param font 字体
* @param high 表格高度
* @Param alignCenter 是否水平居中
* @Param alignMidde 是否垂直居中
* @Param haveColor 是否有背景色(灰色)
* @return
*/
public static PdfPCell mircoSoftFont(String str,Font font,int high,boolean alignCenter,boolean alignMidde){
PdfPCell pdfPCell = new PdfPCell(new Phrase(str,font));
pdfPCell.setMinimumHeight(high);
pdfPCell.setUseAscender(true); // 设置可以居中
if (alignCenter){
pdfPCell.setHorizontalAlignment(PdfPCell.ALIGN_CENTER); // 设置水平居中
}
if (alignMidde){
pdfPCell.setVerticalAlignment(PdfPCell.ALIGN_MIDDLE); // 设置垂直居中
}
return pdfPCell;
}
/**
*
* @param str 字符串
* @param font 字体
* @param high 表格高度
* @Param alignCenter 是否水平居中
* @Param alignMidde 是否垂直居中
* @Param haveColor 是否有背景色(灰色)
* @return
*/
public static PdfPCell mircoSoftFont(String str,Font font,int high,boolean alignCenter,boolean alignMidde,boolean haveColor){
PdfPCell pdfPCell = new PdfPCell(new Phrase(str,font));
pdfPCell.setMinimumHeight(high);
pdfPCell.setUseAscender(true); // 设置可以居中
if (alignCenter){
pdfPCell.setHorizontalAlignment(PdfPCell.ALIGN_CENTER); // 设置水平居中
}
if (alignMidde){
pdfPCell.setVerticalAlignment(PdfPCell.ALIGN_MIDDLE); // 设置垂直居中
}
if (haveColor){
//颜色代码 RGB
pdfPCell.setBackgroundColor(new BaseColor(217,217,217));
}
return pdfPCell;
}
// public void createHardwarePDF(String outputPath, List dataList,List
5.接口代码
/**
* @Description: 导出pdf格式
* @Param:
* @return:
* @Author: sj
* @Date: 2023/12/18/018
*/
@RequestMapping(value = "/home_exp_pdf_record", method = RequestMethod.POST)
@ResponseBody
public String downAndExp_pdf_record(HttpServletRequest request, @RequestParam Map inMap , HttpServletResponse response) {
// Map myMap=new HashMap<>();
// myMap.put("brg_ids","00052229,00052225,00052219,00052218,00052217,00052216,00052214,00052213");
String brg_ids = inMap.get("brg_ids");
String[] brg_idArr = brg_ids.split(",");
System.out.println("inMap-------------------->"+inMap);
//文件路径
//本地文件地址
String filePath="D:\\apache-tomcat-8.5.32-x64\\webapps\\bmpl\\downPdf\\";
//服务器文件地址
//String filePath="E:\\apache-tomcat-8.5.32-x64\\webapps\\bmpl\\downPdf\\";
//文件名称
String fileName="";
Listlist_v_oh_jxRecords= bmplOldService.get_List_v_oh_jxRecord(brg_idArr);
list_v_oh_jxRecord list_v_oh_jxRecord = list_v_oh_jxRecords.get(0);
String zcbh = list_v_oh_jxRecord.getZcbh();
String lastDt = list_v_oh_jxRecord.getLastDt();
String format1="";
SimpleDateFormat format=new SimpleDateFormat("yyyy-MM-dd");
try {
Date parse = format.parse(lastDt);
format1 = format.format(parse);
} catch (ParseException e) {
e.printStackTrace();
}
fileName=zcbh+"("+format1+")"+"产线检修记录表.pdf";
list_v_oh_jxRecords.forEach(ent->{
System.out.println("-------------------------->"+ent.toString());
});
try {
new CreatePDFUtils1().create_recordPDF(filePath+fileName,list_v_oh_jxRecords);
} catch (Exception e) {
e.printStackTrace();
return "error";
}
return "OK"+filePath+fileName;
}