Flask接口签名sign原理与实例代码浅析
252
2023-05-28
Spring 实现excel及pdf导出表格示例
整理文档,搜刮出一个Spring 实现excel及pdf导出表格的代码,稍微整理精简一下做下分享。
excel 导出:
package light.mvc.utils.excel;
import java.util.Date;
import java.util.List;
import java.util.Map;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.poi.hssf.usermodel.HSSFCell;
import org.apache.poi.hssf.usermodel.HSSFCellStyle;
import org.apache.poi.hssf.usermodel.HSSFFont;
import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.springframework.web.servlet.view.document.AbstractExcelView;
import light.mvc.pageModel.sys.Log;
import light.mvc.utils.Tools;
public class ExcelView extends AbstractExcelView{
private HSSFSheet sheet;
private HSSFCell cell;
@Override
protected void buildExcelDocument(Map
HSSFWorkbook workbook, HttpServletRequest request,
HttpServletResponse response) throws Exception {
// TODO Auto-generated method stub
Date date = new Date();
String filename = Tools.date2Str(date, "yyyyMMddHHmmss");
String title_content = (String) model.get("title_content");
response.setContentType("application/octet-stream");
response.setHeader("Content-Disposition", "attachment;filename="+filename+".xls");
sheet = workbook.createSheet(title_content);
List
int len = titles.size();
HSSFCellStyle headerStyle = workbook.createCellStyle(); //标题样式
headerStyle.setAlignment(HSSFCellStyle.ALIGN_CENTER);
headerStyle.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER);
HSSFFont headerFont = workbook.createFont(); //标题字体
headerFont.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD);
headerFont.setFontHeightInPoints((short)11);
headerStyle.setFont(headerFont);
short width = 20,height=25*20;
sheet.setDefaultColumnWidth(width);
for(int i=0; i String title = titles.get(i); cell = getCell(sheet, 0, i); cell.setCellStyle(headerStyle); setText(cell,title); } sheet.getRow(0).setHeight(height); HSSFCellStyle contentStyle = workbook.createCellStyle(); //内容样式 contentStyle.setAlignment(HSSFCellStyle.ALIGN_CENTER); String type = (String) model.get("type"); if ("log".equals(type)){ List logExcel(logList, contentStyle); } } /** * * @Title: logExcel * @Description: 日志导出 * @param @param logList * @param @param contentStyle * @return void * @throws */ public void logExcel(List int logCount = logList.size(); if (logList != null && logCount > 0){ for(int i=0; i Log log = logList.get(i); String loginname = log.getLoginname(); cell = getCell(sheet, i+1, 0); cell.setCellStyle(contentStyle); setText(cell,loginname); String username = log.getName(); cell = getCell(sheet, i+1, 1); cell.setCellStyle(contentStyle); setText(cell,username); String IP = log.getIp(); cell = getCell(sheet, i+1, 2); cell.setCellStyle(contentStyle); setText(cell,IP); String organizationName = log.getOrganizationName(); cell = getCell(sheet, i+1, 3); cell.setCellStyle(contentStyle); setText(cell,organizationName); String usertype = log.getUsertype()==0 ? "管理员" : "员工"; cell = getCell(sheet, i+1, 4); cell.setCellStyle(contentStyle); setText(cell,usertype); String msg = log.getMsg(); cell = getCell(sheet, i+1, 5); cell.setCellStyle(contentStyle); setText(cell,msg); Date lastLogin = log.getCreatedatetime()!=null ? log.getCreatedatetime() : null; cell = getCell(sheet, i+1, 6); cell.setCellStyle(contentStyle); setText(cell,Tools.date2Str(lastLogin)); } } } } pdf导出: 重写spring调用itext package light.mvc.utils.pdf; import java.io.ByteArrayOutputStream; import java.io.OutputStream; import java.util.Map; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.springframework.web.servlet.view.AbstractView; import com.itextpdf.text.Document; import com.itextpdf.text.DocumentException; import com.itextpdf.text.PageSize; import com.itextpdf.text.pdf.PdfWriter; /** * 这里就全部复制spring 的,然后引入的东西改成第5版的就行了 代码 几乎不变,唯一变的是引用路径~。 * * */ public abstract class AbstractIText5PdfView extends AbstractView { public AbstractIText5PdfView() { setContentType("application/pdf"); } @Override protected boolean generatesDownloadContent() { return true; } @Override protected final void renderMergedOutputModel(Map HttpServletResponse response) throws Exception { // 获得流 ByteArrayOutputStream baos = createTemporaryOutputStream(); Document document = newDocument(); PdfWriter writer = newWriter(document, baos); prepareWriter(model, writer, request); buildPdfMetadata(model, document, request); document.open(); buildPdfDocument(model, document, writer, request, response); document.close(); writeToResponse(response, baos); } protected Document newDocument() { return new Document(PageSize.A4); } protected PdfWriter newWriter(Document document, OutputStream os) throws DocumentException { return PdfWriter.getInstance(document, os); } protected void prepareWriter(Map throws DocumentException { writer.setViewerPreferences(getViewerPreferences()); } protected int getViewerPreferences() { return PdfWriter.ALLOW_PRINTING | PdfWriter.PageLayoutSinglePage; } protected void buildPdfMetadata(Map } protected abstract void buildPdfDocument(Map HttpServletRequest request, HttpServletResponse response) throws Exception; } pdf 公共类 package light.mvc.utils.pdf; import java.io.IOException; import java.util.ArrayList; import java.util.List; import java.util.Map; import com.itextpdf.text.Chunk; import com.itextpdf.text.DocumentException; import com.itextpdf.text.Font; import com.itextpdf.text.Paragraph; import com.itextpdf.text.pdf.BaseFont; /** * @ClassName: PDFUtil * @Description: * @author liuyajun * @date 2017年3月2日 下午1:21:21 * */ public class PDFUtil { // 对参数的封装形式比如{name} public static final String BEGIN = "{"; public static final String END = "}"; // 换行形式{#} public static final String NEW_LINE = "#"; // 默认的行间距、首行距离等,自己添加 public static final float DEFAULT_LEADING = 20; public static final float DEFAULT_LINE_INDENT = 30; // 基本字体和样式 public static BaseFont bfChinese; public static Font fontChinese; public static Font UNDER_LINE = null; static{ try { // SIMKAI.TTF 默认系统语言,这里没使用第三方语言包 bfChinese = BaseFont.createFont("D:/home/java/contract/web/fonts/simsun.ttf",BaseFont.IDENTITY_H,BaseFont.NOT_EMBEDDED); //bfChinese = BaseFont.createFont("STSong-Light", "UniGB-UCS2-H", BaseFont.NOT_EMBEDDED); fontChinese = new Font(bfChinese, 12, Font.NORMAL); UNDER_LINE = new Font(bfChinese, 14,Font.UNDERLINE); } catch (DocumentException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } } // 默认样式 public static Paragraph getParagraph(String context){ return getParagraph(context,fontChinese); } public static Paragraph getParagraph(Chunk chunk){ return new Paragraph(chunk); } // 指定字体样式 public static Paragraph getParagraph(String context,Font font){ return new Paragraph(context,font); } // 获得新行,首行缩进,和行间距 public static Paragraph getNewParagraph(String context,float fixedLeading,float firstLineIndent){ Paragraph p = getParagraph(context); p.setLeading(fixedLeading); p.setFirstLineIndent(firstLineIndent); return p; } public static Paragraph getParagraph(String content , Font font , float fixedLeading , int alignment){ Paragraph p = getParagraph(content); p.setFont(font); p.setLeading(fixedLeading); p.setAlignment(alignment); return p; } // 默认段落样式 public static Paragraph getDefaultParagraph(String context){ Paragraph p = getParagraph(context); // 默认行间距 p.setLeading(DEFAULT_LEADING); // 默认首行空隙 p.setFirstLineIndent(DEFAULT_LINE_INDENT); return p; } // 将参数和字符串内容组合成集合 public static List int index = 0; List Paragraph p = getDefaultParagraph(null); while((index = context.indexOf(BEGIN)) > -1){ String text = context.substring(0,index); context = context.substring(index, context.length()); index = context.indexOf(END); String param = null; if(index > 0){ param = context.substring(BEGIN.length(),index); } p.add(text); if(!NEW_LINE.equals(param)){ Object value = map.get(param); if(value != null){ p.add(new Chunk(value.toString(),UNDER_LINE)); }else{ p.add(new Chunk("")); } }else{ list.add(p); p = getDefaultParagraph(null); p.setSpacingBefore(0); } context = context.substring(index+END.length(),context.length()); } list.add(p); list.add(getParagraph(context)); return list; } } 生成pdf package light.mvc.utils.pdf; import java.util.Date; import java.util.List; import java.util.Map; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import com.itextpdf.text.Chunk; import com.itextpdf.text.Document; import com.itextpdf.text.Font; import com.itextpdf.text.Paragraph; import com.itextpdf.text.pdf.PdfPTable; import com.itextpdf.text.pdf.PdfWriter; import light.mvc.pageModel.sys.Log; import light.mvc.utils.Tools; /** * @ClassName: LogPdfView * @Description: * @author liuyajun * @date 2017年3月2日 上午11:18:44 * */ public class PdfView extends AbstractIText5PdfView{ @Override protected void buildPdfDocument(Map HttpServletRequest request, HttpServletResponse response) throws Exception { try{ document.open(); // 标题居中 String title_content = (String) model.get("title_content"); Paragraph title = PDFUtil.getParagraph( new Chunk(title_content,new Font(PDFUtil.bfChinese,16,Font.BOLD))); title.setAlignment(Paragraph.ALIGN_CENTER); document.add(title); // 表格标题 List int len = titles.size(); PdfPTable table = new PdfPTable(len); table.setSpacingBefore(20); table.setSpacingAfter(30); for(int i=0; i String str = titles.get(i); table.addCell(PDFUtil.getParagraph(str)); } // 表格数据 String type = (String) model.get("type"); if ("log".equals(type)){ List table = logPdf(table, logList); } document.add(table); // 关闭 document.close(); }catch (Exception e) { e.printStackTrace(); } } /** * * @Title: logPdf * @Description: 日志导出 * @param @param table * @param @param logList * @param @return * @return PdfPTable * @throws */ public PdfPTable logPdf(PdfPTable table, List int logCount = logList.size(); if (logList != null && logCount > 0){ for(int i=0; i Log log = logList.get(i); String loginname = log.getLoginname(); table.addCell(PDFUtil.getParagraph(loginname)); String username = log.getName(); table.addCell(PDFUtil.getParagraph(username)); String IP = log.getIp(); table.addCell(PDFUtil.getParagraph(IP)); String organizationName = log.getOrganizationName(); table.addCell(PDFUtil.getParagraph(organizationName)); String usertype = log.getUsertype()==0 ? "管理员" : "员工"; table.addCell(PDFUtil.getParagraph(usertype)); String msg = log.getMsg(); table.addCell(PDFUtil.getParagraph(msg)); Date lastLogin = log.getCreatedatetime()!=null ? log.getCreatedatetime() : null; table.addCell(PDFUtil.getParagraph(Tools.date2Str(lastLogin))); } } return table; } } 调用 /** * 导出用户信息到excel/pdf * @return */ @RequestMapping("/download") public ModelAndView export2Excel(HttpServletRequest request, Log log){ SessionInfo sessionInfo = (SessionInfo) request.getSession().getAttribute(GlobalConstant.SESSION_INFO); if (!"admin".equals(sessionInfo.getLoginname())){ log.setUsertype(1); log.setOrganizationId(sessionInfo.getOrganizationid()); } if ("1".equals(sessionInfo.getUsertype())){ log.setLoginname(sessionInfo.getLoginname()); } PageFilter ph = new PageFilter(); ph.setSort("createdatetime"); ph.setOrder("desc"); List Map List titles.add("登录名"); titles.add("姓名"); titles.add("IP地址"); titles.add("所属部门"); titles.add("用户类型"); titles.add("操作内容"); titles.add("操作时间"); dataMap.put("titles", titles); dataMap.put("list", list); dataMap.put("title_content", "日志"); dataMap.put("type", "log"); String str = request.getParameter("str"); ModelAndView mv = null; if ("excel".equals(str)){ ExcelView excel = new ExcelView(); mv = new ModelAndView(excel,dataMap); } else if("pdf".equals(str)){ PdfView pdf = new PdfView(); mv = new ModelAndView(pdf,dataMap); } insertlog(request,"下载"+str+"文件",2); return mv; }
String title = titles.get(i);
cell = getCell(sheet, 0, i);
cell.setCellStyle(headerStyle);
setText(cell,title);
}
sheet.getRow(0).setHeight(height);
HSSFCellStyle contentStyle = workbook.createCellStyle(); //内容样式
contentStyle.setAlignment(HSSFCellStyle.ALIGN_CENTER);
String type = (String) model.get("type");
if ("log".equals(type)){
List
logExcel(logList, contentStyle);
}
}
/**
*
* @Title: logExcel
* @Description: 日志导出
* @param @param logList
* @param @param contentStyle
* @return void
* @throws
*/
public void logExcel(List
int logCount = logList.size();
if (logList != null && logCount > 0){
for(int i=0; i Log log = logList.get(i); String loginname = log.getLoginname(); cell = getCell(sheet, i+1, 0); cell.setCellStyle(contentStyle); setText(cell,loginname); String username = log.getName(); cell = getCell(sheet, i+1, 1); cell.setCellStyle(contentStyle); setText(cell,username); String IP = log.getIp(); cell = getCell(sheet, i+1, 2); cell.setCellStyle(contentStyle); setText(cell,IP); String organizationName = log.getOrganizationName(); cell = getCell(sheet, i+1, 3); cell.setCellStyle(contentStyle); setText(cell,organizationName); String usertype = log.getUsertype()==0 ? "管理员" : "员工"; cell = getCell(sheet, i+1, 4); cell.setCellStyle(contentStyle); setText(cell,usertype); String msg = log.getMsg(); cell = getCell(sheet, i+1, 5); cell.setCellStyle(contentStyle); setText(cell,msg); Date lastLogin = log.getCreatedatetime()!=null ? log.getCreatedatetime() : null; cell = getCell(sheet, i+1, 6); cell.setCellStyle(contentStyle); setText(cell,Tools.date2Str(lastLogin)); } } } } pdf导出: 重写spring调用itext package light.mvc.utils.pdf; import java.io.ByteArrayOutputStream; import java.io.OutputStream; import java.util.Map; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.springframework.web.servlet.view.AbstractView; import com.itextpdf.text.Document; import com.itextpdf.text.DocumentException; import com.itextpdf.text.PageSize; import com.itextpdf.text.pdf.PdfWriter; /** * 这里就全部复制spring 的,然后引入的东西改成第5版的就行了 代码 几乎不变,唯一变的是引用路径~。 * * */ public abstract class AbstractIText5PdfView extends AbstractView { public AbstractIText5PdfView() { setContentType("application/pdf"); } @Override protected boolean generatesDownloadContent() { return true; } @Override protected final void renderMergedOutputModel(Map HttpServletResponse response) throws Exception { // 获得流 ByteArrayOutputStream baos = createTemporaryOutputStream(); Document document = newDocument(); PdfWriter writer = newWriter(document, baos); prepareWriter(model, writer, request); buildPdfMetadata(model, document, request); document.open(); buildPdfDocument(model, document, writer, request, response); document.close(); writeToResponse(response, baos); } protected Document newDocument() { return new Document(PageSize.A4); } protected PdfWriter newWriter(Document document, OutputStream os) throws DocumentException { return PdfWriter.getInstance(document, os); } protected void prepareWriter(Map throws DocumentException { writer.setViewerPreferences(getViewerPreferences()); } protected int getViewerPreferences() { return PdfWriter.ALLOW_PRINTING | PdfWriter.PageLayoutSinglePage; } protected void buildPdfMetadata(Map } protected abstract void buildPdfDocument(Map HttpServletRequest request, HttpServletResponse response) throws Exception; } pdf 公共类 package light.mvc.utils.pdf; import java.io.IOException; import java.util.ArrayList; import java.util.List; import java.util.Map; import com.itextpdf.text.Chunk; import com.itextpdf.text.DocumentException; import com.itextpdf.text.Font; import com.itextpdf.text.Paragraph; import com.itextpdf.text.pdf.BaseFont; /** * @ClassName: PDFUtil * @Description: * @author liuyajun * @date 2017年3月2日 下午1:21:21 * */ public class PDFUtil { // 对参数的封装形式比如{name} public static final String BEGIN = "{"; public static final String END = "}"; // 换行形式{#} public static final String NEW_LINE = "#"; // 默认的行间距、首行距离等,自己添加 public static final float DEFAULT_LEADING = 20; public static final float DEFAULT_LINE_INDENT = 30; // 基本字体和样式 public static BaseFont bfChinese; public static Font fontChinese; public static Font UNDER_LINE = null; static{ try { // SIMKAI.TTF 默认系统语言,这里没使用第三方语言包 bfChinese = BaseFont.createFont("D:/home/java/contract/web/fonts/simsun.ttf",BaseFont.IDENTITY_H,BaseFont.NOT_EMBEDDED); //bfChinese = BaseFont.createFont("STSong-Light", "UniGB-UCS2-H", BaseFont.NOT_EMBEDDED); fontChinese = new Font(bfChinese, 12, Font.NORMAL); UNDER_LINE = new Font(bfChinese, 14,Font.UNDERLINE); } catch (DocumentException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } } // 默认样式 public static Paragraph getParagraph(String context){ return getParagraph(context,fontChinese); } public static Paragraph getParagraph(Chunk chunk){ return new Paragraph(chunk); } // 指定字体样式 public static Paragraph getParagraph(String context,Font font){ return new Paragraph(context,font); } // 获得新行,首行缩进,和行间距 public static Paragraph getNewParagraph(String context,float fixedLeading,float firstLineIndent){ Paragraph p = getParagraph(context); p.setLeading(fixedLeading); p.setFirstLineIndent(firstLineIndent); return p; } public static Paragraph getParagraph(String content , Font font , float fixedLeading , int alignment){ Paragraph p = getParagraph(content); p.setFont(font); p.setLeading(fixedLeading); p.setAlignment(alignment); return p; } // 默认段落样式 public static Paragraph getDefaultParagraph(String context){ Paragraph p = getParagraph(context); // 默认行间距 p.setLeading(DEFAULT_LEADING); // 默认首行空隙 p.setFirstLineIndent(DEFAULT_LINE_INDENT); return p; } // 将参数和字符串内容组合成集合 public static List int index = 0; List Paragraph p = getDefaultParagraph(null); while((index = context.indexOf(BEGIN)) > -1){ String text = context.substring(0,index); context = context.substring(index, context.length()); index = context.indexOf(END); String param = null; if(index > 0){ param = context.substring(BEGIN.length(),index); } p.add(text); if(!NEW_LINE.equals(param)){ Object value = map.get(param); if(value != null){ p.add(new Chunk(value.toString(),UNDER_LINE)); }else{ p.add(new Chunk("")); } }else{ list.add(p); p = getDefaultParagraph(null); p.setSpacingBefore(0); } context = context.substring(index+END.length(),context.length()); } list.add(p); list.add(getParagraph(context)); return list; } } 生成pdf package light.mvc.utils.pdf; import java.util.Date; import java.util.List; import java.util.Map; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import com.itextpdf.text.Chunk; import com.itextpdf.text.Document; import com.itextpdf.text.Font; import com.itextpdf.text.Paragraph; import com.itextpdf.text.pdf.PdfPTable; import com.itextpdf.text.pdf.PdfWriter; import light.mvc.pageModel.sys.Log; import light.mvc.utils.Tools; /** * @ClassName: LogPdfView * @Description: * @author liuyajun * @date 2017年3月2日 上午11:18:44 * */ public class PdfView extends AbstractIText5PdfView{ @Override protected void buildPdfDocument(Map HttpServletRequest request, HttpServletResponse response) throws Exception { try{ document.open(); // 标题居中 String title_content = (String) model.get("title_content"); Paragraph title = PDFUtil.getParagraph( new Chunk(title_content,new Font(PDFUtil.bfChinese,16,Font.BOLD))); title.setAlignment(Paragraph.ALIGN_CENTER); document.add(title); // 表格标题 List int len = titles.size(); PdfPTable table = new PdfPTable(len); table.setSpacingBefore(20); table.setSpacingAfter(30); for(int i=0; i String str = titles.get(i); table.addCell(PDFUtil.getParagraph(str)); } // 表格数据 String type = (String) model.get("type"); if ("log".equals(type)){ List table = logPdf(table, logList); } document.add(table); // 关闭 document.close(); }catch (Exception e) { e.printStackTrace(); } } /** * * @Title: logPdf * @Description: 日志导出 * @param @param table * @param @param logList * @param @return * @return PdfPTable * @throws */ public PdfPTable logPdf(PdfPTable table, List int logCount = logList.size(); if (logList != null && logCount > 0){ for(int i=0; i Log log = logList.get(i); String loginname = log.getLoginname(); table.addCell(PDFUtil.getParagraph(loginname)); String username = log.getName(); table.addCell(PDFUtil.getParagraph(username)); String IP = log.getIp(); table.addCell(PDFUtil.getParagraph(IP)); String organizationName = log.getOrganizationName(); table.addCell(PDFUtil.getParagraph(organizationName)); String usertype = log.getUsertype()==0 ? "管理员" : "员工"; table.addCell(PDFUtil.getParagraph(usertype)); String msg = log.getMsg(); table.addCell(PDFUtil.getParagraph(msg)); Date lastLogin = log.getCreatedatetime()!=null ? log.getCreatedatetime() : null; table.addCell(PDFUtil.getParagraph(Tools.date2Str(lastLogin))); } } return table; } } 调用 /** * 导出用户信息到excel/pdf * @return */ @RequestMapping("/download") public ModelAndView export2Excel(HttpServletRequest request, Log log){ SessionInfo sessionInfo = (SessionInfo) request.getSession().getAttribute(GlobalConstant.SESSION_INFO); if (!"admin".equals(sessionInfo.getLoginname())){ log.setUsertype(1); log.setOrganizationId(sessionInfo.getOrganizationid()); } if ("1".equals(sessionInfo.getUsertype())){ log.setLoginname(sessionInfo.getLoginname()); } PageFilter ph = new PageFilter(); ph.setSort("createdatetime"); ph.setOrder("desc"); List Map List titles.add("登录名"); titles.add("姓名"); titles.add("IP地址"); titles.add("所属部门"); titles.add("用户类型"); titles.add("操作内容"); titles.add("操作时间"); dataMap.put("titles", titles); dataMap.put("list", list); dataMap.put("title_content", "日志"); dataMap.put("type", "log"); String str = request.getParameter("str"); ModelAndView mv = null; if ("excel".equals(str)){ ExcelView excel = new ExcelView(); mv = new ModelAndView(excel,dataMap); } else if("pdf".equals(str)){ PdfView pdf = new PdfView(); mv = new ModelAndView(pdf,dataMap); } insertlog(request,"下载"+str+"文件",2); return mv; }
Log log = logList.get(i);
String loginname = log.getLoginname();
cell = getCell(sheet, i+1, 0);
cell.setCellStyle(contentStyle);
setText(cell,loginname);
String username = log.getName();
cell = getCell(sheet, i+1, 1);
cell.setCellStyle(contentStyle);
setText(cell,username);
String IP = log.getIp();
cell = getCell(sheet, i+1, 2);
cell.setCellStyle(contentStyle);
setText(cell,IP);
String organizationName = log.getOrganizationName();
cell = getCell(sheet, i+1, 3);
cell.setCellStyle(contentStyle);
setText(cell,organizationName);
String usertype = log.getUsertype()==0 ? "管理员" : "员工";
cell = getCell(sheet, i+1, 4);
cell.setCellStyle(contentStyle);
setText(cell,usertype);
String msg = log.getMsg();
cell = getCell(sheet, i+1, 5);
cell.setCellStyle(contentStyle);
setText(cell,msg);
Date lastLogin = log.getCreatedatetime()!=null ? log.getCreatedatetime() : null;
cell = getCell(sheet, i+1, 6);
cell.setCellStyle(contentStyle);
setText(cell,Tools.date2Str(lastLogin));
}
}
}
}
pdf导出:
重写spring调用itext
package light.mvc.utils.pdf;
import java.io.ByteArrayOutputStream;
import java.io.OutputStream;
import java.util.Map;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.springframework.web.servlet.view.AbstractView;
import com.itextpdf.text.Document;
import com.itextpdf.text.DocumentException;
import com.itextpdf.text.PageSize;
import com.itextpdf.text.pdf.PdfWriter;
/**
* 这里就全部复制spring 的,然后引入的东西改成第5版的就行了 代码 几乎不变,唯一变的是引用路径~。
*
*
*/
public abstract class AbstractIText5PdfView extends AbstractView {
public AbstractIText5PdfView() {
setContentType("application/pdf");
}
@Override
protected boolean generatesDownloadContent() {
return true;
}
@Override
protected final void renderMergedOutputModel(Map
HttpServletResponse response) throws Exception {
// 获得流
ByteArrayOutputStream baos = createTemporaryOutputStream();
Document document = newDocument();
PdfWriter writer = newWriter(document, baos);
prepareWriter(model, writer, request);
buildPdfMetadata(model, document, request);
document.open();
buildPdfDocument(model, document, writer, request, response);
document.close();
writeToResponse(response, baos);
}
protected Document newDocument() {
return new Document(PageSize.A4);
}
protected PdfWriter newWriter(Document document, OutputStream os) throws DocumentException {
return PdfWriter.getInstance(document, os);
}
protected void prepareWriter(Map
throws DocumentException {
writer.setViewerPreferences(getViewerPreferences());
}
protected int getViewerPreferences() {
return PdfWriter.ALLOW_PRINTING | PdfWriter.PageLayoutSinglePage;
}
protected void buildPdfMetadata(Map
}
protected abstract void buildPdfDocument(Map
HttpServletRequest request, HttpServletResponse response) throws Exception;
}
pdf 公共类
package light.mvc.utils.pdf;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import com.itextpdf.text.Chunk;
import com.itextpdf.text.DocumentException;
import com.itextpdf.text.Font;
import com.itextpdf.text.Paragraph;
import com.itextpdf.text.pdf.BaseFont;
/**
* @ClassName: PDFUtil
* @Description:
* @author liuyajun
* @date 2017年3月2日 下午1:21:21
*
*/
public class PDFUtil {
// 对参数的封装形式比如{name}
public static final String BEGIN = "{";
public static final String END = "}";
// 换行形式{#}
public static final String NEW_LINE = "#";
// 默认的行间距、首行距离等,自己添加
public static final float DEFAULT_LEADING = 20;
public static final float DEFAULT_LINE_INDENT = 30;
// 基本字体和样式
public static BaseFont bfChinese;
public static Font fontChinese;
public static Font UNDER_LINE = null;
static{
try {
// SIMKAI.TTF 默认系统语言,这里没使用第三方语言包
bfChinese = BaseFont.createFont("D:/home/java/contract/web/fonts/simsun.ttf",BaseFont.IDENTITY_H,BaseFont.NOT_EMBEDDED);
//bfChinese = BaseFont.createFont("STSong-Light", "UniGB-UCS2-H", BaseFont.NOT_EMBEDDED);
fontChinese = new Font(bfChinese, 12, Font.NORMAL);
UNDER_LINE = new Font(bfChinese, 14,Font.UNDERLINE);
} catch (DocumentException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
// 默认样式
public static Paragraph getParagraph(String context){
return getParagraph(context,fontChinese);
}
public static Paragraph getParagraph(Chunk chunk){
return new Paragraph(chunk);
}
// 指定字体样式
public static Paragraph getParagraph(String context,Font font){
return new Paragraph(context,font);
}
// 获得新行,首行缩进,和行间距
public static Paragraph getNewParagraph(String context,float fixedLeading,float firstLineIndent){
Paragraph p = getParagraph(context);
p.setLeading(fixedLeading);
p.setFirstLineIndent(firstLineIndent);
return p;
}
public static Paragraph getParagraph(String content , Font font , float fixedLeading , int alignment){
Paragraph p = getParagraph(content);
p.setFont(font);
p.setLeading(fixedLeading);
p.setAlignment(alignment);
return p;
}
// 默认段落样式
public static Paragraph getDefaultParagraph(String context){
Paragraph p = getParagraph(context);
// 默认行间距
p.setLeading(DEFAULT_LEADING);
// 默认首行空隙
p.setFirstLineIndent(DEFAULT_LINE_INDENT);
return p;
}
// 将参数和字符串内容组合成集合
public static List
int index = 0;
List
Paragraph p = getDefaultParagraph(null);
while((index = context.indexOf(BEGIN)) > -1){
String text = context.substring(0,index);
context = context.substring(index, context.length());
index = context.indexOf(END);
String param = null;
if(index > 0){
param = context.substring(BEGIN.length(),index);
}
p.add(text);
if(!NEW_LINE.equals(param)){
Object value = map.get(param);
if(value != null){
p.add(new Chunk(value.toString(),UNDER_LINE));
}else{
p.add(new Chunk(""));
}
}else{
list.add(p);
p = getDefaultParagraph(null);
p.setSpacingBefore(0);
}
context = context.substring(index+END.length(),context.length());
}
list.add(p);
list.add(getParagraph(context));
return list;
}
}
生成pdf
package light.mvc.utils.pdf;
import java.util.Date;
import java.util.List;
import java.util.Map;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import com.itextpdf.text.Chunk;
import com.itextpdf.text.Document;
import com.itextpdf.text.Font;
import com.itextpdf.text.Paragraph;
import com.itextpdf.text.pdf.PdfPTable;
import com.itextpdf.text.pdf.PdfWriter;
import light.mvc.pageModel.sys.Log;
import light.mvc.utils.Tools;
/**
* @ClassName: LogPdfView
* @Description:
* @author liuyajun
* @date 2017年3月2日 上午11:18:44
*
*/
public class PdfView extends AbstractIText5PdfView{
@Override
protected void buildPdfDocument(Map
HttpServletRequest request, HttpServletResponse response) throws Exception {
try{
document.open();
// 标题居中
String title_content = (String) model.get("title_content");
Paragraph title = PDFUtil.getParagraph(
new Chunk(title_content,new Font(PDFUtil.bfChinese,16,Font.BOLD)));
title.setAlignment(Paragraph.ALIGN_CENTER);
document.add(title);
// 表格标题
List
int len = titles.size();
PdfPTable table = new PdfPTable(len);
table.setSpacingBefore(20);
table.setSpacingAfter(30);
for(int i=0; i String str = titles.get(i); table.addCell(PDFUtil.getParagraph(str)); } // 表格数据 String type = (String) model.get("type"); if ("log".equals(type)){ List table = logPdf(table, logList); } document.add(table); // 关闭 document.close(); }catch (Exception e) { e.printStackTrace(); } } /** * * @Title: logPdf * @Description: 日志导出 * @param @param table * @param @param logList * @param @return * @return PdfPTable * @throws */ public PdfPTable logPdf(PdfPTable table, List int logCount = logList.size(); if (logList != null && logCount > 0){ for(int i=0; i Log log = logList.get(i); String loginname = log.getLoginname(); table.addCell(PDFUtil.getParagraph(loginname)); String username = log.getName(); table.addCell(PDFUtil.getParagraph(username)); String IP = log.getIp(); table.addCell(PDFUtil.getParagraph(IP)); String organizationName = log.getOrganizationName(); table.addCell(PDFUtil.getParagraph(organizationName)); String usertype = log.getUsertype()==0 ? "管理员" : "员工"; table.addCell(PDFUtil.getParagraph(usertype)); String msg = log.getMsg(); table.addCell(PDFUtil.getParagraph(msg)); Date lastLogin = log.getCreatedatetime()!=null ? log.getCreatedatetime() : null; table.addCell(PDFUtil.getParagraph(Tools.date2Str(lastLogin))); } } return table; } } 调用 /** * 导出用户信息到excel/pdf * @return */ @RequestMapping("/download") public ModelAndView export2Excel(HttpServletRequest request, Log log){ SessionInfo sessionInfo = (SessionInfo) request.getSession().getAttribute(GlobalConstant.SESSION_INFO); if (!"admin".equals(sessionInfo.getLoginname())){ log.setUsertype(1); log.setOrganizationId(sessionInfo.getOrganizationid()); } if ("1".equals(sessionInfo.getUsertype())){ log.setLoginname(sessionInfo.getLoginname()); } PageFilter ph = new PageFilter(); ph.setSort("createdatetime"); ph.setOrder("desc"); List Map List titles.add("登录名"); titles.add("姓名"); titles.add("IP地址"); titles.add("所属部门"); titles.add("用户类型"); titles.add("操作内容"); titles.add("操作时间"); dataMap.put("titles", titles); dataMap.put("list", list); dataMap.put("title_content", "日志"); dataMap.put("type", "log"); String str = request.getParameter("str"); ModelAndView mv = null; if ("excel".equals(str)){ ExcelView excel = new ExcelView(); mv = new ModelAndView(excel,dataMap); } else if("pdf".equals(str)){ PdfView pdf = new PdfView(); mv = new ModelAndView(pdf,dataMap); } insertlog(request,"下载"+str+"文件",2); return mv; }
String str = titles.get(i);
table.addCell(PDFUtil.getParagraph(str));
}
// 表格数据
String type = (String) model.get("type");
if ("log".equals(type)){
List
table = logPdf(table, logList);
}
document.add(table);
// 关闭
document.close();
}catch (Exception e) {
e.printStackTrace();
}
}
/**
*
* @Title: logPdf
* @Description: 日志导出
* @param @param table
* @param @param logList
* @param @return
* @return PdfPTable
* @throws
*/
public PdfPTable logPdf(PdfPTable table, List
int logCount = logList.size();
if (logList != null && logCount > 0){
for(int i=0; i Log log = logList.get(i); String loginname = log.getLoginname(); table.addCell(PDFUtil.getParagraph(loginname)); String username = log.getName(); table.addCell(PDFUtil.getParagraph(username)); String IP = log.getIp(); table.addCell(PDFUtil.getParagraph(IP)); String organizationName = log.getOrganizationName(); table.addCell(PDFUtil.getParagraph(organizationName)); String usertype = log.getUsertype()==0 ? "管理员" : "员工"; table.addCell(PDFUtil.getParagraph(usertype)); String msg = log.getMsg(); table.addCell(PDFUtil.getParagraph(msg)); Date lastLogin = log.getCreatedatetime()!=null ? log.getCreatedatetime() : null; table.addCell(PDFUtil.getParagraph(Tools.date2Str(lastLogin))); } } return table; } } 调用 /** * 导出用户信息到excel/pdf * @return */ @RequestMapping("/download") public ModelAndView export2Excel(HttpServletRequest request, Log log){ SessionInfo sessionInfo = (SessionInfo) request.getSession().getAttribute(GlobalConstant.SESSION_INFO); if (!"admin".equals(sessionInfo.getLoginname())){ log.setUsertype(1); log.setOrganizationId(sessionInfo.getOrganizationid()); } if ("1".equals(sessionInfo.getUsertype())){ log.setLoginname(sessionInfo.getLoginname()); } PageFilter ph = new PageFilter(); ph.setSort("createdatetime"); ph.setOrder("desc"); List Map List titles.add("登录名"); titles.add("姓名"); titles.add("IP地址"); titles.add("所属部门"); titles.add("用户类型"); titles.add("操作内容"); titles.add("操作时间"); dataMap.put("titles", titles); dataMap.put("list", list); dataMap.put("title_content", "日志"); dataMap.put("type", "log"); String str = request.getParameter("str"); ModelAndView mv = null; if ("excel".equals(str)){ ExcelView excel = new ExcelView(); mv = new ModelAndView(excel,dataMap); } else if("pdf".equals(str)){ PdfView pdf = new PdfView(); mv = new ModelAndView(pdf,dataMap); } insertlog(request,"下载"+str+"文件",2); return mv; }
Log log = logList.get(i);
String loginname = log.getLoginname();
table.addCell(PDFUtil.getParagraph(loginname));
String username = log.getName();
table.addCell(PDFUtil.getParagraph(username));
String IP = log.getIp();
table.addCell(PDFUtil.getParagraph(IP));
String organizationName = log.getOrganizationName();
table.addCell(PDFUtil.getParagraph(organizationName));
String usertype = log.getUsertype()==0 ? "管理员" : "员工";
table.addCell(PDFUtil.getParagraph(usertype));
String msg = log.getMsg();
table.addCell(PDFUtil.getParagraph(msg));
Date lastLogin = log.getCreatedatetime()!=null ? log.getCreatedatetime() : null;
table.addCell(PDFUtil.getParagraph(Tools.date2Str(lastLogin)));
}
}
return table;
}
}
调用
/**
* 导出用户信息到excel/pdf
* @return
*/
@RequestMapping("/download")
public ModelAndView export2Excel(HttpServletRequest request, Log log){
SessionInfo sessionInfo = (SessionInfo) request.getSession().getAttribute(GlobalConstant.SESSION_INFO);
if (!"admin".equals(sessionInfo.getLoginname())){
log.setUsertype(1);
log.setOrganizationId(sessionInfo.getOrganizationid());
}
if ("1".equals(sessionInfo.getUsertype())){
log.setLoginname(sessionInfo.getLoginname());
}
PageFilter ph = new PageFilter();
ph.setSort("createdatetime");
ph.setOrder("desc");
List
Map
List
titles.add("登录名");
titles.add("姓名");
titles.add("IP地址");
titles.add("所属部门");
titles.add("用户类型");
titles.add("操作内容");
titles.add("操作时间");
dataMap.put("titles", titles);
dataMap.put("list", list);
dataMap.put("title_content", "日志");
dataMap.put("type", "log");
String str = request.getParameter("str");
ModelAndView mv = null;
if ("excel".equals(str)){
ExcelView excel = new ExcelView();
mv = new ModelAndView(excel,dataMap);
} else if("pdf".equals(str)){
PdfView pdf = new PdfView();
mv = new ModelAndView(pdf,dataMap);
}
insertlog(request,"下载"+str+"文件",2);
return mv;
}
版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。
发表评论
暂时没有评论,来抢沙发吧~