From fd1dff6c28c0e2d84c0ef53b9823960c20d4ef3f Mon Sep 17 00:00:00 2001 From: jueyue Date: Tue, 19 Jan 2016 11:58:08 +0800 Subject: [PATCH] =?UTF-8?q?=E6=8F=90=E4=BE=9B=E4=B8=80=E4=B8=AA=E6=9B=B4?= =?UTF-8?q?=E5=9F=BA=E7=A1=80=E7=9A=84view?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 29 ++++--- .../poi/pdf/export/PdfExportServer.java | 9 ++- easypoi-web/build.gradle | 2 + easypoi-web/pom.xml | 7 ++ .../excel/entity/vo/PDFTemplateConstants.java | 33 ++++++++ .../poi/excel/view/JeecgTemplateWordView.java | 8 +- .../poi/excel/view/MapGraphExcelView.java | 1 - .../poi/excel/view/MiniAbstractExcelView.java | 11 +-- .../poi/excel/view/PDFTemplateView.java | 81 +++++++++++++++++++ .../poi/excel/view/PoiBaseView.java | 35 ++++++++ 10 files changed, 186 insertions(+), 30 deletions(-) create mode 100644 easypoi-web/src/main/java/org/jeecgframework/poi/excel/entity/vo/PDFTemplateConstants.java create mode 100644 easypoi-web/src/main/java/org/jeecgframework/poi/excel/view/PDFTemplateView.java create mode 100644 easypoi-web/src/main/java/org/jeecgframework/poi/excel/view/PoiBaseView.java diff --git a/README.md b/README.md index 6e2fe76..abb48d6 100644 --- a/README.md +++ b/README.md @@ -58,17 +58,17 @@ https://oss.sonatype.org/content/repositories/snapshots/ org.jeecg easypoi-base - 2.1.6 + 2.3.0 org.jeecg easypoi-web - 2.1.6 + 2.3.0 org.jeecg easypoi-annotation - 2.1.6 + 2.3.0 ``` @@ -173,7 +173,17 @@ word和sax读取的时候才使用,就不是必须的了,请手动引用,JSR303 -------------------------- 版本修改 -------------------------- - + - 2.3.0 修复bug,推荐更新 + - 提供的PDF基础的Excel导出支持 + - 提供了Excel Charts的导出支持 + - 升级了POI + - 提供了Word换行支持 + - 图片提供统一缓存 + - 增加Cell取值工具,自动分辨合并单元格和独立单元格 + - 修复合并单元格,获取cell改为递归,之前判断有问题 + - 修改了下,el表达式的==判断,给fe加上了样式自定义方法 + - 修复if(),单字段的判断 + - 修复其他一些bug - 2.1.6 校验规则不向下兼容,升级请自行考虑 - 其实不想升的,不过有必要的bug要修复,所以就先生上来吧 - 升级交易为hibernate校验,hibernate的maven自己配置可选 @@ -364,17 +374,14 @@ EasyPoi导出实例 8.Excel导入校验,过滤不符合规则的数据,追加错误信息到Excel,提供常用的校验规则,已经通用的校验接口 ```Java - /** - * Email校验 - */ @Excel(name = "Email", width = 25) - @ExcelVerify(isEmail = true, notNull = true) - private String email; + @Max(value = 15,message = "max 最大值不能超过15") + private int email; /** - * 手机号校验 + * 手机号 */ @Excel(name = "Mobile", width = 20) - @ExcelVerify(isMobile = true, notNull = true) + @NotNull private String mobile; ExcelImportResult result = ExcelImportUtil.importExcelVerify(new File( diff --git a/easypoi-base/src/main/java/org/jeecgframework/poi/pdf/export/PdfExportServer.java b/easypoi-base/src/main/java/org/jeecgframework/poi/pdf/export/PdfExportServer.java index c644346..2ae7937 100644 --- a/easypoi-base/src/main/java/org/jeecgframework/poi/pdf/export/PdfExportServer.java +++ b/easypoi-base/src/main/java/org/jeecgframework/poi/pdf/export/PdfExportServer.java @@ -25,6 +25,7 @@ import java.util.Iterator; import java.util.List; import org.apache.commons.lang3.StringUtils; +import org.apache.poi.util.IOUtils; import org.jeecgframework.poi.cache.ImageCache; import org.jeecgframework.poi.excel.annotation.ExcelTarget; import org.jeecgframework.poi.excel.entity.params.ExcelExportEntity; @@ -95,7 +96,11 @@ public class PdfExportServer extends ExportBase { } catch (Exception e) { LOGGER.error(e.getMessage(), e); } finally { - document.close(); + try { + document.close(); + } catch (Exception e) { + //可能之前已经关闭过了 + } } return document; } @@ -129,6 +134,8 @@ public class PdfExportServer extends ExportBase { LOGGER.error(e.getMessage(), e); } catch (Exception e) { LOGGER.error(e.getMessage(), e); + } finally { + document.close(); } return document; } diff --git a/easypoi-web/build.gradle b/easypoi-web/build.gradle index ce8b078..cb7f70b 100644 --- a/easypoi-web/build.gradle +++ b/easypoi-web/build.gradle @@ -4,6 +4,8 @@ dependencies { compile group: 'org.springframework', name: 'spring-web', version:'3.1.1.RELEASE' compile group: 'org.springframework', name: 'spring-webmvc', version:'3.1.1.RELEASE' compile group: 'org.springframework', name: 'spring-core', version:'3.1.1.RELEASE' + compile group: 'org.springframework', name: 'spring-core', version:'3.1.1.RELEASE' + compile group: 'com.itextpdf', name: 'itextpdf', version:'5.5.6' compile project(':easypoi-base') compile(group: 'javax.servlet', name: 'servlet-api', version:'2.5') { /* This dependency was originally in the Maven provided scope, but the project was not of type war. diff --git a/easypoi-web/pom.xml b/easypoi-web/pom.xml index ac8db3c..bf57cdf 100644 --- a/easypoi-web/pom.xml +++ b/easypoi-web/pom.xml @@ -28,6 +28,13 @@ provided + + + com.itextpdf + itextpdf + true + + org.jeecg easypoi-base diff --git a/easypoi-web/src/main/java/org/jeecgframework/poi/excel/entity/vo/PDFTemplateConstants.java b/easypoi-web/src/main/java/org/jeecgframework/poi/excel/entity/vo/PDFTemplateConstants.java new file mode 100644 index 0000000..93048ee --- /dev/null +++ b/easypoi-web/src/main/java/org/jeecgframework/poi/excel/entity/vo/PDFTemplateConstants.java @@ -0,0 +1,33 @@ +/** + * Copyright 2013-2015 JueYue (qrb.jueyue@gmail.com) + * + * 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.jeecgframework.poi.excel.entity.vo; + +public interface PDFTemplateConstants extends BasePOIConstants { + + /** + * PDF + */ + public final static String PDF_TEMPLATE_VIEW = "pdfTemplateView"; + /** + * Entity List + */ + public final static String ENTITY_LIST = "EntityList"; + /** + * 数据列表 + */ + public final static String DATA_LIST = "dataList"; + +} diff --git a/easypoi-web/src/main/java/org/jeecgframework/poi/excel/view/JeecgTemplateWordView.java b/easypoi-web/src/main/java/org/jeecgframework/poi/excel/view/JeecgTemplateWordView.java index e27f262..e543eb9 100644 --- a/easypoi-web/src/main/java/org/jeecgframework/poi/excel/view/JeecgTemplateWordView.java +++ b/easypoi-web/src/main/java/org/jeecgframework/poi/excel/view/JeecgTemplateWordView.java @@ -25,7 +25,6 @@ import org.apache.poi.xwpf.usermodel.XWPFDocument; import org.jeecgframework.poi.excel.entity.vo.TemplateWordConstants; import org.jeecgframework.poi.word.WordExportUtil; import org.springframework.stereotype.Controller; -import org.springframework.web.servlet.view.AbstractView; /** * Word模板视图 @@ -35,7 +34,7 @@ import org.springframework.web.servlet.view.AbstractView; */ @SuppressWarnings("unchecked") @Controller(TemplateWordConstants.JEECG_TEMPLATE_WORD_VIEW) -public class JeecgTemplateWordView extends AbstractView { +public class JeecgTemplateWordView extends PoiBaseView { private static final String CONTENT_TYPE = "application/msword"; @@ -43,11 +42,6 @@ public class JeecgTemplateWordView extends AbstractView { setContentType(CONTENT_TYPE); } - public boolean isIE(HttpServletRequest request) { - return (request.getHeader("USER-AGENT").toLowerCase().indexOf("msie") > 0 || request - .getHeader("USER-AGENT").toLowerCase().indexOf("rv:11.0") > 0) ? true : false; - } - @Override protected void renderMergedOutputModel(Map model, HttpServletRequest request, HttpServletResponse response) throws Exception { diff --git a/easypoi-web/src/main/java/org/jeecgframework/poi/excel/view/MapGraphExcelView.java b/easypoi-web/src/main/java/org/jeecgframework/poi/excel/view/MapGraphExcelView.java index 4e17ec8..8597caa 100644 --- a/easypoi-web/src/main/java/org/jeecgframework/poi/excel/view/MapGraphExcelView.java +++ b/easypoi-web/src/main/java/org/jeecgframework/poi/excel/view/MapGraphExcelView.java @@ -18,7 +18,6 @@ package org.jeecgframework.poi.excel.view; import java.util.List; import java.util.Map; -import javax.annotation.Resource; import javax.servlet.ServletOutputStream; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; diff --git a/easypoi-web/src/main/java/org/jeecgframework/poi/excel/view/MiniAbstractExcelView.java b/easypoi-web/src/main/java/org/jeecgframework/poi/excel/view/MiniAbstractExcelView.java index b08c86a..d903ee7 100644 --- a/easypoi-web/src/main/java/org/jeecgframework/poi/excel/view/MiniAbstractExcelView.java +++ b/easypoi-web/src/main/java/org/jeecgframework/poi/excel/view/MiniAbstractExcelView.java @@ -15,16 +15,12 @@ */ package org.jeecgframework.poi.excel.view; -import javax.servlet.http.HttpServletRequest; - -import org.springframework.web.servlet.view.AbstractView; - /** * 基础抽象Excel View * @author JueYue * @date 2015年2月28日 下午1:41:05 */ -public abstract class MiniAbstractExcelView extends AbstractView { +public abstract class MiniAbstractExcelView extends PoiBaseView { private static final String CONTENT_TYPE = "application/vnd.ms-excel"; @@ -35,9 +31,4 @@ public abstract class MiniAbstractExcelView extends AbstractView { setContentType(CONTENT_TYPE); } - protected boolean isIE(HttpServletRequest request) { - return (request.getHeader("USER-AGENT").toLowerCase().indexOf("msie") > 0 || request - .getHeader("USER-AGENT").toLowerCase().indexOf("rv:11.0") > 0) ? true : false; - } - } diff --git a/easypoi-web/src/main/java/org/jeecgframework/poi/excel/view/PDFTemplateView.java b/easypoi-web/src/main/java/org/jeecgframework/poi/excel/view/PDFTemplateView.java new file mode 100644 index 0000000..2b1849e --- /dev/null +++ b/easypoi-web/src/main/java/org/jeecgframework/poi/excel/view/PDFTemplateView.java @@ -0,0 +1,81 @@ +/** + * Copyright 2013-2015 JueYue (qrb.jueyue@gmail.com) + * + * 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.jeecgframework.poi.excel.view; + +import java.io.ByteArrayOutputStream; +import java.util.Collection; +import java.util.List; +import java.util.Map; + +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; + +import org.apache.commons.lang3.StringUtils; +import org.jeecgframework.poi.excel.entity.params.ExcelExportEntity; +import org.jeecgframework.poi.excel.entity.vo.PDFTemplateConstants; +import org.jeecgframework.poi.pdf.PdfExportUtil; +import org.jeecgframework.poi.pdf.entity.PdfExportParams; +import org.springframework.stereotype.Controller; + +/** + * PDF 导出 View + * @author JueYue + * @date 2016年1月19日 上午10:43:02 + */ +@Controller(PDFTemplateConstants.PDF_TEMPLATE_VIEW) +public class PDFTemplateView extends PoiBaseView { + + public PDFTemplateView() { + setContentType("application/pdf"); + } + + @Override + protected boolean generatesDownloadContent() { + return true; + } + + @Override + @SuppressWarnings("unchecked") + protected final void renderMergedOutputModel(Map model, + HttpServletRequest request, + HttpServletResponse response) throws Exception { + String fileName = "临时文件"; + ByteArrayOutputStream baos = createTemporaryOutputStream(); + PdfExportParams entity = (PdfExportParams) model.get(PDFTemplateConstants.PARAMS); + Class pojoClass = (Class) model.get(PDFTemplateConstants.CLASS); + Collection dataSet = (Collection) model.get(PDFTemplateConstants.DATA_LIST); + List entityList = (List) model + .get(PDFTemplateConstants.ENTITY_LIST); + if (entityList == null) { + PdfExportUtil.exportPdf(entity, pojoClass, dataSet, baos); + } else { + PdfExportUtil.exportPdf(entity, entityList, (Collection>) dataSet, + baos); + } + String userFileName = (String) model.get(PDFTemplateConstants.FILE_NAME); + if (StringUtils.isNoneBlank(userFileName)) { + fileName = userFileName; + } + if (isIE(request)) { + fileName = java.net.URLEncoder.encode(fileName, "UTF8"); + } else { + fileName = new String(fileName.getBytes("UTF-8"), "ISO-8859-1"); + } + response.setHeader("content-disposition", "attachment;filename=" + fileName + ".pdf"); + writeToResponse(response, baos); + } + +} diff --git a/easypoi-web/src/main/java/org/jeecgframework/poi/excel/view/PoiBaseView.java b/easypoi-web/src/main/java/org/jeecgframework/poi/excel/view/PoiBaseView.java new file mode 100644 index 0000000..f558e71 --- /dev/null +++ b/easypoi-web/src/main/java/org/jeecgframework/poi/excel/view/PoiBaseView.java @@ -0,0 +1,35 @@ +/** + * Copyright 2013-2015 JueYue (qrb.jueyue@gmail.com) + * + * 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.jeecgframework.poi.excel.view; + +import javax.servlet.http.HttpServletRequest; + +import org.springframework.web.servlet.view.AbstractView; + +/** + * 提供一些通用结构 + */ +public abstract class PoiBaseView extends AbstractView { + + + protected boolean isIE(HttpServletRequest request) { + return (request.getHeader("USER-AGENT").toLowerCase().indexOf("msie") > 0 + || request.getHeader("USER-AGENT").toLowerCase().indexOf("rv:11.0") > 0 + || request.getHeader("USER-AGENT").toLowerCase().indexOf("edge") > 0) ? true + : false; + } + +}