亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 學院 > 開發設計 > 正文

Spring 實現excel及pdf導出(表格)

2019-11-06 08:20:41
字體:
來源:轉載
供稿:網友

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));			}		}	}}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;}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<Paragraph> createParagraphs(String context ,Map<String,Object> map){		int index = 0;		List<Paragraph> list = new ArrayList<Paragraph>();		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<String, Object> model, Document document, PdfWriter writer,			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<String> titles = (List<String>) model.get("titles");            int len = titles.size();            PdfPTable table = new PdfPTable(len);              table.setSpacingBefore(20);              table.setSpacingAfter(30);             for(int i=0; i<len; i++){ //設置標題    			String str = titles.get(i);    			table.addCell(PDFUtil.getParagraph(str));      		}                        // 表格數據              String type = (String) model.get("type");            if ("log".equals(type)){            	List<Log> logList = (List<Log>) model.get("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<Log> logList){		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();				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<Log> list = logService.dataGrid(log, ph);		Map<String,Object> dataMap = new HashMap<String,Object>();		List<String> titles = new ArrayList<String>();		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;	}


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
国产激情久久久| 欧美一级电影免费在线观看| 精品高清美女精品国产区| 亚洲免费一级电影| 青青草精品毛片| 国产精品中文字幕在线| 深夜福利日韩在线看| 在线成人激情视频| 欧美日韩免费区域视频在线观看| 国产精品美女呻吟| 亚洲免费高清视频| 午夜剧场成人观在线视频免费观看| 亚洲人成网站免费播放| 亚洲视频专区在线| 亚洲自拍中文字幕| 久久视频精品在线| 一本色道久久88综合日韩精品| 伊人激情综合网| 国产欧美日韩91| 亚洲欧美中文另类| 国产女同一区二区| 精品国产91久久久| 欧美精品videossex性护士| 欧美性xxxx极品hd欧美风情| 国产精品视频一区二区高潮| 欧美成人午夜激情| 日韩hd视频在线观看| 精品国内产的精品视频在线观看| 欧美激情免费在线| 亚洲伦理中文字幕| 欧美亚洲国产日韩2020| 亚洲美女免费精品视频在线观看| 亚洲天堂成人在线视频| 亚洲国产91精品在线观看| 国产欧美一区二区三区在线看| 国产精品久久久久久久久男| 日韩动漫免费观看电视剧高清| 欧美精品情趣视频| 日韩精品高清在线观看| 国模精品一区二区三区色天香| 久久九九热免费视频| 久久久中精品2020中文| 欧美精品免费在线| 久久天天躁狠狠躁夜夜爽蜜月| 日韩精品极品在线观看播放免费视频| 欧美一级高清免费播放| 国内精品久久久久久影视8| 亚洲一二三在线| 欧美第一页在线| 久久精品久久久久久国产 免费| 中文字幕不卡在线视频极品| 亚洲日本欧美中文幕| 国产日韩欧美在线播放| 成人中文字幕+乱码+中文字幕| 国产经典一区二区| 色悠悠久久88| 国产精品一区二区久久国产| 亚洲精品免费av| 国产玖玖精品视频| 日韩欧美有码在线| 成人美女免费网站视频| 色在人av网站天堂精品| 在线观看欧美成人| 欧美福利视频网站| 欧美日韩国产专区| 国产精品免费久久久久久| 亚洲国产成人久久综合一区| 欧美性理论片在线观看片免费| 欧美老肥婆性猛交视频| 狠狠躁夜夜躁人人爽天天天天97| 精品久久久中文| 亚洲人成网站999久久久综合| 日韩天堂在线视频| 久久久视频免费观看| 4p变态网欧美系列| 亚洲国产欧美在线成人app| 97欧美精品一区二区三区| 国产午夜精品免费一区二区三区| 亚洲乱码国产乱码精品精天堂| 97精品在线视频| 亚洲最大的av网站| 中文字幕精品在线| 清纯唯美亚洲综合| 韩剧1988免费观看全集| 18性欧美xxxⅹ性满足| 亚洲无av在线中文字幕| 欧美精品中文字幕一区| 国产精品自产拍高潮在线观看| 中文字幕av一区中文字幕天堂| 国产精品三级久久久久久电影| 91免费精品视频| 国产精品精品久久久久久| 青青久久av北条麻妃海外网| 日韩欧美aⅴ综合网站发布| 亚洲精品欧美日韩专区| 日韩欧美综合在线视频| 色噜噜亚洲精品中文字幕| 国产激情久久久久| 97在线观看视频国产| 国产欧美欧洲在线观看| 久久久久久亚洲精品不卡| 成人黄色在线免费| 亚洲日本成人女熟在线观看| 一本久久综合亚洲鲁鲁| 日韩中文在线观看| 国产日韩欧美在线| 久久亚洲精品成人| 国产成人精品电影久久久| 中文字幕日本欧美| 92福利视频午夜1000合集在线观看| 久久色免费在线视频| 亚洲一区国产精品| 国产三级精品网站| 亚洲成人激情图| 日韩在线观看成人| 久久亚洲精品小早川怜子66| 欧美在线视频播放| 欧美最猛性xxxxx亚洲精品| 国产丝袜一区二区三区免费视频| 国产亚洲精品久久久久久777| 欧美在线一级va免费观看| 精品久久久免费| 国产91久久婷婷一区二区| 国产精品视频内| 久久久久久com| 久久97精品久久久久久久不卡| 亚洲精品91美女久久久久久久| 欧美高清videos高潮hd| 日本在线精品视频| 日韩美女视频中文字幕| 久久久久国产精品免费网站| 成人免费看吃奶视频网站| 亚洲风情亚aⅴ在线发布| 国产免费一区视频观看免费| 日韩免费av一区二区| 亚洲国产精品一区二区久| 亚洲一区久久久| 97免费视频在线播放| 高潮白浆女日韩av免费看| 国产日韩欧美中文在线播放| 久久久久久久国产精品| 欧美一级高清免费播放| 日韩在线观看成人| 久久91精品国产91久久跳| 中文亚洲视频在线| 裸体女人亚洲精品一区| 日韩美女免费观看| 麻豆国产va免费精品高清在线| 狠狠久久五月精品中文字幕| 91青草视频久久| 国产精品视频一区二区高潮| 色噜噜狠狠狠综合曰曰曰88av| 97在线视频观看| 91久久精品日日躁夜夜躁国产| 日韩久久精品成人| 精品中文字幕在线2019| 欧美成人黑人xx视频免费观看| 国产日本欧美一区二区三区| 国产精品美女免费视频| 国产精品三级在线| 欧美最近摘花xxxx摘花| 国产精品久久999| 国产精品色婷婷视频| 亚洲老头同性xxxxx|