DFDHZ 通过本文主要向大家介绍了springmvc示例,spring示例,spring框架开发示例,spring aop编程示例,spring实现原理等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com
整理文档,搜刮出一个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<String, Object> model, 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<String> titles = (List<String>) model.get("titles"); 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<len; 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<Log> logList = (List<Log>) model.get("list"); logExcel(logList, contentStyle); } } /** * * @Title: logExcel * @Description: 日志导出 * @param @param logList * @param @param contentStyle * @return void * @throws */ public void logExcel(List<Log> logList, HSSFCellStyle contentStyle){ int logCount = logList.size(); if (logList != null && logCount > 0){ for(int i=0; i<logCount; 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)); } } } }</div>
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<String, Object> model, HttpServletRequest request, 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<String, Object> model, PdfWriter writer, HttpServletRequest request) throws DocumentException { writer.setViewerPreferences(getViewerPreferences()); } protected int getViewerPreferences() { return PdfWriter.ALLOW_PRINTING | PdfWriter.PageLayoutSinglePage; } protected void buildPdfMetadata(Map<String, Object> model, Document document, HttpServletRequest request) { } protected abstract void buildPdfDocument(Map<String, Object> model, Document document, PdfWriter writer, HttpServletRequest request, HttpServletResponse response) throws Exception; }</div>
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 st