📄 exportfilter.java
字号:
/* * Copyright 2004 original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */package org.extremecomponents.table.filter;import java.io.ByteArrayInputStream;import java.io.ByteArrayOutputStream;import java.io.IOException;import java.io.InputStream;import javax.servlet.Filter;import javax.servlet.FilterChain;import javax.servlet.FilterConfig;import javax.servlet.ServletException;import javax.servlet.ServletRequest;import javax.servlet.ServletResponse;import javax.servlet.http.HttpServletResponse;import org.apache.avalon.framework.logger.ConsoleLogger;import org.apache.avalon.framework.logger.Logger;import org.apache.commons.lang.StringUtils;import org.apache.fop.apps.Driver;import org.apache.fop.messaging.MessageHandler;import org.apache.poi.hssf.usermodel.HSSFWorkbook;import org.extremecomponents.table.handler.ExportHandler;import org.extremecomponents.util.MimeUtils;import org.xml.sax.InputSource;/** * Filter to handle the incoming FOP requests to generate the PDF document. * * * <filter><filter-name>ExportFilter </filter-name> <display-name>ExportFilter * </display-name> <filter-class>org.extremecomponents.table.filter.ExportFilter * </filter-class> </filter> <filter-mapping><filter-name>ExportFilter * </filter-name> <url-pattern>* </url-pattern> </filter-mapping> * * <!-- Action Servlet Configuration --> <filter-mapping> * <filter-name>ExportFilter </filter-name> <servlet-name>eXtremeTest * </servlet-name> </filter-mapping> * * @author jeff johnston */public class ExportFilter implements Filter { private Logger log = null; public void init(FilterConfig filterConfig) throws ServletException { } public void destroy() { } public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException { String invokeExport = null; String exportName = null; if (ExportFilterUtils.isExportMode(request)) { invokeExport = ExportFilterUtils.findInvokeExport(request); exportName = ExportFilterUtils.findExportName(request); GenericResponseWrapper wrapper = new GenericResponseWrapper((HttpServletResponse) response); chain.doFilter(request, wrapper); } else { chain.doFilter(request, response); } if (StringUtils.isNotBlank(invokeExport)) { setResponseHeaders((HttpServletResponse) response, exportName); try { if (exportName.endsWith(ExportHandler.PDF)) handlePDF(request, response); else if (exportName.endsWith(ExportHandler.XLS)) handleXLS(request, response); else if (exportName.endsWith(ExportHandler.TXT) || exportName.endsWith(ExportHandler.CSV)) handleTXT(request, response); } catch (Exception e) { e.printStackTrace(); } } } protected void handleXLS(ServletRequest request, ServletResponse response) throws Exception { HSSFWorkbook wb = (HSSFWorkbook) request.getAttribute(ExportHandler.EXPORT_DATA); if ( wb != null ) { wb.write(response.getOutputStream()); response.getOutputStream().flush(); response.getOutputStream().close(); } } protected void handlePDF(ServletRequest request, ServletResponse response) throws Exception { String output = (String) request.getAttribute(ExportHandler.EXPORT_DATA); if ( output != null ) { InputStream is = new ByteArrayInputStream(output.getBytes("UTF-8")); renderFO(new InputSource(is), (HttpServletResponse) response); } } protected void handleTXT(ServletRequest request, ServletResponse response) throws Exception { String output = (String) request.getAttribute(ExportHandler.EXPORT_DATA); if ( output != null ) { byte[] content = output.getBytes(); response.setContentLength(content.length); response.getOutputStream().write(content); response.getOutputStream().flush(); response.getOutputStream().close(); } } protected void renderFO(InputSource foFile, HttpServletResponse response) throws Exception { ByteArrayOutputStream out = new ByteArrayOutputStream(); Driver driver = new Driver(foFile, out); if (log == null) { log = new ConsoleLogger(ConsoleLogger.LEVEL_WARN); MessageHandler.setScreenLogger(log); } driver.setLogger(log); driver.setRenderer(Driver.RENDER_PDF); driver.run(); byte[] content = out.toByteArray(); response.setContentLength(content.length); response.getOutputStream().write(content); response.getOutputStream().flush(); response.getOutputStream().close(); } protected void setResponseHeaders(HttpServletResponse response, String exportName) { String mimeType = MimeUtils.getFileMimeType(exportName); if (StringUtils.isNotBlank(mimeType)) { response.setContentType(mimeType); } response.setHeader("Content-Disposition", "attachment;filename=\"" + exportName + "\""); response.setHeader("Pragma", "public"); response.setDateHeader("Expires", (System.currentTimeMillis() + 1000)); }}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -