Quellcode durchsuchen

根据sonar的质量分析,做了优化

4.1.3.A
jueyue vor 10 Jahren
Ursprung
Commit
36c24d13f6
16 geänderte Dateien mit 329 neuen und 357 gelöschten Zeilen
  1. +7
    -3
      easypoi-base/src/main/java/org/jeecgframework/poi/cache/ExcelCache.java
  2. +9
    -5
      easypoi-base/src/main/java/org/jeecgframework/poi/cache/WordCache.java
  3. +5
    -5
      easypoi-base/src/main/java/org/jeecgframework/poi/cache/manager/FileLoade.java
  4. +7
    -1
      easypoi-base/src/main/java/org/jeecgframework/poi/cache/manager/POICacheManager.java
  5. +8
    -4
      easypoi-base/src/main/java/org/jeecgframework/poi/excel/ExcelImportUtil.java
  6. +6
    -2
      easypoi-base/src/main/java/org/jeecgframework/poi/excel/export/template/ExcelExportOfTemplateUtil.java
  7. +11
    -11
      easypoi-base/src/main/java/org/jeecgframework/poi/excel/imports/ExcelImportServer.java
  8. +133
    -1
      easypoi-base/src/main/java/org/jeecgframework/poi/util/POIPublicUtil.java
  9. +4
    -0
      easypoi-base/src/main/java/org/jeecgframework/poi/word/WordExportUtil.java
  10. +0
    -162
      easypoi-base/src/main/java/org/jeecgframework/poi/word/entity/JeecgXWPFDocument.java
  11. +120
    -0
      easypoi-base/src/main/java/org/jeecgframework/poi/word/entity/MyXWPFDocument.java
  12. +14
    -12
      easypoi-base/src/main/java/org/jeecgframework/poi/word/parse/ParseWord07.java
  13. +3
    -3
      easypoi-base/src/main/java/org/jeecgframework/poi/word/parse/excel/ExcelMapParse.java
  14. +0
    -146
      easypoi-base/src/main/java/org/jeecgframework/poi/word/util/ParseWordUtil.java
  15. +1
    -1
      easypoi-test/src/main/java/org/jeecgframework/poi/word/WordExportUtilAnnExcelTest.java
  16. +1
    -1
      easypoi-test/src/main/java/org/jeecgframework/poi/word/WordExportUtilBaseExcelTest.java

+ 7
- 3
easypoi-base/src/main/java/org/jeecgframework/poi/cache/ExcelCache.java Datei anzeigen

