1.好处
关键词:嵌入式编码、易扩展、向下兼容。
2.示例
①先写的方法的代码给后写的新方法,先写的调后写的方法,传入默认参数。
//将页面传来的echarts赋值给dataset,如果有重复的x轴的值,后面的会覆盖前面的
private void setDatasetJsonData(String xData, String yData, DefaultCategoryDataset dataset) {
setDatasetJsonData(xData, yData, dataset, true);
}
//将页面传来的echarts赋值给dataset,如果有重复的x轴的值,后面的会覆盖前面的
private void setDatasetJsonData(String xData, String yData, DefaultCategoryDataset dataset, Boolean isReverse) {
if (StringUtils.isNotEmpty(xData) && StringUtils.isNotEmpty(yData)) {
List<Integer> ints = JsonUtil.json2pojo(xData, List.class);
List<String> strings = JsonUtil.json2pojo(yData, List.class);
if (isReverse) {
Collections.reverse(ints);
Collections.reverse(strings);
}
for (int i = 0; i < ints.size(); i++) {
dataset.setValue(ints.get(i), "", "-" + i + "-" + strings.get(i));
}
}
}
②后写的新方法根据参数来扩展。就可以将一段新代码嵌入到原代码里面,并兼容原来的调用。
/**
* @param objectList 报表内容list
* @param copyPath 生成文件路径(至文件名)
* @param title 报表标题
* @param columnHeaders 报表 列标题数组
* @param <T> 内容类型
* @throws IllegalAccessException
*/
public static <T> void generatePdfFile(List<T> objectList, String copyPath, String title, String[] columnHeaders,DefaultCategoryDataset dataset,String pdfTitle) {
generatePdfFile(objectList,copyPath,title,columnHeaders,dataset,pdfTitle,null,null);
}
/**
* @param objectList 报表内容list
* @param copyPath 生成文件路径(至文件名)
* @param title 报表标题
* @param columnHeaders 报表 列标题数组
* @param <T> 内容类型
* @throws IllegalAccessException
*/
public static <T> void generatePdfFile(List<T> objectList, String copyPath, String title, String[] columnHeaders,DefaultCategoryDataset dataset,String pdfTitle, DefaultCategoryDataset dataset2,String pdfTitle2) {
try {
// 新建文件
Document document = new Document();
//建立一个书写器(Writer)与document对象关联,并把文档写入到磁盘中
PdfWriter.getInstance(document, new FileOutputStream(copyPath));
document.open();
// 中文字体
// BaseFont bfChinese = BaseFont.createFont("STSong-Light", "UniGB-UCS2-H", BaseFont.NOT_EMBEDDED);
// BaseFont bfChinese = BaseFont.createFont(BaseFont.COURIER, BaseFont.CP1257, BaseFont.EMBEDDED);
// // 标题字体
// Font titleChinese = new Font(bfChinese, 16, Font.BOLD);
// // 内容小标题字体
// Font contenttitleChinese = new Font(bfChinese, 11, Font.BOLD);
// //设置标题
// Paragraph par = new Paragraph(new String(title.getBytes(StandardCharsets.UTF_8)), titleChinese);
// par.setAlignment(Element.ALIGN_CENTER);
// //文档中加入标题
// document.add(par);
// //文档中加入空行
Paragraph blankRow51 = new Paragraph(18f, " ", null);
document.add(blankRow51);
//设置表格的列数
int col = columnHeaders.length;
//新建一个表格
PdfPTable table = new PdfPTable(col);
//设置表格占PDF文档100%宽度
table.setWidthPercentage(100);
//设置每列表格宽度
int[] widths=new int[columnHeaders.length];
int wight=100/columnHeaders.length;
for (int i = 0; i < widths.length; i++) {
widths[i]=wight;
}
table.setWidths(widths);
//设置表格标题样式
BaseColor lightGrey01 = new BaseColor(0xCC,0xCC,0xCC);
for (int i = 0; i < columnHeaders.length; i++) {
PdfPCell cell = toPdfPCell(columnHeaders[i],Element.ALIGN_CENTER);
cell.setBackgroundColor(lightGrey01);
table.addCell(cell);
}
//表格赋值啊,这里使用反射获取对象属性
if (objectList.size()>0){
for (T obj : objectList) {
Field[] fields= obj.getClass().getDeclaredFields();
for (Field field : fields) {
field.setAccessible(true);
String str ;
if (field.get(obj)==null){
str = "";
}else{
str = new String(field.get(obj).toString().getBytes(StandardCharsets.UTF_8));
}
table.addCell(toPdfPCell(str,Element.ALIGN_CENTER));
}
}
}
//把表格加入到文档中
document.add(table);
Image image = getImage(dataset, pdfTitle);
document.add(image);
if(dataset2 != null){
Image image1 = getImage(dataset2, pdfTitle2);
document.add(image1);
}
//关闭文档
document.close();
} catch (DocumentException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
}
}