@@ -0,0 +1,70 @@ | |||
/** | |||
* 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.cache; | |||
import java.awt.image.BufferedImage; | |||
import java.io.ByteArrayOutputStream; | |||
import java.io.InputStream; | |||
import java.util.concurrent.TimeUnit; | |||
import javax.imageio.ImageIO; | |||
import org.apache.poi.util.IOUtils; | |||
import org.jeecgframework.poi.cache.manager.POICacheManager; | |||
import com.google.common.cache.CacheBuilder; | |||
import com.google.common.cache.CacheLoader; | |||
import com.google.common.cache.LoadingCache; | |||
/** | |||
* 图片缓存处理 | |||
* @author JueYue | |||
* @date 2016年1月8日 下午4:16:32 | |||
*/ | |||
public class ImageCache { | |||
private static LoadingCache<String, byte[]> loadingCache; | |||
static { | |||
loadingCache = CacheBuilder.newBuilder().expireAfterWrite(1, TimeUnit.DAYS) | |||
.maximumSize(2000).build(new CacheLoader<String, byte[]>() { | |||
@Override | |||
public byte[] load(String imagePath) throws Exception { | |||
InputStream is = POICacheManager.getFile(imagePath); | |||
BufferedImage bufferImg = ImageIO.read(is); | |||
ByteArrayOutputStream byteArrayOut = new ByteArrayOutputStream(); | |||
try { | |||
ImageIO.write(bufferImg, | |||
imagePath.substring(imagePath.indexOf(".") + 1, imagePath.length()), | |||
byteArrayOut); | |||
return byteArrayOut.toByteArray(); | |||
} finally { | |||
IOUtils.closeQuietly(is); | |||
IOUtils.closeQuietly(byteArrayOut); | |||
} | |||
} | |||
}); | |||
} | |||
public static byte[] getImage(String imagePath) { | |||
try { | |||
return loadingCache.get(imagePath); | |||
} catch (Exception e) { | |||
return null; | |||
} | |||
} | |||
} |
@@ -38,16 +38,17 @@ import com.google.common.cache.LoadingCache; | |||
*/ | |||
public final class POICacheManager { | |||
private static final Logger LOGGER = LoggerFactory.getLogger(POICacheManager.class); | |||
private static final Logger LOGGER = LoggerFactory | |||
.getLogger(POICacheManager.class); | |||
private static LoadingCache<String, byte[]> loadingCache; | |||
private static IFileLoader fileLoder; | |||
private static IFileLoader fileLoder; | |||
private static ThreadLocal<IFileLoader> LOCAL_FILELOADER = new ThreadLocal<IFileLoader>(); | |||
private static ThreadLocal<IFileLoader> LOCAL_FILELOADER = new ThreadLocal<IFileLoader>(); | |||
static { | |||
loadingCache = CacheBuilder.newBuilder().expireAfterWrite(7, TimeUnit.DAYS).maximumSize(50) | |||
loadingCache = CacheBuilder.newBuilder().expireAfterWrite(1, TimeUnit.HOURS).maximumSize(50) | |||
.build(new CacheLoader<String, byte[]>() { | |||
@Override | |||
public byte[] load(String url) throws Exception { | |||
@@ -15,10 +15,6 @@ | |||
*/ | |||
package org.jeecgframework.poi.excel.export.base; | |||
import java.awt.image.BufferedImage; | |||
import java.io.ByteArrayOutputStream; | |||
import java.io.File; | |||
import java.io.IOException; | |||
import java.text.DecimalFormat; | |||
import java.util.Collection; | |||
import java.util.HashMap; | |||
@@ -26,8 +22,6 @@ import java.util.List; | |||
import java.util.Map; | |||
import java.util.Set; | |||
import javax.imageio.ImageIO; | |||
import org.apache.commons.lang3.StringUtils; | |||
import org.apache.poi.hssf.usermodel.HSSFClientAnchor; | |||
import org.apache.poi.hssf.usermodel.HSSFRichTextString; | |||
@@ -42,6 +36,7 @@ import org.apache.poi.ss.usermodel.Workbook; | |||
import org.apache.poi.ss.util.CellRangeAddress; | |||
import org.apache.poi.xssf.usermodel.XSSFClientAnchor; | |||
import org.apache.poi.xssf.usermodel.XSSFRichTextString; | |||
import org.jeecgframework.poi.cache.ImageCache; | |||
import org.jeecgframework.poi.excel.entity.enmus.ExcelType; | |||
import org.jeecgframework.poi.excel.entity.params.ExcelExportEntity; | |||
import org.jeecgframework.poi.excel.entity.vo.PoiBaseConstants; | |||
@@ -170,22 +165,9 @@ public abstract class ExcelExportBase extends ExportBase { | |||
return; | |||
} | |||
if (entity.getExportImageType() == 1) { | |||
ByteArrayOutputStream byteArrayOut = new ByteArrayOutputStream(); | |||
BufferedImage bufferImg; | |||
try { | |||
String path = PoiPublicUtil.getWebRootPath(imagePath); | |||
path = path.replace("WEB-INF/classes/", ""); | |||
path = path.replace("file:/", ""); | |||
bufferImg = ImageIO.read(new File(path)); | |||
ImageIO.write(bufferImg, | |||
imagePath.substring(imagePath.indexOf(".") + 1, imagePath.length()), | |||
byteArrayOut); | |||
byte[] value = byteArrayOut.toByteArray(); | |||
patriarch.createPicture(anchor, | |||
row.getSheet().getWorkbook().addPicture(value, getImageType(value))); | |||
} catch (IOException e) { | |||
LOGGER.error(e.getMessage(), e); | |||
} | |||
byte[] value = ImageCache.getImage(imagePath); | |||
patriarch.createPicture(anchor, | |||
row.getSheet().getWorkbook().addPicture(value, getImageType(value))); | |||
} else { | |||
byte[] value = (byte[]) (entity.getMethods() != null | |||
? getFieldBySomeMethod(entity.getMethods(), obj) | |||
@@ -173,7 +173,7 @@ public class CellValueServer { | |||
* @param cell | |||
* @param titleString | |||
*/ | |||
public Object getValue(IExcelDataHandler dataHanlder, Object object, Cell cell, | |||
public Object getValue(IExcelDataHandler<?> dataHanlder, Object object, Cell cell, | |||
Map<String, ExcelImportEntity> excelParams, | |||
String titleString) throws Exception { | |||
ExcelImportEntity entity = excelParams.get(titleString); | |||
@@ -202,7 +202,7 @@ public class CellValueServer { | |||
* @param titleString | |||
* @return | |||
*/ | |||
public Object getValue(IExcelDataHandler dataHanlder, Object object, | |||
public Object getValue(IExcelDataHandler<?> dataHanlder, Object object, | |||
SaxReadCellEntity cellEntity, Map<String, ExcelImportEntity> excelParams, | |||
String titleString) { | |||
ExcelImportEntity entity = excelParams.get(titleString); | |||
@@ -304,6 +304,7 @@ public class CellValueServer { | |||
* @param titleString | |||
* @return | |||
*/ | |||
@SuppressWarnings({ "unchecked", "rawtypes" }) | |||
private Object hanlderValue(IExcelDataHandler dataHanlder, Object object, Object result, | |||
String titleString) { | |||
if (dataHanlder == null || dataHanlder.getNeedHandlerFields() == null | |||
@@ -0,0 +1,21 @@ | |||
/** | |||
* 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. | |||
*/ | |||
/** | |||
* Excel模块,支持2003,2007的导入导出,模板的导出,流的导出(大数据量) | |||
* @author JueYue | |||
* @date 2014年6月20日 上午12:08:09 | |||
*/ | |||
package org.jeecgframework.poi.excel; |
@@ -63,6 +63,10 @@ public class PdfExportParams extends ExcelBaseParams { | |||
} | |||
public PdfExportParams(String title) { | |||
this.title = title; | |||
} | |||
public PdfExportParams(String title, String secondTitle) { | |||
this.title = title; | |||
this.secondTitle = secondTitle; | |||
@@ -15,14 +15,17 @@ | |||
*/ | |||
package org.jeecgframework.poi.pdf.export; | |||
import java.io.IOException; | |||
import java.io.OutputStream; | |||
import java.lang.reflect.Field; | |||
import java.net.MalformedURLException; | |||
import java.util.ArrayList; | |||
import java.util.Collection; | |||
import java.util.Iterator; | |||
import java.util.List; | |||
import org.apache.commons.lang3.StringUtils; | |||
import org.jeecgframework.poi.cache.ImageCache; | |||
import org.jeecgframework.poi.excel.annotation.ExcelTarget; | |||
import org.jeecgframework.poi.excel.entity.params.ExcelExportEntity; | |||
import org.jeecgframework.poi.excel.export.base.ExportBase; | |||
@@ -33,9 +36,11 @@ import org.jeecgframework.poi.util.PoiPublicUtil; | |||
import org.slf4j.Logger; | |||
import org.slf4j.LoggerFactory; | |||
import com.itextpdf.text.BadElementException; | |||
import com.itextpdf.text.Document; | |||
import com.itextpdf.text.DocumentException; | |||
import com.itextpdf.text.Element; | |||
import com.itextpdf.text.Image; | |||
import com.itextpdf.text.Phrase; | |||
import com.itextpdf.text.pdf.PdfPCell; | |||
import com.itextpdf.text.pdf.PdfPTable; | |||
@@ -144,7 +149,8 @@ public class PdfExportServer extends ExportBase { | |||
createStringCell(table, value == null ? "" : value.toString(), entity, | |||
rowHeight, 1, maxHeight); | |||
} else { | |||
createImageCell(table, value == null ? "" : value.toString(), entity, rowHeight, | |||
1, maxHeight); | |||
} | |||
} | |||
} | |||
@@ -167,7 +173,8 @@ public class PdfExportServer extends ExportBase { | |||
if (entity.getType() == 1) { | |||
createStringCell(table, value == null ? "" : value.toString(), entity, rowHeight); | |||
} else { | |||
createImageCell(table, value == null ? "" : value.toString(), entity, rowHeight, 1, | |||
1); | |||
} | |||
} | |||
} | |||
@@ -299,4 +306,25 @@ public class PdfExportServer extends ExportBase { | |||
return iCell; | |||
} | |||
private PdfPCell createImageCell(PdfPTable table, String text, ExcelExportEntity entity, | |||
int rowHeight, int rowSpan, int colSpan) { | |||
try { | |||
Image image = Image.getInstance(ImageCache.getImage(text)); | |||
PdfPCell iCell = new PdfPCell(image); | |||
styler.setCellStyler(iCell, entity, text); | |||
iCell.setFixedHeight((int) (rowHeight * 2.5)); | |||
table.addCell(iCell); | |||
return iCell; | |||
} catch (BadElementException e) { | |||
LOGGER.error(e.getMessage(), e); | |||
} catch (MalformedURLException e) { | |||
LOGGER.error(e.getMessage(), e); | |||
} catch (IOException e) { | |||
LOGGER.error(e.getMessage(), e); | |||
} | |||
return new PdfPCell(); | |||
} | |||
} |
@@ -0,0 +1,21 @@ | |||
/** | |||
* 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. | |||
*/ | |||
/** | |||
* Word 模块,因为2003不好用,所以都是基于2007来处理的数据 | |||
* @author JueYue | |||
* @date 2014年6月20日 上午12:08:09 | |||
*/ | |||
package org.jeecgframework.poi.word; |