@@ -7,6 +7,8 @@ import org.apache.poi.openxml4j.exceptions.InvalidFormatException;
import org.apache.poi.ss.usermodel.Workbook;
import org.apache.poi.ss.usermodel.WorkbookFactory;
import org.jeecgframework.poi.cache.manager.POICacheManager;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
/**
* Excel类型的缓存
@@ -17,6 +19,8 @@ import org.jeecgframework.poi.cache.manager.POICacheManager;
*/
public final class ExcelCache {
private static final Logger LOGGER = LoggerFactory.getLogger(ExcelCache.class);
public static Workbook getWorkbook(String url, int index) {
InputStream is = null;
try {
@@ -30,14 +34,14 @@ public final class ExcelCache {
}
return wb;
} catch (InvalidFormatException e) {
e.printStackTrace();
LOGGER.error(e.getMessage(), e.fillInStackTrace());
} catch (IOException e) {
e.printStackTrace();
LOGGER.error(e.getMessage(), e.fillInStackTrace());
} finally {
try {
is.close();
} catch (IOException e) {
e.printStackTrace();
LOGGER.error(e.getMessage(), e.fillInStackTrace());
}
}
return null;


+ 9
- 5
easypoi-base/src/main/java/org/jeecgframework/poi/cache/WordCache.java Datei anzeigen

@@ -4,7 +4,9 @@ import java.io.IOException;
import java.io.InputStream;
import org.jeecgframework.poi.cache.manager.POICacheManager;
import org.jeecgframework.poi.word.entity.JeecgXWPFDocument;
import org.jeecgframework.poi.word.entity.MyXWPFDocument;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
/**
* word 缓存中心
@@ -14,19 +16,21 @@ import org.jeecgframework.poi.word.entity.JeecgXWPFDocument;
*/
public class WordCache {
public static JeecgXWPFDocument getXWPFDocumen(String url) {
private static final Logger LOGGER = LoggerFactory.getLogger(WordCache.class);
public static MyXWPFDocument getXWPFDocumen(String url) {
InputStream is = null;
try {
is = POICacheManager.getFile(url);
JeecgXWPFDocument doc = new JeecgXWPFDocument(is);
MyXWPFDocument doc = new MyXWPFDocument(is);
return doc;
} catch (Exception e) {
e.printStackTrace();
LOGGER.error(e.getMessage(), e.fillInStackTrace());
} finally {
try {
is.close();
} catch (IOException e) {
e.printStackTrace();
LOGGER.error(e.getMessage(), e.fillInStackTrace());
}
}
return null;


+ 5
- 5
easypoi-base/src/main/java/org/jeecgframework/poi/cache/manager/FileLoade.java Datei anzeigen

@@ -17,7 +17,7 @@ import org.slf4j.LoggerFactory;
*/
class FileLoade {
private static final Logger logger = LoggerFactory.getLogger(FileLoade.class);
private static final Logger LOGGER = LoggerFactory.getLogger(FileLoade.class);
public byte[] getFile(String url) {
FileInputStream fileis = null;
@@ -34,9 +34,9 @@ class FileLoade {
baos.flush();
return baos.toByteArray();
} catch (FileNotFoundException e) {
e.printStackTrace();
LOGGER.error(e.getMessage(), e.fillInStackTrace());
} catch (IOException e) {
e.printStackTrace();
LOGGER.error(e.getMessage(), e.fillInStackTrace());
} finally {
try {
if (fileis != null)
@@ -44,10 +44,10 @@ class FileLoade {
if (fileis != null)
baos.close();
} catch (IOException e) {
e.printStackTrace();
LOGGER.error(e.getMessage(), e.fillInStackTrace());
}
}
logger.error(fileis + "这个路径文件没有找到,请查询");
LOGGER.error(fileis + "这个路径文件没有找到,请查询");
return null;
}


+ 7
- 1
easypoi-base/src/main/java/org/jeecgframework/poi/cache/manager/POICacheManager.java Datei anzeigen

@@ -6,6 +6,9 @@ import java.util.Arrays;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.TimeUnit;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import com.google.common.cache.CacheBuilder;
import com.google.common.cache.CacheLoader;
import com.google.common.cache.LoadingCache;
@@ -19,6 +22,9 @@ import com.google.common.cache.LoadingCache;
*/
public final class POICacheManager {
private static final Logger LOGGER = LoggerFactory
.getLogger(POICacheManager.class);
private static LoadingCache<String, byte[]> loadingCache;
static {
@@ -37,7 +43,7 @@ public final class POICacheManager {
byte[] result = Arrays.copyOf(loadingCache.get(id), loadingCache.get(id).length);
return new ByteArrayInputStream(result);
} catch (ExecutionException e) {
e.printStackTrace();
LOGGER.error(e.getMessage(), e.fillInStackTrace());
}
return null;
}


+ 8
- 4
easypoi-base/src/main/java/org/jeecgframework/poi/excel/ExcelImportUtil.java Datei anzeigen

@@ -9,6 +9,8 @@ import java.util.List;
import org.jeecgframework.poi.excel.entity.ImportParams;
import org.jeecgframework.poi.excel.entity.result.ExcelImportResult;
import org.jeecgframework.poi.excel.imports.ExcelImportServer;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
/**
* Excel 导入工具
@@ -20,6 +22,8 @@ import org.jeecgframework.poi.excel.imports.ExcelImportServer;
@SuppressWarnings({ "unchecked" })
public class ExcelImportUtil {
private static final Logger LOGGER = LoggerFactory.getLogger(ExcelImportUtil.class);
/**
* Excel 导入 数据源本地文件,不返回校验结果 导入 字 段类型 Integer,Long,Double,Date,String,Boolean
*
@@ -36,12 +40,12 @@ public class ExcelImportUtil {
in = new FileInputStream(file);
result = new ExcelImportServer().importExcelByIs(in, pojoClass, params).getList();
} catch (Exception e) {
e.printStackTrace();
LOGGER.error(e.getMessage(),e.fillInStackTrace());
} finally {
try {
in.close();
} catch (IOException e) {
e.printStackTrace();
LOGGER.error(e.getMessage(),e.fillInStackTrace());
}
}
return result;
@@ -92,12 +96,12 @@ public class ExcelImportUtil {
in = new FileInputStream(file);
return new ExcelImportServer().importExcelByIs(in, pojoClass, params);
} catch (Exception e) {
e.printStackTrace();
LOGGER.error(e.getMessage(),e.fillInStackTrace());
} finally {
try {
in.close();
} catch (IOException e) {
e.printStackTrace();
LOGGER.error(e.getMessage(),e.fillInStackTrace());
}
}
return null;


+ 6
- 2
easypoi-base/src/main/java/org/jeecgframework/poi/excel/export/template/ExcelExportOfTemplateUtil.java Datei anzeigen

@@ -23,6 +23,8 @@ import org.jeecgframework.poi.excel.export.base.ExcelExportBase;
import org.jeecgframework.poi.exception.excel.ExcelExportException;
import org.jeecgframework.poi.exception.excel.enums.ExcelExportEnum;
import org.jeecgframework.poi.util.POIPublicUtil;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
/**
* Excel 导出根据模板导出
@@ -32,6 +34,8 @@ import org.jeecgframework.poi.util.POIPublicUtil;
* @version 1.0
*/
public final class ExcelExportOfTemplateUtil extends ExcelExportBase {
private static final Logger LOGGER = LoggerFactory.getLogger(ExcelExportOfTemplateUtil.class);
/**
* 往Sheet 填充正常数据,根据表头信息 使用导入的部分逻辑,坐对象映射
@@ -48,7 +52,7 @@ public final class ExcelExportOfTemplateUtil extends ExcelExportBase {
Map<String, Integer> titlemap = getTitleMap(params, sheet);
Drawing patriarch = sheet.createDrawingPatriarch();
// 得到所有字段
Field fileds[] = POIPublicUtil.getClassFields(pojoClass);
Field[] fileds = POIPublicUtil.getClassFields(pojoClass);
ExcelTarget etarget = pojoClass.getAnnotation(ExcelTarget.class);
String targetId = null;
if (etarget != null) {
@@ -94,7 +98,7 @@ public final class ExcelExportOfTemplateUtil extends ExcelExportBase {
addDataToSheet(params, pojoClass, dataSet, wb.getSheetAt(0), wb);
}
} catch (Exception e) {
e.printStackTrace();
LOGGER.error(e.getMessage(), e.fillInStackTrace());
return null;
}
return wb;


+ 11
- 11
easypoi-base/src/main/java/org/jeecgframework/poi/excel/imports/ExcelImportServer.java Datei anzeigen

@@ -53,7 +53,7 @@ import org.slf4j.LoggerFactory;
@SuppressWarnings({ "rawtypes", "unchecked", "hiding" })
public class ExcelImportServer {
private final static Logger logger = LoggerFactory.getLogger(ExcelImportServer.class);
private final static Logger LOGGER = LoggerFactory.getLogger(ExcelImportServer.class);
private CellValueServer cellValueServer;
@@ -62,8 +62,8 @@ public class ExcelImportServer {
private boolean verfiyFail = false;
public ExcelImportServer() {
cellValueServer = new CellValueServer();
verifyHandlerServer = new VerifyHandlerServer();
this.cellValueServer = new CellValueServer();
this.verifyHandlerServer = new VerifyHandlerServer();
}
/**
@@ -412,8 +412,8 @@ public class ExcelImportServer {
*/
public ExcelImportResult importExcelByIs(InputStream inputstream, Class<?> pojoClass,
ImportParams params) throws Exception {
if (logger.isDebugEnabled()) {
logger.debug("Excel import start ,class is {}", pojoClass);
if (LOGGER.isDebugEnabled()) {
LOGGER.debug("Excel import start ,class is {}", pojoClass);
}
List<T> result = new ArrayList<T>();
Workbook book = null;
@@ -429,8 +429,8 @@ public class ExcelImportServer {
}
Map<String, PictureData> pictures;
for (int i = 0; i < params.getSheetNum(); i++) {
if (logger.isDebugEnabled()) {
logger.debug(" start to read excel by is ,startTime is {}", new Date().getTime());
if (LOGGER.isDebugEnabled()) {
LOGGER.debug(" start to read excel by is ,startTime is {}", new Date().getTime());
}
if (isXSSFWorkbook) {
pictures = POIPublicUtil.getSheetPictrues07((XSSFSheet) book.getSheetAt(i),
@@ -439,12 +439,12 @@ public class ExcelImportServer {
pictures = POIPublicUtil.getSheetPictrues03((HSSFSheet) book.getSheetAt(i),
(HSSFWorkbook) book);
}
if (logger.isDebugEnabled()) {
logger.debug(" end to read excel by is ,endTime is {}", new Date().getTime());
if (LOGGER.isDebugEnabled()) {
LOGGER.debug(" end to read excel by is ,endTime is {}", new Date().getTime());
}
result.addAll(importExcel(result, book.getSheetAt(i), pojoClass, params, pictures));
if (logger.isDebugEnabled()) {
logger.debug(" end to read excel list by pos ,endTime is {}", new Date().getTime());
if (LOGGER.isDebugEnabled()) {
LOGGER.debug(" end to read excel list by pos ,endTime is {}", new Date().getTime());
}
}
if (params.isNeedSave()) {


+ 133
- 1
easypoi-base/src/main/java/org/jeecgframework/poi/util/POIPublicUtil.java Datei anzeigen

@@ -1,5 +1,8 @@
package org.jeecgframework.poi.util;
import java.awt.image.BufferedImage;
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.lang.reflect.Field;
import java.lang.reflect.Method;
import java.util.ArrayList;
@@ -8,6 +11,8 @@ import java.util.HashMap;
import java.util.List;
import java.util.Map;
import javax.imageio.ImageIO;
import org.apache.poi.POIXMLDocumentPart;
import org.apache.poi.hssf.usermodel.HSSFClientAnchor;
import org.apache.poi.hssf.usermodel.HSSFPicture;
@@ -22,15 +27,22 @@ import org.apache.poi.xssf.usermodel.XSSFPicture;
import org.apache.poi.xssf.usermodel.XSSFShape;
import org.apache.poi.xssf.usermodel.XSSFSheet;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import org.apache.poi.xwpf.usermodel.XWPFDocument;
import org.jeecgframework.poi.excel.annotation.Excel;
import org.jeecgframework.poi.excel.annotation.ExcelCollection;
import org.jeecgframework.poi.excel.annotation.ExcelEntity;
import org.jeecgframework.poi.excel.annotation.ExcelIgnore;
import org.jeecgframework.poi.excel.entity.vo.PoiBaseConstants;
import org.jeecgframework.poi.word.entity.WordImageEntity;
import org.jeecgframework.poi.word.entity.params.ExcelListEntity;
import org.openxmlformats.schemas.drawingml.x2006.spreadsheetDrawing.CTMarker;
public class POIPublicUtil {
private POIPublicUtil() {
}
/**
* 彻底创建一个对象
*
@@ -58,7 +70,6 @@ public class POIPublicUtil {
}
} catch (Exception e) {
e.printStackTrace();
throw new RuntimeException("创建对象异常");
}
return obj;
@@ -286,4 +297,125 @@ public class POIPublicUtil {
|| exportName.indexOf(targetId) != -1;
}
private static Integer getImageType(String type) {
if (type.equalsIgnoreCase("JPG") || type.equalsIgnoreCase("JPEG")) {
return XWPFDocument.PICTURE_TYPE_JPEG;
}
if (type.equalsIgnoreCase("GIF")) {
return XWPFDocument.PICTURE_TYPE_GIF;
}
if (type.equalsIgnoreCase("BMP")) {
return XWPFDocument.PICTURE_TYPE_GIF;
}
if (type.equalsIgnoreCase("PNG")) {
return XWPFDocument.PICTURE_TYPE_PNG;
}
return XWPFDocument.PICTURE_TYPE_JPEG;
}
/**
* 返回流和图片类型
*@Author JueYue
*@date 2013-11-20
*@param obj
*@return (byte[]) isAndType[0],(Integer)isAndType[1]
* @throws Exception
*/
public static Object[] getIsAndType(WordImageEntity entity) throws Exception {
Object[] result = new Object[2];
String type;
if (entity.getType().equals(WordImageEntity.URL)) {
ByteArrayOutputStream byteArrayOut = new ByteArrayOutputStream();
BufferedImage bufferImg;
String path = Thread.currentThread().getContextClassLoader().getResource("").toURI()
.getPath()
+ entity.getUrl();
path = path.replace("WEB-INF/classes/", "");
path = path.replace("file:/", "");
bufferImg = ImageIO.read(new File(path));
ImageIO.write(
bufferImg,
entity.getUrl().substring(entity.getUrl().indexOf(".") + 1,
entity.getUrl().length()), byteArrayOut);
result[0] = byteArrayOut.toByteArray();
type = entity.getUrl().split("/.")[entity.getUrl().split("/.").length - 1];
} else {
result[0] = entity.getData();
type = POIPublicUtil.getFileExtendName(entity.getData());
}
result[1] = getImageType(type);
return result;
}
/**
* 获取参数值
*
* @param params
* @param map
* @return
*/
private static Object getParamsValue(String params, Map<String, Object> map) throws Exception {
if (params.indexOf(".") != -1) {
String[] paramsArr = params.split("\\.");
return getValueDoWhile(map.get(paramsArr[0]), paramsArr, 1);
}
return map.containsKey(params) ? map.get(params) : "";
}
/**
* 解析数据
*
* @Author JueYue
* @date 2013-11-16
* @return
*/
public static Object getRealValue(String currentText, Map<String, Object> map) throws Exception {
String params = "";
while (currentText.indexOf("{{") != -1) {
params = currentText
.substring(currentText.indexOf("{{") + 2, currentText.indexOf("}}"));
Object obj = getParamsValue(params.trim(), map);
//判断图片或者是集合
if (obj instanceof WordImageEntity || obj instanceof List
|| obj instanceof ExcelListEntity) {
return obj;
} else {
currentText = currentText.replace("{{" + params + "}}", obj.toString());
}
}
return currentText;
}
/**
* 通过遍历过去对象值
*
* @param object
* @param paramsArr
* @param index
* @return
* @throws Exception
* @throws InvocationTargetException
* @throws IllegalAccessException
* @throws IllegalArgumentException
*/
@SuppressWarnings("rawtypes")
public static Object getValueDoWhile(Object object, String[] paramsArr, int index)
throws Exception {
if (object == null) {
return "";
}
if (object instanceof WordImageEntity) {
return object;
}
if (object instanceof Map) {
object = ((Map) object).get(paramsArr[index]);
} else {
object = POIPublicUtil.getMethod(paramsArr[index], object.getClass()).invoke(object,
new Object[] {});
}
return (index == paramsArr.length - 1) ? (object == null ? "" : object) : getValueDoWhile(
object, paramsArr, ++index);
}
}

+ 4
- 0
easypoi-base/src/main/java/org/jeecgframework/poi/word/WordExportUtil.java Datei anzeigen

@@ -13,6 +13,10 @@ import org.jeecgframework.poi.word.parse.ParseWord07;
* @version 1.0
*/
public class WordExportUtil {
private WordExportUtil(){
}
/**
* 解析Word2007版本


+ 0
- 162
easypoi-base/src/main/java/org/jeecgframework/poi/word/entity/JeecgXWPFDocument.java Datei anzeigen

@@ -1,162 +0,0 @@
package org.jeecgframework.poi.word.entity;
import java.io.InputStream;
import org.apache.poi.openxml4j.opc.OPCPackage;
import org.apache.poi.xwpf.usermodel.XWPFDocument;
import org.apache.poi.xwpf.usermodel.XWPFRun;
import org.apache.xmlbeans.XmlException;
import org.apache.xmlbeans.XmlToken;
import org.openxmlformats.schemas.drawingml.x2006.main.CTNonVisualDrawingProps;
import org.openxmlformats.schemas.drawingml.x2006.main.CTPositiveSize2D;
import org.openxmlformats.schemas.drawingml.x2006.wordprocessingDrawing.CTInline;
/**
* 扩充document,修复图片插入失败问题问题
*
* @author JueYue
* @date 2013-11-20
* @version 1.0
*/
public class JeecgXWPFDocument extends XWPFDocument {
public JeecgXWPFDocument() {
super();
}
public JeecgXWPFDocument(InputStream in) throws Exception {
super(in);
}
public JeecgXWPFDocument(OPCPackage opcPackage) throws Exception {
super(opcPackage);
}
public void createPicture(String blipId, int id, int width, int height) {
final int EMU = 9525;
width *= EMU;
height *= EMU;
//String blipId = getAllPictures().get(id).getPackageRelationship().getId();
CTInline inline = createParagraph().createRun().getCTR().addNewDrawing().addNewInline();
String picXml = ""
+ "<a:graphic xmlns:a=\"http://schemas.openxmlformats.org/drawingml/2006/main\">"
+ " <a:graphicData uri=\"http://schemas.openxmlformats.org/drawingml/2006/picture\">"
+ " <pic:pic xmlns:pic=\"http://schemas.openxmlformats.org/drawingml/2006/picture\">"
+ " <pic:nvPicPr>" + " <pic:cNvPr id=\""
+ id
+ "\" name=\"Generated\"/>"
+ " <pic:cNvPicPr/>"
+ " </pic:nvPicPr>"
+ " <pic:blipFill>"
+ " <a:blip r:embed=\""
+ blipId
+ "\" xmlns:r=\"http://schemas.openxmlformats.org/officeDocument/2006/relationships\"/>"
+ " <a:stretch>"
+ " <a:fillRect/>"
+ " </a:stretch>"
+ " </pic:blipFill>"
+ " <pic:spPr>"
+ " <a:xfrm>"
+ " <a:off x=\"0\" y=\"0\"/>"
+ " <a:ext cx=\""
+ width
+ "\" cy=\""
+ height
+ "\"/>"
+ " </a:xfrm>"
+ " <a:prstGeom prst=\"rect\">"
+ " <a:avLst/>"
+ " </a:prstGeom>"
+ " </pic:spPr>"
+ " </pic:pic>"
+ " </a:graphicData>" + "</a:graphic>";
//CTGraphicalObjectData graphicData = inline.addNewGraphic().addNewGraphicData();
XmlToken xmlToken = null;
try {
xmlToken = XmlToken.Factory.parse(picXml);
} catch (XmlException xe) {
xe.printStackTrace();
}
inline.set(xmlToken);
//graphicData.set(xmlToken);
inline.setDistT(0);
inline.setDistB(0);
inline.setDistL(0);
inline.setDistR(0);
CTPositiveSize2D extent = inline.addNewExtent();
extent.setCx(width);
extent.setCy(height);
CTNonVisualDrawingProps docPr = inline.addNewDocPr();
docPr.setId(id);
docPr.setName("Picture " + id);
docPr.setDescr("Generated");
}
public void createPicture(XWPFRun run, String blipId, int id, int width, int height) {
final int EMU = 9525;
width *= EMU;
height *= EMU;
CTInline inline = run.getCTR().addNewDrawing().addNewInline();
String picXml = ""
+ "<a:graphic xmlns:a=\"http://schemas.openxmlformats.org/drawingml/2006/main\">"
+ " <a:graphicData uri=\"http://schemas.openxmlformats.org/drawingml/2006/picture\">"
+ " <pic:pic xmlns:pic=\"http://schemas.openxmlformats.org/drawingml/2006/picture\">"
+ " <pic:nvPicPr>" + " <pic:cNvPr id=\""
+ id
+ "\" name=\"Generated\"/>"
+ " <pic:cNvPicPr/>"
+ " </pic:nvPicPr>"
+ " <pic:blipFill>"
+ " <a:blip r:embed=\""
+ blipId
+ "\" xmlns:r=\"http://schemas.openxmlformats.org/officeDocument/2006/relationships\"/>"
+ " <a:stretch>"
+ " <a:fillRect/>"
+ " </a:stretch>"
+ " </pic:blipFill>"
+ " <pic:spPr>"
+ " <a:xfrm>"
+ " <a:off x=\"0\" y=\"0\"/>"
+ " <a:ext cx=\""
+ width
+ "\" cy=\""
+ height
+ "\"/>"
+ " </a:xfrm>"
+ " <a:prstGeom prst=\"rect\">"
+ " <a:avLst/>"
+ " </a:prstGeom>"
+ " </pic:spPr>"
+ " </pic:pic>"
+ " </a:graphicData>" + "</a:graphic>";
XmlToken xmlToken = null;
try {
xmlToken = XmlToken.Factory.parse(picXml);
} catch (XmlException xe) {
xe.printStackTrace();
}
inline.set(xmlToken);
inline.setDistT(0);
inline.setDistB(0);
inline.setDistL(0);
inline.setDistR(0);
CTPositiveSize2D extent = inline.addNewExtent();
extent.setCx(width);
extent.setCy(height);
CTNonVisualDrawingProps docPr = inline.addNewDocPr();
docPr.setId(id);
docPr.setName("Picture " + id);
docPr.setDescr("Generated");
}
}

+ 120
- 0
easypoi-base/src/main/java/org/jeecgframework/poi/word/entity/MyXWPFDocument.java Datei anzeigen

@@ -0,0 +1,120 @@
package org.jeecgframework.poi.word.entity;
import java.io.InputStream;
import org.apache.poi.openxml4j.opc.OPCPackage;
import org.apache.poi.xwpf.usermodel.XWPFDocument;
import org.apache.poi.xwpf.usermodel.XWPFRun;
import org.apache.xmlbeans.XmlException;
import org.apache.xmlbeans.XmlToken;
import org.openxmlformats.schemas.drawingml.x2006.main.CTNonVisualDrawingProps;
import org.openxmlformats.schemas.drawingml.x2006.main.CTPositiveSize2D;
import org.openxmlformats.schemas.drawingml.x2006.wordprocessingDrawing.CTInline;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
/**
* 扩充document,修复图片插入失败问题问题
*
* @author JueYue
* @date 2013-11-20
* @version 1.0
*/
public class MyXWPFDocument extends XWPFDocument {
private static final Logger LOGGER = LoggerFactory.getLogger(MyXWPFDocument.class);
private static String PICXML = ""
+ "<a:graphic xmlns:a=\"http://schemas.openxmlformats.org/drawingml/2006/main\">"
+ " <a:graphicData uri=\"http://schemas.openxmlformats.org/drawingml/2006/picture\">"
+ " <pic:pic xmlns:pic=\"http://schemas.openxmlformats.org/drawingml/2006/picture\">"
+ " <pic:nvPicPr>"
+ " <pic:cNvPr id=\"%s\" name=\"Generated\"/>"
+ " <pic:cNvPicPr/>"
+ " </pic:nvPicPr>"
+ " <pic:blipFill>"
+ " <a:blip r:embed=\"%s\" xmlns:r=\"http://schemas.openxmlformats.org/officeDocument/2006/relationships\"/>"
+ " <a:stretch>"
+ " <a:fillRect/>"
+ " </a:stretch>" + " </pic:blipFill>"
+ " <pic:spPr>" + " <a:xfrm>"
+ " <a:off x=\"0\" y=\"0\"/>"
+ " <a:ext cx=\"%s\" cy=\"%s\"/>"
+ " </a:xfrm>"
+ " <a:prstGeom prst=\"rect\">"
+ " <a:avLst/>"
+ " </a:prstGeom>" + " </pic:spPr>"
+ " </pic:pic>" + " </a:graphicData>"
+ "</a:graphic>";
public MyXWPFDocument() {
super();
}
public MyXWPFDocument(InputStream in) throws Exception {
super(in);
}
public MyXWPFDocument(OPCPackage opcPackage) throws Exception {
super(opcPackage);
}
public void createPicture(String blipId, int id, int width, int height) {
final int EMU = 9525;
width *= EMU;
height *= EMU;
CTInline inline = createParagraph().createRun().getCTR().addNewDrawing().addNewInline();
String picXml = String.format(PICXML, id, blipId, width, height);
XmlToken xmlToken = null;
try {
xmlToken = XmlToken.Factory.parse(picXml);
} catch (XmlException xe) {
LOGGER.error(xe.getMessage(), xe.fillInStackTrace());
}
inline.set(xmlToken);
inline.setDistT(0);
inline.setDistB(0);
inline.setDistL(0);
inline.setDistR(0);
CTPositiveSize2D extent = inline.addNewExtent();
extent.setCx(width);
extent.setCy(height);
CTNonVisualDrawingProps docPr = inline.addNewDocPr();
docPr.setId(id);
docPr.setName("Picture " + id);
docPr.setDescr("Generated");
}
public void createPicture(XWPFRun run, String blipId, int id, int width, int height) {
final int EMU = 9525;
width *= EMU;
height *= EMU;
CTInline inline = run.getCTR().addNewDrawing().addNewInline();
String picXml = String.format(PICXML, id, blipId, width, height);
XmlToken xmlToken = null;
try {
xmlToken = XmlToken.Factory.parse(picXml);
} catch (XmlException xe) {
LOGGER.error(xe.getMessage(), xe.fillInStackTrace());
}
inline.set(xmlToken);
inline.setDistT(0);
inline.setDistB(0);
inline.setDistL(0);
inline.setDistR(0);
CTPositiveSize2D extent = inline.addNewExtent();
extent.setCx(width);
extent.setCy(height);
CTNonVisualDrawingProps docPr = inline.addNewDocPr();
docPr.setId(id);
docPr.setName("Picture " + id);
docPr.setDescr("Generated");
}
}

+ 14
- 12
easypoi-base/src/main/java/org/jeecgframework/poi/word/parse/ParseWord07.java Datei anzeigen

@@ -12,12 +12,14 @@ import org.apache.poi.xwpf.usermodel.XWPFTable;
import org.apache.poi.xwpf.usermodel.XWPFTableCell;
import org.apache.poi.xwpf.usermodel.XWPFTableRow;
import org.jeecgframework.poi.cache.WordCache;
import org.jeecgframework.poi.word.entity.JeecgXWPFDocument;
import org.jeecgframework.poi.util.POIPublicUtil;
import org.jeecgframework.poi.word.entity.MyXWPFDocument;
import org.jeecgframework.poi.word.entity.WordImageEntity;
import org.jeecgframework.poi.word.entity.params.ExcelListEntity;
import org.jeecgframework.poi.word.parse.excel.ExcelEntityParse;
import org.jeecgframework.poi.word.parse.excel.ExcelMapParse;
import org.jeecgframework.poi.word.util.ParseWordUtil;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
/**
* 解析07版的Word,替换文字,生成表格,生成图片
@@ -29,6 +31,8 @@ import org.jeecgframework.poi.word.util.ParseWordUtil;
@SuppressWarnings({ "unchecked", "rawtypes" })
public class ParseWord07 {
private static final Logger LOGGER = LoggerFactory.getLogger(ParseWord07.class);
/**
* 添加图片
*
@@ -39,18 +43,18 @@ public class ParseWord07 {
* @throws Exception
*/
private void addAnImage(WordImageEntity obj, XWPFRun currentRun) throws Exception {
Object[] isAndType = ParseWordUtil.getIsAndType(obj);
Object[] isAndType = POIPublicUtil.getIsAndType(obj);
String picId;
try {
picId = currentRun.getParagraph().getDocument()
.addPictureData((byte[]) isAndType[0], (Integer) isAndType[1]);
((JeecgXWPFDocument) currentRun.getParagraph().getDocument()).createPicture(currentRun,
((MyXWPFDocument) currentRun.getParagraph().getDocument()).createPicture(currentRun,
picId,
currentRun.getParagraph().getDocument()
.getNextPicNameNumber((Integer) isAndType[1]), obj.getWidth(), obj.getHeight());
} catch (Exception e) {
e.printStackTrace();
LOGGER.error(e.getMessage(), e.fillInStackTrace());
}
}
@@ -64,7 +68,7 @@ public class ParseWord07 {
*/
private void changeValues(XWPFParagraph paragraph, XWPFRun currentRun, String currentText,
List<Integer> runIndex, Map<String, Object> map) throws Exception {
Object obj = ParseWordUtil.getRealValue(currentText, map);
Object obj = POIPublicUtil.getRealValue(currentText, map);
if (obj instanceof WordImageEntity) {// 如果是图片就设置为图片
currentRun.setText("", 0);
addAnImage((WordImageEntity) obj, currentRun);
@@ -91,9 +95,7 @@ public class ParseWord07 {
String text = cell.getText().trim();
// 判断是不是迭代输出
if (text.startsWith("{{") && text.endsWith("}}") && text.indexOf("in ") != -1) {
/*text = text.replace("{{", "").replace("}}", "")
.replaceAll("\\s{1,}", " ").trim();*/
return ParseWordUtil.getRealValue(text.replace("in ", "").trim(), map);
return POIPublicUtil.getRealValue(text.replace("in ", "").trim(), map);
}
return null;
}
@@ -217,7 +219,7 @@ public class ParseWord07 {
* @throws Exception
*/
public XWPFDocument parseWord(String url, Map<String, Object> map) throws Exception {
JeecgXWPFDocument doc = WordCache.getXWPFDocumen(url);
MyXWPFDocument doc = WordCache.getXWPFDocumen(url);
parseWordSetValue(doc, map);
return doc;
}
@@ -231,10 +233,10 @@ public class ParseWord07 {
* @throws Exception
*/
public void parseWord(XWPFDocument document, Map<String, Object> map) throws Exception {
parseWordSetValue((JeecgXWPFDocument) document, map);
parseWordSetValue((MyXWPFDocument) document, map);
}
private void parseWordSetValue(JeecgXWPFDocument doc, Map<String, Object> map) throws Exception {
private void parseWordSetValue(MyXWPFDocument doc, Map<String, Object> map) throws Exception {
// 第一步解析文档
parseAllParagraphic(doc.getParagraphs(), map);
// 第二步解析所有表格


+ 3
- 3
easypoi-base/src/main/java/org/jeecgframework/poi/word/parse/excel/ExcelMapParse.java Datei anzeigen

@@ -5,7 +5,7 @@ import java.util.List;
import org.apache.poi.xwpf.usermodel.XWPFTable;
import org.apache.poi.xwpf.usermodel.XWPFTableCell;
import org.apache.poi.xwpf.usermodel.XWPFTableRow;
import org.jeecgframework.poi.word.util.ParseWordUtil;
import org.jeecgframework.poi.util.POIPublicUtil;
/**
* 处理和生成Map 类型的数据变成表格
@@ -54,12 +54,12 @@ public final class ExcelMapParse {
.getTableCells()
.get(cellIndex)
.setText(
ParseWordUtil.getValueDoWhile(obj, params[cellIndex].split("\\."), 0)
POIPublicUtil.getValueDoWhile(obj, params[cellIndex].split("\\."), 0)
.toString());
}
for (; cellIndex < params.length; cellIndex++) {
currentRow.createCell().setText(
ParseWordUtil.getValueDoWhile(obj, params[cellIndex].split("\\."), 0)
POIPublicUtil.getValueDoWhile(obj, params[cellIndex].split("\\."), 0)
.toString());
}
}


+ 0
- 146
easypoi-base/src/main/java/org/jeecgframework/poi/word/util/ParseWordUtil.java Datei anzeigen

@@ -1,146 +0,0 @@
package org.jeecgframework.poi.word.util;
import java.awt.image.BufferedImage;
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.lang.reflect.InvocationTargetException;
import java.util.List;
import java.util.Map;
import javax.imageio.ImageIO;
import org.apache.poi.xwpf.usermodel.XWPFDocument;
import org.jeecgframework.poi.util.POIPublicUtil;
import org.jeecgframework.poi.word.entity.WordImageEntity;
import org.jeecgframework.poi.word.entity.params.ExcelListEntity;
/**
* 解析公告类
* Excel 实体注解,暂时不支持图片
* @author JueYue
* @date 2014-7-24
* @version 1.1
*/
public class ParseWordUtil {
private static Integer getImageType(String type) {
if (type.equalsIgnoreCase("JPG") || type.equalsIgnoreCase("JPEG")) {
return XWPFDocument.PICTURE_TYPE_JPEG;
}
if (type.equalsIgnoreCase("GIF")) {
return XWPFDocument.PICTURE_TYPE_GIF;
}
if (type.equalsIgnoreCase("BMP")) {
return XWPFDocument.PICTURE_TYPE_GIF;
}
if (type.equalsIgnoreCase("PNG")) {
return XWPFDocument.PICTURE_TYPE_PNG;
}
return XWPFDocument.PICTURE_TYPE_JPEG;
}
/**
* 返回流和图片类型
*@Author JueYue
*@date 2013-11-20
*@param obj
*@return (byte[]) isAndType[0],(Integer)isAndType[1]
* @throws Exception
*/
public static Object[] getIsAndType(WordImageEntity entity) throws Exception {
Object[] result = new Object[2];
String type;
if (entity.getType().equals(WordImageEntity.URL)) {
ByteArrayOutputStream byteArrayOut = new ByteArrayOutputStream();
BufferedImage bufferImg;
String path = Thread.currentThread().getContextClassLoader().getResource("").toURI()
.getPath()
+ entity.getUrl();
path = path.replace("WEB-INF/classes/", "");
path = path.replace("file:/", "");
bufferImg = ImageIO.read(new File(path));
ImageIO.write(
bufferImg,
entity.getUrl().substring(entity.getUrl().indexOf(".") + 1,
entity.getUrl().length()), byteArrayOut);
result[0] = byteArrayOut.toByteArray();
type = entity.getUrl().split("/.")[entity.getUrl().split("/.").length - 1];
} else {
result[0] = entity.getData();
type = POIPublicUtil.getFileExtendName(entity.getData());
}
result[1] = getImageType(type);
return result;
}
/**
* 获取参数值
*
* @param params
* @param map
* @return
*/
private static Object getParamsValue(String params, Map<String, Object> map) throws Exception {
if (params.indexOf(".") != -1) {
String[] paramsArr = params.split("\\.");
return getValueDoWhile(map.get(paramsArr[0]), paramsArr, 1);
}
return map.containsKey(params) ? map.get(params) : "";
}
/**
* 解析数据
*
* @Author JueYue
* @date 2013-11-16
* @return
*/
public static Object getRealValue(String currentText, Map<String, Object> map) throws Exception {
String params = "";
while (currentText.indexOf("{{") != -1) {
params = currentText
.substring(currentText.indexOf("{{") + 2, currentText.indexOf("}}"));
Object obj = getParamsValue(params.trim(), map);
//判断图片或者是集合
if (obj instanceof WordImageEntity || obj instanceof List
|| obj instanceof ExcelListEntity) {
return obj;
} else {
currentText = currentText.replace("{{" + params + "}}", obj.toString());
}
}
return currentText;
}
/**
* 通过遍历过去对象值
*
* @param object
* @param paramsArr
* @param index
* @return
* @throws Exception
* @throws InvocationTargetException
* @throws IllegalAccessException
* @throws IllegalArgumentException
*/
@SuppressWarnings("rawtypes")
public static Object getValueDoWhile(Object object, String[] paramsArr, int index)
throws Exception {
if (object == null) {
return "";
}
if (object instanceof WordImageEntity) {
return object;
}
if (object instanceof Map) {
object = ((Map) object).get(paramsArr[index]);
} else {
object = POIPublicUtil.getMethod(paramsArr[index], object.getClass()).invoke(object,
new Object[] {});
}
return (index == paramsArr.length - 1) ? (object == null ? "" : object) : getValueDoWhile(
object, paramsArr, ++index);
}
}

+ 1
- 1
easypoi-test/src/main/java/org/jeecgframework/poi/word/WordExportUtilAnnExcelTest.java Datei anzeigen

@@ -33,7 +33,7 @@ public class WordExportUtilAnnExcelTest {
/**
* 简单导出没有图片和Excel
*/
//@Test
@Test
public void SimpleWordExport() {
Map<String, Object> map = new HashMap<String, Object>();
map.put("department", "Jeecg");


+ 1
- 1
easypoi-test/src/main/java/org/jeecgframework/poi/word/WordExportUtilBaseExcelTest.java Datei anzeigen

@@ -20,7 +20,7 @@ public class WordExportUtilBaseExcelTest {
/**
* 简单导出包含图片
*/
//@Test
@Test
public void imageWordExport() {
Map<String, Object> map = new HashMap<String, Object>();
map.put("department", "Jeecg");


Laden…
Abbrechen
Speichern